ZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5TWFuYWdlclNlcnZsZXQuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5TWFuYWdlclNlcnZsZXQuamF2YQppbmRleCA2MzllMjllLi4xODIxZTEwIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0LmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lNYW5hZ2VyU2VydmxldC5qYXZhCkBAIC05NSwxMyArOTUsMTMgQEAKIAkJTElTVCwgUkVOQU1FLCBDT1BZLCBERUxFVEUsIEVESVRGSUxFLCBBRERGT0xERVIsIERFU0NSSUJFUE9MSUNZRklMRSwgVklFV1BPTElDWSwgQUREU1VCU0NPUEUsIFNXSVRDSFZFUlNJT04sIEVYUE9SVCwgU0VBUkNITElTVAogCX0KIAotCXByaXZhdGUgUG9saWN5Q29udHJvbGxlciBwb2xpY3lDb250cm9sbGVyOwotCXB1YmxpYyBQb2xpY3lDb250cm9sbGVyIGdldFBvbGljeUNvbnRyb2xsZXIoKSB7CisJcHJpdmF0ZSBzdGF0aWMgUG9saWN5Q29udHJvbGxlciBwb2xpY3lDb250cm9sbGVyOworCXB1YmxpYyBzeW5jaHJvbml6ZWQgUG9saWN5Q29udHJvbGxlciBnZXRQb2xpY3lDb250cm9sbGVyKCkgewogCQlyZXR1cm4gcG9saWN5Q29udHJvbGxlcjsKIAl9CiAKLQlwdWJsaWMgdm9pZCBzZXRQb2xpY3lDb250cm9sbGVyKFBvbGljeUNvbnRyb2xsZXIgcG9saWN5Q29udHJvbGxlcikgewotCQl0aGlzLnBvbGljeUNvbnRyb2xsZXIgPSBwb2xpY3lDb250cm9sbGVyOworCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIHZvaWQgc2V0UG9saWN5Q29udHJvbGxlcihQb2xpY3lDb250cm9sbGVyIHBvbGljeUNvbnRyb2xsZXIpIHsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQucG9saWN5Q29udHJvbGxlciA9IHBvbGljeUNvbnRyb2xsZXI7CiAJfQogCiAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIENPTlRFTlRUWVBFID0gImFwcGxpY2F0aW9uL2pzb24iOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCiAJcHJpdmF0ZSBzdGF0aWMgUGF0aCBjbG9zZWRMb29wSnNvbkxvY2F0aW9uOwogCXByaXZhdGUgc3RhdGljIEpzb25BcnJheSBwb2xpY3lOYW1lczsKLQlwcml2YXRlIFN0cmluZyB0ZXN0VXNlcklkID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFVzZXJJZCA9IG51bGw7CiAJCiAJcHVibGljIHN0YXRpYyBKc29uQXJyYXkgZ2V0UG9saWN5TmFtZXMoKSB7CiAJCXJldHVybiBwb2xpY3lOYW1lczsKQEAgLTEyNiw3ICsxMjYsNiBAQAogCX0KIAogCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBzZXJ2aWNlVHlwZU5hbWVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotCXByaXZhdGUgTGlzdDxPYmplY3Q+IHBvbGljeURhdGE7CiAKIAlwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRTZXJ2aWNlVHlwZU5hbWVzTGlzdCgpIHsKIAkJcmV0dXJuIHNlcnZpY2VUeXBlTmFtZXNMaXN0OwpAQCAtMTkyLDcgKzE5MSwxMSBAQAogCQkJCWZpbGVPcGVyYXRpb24ocmVxdWVzdCwgcmVzcG9uc2UpOwogCQkJfQogCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJc2V0RXJyb3IoZSwgcmVzcG9uc2UpOworCQkJdHJ5IHsKKwkJCQlzZXRFcnJvcihlLCByZXNwb25zZSk7CisJCQl9Y2F0Y2goRXhjZXB0aW9uIGUxKXsKKwkJCQlMT0dHRVIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTI3MCw2ICsyNzMsNyBAQAogCQkJTW9kZSBtb2RlID0gTW9kZS52YWx1ZU9mKHBhcmFtcy5nZXRTdHJpbmcoIm1vZGUiKSk7CiAJCQlzd2l0Y2ggKG1vZGUpIHsKIAkJCWNhc2UgQURERk9MREVSOgorCQkJY2FzZSBBRERTVUJTQ09QRToKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBhZGRGb2xkZXIocGFyYW1zLCByZXF1ZXN0KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09QWToKQEAgLTI3OCwxMiArMjgyLDEwIEBACiAJCQljYXNlIERFTEVURToKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBkZWxldGUocGFyYW1zLCByZXF1ZXN0KTsKIAkJCQlicmVhazsKLQkJCWNhc2UgRURJVEZJTEU6IAorCQkJY2FzZSBFRElURklMRToKKwkJCWNhc2UgVklFV1BPTElDWToKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBlZGl0RmlsZShwYXJhbXMpOwogCQkJCWJyZWFrOwotCQkJY2FzZSBWSUVXUE9MSUNZOiAKLQkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBlZGl0RmlsZShwYXJhbXMpOwotCQkJCWJyZWFrOwkKIAkJCWNhc2UgTElTVDoKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBsaXN0KHBhcmFtcywgcmVxdWVzdCk7CiAJCQkJYnJlYWs7CkBAIC0yOTMsOSArMjk1LDYgQEAKIAkJCWNhc2UgREVTQ1JJQkVQT0xJQ1lGSUxFOgogCQkJCXJlc3BvbnNlSnNvbk9iamVjdCA9IGRlc2NyaWJlUG9saWN5KHBhcmFtcyk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIEFERFNVQlNDT1BFOgotCQkJCXJlc3BvbnNlSnNvbk9iamVjdCA9IGFkZEZvbGRlcihwYXJhbXMsIHJlcXVlc3QpOwotCQkJCWJyZWFrOwogCQkJY2FzZSBTV0lUQ0hWRVJTSU9OOgogCQkJCXJlc3BvbnNlSnNvbk9iamVjdCA9IHN3aXRjaFZlcnNpb24ocGFyYW1zLCByZXF1ZXN0KTsKIAkJCQlicmVhazsKQEAgLTMyMSw3ICszMjAsNyBAQAogCXByaXZhdGUgSlNPTk9iamVjdCBzZWFyY2hQb2xpY3lMaXN0KEpTT05PYmplY3QgcGFyYW1zLCBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgewogCQlTZXQ8U3RyaW5nPiBzY29wZXMgPSBudWxsOwogCQlMaXN0PFN0cmluZz4gcm9sZXMgPSBudWxsOwotCQlwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CiAJCUpTT05BcnJheSBwb2xpY3lMaXN0ID0gbnVsbDsKIAkJaWYocGFyYW1zLmhhcygicG9saWN5TGlzdCIpKXsKIAkJCXBvbGljeUxpc3QgPSAoSlNPTkFycmF5KSBwYXJhbXMuZ2V0KCJwb2xpY3lMaXN0Iik7CkBAIC0xMjMwLDcgKzEyMjksNyBAQAogCQkJCQkJCQkJCXBvbGljeUVudGl0eSA9IChQb2xpY3lFbnRpdHkpIG9iamVjdDsKIAkJCQkJCQkJCQlTdHJpbmcgcG9saWN5RW50aXR5TmFtZSA9IHBvbGljeUVudGl0eS5nZXRQb2xpY3lOYW1lKCkucmVwbGFjZSgiLnhtbCIsICIiKTsKIAkJCQkJCQkJCQlpbnQgcG9saWN5RW50aXR5VmVyc2lvbiA9IEludGVnZXIucGFyc2VJbnQocG9saWN5RW50aXR5TmFtZS5zdWJzdHJpbmcocG9saWN5RW50aXR5TmFtZS5sYXN0SW5kZXhPZigiLiIpKzEpKTsKLQkJCQkJCQkJCQlpZihwb2xpY3lFbnRpdHlWZXJzaW9uID4gaGlnaGVzdFZlcnNpb24peworCQkJCQkJCQkJCWlmKHBvbGljeUVudGl0eVZlcnNpb24gPiBoaWdoZXN0VmVyc2lvbiAmJiBwb2xpY3lFbnRpdHlWZXJzaW9uICE9IHZlcnNpb24pewogCQkJCQkJCQkJCQloaWdoZXN0VmVyc2lvbiA9IHBvbGljeUVudGl0eVZlcnNpb247CiAJCQkJCQkJCQkJfQogCQkJCQkJCQkJfQpAQCAtMTQ3Miw3ICsxNDcxLDcgQEAKIAkJcmV0dXJuIHRlc3RVc2VySWQ7CiAJfQogCi0JcHVibGljIHZvaWQgc2V0VGVzdFVzZXJJZChTdHJpbmcgdGVzdFVzZXJJZCkgewotCQl0aGlzLnRlc3RVc2VySWQgPSB0ZXN0VXNlcklkOworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUZXN0VXNlcklkKFN0cmluZyB0ZXN0VXNlcklkKSB7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0LnRlc3RVc2VySWQgPSB0ZXN0VXNlcklkOwogCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU5vdGlmaWNhdGlvbk1haWwuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5Tm90aWZpY2F0aW9uTWFpbC5qYXZhCmluZGV4IDliZDZlNGYuLjFhNTM1ZGMgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5Tm90aWZpY2F0aW9uTWFpbC5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5Tm90aWZpY2F0aW9uTWFpbC5qYXZhCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCQkJICsgJ1xuJyAgKyAnXG4nICsgIk1vdmVkIEJ5IDogIiArZW50aXR5SXRlbS5nZXRNb2RpZmllZEJ5KCkgKyAnXG4nICsgIk1vdmVkIFRpbWUgIDogIiArZGF0ZUZvcm1hdC5mb3JtYXQoZGF0ZSkgKyAnXG4nICsgJ1xuJyArICdcbicgKyAnXG4nICsgIlBvbGljeSBOb3RpZmljYXRpb24gU3lzdGVtICAocGxlYXNlIGRvbid0IHJlc3BvbmQgdG8gdGhpcyBlbWFpbCkiOwogCQl9CiAJCVN0cmluZyBwb2xpY3lGaWxlTmFtZSA9IGVudGl0eUl0ZW0uZ2V0UG9saWN5TmFtZSgpOwotCQlTdHJpbmcgY2hlY2tQb2xpY3lOYW1lID0gcG9saWN5RmlsZU5hbWU7CisJCVN0cmluZyBjaGVja1BvbGljeU5hbWUgPSBwb2xpY3lOYW1lOwogCQlpZihwb2xpY3lGaWxlTmFtZS5jb250YWlucygiLyIpKXsKIAkJCXBvbGljeUZpbGVOYW1lID0gcG9saWN5RmlsZU5hbWUuc3Vic3RyaW5nKDAsIHBvbGljeUZpbGVOYW1lLmluZGV4T2YoIi8iKSk7CiAJCQlwb2xpY3lGaWxlTmFtZSA9IHBvbGljeUZpbGVOYW1lLnJlcGxhY2UoIi8iLCBGaWxlLnNlcGFyYXRvcik7CkBAIC0xMTksNDAgKzExOSw0MSBAQAogCQlTdHJpbmcgcXVlcnkgPSAiZnJvbSBXYXRjaFBvbGljeU5vdGlmaWNhdGlvblRhYmxlIHdoZXJlIHBvbGljeU5hbWUgbGlrZSciICtwb2xpY3lGaWxlTmFtZSsiJSciOwogCQlib29sZWFuIHNlbmRGbGFnID0gZmFsc2U7CiAJCUxpc3Q8T2JqZWN0PiB3YXRjaExpc3QgPSBwb2xpY3lOb3RpZmljYXRpb25EYW8uZ2V0RGF0YUJ5UXVlcnkocXVlcnkpOwotCQlpZih3YXRjaExpc3QgIT0gbnVsbCl7Ci0JCQlpZih3YXRjaExpc3QuaXNFbXB0eSgpKXsKLQkJCQlmb3IoT2JqZWN0IHdhdGNoIDogd2F0Y2hMaXN0KXsKLQkJCQkJV2F0Y2hQb2xpY3lOb3RpZmljYXRpb25UYWJsZSBsaXN0ID0gKFdhdGNoUG9saWN5Tm90aWZpY2F0aW9uVGFibGUpIHdhdGNoOwotCQkJCQlTdHJpbmcgd2F0Y2hQb2xpY3lOYW1lID0gbGlzdC5nZXRQb2xpY3lOYW1lKCk7Ci0JCQkJCWlmKHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiQ29uZmlnXyIpIHx8IHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiQWN0aW9uXyIpIHx8IHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiRGVjaXNpb25fIikpewotCQkJCQkJaWYod2F0Y2hQb2xpY3lOYW1lLmVxdWFscyhjaGVja1BvbGljeU5hbWUpKXsKLQkJCQkJCQlzZW5kRmxhZyA9IHRydWU7Ci0JCQkJCQl9ZWxzZXsKLQkJCQkJCQlzZW5kRmxhZyA9IGZhbHNlOwotCQkJCQkJfQorCQlpZih3YXRjaExpc3QgIT0gbnVsbCAmJiAhd2F0Y2hMaXN0LmlzRW1wdHkoKSl7CisJCQlmb3IoT2JqZWN0IHdhdGNoIDogd2F0Y2hMaXN0KXsKKwkJCQlXYXRjaFBvbGljeU5vdGlmaWNhdGlvblRhYmxlIGxpc3QgPSAoV2F0Y2hQb2xpY3lOb3RpZmljYXRpb25UYWJsZSkgd2F0Y2g7CisJCQkJU3RyaW5nIHdhdGNoUG9saWN5TmFtZSA9IGxpc3QuZ2V0UG9saWN5TmFtZSgpOworCQkJCWlmKHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiQ29uZmlnXyIpIHx8IHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiQWN0aW9uXyIpIHx8IHdhdGNoUG9saWN5TmFtZS5jb250YWlucygiRGVjaXNpb25fIikpeworCQkJCQlpZih3YXRjaFBvbGljeU5hbWUuZXF1YWxzKGNoZWNrUG9saWN5TmFtZSkpeworCQkJCQkJc2VuZEZsYWcgPSB0cnVlOworCQkJCQl9ZWxzZXsKKwkJCQkJCXNlbmRGbGFnID0gZmFsc2U7CiAJCQkJCX0KLQkJCQkJaWYoc2VuZEZsYWcpewotCQkJCQkJQW5ub3RhdGlvbkNvbmZpZ0FwcGxpY2F0aW9uQ29udGV4dCBjdHggPSBudWxsOwotCQkJCQkJdHJ5IHsKLQkJCQkJCQl0byA9IGxpc3QuZ2V0TG9naW5JZHMoKSsiQCIrUG9saWN5Q29udHJvbGxlci5nZXRTbXRwQXBwbGljYXRpb25OYW1lKCk7Ci0JCQkJCQkJdG8gPSB0by50cmltKCk7Ci0JCQkJCQkJY3R4ID0gbmV3IEFubm90YXRpb25Db25maWdBcHBsaWNhdGlvbkNvbnRleHQoKTsKLQkJCQkJCQljdHgucmVnaXN0ZXIoUG9saWN5Tm90aWZpY2F0aW9uTWFpbC5jbGFzcyk7Ci0JCQkJCQkJY3R4LnJlZnJlc2goKTsKLQkJCQkJCQlKYXZhTWFpbFNlbmRlckltcGwgbWFpbFNlbmRlciA9IGN0eC5nZXRCZWFuKEphdmFNYWlsU2VuZGVySW1wbC5jbGFzcyk7Ci0JCQkJCQkJTWltZU1lc3NhZ2UgbWltZU1lc3NhZ2UgPSBtYWlsU2VuZGVyLmNyZWF0ZU1pbWVNZXNzYWdlKCk7Ci0JCQkJCQkJTWltZU1lc3NhZ2VIZWxwZXIgbWFpbE1zZyA9IG5ldyBNaW1lTWVzc2FnZUhlbHBlcihtaW1lTWVzc2FnZSk7Ci0JCQkJCQkJbWFpbE1zZy5zZXRGcm9tKG5ldyBJbnRlcm5ldEFkZHJlc3MoZnJvbSwgIlBvbGljeSBOb3RpZmljYXRpb24gU3lzdGVtIikpOwotCQkJCQkJCW1haWxNc2cuc2V0VG8odG8pOwotCQkJCQkJCW1haWxNc2cuc2V0U3ViamVjdChzdWJqZWN0KTsKLQkJCQkJCQltYWlsTXNnLnNldFRleHQobWVzc2FnZSk7Ci0JCQkJCQkJbWFpbFNlbmRlci5zZW5kKG1pbWVNZXNzYWdlKTsKLQkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfUFJPQ0VTU19GTE9XKyJFeGNlcHRpb24gT2NjdXJlZCBpbiBQb2xpY3kgTm90aWZpY2F0aW9uIiArZSk7Ci0JCQkJCQl9ZmluYWxseXsKLQkJCQkJCQlpZihjdHggIT0gbnVsbCl7Ci0JCQkJCQkJCWN0eC5jbG9zZSgpOwotCQkJCQkJCX0KKwkJCQl9CisJCQkJaWYoc2VuZEZsYWcpeworCQkJCQlBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0IGN0eCA9IG51bGw7CisJCQkJCXRyeSB7CisJCQkJCQl0byA9IGxpc3QuZ2V0TG9naW5JZHMoKSsiQCIrUG9saWN5Q29udHJvbGxlci5nZXRTbXRwRW1haWxFeHRlbnNpb24oKTsKKwkJCQkJCXRvID0gdG8udHJpbSgpOworCQkJCQkJY3R4ID0gbmV3IEFubm90YXRpb25Db25maWdBcHBsaWNhdGlvbkNvbnRleHQoKTsKKwkJCQkJCWN0eC5yZWdpc3RlcihQb2xpY3lOb3RpZmljYXRpb25NYWlsLmNsYXNzKTsKKwkJCQkJCWN0eC5yZWZyZXNoKCk7CisJCQkJCQlKYXZhTWFpbFNlbmRlckltcGwgbWFpbFNlbmRlciA9IGN0eC5nZXRCZWFuKEphdmFNYWlsU2VuZGVySW1wbC5jbGFzcyk7CisJCQkJCQlNaW1lTWVzc2FnZSBtaW1lTWVzc2FnZSA9IG1haWxTZW5kZXIuY3JlYXRlTWltZU1lc3NhZ2UoKTsKKwkJCQkJCU1pbWVNZXNzYWdlSGVscGVyIG1haWxNc2cgPSBuZXcgTWltZU1lc3NhZ2VIZWxwZXIobWltZU1lc3NhZ2UpOworCQkJCQkJbWFpbE1zZy5zZXRGcm9tKG5ldyBJbnRlcm5ldEFkZHJlc3MoZnJvbSwgIlBvbGljeSBOb3RpZmljYXRpb24gU3lzdGVtIikpOworCQkJCQkJbWFpbE1zZy5zZXRUbyh0byk7CisJCQkJCQltYWlsTXNnLnNldFN1YmplY3Qoc3ViamVjdCk7CisJCQkJCQltYWlsTXNnLnNldFRleHQobWVzc2FnZSk7CisJCQkJCQltYWlsU2VuZGVyLnNlbmQobWltZU1lc3NhZ2UpOworCQkJCQkJaWYobW9kZS5lcXVhbHNJZ25vcmVDYXNlKCJSZW5hbWUiKSB8fCBtb2RlLmNvbnRhaW5zKCJEZWxldGUiKSB8fCBtb2RlLmNvbnRhaW5zKCJNb3ZlIikpeworCQkJCQkJCXBvbGljeU5vdGlmaWNhdGlvbkRhby5kZWxldGUod2F0Y2gpOworCQkJCQkJfQorCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfUFJPQ0VTU19GTE9XKyJFeGNlcHRpb24gT2NjdXJlZCBpbiBQb2xpY3kgTm90aWZpY2F0aW9uIiArZSk7CisJCQkJCX1maW5hbGx5eworCQkJCQkJaWYoY3R4ICE9IG51bGwpeworCQkJCQkJCWN0eC5jbG9zZSgpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJfQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lSZXN0Q29udHJvbGxlci5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lSZXN0Q29udHJvbGxlci5qYXZhCmluZGV4IDJjMDRiYzYuLjA4ZWY5OWYgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5UmVzdENvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeVJlc3RDb250cm9sbGVyLmphdmEKQEAgLTg2LDkwICs4Niw5MCBAQAogCUNvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvOwogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BvbGljeWNyZWF0aW9uL3NhdmVfcG9saWN5In0sIG1ldGhvZD17UmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IHBvbGljeUNyZWF0aW9uQ29udHJvbGxlcihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJCisJcHVibGljIHZvaWQgcG9saWN5Q3JlYXRpb25Db250cm9sbGVyKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB7CiAJCVN0cmluZyB1c2VySWQgPSBVc2VyVXRpbHMuZ2V0VXNlclNlc3Npb24ocmVxdWVzdCkuZ2V0T3JnVXNlcklkKCk7CiAJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOwotCQlKc29uTm9kZSByb290ID0gbWFwcGVyLnJlYWRUcmVlKHJlcXVlc3QuZ2V0UmVhZGVyKCkpOwotCQkKLQkJUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5RGF0YSA9IG1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldCgicG9saWN5IikudG9TdHJpbmcoKSwgUG9saWN5UmVzdEFkYXB0ZXIuY2xhc3MpOwotCQotCQlpZigiZmlsZSIuZXF1YWxzKHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgidHlwZSIpLnRvU3RyaW5nKCkucmVwbGFjZSgiXCIiLCAiIikpKXsKLQkJCXBvbGljeURhdGEuc2V0RWRpdFBvbGljeSh0cnVlKTsKLQkJfQotCQlpZihyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInBhdGgiKS5zaXplKCkgIT0gMCl7Ci0JCQlTdHJpbmcgZGlyTmFtZSA9ICIiOwotCQkJZm9yKGludCBpID0gMDsgaSA8IHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgicGF0aCIpLnNpemUoKTsgaSsrKXsKLQkJCQlkaXJOYW1lID0gZGlyTmFtZS5yZXBsYWNlKCJcIiIsICIiKSArIHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgicGF0aCIpLmdldChpKS50b1N0cmluZygpLnJlcGxhY2UoIlwiIiwgIiIpICsgRmlsZS5zZXBhcmF0b3I7CisJCXRyeXsKKwkJCUpzb25Ob2RlIHJvb3QgPSBtYXBwZXIucmVhZFRyZWUocmVxdWVzdC5nZXRSZWFkZXIoKSk7CisKKwkJCVBvbGljeVJlc3RBZGFwdGVyIHBvbGljeURhdGEgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQoInBvbGljeSIpLnRvU3RyaW5nKCksIFBvbGljeVJlc3RBZGFwdGVyLmNsYXNzKTsKKworCQkJaWYoImZpbGUiLmVxdWFscyhyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInR5cGUiKS50b1N0cmluZygpLnJlcGxhY2UoIlwiIiwgIiIpKSl7CisJCQkJcG9saWN5RGF0YS5zZXRFZGl0UG9saWN5KHRydWUpOwogCQkJfQotCQkJaWYocG9saWN5RGF0YS5pc0VkaXRQb2xpY3koKSl7Ci0JCQkJcG9saWN5RGF0YS5zZXREb21haW5EaXIoZGlyTmFtZS5zdWJzdHJpbmcoMCwgZGlyTmFtZS5sYXN0SW5kZXhPZihGaWxlLnNlcGFyYXRvcikpKTsKKwkJCWlmKHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgicGF0aCIpLnNpemUoKSAhPSAwKXsKKwkJCQlTdHJpbmcgZGlyTmFtZSA9ICIiOworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInBhdGgiKS5zaXplKCk7IGkrKyl7CisJCQkJCWRpck5hbWUgPSBkaXJOYW1lLnJlcGxhY2UoIlwiIiwgIiIpICsgcm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJwYXRoIikuZ2V0KGkpLnRvU3RyaW5nKCkucmVwbGFjZSgiXCIiLCAiIikgKyBGaWxlLnNlcGFyYXRvcjsKKwkJCQl9CisJCQkJaWYocG9saWN5RGF0YS5pc0VkaXRQb2xpY3koKSl7CisJCQkJCXBvbGljeURhdGEuc2V0RG9tYWluRGlyKGRpck5hbWUuc3Vic3RyaW5nKDAsIGRpck5hbWUubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpKSk7CisJCQkJfWVsc2V7CisJCQkJCXBvbGljeURhdGEuc2V0RG9tYWluRGlyKGRpck5hbWUgKyByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoIm5hbWUiKS50b1N0cmluZygpLnJlcGxhY2UoIlwiIiwgIiIpKTsKKwkJCQl9CiAJCQl9ZWxzZXsKLQkJCQlwb2xpY3lEYXRhLnNldERvbWFpbkRpcihkaXJOYW1lICsgcm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJuYW1lIikudG9TdHJpbmcoKS5yZXBsYWNlKCJcIiIsICIiKSk7CisJCQkJU3RyaW5nIGRvbWFpbiA9IHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQoIm1vZGVsIikuZ2V0KCJuYW1lIikudG9TdHJpbmcoKTsKKwkJCQlpZihkb21haW4uY29udGFpbnMoIi8iKSl7CisJCQkJCWRvbWFpbiA9IGRvbWFpbi5zdWJzdHJpbmcoMCwgZG9tYWluLmxhc3RJbmRleE9mKCcvJykpLnJlcGxhY2UoIi8iLCBGaWxlLnNlcGFyYXRvcik7CisJCQkJfQorCQkJCWRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKCJcIiIsICIiKTsKKwkJCQlwb2xpY3lEYXRhLnNldERvbWFpbkRpcihkb21haW4pOwogCQkJfQotCQl9ZWxzZXsKLQkJCVN0cmluZyBkb21haW4gPSByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KCJtb2RlbCIpLmdldCgibmFtZSIpLnRvU3RyaW5nKCk7Ci0JCQlpZihkb21haW4uY29udGFpbnMoIi8iKSl7Ci0JCQkJZG9tYWluID0gZG9tYWluLnN1YnN0cmluZygwLCBkb21haW4ubGFzdEluZGV4T2YoJy8nKSkucmVwbGFjZSgiLyIsIEZpbGUuc2VwYXJhdG9yKTsKLQkJCX0KLQkJCWRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKCJcIiIsICIiKTsKLQkJCXBvbGljeURhdGEuc2V0RG9tYWluRGlyKGRvbWFpbik7Ci0JCX0KLQkJCi0JCWlmKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpICE9IG51bGwpewotCQkJaWYoIkNsb3NlZExvb3BfRmF1bHQiLmVxdWFsc0lnbm9yZUNhc2UocG9saWN5RGF0YS5nZXRDb25maWdQb2xpY3lUeXBlKCkpKXsKLQkJCQlDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyIGZhdWx0Q29udHJvbGxlciA9IG5ldyBDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyKCk7Ci0JCQkJcG9saWN5RGF0YSA9IGZhdWx0Q29udHJvbGxlci5zZXREYXRhVG9Qb2xpY3lSZXN0QWRhcHRlcihwb2xpY3lEYXRhLCByb290KTsKLQkJCX1lbHNlIGlmKCJGaXJld2FsbCBDb25maWciLmVxdWFsc0lnbm9yZUNhc2UocG9saWN5RGF0YS5nZXRDb25maWdQb2xpY3lUeXBlKCkpKXsKLQkJCQlDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIgZndDb250cm9sbGVyID0gbmV3IENyZWF0ZUZpcmV3YWxsQ29udHJvbGxlcigpOwotCQkJCXBvbGljeURhdGEgPSBmd0NvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSk7Ci0JCQl9ZWxzZSBpZigiTWljcm8gU2VydmljZSIuZXF1YWxzSWdub3JlQ2FzZShwb2xpY3lEYXRhLmdldENvbmZpZ1BvbGljeVR5cGUoKSkpewotCQkJCUNyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyIG1zQ29udHJvbGxlciA9IG5ldyBDcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlcigpOwotCQkJCXBvbGljeURhdGEgPSBtc0NvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSwgcm9vdCk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXBvbGljeURhdGEuc2V0VXNlcklkKHVzZXJJZCk7Ci0JCQotCQlTdHJpbmcgcmVzdWx0OwotCQlTdHJpbmcgYm9keSA9IFBvbGljeVV0aWxzLm9iamVjdFRvSnNvblN0cmluZyhwb2xpY3lEYXRhKTsKLQkJU3RyaW5nIHVyaSA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOwotCQlSZXNwb25zZUVudGl0eTw/PiByZXNwb25zZUVudGl0eSA9IHNlbmRUb1BBUChib2R5LCB1cmksIEh0dHBNZXRob2QuUE9TVCk7Ci0JCWlmKHJlc3BvbnNlRW50aXR5ICE9IG51bGwgJiYgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLmVxdWFscyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX0NPTkZMSUNUKSl7Ci0JCQlyZXN1bHQgPSAiUG9saWN5RXhpc3RzIjsKLQkJfWVsc2UgaWYocmVzcG9uc2VFbnRpdHkgIT0gbnVsbCl7Ci0JCQlyZXN1bHQgPSAgcmVzcG9uc2VFbnRpdHkuZ2V0Qm9keSgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgcG9saWN5TmFtZSA9IHJlc3BvbnNlRW50aXR5LmdldEhlYWRlcnMoKS5nZXQoInBvbGljeU5hbWUiKS5nZXQoMCk7Ci0JCQlpZihwb2xpY3lEYXRhLmlzRWRpdFBvbGljeSgpICYmICJzdWNjZXNzIi5lcXVhbHNJZ25vcmVDYXNlKHJlc3VsdCkpewotCQkJCVBvbGljeU5vdGlmaWNhdGlvbk1haWwgZW1haWwgPSBuZXcgUG9saWN5Tm90aWZpY2F0aW9uTWFpbCgpOwotCQkJCVN0cmluZyBtb2RlID0gIkVkaXRQb2xpY3kiOwotCQkJCVN0cmluZyB3YXRjaFBvbGljeU5hbWUgPSBwb2xpY3lOYW1lLnJlcGxhY2UoIi54bWwiLCAiIik7Ci0JCQkJU3RyaW5nIHZlcnNpb24gPSB3YXRjaFBvbGljeU5hbWUuc3Vic3RyaW5nKHdhdGNoUG9saWN5TmFtZS5sYXN0SW5kZXhPZignLicpKzEpOwotCQkJCXdhdGNoUG9saWN5TmFtZSA9IHdhdGNoUG9saWN5TmFtZS5zdWJzdHJpbmcoMCwgd2F0Y2hQb2xpY3lOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoIi4iLCBGaWxlLnNlcGFyYXRvcik7Ci0JCQkJU3RyaW5nIHBvbGljeVZlcnNpb25OYW1lID0gd2F0Y2hQb2xpY3lOYW1lLnJlcGxhY2UoIi4iLCBGaWxlLnNlcGFyYXRvcik7Ci0JCQkJd2F0Y2hQb2xpY3lOYW1lID0gd2F0Y2hQb2xpY3lOYW1lICsgIi4iICsgdmVyc2lvbiArICIueG1sIjsKLQkJCQlQb2xpY3lWZXJzaW9uIGVudGl0eUl0ZW0gPSBuZXcgUG9saWN5VmVyc2lvbigpOwotCQkJCWVudGl0eUl0ZW0uc2V0UG9saWN5TmFtZShwb2xpY3lWZXJzaW9uTmFtZSk7Ci0JCQkJZW50aXR5SXRlbS5zZXRBY3RpdmVWZXJzaW9uKEludGVnZXIucGFyc2VJbnQodmVyc2lvbikpOwotCQkJCWVudGl0eUl0ZW0uc2V0TW9kaWZpZWRCeSh1c2VySWQpOwotCQkJCWVtYWlsLnNlbmRNYWlsKGVudGl0eUl0ZW0sIHdhdGNoUG9saWN5TmFtZSwgbW9kZSwgY29tbW9uQ2xhc3NEYW8pOwotCQkJfQotCQl9ZWxzZXsKLQkJCXJlc3VsdCA9ICAiUmVzcG9uc2UgaXMgbnVsbCBmcm9tIFBBUCI7Ci0JCX0KLQkJCi0JCi0JCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q2hhcmFjdGVyZW5jb2RpbmcoKSk7Ci0JCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q29udGVudHR5cGUoKSk7Ci0JCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoUG9saWN5Q29udHJvbGxlci5nZXRDaGFyYWN0ZXJlbmNvZGluZygpKTsKIAotCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQkJU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhyZXN1bHQpOwotCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BvbGljeURhdGE6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7Ci0JCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4gbnVsbDsKKwkJCWlmKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpICE9IG51bGwpeworCQkJCWlmKCJDbG9zZWRMb29wX0ZhdWx0Ii5lcXVhbHNJZ25vcmVDYXNlKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpKSl7CisJCQkJCUNyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIgZmF1bHRDb250cm9sbGVyID0gbmV3IENyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIoKTsKKwkJCQkJcG9saWN5RGF0YSA9IGZhdWx0Q29udHJvbGxlci5zZXREYXRhVG9Qb2xpY3lSZXN0QWRhcHRlcihwb2xpY3lEYXRhLCByb290KTsKKwkJCQl9ZWxzZSBpZigiRmlyZXdhbGwgQ29uZmlnIi5lcXVhbHNJZ25vcmVDYXNlKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpKSl7CisJCQkJCUNyZWF0ZUZpcmV3YWxsQ29udHJvbGxlciBmd0NvbnRyb2xsZXIgPSBuZXcgQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyKCk7CisJCQkJCXBvbGljeURhdGEgPSBmd0NvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSk7CisJCQkJfWVsc2UgaWYoIk1pY3JvIFNlcnZpY2UiLmVxdWFsc0lnbm9yZUNhc2UocG9saWN5RGF0YS5nZXRDb25maWdQb2xpY3lUeXBlKCkpKXsKKwkJCQkJQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIgbXNDb250cm9sbGVyID0gbmV3IENyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyKCk7CisJCQkJCXBvbGljeURhdGEgPSBtc0NvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSwgcm9vdCk7CisJCQkJfQorCQkJfQogCisJCQlwb2xpY3lEYXRhLnNldFVzZXJJZCh1c2VySWQpOworCisJCQlTdHJpbmcgcmVzdWx0OworCQkJU3RyaW5nIGJvZHkgPSBQb2xpY3lVdGlscy5vYmplY3RUb0pzb25TdHJpbmcocG9saWN5RGF0YSk7CisJCQlTdHJpbmcgdXJpID0gcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCk7CisJCQlSZXNwb25zZUVudGl0eTw/PiByZXNwb25zZUVudGl0eSA9IHNlbmRUb1BBUChib2R5LCB1cmksIEh0dHBNZXRob2QuUE9TVCk7CisJCQlpZihyZXNwb25zZUVudGl0eSAhPSBudWxsICYmIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5lcXVhbHMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19DT05GTElDVCkpeworCQkJCXJlc3VsdCA9ICJQb2xpY3lFeGlzdHMiOworCQkJfWVsc2UgaWYocmVzcG9uc2VFbnRpdHkgIT0gbnVsbCl7CisJCQkJcmVzdWx0ID0gIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS50b1N0cmluZygpOworCQkJCVN0cmluZyBwb2xpY3lOYW1lID0gcmVzcG9uc2VFbnRpdHkuZ2V0SGVhZGVycygpLmdldCgicG9saWN5TmFtZSIpLmdldCgwKTsKKwkJCQlpZihwb2xpY3lEYXRhLmlzRWRpdFBvbGljeSgpICYmICJzdWNjZXNzIi5lcXVhbHNJZ25vcmVDYXNlKHJlc3VsdCkpeworCQkJCQlQb2xpY3lOb3RpZmljYXRpb25NYWlsIGVtYWlsID0gbmV3IFBvbGljeU5vdGlmaWNhdGlvbk1haWwoKTsKKwkJCQkJU3RyaW5nIG1vZGUgPSAiRWRpdFBvbGljeSI7CisJCQkJCVN0cmluZyB3YXRjaFBvbGljeU5hbWUgPSBwb2xpY3lOYW1lLnJlcGxhY2UoIi54bWwiLCAiIik7CisJCQkJCVN0cmluZyB2ZXJzaW9uID0gd2F0Y2hQb2xpY3lOYW1lLnN1YnN0cmluZyh3YXRjaFBvbGljeU5hbWUubGFzdEluZGV4T2YoJy4nKSsxKTsKKwkJCQkJd2F0Y2hQb2xpY3lOYW1lID0gd2F0Y2hQb2xpY3lOYW1lLnN1YnN0cmluZygwLCB3YXRjaFBvbGljeU5hbWUubGFzdEluZGV4T2YoJy4nKSkucmVwbGFjZSgiLiIsIEZpbGUuc2VwYXJhdG9yKTsKKwkJCQkJU3RyaW5nIHBvbGljeVZlcnNpb25OYW1lID0gd2F0Y2hQb2xpY3lOYW1lLnJlcGxhY2UoIi4iLCBGaWxlLnNlcGFyYXRvcik7CisJCQkJCXdhdGNoUG9saWN5TmFtZSA9IHdhdGNoUG9saWN5TmFtZSArICIuIiArIHZlcnNpb24gKyAiLnhtbCI7CisJCQkJCVBvbGljeVZlcnNpb24gZW50aXR5SXRlbSA9IG5ldyBQb2xpY3lWZXJzaW9uKCk7CisJCQkJCWVudGl0eUl0ZW0uc2V0UG9saWN5TmFtZShwb2xpY3lWZXJzaW9uTmFtZSk7CisJCQkJCWVudGl0eUl0ZW0uc2V0QWN0aXZlVmVyc2lvbihJbnRlZ2VyLnBhcnNlSW50KHZlcnNpb24pKTsKKwkJCQkJZW50aXR5SXRlbS5zZXRNb2RpZmllZEJ5KHVzZXJJZCk7CisJCQkJCWVtYWlsLnNlbmRNYWlsKGVudGl0eUl0ZW0sIHdhdGNoUG9saWN5TmFtZSwgbW9kZSwgY29tbW9uQ2xhc3NEYW8pOworCQkJCX0KKwkJCX1lbHNleworCQkJCXJlc3VsdCA9ICAiUmVzcG9uc2UgaXMgbnVsbCBmcm9tIFBBUCI7CisJCQl9CisKKwkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q2hhcmFjdGVyZW5jb2RpbmcoKSk7CisJCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZShQb2xpY3lDb250cm9sbGVyLmdldENvbnRlbnR0eXBlKCkpOworCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOworCisJCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKwkJCVN0cmluZyByZXNwb25zZVN0cmluZyA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVzdWx0KTsKKwkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KCJ7cG9saWN5RGF0YTogIiArIHJlc3BvbnNlU3RyaW5nICsgIn0iKTsKKwkJCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOworCQl9Y2F0Y2goRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCB3aGlsZSBzYXZpbmcgcG9saWN5IiAsIGUpOworCQl9CiAJfQogCQogCQpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJfQogCQogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9nZXREaWN0aW9uYXJ5LyoifSwgbWV0aG9kPXtSZXF1ZXN0TWV0aG9kLkdFVH0pCi0JcHVibGljIHZvaWQgZ2V0RGljdGlvbmFyeUNvbnRyb2xsZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgZ2V0RGljdGlvbmFyeUNvbnRyb2xsZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpewogCQlTdHJpbmcgdXJpID0gcmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkucmVwbGFjZSgiL2dldERpY3Rpb25hcnkiLCAiIik7CiAJCVN0cmluZyBib2R5ID0gbnVsbDsKIAkJUmVzcG9uc2VFbnRpdHk8Pz4gcmVzcG9uc2VFbnRpdHkgPSBzZW5kVG9QQVAobnVsbCwgdXJpLCBIdHRwTWV0aG9kLkdFVCk7CkBAIC0zNTMsNyArMzUzLDExIEBACiAJCX1lbHNlewogCQkJYm9keSA9ICIiOwogCQl9Ci0JCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGJvZHkpOworCQl0cnkgeworCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoYm9keSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIG9jY3VyZWQgd2hpbGUgZ2V0dGluZyBEaWN0aW9uYXJ5IGVudHJpZXMiLCBlKTsKKwkJfQogCX0KIAkKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvc2F2ZURpY3Rpb25hcnkvKi8qIn0sIG1ldGhvZD17UmVxdWVzdE1ldGhvZC5QT1NUfSkKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9BY3Rpb25Qb2xpY3lDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWN0aW9uUG9saWN5Q29udHJvbGxlci5qYXZhCmluZGV4IDJjNjhkZjYuLmM4ODQxMmIgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9BY3Rpb25Qb2xpY3lDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0FjdGlvblBvbGljeUNvbnRyb2xsZXIuamF2YQpAQCAtNTgsNyArNTgsOSBAQAogcHVibGljIGNsYXNzIEFjdGlvblBvbGljeUNvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXJ7CiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUiA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKEFjdGlvblBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOwogCQotCXB1YmxpYyBBY3Rpb25Qb2xpY3lDb250cm9sbGVyKCl7fQorCXB1YmxpYyBBY3Rpb25Qb2xpY3lDb250cm9sbGVyKCl7CisJCS8vRGVmYXVsdCBDb25zdHJ1Y3RvcgorCX0KIAogCXByaXZhdGUgQXJyYXlMaXN0PE9iamVjdD4gYXR0cmlidXRlTGlzdDsKIAlwcm90ZWN0ZWQgIExpbmtlZExpc3Q8SW50ZWdlcj4gcnVsZUFsZ29pcnRobVRyYWNrZXI7CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1BhcmFtQ29udHJvbGxlci5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUJSTVNQYXJhbUNvbnRyb2xsZXIuamF2YQppbmRleCA4MjU4YjhiLi40ZjQ4MzhkIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1BhcmFtQ29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyLmphdmEKQEAgLTQyLDE3ICs0MiwxOSBAQAogaW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJFbGVtZW50OwogCiBpbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb21tb24ubG9nZ2luZy5mbGV4bG9nZ2VyLkZsZXhMb2dnZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29tbW9uLmxvZ2dpbmcuZmxleGxvZ2dlci5Mb2dnZXI7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5hZGFwdGVyLlBvbGljeVJlc3RBZGFwdGVyOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuZGFvLkNvbW1vbkNsYXNzRGFvOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuanBhLkJSTVNQYXJhbVRlbXBsYXRlOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuanBhLlBvbGljeUVudGl0eTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS54YWNtbC5hcGkuWEFDTUxFcnJvckNvbnN0YW50czsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvcnRhbHNkay5jb3JlLmNvbnRyb2xsZXIuUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuQ29udHJvbGxlcjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1hcHBpbmc7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuc2VydmxldC5Nb2RlbEFuZFZpZXc7CiAKLWltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS54YWNtbC5hcGkuWEFDTUxFcnJvckNvbnN0YW50czsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuRGVzZXJpYWxpemF0aW9uRmVhdHVyZTsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKQEAgLTY5LDkgKzcxLDYgQEAKIGltcG9ydCBvYXNpcy5uYW1lcy50Yy54YWNtbC5fM18wLmNvcmUuc2NoZW1hLndkXzE3LlJ1bGVUeXBlOwogaW1wb3J0IG9hc2lzLm5hbWVzLnRjLnhhY21sLl8zXzAuY29yZS5zY2hlbWEud2RfMTcuVGFyZ2V0VHlwZTsKIAotaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbW1vbi5sb2dnaW5nLmZsZXhsb2dnZXIuRmxleExvZ2dlcjsgCi1pbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29tbW9uLmxvZ2dpbmcuZmxleGxvZ2dlci5Mb2dnZXI7Ci0KIEBDb250cm9sbGVyCiBAUmVxdWVzdE1hcHBpbmcoIi8iKQogcHVibGljIGNsYXNzIENyZWF0ZUJSTVNQYXJhbUNvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXIgewpAQCAtNzksNiArNzgsMTQgQEAKIAogCXByaXZhdGUgc3RhdGljIENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvOwogCisJcHVibGljIHN0YXRpYyBDb21tb25DbGFzc0RhbyBnZXRDb21tb25DbGFzc0RhbygpIHsKKwkJcmV0dXJuIGNvbW1vbkNsYXNzRGFvOworCX0KKworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb21tb25DbGFzc0RhbyhDb21tb25DbGFzc0RhbyBjb21tb25DbGFzc0RhbykgeworCQlDcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyLmNvbW1vbkNsYXNzRGFvID0gY29tbW9uQ2xhc3NEYW87CisJfQorCQogCUBBdXRvd2lyZWQKIAlwcml2YXRlIENyZWF0ZUJSTVNQYXJhbUNvbnRyb2xsZXIoQ29tbW9uQ2xhc3NEYW8gY29tbW9uQ2xhc3NEYW8pewogCQlDcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyLmNvbW1vbkNsYXNzRGFvID0gY29tbW9uQ2xhc3NEYW87CkBAIC05MCwzNSArOTcsMzYgQEAKIAlwcml2YXRlIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGR5bmFtaWNMYXlvdXRNYXA7CiAJCiAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJybXNUZW1wbGF0ZVZsYXVlID0gIjwkJUJSTVNQYXJhbVRlbXBsYXRlPSI7Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFN0cmluZyA9ICJTdHJpbmciOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBzdHJpbmcgPSAiU3RyaW5nIjsKIAogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BvbGljeUNvbnRyb2xsZXIvZ2V0QlJNU1RlbXBsYXRlRGF0YS5odG0ifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IGdldEJSTVNQYXJhbVBvbGljeVJ1bGVEYXRhKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uewotCQlkeW5hbWljTGF5b3V0TWFwID0gbmV3IEhhc2hNYXA8PigpOwotCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwotCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKLQkJSnNvbk5vZGUgcm9vdCA9IG1hcHBlci5yZWFkVHJlZShyZXF1ZXN0LmdldFJlYWRlcigpKTsKLQkJU3RyaW5nIHJ1bGUgPSBmaW5kUnVsZShyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCJeXCJ8XCIkIiwgIiIpKTsKLQkJZ2VuZXJhdGVVSShydWxlKTsKLQkJcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoUG9saWN5Q29udHJvbGxlci5nZXRDaGFyYWN0ZXJlbmNvZGluZygpKTsKLQkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoUG9saWN5Q29udHJvbGxlci5nZXRDb250ZW50dHlwZSgpKTsKLQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOworCXB1YmxpYyB2b2lkIGdldEJSTVNQYXJhbVBvbGljeVJ1bGVEYXRhKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKXsKKwkJdHJ5eworCQkJZHluYW1pY0xheW91dE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKKwkJCUpzb25Ob2RlIHJvb3QgPSBtYXBwZXIucmVhZFRyZWUocmVxdWVzdC5nZXRSZWFkZXIoKSk7CisJCQlTdHJpbmcgcnVsZSA9IGZpbmRSdWxlKHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS50b1N0cmluZygpLnJlcGxhY2VBbGwoIl5cInxcIiQiLCAiIikpOworCQkJZ2VuZXJhdGVVSShydWxlKTsKKwkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q2hhcmFjdGVyZW5jb2RpbmcoKSk7CisJCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZShQb2xpY3lDb250cm9sbGVyLmdldENvbnRlbnR0eXBlKCkpOworCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOwogCi0JCVByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotCQlTdHJpbmcgcmVzcG9uc2VTdHJpbmcgPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKGR5bmFtaWNMYXlvdXRNYXApOwotCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BvbGljeURhdGE6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7Ci0JCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOwotCQlyZXR1cm4gbnVsbDsKKwkJCVByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworCQkJU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhkeW5hbWljTGF5b3V0TWFwKTsKKwkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KCJ7cG9saWN5RGF0YTogIiArIHJlc3BvbnNlU3RyaW5nICsgIn0iKTsKKwkJCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOworCQl9Y2F0Y2goRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCB3aGlsZSBnZXR0aW5nIEJSTVMgUnVsZSBkYXRhIiAsIGUpOworCQl9CiAJfQogCiAJcHJvdGVjdGVkIFN0cmluZyBmaW5kUnVsZShTdHJpbmcgcnVsZVRlbXBsYXRlKSB7Ci0JCUxpc3Q8T2JqZWN0PiBkYXRhcyA9IGNvbW1vbkNsYXNzRGFvLmdldERhdGEoQlJNU1BhcmFtVGVtcGxhdGUuY2xhc3MpOwotCQlmb3IgKE9iamVjdCBkYXRhOiBkYXRhcyl7Ci0JCQlCUk1TUGFyYW1UZW1wbGF0ZSAgYlJNU1BhcmFtVGVtcGxhdGUgPSAoQlJNU1BhcmFtVGVtcGxhdGUpIGRhdGE7Ci0JCQlpZihiUk1TUGFyYW1UZW1wbGF0ZS5nZXRSdWxlTmFtZSgpLmVxdWFscyhydWxlVGVtcGxhdGUpKXsKLQkJCQlyZXR1cm4gYlJNU1BhcmFtVGVtcGxhdGUuZ2V0UnVsZSgpOwotCQkJfQorCQlMaXN0PE9iamVjdD4gZGF0YXMgPSBjb21tb25DbGFzc0Rhby5nZXREYXRhQnlJZChCUk1TUGFyYW1UZW1wbGF0ZS5jbGFzcywgInJ1bGVOYW1lIiwgcnVsZVRlbXBsYXRlKTsKKwkJaWYoZGF0YXMgIT0gbnVsbCAmJiAhZGF0YXMuaXNFbXB0eSgpKXsKKwkJCUJSTVNQYXJhbVRlbXBsYXRlICBiUk1TUGFyYW1UZW1wbGF0ZSA9IChCUk1TUGFyYW1UZW1wbGF0ZSkgZGF0YXMuZ2V0KDApOworCQkJcmV0dXJuIGJSTVNQYXJhbVRlbXBsYXRlLmdldFJ1bGUoKTsKIAkJfQogCQlyZXR1cm4gbnVsbDsKIAl9CkBAIC0xOTcsMTAgKzIwNSwxMCBAQAogCQkJCQkJcG9saWN5TG9nZ2VyLmluZm8oIkp1c3QgZm9yIExvZ2dpbmciK2UpOwogCQkJCQkJbmV4dENvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07CiAJCQkJCX0KLQkJCQkJaWYgKG5leHRDb21wb25lbnQuc3RhcnRzV2l0aChTdHJpbmcpKSB7CisJCQkJCWlmIChuZXh0Q29tcG9uZW50LnN0YXJ0c1dpdGgoc3RyaW5nKSkgewogCQkJCQkJdHlwZSA9ICJTdHJpbmciOwogCQkJCQkJY3JlYXRlRmllbGQoY2FwdGlvbiwgdHlwZSk7Ci0JCQkJCQljYXB0aW9uID0gbmV4dENvbXBvbmVudC5yZXBsYWNlKFN0cmluZywgIiIpOworCQkJCQkJY2FwdGlvbiA9IG5leHRDb21wb25lbnQucmVwbGFjZShzdHJpbmcsICIiKTsKIAkJCQkJfSBlbHNlIGlmIChuZXh0Q29tcG9uZW50LnN0YXJ0c1dpdGgoImludCIpKSB7CiAJCQkJCQl0eXBlID0gImludCI7CiAJCQkJCQljcmVhdGVGaWVsZChjYXB0aW9uLCB0eXBlKTsKQEAgLTM1Nyw3ICszNjUsNyBAQAogCQlyZXR1cm4gZm9ybWF0ZURhdGU7CiAJfQogCS8vIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgVUkgZnJvbSBydWxlIGNvbmZpZ3VyYXRpb24KLQlwcml2YXRlIHZvaWQgcGFyYW1VSUdlbmVyYXRlKFBvbGljeVJlc3RBZGFwdGVyIHBvbGljeUFkYXB0ZXIsIFBvbGljeUVudGl0eSBlbnRpdHkpIHsKKwlwdWJsaWMgdm9pZCBwYXJhbVVJR2VuZXJhdGUoUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5QWRhcHRlciwgUG9saWN5RW50aXR5IGVudGl0eSkgewogCQlTdHJpbmcgZGF0YSA9IGVudGl0eS5nZXRDb25maWd1cmF0aW9uRGF0YSgpLmdldENvbmZpZ0JvZHkoKTsKIAkJaWYoZGF0YSAhPSBudWxsKXsKIAkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q29uZmlnSG9tZSgpICtGaWxlLnNlcGFyYXRvcisgZW50aXR5LmdldENvbmZpZ3VyYXRpb25EYXRhKCkuZ2V0Q29uZmlndXJhdGlvbk5hbWUoKSk7CkBAIC00NzEsNyArNDc5LDcgQEAKIAkvLyBzZXQgVmlldyBSdWxlCiAJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BvbGljeUNvbnRyb2xsZXIvVmlld0JSTVNQYXJhbVBvbGljeVJ1bGUuaHRtIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyBzZXRWaWV3UnVsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbnsKKwlwdWJsaWMgdm9pZCBzZXRWaWV3UnVsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CiAJCXRyeSB7CiAJCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwogCQkJbWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7CkBAIC00OTMsNyArNTAxLDcgQEAKIAkJCWlmKHBvbGljeURhdGEuZ2V0UnVsZURhdGEoKS5zaXplKCkgPiAwKXsgCiAJCQkJZm9yKE9iamVjdCBrZXlWYWx1ZTogcG9saWN5RGF0YS5nZXRSdWxlRGF0YSgpLmtleVNldCgpKXsgCiAJCQkJCVN0cmluZyBrZXkgPSBrZXlWYWx1ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsga2V5VmFsdWUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSk7IAotCQkJCQlpZiAoU3RyaW5nLmVxdWFscyhrZXlWYWx1ZSkpIHsgCisJCQkJCWlmIChzdHJpbmcuZXF1YWxzKGtleVZhbHVlKSkgeyAKIAkJCQkJCWdlbmVyYXRlZFJ1bGUuYXBwZW5kKCJcblx0XHRwYXJhbXMuc2V0IiAKIAkJCQkJCQkJKyBrZXkgKyAiKFwiIiAKIAkJCQkJCQkJKyBwb2xpY3lEYXRhLmdldFJ1bGVEYXRhKCkuZ2V0KGtleVZhbHVlKS50b1N0cmluZygpICsgIlwiKTsiKTsgCkBAIC01MzcsMTAgKzU0NSw4IEBACiAJCQlTdHJpbmcgcmVzcG9uc2VTdHJpbmcgPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKGJvZHkpOwogCQkJSlNPTk9iamVjdCBqID0gbmV3IEpTT05PYmplY3QoIntwb2xpY3lEYXRhOiAiICsgcmVzcG9uc2VTdHJpbmcgKyAifSIpOwogCQkJb3V0LndyaXRlKGoudG9TdHJpbmcoKSk7Ci0JCQlyZXR1cm4gbnVsbDsKIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIAkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVyArIGUpOwotCQl9Ci0JCXJldHVybiBudWxsOwkKKwkJfQkKIAl9CiB9CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1Jhd0NvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVCUk1TUmF3Q29udHJvbGxlci5qYXZhCmluZGV4IDY3OTQ1ZTEuLmM1Yjk3YWQgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVCUk1TUmF3Q29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVCUk1TUmF3Q29udHJvbGxlci5qYXZhCkBAIC03Miw2ICs3Miw3IEBACiAJCQl0cnl7CiAJCQkJZGVzY3JpcHRpb24gPSBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKS5zdWJzdHJpbmcoMCwgcG9saWN5LmdldERlc2NyaXB0aW9uKCkuaW5kZXhPZigiQENyZWF0ZWRCeToiKSk7CiAJCQl9Y2F0Y2goRXhjZXB0aW9uIGUpeworCQkJCWxvZ2dlci5pbmZvKCJOb3QgYWJsZSB0byBzZWUgdGhlIGNyZWF0ZWRieSBpbiBkZXNjcmlwdGlvbi4gU28sIGFkZCBnZW5lcmljIGRlc2NyaXB0aW9uIiwgZSk7CiAJCQkJZGVzY3JpcHRpb24gPSBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKTsKIAkJCX0KIAkJCXBvbGljeUFkYXB0ZXIuc2V0UG9saWN5RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyLmphdmEKaW5kZXggY2NlY2Y1ZC4uMDhjMGMzOCAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlci5qYXZhCkBAIC02MSw3ICs2MSw3IEBACiBAUmVxdWVzdE1hcHBpbmcoIi8iKQogcHVibGljIGNsYXNzIENyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXJ7CiAKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgTE9HR0VSCT0gRmxleExvZ2dlci5nZXRMb2dnZXIoQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlci5jbGFzcyk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIHBvbGljeUxvZ2dlcgk9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKENyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIuY2xhc3MpOwogCQogCXByb3RlY3RlZCBQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lBZGFwdGVyID0gbnVsbDsKIAkKQEAgLTc1LDg2ICs3NSw5MSBAQAogCQogCXB1YmxpYyBDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyKCl7fQogCQotCXB1YmxpYyBQb2xpY3lSZXN0QWRhcHRlciBzZXREYXRhVG9Qb2xpY3lSZXN0QWRhcHRlcihQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lEYXRhLCBKc29uTm9kZSByb290KSB0aHJvd3MgRXhjZXB0aW9uewotCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwotCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKLQkJVHJhcERhdGFzIHRyYXBEYXRhcyA9IG1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoInRyYXBEYXRhIikudG9TdHJpbmcoKSwgVHJhcERhdGFzLmNsYXNzKTsKLQkJVHJhcERhdGFzIGZhdWx0RGF0YXMgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJmYXVsdERhdGEiKS50b1N0cmluZygpLCBUcmFwRGF0YXMuY2xhc3MpOwotCQlDbG9zZWRMb29wR3JpZEpTT05EYXRhIHBvbGljeUpzb25EYXRhID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgicG9saWN5RGF0YSIpLmdldCgicG9saWN5IikudG9TdHJpbmcoKSwgQ2xvc2VkTG9vcEdyaWRKU09ORGF0YS5jbGFzcyk7Ci0JCUNsb3NlZExvb3BGYXVsdEJvZHkganNvbkJvZHkgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJwb2xpY3lEYXRhIikuZ2V0KCJwb2xpY3kiKS5nZXQoImpzb25Cb2R5RGF0YSIpLnRvU3RyaW5nKCksIENsb3NlZExvb3BGYXVsdEJvZHkuY2xhc3MpOwotCQkKLQkJQXJyYXlMaXN0PE9iamVjdD4gdHJhcFNpZ25hdHVyZURhdGFzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0JCWlmKHRyYXBEYXRhcy5nZXRUcmFwMSgpICE9IG51bGwpewotCQkJdHJhcFNpZ25hdHVyZURhdGFzLmFkZCh0cmFwRGF0YXMpOwotCQl9Ci0JCUFycmF5TGlzdDxPYmplY3Q+IGZhdWx0U2lnbmF0dXJlRGF0YXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQkJaWYoZmF1bHREYXRhcy5nZXRUcmFwMSgpICE9IG51bGwpewotCQkJZmF1bHRTaWduYXR1cmVEYXRhcy5hZGQoZmF1bHREYXRhcyk7Ci0JCX0KLQkJCi0JCVN0cmluZyByZXN1bHRCb2R5ID0gIiI7Ci0JCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5pc0VtcHR5KCkpewotCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgKyAiKCI7Ci0JCQlmb3IoaW50IGkgPSBwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5zaXplKCktMTsgaT49MCA7IGktLSl7Ci0JCQkJU3RyaW5nIGNvbm5lY3RCb2R5ID0gY29ubmVjdFRyaWdnZXJTaWduYXR1cmUoaSwgcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCksIHRyYXBTaWduYXR1cmVEYXRhcy5nZXQoMCkpOwotCQkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICArIGNvbm5lY3RCb2R5OworCXB1YmxpYyBQb2xpY3lSZXN0QWRhcHRlciBzZXREYXRhVG9Qb2xpY3lSZXN0QWRhcHRlcihQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lEYXRhLCBKc29uTm9kZSByb290KXsKKwkJdHJ5eworCQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKKwkJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOworCQkJVHJhcERhdGFzIHRyYXBEYXRhcyA9IG1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoInRyYXBEYXRhIikudG9TdHJpbmcoKSwgVHJhcERhdGFzLmNsYXNzKTsKKwkJCVRyYXBEYXRhcyBmYXVsdERhdGFzID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgiZmF1bHREYXRhIikudG9TdHJpbmcoKSwgVHJhcERhdGFzLmNsYXNzKTsKKwkJCUNsb3NlZExvb3BHcmlkSlNPTkRhdGEgcG9saWN5SnNvbkRhdGEgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJwb2xpY3lEYXRhIikuZ2V0KCJwb2xpY3kiKS50b1N0cmluZygpLCBDbG9zZWRMb29wR3JpZEpTT05EYXRhLmNsYXNzKTsKKwkJCUNsb3NlZExvb3BGYXVsdEJvZHkganNvbkJvZHkgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJwb2xpY3lEYXRhIikuZ2V0KCJwb2xpY3kiKS5nZXQoImpzb25Cb2R5RGF0YSIpLnRvU3RyaW5nKCksIENsb3NlZExvb3BGYXVsdEJvZHkuY2xhc3MpOworCisJCQlBcnJheUxpc3Q8T2JqZWN0PiB0cmFwU2lnbmF0dXJlRGF0YXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJCWlmKHRyYXBEYXRhcy5nZXRUcmFwMSgpICE9IG51bGwpeworCQkJCXRyYXBTaWduYXR1cmVEYXRhcy5hZGQodHJhcERhdGFzKTsKIAkJCX0KLQkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgIikiOwotCQl9ZWxzZXsKLQkJCWlmKCF0cmFwU2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKLQkJCQlyZXN1bHRCb2R5ID0gY2FsbFRyYXAoIm5pbGwiLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKKwkJCUFycmF5TGlzdDxPYmplY3Q+IGZhdWx0U2lnbmF0dXJlRGF0YXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJCWlmKGZhdWx0RGF0YXMuZ2V0VHJhcDEoKSAhPSBudWxsKXsKKwkJCQlmYXVsdFNpZ25hdHVyZURhdGFzLmFkZChmYXVsdERhdGFzKTsKIAkJCX0KKworCQkJU3RyaW5nIHJlc3VsdEJvZHkgPSAiIjsKKwkJCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5pc0VtcHR5KCkpeworCQkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgIigiOworCQkJCWZvcihpbnQgaSA9IHBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpLnNpemUoKS0xOyBpPj0wIDsgaS0tKXsKKwkJCQkJU3RyaW5nIGNvbm5lY3RCb2R5ID0gY29ubmVjdFRyaWdnZXJTaWduYXR1cmUoaSwgcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCksIHRyYXBTaWduYXR1cmVEYXRhcy5nZXQoMCkpOworCQkJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSAgKyBjb25uZWN0Qm9keTsKKwkJCQl9CisJCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgKyAiKSI7CisJCQl9ZWxzZXsKKwkJCQlpZighdHJhcFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7CisJCQkJCXJlc3VsdEJvZHkgPSBjYWxsVHJhcCgibmlsbCIsIHRyYXBTaWduYXR1cmVEYXRhcy5nZXQoMCkpOworCQkJCX0KKwkJCX0KKwkJCUNsb3NlZExvb3BTaWduYXR1cmVzIHRyaWdnZXJTaWduYXR1cmVzID0gbmV3IENsb3NlZExvb3BTaWduYXR1cmVzKCk7CisJCQl0cmlnZ2VyU2lnbmF0dXJlcy5zZXRTaWduYXR1cmVzKHJlc3VsdEJvZHkpOworCQkJaWYocG9saWN5RGF0YS5nZXRDbGVhclRpbWVPdXQoKSAhPSBudWxsKXsKKwkJCQl0cmlnZ2VyU2lnbmF0dXJlcy5zZXRUaW1lV2luZG93KEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRDbGVhclRpbWVPdXQoKSkpOwkKKwkJCQl0cmlnZ2VyU2lnbmF0dXJlcy5zZXRUcmFwTWF4QWdlKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRUcmFwTWF4QWdlKCkpKTsKKwkJCQlDbG9zZWRMb29wRmF1bHRUcmlnZ2VyVUlTaWduYXR1cmVzIHVpVHJpZ2dlclNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcygpOworCQkJCWlmKCF0cmFwU2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKKwkJCQkJdWlUcmlnZ2VyU2lnbmF0dXJlcy5zZXRTaWduYXR1cmVzKGdldFVJVHJpZ2dlclNpZ25hdHVyZSgiVHJhcCIsIHRyYXBTaWduYXR1cmVEYXRhcy5nZXQoMCkpKTsKKwkJCQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpLmlzRW1wdHkoKSl7CisJCQkJCQl1aVRyaWdnZXJTaWduYXR1cmVzLnNldENvbm5lY3RTaWduYXR1cmVzKGdldFVJQ29ubmVjdFRyYXBzKHBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpKSk7CisJCQkJCX0JCQkJCisJCQkJfQkJCQorCQkJCWpzb25Cb2R5LnNldFRyaWdnZXJTaWduYXR1cmVzVXNlZEZvclVJKHVpVHJpZ2dlclNpZ25hdHVyZXMpOworCQkJCWpzb25Cb2R5LnNldFRyaWdnZXJUaW1lV2luZG93VXNlZEZvclVJKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRDbGVhclRpbWVPdXQoKSkpOworCQkJCWpzb25Cb2R5LnNldFRyYXBNYXhBZ2VVc2VkRm9yVUkoSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldFRyYXBNYXhBZ2UoKSkpOworCQkJfQorCisJCQlqc29uQm9keS5zZXRUcmlnZ2VyU2lnbmF0dXJlcyh0cmlnZ2VyU2lnbmF0dXJlcyk7CisJCQlTdHJpbmcgZmF1bHRCb2R5ID0gIiI7CisJCQlpZighcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoKS5pc0VtcHR5KCkpeworCQkJCWZhdWx0Qm9keSA9IGZhdWx0Qm9keSArICIoIjsKKwkJCQlmb3IoaW50IGkgPSBwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLnNpemUoKS0xOyBpPj0wIDsgaS0tKXsKKwkJCQkJU3RyaW5nIGNvbm5lY3RCb2R5ID0gY29ubmVjdFRyaWdnZXJTaWduYXR1cmUoaSwgcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoKSwgZmF1bHRTaWduYXR1cmVEYXRhcy5nZXQoMCkpOworCQkJCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgICsgY29ubmVjdEJvZHk7CisJCQkJfQorCQkJCWZhdWx0Qm9keSA9IGZhdWx0Qm9keSArICIpIjsKKwkJCX1lbHNleworCQkJCWlmKCFmYXVsdFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7CisJCQkJCWZhdWx0Qm9keSA9IGNhbGxUcmFwKCJuaWxsIiwgZmF1bHRTaWduYXR1cmVEYXRhcy5nZXQoMCkpOworCQkJCX0KKwkJCX0KKwkJCUNsb3NlZExvb3BTaWduYXR1cmVzIGZhdWx0U2lnbmF0dXJlcyA9IG5ldyBDbG9zZWRMb29wU2lnbmF0dXJlcygpOworCQkJZmF1bHRTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMoZmF1bHRCb2R5KTsKKwkJCWlmKHBvbGljeURhdGEuZ2V0VmVyaWZpY2F0aW9uY2xlYXJUaW1lT3V0KCkgIT0gbnVsbCl7CisJCQkJZmF1bHRTaWduYXR1cmVzLnNldFRpbWVXaW5kb3coSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldFZlcmlmaWNhdGlvbmNsZWFyVGltZU91dCgpKSk7CisJCQkJQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcyB1aWZhdWx0U2lnbmF0dXJlcyA9IG5ldyBDbG9zZWRMb29wRmF1bHRUcmlnZ2VyVUlTaWduYXR1cmVzKCk7CisJCQkJaWYoIWZhdWx0U2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKKwkJCQkJdWlmYXVsdFNpZ25hdHVyZXMuc2V0U2lnbmF0dXJlcyhnZXRVSVRyaWdnZXJTaWduYXR1cmUoIkZhdWx0IiwgZmF1bHRTaWduYXR1cmVEYXRhcy5nZXQoMCkpKTsKKwkJCQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKKwkJCQkJCXVpZmF1bHRTaWduYXR1cmVzLnNldENvbm5lY3RTaWduYXR1cmVzKGdldFVJQ29ubmVjdFRyYXBzKHBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkpKTsKKwkJCQkJfQkJCisJCQkJfQorCisJCQkJanNvbkJvZHkuc2V0VmVyaWZpY2F0aW9uU2lnbmF0dXJlc1VzZWRGb3JVSSh1aWZhdWx0U2lnbmF0dXJlcyk7CisJCQkJanNvbkJvZHkuc2V0VmVyZmlmaWNhdGlvblRpbWVXaW5kb3dVc2VkRm9yVUkoSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldFZlcmlmaWNhdGlvbmNsZWFyVGltZU91dCgpKSk7CisJCQl9CQkKKwkJCWpzb25Cb2R5LnNldFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoZmF1bHRTaWduYXR1cmVzKTsKKwkJCU9iamVjdFdyaXRlciBvbSA9IG5ldyBPYmplY3RNYXBwZXIoKS53cml0ZXIoKTsKKwkJCVN0cmluZyBqc29uID0gb20ud3JpdGVWYWx1ZUFzU3RyaW5nKGpzb25Cb2R5KTsKKwkJCXBvbGljeURhdGEuc2V0SnNvbkJvZHkoanNvbik7CisKKwkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQgd2hpbGUgc2V0dGluZyBkYXRhIHRvIEFkYXB0ZXIiICwgZSk7CiAJCX0KLQkJQ2xvc2VkTG9vcFNpZ25hdHVyZXMgdHJpZ2dlclNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcFNpZ25hdHVyZXMoKTsKLQkJdHJpZ2dlclNpZ25hdHVyZXMuc2V0U2lnbmF0dXJlcyhyZXN1bHRCb2R5KTsKLQkJaWYocG9saWN5RGF0YS5nZXRDbGVhclRpbWVPdXQoKSAhPSBudWxsKXsKLQkJCXRyaWdnZXJTaWduYXR1cmVzLnNldFRpbWVXaW5kb3coSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldENsZWFyVGltZU91dCgpKSk7CQotCQkJdHJpZ2dlclNpZ25hdHVyZXMuc2V0VHJhcE1heEFnZShJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0VHJhcE1heEFnZSgpKSk7Ci0JCQlDbG9zZWRMb29wRmF1bHRUcmlnZ2VyVUlTaWduYXR1cmVzIHVpVHJpZ2dlclNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcygpOwotCQkJaWYoIXRyYXBTaWduYXR1cmVEYXRhcy5pc0VtcHR5KCkpewotCQkJCXVpVHJpZ2dlclNpZ25hdHVyZXMuc2V0U2lnbmF0dXJlcyhnZXRVSVRyaWdnZXJTaWduYXR1cmUoIlRyYXAiLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKSk7Ci0JCQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpLmlzRW1wdHkoKSl7Ci0JCQkJCXVpVHJpZ2dlclNpZ25hdHVyZXMuc2V0Q29ubmVjdFNpZ25hdHVyZXMoZ2V0VUlDb25uZWN0VHJhcHMocG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCkpKTsKLQkJCQl9CQkJCQotCQkJfQkJCQotCQkJanNvbkJvZHkuc2V0VHJpZ2dlclNpZ25hdHVyZXNVc2VkRm9yVUkodWlUcmlnZ2VyU2lnbmF0dXJlcyk7Ci0JCQlqc29uQm9keS5zZXRUcmlnZ2VyVGltZVdpbmRvd1VzZWRGb3JVSShJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0Q2xlYXJUaW1lT3V0KCkpKTsKLQkJCWpzb25Cb2R5LnNldFRyYXBNYXhBZ2VVc2VkRm9yVUkoSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldFRyYXBNYXhBZ2UoKSkpOwotCQl9Ci0JCQotCQlqc29uQm9keS5zZXRUcmlnZ2VyU2lnbmF0dXJlcyh0cmlnZ2VyU2lnbmF0dXJlcyk7Ci0JCVN0cmluZyBmYXVsdEJvZHkgPSAiIjsKLQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKLQkJCWZhdWx0Qm9keSA9IGZhdWx0Qm9keSArICIoIjsKLQkJCWZvcihpbnQgaSA9IHBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkuc2l6ZSgpLTE7IGk+PTAgOyBpLS0pewotCQkJCVN0cmluZyBjb25uZWN0Qm9keSA9IGNvbm5lY3RUcmlnZ2VyU2lnbmF0dXJlKGksIHBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCksIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKLQkJCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgICsgY29ubmVjdEJvZHk7Ci0JCQl9Ci0JCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgKyAiKSI7Ci0JCX1lbHNlewotCQkJaWYoIWZhdWx0U2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKLQkJCQlmYXVsdEJvZHkgPSBjYWxsVHJhcCgibmlsbCIsIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKLQkJCX0KLQkJfQotCQlDbG9zZWRMb29wU2lnbmF0dXJlcyBmYXVsdFNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcFNpZ25hdHVyZXMoKTsKLQkJZmF1bHRTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMoZmF1bHRCb2R5KTsKLQkJaWYocG9saWN5RGF0YS5nZXRWZXJpZmljYXRpb25jbGVhclRpbWVPdXQoKSAhPSBudWxsKXsKLQkJCWZhdWx0U2lnbmF0dXJlcy5zZXRUaW1lV2luZG93KEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRWZXJpZmljYXRpb25jbGVhclRpbWVPdXQoKSkpOwotCQkJQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcyB1aWZhdWx0U2lnbmF0dXJlcyA9IG5ldyBDbG9zZWRMb29wRmF1bHRUcmlnZ2VyVUlTaWduYXR1cmVzKCk7Ci0JCQlpZighZmF1bHRTaWduYXR1cmVEYXRhcy5pc0VtcHR5KCkpewotCQkJCXVpZmF1bHRTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMoZ2V0VUlUcmlnZ2VyU2lnbmF0dXJlKCJGYXVsdCIsIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKSk7Ci0JCQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKLQkJCQkJdWlmYXVsdFNpZ25hdHVyZXMuc2V0Q29ubmVjdFNpZ25hdHVyZXMoZ2V0VUlDb25uZWN0VHJhcHMocG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoKSkpOwotCQkJCX0JCQotCQkJfQotCQkJCi0JCQlqc29uQm9keS5zZXRWZXJpZmljYXRpb25TaWduYXR1cmVzVXNlZEZvclVJKHVpZmF1bHRTaWduYXR1cmVzKTsKLQkJCWpzb25Cb2R5LnNldFZlcmZpZmljYXRpb25UaW1lV2luZG93VXNlZEZvclVJKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRWZXJpZmljYXRpb25jbGVhclRpbWVPdXQoKSkpOwotCQl9CQkKLQkJanNvbkJvZHkuc2V0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcyhmYXVsdFNpZ25hdHVyZXMpOwotCQlPYmplY3RXcml0ZXIgb20gPSBuZXcgT2JqZWN0TWFwcGVyKCkud3JpdGVyKCk7Ci0JCVN0cmluZyBqc29uID0gb20ud3JpdGVWYWx1ZUFzU3RyaW5nKGpzb25Cb2R5KTsKLQkJcG9saWN5RGF0YS5zZXRKc29uQm9keShqc29uKTsKIAkJcmV0dXJuIHBvbGljeURhdGE7CiAJfQogCQpAQCAtMTcwLDYgKzE3NSw3IEBACiAJCQl9CiAJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIoIiArIG5vdEJveDsKIAkJfWNhdGNoKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmluZm8oIkdlbmVyYWwgZXJyb3IiICwgZSk7CiAJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIoIjsKIAkJfQogCQlTdHJpbmcgY29ubmVjdFRyYXAxID0gY29ubmVjdFRyYXBzLmdldCgiY29ubmVjdFRyYXAxIik7CkBAIC0xOTQsMTEgKzIwMCwxMyBAQAogCQkJU3RyaW5nIHRyYXBDb3VudDEgPSBjb25uZWN0VHJhcHMuZ2V0KCJ0cmFwQ291bnQxIik7CiAJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIsIFRpbWUgPSAiICsgdHJhcENvdW50MSArICIpIjsKIAkJfWNhdGNoKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmluZm8oIkdlbmVyYWwgZXJyb3IiICwgZSk7CiAJCX0KIAkJdHJ5ewogCQkJU3RyaW5nIG9wZXJhdG9yQm94ID0gY29ubmVjdFRyYXBzLmdldCgib3BlcmF0b3JCb3giKTsKIAkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgb3BlcmF0b3JCb3ggKyIoIjsKIAkJfWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5pbmZvKCJHZW5lcmFsIGVycm9yIiAsIGUpOwogCQl9CiAJCXRyeXsKIAkJCVN0cmluZyBjb25uZWN0VHJhcDIgPSBjb25uZWN0VHJhcHMuZ2V0KCJjb25uZWN0VHJhcDIiKTsKQEAgLTIyMCwxMSArMjI4LDEzIEBACiAJCQkJfQogCQkJfQogCQl9Y2F0Y2goTnVsbFBvaW50ZXJFeGNlcHRpb24gZSl7CisJCQlwb2xpY3lMb2dnZXIuaW5mbygiR2VuZXJhbCBlcnJvciIgLCBlKTsKIAkJfQogCQl0cnl7CiAJCQlTdHJpbmcgdHJhcENvdW50MiA9IGNvbm5lY3RUcmFwcy5nZXQoInRyYXBDb3VudDIiKTsKIAkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgIiwgVGltZSA9ICIgKyB0cmFwQ291bnQyICsgIikiOwogCQl9Y2F0Y2goTnVsbFBvaW50ZXJFeGNlcHRpb24gZSl7CisJCQlwb2xpY3lMb2dnZXIuaW5mbygiR2VuZXJhbCBlcnJvciIgLCBlKTsKIAkJfQogCQlyZXR1cm4gcmVzdWx0Qm9keTsKIAl9CkBAIC02MDMsNyArNjEzLDcgQEAKIAkJCX0KIAogCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJTE9HR0VSLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCiAJCXJldHVybiBudWxsOwkKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wUE1Db250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQ2xvc2VkTG9vcFBNQ29udHJvbGxlci5qYXZhCmluZGV4IDM4NWNhMTUuLjM5ODUwZDkgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wUE1Db250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUNsb3NlZExvb3BQTUNvbnRyb2xsZXIuamF2YQpAQCAtNjMsNiArNjMsNyBAQAogCQkJdHJ5ewogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCkuc3Vic3RyaW5nKDAsIHBvbGljeS5nZXREZXNjcmlwdGlvbigpLmluZGV4T2YoIkBDcmVhdGVkQnk6IikpOwogCQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCQlMT0dHRVIuaW5mbygiR2VuZXJhbCBlcnJvciIgLCBlKTsKIAkJCQlkZXNjcmlwdGlvbiA9IHBvbGljeS5nZXREZXNjcmlwdGlvbigpOwogCQkJfQogCQkJcG9saWN5QWRhcHRlci5zZXRQb2xpY3lEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlci5qYXZhCmluZGV4IGUxNTYwMDIuLjc3N2ZiODkgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlci5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiBpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKQEAgLTE2MCw3ICsxNjEsNyBAQAogCQkJanNvbkNvbnRlbnQgPSBkZWNvZGVDb250ZW50KHJvb3QuZ2V0KCJwb2xpY3lKU09OIikpLnRvU3RyaW5nKCk7CiAJCQljb25zdHJ1Y3RKc29uKHBvbGljeURhdGEsIGpzb25Db250ZW50KTsKIAkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJCUxPR0dFUi5lcnJvcigiRXJyb3Igd2hpbGUgZGVjb2RpbmcgbWljcm9zZXJ2aWNlIGNvbnRlbnQiKTsKKwkJCUxPR0dFUi5lcnJvcigiRXJyb3Igd2hpbGUgZGVjb2RpbmcgbWljcm9zZXJ2aWNlIGNvbnRlbnQiLCBlKTsKIAkJfQogCQkKIAkJcmV0dXJuIHBvbGljeURhdGE7CkBAIC0yMjQsNyArMjI1LDcgQEAKIAkJdHJ5IHsKIAkJCWpzb24gPSBvbS53cml0ZVZhbHVlQXNTdHJpbmcobWljcm9TZXJ2aWNlT2JqZWN0KTsKIAkJfSBjYXRjaCAoSnNvblByb2Nlc3NpbmdFeGNlcHRpb24gZSkgewotCQkJTE9HR0VSLmVycm9yKCJFcnJvciB3cml0aW5nIG91dCB0aGUgb2JqZWN0Iik7CisJCQlMT0dHRVIuZXJyb3IoIkVycm9yIHdyaXRpbmcgb3V0IHRoZSBvYmplY3QiLCBlKTsKIAkJfQogCQlMT0dHRVIuaW5mbyhqc29uKTsKIAkJU3RyaW5nIGNsZWFuSnNvbiA9IGNsZWFuVVBKc29uKGpzb24pOwpAQCAtMjU0LDcgKzI1NSw3IEBACiAJCQkJY2xlYW5Kc29uID0gcmV0dXJuTm9kZS50b1N0cmluZygpOwogCQkJfQogCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlMT0dHRVIuZXJyb3IoIkVycm9yIHdyaXRpbmcgb3V0IHRoZSBKc29uTm9kZSIpOworCQkJTE9HR0VSLmVycm9yKCJFcnJvciB3cml0aW5nIG91dCB0aGUgSnNvbk5vZGUiLGUpOwogCQl9CiAJCXJldHVybiBjbGVhbkpzb247CiAJfQpAQCAtMzExLDcgKzMxMiw3IEBACiAJcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gbG9hZChieXRlW10gc291cmNlKSB0aHJvd3MgSU9FeGNlcHRpb24geyAKIAkJWWFtbCB5YW1sID0gbmV3IFlhbWwoKTsgCiAJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCQlNYXA8T2JqZWN0LCBPYmplY3Q+IHlhbWxNYXAgPSAoTWFwPE9iamVjdCwgT2JqZWN0PikgeWFtbC5sb2FkKHNvdXJjZS50b1N0cmluZygpKTsgCisJCU1hcDxPYmplY3QsIE9iamVjdD4geWFtbE1hcCA9IChNYXA8T2JqZWN0LCBPYmplY3Q+KSB5YW1sLmxvYWQoQXJyYXlzLnRvU3RyaW5nKHNvdXJjZSkpOyAKIAkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7IAogCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNldHRpbmdzID0gbmV3IEhhc2hNYXAgPD4oKTsgCiAJCWlmICh5YW1sTWFwID09IG51bGwpIHsgCkBAIC0zOTcsMTAgKzM5OCw3IEBACiAJCUhhc2hNYXA8U3RyaW5nLFN0cmluZz4gZGF0YU1hcEZvckpzb249bmV3IEhhc2hNYXAgPD4oKTsgCiAJCWZvcihTdHJpbmcgdW5pcXVlRGF0YUtleTogdW5pcXVlRGF0YUtleXMpewogCQkJaWYodW5pcXVlRGF0YUtleS5jb250YWlucygiJSIpKXsKLQkJCQlTdHJpbmdbXSB1bmlxdWVEYXRhS2V5U3BsaXQ9IHVuaXF1ZURhdGFLZXkuc3BsaXQoIiUiLDIpOwotCQkJCWlmICh1bmlxdWVEYXRhS2V5U3BsaXQubGVuZ3RoIDwgMikgewotCQkJCQljb250aW51ZTsKLQkJCQl9CisJCQkJU3RyaW5nW10gdW5pcXVlRGF0YUtleVNwbGl0PSB1bmlxdWVEYXRhS2V5LnNwbGl0KCIlIik7CiAJCQkJU3RyaW5nIGZpbmRUeXBlPURBVEFUWVBFK3VuaXF1ZURhdGFLZXlTcGxpdFswXStQUk9QRVJUSUVTK3VuaXF1ZURhdGFLZXlTcGxpdFsxXStUWVBFOwogCQkJCVN0cmluZyB0eXBlVmFsdWU9bWFwLmdldChmaW5kVHlwZSk7CiAJCQkJTE9HR0VSLmluZm8odHlwZVZhbHVlKTsKQEAgLTQ3NiwxMCArNDc0LDcgQEAKIAkJSGFzaE1hcDxTdHJpbmcsU3RyaW5nPiBobVN1YjsKIAkJZm9yKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnk6IGRhdGFNYXBGb3JKc29uLmVudHJ5U2V0KCkpewogCQkJU3RyaW5nIHVuaXF1ZURhdGFLZXk9IGVudHJ5LmdldEtleSgpOwotCQkJU3RyaW5nW10gdW5pcXVlRGF0YUtleVNwbGl0PXVuaXF1ZURhdGFLZXkuc3BsaXQoIiUiLDIpOwotCQkJaWYgKHVuaXF1ZURhdGFLZXlTcGxpdC5sZW5ndGggPCAyKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJCQlTdHJpbmdbXSB1bmlxdWVEYXRhS2V5U3BsaXQ9dW5pcXVlRGF0YUtleS5zcGxpdCgiJSIpOwogCQkJU3RyaW5nIHZhbHVlPSBkYXRhTWFwRm9ySnNvbi5nZXQodW5pcXVlRGF0YUtleSk7CiAJCQlpZihkYXRhTWFwS2V5LmNvbnRhaW5zS2V5KHVuaXF1ZURhdGFLZXlTcGxpdFswXSkpewogCQkJCWhtU3ViID0gZGF0YU1hcEtleS5nZXQodW5pcXVlRGF0YUtleVNwbGl0WzBdKTsKQEAgLTc0MywxMCArNzM4LDcgQEAKIAkJCQkJCQlpZihqc29uQXJyYXkgIT0gbnVsbCAmJiBhcnJ5S2V5LmVxdWFscyhub2RlS2V5LnN1YnN0cmluZygwLG5vZGVLZXkuaW5kZXhPZigiQCIpKSkpewogCQkJCQkJCQlqc29uQXJyYXkucHV0KGRlY29kZUNvbnRlbnQobm9kZSkpOwogCQkJCQkJCX0gCi0JCQkJCQkJaWYoa2V5LmNvbnRhaW5zKCJAIikgJiYgIWFycnlLZXkuZXF1YWxzKGtleS5zdWJzdHJpbmcoMCxub2RlS2V5LmluZGV4T2YoIkAiKSkpKXsKLQkJCQkJCQkJanNvblJlc3VsdC5wdXQoYXJyeUtleSwganNvbkFycmF5KTsKLQkJCQkJCQkJanNvbkFycmF5ID0gbmV3IEpTT05BcnJheSgpOwotCQkJCQkJCX1lbHNlIGlmKCFrZXkuY29udGFpbnMoIkAiKSl7CisJCQkJCQkJaWYoKGtleS5jb250YWlucygiQCIpICYmICFhcnJ5S2V5LmVxdWFscyhrZXkuc3Vic3RyaW5nKDAsbm9kZUtleS5pbmRleE9mKCJAIikpKSkgfHwgIWtleS5jb250YWlucygiQCIpKXsKIAkJCQkJCQkJanNvblJlc3VsdC5wdXQoYXJyeUtleSwganNvbkFycmF5KTsKIAkJCQkJCQkJanNvbkFycmF5ID0gbmV3IEpTT05BcnJheSgpOwogCQkJCQkJCX0KQEAgLTEyMzEsMTggKzEyMjMsMTMgQEAKIAkJfQogCX0KIAotCXByaXZhdGUgU3RyaW5nIGdldFBvbGljeVNjb3BlKFN0cmluZyB2YWx1ZSkgewkKLQkJR3JvdXBQb2xpY3lTY29wZUxpc3QgcFNjb3BlID0gbmV3IEdyb3VwUG9saWN5U2NvcGVMaXN0KCk7Ci0JCUxpc3Q8T2JqZWN0PiBncm91cExpc3Q9IGNvbW1vbkNsYXNzRGFvLmdldERhdGEoR3JvdXBQb2xpY3lTY29wZUxpc3QuY2xhc3MpOwotCQlpZihncm91cExpc3Quc2l6ZSgpID4gMCl7Ci0JCQlmb3IoaW50IGkgPSAwIDsgaSA8IGdyb3VwTGlzdC5zaXplKCkgOyBpICsrKXsKLQkJCQlwU2NvcGUgPSAoR3JvdXBQb2xpY3lTY29wZUxpc3QpIGdyb3VwTGlzdC5nZXQoaSk7Ci0JCQkJaWYgKHBTY29wZS5nZXRHcm91cExpc3QoKS5lcXVhbHModmFsdWUpKXsKLQkJCQkJYnJlYWs7Ci0JCQkJfQkJCi0JCQl9CisJcHJpdmF0ZSBTdHJpbmcgZ2V0UG9saWN5U2NvcGUoU3RyaW5nIHZhbHVlKSB7CisJCUxpc3Q8T2JqZWN0PiBncm91cExpc3Q9IGNvbW1vbkNsYXNzRGFvLmdldERhdGFCeUlkKEdyb3VwUG9saWN5U2NvcGVMaXN0LmNsYXNzLCAiZ3JvdXBMaXN0IiwgdmFsdWUpOworCQlpZihncm91cExpc3QgIT0gbnVsbCAmJiAhZ3JvdXBMaXN0LmlzRW1wdHkoKSl7CisJCQlHcm91cFBvbGljeVNjb3BlTGlzdCBwU2NvcGUgPSAoR3JvdXBQb2xpY3lTY29wZUxpc3QpIGdyb3VwTGlzdC5nZXQoMCk7CisJCQlyZXR1cm4gcFNjb3BlLmdldEdyb3VwTmFtZSgpOwkJCiAJCX0KLQkJcmV0dXJuIHBTY29wZS5nZXRHcm91cE5hbWUoKTsKKwkJcmV0dXJuIG51bGw7CiAJfQogCiAJLy9Db252ZXJ0IHRoZSBtYXAgdmFsdWVzIGFuZCBzZXQgaW50byBKU09OIGJvZHkKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVGaXJld2FsbENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVGaXJld2FsbENvbnRyb2xsZXIuamF2YQppbmRleCA0YWVhNjM3Li4yMjMyZGE2IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUZpcmV3YWxsQ29udHJvbGxlci5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiAgKi8KIAogcGFja2FnZSBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwpAQCAtNjcsMTEgKzY2LDggQEAKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLkNvbnRyb2xsZXI7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLnNlcnZsZXQuTW9kZWxBbmRWaWV3OwogCi1pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRpb25FeGNlcHRpb247CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkZlYXR1cmU7Ci1pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkpzb25NYXBwaW5nRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwogaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RXcml0ZXI7CkBAIC04Nyw3ICs4Myw3IEBACiBAQ29udHJvbGxlcgogQFJlcXVlc3RNYXBwaW5nKCIvIikKIHB1YmxpYyBjbGFzcyBDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXIgewotCXByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIJPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIuY2xhc3MpOworCXByaXZhdGUgc3RhdGljIExvZ2dlciBwb2xpY3lMb2dnZXIJPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIuY2xhc3MpOwogCiAJQEF1dG93aXJlZAogCVNlc3Npb25GYWN0b3J5IHNlc3Npb25GYWN0b3J5OwpAQCAtMTEwLDkgKzEwNiw5IEBACiAKIAlwdWJsaWMgUG9saWN5UmVzdEFkYXB0ZXIgc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIoUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5RGF0YSl7CiAJCQotCQl0ZXJtQ29sbGVjdG9yTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQl0YWdDb2xsZWN0b3JMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0JCWlmKHBvbGljeURhdGEuZ2V0QXR0cmlidXRlcygpLnNpemUoKSA+IDApeworCQl0ZXJtQ29sbGVjdG9yTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQl0YWdDb2xsZWN0b3JMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCWlmKCFwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpewogCQkJZm9yKE9iamVjdCBhdHRyaWJ1dGUgOiBwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKSl7CiAJCQkJaWYoYXR0cmlidXRlIGluc3RhbmNlb2YgTGlua2VkSGFzaE1hcDw/LCA/Pil7CiAJCQkJCVN0cmluZyBrZXkgPSAoKExpbmtlZEhhc2hNYXA8PywgPz4pIGF0dHJpYnV0ZSkuZ2V0KCJrZXkiKS50b1N0cmluZygpOwpAQCAtMTM1LDE2ICsxMzEsMTQgQEAKIAl9CiAKIAlwcml2YXRlIExpc3Q8U3RyaW5nPiBtYXBwaW5nKFN0cmluZyBleHBhbmRhYmxlTGlzdCkgewotCQlTdHJpbmcgdmFsdWUgPSBuZXcgU3RyaW5nKCk7Ci0JCVN0cmluZyBkZXNjID0gIG5ldyBTdHJpbmcoKTsKIAkJTGlzdCA8U3RyaW5nPiB2YWx1ZURlc2M9IG5ldyBBcnJheUxpc3Q8PigpOwogCQlMaXN0PE9iamVjdD4gcHJlZml4TGlzdERhdGEgPSBjb21tb25DbGFzc0Rhby5nZXREYXRhKFByZWZpeExpc3QuY2xhc3MpOwogCQlmb3IgKGludCBpID0gMDsgaTwgcHJlZml4TGlzdERhdGEuc2l6ZSgpOyBpKyspIHsKIAkJCVByZWZpeExpc3QgcHJlZml4TGlzdCA9IChQcmVmaXhMaXN0KSBwcmVmaXhMaXN0RGF0YS5nZXQoaSk7CiAJCQlpZiAocHJlZml4TGlzdC5nZXRQcmVmaXhMaXN0TmFtZSgpLmVxdWFscyhleHBhbmRhYmxlTGlzdCkpIHsKLQkJCQl2YWx1ZSA9IHByZWZpeExpc3QuZ2V0UHJlZml4TGlzdFZhbHVlKCk7CisJCQkJU3RyaW5nIHZhbHVlID0gcHJlZml4TGlzdC5nZXRQcmVmaXhMaXN0VmFsdWUoKTsKIAkJCQl2YWx1ZURlc2MuYWRkKHZhbHVlKTsKLQkJCQlkZXNjPSBwcmVmaXhMaXN0LmdldERlc2NyaXB0aW9uKCk7CisJCQkJU3RyaW5nIGRlc2M9IHByZWZpeExpc3QuZ2V0RGVzY3JpcHRpb24oKTsKIAkJCQl2YWx1ZURlc2MuYWRkKGRlc2MpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTk4LDE0ICsxOTIsMTUgQEAKIAkJCS8vIHBvbGljeSBuYW1lIHZhbHVlIGlzIHRoZSBwb2xpY3kgbmFtZSB3aXRob3V0IGFueSBwcmVmaXggYW5kIEV4dGVuc2lvbnMuCiAJCQlwb2xpY3lBZGFwdGVyLnNldE9sZFBvbGljeUZpbGVOYW1lKHBvbGljeUFkYXB0ZXIuZ2V0UG9saWN5TmFtZSgpKTsKIAkJCVN0cmluZyBwb2xpY3lOYW1lVmFsdWUgPSBwb2xpY3lBZGFwdGVyLmdldFBvbGljeU5hbWUoKS5zdWJzdHJpbmcocG9saWN5QWRhcHRlci5nZXRQb2xpY3lOYW1lKCkuaW5kZXhPZigiRldfIikgKzMpOwotCQkJaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKSB7Ci0JCQkJbG9nZ2VyLmRlYnVnKCJQcmVwb3B1bGF0aW5nIGZvcm0gZGF0YSBmb3IgQ29uZmlnIFBvbGljeSBzZWxlY3RlZDoiKyBwb2xpY3lBZGFwdGVyLmdldFBvbGljeU5hbWUoKSk7CisJCQlpZiAocG9saWN5TG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZGVidWcoIlByZXBvcHVsYXRpbmcgZm9ybSBkYXRhIGZvciBDb25maWcgUG9saWN5IHNlbGVjdGVkOiIrIHBvbGljeUFkYXB0ZXIuZ2V0UG9saWN5TmFtZSgpKTsKIAkJCX0KIAkJCXBvbGljeUFkYXB0ZXIuc2V0UG9saWN5TmFtZShwb2xpY3lOYW1lVmFsdWUpOwogCQkJU3RyaW5nIGRlc2NyaXB0aW9uID0gIiI7CiAJCQl0cnl7CiAJCQkJZGVzY3JpcHRpb24gPSBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKS5zdWJzdHJpbmcoMCwgcG9saWN5LmdldERlc2NyaXB0aW9uKCkuaW5kZXhPZigiQENyZWF0ZWRCeToiKSk7CiAJCQl9Y2F0Y2goRXhjZXB0aW9uIGUpeworCQkJCXBvbGljeUxvZ2dlci5pbmZvKCJHZW5lcmFsIGVycm9yIiwgZSk7CiAJCQkJZGVzY3JpcHRpb24gPSBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKTsKIAkJCX0KIAkJCXBvbGljeUFkYXB0ZXIuc2V0UG9saWN5RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwpAQCAtMjI5LDcgKzIyNCw3IEBACiAJCQkJfQogCQkJfQogCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBDYXVzZWQgd2hpbGUgUmV0cml2aW5nIHRoZSBKU09OIGJvZHkgZGF0YSIgK2UpOworCQkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIENhdXNlZCB3aGlsZSBSZXRyaXZpbmcgdGhlIEpTT04gYm9keSBkYXRhIiArZSk7CiAJCQl9CiAJCQkKIAkJCU1hcDxTdHJpbmcsIFN0cmluZz4gdGVybVRhZ01hcD1udWxsOwpAQCAtMzE3LDE0ICszMTIsMTQgQEAKIAl9CiAJCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BvbGljeUNvbnRyb2xsZXIvVmlld0ZXUG9saWN5UnVsZS5odG0ifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IHNldEZXVmlld1J1bGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgc2V0RldWaWV3UnVsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CiAJCXRyeSB7CiAJCQl0ZXJtQ29sbGVjdG9yTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwogCQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKIAkJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOwogCQkJSnNvbk5vZGUgcm9vdCA9IG1hcHBlci5yZWFkVHJlZShyZXF1ZXN0LmdldFJlYWRlcigpKTsKIAkJCVBvbGljeVJlc3RBZGFwdGVyIHBvbGljeURhdGEgPSAoUG9saWN5UmVzdEFkYXB0ZXIpbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgicG9saWN5RGF0YSIpLnRvU3RyaW5nKCksIFBvbGljeVJlc3RBZGFwdGVyLmNsYXNzKTsKLQkJCWlmKHBvbGljeURhdGEuZ2V0QXR0cmlidXRlcygpLnNpemUoKSA+IDApeworCQkJaWYoIXBvbGljeURhdGEuZ2V0QXR0cmlidXRlcygpLmlzRW1wdHkoKSl7CiAJCQkJZm9yKE9iamVjdCBhdHRyaWJ1dGUgOiBwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKSl7CiAJCQkJCWlmKGF0dHJpYnV0ZSBpbnN0YW5jZW9mIExpbmtlZEhhc2hNYXA8PywgPz4pewogCQkJCQkJU3RyaW5nIGtleSA9ICgoTGlua2VkSGFzaE1hcDw/LCA/PikgYXR0cmlidXRlKS5nZXQoImtleSIpLnRvU3RyaW5nKCk7CkBAIC00NTAsNyArNDQ1LDcgQEAKIAkJCQkJCQkJfQogCQkJCQkJCX0KIAkJCQkJCX0KLQkJCQkJCWRpc3BsYXlTdHJpbmcuYXBwZW5kKCJcbiIpOworCQkJCQkJZGlzcGxheVN0cmluZy5hcHBlbmQoIlxuIik7CQogCQkJCQl9CiAKIAkJCQkJcnVsZUFjdGlvbj0oanBhVGVybUxpc3QpLmdldEFjdGlvbigpOwpAQCAtNDY5LDExICs0NjQsOSBAQAogCQkJU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhkaXNwbGF5U3RyaW5nKTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KCJ7cG9saWN5RGF0YTogIiArIHJlc3BvbnNlU3RyaW5nICsgIn0iKTsKIAkJCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOwotCQkJcmV0dXJuIG51bGw7CiAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyBlKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVyArIGUpOwogCQl9Ci0JCXJldHVybiBudWxsOwkKIAl9CiAKIAlwcml2YXRlIFN0cmluZyBjb25zdHJ1Y3RKc29uKFBvbGljeVJlc3RBZGFwdGVyIHBvbGljeURhdGEpIHsKQEAgLTg0NywxMCArODQwLDEwIEBACiAJCQkJCQkJUHJlZml4SVBMaXN0IHRhcmdldEFkZHJlc3NMaXN0ID0gbmV3IFByZWZpeElQTGlzdCgpOwogCQkJCQkJCUFkZHJlc3NNZW1iZXJzIGFkZHJlc3NNZW1iZXJzPSBuZXcgQWRkcmVzc01lbWJlcnMoKTsKIAkJCQkJCQl0YXJnZXRBZGRyZXNzTGlzdC5zZXROYW1lKHByZWZpeElQKTsKLQkJCQkJCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyAiUHJlZml4TGlzdCB2YWx1ZToiK3ByZWZpeElQKTsKKwkJCQkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyAiUHJlZml4TGlzdCB2YWx1ZToiK3ByZWZpeElQKTsKIAkJCQkJCQl2YWx1ZURlc2MgPSBtYXBwaW5nKHByZWZpeElQKTsKIAkJCQkJCQlpZighdmFsdWVEZXNjLmlzRW1wdHkoKSl7Ci0JCQkJCQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVyArICJQcmVmaXhMaXN0IGRlc2NyaXB0aW9uOiIrdmFsdWVEZXNjLmdldCgxKSk7CisJCQkJCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVyArICJQcmVmaXhMaXN0IGRlc2NyaXB0aW9uOiIrdmFsdWVEZXNjLmdldCgxKSk7CiAJCQkJCQkJCXRhcmdldEFkZHJlc3NMaXN0LnNldERlc2NyaXB0aW9uKHZhbHVlRGVzYy5nZXQoMSkpOwogCQkJCQkJCX0KIAkJCQkJCQkKQEAgLTkyMiwxNiArOTE1LDEyIEBACiAJCQlPYmplY3RXcml0ZXIgb20gPSBuZXcgT2JqZWN0TWFwcGVyKCkud3JpdGVyKCk7CiAJCQl0cnkgewogCQkJCWpzb24gPSBvbS53cml0ZVZhbHVlQXNTdHJpbmcodGMpOwotCQkJfSBjYXRjaCAoSnNvbkdlbmVyYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOwotCQkJfSBjYXRjaCAoSnNvbk1hcHBpbmdFeGNlcHRpb24gZSkgewotCQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOwotCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJCX0JCiAKIAkJfWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCiAJCXJldHVybiBqc29uOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0Rhc2hib2FyZENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EYXNoYm9hcmRDb250cm9sbGVyLmphdmEKaW5kZXggNTZmZjYzNy4uMDg5NDcwNiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0Rhc2hib2FyZENvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvRGFzaGJvYXJkQ29udHJvbGxlci5qYXZhCkBAIC03Myw3ICs3Myw3IEBACiBAQ29udHJvbGxlcgogQFJlcXVlc3RNYXBwaW5nKHsiLyJ9KQogcHVibGljIGNsYXNzIERhc2hib2FyZENvbnRyb2xsZXIgIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihEYXNoYm9hcmRDb250cm9sbGVyLmNsYXNzKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgcG9saWN5TG9nZ2VyID0gRmxleExvZ2dlci5nZXRMb2dnZXIoRGFzaGJvYXJkQ29udHJvbGxlci5jbGFzcyk7CiAJQEF1dG93aXJlZAogCVN5c3RlbUxvZ0RiRGFvIHN5c3RlbURBTzsKIAkKQEAgLTExMCw3ICsxMTAsNyBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCX0KIAkKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCX0KIAkKQEAgLTE0Miw3ICsxNDIsNyBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCX0KIAkKQEAgLTE2MSw3ICsxNjEsNyBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCX0KIAkKQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfQogCX0KIAkKQEAgLTIwMSw3ICsyMDEsNyBAQAogCQkJfQogCQl9IGNhdGNoIChQQVBFeGNlcHRpb24gfCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlMSkgewogCQkJcGFwU3RhdHVzID0gIkNBTk5PVF9DT05ORUNUIjsKLQkJCWxvZ2dlci5lcnJvcigiRXJyb3IgZ2V0dGluZyBQQVAgc3RhdHVzLCBQQVAgbm90IHJlc3BvbmRpbmcgdG8gcmVxdWVzdHMiKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXJyb3IgZ2V0dGluZyBQQVAgc3RhdHVzLCBQQVAgbm90IHJlc3BvbmRpbmcgdG8gcmVxdWVzdHMiLCBlMSk7CiAJCX0KIAkJU3RyaW5nIHBhcFVSTCA9IFhBQ01MUHJvcGVydGllcy5nZXRQcm9wZXJ0eShYQUNNTFJlc3RQcm9wZXJ0aWVzLlBST1BfUEFQX1VSTCk7CiAJCUpTT05PYmplY3Qgb2JqZWN0ID0gbmV3IEpTT05PYmplY3QoKTsKQEAgLTIyOSwxMSArMjI5LDEyIEBACiAJCQkJaWYgKHBkcC5nZXRTdGF0dXMoKS5nZXRTdGF0dXMoKS50b1N0cmluZygpID09ICJVUF9UT19EQVRFIiAmJiAoKEVjb21wUERQKSBwZHApLmdldEpteFBvcnQoKSAhPSAwKXsKIAkJCQkJU3RyaW5nIHBkcElwQWRkcmVzcyA9IHBhcnNlSVBTeXN0ZW0ocGRwLmdldElkKCkpOwogCQkJCQlpbnQgcG9ydCA9ICgoRWNvbXBQRFApIHBkcCkuZ2V0Sm14UG9ydCgpOwotCQkJCQlpZiAocG9ydCAhPSAwKQotCQkJCQlsb2dnZXIuZGVidWcoIkdldHRpbmcgSk1YIFJlc3BvbnNlIENvdW50cyBmcm9tICIgKyBwZHBJcEFkZHJlc3MgKyAiIGF0IEpNWCBwb3J0ICIgKyBwb3J0KTsKLQkJCQkJbmFDb3VudCA9IGdldFJlcXVlc3RDb3VudHMocGRwSXBBZGRyZXNzLCBwb3J0LCAicGRwRXZhbHVhdGlvbk5BIik7Ci0JCQkJCXBlcm1pdENvdW50ID0gZ2V0UmVxdWVzdENvdW50cyhwZHBJcEFkZHJlc3MsIHBvcnQsICJQZHBFdmFsdWF0aW9uUGVybWl0Iik7Ci0JCQkJCWRlbnlDb3VudCA9IGdldFJlcXVlc3RDb3VudHMocGRwSXBBZGRyZXNzLCBwb3J0LCAiUGRwRXZhbHVhdGlvbkRlbnkiKTsKKwkJCQkJaWYgKHBvcnQgIT0gMCl7CisJCQkJCQlwb2xpY3lMb2dnZXIuZGVidWcoIkdldHRpbmcgSk1YIFJlc3BvbnNlIENvdW50cyBmcm9tICIgKyBwZHBJcEFkZHJlc3MgKyAiIGF0IEpNWCBwb3J0ICIgKyBwb3J0KTsKKwkJCQkJCW5hQ291bnQgPSBnZXRSZXF1ZXN0Q291bnRzKHBkcElwQWRkcmVzcywgcG9ydCwgInBkcEV2YWx1YXRpb25OQSIpOworCQkJCQkJcGVybWl0Q291bnQgPSBnZXRSZXF1ZXN0Q291bnRzKHBkcElwQWRkcmVzcywgcG9ydCwgIlBkcEV2YWx1YXRpb25QZXJtaXQiKTsKKwkJCQkJCWRlbnlDb3VudCA9IGdldFJlcXVlc3RDb3VudHMocGRwSXBBZGRyZXNzLCBwb3J0LCAiUGRwRXZhbHVhdGlvbkRlbnkiKTsKKwkJCQkJfQogCQkJCX0KIAkJCQlpZiAobmFDb3VudCA9PSAtMSl7CiAJCQkJCUpTT05PYmplY3Qgb2JqZWN0ID0gbmV3IEpTT05PYmplY3QoKTsKQEAgLTI3OSw3ICsyODAsNyBAQAogCUBTdXBwcmVzc1dhcm5pbmdzKHsgInJhd3R5cGVzIiwgInVuY2hlY2tlZCIgfSkKIAlwcml2YXRlIGxvbmcgZ2V0UmVxdWVzdENvdW50cyhTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBqbXhBdHRyaWJ1dGUpIHsKIAkJCi0JCWxvZ2dlci5kZWJ1ZygiQ3JlYXRlIGFuIFJNSSBjb25uZWN0b3IgY2xpZW50IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBKTVggY29ubmVjdG9yIHNlcnZlciIpOworCQlwb2xpY3lMb2dnZXIuZGVidWcoIkNyZWF0ZSBhbiBSTUkgY29ubmVjdG9yIGNsaWVudCBhbmQgY29ubmVjdCBpdCB0byB0aGUgSk1YIGNvbm5lY3RvciBzZXJ2ZXIiKTsKIAkJSGFzaE1hcCBtYXAgPSBuZXcgSGFzaE1hcCgpOwogCQltYXAgPSBudWxsOwogCQlKTVhDb25uZWN0b3Igam14Q29ubmVjdGlvbjsKQEAgLTI4OCwyMyArMjg5LDIzIEBACiAJCQlqbXhDb25uZWN0aW9uLmNvbm5lY3QoKTsKIAkJCU9iamVjdCBvID0gam14Q29ubmVjdGlvbi5nZXRNQmVhblNlcnZlckNvbm5lY3Rpb24oKS5nZXRBdHRyaWJ1dGUobmV3IE9iamVjdE5hbWUoIlBkcFJlc3Q6dHlwZT1QZHBSZXN0TW9uaXRvciIpLCBqbXhBdHRyaWJ1dGUpOwogCQkJam14Q29ubmVjdGlvbi5jbG9zZSgpOwotCQkJbG9nZ2VyLmRlYnVnKCJwZHBFdmFsdWF0aW9uTkEgdmFsdWUgcmV0cmVpdmVkOiAiICsgbyk7CisJCQlwb2xpY3lMb2dnZXIuZGVidWcoInBkcEV2YWx1YXRpb25OQSB2YWx1ZSByZXRyZWl2ZWQ6ICIgKyBvKTsKIAkJCXJldHVybiAobG9uZykgbzsKIAkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIiAsIGUpOwogCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIkVycm9yIGluIHJldGVyaXZpbmciICsgam14QXR0cmlidXRlICsgIiBmcm9tIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkVycm9yIGluIHJldGVyaXZpbmciICsgam14QXR0cmlidXRlICsgIiBmcm9tIEpNWCBjb25uZWN0aW9uIiwgZSk7CiAJCX0gY2F0Y2ggKEF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsJCQotCQkJbG9nZ2VyLmVycm9yKCJBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiAgIiArIGpteEF0dHJpYnV0ZSArICAiIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiAgIiArIGpteEF0dHJpYnV0ZSArICAiIGZvciBKTVggY29ubmVjdGlvbiIsIGUpOwogCQl9IGNhdGNoIChJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiAiICsgaG9zdCArICIgZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24gIiArIGhvc3QgKyAiIGZvciBKTVggY29ubmVjdGlvbiIsIGUpOwogCQl9IGNhdGNoIChNYWxmb3JtZWRPYmplY3ROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiTWFsZm9ybWVkT2JqZWN0TmFtZUV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiTWFsZm9ybWVkT2JqZWN0TmFtZUV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iLCBlKTsKIAkJfSBjYXRjaCAoTUJlYW5FeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJNQmVhbkV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJNQmVhbkV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOwogCQl9IGNhdGNoIChSZWZsZWN0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiUmVmbGVjdGlvbkV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiUmVmbGVjdGlvbkV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iLCBlKTsKIAkJfQogCQkKIAkJcmV0dXJuIC0xOwpAQCAtMzMyLDcgKzMzMyw3IEBACiAJCQkJdHJ5ewogCQkJCQlwb2xpY3lNYXAucHV0KHBvbGljeS5nZXRQb2xpY3lJZCgpLnJlcGxhY2UoIiAiLCAiIiksIHBvbGljeS5nZXRJZCgpKTsKIAkJCQl9Y2F0Y2goRXhjZXB0aW9uIGUpewotCQkJCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9TQ0hFTUFfSU5WQUxJRCtwb2xpY3kuZ2V0TmFtZSgpICtlKTsKKwkJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfU0NIRU1BX0lOVkFMSUQrcG9saWN5LmdldE5hbWUoKSArZSk7CiAJCQkJfQogCQkJfQogCQkJCkBAIC0zODYsNyArMzg3LDcgQEAKIAkgKi8KIAlAU3VwcHJlc3NXYXJuaW5ncyh7ICJyYXd0eXBlcyIsICJ1bmNoZWNrZWQiIH0pCiAJcHJpdmF0ZSBPYmplY3QgZ2V0UG9saWN5KFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIGpteEF0dHJpYnV0ZSl7Ci0JCWxvZ2dlci5kZWJ1ZygiQ3JlYXRlIGFuIFJNSSBjb25uZWN0b3IgY2xpZW50IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBKTVggY29ubmVjdG9yIHNlcnZlciBmb3IgUG9saWN5OiAiICsgaG9zdCk7CisJCXBvbGljeUxvZ2dlci5kZWJ1ZygiQ3JlYXRlIGFuIFJNSSBjb25uZWN0b3IgY2xpZW50IGFuZCBjb25uZWN0IGl0IHRvIHRoZSBKTVggY29ubmVjdG9yIHNlcnZlciBmb3IgUG9saWN5OiAiICsgaG9zdCk7CiAJCUhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKIAkJbWFwID0gbnVsbDsKIAkJSk1YQ29ubmVjdG9yIGpteENvbm5lY3Rpb247CkBAIC0zOTUsMjMgKzM5NiwyMyBAQAogCQkJam14Q29ubmVjdGlvbi5jb25uZWN0KCk7CiAJCQlPYmplY3QgbyA9IGpteENvbm5lY3Rpb24uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0QXR0cmlidXRlKG5ldyBPYmplY3ROYW1lKCJQZHBSZXN0OnR5cGU9UGRwUmVzdE1vbml0b3IiKSwgInBvbGljeU1hcCIpOwogCQkJam14Q29ubmVjdGlvbi5jbG9zZSgpOwotCQkJbG9nZ2VyLmRlYnVnKCJwb2xpY3lNYXAgdmFsdWUgcmV0cmVpdmVkOiAiICsgbyk7CisJCQlwb2xpY3lMb2dnZXIuZGVidWcoInBvbGljeU1hcCB2YWx1ZSByZXRyZWl2ZWQ6ICIgKyBvKTsKIAkJCXJldHVybiAgbzsKIAkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJNYWxmb3JtZWRVUkxFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CiAJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gZm9yIHBvbGljeU1hcCIgKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gZm9yIHBvbGljeU1hcCIgKTsKIAkJfSBjYXRjaCAoQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gZSkgewkJCi0JCQlsb2dnZXIuZXJyb3IoIkF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKIAkJfSBjYXRjaCAoSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIkluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24gIiArIGhvc3QgKyAiIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uICIgKyBob3N0ICsgIiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKIAkJfSBjYXRjaCAoTWFsZm9ybWVkT2JqZWN0TmFtZUV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIk1hbGZvcm1lZE9iamVjdE5hbWVFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIk1hbGZvcm1lZE9iamVjdE5hbWVFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CiAJCX0gY2F0Y2ggKE1CZWFuRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiTUJlYW5FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7Ci0JCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiTUJlYW5FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfSBjYXRjaCAoUmVmbGVjdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIlJlZmxlY3Rpb25FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIlJlZmxlY3Rpb25FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CiAJCX0KIAkJCiAJCXJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0RlY2lzaW9uUG9saWN5Q29udHJvbGxlci5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0RlY2lzaW9uUG9saWN5Q29udHJvbGxlci5qYXZhCmluZGV4IGVmNDMxMzUuLmY5NTk0OTUgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvRGVjaXNpb25Qb2xpY3lDb250cm9sbGVyLmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIHBhY2thZ2Ugb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxlcjsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CkBAIC0zOSw3ICs0MCw2IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLkNvbnRyb2xsZXI7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOwogCi1pbXBvcnQgb2FzaXMubmFtZXMudGMueGFjbWwuXzNfMC5jb3JlLnNjaGVtYS53ZF8xNy5BZHZpY2VFeHByZXNzaW9uVHlwZTsKIGltcG9ydCBvYXNpcy5uYW1lcy50Yy54YWNtbC5fM18wLmNvcmUuc2NoZW1hLndkXzE3LkFkdmljZUV4cHJlc3Npb25zVHlwZTsKIGltcG9ydCBvYXNpcy5uYW1lcy50Yy54YWNtbC5fM18wLmNvcmUuc2NoZW1hLndkXzE3LkFsbE9mVHlwZTsKIGltcG9ydCBvYXNpcy5uYW1lcy50Yy54YWNtbC5fM18wLmNvcmUuc2NoZW1hLndkXzE3LkFueU9mVHlwZTsKQEAgLTU4LDcgKzU4LDcgQEAKIEBDb250cm9sbGVyCiBAUmVxdWVzdE1hcHBpbmcoIi8iKQogcHVibGljIGNsYXNzIERlY2lzaW9uUG9saWN5Q29udHJvbGxlciBleHRlbmRzIFJlc3RyaWN0ZWRCYXNlQ29udHJvbGxlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKERlY2lzaW9uUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIHBvbGljeUxvZ2dlciA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKERlY2lzaW9uUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CiAJCiAJcHVibGljIERlY2lzaW9uUG9saWN5Q29udHJvbGxlcigpe30KIApAQCAtODgsNiArODgsNyBAQAogCQkJdHJ5ewogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCkuc3Vic3RyaW5nKDAsIHBvbGljeS5nZXREZXNjcmlwdGlvbigpLmluZGV4T2YoIkBDcmVhdGVkQnk6IikpOwogCQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCQlwb2xpY3lMb2dnZXIuaW5mbygiR2VuZXJhbCBlcnJvciIsIGUpOwogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCk7CiAJCQl9CiAJCQlwb2xpY3lBZGFwdGVyLnNldFBvbGljeURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKQEAgLTE0MSwyMyArMTQyLDI4IEBACiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJLy8gU2V0dGluZyByYWlueSBkYXkgYXR0cmlidXRlcyB0byB0aGUgcGFyYW1ldGVycyBvYmplY3QgaWYgdGhleSBleGlzdCAKKwkJCQkJYm9vbGVhbiByYWlueSA9IGZhbHNlOwogCQkJCQlpZighYXR0cmlidXRlTGlzdC5pc0VtcHR5KCkpIHsKIAkJCQkJCWZvcihpbnQgaT0wOyBpPGF0dHJpYnV0ZUxpc3Quc2l6ZSgpIDsgaSsrKXsKIAkJCQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IChNYXA8U3RyaW5nLFN0cmluZz4pYXR0cmlidXRlTGlzdC5nZXQoaSk7CiAJCQkJCQkJaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJXb3JrU3RlcCIpKXsKIAkJCQkJCQkJcmFpbnlkYXlQYXJhbXMuc2V0V29ya3N0ZXAobWFwLmdldCgidmFsdWUiKSk7CisJCQkJCQkJCXJhaW55PXRydWU7CiAJCQkJCQkJfWVsc2UgaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJCQl9JRCIpKXsKIAkJCQkJCQkJcmFpbnlkYXlQYXJhbXMuc2V0QmJpZChtYXAuZ2V0KCJ2YWx1ZSIpKTsKKwkJCQkJCQkJcmFpbnk9dHJ1ZTsKIAkJCQkJCQl9ZWxzZSBpZihtYXAuZ2V0KCJrZXkiKS5lcXVhbHMoIlNlcnZpY2VUeXBlIikpewogCQkJCQkJCQlyYWlueWRheVBhcmFtcy5zZXRTZXJ2aWNlVHlwZShtYXAuZ2V0KCJ2YWx1ZSIpKTsKKwkJCQkJCQkJcmFpbnk9dHJ1ZTsKIAkJCQkJCQl9ZWxzZSBpZihtYXAuZ2V0KCJrZXkiKS5lcXVhbHMoIlZORlR5cGUiKSl7CiAJCQkJCQkJCXJhaW55ZGF5UGFyYW1zLnNldFZuZlR5cGUobWFwLmdldCgidmFsdWUiKSk7CisJCQkJCQkJCXJhaW55PXRydWU7CiAJCQkJCQkJfQogCQkJCQkJfQkKIAkJCQkJfQotCQkJCQkKLQkJCQkJcG9saWN5QWRhcHRlci5zZXRSdWxlUHJvdmlkZXIoIlJhaW55X0RheSIpOwotCisJCQkJCWlmKHJhaW55KXsKKwkJCQkJCXBvbGljeUFkYXB0ZXIuc2V0UnVsZVByb3ZpZGVyKCJSYWlueV9EYXkiKTsKKwkJCQkJfQogCQkJCX0KIAogCQkJCUxpc3Q8T2JqZWN0PiBydWxlTGlzdCA9IHBvbGljeS5nZXRDb21iaW5lclBhcmFtZXRlcnNPclJ1bGVDb21iaW5lclBhcmFtZXRlcnNPclZhcmlhYmxlRGVmaW5pdGlvbigpOwpAQCAtMTY1LDcgKzE3MSw3IEBACiAJCQkJZm9yIChPYmplY3Qgb2JqZWN0IDogcnVsZUxpc3QpIHsKIAkJCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIFZhcmlhYmxlRGVmaW5pdGlvblR5cGUpIHsKIAkJCQkJCVZhcmlhYmxlRGVmaW5pdGlvblR5cGUgdmFyaWFibGVEZWZpbml0aW9uVHlwZSA9IChWYXJpYWJsZURlZmluaXRpb25UeXBlKSBvYmplY3Q7Ci0JCQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNldHRpbmdzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCQkJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHNldHRpbmdzID0gbmV3IEhhc2hNYXA8PigpOwogCQkJCQkJc2V0dGluZ3MucHV0KCJrZXkiLCB2YXJpYWJsZURlZmluaXRpb25UeXBlLmdldFZhcmlhYmxlSWQoKSk7CiAJCQkJCQlKQVhCRWxlbWVudDxBdHRyaWJ1dGVWYWx1ZVR5cGU+IGF0dHJpYnV0ZVZhbHVlVHlwZUVsZW1lbnQgPSAoSkFYQkVsZW1lbnQ8QXR0cmlidXRlVmFsdWVUeXBlPikgdmFyaWFibGVEZWZpbml0aW9uVHlwZS5nZXRFeHByZXNzaW9uKCk7CiAJCQkJCQlpZiAoYXR0cmlidXRlVmFsdWVUeXBlRWxlbWVudCAhPSBudWxsKSB7CkBAIC0yMDEsNiArMjA3LDEwIEBACiAJCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0QWN0b3IobWFwLmdldCgidmFsdWUiKSk7CiAJCQkJCQkJCQkJfWVsc2UgaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJyZWNpcGUiKSl7CiAJCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0UmVjaXBlKG1hcC5nZXQoInZhbHVlIikpOworCQkJCQkJCQkJCX1lbHNlIGlmKG1hcC5nZXQoImtleSIpLmVxdWFscygidGFyZ2V0cyIpKXsKKwkJCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRUYXJnZXRzKEFycmF5cy5hc0xpc3QobWFwLmdldCgidmFsdWUiKS5zcGxpdCgiXFx8IikpKTsKKwkJCQkJCQkJCQl9ZWxzZSBpZihtYXAuZ2V0KCJrZXkiKS5lcXVhbHMoImNsbmFtZSIpKXsKKwkJCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRDbG5hbWUobWFwLmdldCgidmFsdWUiKSk7CiAJCQkJCQkJCQkJfQogCQkJCQkJCQkJfQogCQkJCQkJCQkJQXBwbHlUeXBlIGFwcGx5ID0gKChBcHBseVR5cGUpKChBcHBseVR5cGUpZGVjaXNpb25BcHBseS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldEV4cHJlc3Npb24oKS5nZXQoMCkuZ2V0VmFsdWUoKSk7CkBAIC0yMTUsOSArMjI1LDExIEBACiAJCQkJCQkJCQkJfQogCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0QmxhY2tMaXN0KGJsYWNrTGlzdCk7CiAJCQkJCQkJCQl9ZWxzZXsKLQkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldExpbWl0KCgoQXR0cmlidXRlVmFsdWVUeXBlKSgoQXBwbHlUeXBlKWRlY2lzaW9uQXBwbHkuZ2V0RXhwcmVzc2lvbigpLmdldCgxKS5nZXRWYWx1ZSgpKS5nZXRFeHByZXNzaW9uKCkuZ2V0KDEpLmdldFZhbHVlKCkpLmdldENvbnRlbnQoKS5nZXQoMCkudG9TdHJpbmcoKSk7Ci0JCQkJCQkJCQkJU3RyaW5nIHRpbWVXaW5kb3cgPSAoKEF0dHJpYnV0ZURlc2lnbmF0b3JUeXBlKSgoQXBwbHlUeXBlKSgoQXBwbHlUeXBlKWRlY2lzaW9uQXBwbHkuZ2V0RXhwcmVzc2lvbigpLmdldCgxKS5nZXRWYWx1ZSgpKS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldEV4cHJlc3Npb24oKS5nZXQoMCkuZ2V0VmFsdWUoKSkuZ2V0SXNzdWVyKCk7Ci0JCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRUaW1lV2luZG93KHRpbWVXaW5kb3cuc3Vic3RyaW5nKHRpbWVXaW5kb3cubGFzdEluZGV4T2YoIjoiKSsxKSk7CisJCQkJCQkJCQkJQXBwbHlUeXBlIHRpbWVXaW5kb3dTZWN0aW9uID0gKEFwcGx5VHlwZSkoKEFwcGx5VHlwZSlkZWNpc2lvbkFwcGx5LmdldEV4cHJlc3Npb24oKS5nZXQoMCkuZ2V0VmFsdWUoKSkuZ2V0RXhwcmVzc2lvbigpLmdldCgxKS5nZXRWYWx1ZSgpOworCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0TGltaXQoKChBdHRyaWJ1dGVWYWx1ZVR5cGUpdGltZVdpbmRvd1NlY3Rpb24uZ2V0RXhwcmVzc2lvbigpLmdldCgxKS5nZXRWYWx1ZSgpKS5nZXRDb250ZW50KCkuZ2V0KDApLnRvU3RyaW5nKCkpOworCQkJCQkJCQkJCVN0cmluZyB0aW1lV2luZG93ID0gKChBdHRyaWJ1dGVEZXNpZ25hdG9yVHlwZSkoKEFwcGx5VHlwZSl0aW1lV2luZG93U2VjdGlvbi5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldEV4cHJlc3Npb24oKS5nZXQoMCkuZ2V0VmFsdWUoKSkuZ2V0SXNzdWVyKCk7CisJCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRUaW1lVW5pdHModGltZVdpbmRvdy5zdWJzdHJpbmcodGltZVdpbmRvdy5sYXN0SW5kZXhPZignOicpKzEpKTsKKwkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldFRpbWVXaW5kb3codGltZVdpbmRvdy5zdWJzdHJpbmcodGltZVdpbmRvdy5pbmRleE9mKCI6dHc6IikrNCx0aW1lV2luZG93Lmxhc3RJbmRleE9mKCc6JykpKTsKIAkJCQkJCQkJCX0KIAkJCQkJCQkJCXBvbGljeUFkYXB0ZXIuc2V0WWFtbHBhcmFtcyh5YW1sUGFyYW1zKTsKIAkJCQkJCQkJCXBvbGljeUFkYXB0ZXIuc2V0QXR0cmlidXRlcyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSk7CkBAIC0yMjgsNyArMjQwLDcgQEAKIAkJCQkJCQkJcHJlUG9wdWxhdGVEZWNpc2lvbkNvbXBvdW5kUnVsZUFsZ29yaXRobShpbmRleCwgZGVjaXNpb25BcHBseSk7CiAJCQkJCQkJCXBvbGljeUFkYXB0ZXIuc2V0UnVsZUFsZ29yaXRobXNjaG9pY2VzKHJ1bGVBbGdvcml0aG1MaXN0KTsKIAkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UgaWYgKCgoUnVsZVR5cGUpIG9iamVjdCkuZ2V0RWZmZWN0KCkuZXF1YWxzKEVmZmVjdFR5cGUuUEVSTUlUKSkgeworCQkJCQkJfSBlbHNlIGlmKHBvbGljeUFkYXB0ZXIuZ2V0UnVsZVByb3ZpZGVyKCkhPW51bGwgJiYgcG9saWN5QWRhcHRlci5nZXRSdWxlUHJvdmlkZXIoKS5lcXVhbHMoIlJhaW55X0RheSIpJiYgKChSdWxlVHlwZSkgb2JqZWN0KS5nZXRFZmZlY3QoKS5lcXVhbHMoRWZmZWN0VHlwZS5QRVJNSVQpKSB7CiAJCQkJCQkJCiAJCQkJCQkJVGFyZ2V0VHlwZSBydWxlVGFyZ2V0ID0gKChSdWxlVHlwZSkgb2JqZWN0KS5nZXRUYXJnZXQoKTsKIAkJCQkJCQlBZHZpY2VFeHByZXNzaW9uc1R5cGUgYWR2aWNlRXhwcmVzc2lvbiA9ICgoUnVsZVR5cGUpIG9iamVjdCkuZ2V0QWR2aWNlRXhwcmVzc2lvbnMoKTsKQEAgLTMwMyw4ICszMTUsOCBAQAogCQlMaXN0PEpBWEJFbGVtZW50PD8+PiBqYXhiRGVjaXNpb25UeXBlcyA9IGRlY2lzaW9uQXBwbHkuZ2V0RXhwcmVzc2lvbigpOwogCQlmb3IgKEpBWEJFbGVtZW50PD8+IGpheGJFbGVtZW50IDogamF4YkRlY2lzaW9uVHlwZXMpIHsKIAkJCS8vIElmIFRoZXJlIGlzIEF0dHJpYnV0ZSBWYWx1ZSB1bmRlciBEZWNpc2lvbiBUeXBlIHRoYXQgbWVhbnMgd2UgY2FtZSB0byB0aGUgZmluYWwgY2hpbGQKLQkJCWlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkgewotCQkJCWxvZ2dlci5kZWJ1ZygiUHJlcG9wdWxhdGluZyBydWxlIGFsZ29pcnRobTogIiArIGluZGV4KTsKKwkJCWlmIChwb2xpY3lMb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCXBvbGljeUxvZ2dlci5kZWJ1ZygiUHJlcG9wdWxhdGluZyBydWxlIGFsZ29pcnRobTogIiArIGluZGV4KTsKIAkJCX0KIAkJCS8vIENoZWNrIHRvIHNlZSBpZiBBdHRyaWJ1dGUgVmFsdWUgZXhpc3RzLCBpZiB5ZXMgdGhlbiBpdCBpcyBub3QgYSBjb21wb3VuZCBydWxlCiAJCQlpZihqYXhiRWxlbWVudC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgQXR0cmlidXRlVmFsdWVUeXBlKSB7CkBAIC0zMjEsOCArMzMzLDggQEAKIAkJCQlpbmRleCA9IHByZVBvcHVsYXRlRGVjaXNpb25Db21wb3VuZFJ1bGVBbGdvcml0aG0oaW5kZXgsIGlubmVyRGVjaXNpb25BcHBseSk7CiAJCQl9CiAJCQkvLyBQb3B1bGF0ZSBjb21ibyBib3gKLQkJCWlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkgewotCQkJCWxvZ2dlci5kZWJ1ZygiUHJlcG9wdWxhdGluZyBDb21wb3VuZCBydWxlIGFsZ29yaXRobTogIiArIGluZGV4KTsKKwkJCWlmIChwb2xpY3lMb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCXBvbGljeUxvZ2dlci5kZWJ1ZygiUHJlcG9wdWxhdGluZyBDb21wb3VuZCBydWxlIGFsZ29yaXRobTogIiArIGluZGV4KTsKIAkJCX0KIAkJCU1hcDxTdHJpbmcsIFN0cmluZz4gcnVsZSA9IG5ldyBIYXNoTWFwPD4oKTsKIAkJCWZvciAoU3RyaW5nIGtleSA6IFBvbGljeUNvbnRyb2xsZXIuZ2V0RHJvcERvd25NYXAoKS5rZXlTZXQoKSkgewpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BEUENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9QRFBDb250cm9sbGVyLmphdmEKaW5kZXggMmU5NzcxZS4uNmVmNzE2NSAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BEUENvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUERQQ29udHJvbGxlci5qYXZhCkBAIC01OSw3ICs1OSw3IEBACiBAQ29udHJvbGxlcgogQFJlcXVlc3RNYXBwaW5nKHsiLyJ9KQogcHVibGljIGNsYXNzIFBEUENvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsICBMb2dnZXIgbG9nZ2VyID0gRmxleExvZ2dlci5nZXRMb2dnZXIoUERQQ29udHJvbGxlci5jbGFzcyk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgIExvZ2dlciBwb2xpY3lMb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihQRFBDb250cm9sbGVyLmNsYXNzKTsKIAogCXByb3RlY3RlZCBMaXN0PEVjb21wUERQR3JvdXA+IGdyb3VwcyA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QobmV3IEFycmF5TGlzdDxFY29tcFBEUEdyb3VwPigpKTsKIAlwcml2YXRlIFBEUEdyb3VwQ29udGFpbmVyIGNvbnRhaW5lcjsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkJCX0KIAkJCX0gY2F0Y2ggKFBBUEV4Y2VwdGlvbiBlKSB7CiAJCQkJU3RyaW5nIG1lc3NhZ2UgPSAiVW5hYmxlIHRvIHJldHJpZXZlIEdyb3VwcyBmcm9tIHNlcnZlcjogIiArIGU7Ci0JCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfU1lTVEVNX0VSUk9SKyJQYXAgRW5naW5lIGlzIE51bGwiICsgbWVzc2FnZSk7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfU1lTVEVNX0VSUk9SKyJQYXAgRW5naW5lIGlzIE51bGwiICsgbWVzc2FnZSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0xNjcsMTIgKzE2NywxMiBAQAogCQkJcmVzcG9uc2UuZ2V0V3JpdGVyKCkud3JpdGUoai50b1N0cmluZygpKTsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSByZXRyaWV2aW5nIHRoZSBQRFAgR3JvdXAgZGF0YSIgKyBlKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgcmV0cmlldmluZyB0aGUgUERQIEdyb3VwIGRhdGEiICsgZSk7CiAJCX0KIAl9CiAKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvcGRwX0dyb3VwL3NhdmVfcGRwX2dyb3VwIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyBzYXZlUERQR3JvdXAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgc2F2ZVBEUEdyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKXsKIAkJdHJ5IHsKIAkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCQlQb2xpY3lDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBnZXRQb2xpY3lDb250cm9sbGVySW5zdGFuY2UoKTsKQEAgLTE4OSw3ICsxODksNyBAQAogCiAJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewogCQkJCVN0cmluZyBtZXNzYWdlID0gIlVuYWJsZSB0byBjcmVhdGUgR3JvdXAuICBSZWFzb246XG4iICsgZS5nZXRNZXNzYWdlKCk7Ci0JCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSBjcmVhdGluZyB0aGUgUERQIEdyb3VwIiArIG1lc3NhZ2UpOworCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIFBEUCBHcm91cCIgKyBtZXNzYWdlICsgZSk7CiAJCQl9CiAKIApAQCAtMjAyLDIxICsyMDIsMjMgQEAKIAkJCUpzb25NZXNzYWdlIG1zZyA9IG5ldyBKc29uTWVzc2FnZShtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKGdyb3VwcykpOwogCQkJSlNPTk9iamVjdCBqID0gbmV3IEpTT05PYmplY3QobXNnKTsKIAkJCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOwotCi0JCQlyZXR1cm4gbnVsbDsKIAkJfQogCQljYXRjaCAoRXhjZXB0aW9uIGUpewotCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSBTYXZpbmcgdGhlIFBEUCBHcm91cCIgKyBlKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgU2F2aW5nIHRoZSBQRFAgR3JvdXAiICsgZSk7CiAJCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7Ci0JCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQkJCW91dC53cml0ZShlLmdldE1lc3NhZ2UoKSk7CisJCQlQcmludFdyaXRlciBvdXQgPSBudWxsOworCQkJdHJ5IHsKKwkJCQlyZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOworCQkJCW91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworCQkJCW91dC53cml0ZShlLmdldE1lc3NhZ2UoKSk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIFNhdmluZyB0aGUgUERQIEdyb3VwIiArIGUxKTsKKwkJCX0KIAkJfQotCQlyZXR1cm4gbnVsbDsKIAl9CiAKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvcGRwX0dyb3VwL3JlbW92ZV9wZHBfZ3JvdXAifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IHJlbW92ZVBEUEdyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlwdWJsaWMgdm9pZCByZW1vdmVQRFBHcm91cChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CiAJCXRyeXsKIAkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKQEAgLTI0MCwyMSArMjQyLDIzIEBACiAJCQlKc29uTWVzc2FnZSBtc2cgPSBuZXcgSnNvbk1lc3NhZ2UobWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhncm91cHMpKTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KG1zZyk7CiAJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQotCQkJcmV0dXJuIG51bGw7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgUmVtb3ZpbmcgdGhlIFBEUCBHcm91cCIgKyBlKTsKLQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOwotCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgUmVtb3ZpbmcgdGhlIFBEUCBHcm91cCIgKyBlKTsKKwkJCVByaW50V3JpdGVyIG91dDsKKwkJCXRyeSB7CisJCQkJcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7CisJCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKKwkJCQlvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKwkJCQlvdXQud3JpdGUoZS5nZXRNZXNzYWdlKCkpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrIGUxKTsKKwkJCX0KIAkJfQotCQlyZXR1cm4gbnVsbDsKIAl9CiAKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvcGRwX0dyb3VwL3NhdmVfcGRwVG9ncm91cCJ9LCBtZXRob2Q9e29yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWV0aG9kLlBPU1R9KQotCXB1YmxpYyBNb2RlbEFuZFZpZXcgc2F2ZVBEUFRvR3JvdXAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgc2F2ZVBEUFRvR3JvdXAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpewogCQl0cnkgewogCQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKIAkJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOwpAQCAtMjczLDcgKzI3Nyw3IEBACiAJCQkJfQogCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIAkJCQlTdHJpbmcgbWVzc2FnZSA9ICJVbmFibGUgdG8gY3JlYXRlIEdyb3VwLiAgUmVhc29uOlxuIiArIGUuZ2V0TWVzc2FnZSgpOwotCQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgQ3JlYXRpbmcgUGRwIGluIFBEUCBHcm91cCIgKyBtZXNzYWdlKTsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIENyZWF0aW5nIFBkcCBpbiBQRFAgR3JvdXAiICsgbWVzc2FnZSArIGUpOwogCQkJfQogCiAKQEAgLTI4NiwyMSArMjkwLDIzIEBACiAJCQlKc29uTWVzc2FnZSBtc2cgPSBuZXcgSnNvbk1lc3NhZ2UobWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhncm91cHMpKTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KG1zZyk7CiAJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQotCQkJcmV0dXJuIG51bGw7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgQ3JlYXRpbmcgUGRwIGluIFBEUCBHcm91cCIgKyBlKTsKLQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOwotCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgQ3JlYXRpbmcgUGRwIGluIFBEUCBHcm91cCIgKyBlKTsKKwkJCVByaW50V3JpdGVyIG91dDsKKwkJCXRyeSB7CisJCQkJcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7CisJCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKKwkJCQlvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKwkJCQlvdXQud3JpdGUoZS5nZXRNZXNzYWdlKCkpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrIGUxKTsKKwkJCX0KIAkJfQotCQlyZXR1cm4gbnVsbDsKIAl9CiAKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvcGRwX0dyb3VwL3JlbW92ZV9wZHBGcm9tR3JvdXAifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IHJlbW92ZVBEUEZyb21Hcm91cChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcHVibGljIHZvaWQgcmVtb3ZlUERQRnJvbUdyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKXsKIAkJdHJ5ewogCQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKIAkJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOwpAQCAtMzIwLDE3ICszMjYsMTkgQEAKIAkJCVN0cmluZyByZXNwb25zZVN0cmluZyA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZ3JvdXBzKTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KCJ7cGRwRW50aXR5RGF0YXM6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7CiAJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQotCQkJcmV0dXJuIG51bGw7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgUmVtb3ZpbmcgUGRwIGZyb20gUERQIEdyb3VwIiArIGUpOwotCQkJcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7Ci0JCQlyZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOwotCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0JCQlvdXQud3JpdGUoZS5nZXRNZXNzYWdlKCkpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSBSZW1vdmluZyBQZHAgZnJvbSBQRFAgR3JvdXAiICsgZSk7CisJCQlQcmludFdyaXRlciBvdXQ7CisJCQl0cnkgeworCQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOworCQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7CisJCQkJb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisJCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiKyBlMSk7CisJCQl9CiAJCX0KLQkJcmV0dXJuIG51bGw7CiAJfQogCiAJcHJpdmF0ZSBQb2xpY3lDb250cm9sbGVyIGdldFBvbGljeUNvbnRyb2xsZXJJbnN0YW5jZSgpewpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lFeHBvcnRBbmRJbXBvcnRDb250cm9sbGVyLmphdmEKaW5kZXggYmYyYTE0OC4uOGZlMmQ0OSAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5RXhwb3J0QW5kSW1wb3J0Q29udHJvbGxlci5qYXZhCkBAIC05OSw2ICs5OSwxNCBAQAogCQl0aGlzLnBvbGljeUNvbnRyb2xsZXIgPSBwb2xpY3lDb250cm9sbGVyOwogCX0KIAorCXB1YmxpYyBzdGF0aWMgQ29tbW9uQ2xhc3NEYW8gZ2V0Q29tbW9uQ2xhc3NEYW8oKSB7CisJCXJldHVybiBjb21tb25DbGFzc0RhbzsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29tbW9uQ2xhc3NEYW8oQ29tbW9uQ2xhc3NEYW8gY29tbW9uQ2xhc3NEYW8pIHsKKwkJUG9saWN5RXhwb3J0QW5kSW1wb3J0Q29udHJvbGxlci5jb21tb25DbGFzc0RhbyA9IGNvbW1vbkNsYXNzRGFvOworCX0KKwogCUBBdXRvd2lyZWQKIAlwcml2YXRlIFBvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIoQ29tbW9uQ2xhc3NEYW8gY29tbW9uQ2xhc3NEYW8pewogCQlQb2xpY3lFeHBvcnRBbmRJbXBvcnRDb250cm9sbGVyLmNvbW1vbkNsYXNzRGFvID0gY29tbW9uQ2xhc3NEYW87CkBAIC0xMDcsNyArMTE1LDcgQEAKIAlwdWJsaWMgUG9saWN5RXhwb3J0QW5kSW1wb3J0Q29udHJvbGxlcigpe30KIAogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9wb2xpY3lfZG93bmxvYWQvZXhwb3J0UG9saWN5Lmh0bSJ9LCBtZXRob2Q9e29yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWV0aG9kLlBPU1R9KQotCXB1YmxpYyB2b2lkIEV4cG9ydFBvbGljeShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbnsKKwlwdWJsaWMgdm9pZCBleHBvcnRQb2xpY3koSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CiAJCXRyeXsKIAkJCVN0cmluZyBmaWxlID0gbnVsbDsKIAkJCXNlbGVjdGVkUG9saWN5ID0gbmV3IEFycmF5TGlzdDw+KCk7CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5VmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lWYWxpZGF0aW9uQ29udHJvbGxlci5qYXZhCmluZGV4IGNjNjkwM2IuLjBmOGIzNzkgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lWYWxpZGF0aW9uQ29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lWYWxpZGF0aW9uQ29udHJvbGxlci5qYXZhCkBAIC00MDEsMTAgKzQwMSw4IEBACiAJCQkJCQkJCQlpbnQgZW5kTnVtID0gSW50ZWdlci5wYXJzZUludCh0ZW1wU3RyaW5nWzFdKTsKIAkJCQkJCQkJCVN0cmluZyByZXR1cm5TdHJpbmcgPSAiSW52YWxpZCBSYW5nZToiICsgck1hcC5nZXRLZXkoKSArICIgbXVzdCBiZSBiZXR3ZWVuICIgCiAJCQkJCQkJCQkJCSsgc3RhcnROdW0gKyAiIC0gIiAgKyBlbmROdW0gKyAiLCI7Ci0JCQkJCQkJCQlpZiAoaXNJbnRlZ2VyKHZhbHVlLnJlcGxhY2UoIlwiIiwgIiIpKSl7CisJCQkJCQkJCQlpZiAoUG9saWN5VXRpbHMuaXNJbnRlZ2VyKHZhbHVlLnJlcGxhY2UoIlwiIiwgIiIpKSl7CiAJCQkJCQkJCQkJaW50IHJlc3VsdCA9IEludGVnZXIucGFyc2VJbnQodmFsdWUucmVwbGFjZSgiXCIiLCAiIikpOwotCi0KIAkJCQkJCQkJCQlpZiAocmVzdWx0IDwgc3RhcnROdW0gfHwgcmVzdWx0ID4gZW5kTnVtKXsKIAkJCQkJCQkJCQkJcmVzcG9uc2VTdHJpbmcuYXBwZW5kKHJldHVyblN0cmluZyk7CQkJCQkJCQkJCiAJCQkJCQkJCQkJCXZhbGlkID0gZmFsc2U7CkBAIC00OTIsMTMgKzQ5MCwyMCBAQAogCQkJCQkJCWlmKHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldExpbWl0KCk9PW51bGwpewogCQkJCQkJCQlyZXNwb25zZVN0cmluZy5hcHBlbmQoIiBHdWFyZCBQYXJhbXMgPGI+TGltaXQ8L2I+IGlzIFJlcXVpcmVkICIgKyAiPGJyPiIpOwogCQkJCQkJCQl2YWxpZCA9IGZhbHNlOwotCQkJCQkJCX1lbHNlIGlmKCFpc0ludGVnZXIocG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0TGltaXQoKSkpeworCQkJCQkJCX1lbHNlIGlmKCFQb2xpY3lVdGlscy5pc0ludGVnZXIocG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0TGltaXQoKSkpewogCQkJCQkJCQlyZXNwb25zZVN0cmluZy5hcHBlbmQoIiBHdWFyZCBQYXJhbXMgPGI+TGltaXQ8L2I+IFNob3VsZCBiZSBJbnRlZ2VyICIgKyAiPGJyPiIpOwogCQkJCQkJCQl2YWxpZCA9IGZhbHNlOwogCQkJCQkJCX0KIAkJCQkJCQlpZihwb2xpY3lEYXRhLmdldFlhbWxwYXJhbXMoKS5nZXRUaW1lV2luZG93KCk9PW51bGwpewogCQkJCQkJCQlyZXNwb25zZVN0cmluZy5hcHBlbmQoIkd1YXJkIFBhcmFtcyA8Yj5UaW1lIFdpbmRvdzwvYj4gaXMgUmVxdWlyZWQiICsgIjxicj4iKTsKIAkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQl9ZWxzZSBpZighUG9saWN5VXRpbHMuaXNJbnRlZ2VyKHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldFRpbWVXaW5kb3coKSkpeworCQkJCQkJCQlyZXNwb25zZVN0cmluZy5hcHBlbmQoIiBHdWFyZCBQYXJhbXMgPGI+VGltZSBXaW5kb3c8L2I+IFNob3VsZCBiZSBJbnRlZ2VyICIgKyAiPGJyPiIpOworCQkJCQkJCQl2YWxpZCA9IGZhbHNlOworCQkJCQkJCX0KKwkJCQkJCQlpZihwb2xpY3lEYXRhLmdldFlhbWxwYXJhbXMoKS5nZXRUaW1lVW5pdHMoKT09bnVsbCl7CisJCQkJCQkJCXJlc3BvbnNlU3RyaW5nLmFwcGVuZCgiR3VhcmQgUGFyYW1zIDxiPlRpbWUgVW5pdHM8L2I+IGlzIFJlcXVpcmVkIiArICI8YnI+Iik7CisJCQkJCQkJCXZhbGlkID0gZmFsc2U7CiAJCQkJCQkJfQogCQkJCQkJfWVsc2UgaWYoIkdVQVJEX0JMX1lBTUwiLmVxdWFscyhwb2xpY3lEYXRhLmdldFJ1bGVQcm92aWRlcigpKSl7CiAJCQkJCQkJaWYocG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0QmxhY2tMaXN0KCk9PW51bGwgfHwgcG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0QmxhY2tMaXN0KCkuaXNFbXB0eSgpKXsKQEAgLTYyMywxNSArNjI4LDYgQEAKIAkJcmV0dXJuIG51bGw7CiAJfQogCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNJbnRlZ2VyKFN0cmluZyBudW1iZXIpIHsKLQkJdHJ5ewotCQkJSW50ZWdlci5wYXJzZUludChudW1iZXIpOwotCQl9Y2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQogCXByb3RlY3RlZCBTdHJpbmcgIGVtcHR5VmFsaWRhdG9yKFN0cmluZyBmaWVsZCl7CiAJCVN0cmluZyBlcnJvcjsKIAkJaWYgKCIiLmVxdWFscyhmaWVsZCkgfHwgZmllbGQuY29udGFpbnMoIiAiKSB8fCAhZmllbGQubWF0Y2hlcygiXlthLXpBLVowLTlfXSokIikpIHsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL0NTUy9ib290c3RyYXAvZG9jcy9hc3NldHMvanMvdmVuZG9yL2F1dG9wcmVmaXhlci5qcyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL0NTUy9ib290c3RyYXAvZG9jcy9hc3NldHMvanMvdmVuZG9yL2F1dG9wcmVmaXhlci5qcwppbmRleCAyOTE5ZjVmLi4yY2Y1N2QzIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9DU1MvYm9vdHN0cmFwL2RvY3MvYXNzZXRzL2pzL3ZlbmRvci9hdXRvcHJlZml4ZXIuanMKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvQ1NTL2Jvb3RzdHJhcC9kb2NzL2Fzc2V0cy9qcy92ZW5kb3IvYXV0b3ByZWZpeGVyLmpzCkBAIC0xNDc3OCw3ICsxNDc3OCw3IEBACiAKIHZhciBDb250YWluZXIgPSByZXF1aXJlKCIuL2NvbnRhaW5lciIpOwogCi0vLyBDU1MgYXQtcnVsZSBsaWtlIJN0aGlzLmtleWZyYW1lcyBuYW1lIHsgfZQuCisvLyBDU1MgYXQtcnVsZSBsaWtlIO+/vXRoaXMua2V5ZnJhbWVzIG5hbWUgeyB977+9LgogLy8KIC8vIENhbiBjb250YWluIGRlY2xhcmF0aW9ucyAobGlrZSB0aGlzLmZvbnQtZmFjZSBvciB0aGlzLnBhZ2UpIG90IGFub3RoZXIgcnVsZXMuCiB2YXIgQXRSdWxlID0gKGZ1bmN0aW9uIChDb250YWluZXIpIHsKQEAgLTE1NDg2LDcgKzE1NDg2LDcgQEAKIHZhciBOb2RlID0gcmVxdWlyZSgiLi9ub2RlIik7CiB2YXIgdmVuZG9yID0gcmVxdWlyZSgiLi92ZW5kb3IiKTsKIAotLy8gQ1NTIGRlY2xhcmF0aW9uIGxpa2Ugk2NvbG9yOiBibGFja5QgaW4gcnVsZXMKKy8vIENTUyBkZWNsYXJhdGlvbiBsaWtlIO+/vWNvbG9yOiBibGFja++/vSBpbiBydWxlcwogdmFyIERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uIChOb2RlKSB7CiAgICAgZnVuY3Rpb24gRGVjbGFyYXRpb24oZGVmYXVsdHMpIHsKICAgICAgICAgdGhpcy50eXBlID0gImRlY2wiOwpAQCAtMTcyODEsNyArMTcyODEsNyBAQAogdmFyIERlY2xhcmF0aW9uID0gcmVxdWlyZSgiLi9kZWNsYXJhdGlvbiIpOwogdmFyIGxpc3QgPSByZXF1aXJlKCIuL2xpc3QiKTsKIAotLy8gQ1NTIHJ1bGUgbGlrZSCTYSB7IH2UCisvLyBDU1MgcnVsZSBsaWtlIO+/vWEgeyB977+9CiB2YXIgUnVsZSA9IChmdW5jdGlvbiAoQ29udGFpbmVyKSB7CiAgICAgZnVuY3Rpb24gUnVsZShkZWZhdWx0cykgewogICAgICAgICB0aGlzLnR5cGUgPSAicnVsZSI7CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9XaW5kb3dzL1B1c2h0YWJXaW5kb3cvcmVtb3ZlR3JvdXBQb2xpY2llc1dpbmRvdy5odG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvV2luZG93cy9QdXNodGFiV2luZG93L3JlbW92ZUdyb3VwUG9saWNpZXNXaW5kb3cuaHRtbAppbmRleCA2ZWJkYTQzLi4wY2QzYzUyIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9XaW5kb3dzL1B1c2h0YWJXaW5kb3cvcmVtb3ZlR3JvdXBQb2xpY2llc1dpbmRvdy5odG1sCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL1dpbmRvd3MvUHVzaHRhYldpbmRvdy9yZW1vdmVHcm91cFBvbGljaWVzV2luZG93Lmh0bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8tLT4KIDxzY3JpcHQgdHlwZT0idGV4dC9uZy10ZW1wbGF0ZSIgaWQ9InJlbW92ZV9QRFBHcm91cFBvbGljaWVzX3BvcHVwLmh0bWwiPgotPGRpdiBjbGFzcz0ibW9kYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OjgwJSIgZGF0YS1iYWNrZHJvcD0ic3RhdGljIgorPGRpdiBjbGFzcz0ibW9kYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyB3aWR0aDogMTAwJSIgaGVpZ2h0OjgwJSIgZGF0YS1iYWNrZHJvcD0ic3RhdGljIgogCWRhdGEta2V5Ym9hcmQ9ImZhbHNlIj4KIAk8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ctbGciPgogCTxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVDb250cm9sbGVyL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lDb250cm9sbGVyLmpzIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVDb250cm9sbGVyL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lDb250cm9sbGVyLmpzCmluZGV4IGZiOTY2NDMuLjk0YzFiYzkgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EQ0FFTWljcm9TZXJ2aWNlUG9saWN5Q29udHJvbGxlci5qcworKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZUNvbnRyb2xsZXIvRENBRU1pY3JvU2VydmljZVBvbGljeUNvbnRyb2xsZXIuanMKQEAgLTE2MywxMCArMTYzLDE0IEBACiAJCQkJdmFyIGFkZEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICsgMTsKIAkJCQljbG9uZS5pZCA9ICcnK3ZhbHVlKydAJythZGRFbGVtZW50OwogCQkJCWNsb25lLnZhbHVlID0gJyc7CisJCQkJY2xvbmUuY2xhc3NOYW1lICs9ICcgY2hpbGRfc2luZ2xlJzsgLy9oZXJlIGNsb25lZCBpcyBzaW5nbGUgZWxlbWVudAogCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYuIit2YWx1ZSkuYXBwZW5kQ2hpbGQoY2xvbmUpOwogCQkJCXBsYWluQXR0cmlidXRlS2V5cy5wdXNoKCcnK3ZhbHVlKydAJythZGRFbGVtZW50KTsKIAkJCX1lbHNlewogCQkJCWRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkaXYuIit2YWx1ZSsiQDAiKTsKKwkJCQkKKwkJCQlkaXYuY2xhc3NOYW1lICs9ICcgY2hpbGRyZW5fZ3JvdXAnOyAvL2hlcmUgaXMgZGl2IHdpdGggYSBncm91cCBvZiBjaGlsZHJlbi4KKwkJCQkKIAkJCQl2YXIgY2hpbGRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDsKIAkJCQl2YXIgY291bnRQYXJlbnQgPSBwYXJlbnRFbGVtZW50LmNoaWxkRWxlbWVudENvdW50OwogCQkJCXZhciBjaGlsZEVsZW1lbnRTdHJpbmcgPSBjaGlsZEVsZW1lbnQuaW5uZXJIVE1MOwpAQCAtMjk1LDkgKzI5OSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAJdmFyIHBsYWluQXR0cmlidXRlS2V5cyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAJJHNjb3BlLmRjYWVNb2RlbERhdGEgPSBkYXRhWzBdLmRjYWVNb2RlbERhdGE7CiAgICAgICAgICAgICAgICAgICAgIAkkc2NvcGUuZGNhZUpzb25EYXRlID0gZGF0YVswXS5qc29uVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIAljb25zb2xlLmxvZygiJHNjb3BlLmRjYWVKc29uRGF0ZTogIiArICRzY29wZS5kY2FlSnNvbkRhdGUpOwkKICAgICAgICAgICAgICAgICAgICAgCXZhciBhdHRyaWJ1dGVzID0gJHNjb3BlLmRjYWVNb2RlbERhdGEuYXR0cmlidXRlczsKICAgICAgICAgICAgICAgICAgICAgCXZhciByZWZBdHRyaWJ1dGVzID0gJHNjb3BlLmRjYWVNb2RlbERhdGEucmVmX2F0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgIAl2YXIgc3ViQXR0cmlidXRlcyA9IAkkc2NvcGUuZGNhZU1vZGVsRGF0YS5zdWJfYXR0cmlidXRlczsKKyAgICAgICAgICAgICAgICAgICAgCXZhciBzdWJBdHRyaWJ1dGVzID0gCSRzY29wZS5kY2FlTW9kZWxEYXRhLnN1Yl9hdHRyaWJ1dGVzOyAgICAgICAgICAgICAgICAgICAgCQorICAgICAgICAgICAgICAgICAgICAJY29uc29sZS5sb2coInN1YkF0dHJpYnV0ZXM6ICIgKyBzdWJBdHRyaWJ1dGVzKTsJCisgICAgICAgICAgICAgICAgICAgIAkKICAgICAgICAgICAgICAgICAgICAgICAgCXZhciBlbnVtQXR0cmlidXRlcyA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLmVudW1WYWx1ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIAl2YXIgYW5ub3RhdGlvbiA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLmFubm90YXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIAl2YXIgZGljdGlvbmFyeSA9ICRzY29wZS5taWNyb1NlcnZpY2VBdHRyaWJ1dGVEaWN0aW9uYXJ5RGF0YXM7CkBAIC00NDIsMTEgKzQ0OSwxMSBAQAogCSAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheVRlc3QpID09PSAnW29iamVjdCBBcnJheV0nOwogCSAgICB9CiAJICAgIHZhciBsYWJsZUxpc3QgPSBbXTsKLQkgICAgCiAJCWZ1bmN0aW9uIGRlY29uc3RydWN0SlNPTihkYXRhVGVzdCwgbGV2ZWwgLCBuYW1lKSB7CiAJCQl2YXIgYXJyYXkgPSBmYWxzZTsKIAkJCXZhciBsYWJlbCA9IGxldmVsOwogCQkJIHZhciBzdHJpbmdWYWx1ZSA9ICJqYXZhLmxhbmcuU3RyaW5nIjsKKwkJCSB2YXIgc3RyaW5nID0gInN0cmluZyI7CiAJCQkgdmFyIGludFZhbHVlID0gImludCI7CiAJCQkgdmFyIGRvdWJsZSA9ICJkb3VibGUiOwogCQkJIHZhciBib29sZWFuID0gImJvb2xlYW4iOwpAQCAtNDU5LDYgKzQ2Niw3IEBACiAJCSAgICBmb3IgKGtleSBpbiBkYXRhVGVzdCkgewogCQkgICAgCWFycmF5ID0gaXNBcnJheShkYXRhVGVzdFtrZXldKTsKIAkJICAgIAljb25zb2xlLmxvZyhrZXkgLCBkYXRhVGVzdFtrZXldKTsKKwkgICAgCQogCQkgICAgCWlmICghIWRhdGFUZXN0W2tleV0gJiYgdHlwZW9mKGRhdGFUZXN0W2tleV0pPT0ib2JqZWN0IikgewogCQkgICAgCQlpZiAoYXJyYXk9PWZhbHNlICYmIGtleSE9PSIwIil7CiAJCSAgICAJCQkkc2NvcGUubGFiZWxMYXlvdXQobGFiZWwsIGtleSwgYXJyYXkgKTsgCQkJCkBAIC01MDAsMTEgKzUwOCwzNSBAQAogCQkgICAgICAgIAlpZiAoZGF0YVRlc3Rba2V5XS5pbmNsdWRlcygncmVxdWlyZWQtdHJ1ZScpKXsKIAkJICAgICAgICAJCWlzUmVxdWlyZWQgPSB0cnVlOwogCQkgICAgICAgIAl9Ci0JCSAgICAgICAgCWNvbnNvbGUubG9nKCJhdHRpcmJ1dGVMYWJlbCA9ICIgKyBhdHRpcmJ1dGVMYWJlbCk7CisJCSAgICAJCQorCQkgICAgCQl2YXIgc3ViQXR0cmlidXRlcyA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLnN1Yl9hdHRyaWJ1dGVzOworCQkgICAgCQkKKwkJICAgIAkJaWYoc3ViQXR0cmlidXRlcyl7CQkgICAgCQkJCisJCSAgICAJCQl2YXIganNvbk9iamVjdCA9IEpTT04ucGFyc2Uoc3ViQXR0cmlidXRlcyk7CQkgICAgCQkJCisJCSAgICAJCQl2YXIgYWxsa2V5cyA9IE9iamVjdC5rZXlzKGpzb25PYmplY3QpOworCQkgICAgCQkJaWYoYWxsa2V5cyl7CisJCSAgICAJCQkJZm9yICh2YXIgayA9IDA7IGsgPCBhbGxrZXlzLmxlbmd0aDsgaysrKSB7CisJCSAgICAJCQkJCXZhciBrZXlWYWx1ZSA9IGFsbGtleXNba107CisJCSAgICAJCQkJCWNvbnNvbGUubG9nKCIga2V5VmFsdWU6anNvbk9iamVjdFsiK2tleVZhbHVlKyAiXTogIiArIGpzb25PYmplY3Rba2V5VmFsdWVdKTsKKwkJICAgIAkJCQkJaWYoanNvbk9iamVjdFtrZXlWYWx1ZV0peworCQkgICAgCQkJCQkJdmFyIHRlbXBPYmplY3QgPSBqc29uT2JqZWN0W2tleVZhbHVlXTsKKwkJICAgIAkJCQkJCWlmKHRlbXBPYmplY3QgJiYgdGVtcE9iamVjdFtrZXldKXsKKwkJICAgIAkJCQkgICAgICAgIAlpZiAodGVtcE9iamVjdFtrZXldLmluY2x1ZGVzKCdyZXF1aXJlZC10cnVlJykpeworCQkgICAgCQkJCSAgICAgICAgCQlpc1JlcXVpcmVkID0gdHJ1ZTsKKwkJICAgIAkJCQkgICAgICAgIAl9CQorCQkgICAgCQkJCQkJfQorCQkgICAgCQkJCQl9CisJCSAgICAJCQkJfQkJICAgIAkJCQkKKwkJICAgIAkJCX0JCSAgICAJCQkKKwkJICAgIAkJfQorCQkgICAgCQkKIAkJICAgICAgICAJc3dpdGNoIChkYXRhVGVzdFtrZXldLnNwbGl0KHNwbGl0Y29sb24pWzBdKXsKIAkJICAgICAgICAJCWNhc2Ugc3RyaW5nVmFsdWU6CiAJCQkgICAgICAgIAkJJHNjb3BlLmF0dHJpYnV0ZUJveChhdHRyaWJ1dGVrZXksIGFycmF5LCBhdHRpcmJ1dGVMYWJlbCwgZGVmYXVsdFZhbHVlLCBpc1JlcXVpcmVkKTsKIAkJICAgICAgICAJCQlicmVhazsKKwkJICAgICAgICAJCWNhc2Ugc3RyaW5nOgorCQkJICAgICAgICAJCSRzY29wZS5hdHRyaWJ1dGVCb3goYXR0cmlidXRla2V5LCBhcnJheSwgYXR0aXJidXRlTGFiZWwsIGRlZmF1bHRWYWx1ZSwgaXNSZXF1aXJlZCk7CisJCSAgICAgICAgCQkJYnJlYWs7CQkgICAgICAgIAkJCQogCQkgICAgICAgIAkJY2FzZSBpbnRWYWx1ZTogCiAJCSAgICAgICAgCQkJJHNjb3BlLmF0dHJpYnV0ZUJveChhdHRyaWJ1dGVrZXksIGFycmF5LCBhdHRpcmJ1dGVMYWJlbCwgZGVmYXVsdFZhbHVlLCBpc1JlcXVpcmVkKTsKIAkJICAgICAgICAJCQlicmVhazsKQEAgLTU4MiwxMyArNjE0LDEzIEBACiAJCQl2YXIgYnV0dG9uYWRkTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiKyIpOyAgICAgICAKIAkJCWFkZEJ1dHRvbi5hcHBlbmRDaGlsZChidXR0b25hZGRMYWJlbCk7IAogCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgiaWQiLCBsYWJlbFZhbHVlICsgYXR0aWJ1dGVLZXkpOwotCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiYnRuIGJ0bi1kZWZhdWx0Iik7CisJCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWFkZC1yZW1vdmUiKTsKIAkJCWFkZEJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWNsaWNrIiAsICAnYWRkTmV3Q2hvaWNlKCInK2xhYmVsVmFsdWUgKyBhdHRpYnV0ZUtleSsnIik7Jyk7CiAJCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJuZy1kaXNhYmxlZCIgLCAidGVtcC5wb2xpY3kucmVhZE9ubHkiKTsKIAkJCXZhciByZW1vdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKIAkJCXZhciBidXR0b25yZW1vdmVMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCItIik7ICAgICAgIAogCQkJcmVtb3ZlQnV0dG9uLmFwcGVuZENoaWxkKGJ1dHRvbnJlbW92ZUxhYmVsKTsgCi0JCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWRlZmF1bHQiKTsKKwkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImJ0biBidG4tYWRkLXJlbW92ZSIpOwogCQkJcmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgibmctY2xpY2siICwgICdyZW1vdmVDaG9pY2UoIicrbGFiZWxWYWx1ZSArIGF0dGlidXRlS2V5KyciKTsnKTsKIAkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWRpc2FibGVkIiAsICJ0ZW1wLnBvbGljeS5yZWFkT25seSIpOwogCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpLmFwcGVuZENoaWxkKGFkZEJ1dHRvbik7IApAQCAtNTk3LDYgKzYyOSw3IEBACiAJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQodGV4dEZpZWxkKTsgCiAJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQoYnIpOyAKIAkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklEKS5hcHBlbmRDaGlsZChkaXZUYWcpOyAKKwkJCQogCQl9ZWxzZXsKIAkJCWNoZWNrS2V5ID0gbGFiZWxWYWx1ZSArIGF0dGlidXRlS2V5OwogCQkJdGV4dEZpZWxkLnNldEF0dHJpYnV0ZSgiaWQiICwgJycrbGFiZWxWYWx1ZSArYXR0aWJ1dGVLZXkrJycpOwpAQCAtNjA5LDYgKzY0MiwxNiBAQAogCiAJCX0KIAkJCisJCWlmKGRpdklELmluY2x1ZGVzKCJAMCIpICYmIGRpdklELmluY2x1ZGVzKCJkaXYuIikpeworCQkJdmFyIGZpcnN0Q2hpbGRfSWQgPSBkaXZJRC5zcGxpdCgiQDAiKVswXTsKKwkJCXZhciBmaXJzdENoaWxkX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmaXJzdENoaWxkX0lkKTsKKwkJCWlmKGZpcnN0Q2hpbGRfZWxlbWVudCl7CisJCQkJZmlyc3RDaGlsZF9lbGVtZW50LmNsYXNzTmFtZSArPSAnIGNoaWxkcmVuX2dyb3VwJzsgIC8vaGVyZSBpcyBhIGRpdiB3aXRoIGEgZ3JvdXAgb2YgY2hpbGRyZW4uCisJCQl9CisJCX0KKwkJY29uc29sZS5sb2coJ2ZpcnN0Q2hpbGRfSWQ6ICcgKyBmaXJzdENoaWxkX0lkKTsKKwkJY29uc29sZS5sb2coJ2RpdklEOiAnICsgZGl2SUQpOworCQkKIAkJaWYgKGRlZmF1bHRWYWx1ZS5sZW5ndGggPiAwKXsJCiAJCQlpZihkZWZhdWx0VmFsdWUuaW5jbHVkZXMoIjoiKSl7CiAJCQkJZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnNwbGl0KCI6IilbMF07CkBAIC02NjEsMTggKzcwNCwyMCBAQAogCQl2YXIgbGFiZWx0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFibGVOYW1lKTsKIAkKIAkJbGFiZWwuYXBwZW5kQ2hpbGQobGFiZWx0ZXh0KTsKKwkJCisJCXZhciBzdWJBdHRyaWJ1dGVzID0gJHNjb3BlLmRjYWVNb2RlbERhdGEuc3ViX2F0dHJpYnV0ZXM7CiAKIAkJaWYobGFiZWxNYW55S2V5KXsKIAkJCXZhciBhZGRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKIAkJCXZhciBidXR0b25MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIrIik7ICAgICAgIAogCQkJYWRkQnV0dG9uLmFwcGVuZENoaWxkKGJ1dHRvbkxhYmVsKTsgCi0JCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWRlZmF1bHQiKTsKKwkJCWFkZEJ1dHRvbi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImJ0biBidG4tYWRkLXJlbW92ZSIpOwogCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgibmctY2xpY2siICwgICdhZGROZXdDaG9pY2UoIicrbGFiZWxWYWx1ZSArIGxhYmxlTmFtZSsnIik7Jyk7CiAJCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJuZy1kaXNhYmxlZCIgLCAidGVtcC5wb2xpY3kucmVhZE9ubHkiKTsKIAkJCXZhciByZW1vdmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCVVRUT04iKTsKIAkJCXZhciBidXR0b25yZW1vdmVMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCItIik7ICAgICAgIAogCQkJcmVtb3ZlQnV0dG9uLmFwcGVuZENoaWxkKGJ1dHRvbnJlbW92ZUxhYmVsKTsgCi0JCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWRlZmF1bHQiKTsKKwkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImJ0biBidG4tYWRkLXJlbW92ZSIpOwogCQkJcmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgibmctY2xpY2siICwgICdyZW1vdmVDaG9pY2UoIicrbGFiZWxWYWx1ZSArbGFibGVOYW1lKyciKTsnKTsKIAkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWRpc2FibGVkIiAsICJ0ZW1wLnBvbGljeS5yZWFkT25seSIpOyAKIAkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklEKS5hcHBlbmRDaGlsZChhZGRCdXR0b24pOyAKQEAgLTY4NSwxMiArNzMwLDE2IEBACiAJCQkKIAkJCXZhciBkaXZUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKIAkJCWRpdlRhZy5zZXRBdHRyaWJ1dGUoImlkIiwgaWQgKydAMCcpOworCQkJCisJCQlkaXZUYWcuY2xhc3NOYW1lICs9ICcgY2hpbGRyZW5fZ3JvdXAnOyAvL2hlcmUgaXMgZGl2IHdpdGggYSBncm91cCBvZiBjaGlsZHJlbi4KKwkJCQogCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmFwcGVuZENoaWxkKGRpdlRhZyk7CiAJCX1lbHNlewogCQkJdmFyIGRpdlRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogCQkJZGl2VGFnLnNldEF0dHJpYnV0ZSgiaWQiLCAiZGl2LiIrbGFiZWxWYWx1ZStsYWJsZU5hbWUpOworCQkJZGl2VGFnLmNsYXNzTmFtZSArPSAnIGNoaWxkcmVuX2dyb3VwJzsgLy9oZXJlIGlzIGRpdiB3aXRoIGEgZ3JvdXAgb2YgY2hpbGRyZW4uCiAJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQobGFiZWwpOyAgCi0JCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQoZGl2VGFnKTsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklEKS5hcHBlbmRDaGlsZChkaXZUYWcpOwkJCQogCQl9CiAgICAgfTsKIApAQCAtODAxLDcgKzg1MCw2IEBACiAgICAgCQkJCWlmIChlbHVtZW50TG9jYXRpb24gPiAxKXsKICAgICAJCQkJCWVudW1LZXkgPSBrZXlTcGxpdFtrZXlTcGxpdC5sZW5ndGggLSAxXTsKICAgICAJCQkJfQotICAgIAkJCQl2YXIgYVdoaXRlU3BhY2UgPSAiICI7CiAgICAgCQkJCWlmIChlbnVtS2V5TGlzdC5pbmRleE9mKGVudW1LZXkpICE9IC0xKXsKIAkJCQkJCWlmIChzcGxpdFBsYWluQXR0cmlidXRlS2V5WzFdLmluZGV4T2YoInRydWUiKSAhPT0gLTEpewogCQkJCQkJCXZhciBtdWx0aVNsZWN0ID0gW107CkBAIC04MTAsMTkgKzg1OCwxMSBAQAogCQkJCQkJCQl9CiAJCQkJCQkJanNvblBvbGljeVtrZXldPSBtdWx0aVNsZWN0OwogCQkJCQkJfWVsc2V7Ci0JCQkJCQkJLy9zZXQgYSBzcGFjZSBkdWUgdG8gZW1wdHkgdmFsdWUgY2F1c2VkIEpTT04gZm9ybWF0IGVycm9yIGluIFBvbGljeVJlc3RBZGFwdGVyIGFuZCByZW1vdmUgaXQgaW4gYmFjay1lbmQuCi0JCQkJCQkJaWYoc2VhcmNoRWxlbWVudC52YWx1ZSA9PSAiIil7Ci0JCQkJCQkJCXNlYXJjaEVsZW1lbnQudmFsdWUgPSBhV2hpdGVTcGFjZTsKLQkJCQkJCQl9CiAJCQkJCQkJY29uc29sZS5sb2coIiBzZWFyY2hFbGVtZW50LnZhbHVlID0gPiAiICsgc2VhcmNoRWxlbWVudC52YWx1ZSk7CiAJCQkJCQkJanNvblBvbGljeVtrZXldPSBzZWFyY2hFbGVtZW50LnZhbHVlOwogCQkJCQkJfQogICAgIAkJCQl9IGVsc2UgewogICAgICAgICAJCQkJaWYoc2VhcmNoRWxlbWVudC52YWx1ZSAhPSBudWxsKXsKLQkJCQkJCQkvL3NldCBhIGRlZmF1bHQgdmFsdWUgZHVlIHRvIGVtcHR5IHZhbHVlIGNhdXNlZCBKU09OIGZvcm1hdCBlcnJvciBpbiBQb2xpY3lSZXN0QWRhcHRlcgotCQkJCQkJCWlmKHNlYXJjaEVsZW1lbnQudmFsdWUgPT0gIiIpewotCQkJCQkJCQlzZWFyY2hFbGVtZW50LnZhbHVlID0gYVdoaXRlU3BhY2U7Ci0JCQkJCQkJfQogCQkJCQkJCWNvbnNvbGUubG9nKCIgc2VhcmNoRWxlbWVudC52YWx1ZSA9ID4gIiArIHNlYXJjaEVsZW1lbnQudmFsdWUpOwogICAgICAgICAJCQkJCWpzb25Qb2xpY3lba2V5XT0gc2VhcmNoRWxlbWVudC52YWx1ZTsKICAgICAgICAgCQkJCX0KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuanMgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZUNvbnRyb2xsZXIvRGVjaXNpb25Qb2xpY3lDb250cm9sbGVyLmpzCmluZGV4IDRiNWE5OTAuLjcyYjZmMDYgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuanMKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVDb250cm9sbGVyL0RlY2lzaW9uUG9saWN5Q29udHJvbGxlci5qcwpAQCAtODAsNiArODAsMjYgQEAKIAkJY29uc29sZS5sb2coImZhaWxlZCIpOwogCX0pOwogCisJUG9saWN5QXBwU2VydmljZS5nZXREYXRhKCdnZXREaWN0aW9uYXJ5L2dldF9SYWlueURheURpY3Rpb25hcnlEYXRhQnlOYW1lJykudGhlbihmdW5jdGlvbiAoZGF0YSkgeworCQl2YXIgaiA9IGRhdGE7CisJCSRzY29wZS5kYXRhID0gSlNPTi5wYXJzZShqLmRhdGEpOworCQljb25zb2xlLmxvZygkc2NvcGUuZGF0YSk7CisgICAgCSRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhcyA9IEpTT04ucGFyc2UoJHNjb3BlLmRhdGEucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXMpOworCQljb25zb2xlLmxvZygkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXMpOworCX0sIGZ1bmN0aW9uIChlcnJvcikgeworCQljb25zb2xlLmxvZygiZmFpbGVkIik7CisJfSk7CisJCisgICAgUG9saWN5QXBwU2VydmljZS5nZXREYXRhKCdnZXREaWN0aW9uYXJ5L2dldF9SYWlueURheURpY3Rpb25hcnlEYXRhJykudGhlbihmdW5jdGlvbiAoZGF0YSkgeworICAgIAl2YXIgaiA9IGRhdGE7CisgICAgCSRzY29wZS5kYXRhID0gSlNPTi5wYXJzZShqLmRhdGEpOworICAgIAljb25zb2xlLmxvZygkc2NvcGUuZGF0YSk7CisgICAgCSRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhRW50aXR5ID0gSlNPTi5wYXJzZSgkc2NvcGUuZGF0YS5yYWlueURheURpY3Rpb25hcnlEYXRhcyk7CisgICAgCWNvbnNvbGUubG9nKCRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhc0VudGl0eSk7CisgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgCWNvbnNvbGUubG9nKCJmYWlsZWQiKTsKKyAgICB9KTsKKwogICAgIGZ1bmN0aW9uIGV4dGVuZChvYmosIHNyYykgewogICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7CiAgICAgICAgICAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGtleSkpIG9ialtrZXldID0gc3JjW2tleV07CkBAIC0xNjYsNiArMTg2LDkgQEAKICAgICAJaWYoISRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zKXsKICAgICAJCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zID0ge307CiAgICAgCX0KKyAgICAJaWYoISRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMpeworICAgIAkJJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMudGFyZ2V0cyA9IFtdOworICAgIAl9CiAgICAgCWlmKCEkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy5ibGFja0xpc3QpewogICAgIAkJJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMuYmxhY2tMaXN0ID0gW107CiAgICAgCX0KQEAgLTE3OCw3ICsyMDEsNyBAQAogICAgIAogICAgIH1lbHNlIGlmKCRzY29wZS50ZW1wLnBvbGljeS5ydWxlUHJvdmlkZXI9PSJDdXN0b20iKXsKIAkgICBpZigkc2NvcGUudGVtcC5wb2xpY3kuYXR0cmlidXRlcy5sZW5ndGggPT0gMCl7Ci0JCSAgICRzY29wZS50ZW1wLnBvbGljeS5hdHRyaWJ1dGVzID0gW107CisJCSAgICRzY29wZS50ZW1wLnBvbGljeS5hdHRyaWJ1dGVzID0gW107ICAgIAogCSAgIH0KIAkgICBpZigkc2NvcGUudGVtcC5wb2xpY3kuc2V0dGluZ3MubGVuZ3RoID09IDApewogCQkgICAkc2NvcGUudGVtcC5wb2xpY3kuc2V0dGluZ3MgPSBbXTsKQEAgLTE5MCw2ICsyMTMsMTAgQEAKIAkgICBpZigkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy5ibGFja0xpc3QubGVuZ3RoPT0wKXsKIAkJICAgJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMuYmxhY2tMaXN0ID0gW107CiAJICAgfQorICAgIH1lbHNlIGlmKCRzY29wZS50ZW1wLnBvbGljeS5ydWxlUHJvdmlkZXI9PSJHVUFSRF9ZQU1MIil7CisgICAgCWlmKCRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMubGVuZ3RoPT0wKXsKKyAJCSAgICRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMgPSBbXTsKKyAJICAgCX0KICAgICB9ZWxzZSBpZigkc2NvcGUudGVtcC5wb2xpY3kucnVsZVByb3ZpZGVyPT0iUmFpbnlfRGF5Iil7CiAgICAgCWlmKCRzY29wZS50ZW1wLnBvbGljeS5yYWlueWRheS50cmVhdG1lbnRUYWJsZUNob2ljZXMgPT0gbnVsbCB8fCAkc2NvcGUudGVtcC5wb2xpY3kucmFpbnlkYXkudHJlYXRtZW50VGFibGVDaG9pY2VzLmxlbmd0aCA9PSAwKXsKICAgICAJCSRzY29wZS50ZW1wLnBvbGljeS5yYWlueWRheS50cmVhdG1lbnRUYWJsZUNob2ljZXMgPSBbXTsKQEAgLTIxNSw2ICsyNDIsMTQgQEAKICAgICAgICRzY29wZS50ZW1wLnBvbGljeS5zZXR0aW5ncy5zcGxpY2UobGFzdEl0ZW0pOwogICAgIH07CiAgICAgCisgICAgJHNjb3BlLmFkZE5ld1RhcmdldCA9IGZ1bmN0aW9uKCl7CisgICAgCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMucHVzaCgnJyk7CisgICAgfTsKKyAgICAkc2NvcGUucmVtb3ZlVGFyZ2V0ID0gZnVuY3Rpb24oKXsKKyAgICAJdmFyIGxhc3RJdGVtID0gJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMudGFyZ2V0cy5sZW5ndGgtMTsKKyAgICAJJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMudGFyZ2V0cy5zcGxpY2UobGFzdEl0ZW0pOworICAgIH07CisgICAgCiAgICAgJHNjb3BlLmFkZE5ld0JMID0gZnVuY3Rpb24oKSB7CiAgICAgCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLmJsYWNrTGlzdC5wdXNoKCcnKTsKICAgICB9OwpAQCAtMjMyLDYgKzI2NywyOSBAQAogICAgIAkkc2NvcGUudGVtcC5wb2xpY3kucmFpbnlkYXkudHJlYXRtZW50VGFibGVDaG9pY2VzLnNwbGljZShsYXN0SXRlbSk7CiAgICAgfTsKICAgICAKKwkkc2NvcGUud29ya3N0ZXBEaWN0aW9uYXJ5RGF0YXMgPSBbXTsKKwkkc2NvcGUuZ2V0V29ya3N0ZXBWYWx1ZXMgPSBmdW5jdGlvbihiYmlkVmFsdWUpeworCQlmb3IgKHZhciBpID0gMDsgaSA8ICRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhRW50aXR5Lmxlbmd0aDsgKytpKSB7CisgICAgCSAgICB2YXIgb2JqID0gJHNjb3BlLnJhaW55RGF5RGljdGlvbmFyeURhdGFFbnRpdHlbaV07CisgICAgCSAgICBpZiAob2JqLmJiaWQgPT0gYmJpZFZhbHVlKXsKKyAgICAJICAgIAkkc2NvcGUud29ya3N0ZXBEaWN0aW9uYXJ5RGF0YXMucHVzaChvYmoud29ya3N0ZXApOworICAgIAkgICAgfQorICAgIAl9CisJfTsKKwkKKwkkc2NvcGUuYWxsb3dlZFRyZWF0bWVudHNEYXRhcyA9IFtdOworCSRzY29wZS5nZXRUcmVhdG1lbnRWYWx1ZXMgPSBmdW5jdGlvbihiYmlkVmFsdWUsIHdvcmtzdGVwVmFsdWUpeworCQlmb3IgKHZhciBpID0gMDsgaSA8ICRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhRW50aXR5Lmxlbmd0aDsgKytpKSB7CisgICAgCSAgICB2YXIgb2JqID0gJHNjb3BlLnJhaW55RGF5RGljdGlvbmFyeURhdGFFbnRpdHlbaV07CisgICAgCSAgICBpZiAob2JqLmJiaWQgPT0gYmJpZFZhbHVlICYmIG9iai53b3Jrc3RlcCA9PSB3b3Jrc3RlcFZhbHVlKXsKKyAgICAJICAgIAl2YXIgc3BsaXRBbGFybSA9IG9iai50cmVhdG1lbnRzLnNwbGl0KCcsJyk7CisgICAgCSAgICAJZm9yICh2YXIgaiA9IDA7IGogPCBzcGxpdEFsYXJtLmxlbmd0aDsgKytqKSB7CisgICAgCSAgICAJCSRzY29wZS5hbGxvd2VkVHJlYXRtZW50c0RhdGFzLnB1c2goc3BsaXRBbGFybVtqXSk7CisgICAgCSAgICAJfQorICAgIAkgICAgfQorICAgIAl9CQorCX07CisgICAgCiAgICAgJHNjb3BlLkl0ZW1ObyA9IDA7CiAgICAgJHNjb3BlLnJ1bGVBbGdvcml0aG1EYXRhcyA9IFt7InJ1bGVBbGdvcml0aG1zIiA6ICRzY29wZS50ZW1wLnBvbGljeS5ydWxlQWxnb3JpdGhtc2Nob2ljZXMgfV07CiAgICAgCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZXMvRENBRU1pY3JvU2VydmljZVBvbGljeVRlbXBsYXRlLmh0bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZXMvRENBRU1pY3JvU2VydmljZVBvbGljeVRlbXBsYXRlLmh0bWwKaW5kZXggYTEyMzAwYi4uZjYyMWYyYyAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lUZW1wbGF0ZS5odG1sCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlcy9EQ0FFTWljcm9TZXJ2aWNlUG9saWN5VGVtcGxhdGUuaHRtbApAQCAtODMsNyArODMsNyBAQAogCQkJPC9kaXY+CiAJCTwvZGl2PgogCQk8ZGl2IGNsYXNzPSJ3ZWxsIj4KLQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiIGlkPSJEeW5hbWljVGVtcGxhdGUiPgorCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMTIiIGlkPSJEeW5hbWljVGVtcGxhdGUiPgogCQkJCTxsYWJlbD5NaWNybyBTZXJ2aWNlIEF0dHJpYnV0ZXM6PHN1cD48Yj4qPC9iPjwvc3VwPjwvbGFiZWw+PGJyPgogCQkJPC9kaXY+CiAJCQk8L2JyPgpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RlY2lzaW9uUG9saWN5VGVtcGxhdGUuaHRtbCBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlcy9EZWNpc2lvblBvbGljeVRlbXBsYXRlLmh0bWwKaW5kZXggNDlmYzcwZC4uOTczYTdhZiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RlY2lzaW9uUG9saWN5VGVtcGxhdGUuaHRtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZXMvRGVjaXNpb25Qb2xpY3lUZW1wbGF0ZS5odG1sCkBAIC02MiwxNyArNjIsMjUgQEAKIAkJCQkJCQk8bGFiZWw+QnVpbGRpbmcgQmxvY2sgSUQ6PHN1cD48Yj4qPC9iPjwvc3VwPjwvbGFiZWw+CiAJCQkJCQk8L2Rpdj4KIAkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTIiPgotCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIgotCQkJCQkJCQluZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiIG5nLW1vZGVsPSJ0ZW1wLnBvbGljeS5yYWlueWRheS5iYmlkIgotCQkJCQkJCQlwbGFjZWhvbGRlcj0iQnVpbGRpbmcgQmxvY2sgSUQiIC8+CisJCQkJCQkJCTxzZWxlY3QKKwkJCQkJCQkJCWNsYXNzPSJmb3JtLWNvbnRyb2wiIG5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIKKwkJCQkJCQkJCW5nLW1vZGVsPSJ0ZW1wLnBvbGljeS5yYWlueWRheS5iYmlkIgorCQkJCQkJCQkJbmctb3B0aW9ucz0ib3B0aW9uIGZvciBvcHRpb24gaW4gcmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXMgdHJhY2sgYnkgb3B0aW9uIgorCQkJCQkJCQkJbmctY2hhbmdlPSJnZXRXb3Jrc3RlcFZhbHVlcyh0ZW1wLnBvbGljeS5yYWlueWRheS5iYmlkKSI+CisJCQkJCQkJCQk8b3B0aW9uIHZhbHVlPSIiPnt7dGVtcC5wb2xpY3kucmFpbnlkYXkuYmJpZH19PC9vcHRpb24+CisJCQkJCQkJCTwvc2VsZWN0PgogCQkJCQkJPC9kaXY+CiAJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0xIj4KIAkJCQkJCQk8bGFiZWw+V29yayBTdGVwOjxzdXA+PGI+KjwvYj48L3N1cD48L2xhYmVsPgogCQkJCQkJPC9kaXY+CiAJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0yIj4KLQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIKLQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IiBuZy1tb2RlbD0idGVtcC5wb2xpY3kucmFpbnlkYXkud29ya3N0ZXAiCi0JCQkJCQkJCXBsYWNlaG9sZGVyPSJXb3JrIFN0ZXAiIC8+CisJCQkJCQkJPHNlbGVjdAorCQkJCQkJCQkJY2xhc3M9ImZvcm0tY29udHJvbCIgbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IgorCQkJCQkJCQkJbmctbW9kZWw9InRlbXAucG9saWN5LnJhaW55ZGF5LndvcmtzdGVwIgorCQkJCQkJCQkJbmctb3B0aW9ucz0ib3B0aW9uIGZvciBvcHRpb24gaW4gd29ya3N0ZXBEaWN0aW9uYXJ5RGF0YXMgdHJhY2sgYnkgb3B0aW9uIgorCQkJCQkJCQkJbmctY2hhbmdlPSJnZXRUcmVhdG1lbnRWYWx1ZXModGVtcC5wb2xpY3kucmFpbnlkYXkuYmJpZCwgdGVtcC5wb2xpY3kucmFpbnlkYXkud29ya3N0ZXApIj4KKwkJCQkJCQkJCTxvcHRpb24gdmFsdWU9IiI+e3t0ZW1wLnBvbGljeS5yYWlueWRheS53b3Jrc3RlcH19PC9vcHRpb24+CisJCQkJCQkJPC9zZWxlY3Q+CiAJCQkJCQk8L2Rpdj4KIAkJCQkJPC9kaXY+CiAJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93Ij4KQEAgLTEwMCwxOSArMTA4LDE0IEBACiAJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMSI+CiAJCQkJCQkJCTxsYWJlbD5EZXNpcmVkIFRyZWF0bWVudDo8c3VwPjxiPio8L2I+PC9zdXA+PC9sYWJlbD4KIAkJCQkJCQk8L2Rpdj4JCQotCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgkJCQkJCQotCQkJCQkJCQk8c2VsZWN0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJteVNlbGVjdCIKKwkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4KKwkJCQkJCQkJPHNlbGVjdAorCQkJCQkJCQkJY2xhc3M9ImZvcm0tY29udHJvbCIgCiAJCQkJCQkJCQluZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiCiAJCQkJCQkJCQluZy1tb2RlbD0idHJlYXRtZW50VGFibGVDaG9pY2UudHJlYXRtZW50IgotCQkJCQkJCQkJcGxhY2Vob2xkZXI9IkRlc2lyZWQgVHJlYXRtZW50Ij4KLTwhLS0gCQkJCQkJCQk8b3B0aW9uIHZhbHVlPSIiPnt7dGFibGVDaG9pY2UuZGVzaXJlZHRyZWF0bWVudH19PC9vcHRpb24+IC0tPgotCQkJCQkJCQkJPG9wdGlvbj5Sb2xsYmFjazwvb3B0aW9uPgotCQkJCQkJCQkJPG9wdGlvbj5NYW51YWwgSGFuZGxpbmc8L29wdGlvbj4KLQkJCQkJCQkJCTxvcHRpb24+QWJvcnQ8L29wdGlvbj4KLQkJCQkJCQkJCTxvcHRpb24+QXV0byBSb2xsYmFjazwvb3B0aW9uPgotCQkJCQkJCQkJPG9wdGlvbj5SZXRyeTwvb3B0aW9uPgotCQkJCQkJCQkJPG9wdGlvbj5Ta2lwPC9vcHRpb24+Ci0JCQkJCQkJCTwvc2VsZWN0PgorCQkJCQkJCQkJbmctb3B0aW9ucz0ib3B0aW9uIGZvciBvcHRpb24gaW4gYWxsb3dlZFRyZWF0bWVudHNEYXRhcyB0cmFjayBieSBvcHRpb24iPgorCQkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iIj57e3RyZWF0bWVudFRhYmxlQ2hvaWNlLnRyZWF0bWVudH19PC9vcHRpb24+CisJCQkJCQkJCTwvc2VsZWN0PgkJCQkJCQogCQkJCQkJCTwvZGl2PgogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTEiPgogCQkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIKQEAgLTEzMSw3ICsxMzQsNyBAQAogCQkJPGRpdiBjbGFzcz0id2VsbCI+CiAJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPgogCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0xIj4KLQkJCQkJCTxsYWJlbD5HdWFyZCBZQU1MIEF0dHJpYnV0ZXM6PC9sYWJlbD48YnI+CisJCQkJCQk8bGFiZWw+R3VhcmQgQmxhY2tMaXN0IFlBTUwgQXR0cmlidXRlczo8L2xhYmVsPjxicj4KIAkJCQkJPC9kaXY+CiAJCQkJPC9kaXY+CiAJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPgpAQCAtMTU3LDYgKzE2MCwxNiBAQAogCQkJCQkJPC9kaXY+CiAJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyJSI+CiAJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJCTxsYWJlbD4gQ0xOYW1lOiA8L2xhYmVsPgorCQkJCQkJCTwvZGl2PgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgorCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIKKwkJCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgbmctbW9kZWw9InRlbXAucG9saWN5LnlhbWxwYXJhbXMuY2xuYW1lIgorCQkJCQkJCQkJcGxhY2Vob2xkZXI9IkNMTmFtZSIgLz4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCTwvZGl2PgorCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciIHN0eWxlPSJtYXJnaW4tbGVmdDogMiUiPgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgogCQkJCQkJCQk8bGFiZWw+IGd1YXJkQWN0aXZlU3RhcnQ6IDwvbGFiZWw+CiAJCQkJCQkJPC9kaXY+CiAJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CkBAIC0yMzUsNiArMjQ4LDQyIEBACiAJCQkJCQk8L2Rpdj4KIAkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIlIj4KIAkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4KKwkJCQkJCQkJPGxhYmVsPiBDTE5hbWU6IDwvbGFiZWw+CisJCQkJCQkJPC9kaXY+CisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIgorCQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IiBuZy1tb2RlbD0idGVtcC5wb2xpY3kueWFtbHBhcmFtcy5jbG5hbWUiCisJCQkJCQkJCQlwbGFjZWhvbGRlcj0iQ0xOYW1lIiAvPgorCQkJCQkJCTwvZGl2PgorCQkJCQkJPC9kaXY+CisJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyJSI+CisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJCTxsYWJlbD4gVGFyZ2V0czogPC9sYWJlbD4KKwkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiCisJCQkJCQkJCQluZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiIG5nLWNsaWNrPSJhZGROZXdUYXJnZXQoKSI+CisJCQkJCQkJCQk8aSBjbGFzcz0iZmEgZmEtcGx1cyI+PC9pPgorCQkJCQkJCQk8L2J1dHRvbj4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS00Ij4KKwkJCQkJCQkJPGRpdiBkYXRhLW5nLXJlcGVhdD0iY2hvaWNlIGluIHRlbXAucG9saWN5LnlhbWxwYXJhbXMudGFyZ2V0cyB0cmFjayBieSAkaW5kZXgiPgorCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciPgorCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tOSI+CisJCQkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiCisJCQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IgorCQkJCQkJCQkJCW5nLW1vZGVsPSJ0ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHNbJGluZGV4XSIgcGxhY2Vob2xkZXI9IlRhcmdldCIgLz4KKwkJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMSI+CisJCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG5nLXNob3c9IiRsYXN0IgorCQkJCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgbmctY2xpY2s9InJlbW92ZVRhcmdldCgpIj4KKwkJCQkJCQkJCQk8aSBjbGFzcz0iZmEgZmEtbWludXMiPjwvaT4KKwkJCQkJCQkJCQk8L2J1dHRvbj4KKwkJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQkJPC9kaXY+CisJCQkJCQkJCTwvZGl2PgorCQkJCQkJCTwvZGl2PgorCQkJCQkJPC9kaXY+CisJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyJSI+CisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CiAJCQkJCQkJCTxsYWJlbD4gbGltaXQ6IDwvbGFiZWw+CiAJCQkJCQkJPC9kaXY+CiAJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CkBAIC0yNDcsMTggKzI5NiwyMCBAQAogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgogCQkJCQkJCQk8bGFiZWw+IHRpbWVXaW5kb3c6IDwvbGFiZWw+CiAJCQkJCQkJPC9kaXY+Ci0JCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMiI+CisJCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIgorCQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IiBuZy1tb2RlbD0idGVtcC5wb2xpY3kueWFtbHBhcmFtcy50aW1lV2luZG93IgorCQkJCQkJCQkJcGxhY2Vob2xkZXI9IlRpbWUgV2luZG93IiAvPgorCQkJCQkJCTwvZGl2PgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTEiPgogCQkJCQkJCQk8c2VsZWN0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgCi0JCQkJCQkJCW5nLW1vZGVsPSJ0ZW1wLnBvbGljeS55YW1scGFyYW1zLnRpbWVXaW5kb3ciPgotCQkJCQkJCQk8b3B0aW9uPnR3NW1pbjwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3MTBtaW48L29wdGlvbj4KLQkJCQkJCQkJPG9wdGlvbj50dzMwbWluPC9vcHRpb24+Ci0JCQkJCQkJCTxvcHRpb24+dHcxaDwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3MTJoPC9vcHRpb24+Ci0JCQkJCQkJCTxvcHRpb24+dHcxZDwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3NWQ8L29wdGlvbj4KLQkJCQkJCQkJPG9wdGlvbj50dzF3PC9vcHRpb24+Ci0JCQkJCQkJCTxvcHRpb24+dHcxbW9uPC9vcHRpb24+CisJCQkJCQkJCW5nLW1vZGVsPSJ0ZW1wLnBvbGljeS55YW1scGFyYW1zLnRpbWVVbml0cyI+CisJCQkJCQkJCTxvcHRpb24+bWludXRlPC9vcHRpb24+CisJCQkJCQkJCTxvcHRpb24+aG91cjwvb3B0aW9uPgorCQkJCQkJCQk8b3B0aW9uPmRheTwvb3B0aW9uPgorCQkJCQkJCQk8b3B0aW9uPndlZWs8L29wdGlvbj4KKwkJCQkJCQkJPG9wdGlvbj5tb250aDwvb3B0aW9uPgorCQkJCQkJCQk8b3B0aW9uPnllYXI8L29wdGlvbj4KIAkJCQkJCQkJPC9zZWxlY3Q+CiAJCQkJCQkJPC9kaXY+CiAJCQkJCQk8L2Rpdj4KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL2Nzcy9tYWluLmNzcyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL2Nzcy9tYWluLmNzcwppbmRleCA3ODAwMWY0Li4xMTIyYjZmIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9jc3MvbWFpbi5jc3MKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvY3NzL21haW4uY3NzCkBAIC01OCwxMSArNTgsNDcgQEAKICAgbWFyZ2luLXRvcDogLTVweDsKIH0KIAorLmJ0bi5idG4tcGVkZWZhdWx0IHsKKwljb2xvcjogIzQ0NDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBOworfQorCQogLmJ0bi5idG4tZGVmYXVsdCB7CiAgIGNvbG9yOiAjNDQ0OwogICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBOwogfQogCisuYnRuLWFkZC1yZW1vdmUgeworICBjb2xvcjogIzQ0NDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTsKKyAgbWFyZ2luLXJpZ2h0OiAxMnB4OworICBtYXJnaW4tYm90dG9tOiAxMHB4OworfQorCisuY2hpbGRfc2luZ2xlIHsKKyAgY29sb3I6ICM0NDQ7CisgIGJhY2tncm91bmQtY29sb3I6ICNGQUZBRkE7CisgIG1hcmdpbi1sZWZ0OiAwcHg7CisgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKworLmNoaWxkcmVuX2dyb3VwIHsKKyAgICBjb2xvcjogIzQ0NDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBtYXJnaW4tbGVmdDogMjBweDsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4OworICAgIG1hcmdpbi10b3A6IDIwcHg7CisgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OworICAgIHBhZGRpbmctdG9wOiAxMHB4OworICAgIHBhZGRpbmctbGVmdDogMTBweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OworICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgICAgYm9yZGVyLXJhZGl1czogNHB4OworfQorCiAuYnRuIHsKICAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMjYpOwogICBmb250LXdlaWdodDogNTAwOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL21vZGFscy5odG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL21vZGFscy5odG1sCmluZGV4IDc1NGY5NWIuLmY3YTZkMjQgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL3RlbXBsYXRlcy9tb2RhbHMuaHRtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci90ZW1wbGF0ZXMvbW9kYWxzLmh0bWwKQEAgLTEzLDcgKzEzLDcgQEAKICAgICAgICAgPGRpdiBuZy1pbmNsdWRlIGRhdGEtc3JjPSInZXJyb3ItYmFyJyIgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgIDwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1jbGljaz0icmVmcmVzaCgpOyIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyIgYXV0b2ZvY3VzPSJhdXRvZm9jdXMiPkRlbGV0ZTwvYnV0dG9uPgogICAgICAgPC9kaXY+CiAgICAgICA8L2Zvcm0+CkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIDxkaXYgbmctaW5jbHVkZSBkYXRhLXNyYz0iJ2Vycm9yLWJhciciIGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+CiAgICAgICA8L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1jbGljaz0icmVmcmVzaCgpOyIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctY2xpY2s9InJlZnJlc2goKTsiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIj5EZWxldGU8L2J1dHRvbj4KICAgICAgIDwvZGl2PgogICAgICAgPC9mb3JtPgpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctY2xpY2s9InJlZnJlc2goKTsiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5SZW5hbWU8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Zvcm0+CkBAIC04OSw3ICs4OSw3IEBACiAgICAgICAgICAgICAgIDxkaXYgbmctaW5jbHVkZSBkYXRhLXNyYz0iJ2Vycm9yLWJhciciIGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KICAgICA8L2Rpdj4KQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctY2xpY2s9InJlZnJlc2goKTsiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5Nb3ZlPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9mb3JtPgpAQCAtMTM5LDcgKzEzOSw3IEBACiAgICAgICAgICAgICAgIDxkaXYgbmctaW5jbHVkZSBkYXRhLXNyYz0iJ2Vycm9yLWJhciciIGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9mb3JtPgpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgIDxkaXYgbmctaW5jbHVkZSBkYXRhLXNyYz0iJ2Vycm9yLWJhciciIGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DbG9uZTwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KQEAgLTE4OSw3ICsxODksNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIGlkID0gImNhbmNlbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIGlkID0gImNhbmNlbCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNyZWF0ZTwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q3JlYXRlPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9mb3JtPgpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgIDxkaXYgbmctc2hvdz0iIWZpbGVVcGxvYWRlci5yZXF1ZXN0aW5nIj4KLSAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSIhdXBsb2FkRmlsZUxpc3QubGVuZ3RoIHx8IGZpbGVVcGxvYWRlci5yZXF1ZXN0aW5nIj57eyd1cGxvYWQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj4KICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgIDxkaXYgbmctc2hvdz0iZmlsZVVwbG9hZGVyLnJlcXVlc3RpbmciPgpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICAgIDwvZGl2PgogICAgICAgPC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DbG9zZTwvYnV0dG9uPgorICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNsb3NlPC9idXR0b24+CiAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KICAgPC9kaXY+CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci90ZW1wbGF0ZXMvc2VhcmNoTmF2YmFyLmh0bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci90ZW1wbGF0ZXMvc2VhcmNoTmF2YmFyLmh0bWwKaW5kZXggNzI5ODVhMS4uNzY4ZmU1ZSAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL3NlYXJjaE5hdmJhci5odG1sCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL3RlbXBsYXRlcy9zZWFyY2hOYXZiYXIuaHRtbApAQCAtNjIsNyArNjIsNyBAQAogCQkJCQkJCTxkaXYgY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAJCQkJCQkJCTxkaXYgY2xhc3M9ImJ0bi1ncm91cCIgcm9sZT0iZ3JvdXAiPgogCQkJCQkJCQkJPGRpdiBjbGFzcz0iZHJvcGRvd24gZHJvcGRvd24tbGciPgotCQkJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGRyb3Bkb3duLXRvZ2dsZSIKKwkJCQkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IGRyb3Bkb3duLXRvZ2dsZSIKIAkJCQkJCQkJCQkJZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+CiAJCQkJCQkJCQkJCTxzcGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPgogCQkJCQkJCQkJCTwvYnV0dG9uPgpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQkJCQkJCQkJCTwvZm9ybT4KIAkJCQkJCQkJCQk8L2Rpdj4KIAkJCQkJCQkJCTwvZGl2PgotCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiCisJCQkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IgogCQkJCQkJCQkJCW5nLWNsaWNrPSJyZWZyZXNoKHNlYXJjaCA9IG51bGwpOyI+CiAJCQkJCQkJCQkJPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPkNsZWFyPC9zcGFuPgogCQkJCQkJCQkJPC9idXR0b24+CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0VGVzdC5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lNYW5hZ2VyU2VydmxldFRlc3QuamF2YQppbmRleCA3NzM5NTVkLi5hMjUwMjc2IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0VGVzdC5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5TWFuYWdlclNlcnZsZXRUZXN0LmphdmEKQEAgLTE5LDExICsxOSwxNiBAQAogICovCiBwYWNrYWdlIG9yZy5vcGVuZWNvbXAucG9saWN5LmFkbWluOwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnOwogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CiAKQEAgLTMzLDggKzM4LDEzIEBACiBpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0bzsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb21tb24ubG9nZ2luZy5mbGV4bG9nZ2VyLkZsZXhMb2dnZXI7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29tbW9uLmxvZ2dpbmcuZmxleGxvZ2dlci5Mb2dnZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxlci5DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlcjsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbGVyLlBvbGljeUNvbnRyb2xsZXI7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubW9kZWwuUm9sZXM7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5kYW8uQ29tbW9uQ2xhc3NEYW87CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5qcGEuQWN0aW9uQm9keUVudGl0eTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5Db25maWd1cmF0aW9uRGF0YUVudGl0eTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5Hcm91cFBvbGljeVNjb3BlTGlzdDsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5Qb2xpY3lFZGl0b3JTY29wZXM7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5qcGEuUG9saWN5RW50aXR5OwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuanBhLlBvbGljeVZlcnNpb247CkBAIC00MywxMSArNTMsMTMgQEAKIHB1YmxpYyBjbGFzcyBQb2xpY3lNYW5hZ2VyU2VydmxldFRlc3QgZXh0ZW5kcyBNb2NraXRvewogCQogCXByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihQb2xpY3lNYW5hZ2VyU2VydmxldFRlc3QuY2xhc3MpOworCXByaXZhdGUgTGlzdDxTdHJpbmc+IGhlYWRlcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKIAogCXByaXZhdGUgc3RhdGljIExpc3Q8T2JqZWN0PiByb2xlc2RhdGE7Ci0JcHJpdmF0ZSBzdGF0aWMgTGlzdDxPYmplY3Q+IHBvbGljeURhdGE7CisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxPYmplY3Q+IGJhc2VQb2xpY3lEYXRhOwogCXByaXZhdGUgc3RhdGljIExpc3Q8T2JqZWN0PiBwb2xpY3lFZGl0b3JTY29wZXM7CiAJcHJpdmF0ZSBzdGF0aWMgTGlzdDxPYmplY3Q+IHBvbGljeVZlcnNpb247CisJcHJpdmF0ZSBzdGF0aWMgQ29tbW9uQ2xhc3NEYW8gY29tbW9uQ2xhc3NEYW87CiAJCiAJQEJlZm9yZQogCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbnsKQEAgLTY4LDcgKzgwLDcgQEAKICAgICAgICAgcm9sZXNkYXRhLmFkZChyb2xlczEpOwogICAgICAgICAKICAgICAgICAgLy9Qb2xpY3lFbnRpdHkgRGF0YQotICAgICAgICBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGJhc2VQb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CiAgICAgICAgIHRyeSB7CiAJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKQEAgLTgwLDcgKzkyLDEzIEBACiAgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJDb25maWdfU2FtcGxlVGVzdC4xLnhtbCIpOwogICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKICAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKLSAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoIlNhbXBsZSBUZXN0Iik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiT1RIRVIiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWd1cmF0aW9uTmFtZSgiY29tLkNvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnR4dCIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgYmFzZVBvbGljeURhdGEuYWRkKGVudGl0eSk7CiAgICAgICAgIAogICAgICAgICAvL1BvbGljeUVkaXRvclNjb3BlcyBkYXRhCiAgICAgICAgIHBvbGljeUVkaXRvclNjb3BlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwpAQCAtMTA3LDYgKzEyNSwyMSBAQAogCX0KIAkKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbml0KCl7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJU2VydmxldENvbmZpZyBzZXJ2bGV0Q29uZmlnID0gbW9jayhTZXJ2bGV0Q29uZmlnLmNsYXNzKTsgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgIAl3aGVuKHNlcnZsZXRDb25maWcuZ2V0SW5pdFBhcmFtZXRlck5hbWVzKCkpLnRoZW5SZXR1cm4oQ29sbGVjdGlvbnMuZW51bWVyYXRpb24oaGVhZGVycykpOworICAgICAgICAJd2hlbihzZXJ2bGV0Q29uZmlnLmdldEluaXRQYXJhbWV0ZXIoIlhBQ01MX1BST1BFUlRJRVNfTkFNRSIpKS50aGVuUmV0dXJuKCJ4YWNtbC5hZG1pbi5wcm9wZXJ0aWVzIik7CisgICAgICAgIAlTeXN0ZW0uc2V0UHJvcGVydHkoInhhY21sLnJlc3QuYWRtaW4uY2xvc2VkTG9vcEpTT04iLCBuZXcgRmlsZSgiLiIpLmdldENhbm9uaWNhbFBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgInNyYyIrIEZpbGUuc2VwYXJhdG9yICsgInRlc3QiICsgRmlsZS5zZXBhcmF0b3IgKyAicmVzb3VyY2VzIiArIEZpbGUuc2VwYXJhdG9yICsgIkpTT05Db25maWcuanNvbiIpOworCQkJc2VydmxldC5pbml0KHNlcnZsZXRDb25maWcpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJCWZhaWwoKTsKKwkJfQorCX0KKwkKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REZXNjcmliZVBvbGljeSgpewogCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CiAJCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKQEAgLTExNiwxMSArMTQ5LDEyIEBACiAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKCJ7cGFyYW1zOiB7IG1vZGU6ICdERVNDUklCRVBPTElDWUZJTEUnLCBwYXRoOiAnY29tLkNvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbCd9fSIpKTsKICAgICAgICAgdHJ5IHsKIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOwotCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKGJhc2VQb2xpY3lEYXRhKTsKIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CiAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCQlmYWlsKCk7CiAJCX0KIAl9CiAJCkBAIC0xNDcsOSArMTgxLDM5MCBAQAogICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CiAgICAgCQl9CiAgICAgICAgIH0KIAl9CiAJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0QmFzZVBvbGljeVRlc3QoKXsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX1NhbXBsZVRlc3QxMjA2LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihiYXNlUG9saWN5RGF0YSk7CisgICAgCQkJc2VydmxldC5zZXRQb2xpY3lDb250cm9sbGVyKGNvbnRyb2xsZXIpOworICAgIAkJCXNlcnZsZXQuc2V0VGVzdFVzZXJJZCgiVGVzdCIpOworICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CisgICAgCQl9CisgICAgICAgIH0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0QlJNU1BhcmFtUG9saWN5VGVzdCgpeworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICBTdHJpbmcgY29uZmlnRGF0YSA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJDb25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQiKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQl9CisgICAgICAgIFBvbGljeUVudGl0eSBlbnRpdHkgPSBuZXcgUG9saWN5RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJDb25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBDb25maWd1cmF0aW9uRGF0YUVudGl0eSBjb25maWd1cmF0aW9uRW50aXR5ID0gbmV3IENvbmZpZ3VyYXRpb25EYXRhRW50aXR5KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnQm9keShjb25maWdEYXRhKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdUeXBlKCJPVEhFUiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ3VyYXRpb25OYW1lKCJjb20uQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnR4dCIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQogCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0QlJNU1Jhd1BvbGljeVRlc3QoKXsKKwkJTGlzdDxPYmplY3Q+IHBvbGljeURhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgU3RyaW5nIHBvbGljeUNvbnRlbnQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGNvbmZpZ0RhdGEgPSAiIjsKKyAgICAgICAgdHJ5IHsKKwkJCUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworCQkJcG9saWN5Q29udGVudCA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnR4dCIpKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCX0KKyAgICAgICAgUG9saWN5RW50aXR5IGVudGl0eSA9IG5ldyBQb2xpY3lFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeU5hbWUoIkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiT1RIRVIiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWd1cmF0aW9uTmFtZSgiY29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnR4dCIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGVkaXRDbG9zZWRMb29wRmF1bHRQb2xpY3lUZXN0KCl7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CisgICAgICAgIFN0cmluZyBjb25maWdEYXRhID0gIiI7CisgICAgICAgIHRyeSB7CisJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkJCXBvbGljeUNvbnRlbnQgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oIkNvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbCIpKTsKKwkJCWNvbmZpZ0RhdGEgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oImNvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uIikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBDb25maWd1cmF0aW9uRGF0YUVudGl0eSBjb25maWd1cmF0aW9uRW50aXR5ID0gbmV3IENvbmZpZ3VyYXRpb25EYXRhRW50aXR5KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnQm9keShjb25maWdEYXRhKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdUeXBlKCJKU09OIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlndXJhdGlvbk5hbWUoImNvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0RGVzY3JpcHRpb24oInRlc3QiKTsKKyAgICAgICAgZW50aXR5LnNldENvbmZpZ3VyYXRpb25EYXRhKGNvbmZpZ3VyYXRpb25FbnRpdHkpOworICAgICAgICBwb2xpY3lEYXRhLmFkZChlbnRpdHkpOworCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CisJCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKKyAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IG1vY2soSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcyk7IAorICAgICAgICBQb2xpY3lDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtb2NrKFBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOworICAgICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBsaXN0LmFkZCgie3BhcmFtczogeyBtb2RlOiAnRURJVEZJTEUnLCBwYXRoOiAnL2NvbS9Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQorCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdENsb3NlZExvb3BQTVBvbGljeVRlc3QoKXsKKwkJTGlzdDxPYmplY3Q+IHBvbGljeURhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgU3RyaW5nIHBvbGljeUNvbnRlbnQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGNvbmZpZ0RhdGEgPSAiIjsKKyAgICAgICAgdHJ5IHsKKwkJCUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworCQkJcG9saWN5Q29udGVudCA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWwiKSk7CisJCQljb25maWdEYXRhID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJjb20uQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS5qc29uIikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWwiKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeURhdGEocG9saWN5Q29udGVudCk7CisgICAgICAgIGVudGl0eS5zZXRTY29wZSgiY29tIik7CisgICAgICAgIENvbmZpZ3VyYXRpb25EYXRhRW50aXR5IGNvbmZpZ3VyYXRpb25FbnRpdHkgPSBuZXcgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdCb2R5KGNvbmZpZ0RhdGEpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ1R5cGUoIkpTT04iKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWd1cmF0aW9uTmFtZSgiY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sJyBhbmQgc2NvcGUgPSdjb20nIikpLnRoZW5SZXR1cm4ocG9saWN5RGF0YSk7CisgICAgCQkJc2VydmxldC5zZXRQb2xpY3lDb250cm9sbGVyKGNvbnRyb2xsZXIpOworICAgIAkJCXNlcnZsZXQuc2V0VGVzdFVzZXJJZCgiVGVzdCIpOworICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CisgICAgCQl9CisgICAgICAgIH0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0TWljcm9TZXJ2aWNlUG9saWN5VGVzdCgpeworCQlHcm91cFBvbGljeVNjb3BlTGlzdCBncm91cERhdGEgPSBuZXcgIEdyb3VwUG9saWN5U2NvcGVMaXN0KCk7CisJCWdyb3VwRGF0YS5zZXRHcm91cE5hbWUoIlRlc3QiKTsKKwkJZ3JvdXBEYXRhLnNldEdyb3VwTGlzdCgicmVzb3VyY2U9U2FtcGxlUmVzb3VyY2Usc2VydmljZT1TYW1wbGVTZXJ2aWNlLHR5cGU9U2FtcGxlVHlwZSxjbG9zZWRMb29wQ29udHJvbE5hbWU9U2FtcGxlQ2xvc2VkTG9vcCIpOworCQlMaXN0PE9iamVjdD4gZ3JvdXBMaXN0RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlncm91cExpc3REYXRhLmFkZChncm91cERhdGEpOworCQljb21tb25DbGFzc0RhbyA9IG1vY2soQ29tbW9uQ2xhc3NEYW8uY2xhc3MpOworCQlDcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlci5zZXRDb21tb25DbGFzc0Rhbyhjb21tb25DbGFzc0Rhbyk7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CisgICAgICAgIFN0cmluZyBjb25maWdEYXRhID0gIiI7CisgICAgICAgIHRyeSB7CisJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkJCXBvbGljeUNvbnRlbnQgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oIkNvbmZpZ19NU192RmlyZXdhbGwuMS54bWwiKSk7CisJCQljb25maWdEYXRhID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJjb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLmpzb24iKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQl9CisgICAgICAgIFBvbGljeUVudGl0eSBlbnRpdHkgPSBuZXcgUG9saWN5RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJDb25maWdfTVNfdkZpcmV3YWxsLjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBDb25maWd1cmF0aW9uRGF0YUVudGl0eSBjb25maWd1cmF0aW9uRW50aXR5ID0gbmV3IENvbmZpZ3VyYXRpb25EYXRhRW50aXR5KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnQm9keShjb25maWdEYXRhKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdUeXBlKCJKU09OIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlndXJhdGlvbk5hbWUoImNvbS5Db25maWdfTVNfdkZpcmV3YWxsLjEuanNvbiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb21tb25DbGFzc0Rhby5nZXREYXRhQnlJZChHcm91cFBvbGljeVNjb3BlTGlzdC5jbGFzcywgImdyb3VwTGlzdCIsICJyZXNvdXJjZT1TYW1wbGVSZXNvdXJjZSxzZXJ2aWNlPVNhbXBsZVNlcnZpY2UsdHlwZT1TYW1wbGVUeXBlLGNsb3NlZExvb3BDb250cm9sTmFtZT1TYW1wbGVDbG9zZWRMb29wIikpLnRoZW5SZXR1cm4oZ3JvdXBMaXN0RGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQorCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdEZpcmV3YWxsUG9saWN5VGVzdCgpeworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICBTdHJpbmcgY29uZmlnRGF0YSA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJDb25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkNvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS5qc29uIikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiSlNPTiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ3VyYXRpb25OYW1lKCJjb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLmpzb24iKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGVkaXRBY3Rpb25Qb2xpY3lUZXN0KCl7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CisgICAgICAgIFN0cmluZyBjb25maWdEYXRhID0gIiI7CisgICAgICAgIHRyeSB7CisJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkJCXBvbGljeUNvbnRlbnQgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oIkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEuanNvbiIpKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCX0KKyAgICAgICAgUG9saWN5RW50aXR5IGVudGl0eSA9IG5ldyBQb2xpY3lFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeU5hbWUoIkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBBY3Rpb25Cb2R5RW50aXR5IGNvbmZpZ3VyYXRpb25FbnRpdHkgPSBuZXcgQWN0aW9uQm9keUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldEFjdGlvbkJvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0QWN0aW9uQm9keU5hbWUoImNvbS5BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLmpzb24iKTsKKyAgICAgICAgZW50aXR5LnNldEFjdGlvbkJvZHlFbnRpdHkoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0FjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdBY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQorCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdERlY2lzaW9uUG9saWN5VGVzdCgpeworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJEZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWwiKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQl9CisgICAgICAgIFBvbGljeUVudGl0eSBlbnRpdHkgPSBuZXcgUG9saWN5RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJEZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWwiKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeURhdGEocG9saWN5Q29udGVudCk7CisgICAgICAgIGVudGl0eS5zZXRTY29wZSgiY29tIik7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0RlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnRGVjaXNpb25fVGVzdERlY2lzaW9uUG9saWN5V2l0aFJ1bGVBbGdvcml0aG1zLjEueG1sJyBhbmQgc2NvcGUgPSdjb20nIikpLnRoZW5SZXR1cm4ocG9saWN5RGF0YSk7CisgICAgCQkJc2VydmxldC5zZXRQb2xpY3lDb250cm9sbGVyKGNvbnRyb2xsZXIpOworICAgIAkJCXNlcnZsZXQuc2V0VGVzdFVzZXJJZCgiVGVzdCIpOworICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CisgICAgCQl9CisgICAgICAgIH0KKwl9CiB9CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWRtaW5UYWJDb250cm9sbGVyVGVzdC5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0FkbWluVGFiQ29udHJvbGxlclRlc3QuamF2YQppbmRleCA0M2I4YTZmLi4wN2JkNTQ5IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWRtaW5UYWJDb250cm9sbGVyVGVzdC5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9BZG1pblRhYkNvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTE5LDEwICsxOSwxMiBAQAogICovCiBwYWNrYWdlIG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsZXI7CiAKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0Lio7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOwogCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKIGltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTQxLDEyICs0MywyMCBAQAogCiAJcHJpdmF0ZSBzdGF0aWMgTG9nZ2VyIGxvZ2dlciA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKEFkbWluVGFiQ29udHJvbGxlclRlc3QuY2xhc3MpOwogCXByaXZhdGUgc3RhdGljIENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvOworCXByaXZhdGUgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3Q7CisJcHJpdmF0ZSBNb2NrSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZTsKIAkKIAlAQmVmb3JlCiAJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCQlsb2dnZXIuaW5mbygic2V0VXA6IEVudGVyaW5nIik7CiAgICAgICAgIGNvbW1vbkNsYXNzRGFvID0gbW9jayhDb21tb25DbGFzc0Rhby5jbGFzcyk7CisgICAgICAgIAorICAgICAgICByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKKwkJcmVzcG9uc2UgPSAgbmV3IE1vY2tIdHRwU2VydmxldFJlc3BvbnNlKCk7CisJCQorCQlBZG1pblRhYkNvbnRyb2xsZXIuc2V0Q29tbW9uQ2xhc3NEYW8oY29tbW9uQ2xhc3NEYW8pOworCQkKICAgICAgICAgR2xvYmFsUm9sZVNldHRpbmdzIGdsb2JhbFJvbGUgPSBuZXcgR2xvYmFsUm9sZVNldHRpbmdzKCk7CiAgICAgICAgIGdsb2JhbFJvbGUuc2V0TG9ja2Rvd24odHJ1ZSk7CiAgICAgICAgIGdsb2JhbFJvbGUuc2V0Um9sZSgic3VwZXItYWRtaW4iKTsKQEAgLTU3LDE3ICs2NywyOCBAQAogCQogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEdldEFkbWluUm9sZSgpewotCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCi0JCU1vY2tIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gIG5ldyBNb2NrSHR0cFNlcnZsZXRSZXNwb25zZSgpOwotCQkKIAkJQWRtaW5UYWJDb250cm9sbGVyIGFkbWluID0gbmV3IEFkbWluVGFiQ29udHJvbGxlcigpOwotCQlBZG1pblRhYkNvbnRyb2xsZXIuc2V0Q29tbW9uQ2xhc3NEYW8oY29tbW9uQ2xhc3NEYW8pOwotCQlhZG1pbi5nZXRBZG1pblRhYkVudGl0eURhdGEocmVxdWVzdCwgcmVzcG9uc2UpOwotCQkKIAkJdHJ5IHsKKwkJCWFkbWluLmdldEFkbWluVGFiRW50aXR5RGF0YShyZXF1ZXN0LCByZXNwb25zZSk7CiAJCQlhc3NlcnRUcnVlKHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpICE9IG51bGwgJiYgcmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkuY29udGFpbnMoImxvY2tkb3duZGF0YSIpKTsKIAkJfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CiAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKKwkJCWZhaWwoKTsKKwkJfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RTYXZlQWRtaW5Sb2xlKCkgdGhyb3dzIEV4Y2VwdGlvbnsKKwkJQWRtaW5UYWJDb250cm9sbGVyIGFkbWluID0gbmV3IEFkbWluVGFiQ29udHJvbGxlcigpOworCQlTdHJpbmcgZGF0YSA9ICJ7XCJsb2NrZG93bmRhdGFcIjp7XCJsb2NrZG93blwiOnRydWV9fSI7CisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGRhdGEpKTsJCisJCXRyeSB7CisJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKwkJCWFkbWluLnNhdmVBZG1pblRhYkxvY2tkb3duVmFsdWUocmVxdWVzdCwgcmVzcG9uc2UpOworCQkJYXNzZXJ0VHJ1ZShyZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSAhPSBudWxsICYmIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJkZXNjcmlwdGl2ZVNjb3BlRGljdGlvbmFyeURhdGFzIikpOworCQl9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJZmFpbCgpOwogCQl9CiAJfQogCQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyVGVzdC5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyVGVzdC5qYXZhCmluZGV4IGI0NjE5YjguLmNhOTE1NDQgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlclRlc3QuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTE2OSw2ICsxNjksNyBAQAogCQkvL2V4cGVjdDogdW5pcXVlS2V5cyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB2YWx1ZSAKIAkJQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIgY29udHJvbGxlckEgPSBuZXcgQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIoKTsKIAkJU3RyaW5nIHN0ciA9ICJ0ZXN0aW5nXFwuYnlDb3JyZWN0V2F5XFwuT2ZEQVRBIjsKKwkJU3RyaW5nIHZhbHVlID0gbnVsbDsKIAkJYXNzZXJ0RXF1YWxzKDEsIGNvbnRyb2xsZXJBLnN0cmluZ0JldHdlZW5Eb3RzKHN0cikpOwogCQkKIAkJLy9leHBlY3Q6IHVuaXF1ZUtleXMgc2hvdWxkIG5vdCBjb250YWluIGEgc3RyaW5nIHZhbHVlIApkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0FjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0FjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzkzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQWN0aW9uX1Rlc3RBY3Rpb25Qb2xpY3kuMS54bWwKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorIDxQb2xpY3kgeG1sbnM9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6Y29yZTpzY2hlbWE6d2QtMTciIFBvbGljeUlkPSJ1cm46eGFjbWw6cG9saWN5OmlkOmI4ZTE4MGRlLTNkY2MtNGI1Yi04MTRkLTkyNWU2NzRlNTczYyIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICAgPERlc2NyaXB0aW9uPlRlc3RBY3Rpb25Qb2xpY3lAQ3JlYXRlZEJ5OkBDcmVhdGVkQnk6QE1vZGlmaWVkQnk6QE1vZGlmaWVkQnk6PC9EZXNjcmlwdGlvbj4KKyAgICAgPFRhcmdldD4KKyAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xMjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJTYW1wbFRlc3QiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgIDwvQW55T2Y+CisgICAgIDwvVGFyZ2V0PgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICAgPFRhcmdldC8+CisgICAgICAgICA8Q29uZGl0aW9uPgorICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOmFuZCI+CisgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjpzdHJpbmctb25lLWFuZC1vbmx5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJTYW1wbFRlc3QiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLW9uZS1hbmQtb25seSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICA8L0NvbmRpdGlvbj4KKyAgICAgICAgIDxPYmxpZ2F0aW9uRXhwcmVzc2lvbnM+CisgICAgICAgICAgICAgPE9ibGlnYXRpb25FeHByZXNzaW9uIE9ibGlnYXRpb25JZD0iVGVzdCIgRnVsZmlsbE9uPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InBlcmZvcm1lciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTpyZWNpcGllbnQtc3ViamVjdCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+UEVQQWN0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJ0eXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlJFU1Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InVybCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYW55VVJJIj5odHRwOi8vbG9jYWxob3N0LmNvbTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWV0aG9kIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkdFVDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iYm9keSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYW55VVJJIj4kVVJML0FjdGlvbi9jb20uQWN0aW9uX1Rlc3RBY3Rpb25Qb2xpY3kuMS54bWwuanNvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgPC9PYmxpZ2F0aW9uRXhwcmVzc2lvbj4KKyAgICAgICAgIDwvT2JsaWdhdGlvbkV4cHJlc3Npb25zPgorICAgICA8L1J1bGU+CisgPC9Qb2xpY3k+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGYxODY0Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWwKQEAgLTAsMCArMSw5MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjpjb206eGFjbWw6cG9saWN5OmlkOjI1NmY0NzEyLWE5NjUtNDgxNy1hODUxLWE3MWJkZWI5ZmI0OSIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICA8RGVzY3JpcHRpb24+QlJNU1BhcmFtIHZGVyBEZW1vIFBvbGljeUBDcmVhdGVkQnk6QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgIDxUYXJnZXQ+CisgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRST09MUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJFQ09NUE5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5CUk1TX1BBUkFNX1JVTEU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iQ29uZmlnTmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RmFsc2U8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJndWFyZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA4LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICA8L0FueU9mPgorICAgIDwvVGFyZ2V0PgorICAgIDxSdWxlIFJ1bGVJZD0idXJuOmNvbTp4YWNtbDpydWxlOmlkOjhjZGI4OGFhLTQ0OGItNGVkMS1iY2U1LTZhMDM3NjUxZTczYyIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICA8VGFyZ2V0PgorICAgICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5BQ0NFU1M8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpyZXNvdXJjZTpyZXNvdXJjZS1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgPC9BbnlPZj4KKyAgICAgICAgPC9UYXJnZXQ+CisgICAgICAgIDxBZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9uIEFkdmljZUlkPSJCUk1TUEFSQU1JRCIgQXBwbGllc1RvPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0idHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWd1cmF0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVVJMSUQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9Db25maWcvY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQ8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVmVyc2lvbk51bWJlciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6RUNPTVBOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRST09MUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkNvbmZpZ05hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QlJNU19QQVJBTV9SVUxFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ia2V5OmNvbnRyb2xsZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+dkZXPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Imd1YXJkIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkZhbHNlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgorICAgICAgICA8L0FkdmljZUV4cHJlc3Npb25zPgorICAgIDwvUnVsZT4KKzwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS54bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOGFiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sCkBAIC0wLDAgKzEsMTEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjp4YWNtbDpwb2xpY3k6aWQ6MDVjMWM0ZWItYTk0Yy00ZjFjLThmZjctNTQ4ZjdkMGIwM2MyIiBWZXJzaW9uPSIxIiBSdWxlQ29tYmluaW5nQWxnSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6cnVsZS1jb21iaW5pbmctYWxnb3JpdGhtOnBlcm1pdC1vdmVycmlkZXMiPgorICAgICA8RGVzY3JpcHRpb24+VGVzdEJSTVNSYXdQb2xpY3lAQ3JlYXRlZEJ5OkBDcmVhdGVkQnk6QE1vZGlmaWVkQnk6QE1vZGlmaWVkQnk6PC9EZXNjcmlwdGlvbj4KKyAgICAgPFRhcmdldD4KKyAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RFJPT0xTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJFQ09NUE5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5CUk1TX1JBV19SVUxFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJDb25maWdOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+SGlnaDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjI8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VHJ1ZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJndWFyZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA4LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgPC9BbnlPZj4KKyAgICAgPC9UYXJnZXQ+CisgICAgIDxSdWxlIFJ1bGVJZD0iIiBFZmZlY3Q9IlBlcm1pdCI+CisgICAgICAgICA8VGFyZ2V0PgorICAgICAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QUNDRVNTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6YWN0aW9uIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDphY3Rpb246YWN0aW9uLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpyZXNvdXJjZTpyZXNvdXJjZS1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPC9BbnlPZj4KKyAgICAgICAgIDwvVGFyZ2V0PgorICAgICAgICAgPEFkdmljZUV4cHJlc3Npb25zPgorICAgICAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9uIEFkdmljZUlkPSJCUk1TUkFXSUQiIEFwcGxpZXNUbz0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJ0eXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWd1cmF0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJVUkxJRCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9Db25maWcvY29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnR4dDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVmVyc2lvbk51bWJlciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6RUNPTVBOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EUk9PTFM8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkNvbmZpZ05hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkJSTVNfUkFXX1JVTEU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9ImNvbnRyb2xsZXI6VGVzdENvbnRyb2xsZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnsKKyAgICAgImFydGlmYWN0SWQiOiAidGVzdGluZyIsCisgICAgICJncm91cElkIiA6ICJvcmcub3BlbmVjb21wIgorIH08L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9ImRlcGVuZGVuY2llczpUZXN0QlJNU0RlcGVuZGVuY3ksIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5beworICAgICAiZ3JvdXBJZCIgOiJvcmcudGVzdCIgLAorICAgICAiYXJ0aWZhY3RJZCIgOiAidGVzdF8yLjEwIiwKKyAgICAgInZlcnNpb24iIDogIjMuMC4yIiwKKyAgICAgImV4Y2x1c2lvbnMiIDogWyB7CisgICAgICAgICAiZ3JvdXBJZCIgOiJvcmcudGVzdC50ZXN0cyIgLAorICAgICAgICAgImFydGlmYWN0SWQiIDogInRlc3QtY29uZmlnXzIuMTAiCisgICAgIH1dCisgfV08L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9ImtleTpjb250cm9sbGVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj52Rlc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5IaWdoPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjI8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Imd1YXJkIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UcnVlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICA8L0FkdmljZUV4cHJlc3Npb24+CisgICAgICAgICA8L0FkdmljZUV4cHJlc3Npb25zPgorICAgICA8L1J1bGU+CisgPC9Qb2xpY3k+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzM0Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwKQEAgLTAsMCArMSw4NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorIDxQb2xpY3kgeG1sbnM9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6Y29yZTpzY2hlbWE6d2QtMTciIFBvbGljeUlkPSJ1cm46eGFjbWw6cG9saWN5OmlkOjJmNWMxYjFlLTdjZDQtNGU3MS05YTBkLTJmY2VmMmE2Y2I3YiIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICAgPERlc2NyaXB0aW9uPlRlc3RGaXJlV2FsbFBvbGljeUBDcmVhdGVkQnk6QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgICA8VGFyZ2V0PgorICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGVzdEZpcmVXYWxsUG9saWN5PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJDb25maWdOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgIDwvQW55T2Y+CisgICAgIDwvVGFyZ2V0PgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkFDQ0VTUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iZmlyZXdhbGxDb25maWdJRCIgQXBwbGllc1RvPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZ3VyYXRpb248L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlVSTElEIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYW55VVJJIj4kVVJML0NvbmZpZy9jb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLmpzb248L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJWZXJzaW9uTnVtYmVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpFQ09NUE5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciLz4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpDb25maWdOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UZXN0RmlyZVdhbGxQb2xpY3k8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJndWFyZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VHJ1ZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgorICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgPC9SdWxlPgorIDwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS54bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmUzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sCkBAIC0wLDAgKzEsODMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKyA8UG9saWN5IHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmNvcmU6c2NoZW1hOndkLTE3IiBQb2xpY3lJZD0idXJuOnhhY21sOnBvbGljeTppZDo5NDdjZmEzNy03MWRhLTRjMTAtOWU2NC1iYjM2MzVhYTlmNTIiIFZlcnNpb249IjEiIFJ1bGVDb21iaW5pbmdBbGdJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpydWxlLWNvbWJpbmluZy1hbGdvcml0aG06cGVybWl0LW92ZXJyaWRlcyI+CisgICAgIDxEZXNjcmlwdGlvbj5UZXN0Q2xvc2VkTG9vcFBvbGljeUBDcmVhdGVkQnk6cmI3MTQ3QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpyYjcxNDdATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgICA8VGFyZ2V0PgorICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EQ0FFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJFQ09NUE5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VHJ1ZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJndWFyZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA3LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgPC9BbnlPZj4KKyAgICAgPC9UYXJnZXQ+CisgICAgIDxSdWxlIFJ1bGVJZD0iIiBFZmZlY3Q9IlBlcm1pdCI+CisgICAgICAgICA8VGFyZ2V0PgorICAgICAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QUNDRVNTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6YWN0aW9uIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDphY3Rpb246YWN0aW9uLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpyZXNvdXJjZTpyZXNvdXJjZS1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPC9BbnlPZj4KKyAgICAgICAgIDwvVGFyZ2V0PgorICAgICAgICAgPEFkdmljZUV4cHJlc3Npb25zPgorICAgICAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9uIEFkdmljZUlkPSJmYXVsdElEIiBBcHBsaWVzVG89IlBlcm1pdCI+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0idHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlndXJhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVVJMSUQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNhbnlVUkkiPiRVUkwvQ29uZmlnL2NvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJWZXJzaW9uTnVtYmVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpFQ09NUE5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRDQUU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJndWFyZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VHJ1ZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDctMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgorICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgPC9SdWxlPgorIDwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfTVNfdkZpcmV3YWxsLjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19NU192RmlyZXdhbGwuMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkMGI3YgotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfTVNfdkZpcmV3YWxsLjEueG1sCkBAIC0wLDAgKzEsMTE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8UG9saWN5IHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmNvcmU6c2NoZW1hOndkLTE3IiBQb2xpY3lJZD0idXJuOmNvbTp4YWNtbDpwb2xpY3k6aWQ6MzQ5MjhiMDUtYjBmNi00OTc0LTg0NTgtZjRkMzRhMmExNzY0IiBWZXJzaW9uPSIxIiBSdWxlQ29tYmluaW5nQWxnSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6cnVsZS1jb21iaW5pbmctYWxnb3JpdGhtOnBlcm1pdC1vdmVycmlkZXMiPgorICAgIDxEZXNjcmlwdGlvbj5NaWNybyBTZXJ2aWNlIHZGaXJld2FsbCBEZW1vIFBvbGljeUBDcmVhdGVkQnk6ZGVtb0BDcmVhdGVkQnk6QE1vZGlmaWVkQnk6ZGVtb0BNb2RpZmllZEJ5OjwvRGVzY3JpcHRpb24+CisgICAgPFRhcmdldD4KKyAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfTVNfdkZpcmV3YWxsLjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RENBRTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJFQ09NUE5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVDb25maWdOYW1lPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IkNvbmZpZ05hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UY2FNZXRyaWNzLXYxLjAuMC41PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0ic2VydmljZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPi9zZXJ2aWNlcy9jZGFwLXRjYS1oaS1sby9pbnN0YW5jZXMvZGVtby9jb25maWd1cmF0aW9uL21ldHJpY3NQZXJGdW5jdGlvbmFsUm9sZS92RmlyZXdhbGw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJ1dWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlU2VydmljZUxvY2F0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0ibG9jYXRpb24iIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkZhbHNlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wNy0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgPC9BbnlPZj4KKyAgICA8L1RhcmdldD4KKyAgICA8UnVsZSBSdWxlSWQ9InVybjpjb206eGFjbWw6cnVsZTppZDowNjMxNjFkZS0wNTM0LTQ5ODktYmQwMS00MmY3ODRkYWYyMWUiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QUNDRVNTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlnPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgIDwvVGFyZ2V0PgorICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbnM+CisgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iTVNJRCIgQXBwbGllc1RvPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0idHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWd1cmF0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVVJMSUQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9Db25maWcvY29tLkNvbmZpZ19NU192RmlyZXdhbGwuMS5qc29uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlZlcnNpb25OdW1iZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkVDT01QTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EQ0FFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6Q29uZmlnTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVDb25maWdOYW1lPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6c2VydmljZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UY2FNZXRyaWNzLXYxLjAuMC41PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6dXVpZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4vc2VydmljZXMvY2RhcC10Y2EtaGktbG8vaW5zdGFuY2VzL2RlbW8vY29uZmlndXJhdGlvbi9tZXRyaWNzUGVyRnVuY3Rpb25hbFJvbGUvdkZpcmV3YWxsPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6TG9jYXRpb24iIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlU2VydmljZUxvY2F0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUHJpb3JpdHkiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJndWFyZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wNy0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgorICAgICAgICA8L0FkdmljZUV4cHJlc3Npb25zPgorICAgIDwvUnVsZT4KKzwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLnhtbCBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTU2Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sCkBAIC0wLDAgKzEsOTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKyA8UG9saWN5IHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmNvcmU6c2NoZW1hOndkLTE3IiBQb2xpY3lJZD0idXJuOnhhY21sOnBvbGljeTppZDphM2ZmM2M0OC1iMTZmLTQzNmEtOWFhYS1hYzdhMzUxNWIwZTgiIFZlcnNpb249IjEiIFJ1bGVDb21iaW5pbmdBbGdJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpydWxlLWNvbWJpbmluZy1hbGdvcml0aG06cGVybWl0LW92ZXJyaWRlcyI+CisgICAgIDxEZXNjcmlwdGlvbj5UZXN0Q2xvc2VkTG9vcFBNUG9saWN5QENyZWF0ZWRCeTpyYjcxNDdAQ3JlYXRlZEJ5OkBNb2RpZmllZEJ5OnJiNzE0N0BNb2RpZmllZEJ5OjwvRGVzY3JpcHRpb24+CisgICAgIDxUYXJnZXQ+CisgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGVzdDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iRUNPTVBOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5SZWdpc3RyYXRpb24gRmFpbHVyZShUcmluaXR5KTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iU2VydmljZVR5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgIDwvQW55T2Y+CisgICAgIDwvVGFyZ2V0PgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkFDQ0VTUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iUE1JRCIgQXBwbGllc1RvPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZ3VyYXRpb248L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlVSTElEIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYW55VVJJIj4kVVJML0NvbmZpZy9jb20uQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS5qc29uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlZlcnNpb25OdW1iZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkVDT01QTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGVzdDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6U2VydmljZVR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlJlZ2lzdHJhdGlvbiBGYWlsdXJlKFRyaW5pdHkpPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlRUTERhdGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA4LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbj4KKyAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbnM+CisgICAgIDwvUnVsZT4KKyA8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX1NhbXBsZVRlc3QxMjA2LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbAppbmRleCA1YzMyY2Q0Li41MzkwNTQ4IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX1NhbXBsZVRlc3QxMjA2LjEueG1sCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CiAgICAgICAgICAgICAgICAgPC9NYXRjaD4KICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+Ci0gICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5OQTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KICAgICAgICAgICAgICAgICA8L01hdGNoPgogICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KQEAgLTgyLDcgKzgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgogICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KLSAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPk5BPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA4LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgogICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CiAgICAgICAgICAgICA8L0FkdmljZUV4cHJlc3Npb24+CiAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbnM+CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvRGVjaXNpb25fVGVzdERlY2lzaW9uUG9saWN5V2l0aFJ1bGVBbGdvcml0aG1zLjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0RlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGEwZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0RlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbApAQCAtMCwwICsxLDg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjp4YWNtbDpwb2xpY3k6aWQ6YjYyMmQ4MDgtYmE2Mi00MzkyLTkzYzgtZWFmZjBjYmZiNjNmIiBWZXJzaW9uPSIxIiBSdWxlQ29tYmluaW5nQWxnSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6cnVsZS1jb21iaW5pbmctYWxnb3JpdGhtOnBlcm1pdC1vdmVycmlkZXMiPgorICAgICA8RGVzY3JpcHRpb24+VGVzdERlY2lzaW9uUG9saWN5V2l0aFJ1bGVBbGdvcml0aG1zQENyZWF0ZWRCeTpyYjcxNDdAQ3JlYXRlZEJ5OkBNb2RpZmllZEJ5OnJiNzE0N0BNb2RpZmllZEJ5OjwvRGVzY3JpcHRpb24+CisgICAgIDxUYXJnZXQ+CisgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkRlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IkVDT01QTmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICA8L0FueU9mPgorICAgICA8L1RhcmdldD4KKyAgICAgPFZhcmlhYmxlRGVmaW5pdGlvbiBWYXJpYWJsZUlkPSJUZXN0U2V0dGluZ3MiPgorICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICA8L1ZhcmlhYmxlRGVmaW5pdGlvbj4KKyAgICAgPFJ1bGUgUnVsZUlkPSIiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgIDxUYXJnZXQ+CisgICAgICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5ERUNJREU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxDb25kaXRpb24+CisgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246YW5kIj4KKyAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLW9uZS1hbmQtb25seSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj50ZXN0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1vbmUtYW5kLW9ubHkiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgIDwvQ29uZGl0aW9uPgorICAgICA8L1J1bGU+CisgICAgIDxSdWxlIFJ1bGVJZD0iIiBFZmZlY3Q9IkRlbnkiPgorICAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRFQ0lERTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPC9BbnlPZj4KKyAgICAgICAgIDwvVGFyZ2V0PgorICAgICAgICAgPENvbmRpdGlvbj4KKyAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjpub3QiPgorICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjphbmQiPgorICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjpzdHJpbmctb25lLWFuZC1vbmx5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+dGVzdDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLW9uZS1hbmQtb25seSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgPC9Db25kaXRpb24+CisgICAgIDwvUnVsZT4KKyA8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvSlNPTkNvbmZpZy5qc29uIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0pTT05Db25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Y5ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0pTT05Db25maWcuanNvbgpAQCAtMCwwICsxLDEzMiBAQAorWworICAgIHsKKyAgICAgICAgInNlcnZpY2VUeXBlUG9saWN5TmFtZSI6ICJSZWdpc3RyYXRpb24gRmFpbHVyZShUcmluaXR5KSIsCisgICAgICAgICJ2ZXJ0aWNhTWV0cmljcyI6ICJEQVRFVElNRVVUQ1xuIFZORkNfTkFNRVxuIEJXX1NJUF9TVEFUU19SRUdJU1RFUl9SRVNQT05TRV9DT0RFX1ZBTFVFIFxuQldfU0lQX1NUQVRTX1JFR0lTVEVSX1JFU1BPTlNFX0lOUyBcbiBCV19TSVBfU1RBVFNfUkVHSVNURVJfUkVTUE9OU0VfT1VUUyIsCisgICAgICAgICJhdHRyaWJ1dGVzIjogeworICAgICAgICAgICAgIk9uc2V0JmFiYXRlbWVudCBhbm9tYWx5IGRldGVjdGlvbiI6IHsKKyAgICAgICAgICAgICAgICAiUHRpbGVMaW1pdCI6ICJQZXJjZW50aWxlIHZhbHVlIHVzZWQgYnkgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwiLAorICAgICAgICAgICAgICAgICJUaHJlc2hvbGQiOiAiaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHF1YW50aWxlIGF0IHBlcmNlbnRpbGUoUHRpbGVMaW1pdCkgdXNlZCBieSB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwiLAorICAgICAgICAgICAgICAgICJXaW5kb3ciOiAiTnVtYmVyIG9mIHdlZWtzIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGtlZXBzIGluIG1lbW9yeSB0byBlc3RpbWF0ZSBUaHJlc2hvbGQiLAorICAgICAgICAgICAgICAgICJUcmFpbmluZyI6ICJOdW1iZXIgb2YgaGlzdG9yaWNhbCB3ZWVrcyBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBuZWVkcyBmb3IgdHJhaW5pbmcgIiwKKyAgICAgICAgICAgICAgICAiRnJhY3Rpb25TYW1wbGVQZXJEYXkiOiAiVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgZGF5IHRvIGJlIHVzZWQgaW4gdGhlIGRhaWx5IHBlcmNlbnRpbGUgY29tcHV0YXRpb24gd2hlbiB1cGRhdGluZyB0aGUgZGlzdHJpYnV0aW9uIHRhaWwgY3Jvc3NpbmcgbW9kZWwuIFdoZW4gdGhlcmUgYXJlIGxlc3Mgc2FtcGxlcyB0aGFuIHRoYXQgdGhyZXNob2xkLCB0aGUgbW9kZWwgaXMgbm90IHVwZGF0ZWQgd2l0aCB0aGVzZSBzYW1wbGVzLiAiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJDb25zZWN1dGl2ZUludGVydmFsT25zZXQiOiAiTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVydmFscyBub3JtYWxpemVkIG1ldHJpYyBtdXN0IHRyaWdnZXIgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGJlZm9yZSByZXN1bHRpbmcgaW4gYW4gYWN0aW9uIiwKKyAgICAgICAgICAgICAgICAiUmV0cnlUaW1lciI6ICJNaW5pbXVtIGludGVydmFsIGJldHdlZW4gcG9saWN5IHRyaWdnZXJzIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJBYmF0ZW1lbnQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIkNvbnNlY3V0aXZlSW50ZXJ2YWxBYmF0ZW1lbnQiOiAiTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVydmFscyBub3JtYWxpemVkIG1ldHJpYyBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBhZnRlciBvbnNldCBzaWduYXR1cmUgd2FzIHRyaWdnZXJlZCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgJiBhYmF0ZW1lbnQgVUVCIG5vdGlmaWNhdGlvbiI6IHsKKyAgICAgICAgICAgICAgICAiT25zZXRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIE9uU2V0TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIkFiYXRlbWVudE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgQWJhdGVtZW50TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIlBvbGljeU5hbWUiOiAiVmFsdWUgb2YgZmllbGQgUG9saWN5TmFtZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInBvbGljeURlc2NyaXB0aW9uIjogIlBvbGljeSB0byBkZXRlY3QgaW5zdGFuY2VzIHdoZXJlIFNJUCByZWdpc3RyYXRpb24gcmF0ZSBleGNlZWRzIGEgbm9ybWFsIGxldmVsIG92ZXIgYSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2FtcGxpbmcgcGVyaW9kcy4gXG4gTm90ZXMgXG4gKDEpIFZlcnRpY2EgbWV0cmljcyBub3JtYWxpemVkIGFuZCBjb21iaW5lZCBpbiBhIFNJUCByZWdpc3RyYXRpb24gZmFpbHVyZSBwcm9iYWJpbGl0eSBwZXIgU2l0ZSBhbmQgcGVyIFZNLiBcbiAoMikgQW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgb3BlcmF0ZXMgb24gU0lQIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHByb2JhYmlsaXR5LiBcbiAoMykgQW5vbWFseSBkZXRlY3Rpb24gY29uc2lzdHMgb2YgYW4gZXN0aW1hdGVkIGRpc3RyaWJ1dGlvbiBwZXJjZW50aWxlIHRocmVzaG9sZCBjcm9zc2luZy4gXG4gKDQpIEFjdGlvbnM6IFNlbmQgZW1haWwgYW5kL29yIFVFQiBub3RpZmljYXRpb24iCisgICAgfSwKKyAgICB7CisgICAgICAgICJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiSW50ZXJuYXRpb25hbCBGcmF1ZChUcmluaXR5KSIsCisgICAgICAgICJ2ZXJ0aWNhTWV0cmljcyI6ICJJTlRFUlZBTF9TVEFSVF9UU1xuIENVU1RPTUVSXG4gQV9TSVRFXG4gQV9TQkdcbiBCV1xuIFpfQ09VTlRSWVxuIENBTExfQ09VTlRcbiBNSU5VVEVTX09GX1VTRSIsCisgICAgICAgICJhdHRyaWJ1dGVzIjogeworICAgICAgICAgICAgIk9uc2V0JmFiYXRlbWVudCBhbm9tYWx5IGRldGVjdGlvbiI6IHsKKyAgICAgICAgICAgICAgICAiUHRpbGVMaW1pdCI6ICJQZXJjZW50aWxlIHZhbHVlIHVzZWQgYnkgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwiLAorICAgICAgICAgICAgICAgICJUaHJlc2hvbGQiOiAiaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHF1YW50aWxlIGF0IHBlcmNlbnRpbGUoUHRpbGVMaW1pdCkgdXNlZCBieSB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwiLAorICAgICAgICAgICAgICAgICJXaW5kb3ciOiAiTnVtYmVyIG9mIHdlZWtzIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGtlZXBzIGluIG1lbW9yeSB0byBlc3RpbWF0ZSBUaHJlc2hvbGQiLAorICAgICAgICAgICAgICAgICJUcmFpbmluZyI6ICJOdW1iZXIgb2YgaGlzdG9yaWNhbCB3ZWVrcyBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBuZWVkcyBmb3IgdHJhaW5pbmcgIiwKKyAgICAgICAgICAgICAgICAgIkZyYWN0aW9uU2FtcGxlUGVyRGF5IjogIlRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGRheSB0byBiZSB1c2VkIGluIHRoZSBkYWlseSBwZXJjZW50aWxlIGNvbXB1dGF0aW9uIHdoZW4gdXBkYXRpbmcgdGhlIGRpc3RyaWJ1dGlvbiB0YWlsIGNyb3NzaW5nIG1vZGVsLiBXaGVuIHRoZXJlIGFyZSBsZXNzIHNhbXBsZXMgdGhhbiB0aGF0IHRocmVzaG9sZCwgdGhlIG1vZGVsIGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlc2Ugc2FtcGxlcy4gIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiQ29uc2VjdXRpdmVJbnRlcnZhbE9uc2V0IjogIk51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlcnZhbHMgbm9ybWFsaXplZCBtZXRyaWMgbXVzdCB0cmlnZ2VyIHRoZSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBiZWZvcmUgcmVzdWx0aW5nIGluIGFuIGFjdGlvbiIsCisgICAgICAgICAgICAgICAgIlJldHJ5VGltZXIiOiAiTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHBvbGljeSB0cmlnZ2VycyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiQWJhdGVtZW50IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJDb25zZWN1dGl2ZUludGVydmFsQWJhdGVtZW50IjogIk51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlcnZhbHMgbm9ybWFsaXplZCBtZXRyaWMgZG9lcyBub3QgdHJpZ2dlciB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgYWZ0ZXIgb25zZXQgc2lnbmF0dXJlIHdhcyB0cmlnZ2VyZWQiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0ICYgYWJhdGVtZW50IFVFQiBub3RpZmljYXRpb24gIjogeworICAgICAgICAgICAgICAgICJPbnNldE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgT25TZXRNZXNzYWdlIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIiwKKyAgICAgICAgICAgICAgICAiQWJhdGVtZW50TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBBYmF0ZW1lbnRNZXNzYWdlIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIiwKKyAgICAgICAgICAgICAgICAiUG9saWN5TmFtZSI6ICJWYWx1ZSBvZiBmaWVsZCBQb2xpY3lOYW1lIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIgorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAicG9saWN5RGVzY3JpcHRpb24iOiAiUG9saWN5IHRvIGRldGVjdCBpbnN0YW5jZXMgd2hlcmUgY291bnQgb2YgY2FsbHMgdG93YXJkcyBhbiBpbnRlcm5hdGlvbmFsIGRlc3RpbmF0aW9uIGV4Y2VlZHMgYSBub3JtYWwgbGV2ZWwgb3ZlciBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzYW1wbGluZyBwZXJpb2RzLiBcbiBOb3RlcyBcbiAoMSkgVmVydGljYSBtZXRyaWNzIG5vcm1hbGl6ZWQgYW5kIGNvbWJpbmVkIGluIGEgU0lQIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHByb2JhYmlsaXR5IHBlciBDdXN0b21lciwgcGVyIFNpdGUgYW5kIHBlciBWTS4gXG4gKDIpIEFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIG9wZXJhdGVzIG9uIGNvdW50cyB0b3dhcmRzIGFuIGludGVybmF0aW9uYWwgZGVzdGluYXRpb24uIFxuICgzKSBBbm9tYWx5IGRldGVjdGlvbiBjb25zaXN0cyBvZiBhbiBlc3RpbWF0ZWQgZGlzdHJpYnV0aW9uIHBlcmNlbnRpbGUgdGhyZXNob2xkIGNyb3NzaW5nLiBcbiAoNCkgQWN0aW9uczogU2VuZCBlbWFpbCBhbmQvb3IgVUVCIG5vdGlmaWNhdGlvbiIKKyAgICB9LAorICAgIHsKKyAgICAgICAgInNlcnZpY2VUeXBlUG9saWN5TmFtZSI6ICJObyBkaWFsIHRvbmUoVHJpbml0eSkiLAorICAgICAgICAidmVydGljYU1ldHJpY3MiOiAiSU5URVJWQUxfU1RBUlRfVFNcbiBTVU0oQ0FMTFNfQVRURU1QVEVEKVxuIFNVTShOT19BTlNXRVJfT1JfVk9JQ0VfTUFJTClcbiBBX1NJVEUgb3IgQV9TQkcgb3IgQlcgb3IgQ1VTVE9NRVIiLAorICAgICAgICAiYXR0cmlidXRlcyI6IHsKKyAgICAgICAgICAgICJPbnNldCZhYmF0ZW1lbnQgYW5vbWFseSBkZXRlY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgIlB0aWxlTGltaXQiOiAiUGVyY2VudGlsZSB2YWx1ZSB1c2VkIGJ5IGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiVGhyZXNob2xkIjogImluaXRpYWwgdmFsdWUgZm9yIHRoZSBxdWFudGlsZSBhdCBwZXJjZW50aWxlKFB0aWxlTGltaXQpIHVzZWQgYnkgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiV2luZG93IjogIk51bWJlciBvZiB3ZWVrcyBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBrZWVwcyBpbiBtZW1vcnkgdG8gZXN0aW1hdGUgVGhyZXNob2xkIiwKKyAgICAgICAgICAgICAgICAiVHJhaW5pbmciOiAiTnVtYmVyIG9mIGhpc3RvcmljYWwgd2Vla3MgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgbmVlZHMgZm9yIHRyYWluaW5nICIsCisgICAgICAgICAgICAgICAgICJGcmFjdGlvblNhbXBsZVBlckRheSI6ICJUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzYW1wbGVzIHBlciBkYXkgdG8gYmUgdXNlZCBpbiB0aGUgZGFpbHkgcGVyY2VudGlsZSBjb21wdXRhdGlvbiB3aGVuIHVwZGF0aW5nIHRoZSBkaXN0cmlidXRpb24gdGFpbCBjcm9zc2luZyBtb2RlbC4gV2hlbiB0aGVyZSBhcmUgbGVzcyBzYW1wbGVzIHRoYW4gdGhhdCB0aHJlc2hvbGQsIHRoZSBtb2RlbCBpcyBub3QgdXBkYXRlZCB3aXRoIHRoZXNlIHNhbXBsZXMuICIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIkNvbnNlY3V0aXZlSW50ZXJ2YWxPbnNldCI6ICJOdW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZXJ2YWxzIG5vcm1hbGl6ZWQgbWV0cmljIG11c3QgdHJpZ2dlciB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgYmVmb3JlIHJlc3VsdGluZyBpbiBhbiBhY3Rpb24iLAorICAgICAgICAgICAgICAgICJSZXRyeVRpbWVyIjogIk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBwb2xpY3kgdHJpZ2dlcnMiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIkFiYXRlbWVudCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiQ29uc2VjdXRpdmVJbnRlcnZhbEFiYXRlbWVudCI6ICJOdW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZXJ2YWxzIG5vcm1hbGl6ZWQgbWV0cmljIGRvZXMgbm90IHRyaWdnZXIgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGFmdGVyIG9uc2V0IHNpZ25hdHVyZSB3YXMgdHJpZ2dlcmVkIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCAmIGFiYXRlbWVudCBVRUIgbm90aWZpY2F0aW9uICI6IHsKKyAgICAgICAgICAgICAgICAiT25zZXRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIE9uU2V0TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIkFiYXRlbWVudE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgQWJhdGVtZW50TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIlBvbGljeU5hbWUiOiAiVmFsdWUgb2YgZmllbGQgUG9saWN5TmFtZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInBvbGljeURlc2NyaXB0aW9uIjogIlBvbGljeSB0byBkZXRlY3QgPyBcbiBOb3RlczpcbiAoMSkgQWN0aW9uczogU2VuZCBlbWFpbCBhbmQvb3IgVUVCIG5vdGlmaWNhdGlvbiIKKyAgICB9LAorICAgIHsKKyAgICAgICAgInNlcnZpY2VUeXBlUG9saWN5TmFtZSI6ICJDYWxsIHN0b3JtKFRyaW5pdHkpIiwKKyAgICAgICAgInZlcnRpY2FNZXRyaWNzIjogIiIsCisgICAgICAgICJhdHRyaWJ1dGVzIjogeworICAgICAgICAgICAgIk9uc2V0JmFiYXRlbWVudCBhbm9tYWx5IGRldGVjdGlvbiI6IHsKKyAgICAgICAgICAgICAgICAiU2Vhc29uTGVuZ3RoIjogIk1ldHJpYyBzZWFzb25hbGl0eSAoNW1pbiBzYW1wbGluZyBwZXJpb2Qgd2l0aCA3IGRheXMgc2Vhc29uYWxpdHk6IDcqMjg4KSB1c2VkIGJ5IEhvbHQtV2ludGVycyBtb2RlbCIsCisgICAgICAgICAgICAgICAgIlRyYWluTGVuZ3RoIjogIlRyYWluaW5nIGxlbmd0aCAoNW1pbiBzYW1wbGluZyBwZXJpb2Qgd2l0aCA3IGRheXMgc2Vhc29uYWxpdHkgYW5kIDUgY3ljbGVzIHRyYWluaW5nOiA3KjI4OCo1KSB1c2VkIGJ5IEhvbHQtV2ludGVycyIsCisgICAgICAgICAgICAgICAgIkFscGhhIjogIlNtb290aGluZyBwYXJhbWV0ZXIgKHJhbmdlIDAtMSwgZGVmYXVsdCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiQmV0YSI6ICJUcmVuZCBwYXJhbWV0ZXIgKHJhbmdlIDAtMSwgZGVmYXVsdCAwKSAiLAorICAgICAgICAgICAgICAgICJHYW1tYSI6ICJTZWFzb25hbGl0eSAocmFuZ2UgMC0xLCBkZWZhdWx0IDAuMDUpIiwKKyAgICAgICAgICAgICAgICAiRGV2aWF0aW9uIFRocmVzaG9sZCI6ICJBcHByb3hpbWF0ZWx5IGEgbGltaXQgb24gdGhlIGZhY3RvciBieSBob3cgbXVjaCBjdXJyZW50IHZhbHVlIGhhcyBkZXZpYXRlZCBjb21wYXJlZCB0byBleHBlY3RlZCB2YXJpYW5jZSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIlJldHJ5VGltZXIiOiAiTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHBvbGljeSB0cmlnZ2VycyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiQWJhdGVtZW50IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJIdy1UaW1lb3V0IjogIk1heGltdW0gdGltZSBmb3IgYW4gSGVhbHRoQ2hlY2sgcmVzcG9uc2UgKG1lYXN1cmVkIGZyb20gdGhlIHRpbWUgYSBwb3NpdGl2ZSBBcHAtQyByZXNwb25zZSB3YXMgcmVjZWl2ZWQpIiwKKyAgICAgICAgICAgICAgICAiT25TZXRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIgIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCAmIGFiYXRlbWVudCBVRUIgbm90aWZpY2F0aW9uICI6IHsKKyAgICAgICAgICAgICAgICAiQWJhdGVtZW50TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBBYmF0ZW1lbnRNZXNzYWdlIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIiwKKyAgICAgICAgICAgICAgICAiUG9saWN5TmFtZSI6ICJWYWx1ZSBvZiBmaWVsZCBQb2xpY3lOYW1lIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIgorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAicG9saWN5RGVzY3JpcHRpb24iOiAiUG9saWN5IHRvIGRldGVjdCBpbnN0YW5jZXMgd2hlcmUgY291bnQgb2YgRm9ybWF0dGVkIHRhYmxlID8gZXhjZWVkcyBhIHByZWRpY3RlZCBsZXZlbC4gXG4gTm90ZXMgXG4gKDEpIFZlcnRpY2EgbWV0cmljcyBub3JtYWxpemVkIGFuZCBjb21iaW5lZCBpbiA/IHBlciBDdXN0b21lciwgcGVyIFNpdGUgYW5kIHBlciBWTS4gXG4gKDIpIEFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIG9wZXJhdGVzIG9uID8gXG4gKDMpIEFub21hbHkgZGV0ZWN0aW9uIGNvbnNpc3RzIG9mIGRldGVjdGluZyBkZXZpYXRpb25zIGZyb20gSG9sdC1XaW50ZXJzIHByZWRpY3Rpb25zLiBcbiAoNCkgQWN0aW9uczogU2VuZCBlbWFpbCBhbmQvb3IgVUVCIG5vdGlmaWNhdGlvbiIKKyAgICB9LAorICAgIHsKKyAgICAgICAgInNlcnZpY2VUeXBlUG9saWN5TmFtZSI6ICJSZWdpc3RyYXRpb24gc3Rvcm0oVHJpbml0eSkiLAorICAgICAgICAidmVydGljYU1ldHJpY3MiOiAiIiwKKyAgICAgICAgImF0dHJpYnV0ZXMiOiB7CisgICAgICAgICAgICAiT25zZXQmYWJhdGVtZW50IGFub21hbHkgZGV0ZWN0aW9uIjogeworICAgICAgICAgICAgICAgICJTZWFzb25MZW5ndGgiOiAiTWV0cmljIHNlYXNvbmFsaXR5ICg1bWluIHNhbXBsaW5nIHBlcmlvZCB3aXRoIDcgZGF5cyBzZWFzb25hbGl0eTogNyoyODgpIHVzZWQgYnkgSG9sdC1XaW50ZXJzIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiVHJhaW5MZW5ndGgiOiAiVHJhaW5pbmcgbGVuZ3RoICg1bWluIHNhbXBsaW5nIHBlcmlvZCB3aXRoIDcgZGF5cyBzZWFzb25hbGl0eSBhbmQgNSBjeWNsZXMgdHJhaW5pbmc6IDcqMjg4KjUpIHVzZWQgYnkgSG9sdC1XaW50ZXJzIiwKKyAgICAgICAgICAgICAgICAiQWxwaGEiOiAiU21vb3RoaW5nIHBhcmFtZXRlciAocmFuZ2UgMC0xLCBkZWZhdWx0IDAuMikiLAorICAgICAgICAgICAgICAgICJCZXRhIjogIlRyZW5kIHBhcmFtZXRlciAocmFuZ2UgMC0xLCBkZWZhdWx0IDApICIsCisgICAgICAgICAgICAgICAgIkdhbW1hIjogIlNlYXNvbmFsaXR5IChyYW5nZSAwLTEsIGRlZmF1bHQgMC4wNSkiLAorICAgICAgICAgICAgICAgICJEZXZpYXRpb24gVGhyZXNob2xkIjogIkFwcHJveGltYXRlbHkgYSBsaW1pdCBvbiB0aGUgZmFjdG9yIGJ5IGhvdyBtdWNoIGN1cnJlbnQgdmFsdWUgaGFzIGRldmlhdGVkIGNvbXBhcmVkIHRvIGV4cGVjdGVkIHZhcmlhbmNlIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiUmV0cnlUaW1lciI6ICJNaW5pbXVtIGludGVydmFsIGJldHdlZW4gcG9saWN5IHRyaWdnZXJzIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJBYmF0ZW1lbnQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIkh3LVRpbWVvdXQiOiAiTWF4aW11bSB0aW1lIGZvciBhbiBIZWFsdGhDaGVjayByZXNwb25zZSAobWVhc3VyZWQgZnJvbSB0aGUgdGltZSBhIHBvc2l0aXZlIEFwcC1DIHJlc3BvbnNlIHdhcyByZWNlaXZlZCkiLAorICAgICAgICAgICAgICAgICJPblNldE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgTWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiAiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0ICYgYWJhdGVtZW50IFVFQiBub3RpZmljYXRpb24gIjogeworICAgICAgICAgICAgICAgICJBYmF0ZW1lbnRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIEFiYXRlbWVudE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiLAorICAgICAgICAgICAgICAgICJQb2xpY3lOYW1lIjogIlZhbHVlIG9mIGZpZWxkIFBvbGljeU5hbWUgc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJwb2xpY3lEZXNjcmlwdGlvbiI6ICJQb2xpY3kgdG8gZGV0ZWN0IGluc3RhbmNlcyB3aGVyZSBjb3VudCBvZiBGb3JtYXR0ZWQgdGFibGUgPyBleGNlZWRzIGEgcHJlZGljdGVkIGxldmVsLiBcbiBOb3RlcyBcbiAoMSkgVmVydGljYSBtZXRyaWNzIG5vcm1hbGl6ZWQgYW5kIGNvbWJpbmVkIGluID8gcGVyIEN1c3RvbWVyLCBwZXIgU2l0ZSBhbmQgcGVyIFZNLiBcbiAoMikgQW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgb3BlcmF0ZXMgb24gPyBcbiAoMykgQW5vbWFseSBkZXRlY3Rpb24gY29uc2lzdHMgb2YgZGV0ZWN0aW5nIGRldmlhdGlvbnMgZnJvbSBIb2x0LVdpbnRlcnMgcHJlZGljdGlvbnMuIFxuICg0KSBBY3Rpb25zOiBTZW5kIGVtYWlsIGFuZC9vciBVRUIgbm90aWZpY2F0aW9uIgorICAgIH0KK10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQWN0aW9uX1Rlc3RBY3Rpb25Qb2xpY3kuMS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMjI4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEuanNvbgpAQCAtMCwwICsxIEBACit7ImEiOiJiIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1YWZiZAotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnR4dApAQCAtMCwwICsxLDExNDUgQEAKKy8qIEF1dG9nZW5lcmF0ZWQgQ29kZSBQbGVhc2UgRG9uJ3QgY2hhbmdlL3JlbW92ZSB0aGlzIGNvbW1lbnQgc2VjdGlvbi4gVGhpcyBpcyBmb3IgdGhlIFVJIHB1cnBvc2UuIAorCSA8JCVCUk1TUGFyYW1UZW1wbGF0ZT1Db250cm9sTG9vcERlbW9fX2Nsb3NlZExvb3BDb250cm9sTmFtZSUkPiAKKyAqLyAKKworCisvKi0KKyAqID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBhcmNoZXR5cGUtY2xvc2VkLWxvb3AtZGVtby1ydWxlcworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworcGFja2FnZSBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbG9vcDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLlVVSUQ7CisKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbG9vcC5WaXJ0dWFsQ29udHJvbExvb3BFdmVudDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbG9vcC5Db250cm9sTG9vcEV2ZW50U3RhdHVzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsb29wLlZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbG9vcC5Db250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGU7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3AuQ29udHJvbExvb3BPcGVyYXRpb247CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3AuQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnRlbXBsYXRlLmRlbW8uQ29udHJvbExvb3BFeGNlcHRpb247CisKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OUNsb3VkUmVnaW9uOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5RXh0cmFQcm9wZXJ0aWVzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5RXh0cmFQcm9wZXJ0eTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OUdlbmVyaWNWTkY7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlJbnN0YW5jZUZpbHRlcnM7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlJbnZlbnRvcnlSZXNwb25zZUl0ZW07CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlJbnZlbnRvcnlSZXNwb25zZUl0ZW1zOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5TWFuYWdlcjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OU5hbWVkUXVlcnk7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlRdWVyeVBhcmFtZXRlcnM7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlSZXF1ZXN0OworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5UmVxdWVzdFdyYXBwZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlSZXNwb25zZTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVJlc3BvbnNlV3JhcHBlcjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVNlcnZpY2VJbnN0YW5jZTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVRlbmFudDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVZmTW9kdWxlOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5VlNlcnZlcjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkudXRpbC5TZXJpYWxpemF0aW9uOworCitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYXBwYy5Db21tb25IZWFkZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYXBwYy5SZXF1ZXN0OworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFwcGMuUmVzcG9uc2U7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYXBwYy5SZXNwb25zZUNvZGU7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYXBwYy5SZXNwb25zZVN0YXR1czsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hcHBjLlJlc3BvbnNlVmFsdWU7CisKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS50ZW1wbGF0ZS5kZW1vLkV2ZW50TWFuYWdlcjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS52bmYudHJhZmZpY2dlbmVyYXRvci5QR1JlcXVlc3Q7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kudm5mLnRyYWZmaWNnZW5lcmF0b3IuUEdTdHJlYW07CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kudm5mLnRyYWZmaWNnZW5lcmF0b3IuUEdTdHJlYW1zOworCitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT01hbmFnZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlcXVlc3Q7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlcXVlc3RTdGF0dXM7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlcXVlc3REZXRhaWxzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09Nb2RlbEluZm87CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT0Nsb3VkQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5tc28uTVNPUmVxdWVzdEluZm87CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlcXVlc3RQYXJhbWV0ZXJzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5tc28uTVNPUmVsYXRlZEluc3RhbmNlOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZXNwb25zZTsKKworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmRyb29scy5zeXN0ZW0uUG9saWN5RW5naW5lOworCisvLworLy8gVGhlc2UgcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIHJ1bnRpbWUgcG9saWN5CisvLworZGVjbGFyZSBQYXJhbXMKKyAgICBjbG9zZWRMb29wQ29udHJvbE5hbWUgOiBTdHJpbmcKKyAgICBhY3RvciA6IFN0cmluZworICAgIGFhaVVSTCA6IFN0cmluZworICAgIGFhaVVzZXJuYW1lIDogU3RyaW5nCisgICAgYWFpUGFzc3dvcmQgOiBTdHJpbmcKKyAgICBtc29VUkwgOiBTdHJpbmcKKyAgICBtc29Vc2VybmFtZSA6IFN0cmluZworICAgIG1zb1Bhc3N3b3JkIDogU3RyaW5nCisgICAgYWFpTmFtZWRRdWVyeVVVSUQgOiBTdHJpbmcKKyAgICBhYWlQYXR0ZXJuTWF0Y2ggOiBpbnQgCisgICAgbm90aWZpY2F0aW9uVG9waWMgOiBTdHJpbmcKKyAgICBhcHBjVG9waWMgOiBTdHJpbmcKK2VuZAorCisvKgorKgorKiBDYWxsZWQgb25jZSBhbmQgb25seSBvbmNlIHRvIGluc2VydCB0aGUgcGFyYW1ldGVycyBpbnRvIHdvcmtpbmcgbWVtb3J5IGZvciB0aGlzIENsb3NlZCBMb29wIHBvbGljeS4KKyogKENvbW1lbnQgU0VUVVAgcnVsZSBvdXQgZm9yIHRoZSBmaXJzdCBFQ09NUCBvcGVuc291cmNlIHJlbGVhc2Ugc2luY2UgcG9saWN5IEJSTVNfR1cgYWxyZWFkeSBwdXRzIGEgUGFyYW1zIGZhY3QgaW4gdGhlcmUpCisqCisqCisqcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5TRVRVUCIKKyoJd2hlbgorKgl0aGVuCisqCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgU0VUVVAgaXMgdHJpZ2dlcmVkLiIpOworKgkJUGFyYW1zIHBhcmFtcyA9IG5ldyBQYXJhbXMoKTsKKyoJCXBhcmFtcy5zZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIpOworKgkJcGFyYW1zLnNldEFjdG9yKCJBUFBDIik7CisqCQlwYXJhbXMuc2V0QWFpVVJMKCJudWxsIik7CisqCQlwYXJhbXMuc2V0QWFpVXNlcm5hbWUoIm51bGwiKTsKKyoJCXBhcmFtcy5zZXRBYWlQYXNzd29yZCgibnVsbCIpOworKgkJcGFyYW1zLnNldE1zb1VSTCgibnVsbCIpOworKgkJcGFyYW1zLnNldE1zb1VzZXJuYW1lKCJudWxsIik7CisqCQlwYXJhbXMuc2V0TXNvUGFzc3dvcmQoIm51bGwiKTsKKyoJCXBhcmFtcy5zZXRBYWlOYW1lZFF1ZXJ5VVVJRCgibnVsbCIpOworKgkJcGFyYW1zLnNldEFhaVBhdHRlcm5NYXRjaCgxKTsKKyoJCXBhcmFtcy5zZXROb3RpZmljYXRpb25Ub3BpYygiUE9MSUNZLUNMLU1HVCIpOworKgkJcGFyYW1zLnNldEFwcGNUb3BpYygiQVBQQy1DTCIpOworKgkJLy8KKyoJCS8vIFRoaXMgc3RheXMgaW4gbWVtb3J5IGFzIGxvbmcgYXMgdGhlIHJ1bGUgaXMgYWxpdmUgYW5kIHJ1bm5pbmcKKyoJCS8vCisqCQlpbnNlcnQocGFyYW1zKTsKKyplbmQKKyovCisvKgorKgorKiBUaGlzIHJ1bGUgcmVzcG9uZHMgdG8gRENBRSBFdmVudHMKKyoKKyovCitydWxlICJCUk1TUGFyYW12RldEZW1vUG9saWN5LkVWRU5UIgorCXdoZW4KKyAgICAgICAgJHBhcmFtcyA6IFBhcmFtcyggZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCkgPT0gIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIgKQorICAgICAgICAkZXZlbnQgOiBWaXJ0dWFsQ29udHJvbExvb3BFdmVudCggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksIGNsb3NlZExvb3BFdmVudFN0YXR1cyA9PSBDb250cm9sTG9vcEV2ZW50U3RhdHVzLk9OU0VUICkKKyAgICAgICAgbm90ICggRXZlbnRNYW5hZ2VyKCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJGV2ZW50LmNsb3NlZExvb3BDb250cm9sTmFtZSApKQorCXRoZW4KKwkJU3lzdGVtLm91dC5wcmludGxuKCJydWxlIEVWRU5UIGlzIHRyaWdnZXJlZC4iKTsKKwkJdHJ5IHsKKwkJCS8vIAorCQkJLy8gQ2hlY2sgdGhlIHJlcXVlc3RJRCBpbiB0aGUgZXZlbnQgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBudWxsIGJlZm9yZSB3ZSBjcmVhdGUgdGhlIEV2ZW50TWFuYWdlci4gCisJCQkvLyBUaGUgRXZlbnRNYW5hZ2VyIHdpbGwgZG8gZXh0cmEgc3ludGF4IGNoZWNraW5nIGFzIHdlbGwgY2hlY2sgaWYgdGhlIGNsb3NlZCBsb29wIGlzIGRpc2FibGVkLworCQkJLy8KKwkJCWlmICgkZXZlbnQucmVxdWVzdElEID09IG51bGwpIHsKKwkJCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuUkVKRUNURUQ7CisJCQkJbm90aWZpY2F0aW9uLmZyb20gPSAicG9saWN5IjsKKwkJCQlub3RpZmljYXRpb24ubWVzc2FnZSA9ICJNaXNzaW5nIHJlcXVlc3RJRCBmcm9tIERDQUUgZXZlbnQiOworCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCQkJLy8KKwkJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCQkvLworCQkJCXRyeSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQkJLy8KKwkJCQkvLyBSZXRyYWN0IGl0IGZyb20gbWVtb3J5CisJCQkJLy8KKwkJCQlyZXRyYWN0KCRldmVudCk7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJFdmVudCB3aXRoIHJlcXVlc3RJRD1udWxsIGhhcyBiZWVuIHJldHJhY3RlZC4iKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8KKwkJCQkvLyBDcmVhdGUgYW4gRXZlbnRNYW5hZ2VyCisJCQkJLy8KKwkJCQlFdmVudE1hbmFnZXIgbWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIoJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgJGV2ZW50LnJlcXVlc3RJRCwgJGV2ZW50LnRhcmdldCk7CisJCQkJLy8KKwkJCQkvLyBEZXRlcm1pbmUgaWYgRXZlbnRNYW5hZ2VyIGNhbiBhY3RpdmVseSBwcm9jZXNzIHRoZSBldmVudCAoaS5lLiBzeW50YXgpCisJCQkJLy8KKwkJCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbWFuYWdlci5hY3RpdmF0ZSgkZXZlbnQpOworCQkJCW5vdGlmaWNhdGlvbi5mcm9tID0gInBvbGljeSI7IAorCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCQkJLy8KKwkJCQkvLyBBcmUgd2UgYWN0aXZlbHkgcHVyc3VpbmcgdGhpcyBldmVudD8KKwkJCQkvLworCQkJCWlmIChub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID09IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5BQ1RJVkUpIHsKKwkJCQkJLy8KKwkJCQkJLy8gSW5zZXJ0IEV2ZW50IE1hbmFnZXIgaW50byBtZW1vcnksIHRoaXMgd2lsbCBub3cga2ljayBvZmYgcHJvY2Vzc2luZy4KKwkJCQkJLy8KKwkJCQkJaW5zZXJ0KG1hbmFnZXIpOworCQkJCQkvLworCQkJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCQkJLy8KKwkJCQkJdHJ5IHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJCX0JCQorCQkJCX0gZWxzZSB7CisJCQkJCS8vCisJCQkJCS8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworCQkJCQkvLworCQkJCQl0cnkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQkJfQorCQkJCQkvLworCQkJCQkvLyBSZXRyYWN0IGl0IGZyb20gbWVtb3J5CisJCQkJCS8vCisJCQkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCQl9CisJCQkJLy8KKwkJCQkvLyBOb3cgdGhhdCB0aGUgbWFuYWdlciBpcyBpbnNlcnRlZCBpbnRvIERyb29scyB3b3JraW5nIG1lbW9yeSwgd2UnbGwgd2FpdCBmb3IKKwkJCQkvLyBhbm90aGVyIHJ1bGUgdG8gZmlyZSBpbiBvcmRlciB0byBjb250aW51ZSBwcm9jZXNzaW5nLiBUaGlzIHdheSB3ZSBjYW4gYWxzbworCQkJCS8vIHRoZW4gc2NyZWVuIGZvciBhZGRpdGlvbmFsIE9OU0VUIGFuZCBBQkFURUQgZXZlbnRzIGZvciB0aGlzIHNhbWUgUmVxdWVzdElEcyAKKwkJCQkvLyBhbmQgZm9yIGRpZmZlcmVudCBSZXF1ZXN0SURzIGJ1dCB3aXRoIHRoZSBzYW1lIGNsb3NlZExvb3BDb250cm9sTmFtZSBhbmQgdGFyZ2V0LgorCQkJCS8vCisJCQl9CisJCS8vCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24oJGV2ZW50KTsKKwkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuUkVKRUNURUQ7CisJCQlub3RpZmljYXRpb24ubWVzc2FnZSA9ICJFeGNlcHRpb24gb2NjdXJyZWQgIiArIGUuZ2V0TWVzc2FnZSgpOworCQkJbm90aWZpY2F0aW9uLnBvbGljeU5hbWUgPSBkcm9vbHMuZ2V0UnVsZSgpLmdldE5hbWUoKTsKKwkJCW5vdGlmaWNhdGlvbi5wb2xpY3lTY29wZSA9ICJjb20iOworCQkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCQkvLworCQkJLy8KKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCQkvLworCQkJLy8gUmV0cmFjdCB0aGUgZXZlbnQKKwkJCS8vCisJCQlyZXRyYWN0KCRldmVudCk7CisJCX0KK2VuZAorCisvKgorKgorKiBUaGlzIHJ1bGUgaGFwcGVucyB3aGVuIHdlIGdvdCBhIHZhbGlkIE9OU0VULCBjbG9zZWQgbG9vcCBpcyBlbmFibGVkIGFuZCBhbiBFdmVudCBNYW5hZ2VyCisqIGlzIGNyZWF0ZWQuIFdlIGNhbiBzdGFydCB0aGUgb3BlcmF0aW9ucyBmb3IgdGhpcyBjbG9zZWQgbG9vcC4KKyoKKyovCitydWxlICJCUk1TUGFyYW12RldEZW1vUG9saWN5LkVWRU5ULk1BTkFHRVIiCisJd2hlbgorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisJCSRldmVudCA6IFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKQorCQkkbWFuYWdlciA6IEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUsIGNvbnRyb2xMb29wUmVzdWx0ID09IG51bGwpCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgRVZFTlQuTUFOQUdFUiBpcyB0cmlnZ2VyZWQuIik7CisJCS8vCisJCS8vIENoZWNrIHdoaWNoIGV2ZW50IHRoaXMgaXMuCisJCS8vCisJCUV2ZW50TWFuYWdlci5ORVdfRVZFTlRfU1RBVFVTIGV2ZW50U3RhdHVzID0gJG1hbmFnZXIub25OZXdFdmVudCgkZXZlbnQpOworCQkvLworCQkvLyBXZSBvbmx5IHdhbnQgdGhlIGluaXRpYWwgT05TRVQgZXZlbnQgaW4gbWVtb3J5LAorCQkvLyBhbGwgdGhlIG90aGVyIGV2ZW50cyBuZWVkIHRvIGJlIHJldHJhY3RlZCB0byBzdXBwb3J0CisJCS8vIGNsZWFudXAgYW5kIGF2b2lkIHRoZSBvdGhlciBydWxlcyBiZWluZyBmaXJlZCBmb3IgdGhpcyBldmVudC4KKwkJLy8KKwkJaWYgKGV2ZW50U3RhdHVzICE9IEV2ZW50TWFuYWdlci5ORVdfRVZFTlRfU1RBVFVTLkZJUlNUX09OU0VUKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHJhY3RpbmcgIitldmVudFN0YXR1cysiIEV2ZW50LiIpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0dXJuOworCQl9CisJCS8vCisJCS8vIE5vdyB0aGUgZXZlbnQgaW4gbWVtb3J5IGlzIGZpcnN0IG9uc2V0IGV2ZW50CisJCS8vCisJCXRyeSB7CisJCQkvLworCQkJLy8gUHVsbCB0aGUga25vd24gQUFJIGZpZWxkIGZyb20gdGhlIEV2ZW50CisJCQkvLworCQkJLy8gZ2VuZXJpYy12bmYgaXMgbmVlZGVkIGZvciB2RmlyZXdhbGwgY2FzZQorCQkJLy8gdnNlcnZlci1uYW1lIGlzIG5lZWRlZCBmb3IgdkxvYWRCYWxhbmNlciBjYXNlCisJCQkvLworCQkJU3RyaW5nIGdlbmVyaWNWTkYgPSAkZXZlbnQuQUFJLmdldCgiZ2VuZXJpYy12bmYudm5mLWlkIik7CisJCQlTdHJpbmcgdnNlcnZlciA9ICRldmVudC5BQUkuZ2V0KCJ2c2VydmVyLnZzZXJ2ZXItbmFtZSIpOworCQkJLy8KKwkJCS8vIENoZWNrIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgYSBzaW1wbGUgcGF0dGVybiBtYXRjaC4KKwkJCS8vCisJCQlpZiAoJHBhcmFtcy5nZXRBYWlQYXR0ZXJuTWF0Y2goKSA9PSAxKSB7CisJCQkJLy8KKwkJCQkvLyBZZXMKKwkJCQkvLworCQkJCS8vQmFzaWMgbmFtaW5nIGNoYXJhY3RlcmlzdGljczoKKwkJCQkvL1ZGIE5hbWUgKDkgY2hhcikrVk0gbmFtZSAoMTMgY2hhciB0b3RhbCkrVkZDICgxOSBjaGFyIHRvdGFsKQorCQkJCS8vRXhhbXBsZTogCisJCQkJLy9WRiBOYW1lICg5IGNoYXJhY3RlcnMpOiAgICBjc2NmMDAwMXYKKwkJCQkvL1ZNIE5hbWUoMTMgY2hhcmFjdGVycyk6IGNzY2YwMDAxdm0wMDEKKwkJCQkvL1ZGQyBuYW1lKDE5IGNoYXJhY3RlcnMpOiBjc2NmMDAwMXZtMDAxY2ZnMDAxCisJCQkJLy8KKwkJCQkvLyB6ZGZ3MWZ3bDAxZndsMDIgb3IgemRmdzFmd2wwMWZ3bDAxICAKKwkJCQkvLyByZXBsYWNlZCB3aXRoCisJCQkJLy8gemRmdzFmd2wwMXBnbjAyIG9yIHpkZncxZndsMDFwZ24wMQorCQkJCS8vCisJCQkJaW50IGluZGV4ID0gZ2VuZXJpY1ZORi5sYXN0SW5kZXhPZigiZndsIik7CisJCQkJaWYgKGluZGV4ID09IC0xKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVGhlIGdlbmVyaWMtdm5mLnZuZi1pZCBmcm9tIERDQUUgRXZlbnQgaXMgbm90IHZhbGlkLiIpOworCQkJCX0gZWxzZSB7CisJCQkJCWdlbmVyaWNWTkYgPSBnZW5lcmljVk5GLnN1YnN0cmluZygwLCBpbmRleCkgKyAicGduIiArIGdlbmVyaWNWTkYuc3Vic3RyaW5nKGluZGV4KyJmd2wiLmxlbmd0aCgpKTsKKwkJCQl9CisJCQkJLy8KKwkJCQkvLyBDb25zdHJ1Y3QgYW4gQVBQQyByZXF1ZXN0CisJCQkJLy8KKwkJCQlDb250cm9sTG9vcE9wZXJhdGlvbiBvcGVyYXRpb24gPSBuZXcgQ29udHJvbExvb3BPcGVyYXRpb24oKTsKKwkJCQlvcGVyYXRpb24uYWN0b3IgPSAkcGFyYW1zLmdldEFjdG9yKCk7CisJCQkJb3BlcmF0aW9uLm9wZXJhdGlvbiA9ICJNb2RpZnlDb25maWciOworCQkJCW9wZXJhdGlvbi50YXJnZXQgPSAkZXZlbnQudGFyZ2V0OworCQkJCS8vCisJCQkJLy8gQ3JlYXRlIG9wZXJhdGlvbldyYXBwZXIKKwkJCQkvLworCQkJCUNvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlciBvcGVyYXRpb25XcmFwcGVyID0gbmV3IENvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlcigkZXZlbnQucmVxdWVzdElELCBvcGVyYXRpb24pOworCQkJCS8vCisJCQkJLy8gaW5zZXJ0IG9wZXJhdGlvbldyYXBwZXIgaW50byBtZW1vcnkKKwkJCQkvLworCQkJCWluc2VydChvcGVyYXRpb25XcmFwcGVyKTsKKwkJCQkvLworCQkJCVJlcXVlc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KCk7CisJCQkJcmVxdWVzdC5Db21tb25IZWFkZXIgPSBuZXcgQ29tbW9uSGVhZGVyKCk7CisJCQkJcmVxdWVzdC5Db21tb25IZWFkZXIuUmVxdWVzdElEID0gJGV2ZW50LnJlcXVlc3RJRDsKKwkJCQlyZXF1ZXN0LkFjdGlvbiA9IG9wZXJhdGlvbi5vcGVyYXRpb247CisJCQkJcmVxdWVzdC5QYXlsb2FkID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCk7CisJCQkJLy8KKwkJCQkvLyBGaWxsIGluIHRoZSBwYXlsb2FkCisJCQkJLy8KKwkJCQlyZXF1ZXN0LlBheWxvYWQucHV0KCJnZW5lcmljLXZuZi52bmYtaWQiLCBnZW5lcmljVk5GKTsKKwkJCQkvLworCQkJCVBHUmVxdWVzdCBwZ1JlcXVlc3QgPSBuZXcgUEdSZXF1ZXN0KCk7CisJCQkJcGdSZXF1ZXN0LnBnU3RyZWFtcyA9IG5ldyBQR1N0cmVhbXMoKTsKKwkJCQkKKwkJCQlQR1N0cmVhbSBwZ1N0cmVhbTsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgNTsgaSsrKXsKKwkJCQkJcGdTdHJlYW0gPSBuZXcgUEdTdHJlYW0oKTsKKwkJCQkJcGdTdHJlYW0uc3RyZWFtSWQgPSAiZndfdWRwIisoaSsxKTsKKwkJCQkJcGdTdHJlYW0uaXNFbmFibGVkID0gInRydWUiOworCQkJCQlwZ1JlcXVlc3QucGdTdHJlYW1zLnBnU3RyZWFtLmFkZChwZ1N0cmVhbSk7CisJCQkJfQorCQkJCXJlcXVlc3QuUGF5bG9hZC5wdXQoInBnLXN0cmVhbXMiLCBwZ1JlcXVlc3QucGdTdHJlYW1zKTsKKwkJCQkKKwkJCQlpZiAocmVxdWVzdCAhPSBudWxsKSB7CisJCQkJCS8vCisJCQkJCS8vIEluc2VydCByZXF1ZXN0IGludG8gbWVtb3J5CisJCQkJCS8vCisJCQkJCWluc2VydChyZXF1ZXN0KTsKKwkJCQkJLy8KKwkJCQkJLy8gVGVsbCBpbnRlcmVzdGVkIHBhcnRpZXMgd2UgYXJlIHBlcmZvcm1pbmcgdGhpcyBPcGVyYXRpb24KKwkJCQkJLy8KKwkJCQkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24oJGV2ZW50KTsKKwkJCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT047CisJCQkJCS8vIG1lc3NhZ2UgYW5kIGhpc3RvcnkgPz8KKwkJCQkJbm90aWZpY2F0aW9uLmZyb20gPSAicG9saWN5IjsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeU5hbWUgPSBkcm9vbHMuZ2V0UnVsZSgpLmdldE5hbWUoKTsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJCQl0cnkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJfQorCQkJCQkvLworCQkJCQkvLyBOb3cgc2VuZCB0aGUgb3BlcmF0aW9uIHJlcXVlc3QKKwkJCQkJLy8KKwkJCQkJaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7CisJCQkJCQl0cnkgeworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQVBQQyByZXF1ZXN0IHNlbnQ6Iik7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24ocmVxdWVzdCkpOworCQkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXRBcHBjVG9waWMoKSwgcmVxdWVzdCk7CisJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIHJlcXVlc3Q6ICIgKyByZXF1ZXN0KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8vCisJCQkJCS8vIHdoYXQgaGFwcGVucyBpZiBpdCBpcyBudWxsCisJCQkJCS8vCisJCQkJfQorCQkJCS8vCisJCQl9IGVsc2UgeworCQkJCS8vCisJCQkJLy8gY3JlYXRlIEFBSSBuYW1lZC1xdWVyeSByZXF1ZXN0IHdpdGggVVVJRCBzdGFydGVkIHdpdGggIkYxOTkiCisJCQkJLy8KKwkJCQlBQUlOUUYxOTlSZXF1ZXN0IGFhaW5xZjE5OXJlcXVlc3QgPSBuZXcgQUFJTlFGMTk5UmVxdWVzdCgpOworCQkJCUFBSU5RRjE5OVF1ZXJ5UGFyYW1ldGVycyBhYWlucWYxOTlxdWVyeXBhcmFtID0gbmV3IEFBSU5RRjE5OVF1ZXJ5UGFyYW1ldGVycygpOworCQkJCUFBSU5RRjE5OU5hbWVkUXVlcnkgYWFpbnFmMTk5bmFtZWRxdWVyeSA9IG5ldyBBQUlOUUYxOTlOYW1lZFF1ZXJ5KCk7CisJCQkJQUFJTlFGMTk5SW5zdGFuY2VGaWx0ZXJzIGFhaW5xZjE5OWluc3RhbmNlZmlsdGVyID0gbmV3IEFBSU5RRjE5OUluc3RhbmNlRmlsdGVycygpOworCQkJCS8vCisJCQkJLy8gcXVlcnlQYXJhbWV0ZXJzCisJCQkJLy8KKwkJCQlhYWlucWYxOTluYW1lZHF1ZXJ5Lm5hbWVkUXVlcnlVVUlEID0gVVVJRC5mcm9tU3RyaW5nKCRwYXJhbXMuZ2V0QWFpTmFtZWRRdWVyeVVVSUQoKSk7IAorCQkJCWFhaW5xZjE5OXF1ZXJ5cGFyYW0ubmFtZWRRdWVyeSA9IGFhaW5xZjE5OW5hbWVkcXVlcnk7CisJCQkJYWFpbnFmMTk5cmVxdWVzdC5xdWVyeVBhcmFtZXRlcnMgPSBhYWlucWYxOTlxdWVyeXBhcmFtOworCQkJCS8vCisJCQkJLy8gaW5zdGFuY2VGaWx0ZXJzCisJCQkJLy8KKwkJCQlNYXAgYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXJtYXAgPSBuZXcgSGFzaE1hcCgpOworCQkJCU1hcCBhYWlucWYxOTlpbnN0YW5jZWZpbHRlcm1hcGl0ZW0gPSBuZXcgSGFzaE1hcCgpOworCQkJCWFhaW5xZjE5OWluc3RhbmNlZmlsdGVybWFwaXRlbS5wdXQoInZzZXJ2ZXItbmFtZSIsIHZzZXJ2ZXIpOyAKKwkJCQlhYWlucWYxOTlpbnN0YW5jZWZpbHRlcm1hcC5wdXQoInZzZXJ2ZXIiLCBhYWlucWYxOTlpbnN0YW5jZWZpbHRlcm1hcGl0ZW0pOworCQkJCWFhaW5xZjE5OWluc3RhbmNlZmlsdGVyLmluc3RhbmNlRmlsdGVyLmFkZChhYWlucWYxOTlpbnN0YW5jZWZpbHRlcm1hcCk7CisJCQkJYWFpbnFmMTk5cmVxdWVzdC5pbnN0YW5jZUZpbHRlcnMgPSBhYWlucWYxOTlpbnN0YW5jZWZpbHRlcjsKKwkJCQkvLworCQkJCS8vIHByaW50IGFhaW5xZjE5OXJlcXVlc3QgZm9yIGRlYnVnCisJCQkJLy8KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFBSSBSZXF1ZXN0IHNlbnQ6Iik7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24oYWFpbnFmMTk5cmVxdWVzdCkpOworCQkJCS8vCisJCQkJLy8gQ3JlYXRlIEFBSU5RRjE5OVJlcXVlc3RXcmFwcGVyCisJCQkJLy8KKwkJCQlBQUlOUUYxOTlSZXF1ZXN0V3JhcHBlciBhYWlucWYxOTlSZXF1ZXN0V3JhcHBlciA9IG5ldyBBQUlOUUYxOTlSZXF1ZXN0V3JhcHBlcigkZXZlbnQucmVxdWVzdElELCBhYWlucWYxOTlyZXF1ZXN0KTsKKwkJCQkvLworCQkJCS8vIGluc2VydCBhYWlucWYxOTlyZXF1ZXN0IGludG8gbWVtb3J5CisJCQkJLy8KKwkJCQlpbnNlcnQoYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIpOworCQkJfQorCQkJLy8KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJIGUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KK2VuZAorCisvKgorKgorKiBUaGlzIHJ1bGUgaGFwcGVucyB3aGVuIHdlIGdvdCBhIHZhbGlkIE9OU0VULCBjbG9zZWQgbG9vcCBpcyBlbmFibGVkLCBhbiBFdmVudCBNYW5hZ2VyCisqIGlzIGNyZWF0ZWQsIEFBSSBNYW5hZ2VyIGFuZCBBQUkgUmVxdWVzdCBhcmUgcmVhZHkgaW4gbWVtb3J5LiBXZSBjYW4gc3RhcnQgc2VuZGluZyBxdWVyeSB0byBBQUkgYW5kIHRoZW4gd2FpdCBmb3IgcmVzcG9uc2UuCisqCisqLworcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5FVkVOVC5NQU5BR0VSLkFBSU5RRjE5OVJFUVVFU1QiCisJd2hlbgorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisJCSRldmVudCA6IFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKQorCQkkbWFuYWdlciA6IEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUgKQorCQkkYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIgOiBBQUlOUUYxOTlSZXF1ZXN0V3JhcHBlcihyZXF1ZXN0SUQgPT0gJGV2ZW50LnJlcXVlc3RJRCkKKwl0aGVuCisJCVN5c3RlbS5vdXQucHJpbnRsbigicnVsZSBFVkVOVC5NQU5BR0VSLkFBSU5RRjE5OVJFUVVFU1QgaXMgdHJpZ2dlcmVkLiIpOworCQkvLworCQkvLyBzZW5kIHRoZSByZXF1ZXN0CisJCS8vCisJCUFBSU5RRjE5OVJlc3BvbnNlIGFhaW5xZjE5OXJlc3BvbnNlID0gQUFJTlFGMTk5TWFuYWdlci5wb3N0UXVlcnkoJHBhcmFtcy5nZXRBYWlVUkwoKSwgJHBhcmFtcy5nZXRBYWlVc2VybmFtZSgpLCAkcGFyYW1zLmdldEFhaVBhc3N3b3JkKCksCisJCQkJCQkJCQkJCQkJICAgJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyLmFhaW5xZjE5OXJlcXVlc3QsICRldmVudC5yZXF1ZXN0SUQpOworCQkvLworCQkvLyBDaGVjayBBQUkgcmVzcG9uc2UKKwkJLy8KKwkJaWYgKGFhaW5xZjE5OXJlc3BvbnNlID09IG51bGwpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRmFpbGVkIHRvIGdldCBBQUkgcmVzcG9uc2UiKTsKKwkJCS8vCisJCQkvLyBGYWlsIGFuZCByZXRyYWN0IGV2ZXJ5dGhpbmcKKwkJCS8vCisJCQlyZXRyYWN0KCRldmVudCk7CisJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJCXJldHJhY3QoJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyKTsKKwkJfSBlbHNlIHsKKwkJCS8vCisJCQkvLyBDcmVhdGUgQUFJTlFGMTk5UmVzcG9uc2VXcmFwcGVyCisJCQkvLworCQkJQUFJTlFGMTk5UmVzcG9uc2VXcmFwcGVyIGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlciA9IG5ldyBBQUlOUUYxOTlSZXNwb25zZVdyYXBwZXIoJGV2ZW50LnJlcXVlc3RJRCwgYWFpbnFmMTk5cmVzcG9uc2UpOworCQkJLy8KKwkJCS8vIGluc2VydCBhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIgdG8gbWVtZW9yeQorCQkJLy8KKwkJCWluc2VydChhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIpOworCQl9CitlbmQKKworLyoKKyoKKyogVGhpcyBydWxlIGhhcHBlbnMgd2hlbiB3ZSBnb3QgYSB2YWxpZCBBQUkgcmVzcG9uc2UuIFdlIGNhbiBzdGFydCBzZW5kaW5nIHJlcXVlc3QgdG8gQVBQQyBvciBNU08gbm93LgorKgorKi8KK3J1bGUgIkJSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuRVZFTlQuTUFOQUdFUi5BQUlOUUYxOTlSRVNQT05TRSIKKwl3aGVuIAorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisJCSRldmVudCA6IFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKQorCQkkbWFuYWdlciA6IEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUgKQorCQkkYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIgOiBBQUlOUUYxOTlSZXF1ZXN0V3JhcHBlcihyZXF1ZXN0SUQgPT0gJGV2ZW50LnJlcXVlc3RJRCkKKwkJJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlciA6IEFBSU5RRjE5OVJlc3BvbnNlV3JhcHBlcihyZXF1ZXN0SUQgPT0gJGV2ZW50LnJlcXVlc3RJRCkKKwl0aGVuCisJCVN5c3RlbS5vdXQucHJpbnRsbigicnVsZSBFVkVOVC5NQU5BR0VSLkFBSU5RRjE5OVJFU1BPTlNFIGlzIHRyaWdnZXJlZC4iKTsKKwkJLy8KKwkJLy8gRXh0cmFjdCByZWxhdGVkIGZpZWxkcyBvdXQgb2YgQUFJTlFGMTk5UkVTUE9OU0UKKwkJLy8KKwkJU3RyaW5nIHZuZkl0ZW1WbmZJZCwgdm5mSXRlbVZuZlR5cGUsIHZuZkl0ZW1QZXJzb25hTW9kZWxJZCwgdm5mSXRlbVBlcnNvbmFNb2RlbFZlcnNpb24sIHZuZkl0ZW1Nb2RlbE5hbWUsIAorCQkgICAgICAgdm5mSXRlbU1vZGVsVmVyc2lvbiwgdm5mSXRlbU1vZGVsTmFtZVZlcnNpb25JZCwgc2VydmljZUl0ZW1TZXJ2aWNlSW5zdGFuY2VJZCwgc2VydmljZUl0ZW1QZXJzb25hTW9kZWxJZCwKKwkJICAgICAgIHNlcnZpY2VJdGVtTW9kZWxOYW1lLCBzZXJ2aWNlSXRlbU1vZGVsVHlwZSwgc2VydmljZUl0ZW1Nb2RlbFZlcnNpb24sIHNlcnZpY2VJdGVtTW9kZWxOYW1lVmVyc2lvbklkLAorCQkgICAgICAgdmZNb2R1bGVJdGVtVmZNb2R1bGVOYW1lLCB2Zk1vZHVsZUl0ZW1QZXJzb25hTW9kZWxJZCwgdmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsVmVyc2lvbiwgdmZNb2R1bGVJdGVtTW9kZWxOYW1lLCAKKwkJICAgICAgIHZmTW9kdWxlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCwgdGVuYW50SXRlbVRlbmFudElkLCBjbG91ZFJlZ2lvbkl0ZW1DbG91ZFJlZ2lvbklkOworCQl0cnkgeworCQkJLy8KKwkJCS8vIHZuZkl0ZW0KKwkJCS8vCisJCQl2bmZJdGVtVm5mSWQgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmdlbmVyaWNWTkYudm5mSUQ7CisJCQl2bmZJdGVtVm5mVHlwZSA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZ2VuZXJpY1ZORi52bmZUeXBlOworCQkJdm5mSXRlbVZuZlR5cGUgPSB2bmZJdGVtVm5mVHlwZS5zdWJzdHJpbmcodm5mSXRlbVZuZlR5cGUubGFzdEluZGV4T2YoIi8iKSsxKTsKKwkJCXZuZkl0ZW1QZXJzb25hTW9kZWxJZCA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZ2VuZXJpY1ZORi5wZXJzb25hTW9kZWxJZDsKKwkJCXZuZkl0ZW1QZXJzb25hTW9kZWxWZXJzaW9uID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5nZW5lcmljVk5GLnBlcnNvbmFNb2RlbFZlcnNpb247CisJCQl2bmZJdGVtTW9kZWxOYW1lID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5leHRyYVByb3BlcnRpZXMuZXh0cmFQcm9wZXJ0eS5nZXQoMCkucHJvcGVydHlWYWx1ZTsKKwkJCXZuZkl0ZW1Nb2RlbFZlcnNpb24gPSAJCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDIpLnByb3BlcnR5VmFsdWU7CisJCQl2bmZJdGVtTW9kZWxOYW1lVmVyc2lvbklkID0gCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDQpLnByb3BlcnR5VmFsdWU7CisJCQkvLworCQkJLy8gc2VydmljZUl0ZW0KKwkJCS8vCisJCQlzZXJ2aWNlSXRlbVNlcnZpY2VJbnN0YW5jZUlkID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5zZXJ2aWNlSW5zdGFuY2Uuc2VydmljZUluc3RhbmNlSUQ7CisJCQlzZXJ2aWNlSXRlbVBlcnNvbmFNb2RlbElkID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5zZXJ2aWNlSW5zdGFuY2UucGVyc29uYU1vZGVsSWQ7CisJCQlzZXJ2aWNlSXRlbU1vZGVsTmFtZSA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDApLnByb3BlcnR5VmFsdWU7CisJCQlzZXJ2aWNlSXRlbU1vZGVsVHlwZSA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDEpLnByb3BlcnR5VmFsdWU7CisJCQlzZXJ2aWNlSXRlbU1vZGVsVmVyc2lvbiA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuc2VydmljZUluc3RhbmNlLnBlcnNvbmFNb2RlbFZlcnNpb247CisJCQlzZXJ2aWNlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDQpLnByb3BlcnR5VmFsdWU7CisJCQkvLworCQkJLy8gRmluZCB0aGUgaW5kZXggZm9yIGJhc2UgdmYgbW9kdWxlIGFuZCBub24tYmFzZSB2ZiBtb2R1bGUKKwkJCS8vCisJCQlpbnQgYmFzZUluZGV4ID0gLTE7CisJCQlpbnQgbm9uQmFzZUluZGV4ID0gLTE7CisJCQlMaXN0PEFBSU5RRjE5OUludmVudG9yeVJlc3BvbnNlSXRlbT4gaW52ZW50b3J5SXRlbXMgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXM7CisJCQlmb3IgKEFBSU5RRjE5OUludmVudG9yeVJlc3BvbnNlSXRlbSBtIDogaW52ZW50b3J5SXRlbXMpIHsKKwkJCQlpZiAobS52Zk1vZHVsZSAhPSBudWxsICYmIG0udmZNb2R1bGUuaXNCYXNlVmZNb2R1bGUgPT0gdHJ1ZSkgeworCQkJCQliYXNlSW5kZXggPSBpbnZlbnRvcnlJdGVtcy5pbmRleE9mKG0pOworCQkJCX0gZWxzZSBpZiAobS52Zk1vZHVsZSAhPSBudWxsICYmIG0udmZNb2R1bGUuaXNCYXNlVmZNb2R1bGUgPT0gZmFsc2UgJiYgbS52Zk1vZHVsZS5vcmNoZXN0cmF0aW9uU3RhdHVzID09IG51bGwpIHsKKwkJCQkJbm9uQmFzZUluZGV4ID0gaW52ZW50b3J5SXRlbXMuaW5kZXhPZihtKTsKKwkJCQl9CisJCQkJLy8KKwkJCQlpZiAoYmFzZUluZGV4ICE9IC0xICYmIG5vbkJhc2VJbmRleCAhPSAtMSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQkvLworCQkJLy8gUmVwb3J0IHRoZSBlcnJvciBpZiBlaXRoZXIgYmFzZSB2ZiBtb2R1bGUgb3Igbm9uLWJhc2UgdmYgbW9kdWxlIGlzIG5vdCBmb3VuZAorCQkJLy8KKwkJCWlmIChiYXNlSW5kZXggPT0gLTEgfHwgbm9uQmFzZUluZGV4ID09IC0xKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFaXRoZXIgYmFzZSBvciBub24tYmFzZSB2ZiBtb2R1bGUgaXMgbm90IGZvdW5kIGZyb20gQUFJIHJlc3BvbnNlLiIpOworCQkJCXJldHJhY3QoJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyKTsKKwkJCQlyZXRyYWN0KCRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIpOworCQkJCXJldHJhY3QoJG1hbmFnZXIpOworCQkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkvLworCQkJLy8gVGhpcyBjb21lcyBmcm9tIHRoZSBiYXNlIG1vZHVsZQorCQkJLy8KKwkJCXZmTW9kdWxlSXRlbVZmTW9kdWxlTmFtZSA9IAkJCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoYmFzZUluZGV4KS52Zk1vZHVsZS52Zk1vZHVsZU5hbWU7CisJCQl2Zk1vZHVsZUl0ZW1WZk1vZHVsZU5hbWUgPSB2Zk1vZHVsZUl0ZW1WZk1vZHVsZU5hbWUucmVwbGFjZSgiVmZtb2R1bGUiLCAidkROUyIpOworCQkJLy8KKwkJCS8vIHZmTW9kdWxlSXRlbSAtIE5PVCB0aGUgYmFzZSBtb2R1bGUKKwkJCS8vCisJCQl2Zk1vZHVsZUl0ZW1QZXJzb25hTW9kZWxJZCA9IAkJJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldChub25CYXNlSW5kZXgpLnZmTW9kdWxlLnBlcnNvbmFNb2RlbElkOworCQkJdmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsVmVyc2lvbiA9IAkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KG5vbkJhc2VJbmRleCkudmZNb2R1bGUucGVyc29uYU1vZGVsVmVyc2lvbjsKKwkJCXZmTW9kdWxlSXRlbU1vZGVsTmFtZSA9IAkJCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQobm9uQmFzZUluZGV4KS5leHRyYVByb3BlcnRpZXMuZXh0cmFQcm9wZXJ0eS5nZXQoMCkucHJvcGVydHlWYWx1ZTsKKwkJCXZmTW9kdWxlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9IAkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KG5vbkJhc2VJbmRleCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDQpLnByb3BlcnR5VmFsdWU7CisJCQkvLworCQkJLy8gdGVuYW50SXRlbQorCQkJLy8KKwkJCXRlbmFudEl0ZW1UZW5hbnRJZCA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMSkudGVuYW50LnRlbmFudElkOworCQkJLy8KKwkJCS8vIGNsb3VkUmVnaW9uSXRlbQorCQkJLy8KKwkJCWNsb3VkUmVnaW9uSXRlbUNsb3VkUmVnaW9uSWQgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDEpLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmNsb3VkUmVnaW9uLmNsb3VkUmVnaW9uSWQ7CisJCQkvLworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCVZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uKCRldmVudCk7CisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLlJFSkVDVEVEOworCQkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSAiRXhjZXB0aW9uIG9jY3VycmVkICIgKyBlLmdldE1lc3NhZ2UoKTsKKwkJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJLy8KKwkJCXRyeSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCS8vCisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLkZJTkFMX0ZBSUxVUkU7CisJCQlub3RpZmljYXRpb24ubWVzc2FnZSA9ICJJbnZhbGlkIG5hbWVkLXF1ZXJ5IHJlc3BvbnNlIGZyb20gQUFJIjsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworICAgICAgICAgICAgICAgIFBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgZTEucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisJCQkvLworCQkJLy8gUmV0cmFjdCBldmVyeXRoaW5nCisJCQkvLworCQkJcmV0cmFjdCgkYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIpOworCQkJcmV0cmFjdCgkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyKTsKKwkJCXJldHJhY3QoJG1hbmFnZXIpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0dXJuOworCQl9CQorCQkvLworCQkvLyBFeHRyYWN0ZWQgZmllbGRzIHNob3VsZCBub3QgYmUgbnVsbAorCQkvLworCQlpZiAoKHZuZkl0ZW1WbmZJZCA9PSBudWxsKSB8fCAodm5mSXRlbVZuZlR5cGUgPT0gbnVsbCkgfHwKKwkJICAgICh2bmZJdGVtUGVyc29uYU1vZGVsSWQgPT0gbnVsbCkgfHwgKHZuZkl0ZW1Nb2RlbE5hbWUgPT0gbnVsbCkgfHwKKwkJICAgICh2bmZJdGVtTW9kZWxWZXJzaW9uID09IG51bGwpIHx8ICh2bmZJdGVtTW9kZWxOYW1lVmVyc2lvbklkID09IG51bGwpIHx8CisJCSAgICAoc2VydmljZUl0ZW1TZXJ2aWNlSW5zdGFuY2VJZCA9PSBudWxsKSB8fCAoc2VydmljZUl0ZW1Nb2RlbE5hbWUgPT0gbnVsbCkgfHwKKwkJICAgIChzZXJ2aWNlSXRlbU1vZGVsVHlwZSA9PSBudWxsKSB8fCAoc2VydmljZUl0ZW1Nb2RlbFZlcnNpb24gPT0gbnVsbCkgfHwKKwkJICAgIChzZXJ2aWNlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9PSBudWxsKSB8fCAodmZNb2R1bGVJdGVtVmZNb2R1bGVOYW1lID09IG51bGwpIHx8CisJCSAgICAodmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsSWQgPT0gbnVsbCkgfHwgKHZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbFZlcnNpb24gPT0gbnVsbCkgfHwKKwkJICAgICh2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWUgPT0gbnVsbCkgfHwgKHZmTW9kdWxlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9PSBudWxsKSB8fAorCQkgICAgKHRlbmFudEl0ZW1UZW5hbnRJZCA9PSBudWxsKSB8fCAoY2xvdWRSZWdpb25JdGVtQ2xvdWRSZWdpb25JZCA9PSBudWxsKSkgeworCQkJLy8KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigic29tZSBmaWVsZHMgYXJlIG1pc3NpbmcgZnJvbSBBQUkgcmVzcG9uc2UuIik7CisJCQkvLworCQkJLy8gRmFpbCBhbmQgcmV0cmFjdCBldmVyeXRoaW5nCisJCQkvLworCQkJcmV0cmFjdCgkYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIpOworCQkJcmV0cmFjdCgkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyKTsKKwkJCXJldHJhY3QoJG1hbmFnZXIpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0dXJuOworCQl9CisJCS8vCisJCS8vIFdlIGRvbid0IG5lZWQgdGhlbSBhbnkgbW9yZQorCQkvLworCQlyZXRyYWN0KCRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIpOworCQlyZXRyYWN0KCRhYWlucWYxOTlSZXF1ZXN0V3JhcHBlcik7ICAKKwkJLy8KKwkJLy8gY2hlY2sgdGhlIGFjdG9yIG9mIHRoaXMgY2xvc2VkIGxvb3AKKwkJLy8KKwkJc3dpdGNoICgkcGFyYW1zLmdldEFjdG9yKCkpIHsKKwkJCWNhc2UgIkFQUEMiOgorCQkJeworCQkJCS8vCisJCQkJLy8gQ29uc3RydWN0IGFuIEFQUEMgcmVxdWVzdAorCQkJCS8vCisJCQkJQ29udHJvbExvb3BPcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IENvbnRyb2xMb29wT3BlcmF0aW9uKCk7CisJCQkJb3BlcmF0aW9uLmFjdG9yID0gJHBhcmFtcy5nZXRBY3RvcigpOworCQkJCW9wZXJhdGlvbi5vcGVyYXRpb24gPSAiTW9kaWZ5Q29uZmlnIjsKKwkJCQlvcGVyYXRpb24udGFyZ2V0ID0gJGV2ZW50LnRhcmdldDsKKwkJCQkvLworCQkJCS8vIENyZWF0ZSBvcGVyYXRpb25XcmFwcGVyCisJCQkJLy8KKwkJCQlDb250cm9sTG9vcE9wZXJhdGlvbldyYXBwZXIgb3BlcmF0aW9uV3JhcHBlciA9IG5ldyBDb250cm9sTG9vcE9wZXJhdGlvbldyYXBwZXIoJGV2ZW50LnJlcXVlc3RJRCwgb3BlcmF0aW9uKTsKKwkJCQkvLworCQkJCS8vIGluc2VydCBvcGVyYXRpb25XcmFwcGVyIGludG8gbWVtb3J5CisJCQkJLy8KKwkJCQlpbnNlcnQob3BlcmF0aW9uV3JhcHBlcik7CisJCQkJLy8KKwkJCQlSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgpOworCQkJCXJlcXVlc3QuQ29tbW9uSGVhZGVyID0gbmV3IENvbW1vbkhlYWRlcigpOworCQkJCXJlcXVlc3QuQ29tbW9uSGVhZGVyLlJlcXVlc3RJRCA9ICRldmVudC5yZXF1ZXN0SUQ7CisJCQkJcmVxdWVzdC5BY3Rpb24gPSBvcGVyYXRpb24ub3BlcmF0aW9uOworCQkJCXJlcXVlc3QuUGF5bG9hZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpOworCQkJCS8vCisJCQkJLy8gRmlsbCBpbiB0aGUgcGF5bG9hZAorCQkJCS8vIEhhcmRjb2RlIGdlbmVyaWNWTkYgZm9yIG5vdyBzaW5jZSBBQUkgaGFzIG5vdCBiZWVuIHJlYWR5IGZvciB2RmlyZXdhbGwgZGVtbyBjYXNlCisJCQkJLy8KKwkJCQlTdHJpbmcgZ2VuZXJpY1ZORiA9ICJ6ZGZ3MWZ3bDAxcGduMDIiOworCQkJCXJlcXVlc3QuUGF5bG9hZC5wdXQoImdlbmVyaWMtdm5mLnZuZi1pZCIsIGdlbmVyaWNWTkYpOworCQkJCS8vCisJCQkJUEdSZXF1ZXN0IHBnUmVxdWVzdCA9IG5ldyBQR1JlcXVlc3QoKTsKKwkJCQlwZ1JlcXVlc3QucGdTdHJlYW1zID0gbmV3IFBHU3RyZWFtcygpOworCQkJCQorCQkJCVBHU3RyZWFtIHBnU3RyZWFtOworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCA1OyBpKyspeworCQkJCQlwZ1N0cmVhbSA9IG5ldyBQR1N0cmVhbSgpOworCQkJCQlwZ1N0cmVhbS5zdHJlYW1JZCA9ICJmd191ZHAiKyhpKzEpOworCQkJCQlwZ1N0cmVhbS5pc0VuYWJsZWQgPSAidHJ1ZSI7CisJCQkJCXBnUmVxdWVzdC5wZ1N0cmVhbXMucGdTdHJlYW0uYWRkKHBnU3RyZWFtKTsKKwkJCQl9CisJCQkJcmVxdWVzdC5QYXlsb2FkLnB1dCgicGctc3RyZWFtcyIsIHBnUmVxdWVzdC5wZ1N0cmVhbXMpOworCQkJCQorCQkJCWlmIChyZXF1ZXN0ICE9IG51bGwpIHsKKwkJCQkJLy8KKwkJCQkJLy8gSW5zZXJ0IHJlcXVlc3QgaW50byBtZW1vcnkKKwkJCQkJLy8KKwkJCQkJaW5zZXJ0KHJlcXVlc3QpOworCQkJCQkvLworCQkJCQkvLyBUZWxsIGludGVyZXN0ZWQgcGFydGllcyB3ZSBhcmUgcGVyZm9ybWluZyB0aGlzIE9wZXJhdGlvbgorCQkJCQkvLworCQkJCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQkJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLk9QRVJBVElPTjsKKwkJCQkJLy8gbWVzc2FnZSBhbmQgaGlzdG9yeSA/PworCQkJCQlub3RpZmljYXRpb24uZnJvbSA9ICJwb2xpY3kiOworCQkJCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQkJCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCQkJCXRyeSB7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQl9CisJCQkJCS8vCisJCQkJCS8vIE5vdyBzZW5kIHRoZSBvcGVyYXRpb24gcmVxdWVzdAorCQkJCQkvLworCQkJCQlpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJBUFBDIHJlcXVlc3Qgc2VudDoiKTsKKwkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihyZXF1ZXN0KSk7CisJCQkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldEFwcGNUb3BpYygpLCByZXF1ZXN0KTsKKwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgcmVxdWVzdDogIiArIHJlcXVlc3QpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8KKwkJCQkJLy8gd2hhdCBoYXBwZW5zIGlmIGl0IGlzIG51bGwKKwkJCQkJLy8KKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJCWNhc2UgIk1TTyI6CisJCQl7CisJCQkJLy8KKwkJCQkvLyBDb25zdHJ1Y3QgYW4gb3BlcmF0aW9uCisJCQkJLy8KKwkJCQlDb250cm9sTG9vcE9wZXJhdGlvbiBvcGVyYXRpb24gPSBuZXcgQ29udHJvbExvb3BPcGVyYXRpb24oKTsKKwkJCQlvcGVyYXRpb24uYWN0b3IgPSAkcGFyYW1zLmdldEFjdG9yKCk7CisJCQkJb3BlcmF0aW9uLm9wZXJhdGlvbiA9ICJjcmVhdGVNb2R1bGVJbnN0YW5jZSI7CisJCQkJb3BlcmF0aW9uLnRhcmdldCA9ICRldmVudC50YXJnZXQ7CisJCQkJLy8KKwkJCQkvLyBDcmVhdGUgb3BlcmF0aW9uV3JhcHBlcgorCQkJCS8vCisJCQkJQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyIG9wZXJhdGlvbldyYXBwZXIgPSBuZXcgQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyKCRldmVudC5yZXF1ZXN0SUQsIG9wZXJhdGlvbik7CisJCQkJLy8KKwkJCQkvLyBDb25zdHJ1Y3QgYW4gTVNPIHJlcXVlc3QKKwkJCQkvLworCQkJCU1TT1JlcXVlc3QgcmVxdWVzdCA9IG5ldyBNU09SZXF1ZXN0KCk7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscyA9IG5ldyBNU09SZXF1ZXN0RGV0YWlscygpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMubW9kZWxJbmZvID0gbmV3IE1TT01vZGVsSW5mbygpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMuY2xvdWRDb25maWd1cmF0aW9uID0gbmV3IE1TT0Nsb3VkQ29uZmlndXJhdGlvbigpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMucmVxdWVzdEluZm8gPSBuZXcgTVNPUmVxdWVzdEluZm8oKTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlcXVlc3RQYXJhbWV0ZXJzID0gbmV3IE1TT1JlcXVlc3RQYXJhbWV0ZXJzKCk7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5yZXF1ZXN0UGFyYW1ldGVycy51c2VyUGFyYW1zID0gbnVsbDsKKwkJCQkvLworCQkJCS8vIGNsb3VkQ29uZmlndXJhdGlvbgorCQkJCS8vCisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5jbG91ZENvbmZpZ3VyYXRpb24ubGNwQ2xvdWRSZWdpb25JZCA9IGNsb3VkUmVnaW9uSXRlbUNsb3VkUmVnaW9uSWQ7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5jbG91ZENvbmZpZ3VyYXRpb24udGVuYW50SWQgPSB0ZW5hbnRJdGVtVGVuYW50SWQ7CisJCQkJLy8KKwkJCQkvLyBtb2RlbEluZm8KKwkJCQkvLworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMubW9kZWxJbmZvLm1vZGVsVHlwZSA9ICJ2Zk1vZHVsZSI7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5tb2RlbEluZm8ubW9kZWxJbnZhcmlhbnRJZCA9IHZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbElkOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMubW9kZWxJbmZvLm1vZGVsTmFtZVZlcnNpb25JZCA9IHZmTW9kdWxlSXRlbU1vZGVsTmFtZVZlcnNpb25JZDsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLm1vZGVsSW5mby5tb2RlbE5hbWUgPSB2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWU7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5tb2RlbEluZm8ubW9kZWxWZXJzaW9uID0gdmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsVmVyc2lvbjsKKwkJCQkvLworCQkJCS8vIHJlcXVlc3RJbmZvCisJCQkJLy8KKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlcXVlc3RJbmZvLmluc3RhbmNlTmFtZSA9IHZmTW9kdWxlSXRlbVZmTW9kdWxlTmFtZTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlcXVlc3RJbmZvLnNvdXJjZSA9ICJQT0xJQ1kiOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMucmVxdWVzdEluZm8uc3VwcHJlc3NSb2xsYmFjayA9IGZhbHNlOworCQkJCS8vCisJCQkJLy8gcmVsYXRlZEluc3RhbmNlTGlzdAorCQkJCS8vCisJCQkJTVNPUmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQgcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxID0gbmV3IE1TT1JlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50KCk7CisJCQkJTVNPUmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQgcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyID0gbmV3IE1TT1JlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50KCk7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZSA9IG5ldyBNU09SZWxhdGVkSW5zdGFuY2UoKTsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDIucmVsYXRlZEluc3RhbmNlID0gbmV3IE1TT1JlbGF0ZWRJbnN0YW5jZSgpOworCQkJCS8vCisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5pbnN0YW5jZUlkID0gc2VydmljZUl0ZW1TZXJ2aWNlSW5zdGFuY2VJZDsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDEucmVsYXRlZEluc3RhbmNlLm1vZGVsSW5mbyA9IG5ldyBNU09Nb2RlbEluZm8oKTsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDEucmVsYXRlZEluc3RhbmNlLm1vZGVsSW5mby5tb2RlbFR5cGUgPSAic2VydmljZSI7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxJbnZhcmlhbnRJZCA9IHNlcnZpY2VJdGVtUGVyc29uYU1vZGVsSWQ7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxOYW1lVmVyc2lvbklkID0gc2VydmljZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQ7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxOYW1lID0gc2VydmljZUl0ZW1Nb2RlbE5hbWU7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxWZXJzaW9uID0gc2VydmljZUl0ZW1Nb2RlbFZlcnNpb247CisJCQkJLy8KKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDIucmVsYXRlZEluc3RhbmNlLmluc3RhbmNlSWQgPSB2bmZJdGVtVm5mSWQ7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8gPSBuZXcgTVNPTW9kZWxJbmZvKCk7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxUeXBlID0gInZuZiI7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxJbnZhcmlhbnRJZCA9IHZuZkl0ZW1QZXJzb25hTW9kZWxJZDsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDIucmVsYXRlZEluc3RhbmNlLm1vZGVsSW5mby5tb2RlbE5hbWVWZXJzaW9uSWQgPSB2bmZJdGVtTW9kZWxOYW1lVmVyc2lvbklkOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mi5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsTmFtZSA9IHZuZkl0ZW1Nb2RlbE5hbWU7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxWZXJzaW9uID0gdm5mSXRlbU1vZGVsVmVyc2lvbjsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDIucmVsYXRlZEluc3RhbmNlLm1vZGVsSW5mby5tb2RlbEN1c3RvbWl6YXRpb25OYW1lID0gdm5mSXRlbVZuZlR5cGU7CisJCQkJLy8JCisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5yZWxhdGVkSW5zdGFuY2VMaXN0LmFkZChyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDEpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMucmVsYXRlZEluc3RhbmNlTGlzdC5hZGQocmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyKTsKKwkJCQkvLworCQkJCS8vIHByaW50IE1TTyByZXF1ZXN0IGZvciBkZWJ1ZworCQkJCS8vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJNU08gcmVxdWVzdCBzZW50OiIpOworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKHJlcXVlc3QpKTsKKwkJCQkvLworCQkJCS8vCisJCQkJLy8KKwkJCQlpZiAocmVxdWVzdCAhPSBudWxsKSB7CisJCQkJCS8vCisJCQkJCS8vIFRlbGwgaW50ZXJlc3RlZCBwYXJ0aWVzIHdlIGFyZSBwZXJmb3JtaW5nIHRoaXMgT3BlcmF0aW9uCisJCQkJCS8vCisJCQkJCVZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uKCRldmVudCk7CisJCQkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuT1BFUkFUSU9OOworCQkJCQlub3RpZmljYXRpb24uZnJvbSA9ICJwb2xpY3kiOworCQkJCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQkJCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCQkJCXRyeSB7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQl9CisJCQkJCS8vCisJCQkJCS8vIENvbmNhdGVuYXRlIHNlcnZpY2VJdGVtU2VydmljZUluc3RhbmNlSWQgYW5kIHZuZkl0ZW1WbmZJZCB0byBtc29VUkwKKwkJCQkJLy8KKwkJCQkJU3RyaW5nIE1TT1VybCA9ICRwYXJhbXMuZ2V0TXNvVVJMKCkgKyAiL3NlcnZpY2VJbnN0YW5jZXMvdjIvIiArIHNlcnZpY2VJdGVtU2VydmljZUluc3RhbmNlSWQgKyAiL3ZuZnMvIiArIHZuZkl0ZW1WbmZJZCArICIvdmZNb2R1bGVzIjsKKwkJCQkJLy8KKwkJCQkJLy8gQ2FsbCBNU08KKwkJCQkJLy8KKwkJCQkJTVNPUmVzcG9uc2UgcmVzcG9uc2UgPSBNU09NYW5hZ2VyLmNyZWF0ZU1vZHVsZUluc3RhbmNlKE1TT1VybCwgJHBhcmFtcy5nZXRNc29VUkwoKSwgJHBhcmFtcy5nZXRNc29Vc2VybmFtZSgpLCAkcGFyYW1zLmdldE1zb1Bhc3N3b3JkKCksIHJlcXVlc3QpOworCQkJCQkvLworCQkJCQlpZiAocmVzcG9uc2UgIT0gbnVsbCkgeworCQkJCQkJLy8KKwkJCQkJCS8vIEFzc2lnbiByZXF1ZXN0SWQKKwkJCQkJCS8vCisJCQkJCQlyZXF1ZXN0LnJlcXVlc3RJZCA9ICRldmVudC5yZXF1ZXN0SUQudG9TdHJpbmcoKTsJCQkJCQkKKwkJCQkJCXJlc3BvbnNlLnJlcXVlc3QucmVxdWVzdElkID0gJGV2ZW50LnJlcXVlc3RJRC50b1N0cmluZygpOworCQkJCQkJLy8KKwkJCQkJCS8vIEluc2VydCBmYWN0cworCQkJCQkJLy8KKwkJCQkJCWluc2VydChvcGVyYXRpb25XcmFwcGVyKTsKKwkJCQkJCWluc2VydChyZXF1ZXN0KTsKKwkJCQkJCWluc2VydChyZXNwb25zZSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLworCQkJCQkJLy8gTVNPIHJlcXVlc3Qgbm90IGV2ZW4gYWNjZXB0ZWQKKwkJCQkJCS8vCisJCQkJCQlub3RpZmljYXRpb24ubWVzc2FnZSA9IG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLnRvTWVzc2FnZSgpOworCQkJCQkJb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ubWVzc2FnZSA9IG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLnRvTWVzc2FnZSgpOworCQkJCQkJb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJGQUlMVVJFX0VYQ0VQVElPTiI7CisJCQkJCQkkbWFuYWdlci5zZXRDb250cm9sTG9vcFJlc3VsdCgiRkFJTFVSRV9FWENFUFRJT04iKTsKKwkJCQkJCW5vdGlmaWNhdGlvbi5oaXN0b3J5LmFkZChvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbik7CisJCQkJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLk9QRVJBVElPTl9GQUlMVVJFOworCQkJCQkJLy8KKwkJCQkJCS8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworCQkJCQkJLy8KKwkJCQkJCXRyeSB7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQl9CisJICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLkZJTkFMX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCQkJLy8KKwkJCQkJCS8vIFJldHJhY3QgZXZlcnl0aGluZworCQkJCQkJLy8KKwkJCQkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCQkJCXJldHJhY3QoJG1hbmFnZXIpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJjb25zdHJ1Y3RlZCBNU08gcmVxdWVzdCBpcyBpbnZhbGlkLiIpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOyAKKwkJfSAKK2VuZAorCQkKKy8qCisqCisqIFRoaXMgcnVsZSByZXNwb25kcyB0byBBUFBDIFJlc3BvbnNlIEV2ZW50cworKgorKi8KK3J1bGUgIkJSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuQVBQQy5SRVNQT05TRSIKKwl3aGVuCisJCSRwYXJhbXMgOiBQYXJhbXMoIGdldENsb3NlZExvb3BDb250cm9sTmFtZSgpID09ICJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiICkKKwkJJGV2ZW50IDogVmlydHVhbENvbnRyb2xMb29wRXZlbnQoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkcGFyYW1zLmdldENsb3NlZExvb3BDb250cm9sTmFtZSgpLCBjbG9zZWRMb29wRXZlbnRTdGF0dXMgPT0gQ29udHJvbExvb3BFdmVudFN0YXR1cy5PTlNFVCApCisJCSRtYW5hZ2VyIDogRXZlbnRNYW5hZ2VyKCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJGV2ZW50LmNsb3NlZExvb3BDb250cm9sTmFtZSApCisJCSRvcGVyYXRpb25XcmFwcGVyIDogQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyKCByZXF1ZXN0SUQgPT0gJGV2ZW50LnJlcXVlc3RJRCApCisJCSRyZXF1ZXN0IDogUmVxdWVzdCggZ2V0Q29tbW9uSGVhZGVyKCkuUmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQgKQorCQkkcmVzcG9uc2UgOiBSZXNwb25zZSggZ2V0Q29tbW9uSGVhZGVyKCkuUmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQgKQkKKwl0aGVuCisJCVN5c3RlbS5vdXQucHJpbnRsbigicnVsZSBBUFBDLlJFU1BPTlNFIGlzIHRyaWdnZXJlZC4iKTsKKwkJaWYgKCRyZXNwb25zZS5TdGF0dXMgPT0gbnVsbCkgeworCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiRkFJTFVSRV9FWENFUFRJT04iOworCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkVfRVhDRVBUSU9OIik7CisJCX0gCisJCS8vCisJCS8vIEdldCB0aGUgUmVzcG9uc2UgQ29kZQorCQkvLworCQlSZXNwb25zZUNvZGUgY29kZSA9IFJlc3BvbnNlQ29kZS50b1Jlc3BvbnNlQ29kZSgkcmVzcG9uc2UuU3RhdHVzLkNvZGUpOworCQlpZiAoY29kZSA9PSBudWxsKSB7CisJCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJGQUlMVVJFX0VYQ0VQVElPTiI7CisJCQkkbWFuYWdlci5zZXRDb250cm9sTG9vcFJlc3VsdCgiRkFJTFVSRV9FWENFUFRJT04iKTsKKwkJfQorCQkvLworCQkvLyBDb25zdHJ1Y3Qgbm90aWZpY2F0aW9uCisJCS8vCisJCVZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uKCRldmVudCk7CisJCW5vdGlmaWNhdGlvbi5mcm9tID0gInBvbGljeSI7CisJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCW5vdGlmaWNhdGlvbi5wb2xpY3lTY29wZSA9ICJjb20iOworCQlub3RpZmljYXRpb24ucG9saWN5VmVyc2lvbiA9ICIxIjsKKwkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSAkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24udG9NZXNzYWdlKCk7CisJCSRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5tZXNzYWdlID0gJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLnRvTWVzc2FnZSgpOworCQkvLworCQkvLyBPaywgbGV0J3MgZmlndXJlIG91dCB3aGF0IEFQUC1DJ3MgcmVzcG9uc2UgaXMKKwkJLy8KKwkJc3dpdGNoIChjb2RlKSB7CisJCQljYXNlIEFDQ0VQVDoKKwkJCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJQUk9DRVNTSU5HIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgRVJST1I6CisJCQljYXNlIFJFSkVDVDoKKwkJCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJGQUlMVVJFX0VYQ0VQVElPTiI7CisJCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkVfRVhDRVBUSU9OIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNVQ0NFU1M6CisJCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiU1VDQ0VTUyI7CisJCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIlNVQ0NFU1MiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRkFJTFVSRToKKwkJCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJGQUlMVVJFIjsKKwkJCQkkbWFuYWdlci5zZXRDb250cm9sTG9vcFJlc3VsdCgiRkFJTFVSRSIpOworCQkJCWJyZWFrOworCQl9CisJCWlmICgkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZS5lcXVhbHMoIlNVQ0NFU1MiKSkgeworCQkJbm90aWZpY2F0aW9uLmhpc3RvcnkuYWRkKCRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbik7CisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLk9QRVJBVElPTl9TVUNDRVNTOworCQkJLy8KKwkJCS8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworCQkJLy8KKwkJCXRyeSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisgICAgICAgICAgICBub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLkZJTkFMX1NVQ0NFU1M7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworICAgICAgICAgICAgCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorCisJCQkvLworCQkJLy8gV2UgYXJlIGdvaW5nIHRvIHJldHJhY3QgdGhlc2Ugb2JqZWN0cyBmcm9tIG1lbW9yeQorCQkJLy8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0cmFjdGluZyBldmVyeXRoaW5nIik7CisJCQlyZXRyYWN0KCRvcGVyYXRpb25XcmFwcGVyKTsKKwkJCXJldHJhY3QoJHJlcXVlc3QpOworCQkJcmV0cmFjdCgkcmVzcG9uc2UpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0cmFjdCgkbWFuYWdlcik7CisJCX0gZWxzZSBpZiAoJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUuZXF1YWxzKCJQUk9DRVNTSU5HIikpIHsKKwkJCXJldHJhY3QoJHJlc3BvbnNlKTsKKwkJfSBlbHNlIHsKKwkJCW5vdGlmaWNhdGlvbi5oaXN0b3J5LmFkZCgkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24pOworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT05fRkFJTFVSRTsKKwkJCS8vCisJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorICAgICAgICAgICAgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9GQUlMVVJFOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisgICAgICAgICAgICAJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisJCQkvLworCQkJLy8gV2UgYXJlIGdvaW5nIHRvIHJldHJhY3QgdGhlc2Ugb2JqZWN0cyBmcm9tIG1lbW9yeQorCQkJLy8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0cmFjdGluZyBldmVyeXRoaW5nIik7CisJCQlyZXRyYWN0KCRvcGVyYXRpb25XcmFwcGVyKTsKKwkJCXJldHJhY3QoJHJlcXVlc3QpOworCQkJcmV0cmFjdCgkcmVzcG9uc2UpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0cmFjdCgkbWFuYWdlcik7CisJCX0KKwkJCitlbmQJCQorCisvKgorKgorKiBUaGlzIHJ1bGUgaXMgdXNlZCB0byBjbGVhbiB1cCBBUFBDIHJlc3BvbnNlCisqCisqLwkJCitydWxlICJCUk1TUGFyYW12RldEZW1vUG9saWN5LkFQUEMuUkVTUE9OU0UuQ0xFQU5VUCIKKwl3aGVuCisJCSRwYXJhbXMgOiBQYXJhbXMoIGdldENsb3NlZExvb3BDb250cm9sTmFtZSgpID09ICJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiICkKKyAgICAgICAgJHJlc3BvbnNlIDogUmVzcG9uc2UoJGlkIDogZ2V0Q29tbW9uSGVhZGVyKCkuUmVxdWVzdElEICkKKwkJbm90ICggVmlydHVhbENvbnRyb2xMb29wRXZlbnQoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkcGFyYW1zLmdldENsb3NlZExvb3BDb250cm9sTmFtZSgpLCByZXF1ZXN0SUQgPT0gJGlkLCBjbG9zZWRMb29wRXZlbnRTdGF0dXMgPT0gQ29udHJvbExvb3BFdmVudFN0YXR1cy5PTlNFVCApICkgCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgQVBQQy5SRVNQT05TRS5DTEVBTlVQIGlzIHRyaWdnZXJlZC4iKTsKKwkJcmV0cmFjdCgkcmVzcG9uc2UpOworZW5kCisKKy8qCisqCisqIFRoaXMgcnVsZSByZXNwb25kcyB0byBNU08gUmVzcG9uc2UgRXZlbnRzCisqCisqLworcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5NU08uUkVTUE9OU0UiCisJd2hlbgorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisJCSRldmVudCA6IFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKQorCQkkbWFuYWdlciA6IEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUgKQorCQkkb3BlcmF0aW9uV3JhcHBlciA6IENvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlciggcmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQgKQorCQkkcmVxdWVzdCA6IE1TT1JlcXVlc3QoIHJlcXVlc3RJZCA9PSAkZXZlbnQucmVxdWVzdElELnRvU3RyaW5nKCkgKQorCQkkcmVzcG9uc2UgOiBNU09SZXNwb25zZSggcmVxdWVzdC5yZXF1ZXN0SWQgPT0gJGV2ZW50LnJlcXVlc3RJRC50b1N0cmluZygpICkJCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgTVNPLlJFU1BPTlNFIGlzIHRyaWdnZXJlZC4iKTsKKwkJLy8KKwkJLy8gQ29uc3RydWN0IG5vdGlmaWNhdGlvbgorCQkvLworCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQlub3RpZmljYXRpb24uZnJvbSA9ICJwb2xpY3kiOworCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCW5vdGlmaWNhdGlvbi5tZXNzYWdlID0gJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLnRvTWVzc2FnZSgpOworCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ubWVzc2FnZSA9ICRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi50b01lc3NhZ2UoKTsKKwkJLy8KKwkJLy8gVGhlIG9wZXJhdGlvbiBjYW4gZWl0aGVyIGJlIHN1Y2NlZWRlZCBvciBmYWlsZWQKKwkJLy8gCisJCWlmKCRyZXNwb25zZS5yZXF1ZXN0LnJlcXVlc3RTdGF0dXMucmVxdWVzdFN0YXRlLmVxdWFscygiQ09NUExFVEUiKSkgeworCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiU1VDQ0VTUyI7CisJCQkkbWFuYWdlci5zZXRDb250cm9sTG9vcFJlc3VsdCgiU1VDQ0VTUyIpOworCQkJbm90aWZpY2F0aW9uLmhpc3RvcnkuYWRkKCRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbik7CisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLk9QRVJBVElPTl9TVUNDRVNTOworCQkJLy8KKwkJCS8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworCQkJLy8KKwkJCXRyeSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLkZJTkFMX1NVQ0NFU1M7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTGV0IGludGVyZXN0ZWQgcGFydGllcyBrbm93CisgICAgICAgICAgICAvLworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKyAgICAgICAgICAgIAlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vCisJCQkvLyBXZSBhcmUgZ29pbmcgdG8gcmV0cmFjdCB0aGVzZSBvYmplY3RzIGZyb20gbWVtb3J5CisJCQkvLworCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZXRyYWN0aW5nIGV2ZXJ5dGhpbmciKTsKKwkJCXJldHJhY3QoJG9wZXJhdGlvbldyYXBwZXIpOworCQkJcmV0cmFjdCgkcmVxdWVzdCk7CisJCQlyZXRyYWN0KCRyZXNwb25zZSk7CisJCQlyZXRyYWN0KCRldmVudCk7CisJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJfSBlbHNlIHsKKwkJCSRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5vdXRjb21lID0gIkZBSUxVUkUiOworCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkUiKTsKKwkJCW5vdGlmaWNhdGlvbi5oaXN0b3J5LmFkZCgkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24pOworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT05fRkFJTFVSRTsKKwkJCS8vCisJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9GQUlMVVJFOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisgICAgICAgICAgICAJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLworCQkJLy8gV2UgYXJlIGdvaW5nIHRvIHJldHJhY3QgdGhlc2Ugb2JqZWN0cyBmcm9tIG1lbW9yeQorCQkJLy8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0cmFjdGluZyBldmVyeXRoaW5nIik7CisJCQlyZXRyYWN0KCRvcGVyYXRpb25XcmFwcGVyKTsKKwkJCXJldHJhY3QoJHJlcXVlc3QpOworCQkJcmV0cmFjdCgkcmVzcG9uc2UpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0cmFjdCgkbWFuYWdlcik7CisJCX0KKwkJCitlbmQJCitydWxlICJjb20uQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5QYXJhbXMiIAorCXNhbGllbmNlIDEwMDAgCisJd2hlbgorCXRoZW4KKwkJUGFyYW1zIHBhcmFtcyA9IG5ldyBQYXJhbXMoKTsKKwkJcGFyYW1zLnNldEFhaVBhdHRlcm5NYXRjaCgxKTsKKwkJcGFyYW1zLnNldEFwcGNUb3BpYygiQVBQQy1DTCIpOworCQlwYXJhbXMuc2V0QWFpVVJMKCJudWxsIik7CisJCXBhcmFtcy5zZXRNc29QYXNzd29yZCgibnVsbCIpOworCQlwYXJhbXMuc2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiKTsKKwkJcGFyYW1zLnNldE1zb1VSTCgibnVsbCIpOworCQlwYXJhbXMuc2V0QWFpVXNlcm5hbWUoIm51bGwiKTsKKwkJcGFyYW1zLnNldEFjdG9yKCJBUFBDIik7CisJCXBhcmFtcy5zZXRNc29Vc2VybmFtZSgibnVsbCIpOworCQlwYXJhbXMuc2V0QWFpTmFtZWRRdWVyeVVVSUQoIm51bGwiKTsKKwkJcGFyYW1zLnNldEFhaVBhc3N3b3JkKCJudWxsIik7CisJCXBhcmFtcy5zZXROb3RpZmljYXRpb25Ub3BpYygiUE9MSUNZLUNMLU1HVCIpOworCQlpbnNlcnQocGFyYW1zKTsKK2VuZApkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI0ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQKQEAgLTAsMCArMSwzNSBAQAorcGFja2FnZSBjb20uc2FtcGxlCitpbXBvcnQgY29tLnNhbXBsZS5Ecm9vbHNUZXN0Lk1lc3NhZ2U7CisvLyBEZWNsYXJlIHRoZSBQYXJhbWV0ZXJzIGhlcmUuCitkZWNsYXJlIFBhcmFtcworICAgIHNhbVBvbGwgOiBpbnQKKyAgICB2YWx1ZSA6IFN0cmluZworZW5kCisvLyBUaGlzIFJ1bGUgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIFVJLgorcnVsZSAiQ3JlYXRlIHBhcmFtZXRlcnMgc3RydWN0dXJlIgorICAgIHNhbGllbmNlIDEwMDAgIAorICAgIHdoZW4KKyAgICB0aGVuCisgICAgICAgIFBhcmFtcyBwYXJhbXMgPSBuZXcgUGFyYW1zKCk7CisgICAgICAgIHBhcmFtcy5zZXRTYW1Qb2xsKDc2KTsKKyAgICAgICAgcGFyYW1zLnNldFZhbHVlKCJCb2JieSIpOworICAgICAgICBpbnNlcnRMb2dpY2FsKHBhcmFtcyk7CitlbmQKKy8vIFN0YXJ0IHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGFzIGJlbG93IGluIFJ1bGVzLgorcnVsZSAiUnVsZSAxOiBDaGVjayBwYXJhbWV0ZXIgc3RydWN0dXJlIGFjY2VzcyBmcm9tIHdoZW4vdGhlbiIKKyAgICB3aGVuCisgICAgICAgICRwYXJhbTogUGFyYW1zKCkKKyAgICAgICAgUGFyYW1zKCRwYXJhbS5zYW1Qb2xsID4gNTApCisgICAgdGhlbgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcmluZyBydWxlIDEiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCRwYXJhbSk7CitlbmQKK3J1bGUgIlJ1bGUgMjogQ2hlY2sgcGFyYW1ldGVyIHZhbHVlIGFjY2VzcyBmcm9tIHdoZW4vdGhlbiIKKyAgICB3aGVuCisgICAgICAgICRwYXJhbTogUGFyYW1zKCkKKyAgICAgICAgUGFyYW1zKCRwYXJhbS5zYW1Qb2xsID4gNTApCisgICAgdGhlbgorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZpcmluZyBydWxlIDIiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCRwYXJhbS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCRwYXJhbS5nZXRTYW1Qb2xsKCkpOworZW5kCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS5qc29uIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWUxZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEuanNvbgpAQCAtMCwwICsxIEBACit7InNlcnZpY2VUeXBlSWQiOiIvdjAvZmlyZXdhbGwvcGFuIiwiY29uZmlnTmFtZSI6IlRlc3RGaXJlV2FsbFBvbGljeSIsImRlcGxveW1lbnRPcHRpb24iOnsiZGVwbG95Tm93IjpmYWxzZX0sInNlY3VyaXR5Wm9uZUlkIjoiMS41LjMiLCJ2ZW5kb3JTZXJ2aWNlSWQiOiJ2aXByIiwidmVuZG9yU3BlY2lmaWNEYXRhIjp7ImlkTWFwIjpbeyJhc3RyYUlkIjoiMS41LjMiLCJ2ZW5kb3JJZCI6ImRldmljZUdyb3VwOmRldiJ9XX0sInNlcnZpY2VHcm91cHMiOltdLCJhZGRyZXNzR3JvdXBzIjpbXSwiZmlyZXdhbGxSdWxlTGlzdCI6W3sicG9zaXRpb24iOiIxIiwicnVsZU5hbWUiOiJ0ZXN0IiwiZnJvbVpvbmVzIjpbXSwidG9ab25lcyI6W10sIm5lZ2F0ZVNvdXJjZSI6ZmFsc2UsIm5lZ2F0ZURlc3RpbmF0aW9uIjpmYWxzZSwic291cmNlTGlzdCI6W10sImRlc3RpbmF0aW9uTGlzdCI6W10sInNvdXJjZVNlcnZpY2VzIjpbXSwiZGVzdFNlcnZpY2VzIjpbXSwiYWN0aW9uIjpudWxsLCJkZXNjcmlwdGlvbiI6bnVsbCwiZW5hYmxlZCI6dHJ1ZSwibG9nIjp0cnVlfV0sInJ1bGVUb1RhZyI6W3sicnVsZU5hbWUiOiJ0ZXN0IiwidGFncyI6W3sia2V5IjoidGVzdCIsInZhbHVlIjoidGVzdCJ9XSwidGFnUGlja2VyTmFtZSI6InRlc3QiLCJuZXR3b3JrUm9sZSI6InRlc3QifV19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTI1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLmpzb24KQEAgLTAsMCArMSBAQAoreyJ0cmluaXR5IjpmYWxzZSwidlVTUCI6dHJ1ZSwibWNyIjpmYWxzZSwiZ2FtYSI6ZmFsc2UsInZETlMiOmZhbHNlLCJ2bmZUeXBlIjoiU2FtcGxlVk5GIiwidlNlcnZpY2VzIjpudWxsLCJjbG9zZWRMb29wUG9saWN5U3RhdHVzIjoiQWN0aXZlIiwidHJpZ2dlclNpZ25hdHVyZXMiOnsic2lnbmF0dXJlcyI6IigoTk9UKE5PVCgxLjAuMi4zKUFORCgxLjAuMi4zKSksIFRpbWUgPSAxMSlBTkQoKE5PVCgxLjAuMi4zKUFORCgxLjAuMi4zKSksIFRpbWUgPSAxMikpIiwidGltZVdpbmRvdyI6MTEsInRyYXBNYXhBZ2UiOjEyfSwiYWN0aW9ucyI6IlNhbXBsZVZTQ0wiLCJ0aW1lSW50ZXJ2YWwiOjExLCJ0aW1lT3V0dlBSTyI6MTEsInRpbWVPdXRSdWJ5IjoxMSwicmV0cnlzIjoxLCJhZ2luZ1dpbmRvdyI6MSwiZ2VvTGluayI6IlRFU1QiLCJlbWFpbEFkZHJlc3MiOiJhYUB0ZXN0LmNvbiIsInZlcmlmaWNhdGlvblNpZ25hdHVyZXMiOnsic2lnbmF0dXJlcyI6IihOT1QoMS4wLjIuMylBTkQoMS4wLjIuMykpIiwidGltZVdpbmRvdyI6MTJ9LCJjb25kaXRpb25zIjoiU0VORCIsInRyaWdnZXJTaWduYXR1cmVzVXNlZEZvclVJIjp7InNpZ25hdHVyZXMiOiJOT1RAIVNhbXBsZVZhcmJpbmRAIUFOREAhU2FtcGxlVmFyYmluZCMhPyFOT1RAIVNhbXBsZVZhcmJpbmRAIU9SQCFTYW1wbGVWYXJiaW5kIyFOT1RAIUExQCFBTkRAIVNhbXBsZVZhcmJpbmQjIU5PVEAhQTFAIUFOREAhQTIjIT8hIiwiY29ubmVjdFNpZ25hdHVyZXMiOiJOT1RAIVRyYXAxQCExMUAhQU5EQCFUcmFwMUAhMTIjIT8hIn0sInZlcmlmaWNhdGlvblNpZ25hdHVyZXNVc2VkRm9yVUkiOnsic2lnbmF0dXJlcyI6Ik5PVEAhU2FtcGxlVmFyYmluZEAhQU5EQCFTYW1wbGVWYXJiaW5kIyE/ISIsImNvbm5lY3RTaWduYXR1cmVzIjpudWxsfSwidHJpZ2dlclRpbWVXaW5kb3dVc2VkRm9yVUkiOjExLCJ2ZXJmaWZpY2F0aW9uVGltZVdpbmRvd1VzZWRGb3JVSSI6MTIsInBlcE5hbWUiOm51bGwsInBlcEFjdGlvbiI6bnVsbCwidGVtcGxhdGVWZXJzaW9uIjpudWxsLCJ0cmFwTWF4QWdlVXNlZEZvclVJIjoxMiwiZWNvbXBuYW1lIjpudWxsfQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfTVNfdkZpcmV3YWxsLjEuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMjhmMQotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLmpzb24KQEAgLTAsMCArMSBAQAoreyJzZXJ2aWNlIjoiVGNhTWV0cmljcyIsImxvY2F0aW9uIjoiU2FtcGxlU2VydmljZUxvY2F0aW9uIiwidXVpZCI6Ii9zZXJ2aWNlcy9jZGFwLXRjYS1oaS1sby9pbnN0YW5jZXMvZGVtby9jb25maWd1cmF0aW9uL21ldHJpY3NQZXJGdW5jdGlvbmFsUm9sZS92RmlyZXdhbGwiLCJwb2xpY3lOYW1lIjoidkZpcmV3YWxsIiwiZGVzY3JpcHRpb24iOiJNaWNybyBTZXJ2aWNlIHZGaXJld2FsbCBEZW1vIFBvbGljeUBDcmVhdGVkQnk6QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpATW9kaWZpZWRCeToiLCJjb25maWdOYW1lIjoiU2FtcGxlQ29uZmlnTmFtZSIsInRlbXBsYXRlVmVyc2lvbiI6Ik9wZW5Tb3VyY2UudmVyc2lvbi4xIiwidmVyc2lvbiI6IjEuMC4wLjUiLCJwcmlvcml0eSI6IjEiLCJwb2xpY3lTY29wZSI6InJlc291cmNlPVNhbXBsZVJlc291cmNlLHNlcnZpY2U9U2FtcGxlU2VydmljZSx0eXBlPVNhbXBsZVR5cGUsY2xvc2VkTG9vcENvbnRyb2xOYW1lPVNhbXBsZUNsb3NlZExvb3AiLCJjb250ZW50Ijp7InRocmVzaG9sZHMiOlt7InNldmVyaXR5IjoiTUFKT1IiLCJmaWVsZFBhdGgiOiIkLmV2ZW50Lm1lYXN1cmVtZW50c0ZvclZmU2NhbGluZ0ZpZWxkcy52TmljVXNhZ2VBcnJheVsqXS5wYWNrZXRzSW4iLCJ0aHJlc2hvbGRWYWx1ZSI6IjMwMCIsImNsb3NlZExvb3BDb250cm9sTmFtZSI6IkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIsInZlcnNpb24iOiIxLjAuMiIsImRpcmVjdGlvbiI6IkxFU1NfT1JfRVFVQUwifSx7InNldmVyaXR5IjoiQ1JJVElDQUwiLCJmaWVsZFBhdGgiOiIkLmV2ZW50Lm1lYXN1cmVtZW50c0ZvclZmU2NhbGluZ0ZpZWxkcy52TmljVXNhZ2VBcnJheVsqXS5wYWNrZXRzSW4iLCJ0aHJlc2hvbGRWYWx1ZSI6IjcwMCIsImNsb3NlZExvb3BDb250cm9sTmFtZSI6IkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIsInZlcnNpb24iOiIxLjAuMiIsImRpcmVjdGlvbiI6IkdSRUFURVJfT1JfRVFVQUwifV0sImZ1bmN0aW9uYWxSb2xlIjoidkZpcmV3YWxsIiwibmFtZSI6IjAifX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDU3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbgpAQCAtMCwwICsxIEBACit7InNlcnZpY2VUeXBlUG9saWN5TmFtZSI6ICJSZWdpc3RyYXRpb24gRmFpbHVyZShUcmluaXR5KSIsInZVU1AiOnRydWUsImF0dHJpYnV0ZXMiOnsiUHRpbGVMaW1pdCI6IjExIiwiVGhyZXNob2xkIjoiMTIiLCJXaW5kb3ciOiIxMyIsIlRyYWluaW5nIjoiMTQiLCJGcmFjdGlvblNhbXBsZVBlckRheSI6IjE1IiwiQ29uc2VjdXRpdmVJbnRlcnZhbE9uc2V0IjoiMTEiLCJSZXRyeVRpbWVyIjoiMTIiLCJDb25zZWN1dGl2ZUludGVydmFsQWJhdGVtZW50IjoiMTEiLCJPbnNldE1lc3NhZ2UiOiIxMSIsIkFiYXRlbWVudE1lc3NhZ2UiOiIxMiIsIlBvbGljeU5hbWUiOiIxMyJ9LCJnZW9MaW5rIjoiVEVTVCIsImVtYWlsQWRkcmVzcyI6InRlc3RAdGVzdC5jb20ifQo=