ZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL2NvbmZpZy9wb2xpY3lMb2dnZXIucHJvcGVydGllcyBiL1BPTElDWS1TREstQVBQL2NvbmZpZy9wb2xpY3lMb2dnZXIucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzBjNWVlCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvY29uZmlnL3BvbGljeUxvZ2dlci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNldCBjb25jdXJyZW50SGFzaE1hcCBhbmQgdGltZXIgaW5mbyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNUaW1lciBpbml0aWFsIGRlbGF5IGFuZCB0aGUgZGVsYXkgYmV0d2VlbiBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRhc2sgaXMgdG8gYmUgZXhlY3V0ZS4KK3RpbWVyLmRlbGF5LnRpbWU9MTAwMAorI1RpbWVyIHNjaGVkdWxlQXRGaXhlZFJhdGUgcGVyaW9kIC0gdGltZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBzdWNjZXNzaXZlIHRhc2sgZXhlY3V0aW9ucy4KK2NoZWNrLmludGVydmFsPSAzMDAwMAorI0xvbmdlc3QgdGltZSBhbiBldmVudCBpbmZvIGNhbiBiZSBzdG9yZWQgaW4gdGhlIGNvbmN1cnJlbnRIYXNoTWFwIGZvciBsb2dnaW5nIC0gaW4gc2Vjb25kcy4gCitldmVudC5leHBpcmVkLnRpbWU9ODY0MDAKKyNTaXplIG9mIHRoZSBjb25jdXJyZW50SGFzaE1hcCB3aGljaCBzdG9yZXMgdGhlIGV2ZW50IHN0YXJ0aW5nIHRpbWUsIGV0YyAtIHdoZW4gaXRzIHNpemUgcmVhY2hlcyB0aGlzIGxpbWl0LCB0aGUgVGltZXIgZ2V0cyBleGVjdXRlZCAKKyN0byByZW1vdmUgYWxsIGV4cGlyZWQgcmVjb3JkcyBmcm9tIHRoaXMgY29uY3VycmVudEhhc2hNYXAuCitjb25jdXJyZW50SGFzaE1hcC5saW1pdD01MDAwCisjU2l6ZSBvZiB0aGUgY29uY3VycmVudEhhc2hNYXAgLSB3aGVuIGl0cyBzaXplIGRyb3BzIHRvIHRoaXMgcG9pbnQsIHN0b3AgdGhlIFRpbWVyCitzdG9wLmNoZWNrLnBvaW50PTI1MDAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNldCBsb2dnaW5nIGZvcm1hdCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgc2V0IEVFTEYgZm9yIEVFTEYgbG9nZ2luZyBmb3JtYXQsIHNldCBMT0c0SiBmb3IgdXNpbmcgbG9nNGosIHNldCBTWVNURU1PVVQgZm9yIHVzaW5nIHN5c3RlbS5vdXQucHJpbnRsbgorbG9nZ2VyLnR5cGU9U1lTVEVNT1VUCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgU2V0IGxldmVsIGZvciBFRUxGIG9yIFNZU1RFTU9VVCBsb2dnaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU2V0IGxldmVsIGZvciBkZWJ1ZyBmaWxlLiBTZXQgREVCVUcgdG8gZW5hYmxlIC5pbmZvLCAud2FybiBhbmQgLmRlYnVnOyBzZXQgSU5GTyBmb3IgZW5hYmxlIC5pbmZvIGFuZCAud2Fybjsgc2V0IE9GRiB0byBkaXNhYmxlIGFsbCAKK2RlYnVnTG9nZ2VyLmxldmVsPUlORk8KKyMgU2V0IGxldmVsIGZvciBtZXRyaWNzIGZpbGUuIFNldCBPRkYgdG8gZGlzYWJsZTsgc2V0IE9OIHRvIGVuYWJsZQorbWV0cmljc0xvZ2dlci5sZXZlbD1PTgorIyBTZXQgbGV2ZWwgZm9yIGVycm9yIGZpbGUuIFNldCBPRkYgdG8gZGlzYWJsZTsgc2V0IE9OIHRvIGVuYWJsZQorZXJyb3IubGV2ZWw9T04KKyMgU2V0IGxldmVsIGZvciBhdWRpdCBmaWxlLiBTZXQgT0ZGIHRvIGRpc2FibGU7IHNldCBPTiB0byBlbmFibGUKK2F1ZGl0LmxldmVsPU9OCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0LmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0LmphdmEKaW5kZXggNjM5ZTI5ZS4uMTgyMWUxMCAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lNYW5hZ2VyU2VydmxldC5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5TWFuYWdlclNlcnZsZXQuamF2YQpAQCAtOTUsMTMgKzk1LDEzIEBACiAJCUxJU1QsIFJFTkFNRSwgQ09QWSwgREVMRVRFLCBFRElURklMRSwgQURERk9MREVSLCBERVNDUklCRVBPTElDWUZJTEUsIFZJRVdQT0xJQ1ksIEFERFNVQlNDT1BFLCBTV0lUQ0hWRVJTSU9OLCBFWFBPUlQsIFNFQVJDSExJU1QKIAl9CiAKLQlwcml2YXRlIFBvbGljeUNvbnRyb2xsZXIgcG9saWN5Q29udHJvbGxlcjsKLQlwdWJsaWMgUG9saWN5Q29udHJvbGxlciBnZXRQb2xpY3lDb250cm9sbGVyKCkgeworCXByaXZhdGUgc3RhdGljIFBvbGljeUNvbnRyb2xsZXIgcG9saWN5Q29udHJvbGxlcjsKKwlwdWJsaWMgc3luY2hyb25pemVkIFBvbGljeUNvbnRyb2xsZXIgZ2V0UG9saWN5Q29udHJvbGxlcigpIHsKIAkJcmV0dXJuIHBvbGljeUNvbnRyb2xsZXI7CiAJfQogCi0JcHVibGljIHZvaWQgc2V0UG9saWN5Q29udHJvbGxlcihQb2xpY3lDb250cm9sbGVyIHBvbGljeUNvbnRyb2xsZXIpIHsKLQkJdGhpcy5wb2xpY3lDb250cm9sbGVyID0gcG9saWN5Q29udHJvbGxlcjsKKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyB2b2lkIHNldFBvbGljeUNvbnRyb2xsZXIoUG9saWN5Q29udHJvbGxlciBwb2xpY3lDb250cm9sbGVyKSB7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0LnBvbGljeUNvbnRyb2xsZXIgPSBwb2xpY3lDb250cm9sbGVyOwogCX0KIAogCXByaXZhdGUgc3RhdGljIFN0cmluZyBDT05URU5UVFlQRSA9ICJhcHBsaWNhdGlvbi9qc29uIjsKQEAgLTExNSw3ICsxMTUsNyBAQAogCQogCXByaXZhdGUgc3RhdGljIFBhdGggY2xvc2VkTG9vcEpzb25Mb2NhdGlvbjsKIAlwcml2YXRlIHN0YXRpYyBKc29uQXJyYXkgcG9saWN5TmFtZXM7Ci0JcHJpdmF0ZSBTdHJpbmcgdGVzdFVzZXJJZCA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RVc2VySWQgPSBudWxsOwogCQogCXB1YmxpYyBzdGF0aWMgSnNvbkFycmF5IGdldFBvbGljeU5hbWVzKCkgewogCQlyZXR1cm4gcG9saWN5TmFtZXM7CkBAIC0xMjYsNyArMTI2LDYgQEAKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gc2VydmljZVR5cGVOYW1lc0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQlwcml2YXRlIExpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhOwogCiAJcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0U2VydmljZVR5cGVOYW1lc0xpc3QoKSB7CiAJCXJldHVybiBzZXJ2aWNlVHlwZU5hbWVzTGlzdDsKQEAgLTE5Miw3ICsxOTEsMTEgQEAKIAkJCQlmaWxlT3BlcmF0aW9uKHJlcXVlc3QsIHJlc3BvbnNlKTsKIAkJCX0KIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXNldEVycm9yKGUsIHJlc3BvbnNlKTsKKwkJCXRyeSB7CisJCQkJc2V0RXJyb3IoZSwgcmVzcG9uc2UpOworCQkJfWNhdGNoKEV4Y2VwdGlvbiBlMSl7CisJCQkJTE9HR0VSLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQkJfQogCQl9CiAJfQogCkBAIC0yNzAsNiArMjczLDcgQEAKIAkJCU1vZGUgbW9kZSA9IE1vZGUudmFsdWVPZihwYXJhbXMuZ2V0U3RyaW5nKCJtb2RlIikpOwogCQkJc3dpdGNoIChtb2RlKSB7CiAJCQljYXNlIEFEREZPTERFUjoKKwkJCWNhc2UgQUREU1VCU0NPUEU6CiAJCQkJcmVzcG9uc2VKc29uT2JqZWN0ID0gYWRkRm9sZGVyKHBhcmFtcywgcmVxdWVzdCk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIENPUFk6CkBAIC0yNzgsMTIgKzI4MiwxMCBAQAogCQkJY2FzZSBERUxFVEU6CiAJCQkJcmVzcG9uc2VKc29uT2JqZWN0ID0gZGVsZXRlKHBhcmFtcywgcmVxdWVzdCk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIEVESVRGSUxFOiAKKwkJCWNhc2UgRURJVEZJTEU6CisJCQljYXNlIFZJRVdQT0xJQ1k6CiAJCQkJcmVzcG9uc2VKc29uT2JqZWN0ID0gZWRpdEZpbGUocGFyYW1zKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgVklFV1BPTElDWTogCi0JCQkJcmVzcG9uc2VKc29uT2JqZWN0ID0gZWRpdEZpbGUocGFyYW1zKTsKLQkJCQlicmVhazsJCiAJCQljYXNlIExJU1Q6CiAJCQkJcmVzcG9uc2VKc29uT2JqZWN0ID0gbGlzdChwYXJhbXMsIHJlcXVlc3QpOwogCQkJCWJyZWFrOwpAQCAtMjkzLDkgKzI5NSw2IEBACiAJCQljYXNlIERFU0NSSUJFUE9MSUNZRklMRToKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBkZXNjcmliZVBvbGljeShwYXJhbXMpOwogCQkJCWJyZWFrOwotCQkJY2FzZSBBRERTVUJTQ09QRToKLQkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBhZGRGb2xkZXIocGFyYW1zLCByZXF1ZXN0KTsKLQkJCQlicmVhazsKIAkJCWNhc2UgU1dJVENIVkVSU0lPTjoKIAkJCQlyZXNwb25zZUpzb25PYmplY3QgPSBzd2l0Y2hWZXJzaW9uKHBhcmFtcywgcmVxdWVzdCk7CiAJCQkJYnJlYWs7CkBAIC0zMjEsNyArMzIwLDcgQEAKIAlwcml2YXRlIEpTT05PYmplY3Qgc2VhcmNoUG9saWN5TGlzdChKU09OT2JqZWN0IHBhcmFtcywgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKIAkJU2V0PFN0cmluZz4gc2NvcGVzID0gbnVsbDsKIAkJTGlzdDxTdHJpbmc+IHJvbGVzID0gbnVsbDsKLQkJcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOwogCQlKU09OQXJyYXkgcG9saWN5TGlzdCA9IG51bGw7CiAJCWlmKHBhcmFtcy5oYXMoInBvbGljeUxpc3QiKSl7CiAJCQlwb2xpY3lMaXN0ID0gKEpTT05BcnJheSkgcGFyYW1zLmdldCgicG9saWN5TGlzdCIpOwpAQCAtMTIzMCw3ICsxMjI5LDcgQEAKIAkJCQkJCQkJCQlwb2xpY3lFbnRpdHkgPSAoUG9saWN5RW50aXR5KSBvYmplY3Q7CiAJCQkJCQkJCQkJU3RyaW5nIHBvbGljeUVudGl0eU5hbWUgPSBwb2xpY3lFbnRpdHkuZ2V0UG9saWN5TmFtZSgpLnJlcGxhY2UoIi54bWwiLCAiIik7CiAJCQkJCQkJCQkJaW50IHBvbGljeUVudGl0eVZlcnNpb24gPSBJbnRlZ2VyLnBhcnNlSW50KHBvbGljeUVudGl0eU5hbWUuc3Vic3RyaW5nKHBvbGljeUVudGl0eU5hbWUubGFzdEluZGV4T2YoIi4iKSsxKSk7Ci0JCQkJCQkJCQkJaWYocG9saWN5RW50aXR5VmVyc2lvbiA+IGhpZ2hlc3RWZXJzaW9uKXsKKwkJCQkJCQkJCQlpZihwb2xpY3lFbnRpdHlWZXJzaW9uID4gaGlnaGVzdFZlcnNpb24gJiYgcG9saWN5RW50aXR5VmVyc2lvbiAhPSB2ZXJzaW9uKXsKIAkJCQkJCQkJCQkJaGlnaGVzdFZlcnNpb24gPSBwb2xpY3lFbnRpdHlWZXJzaW9uOwogCQkJCQkJCQkJCX0KIAkJCQkJCQkJCX0KQEAgLTE0NzIsNyArMTQ3MSw3IEBACiAJCXJldHVybiB0ZXN0VXNlcklkOwogCX0KIAotCXB1YmxpYyB2b2lkIHNldFRlc3RVc2VySWQoU3RyaW5nIHRlc3RVc2VySWQpIHsKLQkJdGhpcy50ZXN0VXNlcklkID0gdGVzdFVzZXJJZDsKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0VGVzdFVzZXJJZChTdHJpbmcgdGVzdFVzZXJJZCkgeworCQlQb2xpY3lNYW5hZ2VyU2VydmxldC50ZXN0VXNlcklkID0gdGVzdFVzZXJJZDsKIAl9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lOb3RpZmljYXRpb25NYWlsLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU5vdGlmaWNhdGlvbk1haWwuamF2YQppbmRleCA5YmQ2ZTRmLi4xYTUzNWRjIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU5vdGlmaWNhdGlvbk1haWwuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU5vdGlmaWNhdGlvbk1haWwuamF2YQpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCQkJCSArICdcbicgICsgJ1xuJyArICJNb3ZlZCBCeSA6ICIgK2VudGl0eUl0ZW0uZ2V0TW9kaWZpZWRCeSgpICsgJ1xuJyArICJNb3ZlZCBUaW1lICA6ICIgK2RhdGVGb3JtYXQuZm9ybWF0KGRhdGUpICsgJ1xuJyArICdcbicgKyAnXG4nICsgJ1xuJyArICJQb2xpY3kgTm90aWZpY2F0aW9uIFN5c3RlbSAgKHBsZWFzZSBkb24ndCByZXNwb25kIHRvIHRoaXMgZW1haWwpIjsKIAkJfQogCQlTdHJpbmcgcG9saWN5RmlsZU5hbWUgPSBlbnRpdHlJdGVtLmdldFBvbGljeU5hbWUoKTsKLQkJU3RyaW5nIGNoZWNrUG9saWN5TmFtZSA9IHBvbGljeUZpbGVOYW1lOworCQlTdHJpbmcgY2hlY2tQb2xpY3lOYW1lID0gcG9saWN5TmFtZTsKIAkJaWYocG9saWN5RmlsZU5hbWUuY29udGFpbnMoIi8iKSl7CiAJCQlwb2xpY3lGaWxlTmFtZSA9IHBvbGljeUZpbGVOYW1lLnN1YnN0cmluZygwLCBwb2xpY3lGaWxlTmFtZS5pbmRleE9mKCIvIikpOwogCQkJcG9saWN5RmlsZU5hbWUgPSBwb2xpY3lGaWxlTmFtZS5yZXBsYWNlKCIvIiwgRmlsZS5zZXBhcmF0b3IpOwpAQCAtMTE5LDQwICsxMTksNDEgQEAKIAkJU3RyaW5nIHF1ZXJ5ID0gImZyb20gV2F0Y2hQb2xpY3lOb3RpZmljYXRpb25UYWJsZSB3aGVyZSBwb2xpY3lOYW1lIGxpa2UnIiArcG9saWN5RmlsZU5hbWUrIiUnIjsKIAkJYm9vbGVhbiBzZW5kRmxhZyA9IGZhbHNlOwogCQlMaXN0PE9iamVjdD4gd2F0Y2hMaXN0ID0gcG9saWN5Tm90aWZpY2F0aW9uRGFvLmdldERhdGFCeVF1ZXJ5KHF1ZXJ5KTsKLQkJaWYod2F0Y2hMaXN0ICE9IG51bGwpewotCQkJaWYod2F0Y2hMaXN0LmlzRW1wdHkoKSl7Ci0JCQkJZm9yKE9iamVjdCB3YXRjaCA6IHdhdGNoTGlzdCl7Ci0JCQkJCVdhdGNoUG9saWN5Tm90aWZpY2F0aW9uVGFibGUgbGlzdCA9IChXYXRjaFBvbGljeU5vdGlmaWNhdGlvblRhYmxlKSB3YXRjaDsKLQkJCQkJU3RyaW5nIHdhdGNoUG9saWN5TmFtZSA9IGxpc3QuZ2V0UG9saWN5TmFtZSgpOwotCQkJCQlpZih3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkNvbmZpZ18iKSB8fCB3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkFjdGlvbl8iKSB8fCB3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkRlY2lzaW9uXyIpKXsKLQkJCQkJCWlmKHdhdGNoUG9saWN5TmFtZS5lcXVhbHMoY2hlY2tQb2xpY3lOYW1lKSl7Ci0JCQkJCQkJc2VuZEZsYWcgPSB0cnVlOwotCQkJCQkJfWVsc2V7Ci0JCQkJCQkJc2VuZEZsYWcgPSBmYWxzZTsKLQkJCQkJCX0KKwkJaWYod2F0Y2hMaXN0ICE9IG51bGwgJiYgIXdhdGNoTGlzdC5pc0VtcHR5KCkpeworCQkJZm9yKE9iamVjdCB3YXRjaCA6IHdhdGNoTGlzdCl7CisJCQkJV2F0Y2hQb2xpY3lOb3RpZmljYXRpb25UYWJsZSBsaXN0ID0gKFdhdGNoUG9saWN5Tm90aWZpY2F0aW9uVGFibGUpIHdhdGNoOworCQkJCVN0cmluZyB3YXRjaFBvbGljeU5hbWUgPSBsaXN0LmdldFBvbGljeU5hbWUoKTsKKwkJCQlpZih3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkNvbmZpZ18iKSB8fCB3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkFjdGlvbl8iKSB8fCB3YXRjaFBvbGljeU5hbWUuY29udGFpbnMoIkRlY2lzaW9uXyIpKXsKKwkJCQkJaWYod2F0Y2hQb2xpY3lOYW1lLmVxdWFscyhjaGVja1BvbGljeU5hbWUpKXsKKwkJCQkJCXNlbmRGbGFnID0gdHJ1ZTsKKwkJCQkJfWVsc2V7CisJCQkJCQlzZW5kRmxhZyA9IGZhbHNlOwogCQkJCQl9Ci0JCQkJCWlmKHNlbmRGbGFnKXsKLQkJCQkJCUFubm90YXRpb25Db25maWdBcHBsaWNhdGlvbkNvbnRleHQgY3R4ID0gbnVsbDsKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJdG8gPSBsaXN0LmdldExvZ2luSWRzKCkrIkAiK1BvbGljeUNvbnRyb2xsZXIuZ2V0U210cEFwcGxpY2F0aW9uTmFtZSgpOwotCQkJCQkJCXRvID0gdG8udHJpbSgpOwotCQkJCQkJCWN0eCA9IG5ldyBBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0KCk7Ci0JCQkJCQkJY3R4LnJlZ2lzdGVyKFBvbGljeU5vdGlmaWNhdGlvbk1haWwuY2xhc3MpOwotCQkJCQkJCWN0eC5yZWZyZXNoKCk7Ci0JCQkJCQkJSmF2YU1haWxTZW5kZXJJbXBsIG1haWxTZW5kZXIgPSBjdHguZ2V0QmVhbihKYXZhTWFpbFNlbmRlckltcGwuY2xhc3MpOwotCQkJCQkJCU1pbWVNZXNzYWdlIG1pbWVNZXNzYWdlID0gbWFpbFNlbmRlci5jcmVhdGVNaW1lTWVzc2FnZSgpOwotCQkJCQkJCU1pbWVNZXNzYWdlSGVscGVyIG1haWxNc2cgPSBuZXcgTWltZU1lc3NhZ2VIZWxwZXIobWltZU1lc3NhZ2UpOwotCQkJCQkJCW1haWxNc2cuc2V0RnJvbShuZXcgSW50ZXJuZXRBZGRyZXNzKGZyb20sICJQb2xpY3kgTm90aWZpY2F0aW9uIFN5c3RlbSIpKTsKLQkJCQkJCQltYWlsTXNnLnNldFRvKHRvKTsKLQkJCQkJCQltYWlsTXNnLnNldFN1YmplY3Qoc3ViamVjdCk7Ci0JCQkJCQkJbWFpbE1zZy5zZXRUZXh0KG1lc3NhZ2UpOwotCQkJCQkJCW1haWxTZW5kZXIuc2VuZChtaW1lTWVzc2FnZSk7Ci0JCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVysiRXhjZXB0aW9uIE9jY3VyZWQgaW4gUG9saWN5IE5vdGlmaWNhdGlvbiIgK2UpOwotCQkJCQkJfWZpbmFsbHl7Ci0JCQkJCQkJaWYoY3R4ICE9IG51bGwpewotCQkJCQkJCQljdHguY2xvc2UoKTsKLQkJCQkJCQl9CisJCQkJfQorCQkJCWlmKHNlbmRGbGFnKXsKKwkJCQkJQW5ub3RhdGlvbkNvbmZpZ0FwcGxpY2F0aW9uQ29udGV4dCBjdHggPSBudWxsOworCQkJCQl0cnkgeworCQkJCQkJdG8gPSBsaXN0LmdldExvZ2luSWRzKCkrIkAiK1BvbGljeUNvbnRyb2xsZXIuZ2V0U210cEVtYWlsRXh0ZW5zaW9uKCk7CisJCQkJCQl0byA9IHRvLnRyaW0oKTsKKwkJCQkJCWN0eCA9IG5ldyBBbm5vdGF0aW9uQ29uZmlnQXBwbGljYXRpb25Db250ZXh0KCk7CisJCQkJCQljdHgucmVnaXN0ZXIoUG9saWN5Tm90aWZpY2F0aW9uTWFpbC5jbGFzcyk7CisJCQkJCQljdHgucmVmcmVzaCgpOworCQkJCQkJSmF2YU1haWxTZW5kZXJJbXBsIG1haWxTZW5kZXIgPSBjdHguZ2V0QmVhbihKYXZhTWFpbFNlbmRlckltcGwuY2xhc3MpOworCQkJCQkJTWltZU1lc3NhZ2UgbWltZU1lc3NhZ2UgPSBtYWlsU2VuZGVyLmNyZWF0ZU1pbWVNZXNzYWdlKCk7CisJCQkJCQlNaW1lTWVzc2FnZUhlbHBlciBtYWlsTXNnID0gbmV3IE1pbWVNZXNzYWdlSGVscGVyKG1pbWVNZXNzYWdlKTsKKwkJCQkJCW1haWxNc2cuc2V0RnJvbShuZXcgSW50ZXJuZXRBZGRyZXNzKGZyb20sICJQb2xpY3kgTm90aWZpY2F0aW9uIFN5c3RlbSIpKTsKKwkJCQkJCW1haWxNc2cuc2V0VG8odG8pOworCQkJCQkJbWFpbE1zZy5zZXRTdWJqZWN0KHN1YmplY3QpOworCQkJCQkJbWFpbE1zZy5zZXRUZXh0KG1lc3NhZ2UpOworCQkJCQkJbWFpbFNlbmRlci5zZW5kKG1pbWVNZXNzYWdlKTsKKwkJCQkJCWlmKG1vZGUuZXF1YWxzSWdub3JlQ2FzZSgiUmVuYW1lIikgfHwgbW9kZS5jb250YWlucygiRGVsZXRlIikgfHwgbW9kZS5jb250YWlucygiTW92ZSIpKXsKKwkJCQkJCQlwb2xpY3lOb3RpZmljYXRpb25EYW8uZGVsZXRlKHdhdGNoKTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1BST0NFU1NfRkxPVysiRXhjZXB0aW9uIE9jY3VyZWQgaW4gUG9saWN5IE5vdGlmaWNhdGlvbiIgK2UpOworCQkJCQl9ZmluYWxseXsKKwkJCQkJCWlmKGN0eCAhPSBudWxsKXsKKwkJCQkJCQljdHguY2xvc2UoKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCX0KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5UmVzdENvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5UmVzdENvbnRyb2xsZXIuamF2YQppbmRleCAyYzA0YmM2Li4wOGVmOTlmIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeVJlc3RDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lSZXN0Q29udHJvbGxlci5qYXZhCkBAIC04Niw5MCArODYsOTAgQEAKIAlDb21tb25DbGFzc0RhbyBjb21tb25DbGFzc0RhbzsKIAogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9wb2xpY3ljcmVhdGlvbi9zYXZlX3BvbGljeSJ9LCBtZXRob2Q9e1JlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyBwb2xpY3lDcmVhdGlvbkNvbnRyb2xsZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257Ci0JCQorCXB1YmxpYyB2b2lkIHBvbGljeUNyZWF0aW9uQ29udHJvbGxlcihIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgewogCQlTdHJpbmcgdXNlcklkID0gVXNlclV0aWxzLmdldFVzZXJTZXNzaW9uKHJlcXVlc3QpLmdldE9yZ1VzZXJJZCgpOwogCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwogCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKLQkJSnNvbk5vZGUgcm9vdCA9IG1hcHBlci5yZWFkVHJlZShyZXF1ZXN0LmdldFJlYWRlcigpKTsKLQkJCi0JCVBvbGljeVJlc3RBZGFwdGVyIHBvbGljeURhdGEgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQoInBvbGljeSIpLnRvU3RyaW5nKCksIFBvbGljeVJlc3RBZGFwdGVyLmNsYXNzKTsKLQkKLQkJaWYoImZpbGUiLmVxdWFscyhyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInR5cGUiKS50b1N0cmluZygpLnJlcGxhY2UoIlwiIiwgIiIpKSl7Ci0JCQlwb2xpY3lEYXRhLnNldEVkaXRQb2xpY3kodHJ1ZSk7Ci0JCX0KLQkJaWYocm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJwYXRoIikuc2l6ZSgpICE9IDApewotCQkJU3RyaW5nIGRpck5hbWUgPSAiIjsKLQkJCWZvcihpbnQgaSA9IDA7IGkgPCByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInBhdGgiKS5zaXplKCk7IGkrKyl7Ci0JCQkJZGlyTmFtZSA9IGRpck5hbWUucmVwbGFjZSgiXCIiLCAiIikgKyByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInBhdGgiKS5nZXQoaSkudG9TdHJpbmcoKS5yZXBsYWNlKCJcIiIsICIiKSArIEZpbGUuc2VwYXJhdG9yOworCQl0cnl7CisJCQlKc29uTm9kZSByb290ID0gbWFwcGVyLnJlYWRUcmVlKHJlcXVlc3QuZ2V0UmVhZGVyKCkpOworCisJCQlQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lEYXRhID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KCJwb2xpY3kiKS50b1N0cmluZygpLCBQb2xpY3lSZXN0QWRhcHRlci5jbGFzcyk7CisKKwkJCWlmKCJmaWxlIi5lcXVhbHMocm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJ0eXBlIikudG9TdHJpbmcoKS5yZXBsYWNlKCJcIiIsICIiKSkpeworCQkJCXBvbGljeURhdGEuc2V0RWRpdFBvbGljeSh0cnVlKTsKIAkJCX0KLQkJCWlmKHBvbGljeURhdGEuaXNFZGl0UG9saWN5KCkpewotCQkJCXBvbGljeURhdGEuc2V0RG9tYWluRGlyKGRpck5hbWUuc3Vic3RyaW5nKDAsIGRpck5hbWUubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpKSk7CisJCQlpZihyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KG1vZGFsKS5nZXQoInBhdGgiKS5zaXplKCkgIT0gMCl7CisJCQkJU3RyaW5nIGRpck5hbWUgPSAiIjsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgcm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJwYXRoIikuc2l6ZSgpOyBpKyspeworCQkJCQlkaXJOYW1lID0gZGlyTmFtZS5yZXBsYWNlKCJcIiIsICIiKSArIHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgicGF0aCIpLmdldChpKS50b1N0cmluZygpLnJlcGxhY2UoIlwiIiwgIiIpICsgRmlsZS5zZXBhcmF0b3I7CisJCQkJfQorCQkJCWlmKHBvbGljeURhdGEuaXNFZGl0UG9saWN5KCkpeworCQkJCQlwb2xpY3lEYXRhLnNldERvbWFpbkRpcihkaXJOYW1lLnN1YnN0cmluZygwLCBkaXJOYW1lLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKSkpOworCQkJCX1lbHNleworCQkJCQlwb2xpY3lEYXRhLnNldERvbWFpbkRpcihkaXJOYW1lICsgcm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldChtb2RhbCkuZ2V0KCJuYW1lIikudG9TdHJpbmcoKS5yZXBsYWNlKCJcIiIsICIiKSk7CisJCQkJfQogCQkJfWVsc2V7Ci0JCQkJcG9saWN5RGF0YS5zZXREb21haW5EaXIoZGlyTmFtZSArIHJvb3QuZ2V0KFBvbGljeUNvbnRyb2xsZXIuZ2V0UG9saWN5ZGF0YSgpKS5nZXQobW9kYWwpLmdldCgibmFtZSIpLnRvU3RyaW5nKCkucmVwbGFjZSgiXCIiLCAiIikpOworCQkJCVN0cmluZyBkb21haW4gPSByb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkuZ2V0KCJtb2RlbCIpLmdldCgibmFtZSIpLnRvU3RyaW5nKCk7CisJCQkJaWYoZG9tYWluLmNvbnRhaW5zKCIvIikpeworCQkJCQlkb21haW4gPSBkb21haW4uc3Vic3RyaW5nKDAsIGRvbWFpbi5sYXN0SW5kZXhPZignLycpKS5yZXBsYWNlKCIvIiwgRmlsZS5zZXBhcmF0b3IpOworCQkJCX0KKwkJCQlkb21haW4gPSBkb21haW4ucmVwbGFjZSgiXCIiLCAiIik7CisJCQkJcG9saWN5RGF0YS5zZXREb21haW5EaXIoZG9tYWluKTsKIAkJCX0KLQkJfWVsc2V7Ci0JCQlTdHJpbmcgZG9tYWluID0gcm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLmdldCgibW9kZWwiKS5nZXQoIm5hbWUiKS50b1N0cmluZygpOwotCQkJaWYoZG9tYWluLmNvbnRhaW5zKCIvIikpewotCQkJCWRvbWFpbiA9IGRvbWFpbi5zdWJzdHJpbmcoMCwgZG9tYWluLmxhc3RJbmRleE9mKCcvJykpLnJlcGxhY2UoIi8iLCBGaWxlLnNlcGFyYXRvcik7Ci0JCQl9Ci0JCQlkb21haW4gPSBkb21haW4ucmVwbGFjZSgiXCIiLCAiIik7Ci0JCQlwb2xpY3lEYXRhLnNldERvbWFpbkRpcihkb21haW4pOwotCQl9Ci0JCQotCQlpZihwb2xpY3lEYXRhLmdldENvbmZpZ1BvbGljeVR5cGUoKSAhPSBudWxsKXsKLQkJCWlmKCJDbG9zZWRMb29wX0ZhdWx0Ii5lcXVhbHNJZ25vcmVDYXNlKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpKSl7Ci0JCQkJQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlciBmYXVsdENvbnRyb2xsZXIgPSBuZXcgQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlcigpOwotCQkJCXBvbGljeURhdGEgPSBmYXVsdENvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSwgcm9vdCk7Ci0JCQl9ZWxzZSBpZigiRmlyZXdhbGwgQ29uZmlnIi5lcXVhbHNJZ25vcmVDYXNlKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpKSl7Ci0JCQkJQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyIGZ3Q29udHJvbGxlciA9IG5ldyBDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIoKTsKLQkJCQlwb2xpY3lEYXRhID0gZndDb250cm9sbGVyLnNldERhdGFUb1BvbGljeVJlc3RBZGFwdGVyKHBvbGljeURhdGEpOwotCQkJfWVsc2UgaWYoIk1pY3JvIFNlcnZpY2UiLmVxdWFsc0lnbm9yZUNhc2UocG9saWN5RGF0YS5nZXRDb25maWdQb2xpY3lUeXBlKCkpKXsKLQkJCQlDcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlciBtc0NvbnRyb2xsZXIgPSBuZXcgQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIoKTsKLQkJCQlwb2xpY3lEYXRhID0gbXNDb250cm9sbGVyLnNldERhdGFUb1BvbGljeVJlc3RBZGFwdGVyKHBvbGljeURhdGEsIHJvb3QpOwotCQkJfQotCQl9Ci0JCQotCQlwb2xpY3lEYXRhLnNldFVzZXJJZCh1c2VySWQpOwotCQkKLQkJU3RyaW5nIHJlc3VsdDsKLQkJU3RyaW5nIGJvZHkgPSBQb2xpY3lVdGlscy5vYmplY3RUb0pzb25TdHJpbmcocG9saWN5RGF0YSk7Ci0JCVN0cmluZyB1cmkgPSByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKTsKLQkJUmVzcG9uc2VFbnRpdHk8Pz4gcmVzcG9uc2VFbnRpdHkgPSBzZW5kVG9QQVAoYm9keSwgdXJpLCBIdHRwTWV0aG9kLlBPU1QpOwotCQlpZihyZXNwb25zZUVudGl0eSAhPSBudWxsICYmIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS5lcXVhbHMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19DT05GTElDVCkpewotCQkJcmVzdWx0ID0gIlBvbGljeUV4aXN0cyI7Ci0JCX1lbHNlIGlmKHJlc3BvbnNlRW50aXR5ICE9IG51bGwpewotCQkJcmVzdWx0ID0gIHJlc3BvbnNlRW50aXR5LmdldEJvZHkoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHBvbGljeU5hbWUgPSByZXNwb25zZUVudGl0eS5nZXRIZWFkZXJzKCkuZ2V0KCJwb2xpY3lOYW1lIikuZ2V0KDApOwotCQkJaWYocG9saWN5RGF0YS5pc0VkaXRQb2xpY3koKSAmJiAic3VjY2VzcyIuZXF1YWxzSWdub3JlQ2FzZShyZXN1bHQpKXsKLQkJCQlQb2xpY3lOb3RpZmljYXRpb25NYWlsIGVtYWlsID0gbmV3IFBvbGljeU5vdGlmaWNhdGlvbk1haWwoKTsKLQkJCQlTdHJpbmcgbW9kZSA9ICJFZGl0UG9saWN5IjsKLQkJCQlTdHJpbmcgd2F0Y2hQb2xpY3lOYW1lID0gcG9saWN5TmFtZS5yZXBsYWNlKCIueG1sIiwgIiIpOwotCQkJCVN0cmluZyB2ZXJzaW9uID0gd2F0Y2hQb2xpY3lOYW1lLnN1YnN0cmluZyh3YXRjaFBvbGljeU5hbWUubGFzdEluZGV4T2YoJy4nKSsxKTsKLQkJCQl3YXRjaFBvbGljeU5hbWUgPSB3YXRjaFBvbGljeU5hbWUuc3Vic3RyaW5nKDAsIHdhdGNoUG9saWN5TmFtZS5sYXN0SW5kZXhPZignLicpKS5yZXBsYWNlKCIuIiwgRmlsZS5zZXBhcmF0b3IpOwotCQkJCVN0cmluZyBwb2xpY3lWZXJzaW9uTmFtZSA9IHdhdGNoUG9saWN5TmFtZS5yZXBsYWNlKCIuIiwgRmlsZS5zZXBhcmF0b3IpOwotCQkJCXdhdGNoUG9saWN5TmFtZSA9IHdhdGNoUG9saWN5TmFtZSArICIuIiArIHZlcnNpb24gKyAiLnhtbCI7Ci0JCQkJUG9saWN5VmVyc2lvbiBlbnRpdHlJdGVtID0gbmV3IFBvbGljeVZlcnNpb24oKTsKLQkJCQllbnRpdHlJdGVtLnNldFBvbGljeU5hbWUocG9saWN5VmVyc2lvbk5hbWUpOwotCQkJCWVudGl0eUl0ZW0uc2V0QWN0aXZlVmVyc2lvbihJbnRlZ2VyLnBhcnNlSW50KHZlcnNpb24pKTsKLQkJCQllbnRpdHlJdGVtLnNldE1vZGlmaWVkQnkodXNlcklkKTsKLQkJCQllbWFpbC5zZW5kTWFpbChlbnRpdHlJdGVtLCB3YXRjaFBvbGljeU5hbWUsIG1vZGUsIGNvbW1vbkNsYXNzRGFvKTsKLQkJCX0KLQkJfWVsc2V7Ci0JCQlyZXN1bHQgPSAgIlJlc3BvbnNlIGlzIG51bGwgZnJvbSBQQVAiOwotCQl9Ci0JCQotCQotCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOwotCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZShQb2xpY3lDb250cm9sbGVyLmdldENvbnRlbnR0eXBlKCkpOwotCQlyZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q2hhcmFjdGVyZW5jb2RpbmcoKSk7CiAKLQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0JCVN0cmluZyByZXNwb25zZVN0cmluZyA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVzdWx0KTsKLQkJSlNPTk9iamVjdCBqID0gbmV3IEpTT05PYmplY3QoIntwb2xpY3lEYXRhOiAiICsgcmVzcG9uc2VTdHJpbmcgKyAifSIpOwotCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQkJcmV0dXJuIG51bGw7CisJCQlpZihwb2xpY3lEYXRhLmdldENvbmZpZ1BvbGljeVR5cGUoKSAhPSBudWxsKXsKKwkJCQlpZigiQ2xvc2VkTG9vcF9GYXVsdCIuZXF1YWxzSWdub3JlQ2FzZShwb2xpY3lEYXRhLmdldENvbmZpZ1BvbGljeVR5cGUoKSkpeworCQkJCQlDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyIGZhdWx0Q29udHJvbGxlciA9IG5ldyBDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyKCk7CisJCQkJCXBvbGljeURhdGEgPSBmYXVsdENvbnRyb2xsZXIuc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIocG9saWN5RGF0YSwgcm9vdCk7CisJCQkJfWVsc2UgaWYoIkZpcmV3YWxsIENvbmZpZyIuZXF1YWxzSWdub3JlQ2FzZShwb2xpY3lEYXRhLmdldENvbmZpZ1BvbGljeVR5cGUoKSkpeworCQkJCQlDcmVhdGVGaXJld2FsbENvbnRyb2xsZXIgZndDb250cm9sbGVyID0gbmV3IENyZWF0ZUZpcmV3YWxsQ29udHJvbGxlcigpOworCQkJCQlwb2xpY3lEYXRhID0gZndDb250cm9sbGVyLnNldERhdGFUb1BvbGljeVJlc3RBZGFwdGVyKHBvbGljeURhdGEpOworCQkJCX1lbHNlIGlmKCJNaWNybyBTZXJ2aWNlIi5lcXVhbHNJZ25vcmVDYXNlKHBvbGljeURhdGEuZ2V0Q29uZmlnUG9saWN5VHlwZSgpKSl7CisJCQkJCUNyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyIG1zQ29udHJvbGxlciA9IG5ldyBDcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlcigpOworCQkJCQlwb2xpY3lEYXRhID0gbXNDb250cm9sbGVyLnNldERhdGFUb1BvbGljeVJlc3RBZGFwdGVyKHBvbGljeURhdGEsIHJvb3QpOworCQkJCX0KKwkJCX0KIAorCQkJcG9saWN5RGF0YS5zZXRVc2VySWQodXNlcklkKTsKKworCQkJU3RyaW5nIHJlc3VsdDsKKwkJCVN0cmluZyBib2R5ID0gUG9saWN5VXRpbHMub2JqZWN0VG9Kc29uU3RyaW5nKHBvbGljeURhdGEpOworCQkJU3RyaW5nIHVyaSA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpOworCQkJUmVzcG9uc2VFbnRpdHk8Pz4gcmVzcG9uc2VFbnRpdHkgPSBzZW5kVG9QQVAoYm9keSwgdXJpLCBIdHRwTWV0aG9kLlBPU1QpOworCQkJaWYocmVzcG9uc2VFbnRpdHkgIT0gbnVsbCAmJiByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkuZXF1YWxzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfQ09ORkxJQ1QpKXsKKwkJCQlyZXN1bHQgPSAiUG9saWN5RXhpc3RzIjsKKwkJCX1lbHNlIGlmKHJlc3BvbnNlRW50aXR5ICE9IG51bGwpeworCQkJCXJlc3VsdCA9ICByZXNwb25zZUVudGl0eS5nZXRCb2R5KCkudG9TdHJpbmcoKTsKKwkJCQlTdHJpbmcgcG9saWN5TmFtZSA9IHJlc3BvbnNlRW50aXR5LmdldEhlYWRlcnMoKS5nZXQoInBvbGljeU5hbWUiKS5nZXQoMCk7CisJCQkJaWYocG9saWN5RGF0YS5pc0VkaXRQb2xpY3koKSAmJiAic3VjY2VzcyIuZXF1YWxzSWdub3JlQ2FzZShyZXN1bHQpKXsKKwkJCQkJUG9saWN5Tm90aWZpY2F0aW9uTWFpbCBlbWFpbCA9IG5ldyBQb2xpY3lOb3RpZmljYXRpb25NYWlsKCk7CisJCQkJCVN0cmluZyBtb2RlID0gIkVkaXRQb2xpY3kiOworCQkJCQlTdHJpbmcgd2F0Y2hQb2xpY3lOYW1lID0gcG9saWN5TmFtZS5yZXBsYWNlKCIueG1sIiwgIiIpOworCQkJCQlTdHJpbmcgdmVyc2lvbiA9IHdhdGNoUG9saWN5TmFtZS5zdWJzdHJpbmcod2F0Y2hQb2xpY3lOYW1lLmxhc3RJbmRleE9mKCcuJykrMSk7CisJCQkJCXdhdGNoUG9saWN5TmFtZSA9IHdhdGNoUG9saWN5TmFtZS5zdWJzdHJpbmcoMCwgd2F0Y2hQb2xpY3lOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoIi4iLCBGaWxlLnNlcGFyYXRvcik7CisJCQkJCVN0cmluZyBwb2xpY3lWZXJzaW9uTmFtZSA9IHdhdGNoUG9saWN5TmFtZS5yZXBsYWNlKCIuIiwgRmlsZS5zZXBhcmF0b3IpOworCQkJCQl3YXRjaFBvbGljeU5hbWUgPSB3YXRjaFBvbGljeU5hbWUgKyAiLiIgKyB2ZXJzaW9uICsgIi54bWwiOworCQkJCQlQb2xpY3lWZXJzaW9uIGVudGl0eUl0ZW0gPSBuZXcgUG9saWN5VmVyc2lvbigpOworCQkJCQllbnRpdHlJdGVtLnNldFBvbGljeU5hbWUocG9saWN5VmVyc2lvbk5hbWUpOworCQkJCQllbnRpdHlJdGVtLnNldEFjdGl2ZVZlcnNpb24oSW50ZWdlci5wYXJzZUludCh2ZXJzaW9uKSk7CisJCQkJCWVudGl0eUl0ZW0uc2V0TW9kaWZpZWRCeSh1c2VySWQpOworCQkJCQllbWFpbC5zZW5kTWFpbChlbnRpdHlJdGVtLCB3YXRjaFBvbGljeU5hbWUsIG1vZGUsIGNvbW1vbkNsYXNzRGFvKTsKKwkJCQl9CisJCQl9ZWxzZXsKKwkJCQlyZXN1bHQgPSAgIlJlc3BvbnNlIGlzIG51bGwgZnJvbSBQQVAiOworCQkJfQorCisJCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOworCQkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoUG9saWN5Q29udHJvbGxlci5nZXRDb250ZW50dHlwZSgpKTsKKwkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoUG9saWN5Q29udHJvbGxlci5nZXRDaGFyYWN0ZXJlbmNvZGluZygpKTsKKworCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisJCQlTdHJpbmcgcmVzcG9uc2VTdHJpbmcgPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHJlc3VsdCk7CisJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BvbGljeURhdGE6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7CisJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKKwkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQgd2hpbGUgc2F2aW5nIHBvbGljeSIgLCBlKTsKKwkJfQogCX0KIAkKIAkKQEAgLTM0NCw3ICszNDQsNyBAQAogCX0KIAkKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvZ2V0RGljdGlvbmFyeS8qIn0sIG1ldGhvZD17UmVxdWVzdE1ldGhvZC5HRVR9KQotCXB1YmxpYyB2b2lkIGdldERpY3Rpb25hcnlDb250cm9sbGVyKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9ueworCXB1YmxpYyB2b2lkIGdldERpY3Rpb25hcnlDb250cm9sbGVyKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKXsKIAkJU3RyaW5nIHVyaSA9IHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpLnJlcGxhY2UoIi9nZXREaWN0aW9uYXJ5IiwgIiIpOwogCQlTdHJpbmcgYm9keSA9IG51bGw7CiAJCVJlc3BvbnNlRW50aXR5PD8+IHJlc3BvbnNlRW50aXR5ID0gc2VuZFRvUEFQKG51bGwsIHVyaSwgSHR0cE1ldGhvZC5HRVQpOwpAQCAtMzUzLDcgKzM1MywxMSBAQAogCQl9ZWxzZXsKIAkJCWJvZHkgPSAiIjsKIAkJfQotCQlyZXNwb25zZS5nZXRXcml0ZXIoKS53cml0ZShib2R5KTsKKwkJdHJ5IHsKKwkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGJvZHkpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBvY2N1cmVkIHdoaWxlIGdldHRpbmcgRGljdGlvbmFyeSBlbnRyaWVzIiwgZSk7CisJCX0KIAl9CiAJCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3NhdmVEaWN0aW9uYXJ5LyovKiJ9LCBtZXRob2Q9e1JlcXVlc3RNZXRob2QuUE9TVH0pCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWN0aW9uUG9saWN5Q29udHJvbGxlci5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0FjdGlvblBvbGljeUNvbnRyb2xsZXIuamF2YQppbmRleCAyYzY4ZGY2Li5jODg0MTJiIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWN0aW9uUG9saWN5Q29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9BY3Rpb25Qb2xpY3lDb250cm9sbGVyLmphdmEKQEAgLTU4LDcgKzU4LDkgQEAKIHB1YmxpYyBjbGFzcyBBY3Rpb25Qb2xpY3lDb250cm9sbGVyIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyewogCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihBY3Rpb25Qb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKIAkKLQlwdWJsaWMgQWN0aW9uUG9saWN5Q29udHJvbGxlcigpe30KKwlwdWJsaWMgQWN0aW9uUG9saWN5Q29udHJvbGxlcigpeworCQkvL0RlZmF1bHQgQ29uc3RydWN0b3IKKwl9CiAKIAlwcml2YXRlIEFycmF5TGlzdDxPYmplY3Q+IGF0dHJpYnV0ZUxpc3Q7CiAJcHJvdGVjdGVkICBMaW5rZWRMaXN0PEludGVnZXI+IHJ1bGVBbGdvaXJ0aG1UcmFja2VyOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUJSTVNQYXJhbUNvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyLmphdmEKaW5kZXggODI1OGI4Yi4uNGY0ODM4ZCAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUJSTVNQYXJhbUNvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1BhcmFtQ29udHJvbGxlci5qYXZhCkBAIC00MiwxNyArNDIsMTkgQEAKIGltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRWxlbWVudDsKIAogaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29tbW9uLmxvZ2dpbmcuZmxleGxvZ2dlci5GbGV4TG9nZ2VyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbW1vbi5sb2dnaW5nLmZsZXhsb2dnZXIuTG9nZ2VyOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuYWRhcHRlci5Qb2xpY3lSZXN0QWRhcHRlcjsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmRhby5Db21tb25DbGFzc0RhbzsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5CUk1TUGFyYW1UZW1wbGF0ZTsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5Qb2xpY3lFbnRpdHk7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kueGFjbWwuYXBpLlhBQ01MRXJyb3JDb25zdGFudHM7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb3J0YWxzZGsuY29yZS5jb250cm9sbGVyLlJlc3RyaWN0ZWRCYXNlQ29udHJvbGxlcjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLkNvbnRyb2xsZXI7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLnNlcnZsZXQuTW9kZWxBbmRWaWV3OwogCi1pbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kueGFjbWwuYXBpLlhBQ01MRXJyb3JDb25zdGFudHM7CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkZlYXR1cmU7CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOwogaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CkBAIC02OSw5ICs3MSw2IEBACiBpbXBvcnQgb2FzaXMubmFtZXMudGMueGFjbWwuXzNfMC5jb3JlLnNjaGVtYS53ZF8xNy5SdWxlVHlwZTsKIGltcG9ydCBvYXNpcy5uYW1lcy50Yy54YWNtbC5fM18wLmNvcmUuc2NoZW1hLndkXzE3LlRhcmdldFR5cGU7CiAKLWltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb21tb24ubG9nZ2luZy5mbGV4bG9nZ2VyLkZsZXhMb2dnZXI7IAotaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbW1vbi5sb2dnaW5nLmZsZXhsb2dnZXIuTG9nZ2VyOwotCiBAQ29udHJvbGxlcgogQFJlcXVlc3RNYXBwaW5nKCIvIikKIHB1YmxpYyBjbGFzcyBDcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyIHsKQEAgLTc5LDYgKzc4LDE0IEBACiAKIAlwcml2YXRlIHN0YXRpYyBDb21tb25DbGFzc0RhbyBjb21tb25DbGFzc0RhbzsKIAorCXB1YmxpYyBzdGF0aWMgQ29tbW9uQ2xhc3NEYW8gZ2V0Q29tbW9uQ2xhc3NEYW8oKSB7CisJCXJldHVybiBjb21tb25DbGFzc0RhbzsKKwl9CisKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29tbW9uQ2xhc3NEYW8oQ29tbW9uQ2xhc3NEYW8gY29tbW9uQ2xhc3NEYW8pIHsKKwkJQ3JlYXRlQlJNU1BhcmFtQ29udHJvbGxlci5jb21tb25DbGFzc0RhbyA9IGNvbW1vbkNsYXNzRGFvOworCX0KKwkKIAlAQXV0b3dpcmVkCiAJcHJpdmF0ZSBDcmVhdGVCUk1TUGFyYW1Db250cm9sbGVyKENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvKXsKIAkJQ3JlYXRlQlJNU1BhcmFtQ29udHJvbGxlci5jb21tb25DbGFzc0RhbyA9IGNvbW1vbkNsYXNzRGFvOwpAQCAtOTAsMzUgKzk3LDM2IEBACiAJcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkeW5hbWljTGF5b3V0TWFwOwogCQogCXByaXZhdGUgc3RhdGljIFN0cmluZyBicm1zVGVtcGxhdGVWbGF1ZSA9ICI8JCVCUk1TUGFyYW1UZW1wbGF0ZT0iOwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBTdHJpbmcgPSAiU3RyaW5nIjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyaW5nID0gIlN0cmluZyI7CiAKIAogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9wb2xpY3lDb250cm9sbGVyL2dldEJSTVNUZW1wbGF0ZURhdGEuaHRtIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyBnZXRCUk1TUGFyYW1Qb2xpY3lSdWxlRGF0YShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJZHluYW1pY0xheW91dE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKLQkJbWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7Ci0JCUpzb25Ob2RlIHJvb3QgPSBtYXBwZXIucmVhZFRyZWUocmVxdWVzdC5nZXRSZWFkZXIoKSk7Ci0JCVN0cmluZyBydWxlID0gZmluZFJ1bGUocm9vdC5nZXQoUG9saWN5Q29udHJvbGxlci5nZXRQb2xpY3lkYXRhKCkpLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgiXlwifFwiJCIsICIiKSk7Ci0JCWdlbmVyYXRlVUkocnVsZSk7Ci0JCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q2hhcmFjdGVyZW5jb2RpbmcoKSk7Ci0JCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKFBvbGljeUNvbnRyb2xsZXIuZ2V0Q29udGVudHR5cGUoKSk7Ci0JCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoUG9saWN5Q29udHJvbGxlci5nZXRDaGFyYWN0ZXJlbmNvZGluZygpKTsKKwlwdWJsaWMgdm9pZCBnZXRCUk1TUGFyYW1Qb2xpY3lSdWxlRGF0YShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CisJCXRyeXsKKwkJCWR5bmFtaWNMYXlvdXRNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisJCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOworCQkJbWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7CisJCQlKc29uTm9kZSByb290ID0gbWFwcGVyLnJlYWRUcmVlKHJlcXVlc3QuZ2V0UmVhZGVyKCkpOworCQkJU3RyaW5nIHJ1bGUgPSBmaW5kUnVsZShyb290LmdldChQb2xpY3lDb250cm9sbGVyLmdldFBvbGljeWRhdGEoKSkudG9TdHJpbmcoKS5yZXBsYWNlQWxsKCJeXCJ8XCIkIiwgIiIpKTsKKwkJCWdlbmVyYXRlVUkocnVsZSk7CisJCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZyhQb2xpY3lDb250cm9sbGVyLmdldENoYXJhY3RlcmVuY29kaW5nKCkpOworCQkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoUG9saWN5Q29udHJvbGxlci5nZXRDb250ZW50dHlwZSgpKTsKKwkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoUG9saWN5Q29udHJvbGxlci5nZXRDaGFyYWN0ZXJlbmNvZGluZygpKTsKIAotCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQkJU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhkeW5hbWljTGF5b3V0TWFwKTsKLQkJSlNPTk9iamVjdCBqID0gbmV3IEpTT05PYmplY3QoIntwb2xpY3lEYXRhOiAiICsgcmVzcG9uc2VTdHJpbmcgKyAifSIpOwotCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQkJcmV0dXJuIG51bGw7CisJCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKwkJCVN0cmluZyByZXNwb25zZVN0cmluZyA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZHluYW1pY0xheW91dE1hcCk7CisJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BvbGljeURhdGE6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7CisJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKKwkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQgd2hpbGUgZ2V0dGluZyBCUk1TIFJ1bGUgZGF0YSIgLCBlKTsKKwkJfQogCX0KIAogCXByb3RlY3RlZCBTdHJpbmcgZmluZFJ1bGUoU3RyaW5nIHJ1bGVUZW1wbGF0ZSkgewotCQlMaXN0PE9iamVjdD4gZGF0YXMgPSBjb21tb25DbGFzc0Rhby5nZXREYXRhKEJSTVNQYXJhbVRlbXBsYXRlLmNsYXNzKTsKLQkJZm9yIChPYmplY3QgZGF0YTogZGF0YXMpewotCQkJQlJNU1BhcmFtVGVtcGxhdGUgIGJSTVNQYXJhbVRlbXBsYXRlID0gKEJSTVNQYXJhbVRlbXBsYXRlKSBkYXRhOwotCQkJaWYoYlJNU1BhcmFtVGVtcGxhdGUuZ2V0UnVsZU5hbWUoKS5lcXVhbHMocnVsZVRlbXBsYXRlKSl7Ci0JCQkJcmV0dXJuIGJSTVNQYXJhbVRlbXBsYXRlLmdldFJ1bGUoKTsKLQkJCX0KKwkJTGlzdDxPYmplY3Q+IGRhdGFzID0gY29tbW9uQ2xhc3NEYW8uZ2V0RGF0YUJ5SWQoQlJNU1BhcmFtVGVtcGxhdGUuY2xhc3MsICJydWxlTmFtZSIsIHJ1bGVUZW1wbGF0ZSk7CisJCWlmKGRhdGFzICE9IG51bGwgJiYgIWRhdGFzLmlzRW1wdHkoKSl7CisJCQlCUk1TUGFyYW1UZW1wbGF0ZSAgYlJNU1BhcmFtVGVtcGxhdGUgPSAoQlJNU1BhcmFtVGVtcGxhdGUpIGRhdGFzLmdldCgwKTsKKwkJCXJldHVybiBiUk1TUGFyYW1UZW1wbGF0ZS5nZXRSdWxlKCk7CiAJCX0KIAkJcmV0dXJuIG51bGw7CiAJfQpAQCAtMTk3LDEwICsyMDUsMTAgQEAKIAkJCQkJCXBvbGljeUxvZ2dlci5pbmZvKCJKdXN0IGZvciBMb2dnaW5nIitlKTsKIAkJCQkJCW5leHRDb21wb25lbnQgPSBjb21wb25lbnRzW2ldOwogCQkJCQl9Ci0JCQkJCWlmIChuZXh0Q29tcG9uZW50LnN0YXJ0c1dpdGgoU3RyaW5nKSkgeworCQkJCQlpZiAobmV4dENvbXBvbmVudC5zdGFydHNXaXRoKHN0cmluZykpIHsKIAkJCQkJCXR5cGUgPSAiU3RyaW5nIjsKIAkJCQkJCWNyZWF0ZUZpZWxkKGNhcHRpb24sIHR5cGUpOwotCQkJCQkJY2FwdGlvbiA9IG5leHRDb21wb25lbnQucmVwbGFjZShTdHJpbmcsICIiKTsKKwkJCQkJCWNhcHRpb24gPSBuZXh0Q29tcG9uZW50LnJlcGxhY2Uoc3RyaW5nLCAiIik7CiAJCQkJCX0gZWxzZSBpZiAobmV4dENvbXBvbmVudC5zdGFydHNXaXRoKCJpbnQiKSkgewogCQkJCQkJdHlwZSA9ICJpbnQiOwogCQkJCQkJY3JlYXRlRmllbGQoY2FwdGlvbiwgdHlwZSk7CkBAIC0zNTcsNyArMzY1LDcgQEAKIAkJcmV0dXJuIGZvcm1hdGVEYXRlOwogCX0KIAkvLyBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdGhlIFVJIGZyb20gcnVsZSBjb25maWd1cmF0aW9uCi0JcHJpdmF0ZSB2b2lkIHBhcmFtVUlHZW5lcmF0ZShQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lBZGFwdGVyLCBQb2xpY3lFbnRpdHkgZW50aXR5KSB7CisJcHVibGljIHZvaWQgcGFyYW1VSUdlbmVyYXRlKFBvbGljeVJlc3RBZGFwdGVyIHBvbGljeUFkYXB0ZXIsIFBvbGljeUVudGl0eSBlbnRpdHkpIHsKIAkJU3RyaW5nIGRhdGEgPSBlbnRpdHkuZ2V0Q29uZmlndXJhdGlvbkRhdGEoKS5nZXRDb25maWdCb2R5KCk7CiAJCWlmKGRhdGEgIT0gbnVsbCl7CiAJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShQb2xpY3lDb250cm9sbGVyLmdldENvbmZpZ0hvbWUoKSArRmlsZS5zZXBhcmF0b3IrIGVudGl0eS5nZXRDb25maWd1cmF0aW9uRGF0YSgpLmdldENvbmZpZ3VyYXRpb25OYW1lKCkpOwpAQCAtNDcxLDcgKzQ3OSw3IEBACiAJLy8gc2V0IFZpZXcgUnVsZQogCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9wb2xpY3lDb250cm9sbGVyL1ZpZXdCUk1TUGFyYW1Qb2xpY3lSdWxlLmh0bSJ9LCBtZXRob2Q9e29yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWV0aG9kLlBPU1R9KQotCXB1YmxpYyBNb2RlbEFuZFZpZXcgc2V0Vmlld1J1bGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgc2V0Vmlld1J1bGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpewogCQl0cnkgewogCQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKIAkJCW1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpOwpAQCAtNDkzLDcgKzUwMSw3IEBACiAJCQlpZihwb2xpY3lEYXRhLmdldFJ1bGVEYXRhKCkuc2l6ZSgpID4gMCl7IAogCQkJCWZvcihPYmplY3Qga2V5VmFsdWU6IHBvbGljeURhdGEuZ2V0UnVsZURhdGEoKS5rZXlTZXQoKSl7IAogCQkJCQlTdHJpbmcga2V5ID0ga2V5VmFsdWUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIGtleVZhbHVlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDEpOyAKLQkJCQkJaWYgKFN0cmluZy5lcXVhbHMoa2V5VmFsdWUpKSB7IAorCQkJCQlpZiAoc3RyaW5nLmVxdWFscyhrZXlWYWx1ZSkpIHsgCiAJCQkJCQlnZW5lcmF0ZWRSdWxlLmFwcGVuZCgiXG5cdFx0cGFyYW1zLnNldCIgCiAJCQkJCQkJCSsga2V5ICsgIihcIiIgCiAJCQkJCQkJCSsgcG9saWN5RGF0YS5nZXRSdWxlRGF0YSgpLmdldChrZXlWYWx1ZSkudG9TdHJpbmcoKSArICJcIik7Iik7IApAQCAtNTM3LDEwICs1NDUsOCBAQAogCQkJU3RyaW5nIHJlc3BvbnNlU3RyaW5nID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhib2R5KTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KCJ7cG9saWN5RGF0YTogIiArIHJlc3BvbnNlU3RyaW5nICsgIn0iKTsKIAkJCW91dC53cml0ZShqLnRvU3RyaW5nKCkpOwotCQkJcmV0dXJuIG51bGw7CiAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyBlKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsJCisJCX0JCiAJfQogfQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUJSTVNSYXdDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1Jhd0NvbnRyb2xsZXIuamF2YQppbmRleCA2Nzk0NWUxLi5jNWI5N2FkIDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1Jhd0NvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQlJNU1Jhd0NvbnRyb2xsZXIuamF2YQpAQCAtNzIsNiArNzIsNyBAQAogCQkJdHJ5ewogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCkuc3Vic3RyaW5nKDAsIHBvbGljeS5nZXREZXNjcmlwdGlvbigpLmluZGV4T2YoIkBDcmVhdGVkQnk6IikpOwogCQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCQlsb2dnZXIuaW5mbygiTm90IGFibGUgdG8gc2VlIHRoZSBjcmVhdGVkYnkgaW4gZGVzY3JpcHRpb24uIFNvLCBhZGQgZ2VuZXJpYyBkZXNjcmlwdGlvbiIsIGUpOwogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCk7CiAJCQl9CiAJCQlwb2xpY3lBZGFwdGVyLnNldFBvbGljeURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlci5qYXZhCmluZGV4IGNjZWNmNWQuLjA4YzBjMzggMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIuamF2YQpAQCAtNjEsNyArNjEsNyBAQAogQFJlcXVlc3RNYXBwaW5nKCIvIikKIHB1YmxpYyBjbGFzcyBDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyewogCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUgk9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKENyZWF0ZUNsb3NlZExvb3BGYXVsdENvbnRyb2xsZXIuY2xhc3MpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBwb2xpY3lMb2dnZXIJPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihDcmVhdGVDbG9zZWRMb29wRmF1bHRDb250cm9sbGVyLmNsYXNzKTsKIAkKIAlwcm90ZWN0ZWQgUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5QWRhcHRlciA9IG51bGw7CiAJCkBAIC03NSw4NiArNzUsOTEgQEAKIAkKIAlwdWJsaWMgQ3JlYXRlQ2xvc2VkTG9vcEZhdWx0Q29udHJvbGxlcigpe30KIAkKLQlwdWJsaWMgUG9saWN5UmVzdEFkYXB0ZXIgc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIoUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5RGF0YSwgSnNvbk5vZGUgcm9vdCkgdGhyb3dzIEV4Y2VwdGlvbnsKLQkJT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKLQkJbWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7Ci0JCVRyYXBEYXRhcyB0cmFwRGF0YXMgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJ0cmFwRGF0YSIpLnRvU3RyaW5nKCksIFRyYXBEYXRhcy5jbGFzcyk7Ci0JCVRyYXBEYXRhcyBmYXVsdERhdGFzID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgiZmF1bHREYXRhIikudG9TdHJpbmcoKSwgVHJhcERhdGFzLmNsYXNzKTsKLQkJQ2xvc2VkTG9vcEdyaWRKU09ORGF0YSBwb2xpY3lKc29uRGF0YSA9IG1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoInBvbGljeURhdGEiKS5nZXQoInBvbGljeSIpLnRvU3RyaW5nKCksIENsb3NlZExvb3BHcmlkSlNPTkRhdGEuY2xhc3MpOwotCQlDbG9zZWRMb29wRmF1bHRCb2R5IGpzb25Cb2R5ID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgicG9saWN5RGF0YSIpLmdldCgicG9saWN5IikuZ2V0KCJqc29uQm9keURhdGEiKS50b1N0cmluZygpLCBDbG9zZWRMb29wRmF1bHRCb2R5LmNsYXNzKTsKLQkJCi0JCUFycmF5TGlzdDxPYmplY3Q+IHRyYXBTaWduYXR1cmVEYXRhcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCQlpZih0cmFwRGF0YXMuZ2V0VHJhcDEoKSAhPSBudWxsKXsKLQkJCXRyYXBTaWduYXR1cmVEYXRhcy5hZGQodHJhcERhdGFzKTsKLQkJfQotCQlBcnJheUxpc3Q8T2JqZWN0PiBmYXVsdFNpZ25hdHVyZURhdGFzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0JCWlmKGZhdWx0RGF0YXMuZ2V0VHJhcDEoKSAhPSBudWxsKXsKLQkJCWZhdWx0U2lnbmF0dXJlRGF0YXMuYWRkKGZhdWx0RGF0YXMpOwotCQl9Ci0JCQotCQlTdHJpbmcgcmVzdWx0Qm9keSA9ICIiOwotCQlpZighcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKLQkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgIigiOwotCQkJZm9yKGludCBpID0gcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCkuc2l6ZSgpLTE7IGk+PTAgOyBpLS0pewotCQkJCVN0cmluZyBjb25uZWN0Qm9keSA9IGNvbm5lY3RUcmlnZ2VyU2lnbmF0dXJlKGksIHBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKLQkJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSAgKyBjb25uZWN0Qm9keTsKKwlwdWJsaWMgUG9saWN5UmVzdEFkYXB0ZXIgc2V0RGF0YVRvUG9saWN5UmVzdEFkYXB0ZXIoUG9saWN5UmVzdEFkYXB0ZXIgcG9saWN5RGF0YSwgSnNvbk5vZGUgcm9vdCl7CisJCXRyeXsKKwkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKKwkJCVRyYXBEYXRhcyB0cmFwRGF0YXMgPSBtYXBwZXIucmVhZFZhbHVlKHJvb3QuZ2V0KCJ0cmFwRGF0YSIpLnRvU3RyaW5nKCksIFRyYXBEYXRhcy5jbGFzcyk7CisJCQlUcmFwRGF0YXMgZmF1bHREYXRhcyA9IG1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoImZhdWx0RGF0YSIpLnRvU3RyaW5nKCksIFRyYXBEYXRhcy5jbGFzcyk7CisJCQlDbG9zZWRMb29wR3JpZEpTT05EYXRhIHBvbGljeUpzb25EYXRhID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgicG9saWN5RGF0YSIpLmdldCgicG9saWN5IikudG9TdHJpbmcoKSwgQ2xvc2VkTG9vcEdyaWRKU09ORGF0YS5jbGFzcyk7CisJCQlDbG9zZWRMb29wRmF1bHRCb2R5IGpzb25Cb2R5ID0gbWFwcGVyLnJlYWRWYWx1ZShyb290LmdldCgicG9saWN5RGF0YSIpLmdldCgicG9saWN5IikuZ2V0KCJqc29uQm9keURhdGEiKS50b1N0cmluZygpLCBDbG9zZWRMb29wRmF1bHRCb2R5LmNsYXNzKTsKKworCQkJQXJyYXlMaXN0PE9iamVjdD4gdHJhcFNpZ25hdHVyZURhdGFzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCQlpZih0cmFwRGF0YXMuZ2V0VHJhcDEoKSAhPSBudWxsKXsKKwkJCQl0cmFwU2lnbmF0dXJlRGF0YXMuYWRkKHRyYXBEYXRhcyk7CiAJCQl9Ci0JCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIpIjsKLQkJfWVsc2V7Ci0JCQlpZighdHJhcFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7Ci0JCQkJcmVzdWx0Qm9keSA9IGNhbGxUcmFwKCJuaWxsIiwgdHJhcFNpZ25hdHVyZURhdGFzLmdldCgwKSk7CisJCQlBcnJheUxpc3Q8T2JqZWN0PiBmYXVsdFNpZ25hdHVyZURhdGFzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCQlpZihmYXVsdERhdGFzLmdldFRyYXAxKCkgIT0gbnVsbCl7CisJCQkJZmF1bHRTaWduYXR1cmVEYXRhcy5hZGQoZmF1bHREYXRhcyk7CiAJCQl9CisKKwkJCVN0cmluZyByZXN1bHRCb2R5ID0gIiI7CisJCQlpZighcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdHRyaWdnZXJTaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKKwkJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIoIjsKKwkJCQlmb3IoaW50IGkgPSBwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5zaXplKCktMTsgaT49MCA7IGktLSl7CisJCQkJCVN0cmluZyBjb25uZWN0Qm9keSA9IGNvbm5lY3RUcmlnZ2VyU2lnbmF0dXJlKGksIHBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKKwkJCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgICsgY29ubmVjdEJvZHk7CisJCQkJfQorCQkJCXJlc3VsdEJvZHkgPSByZXN1bHRCb2R5ICsgIikiOworCQkJfWVsc2V7CisJCQkJaWYoIXRyYXBTaWduYXR1cmVEYXRhcy5pc0VtcHR5KCkpeworCQkJCQlyZXN1bHRCb2R5ID0gY2FsbFRyYXAoIm5pbGwiLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKKwkJCQl9CisJCQl9CisJCQlDbG9zZWRMb29wU2lnbmF0dXJlcyB0cmlnZ2VyU2lnbmF0dXJlcyA9IG5ldyBDbG9zZWRMb29wU2lnbmF0dXJlcygpOworCQkJdHJpZ2dlclNpZ25hdHVyZXMuc2V0U2lnbmF0dXJlcyhyZXN1bHRCb2R5KTsKKwkJCWlmKHBvbGljeURhdGEuZ2V0Q2xlYXJUaW1lT3V0KCkgIT0gbnVsbCl7CisJCQkJdHJpZ2dlclNpZ25hdHVyZXMuc2V0VGltZVdpbmRvdyhJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0Q2xlYXJUaW1lT3V0KCkpKTsJCisJCQkJdHJpZ2dlclNpZ25hdHVyZXMuc2V0VHJhcE1heEFnZShJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0VHJhcE1heEFnZSgpKSk7CisJCQkJQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcyB1aVRyaWdnZXJTaWduYXR1cmVzID0gbmV3IENsb3NlZExvb3BGYXVsdFRyaWdnZXJVSVNpZ25hdHVyZXMoKTsKKwkJCQlpZighdHJhcFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7CisJCQkJCXVpVHJpZ2dlclNpZ25hdHVyZXMuc2V0U2lnbmF0dXJlcyhnZXRVSVRyaWdnZXJTaWduYXR1cmUoIlRyYXAiLCB0cmFwU2lnbmF0dXJlRGF0YXMuZ2V0KDApKSk7CisJCQkJCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5pc0VtcHR5KCkpeworCQkJCQkJdWlUcmlnZ2VyU2lnbmF0dXJlcy5zZXRDb25uZWN0U2lnbmF0dXJlcyhnZXRVSUNvbm5lY3RUcmFwcyhwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKSkpOworCQkJCQl9CQkJCQorCQkJCX0JCQkKKwkJCQlqc29uQm9keS5zZXRUcmlnZ2VyU2lnbmF0dXJlc1VzZWRGb3JVSSh1aVRyaWdnZXJTaWduYXR1cmVzKTsKKwkJCQlqc29uQm9keS5zZXRUcmlnZ2VyVGltZVdpbmRvd1VzZWRGb3JVSShJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0Q2xlYXJUaW1lT3V0KCkpKTsKKwkJCQlqc29uQm9keS5zZXRUcmFwTWF4QWdlVXNlZEZvclVJKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRUcmFwTWF4QWdlKCkpKTsKKwkJCX0KKworCQkJanNvbkJvZHkuc2V0VHJpZ2dlclNpZ25hdHVyZXModHJpZ2dlclNpZ25hdHVyZXMpOworCQkJU3RyaW5nIGZhdWx0Qm9keSA9ICIiOworCQkJaWYoIXBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkuaXNFbXB0eSgpKXsKKwkJCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgKyAiKCI7CisJCQkJZm9yKGludCBpID0gcG9saWN5SnNvbkRhdGEuZ2V0Q29ubmVjdFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoKS5zaXplKCktMTsgaT49MCA7IGktLSl7CisJCQkJCVN0cmluZyBjb25uZWN0Qm9keSA9IGNvbm5lY3RUcmlnZ2VyU2lnbmF0dXJlKGksIHBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCksIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKKwkJCQkJZmF1bHRCb2R5ID0gZmF1bHRCb2R5ICArIGNvbm5lY3RCb2R5OworCQkJCX0KKwkJCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgKyAiKSI7CisJCQl9ZWxzZXsKKwkJCQlpZighZmF1bHRTaWduYXR1cmVEYXRhcy5pc0VtcHR5KCkpeworCQkJCQlmYXVsdEJvZHkgPSBjYWxsVHJhcCgibmlsbCIsIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKTsKKwkJCQl9CisJCQl9CisJCQlDbG9zZWRMb29wU2lnbmF0dXJlcyBmYXVsdFNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcFNpZ25hdHVyZXMoKTsKKwkJCWZhdWx0U2lnbmF0dXJlcy5zZXRTaWduYXR1cmVzKGZhdWx0Qm9keSk7CisJCQlpZihwb2xpY3lEYXRhLmdldFZlcmlmaWNhdGlvbmNsZWFyVGltZU91dCgpICE9IG51bGwpeworCQkJCWZhdWx0U2lnbmF0dXJlcy5zZXRUaW1lV2luZG93KEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRWZXJpZmljYXRpb25jbGVhclRpbWVPdXQoKSkpOworCQkJCUNsb3NlZExvb3BGYXVsdFRyaWdnZXJVSVNpZ25hdHVyZXMgdWlmYXVsdFNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcygpOworCQkJCWlmKCFmYXVsdFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7CisJCQkJCXVpZmF1bHRTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMoZ2V0VUlUcmlnZ2VyU2lnbmF0dXJlKCJGYXVsdCIsIGZhdWx0U2lnbmF0dXJlRGF0YXMuZ2V0KDApKSk7CisJCQkJCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLmlzRW1wdHkoKSl7CisJCQkJCQl1aWZhdWx0U2lnbmF0dXJlcy5zZXRDb25uZWN0U2lnbmF0dXJlcyhnZXRVSUNvbm5lY3RUcmFwcyhwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpKSk7CisJCQkJCX0JCQorCQkJCX0KKworCQkJCWpzb25Cb2R5LnNldFZlcmlmaWNhdGlvblNpZ25hdHVyZXNVc2VkRm9yVUkodWlmYXVsdFNpZ25hdHVyZXMpOworCQkJCWpzb25Cb2R5LnNldFZlcmZpZmljYXRpb25UaW1lV2luZG93VXNlZEZvclVJKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRWZXJpZmljYXRpb25jbGVhclRpbWVPdXQoKSkpOworCQkJfQkJCisJCQlqc29uQm9keS5zZXRWZXJpZmljYXRpb25TaWduYXR1cmVzKGZhdWx0U2lnbmF0dXJlcyk7CisJCQlPYmplY3RXcml0ZXIgb20gPSBuZXcgT2JqZWN0TWFwcGVyKCkud3JpdGVyKCk7CisJCQlTdHJpbmcganNvbiA9IG9tLndyaXRlVmFsdWVBc1N0cmluZyhqc29uQm9keSk7CisJCQlwb2xpY3lEYXRhLnNldEpzb25Cb2R5KGpzb24pOworCisJCX1jYXRjaChFeGNlcHRpb24gZSl7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIHdoaWxlIHNldHRpbmcgZGF0YSB0byBBZGFwdGVyIiAsIGUpOwogCQl9Ci0JCUNsb3NlZExvb3BTaWduYXR1cmVzIHRyaWdnZXJTaWduYXR1cmVzID0gbmV3IENsb3NlZExvb3BTaWduYXR1cmVzKCk7Ci0JCXRyaWdnZXJTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMocmVzdWx0Qm9keSk7Ci0JCWlmKHBvbGljeURhdGEuZ2V0Q2xlYXJUaW1lT3V0KCkgIT0gbnVsbCl7Ci0JCQl0cmlnZ2VyU2lnbmF0dXJlcy5zZXRUaW1lV2luZG93KEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRDbGVhclRpbWVPdXQoKSkpOwkKLQkJCXRyaWdnZXJTaWduYXR1cmVzLnNldFRyYXBNYXhBZ2UoSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldFRyYXBNYXhBZ2UoKSkpOwotCQkJQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcyB1aVRyaWdnZXJTaWduYXR1cmVzID0gbmV3IENsb3NlZExvb3BGYXVsdFRyaWdnZXJVSVNpZ25hdHVyZXMoKTsKLQkJCWlmKCF0cmFwU2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKLQkJCQl1aVRyaWdnZXJTaWduYXR1cmVzLnNldFNpZ25hdHVyZXMoZ2V0VUlUcmlnZ2VyU2lnbmF0dXJlKCJUcmFwIiwgdHJhcFNpZ25hdHVyZURhdGFzLmdldCgwKSkpOwotCQkJCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0dHJpZ2dlclNpZ25hdHVyZXMoKS5pc0VtcHR5KCkpewotCQkJCQl1aVRyaWdnZXJTaWduYXR1cmVzLnNldENvbm5lY3RTaWduYXR1cmVzKGdldFVJQ29ubmVjdFRyYXBzKHBvbGljeUpzb25EYXRhLmdldENvbm5lY3R0cmlnZ2VyU2lnbmF0dXJlcygpKSk7Ci0JCQkJfQkJCQkKLQkJCX0JCQkKLQkJCWpzb25Cb2R5LnNldFRyaWdnZXJTaWduYXR1cmVzVXNlZEZvclVJKHVpVHJpZ2dlclNpZ25hdHVyZXMpOwotCQkJanNvbkJvZHkuc2V0VHJpZ2dlclRpbWVXaW5kb3dVc2VkRm9yVUkoSW50ZWdlci5wYXJzZUludChwb2xpY3lEYXRhLmdldENsZWFyVGltZU91dCgpKSk7Ci0JCQlqc29uQm9keS5zZXRUcmFwTWF4QWdlVXNlZEZvclVJKEludGVnZXIucGFyc2VJbnQocG9saWN5RGF0YS5nZXRUcmFwTWF4QWdlKCkpKTsKLQkJfQotCQkKLQkJanNvbkJvZHkuc2V0VHJpZ2dlclNpZ25hdHVyZXModHJpZ2dlclNpZ25hdHVyZXMpOwotCQlTdHJpbmcgZmF1bHRCb2R5ID0gIiI7Ci0JCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLmlzRW1wdHkoKSl7Ci0JCQlmYXVsdEJvZHkgPSBmYXVsdEJvZHkgKyAiKCI7Ci0JCQlmb3IoaW50IGkgPSBwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLnNpemUoKS0xOyBpPj0wIDsgaS0tKXsKLQkJCQlTdHJpbmcgY29ubmVjdEJvZHkgPSBjb25uZWN0VHJpZ2dlclNpZ25hdHVyZShpLCBwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLCBmYXVsdFNpZ25hdHVyZURhdGFzLmdldCgwKSk7Ci0JCQkJZmF1bHRCb2R5ID0gZmF1bHRCb2R5ICArIGNvbm5lY3RCb2R5OwotCQkJfQotCQkJZmF1bHRCb2R5ID0gZmF1bHRCb2R5ICsgIikiOwotCQl9ZWxzZXsKLQkJCWlmKCFmYXVsdFNpZ25hdHVyZURhdGFzLmlzRW1wdHkoKSl7Ci0JCQkJZmF1bHRCb2R5ID0gY2FsbFRyYXAoIm5pbGwiLCBmYXVsdFNpZ25hdHVyZURhdGFzLmdldCgwKSk7Ci0JCQl9Ci0JCX0KLQkJQ2xvc2VkTG9vcFNpZ25hdHVyZXMgZmF1bHRTaWduYXR1cmVzID0gbmV3IENsb3NlZExvb3BTaWduYXR1cmVzKCk7Ci0JCWZhdWx0U2lnbmF0dXJlcy5zZXRTaWduYXR1cmVzKGZhdWx0Qm9keSk7Ci0JCWlmKHBvbGljeURhdGEuZ2V0VmVyaWZpY2F0aW9uY2xlYXJUaW1lT3V0KCkgIT0gbnVsbCl7Ci0JCQlmYXVsdFNpZ25hdHVyZXMuc2V0VGltZVdpbmRvdyhJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0VmVyaWZpY2F0aW9uY2xlYXJUaW1lT3V0KCkpKTsKLQkJCUNsb3NlZExvb3BGYXVsdFRyaWdnZXJVSVNpZ25hdHVyZXMgdWlmYXVsdFNpZ25hdHVyZXMgPSBuZXcgQ2xvc2VkTG9vcEZhdWx0VHJpZ2dlclVJU2lnbmF0dXJlcygpOwotCQkJaWYoIWZhdWx0U2lnbmF0dXJlRGF0YXMuaXNFbXB0eSgpKXsKLQkJCQl1aWZhdWx0U2lnbmF0dXJlcy5zZXRTaWduYXR1cmVzKGdldFVJVHJpZ2dlclNpZ25hdHVyZSgiRmF1bHQiLCBmYXVsdFNpZ25hdHVyZURhdGFzLmdldCgwKSkpOwotCQkJCWlmKCFwb2xpY3lKc29uRGF0YS5nZXRDb25uZWN0VmVyaWZpY2F0aW9uU2lnbmF0dXJlcygpLmlzRW1wdHkoKSl7Ci0JCQkJCXVpZmF1bHRTaWduYXR1cmVzLnNldENvbm5lY3RTaWduYXR1cmVzKGdldFVJQ29ubmVjdFRyYXBzKHBvbGljeUpzb25EYXRhLmdldENvbm5lY3RWZXJpZmljYXRpb25TaWduYXR1cmVzKCkpKTsKLQkJCQl9CQkKLQkJCX0KLQkJCQotCQkJanNvbkJvZHkuc2V0VmVyaWZpY2F0aW9uU2lnbmF0dXJlc1VzZWRGb3JVSSh1aWZhdWx0U2lnbmF0dXJlcyk7Ci0JCQlqc29uQm9keS5zZXRWZXJmaWZpY2F0aW9uVGltZVdpbmRvd1VzZWRGb3JVSShJbnRlZ2VyLnBhcnNlSW50KHBvbGljeURhdGEuZ2V0VmVyaWZpY2F0aW9uY2xlYXJUaW1lT3V0KCkpKTsKLQkJfQkJCi0JCWpzb25Cb2R5LnNldFZlcmlmaWNhdGlvblNpZ25hdHVyZXMoZmF1bHRTaWduYXR1cmVzKTsKLQkJT2JqZWN0V3JpdGVyIG9tID0gbmV3IE9iamVjdE1hcHBlcigpLndyaXRlcigpOwotCQlTdHJpbmcganNvbiA9IG9tLndyaXRlVmFsdWVBc1N0cmluZyhqc29uQm9keSk7Ci0JCXBvbGljeURhdGEuc2V0SnNvbkJvZHkoanNvbik7CiAJCXJldHVybiBwb2xpY3lEYXRhOwogCX0KIAkKQEAgLTE3MCw2ICsxNzUsNyBAQAogCQkJfQogCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgKyAiKCIgKyBub3RCb3g7CiAJCX1jYXRjaChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5pbmZvKCJHZW5lcmFsIGVycm9yIiAsIGUpOwogCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgKyAiKCI7CiAJCX0KIAkJU3RyaW5nIGNvbm5lY3RUcmFwMSA9IGNvbm5lY3RUcmFwcy5nZXQoImNvbm5lY3RUcmFwMSIpOwpAQCAtMTk0LDExICsyMDAsMTMgQEAKIAkJCVN0cmluZyB0cmFwQ291bnQxID0gY29ubmVjdFRyYXBzLmdldCgidHJhcENvdW50MSIpOwogCQkJcmVzdWx0Qm9keSA9IHJlc3VsdEJvZHkgKyAiLCBUaW1lID0gIiArIHRyYXBDb3VudDEgKyAiKSI7CiAJCX1jYXRjaChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKXsKKwkJCXBvbGljeUxvZ2dlci5pbmZvKCJHZW5lcmFsIGVycm9yIiAsIGUpOwogCQl9CiAJCXRyeXsKIAkJCVN0cmluZyBvcGVyYXRvckJveCA9IGNvbm5lY3RUcmFwcy5nZXQoIm9wZXJhdG9yQm94Iik7CiAJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArIG9wZXJhdG9yQm94ICsiKCI7CiAJCX1jYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSl7CisJCQlwb2xpY3lMb2dnZXIuaW5mbygiR2VuZXJhbCBlcnJvciIgLCBlKTsKIAkJfQogCQl0cnl7CiAJCQlTdHJpbmcgY29ubmVjdFRyYXAyID0gY29ubmVjdFRyYXBzLmdldCgiY29ubmVjdFRyYXAyIik7CkBAIC0yMjAsMTEgKzIyOCwxMyBAQAogCQkJCX0KIAkJCX0KIAkJfWNhdGNoKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmluZm8oIkdlbmVyYWwgZXJyb3IiICwgZSk7CiAJCX0KIAkJdHJ5ewogCQkJU3RyaW5nIHRyYXBDb3VudDIgPSBjb25uZWN0VHJhcHMuZ2V0KCJ0cmFwQ291bnQyIik7CiAJCQlyZXN1bHRCb2R5ID0gcmVzdWx0Qm9keSArICIsIFRpbWUgPSAiICsgdHJhcENvdW50MiArICIpIjsKIAkJfWNhdGNoKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpeworCQkJcG9saWN5TG9nZ2VyLmluZm8oIkdlbmVyYWwgZXJyb3IiICwgZSk7CiAJCX0KIAkJcmV0dXJuIHJlc3VsdEJvZHk7CiAJfQpAQCAtNjAzLDcgKzYxMyw3IEBACiAJCQl9CiAKIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCUxPR0dFUi5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAogCQlyZXR1cm4gbnVsbDsJCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQ2xvc2VkTG9vcFBNQ29udHJvbGxlci5qYXZhIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUNsb3NlZExvb3BQTUNvbnRyb2xsZXIuamF2YQppbmRleCAzODVjYTE1Li4zOTg1MGQ5IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlQ2xvc2VkTG9vcFBNQ29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVDbG9zZWRMb29wUE1Db250cm9sbGVyLmphdmEKQEAgLTYzLDYgKzYzLDcgQEAKIAkJCXRyeXsKIAkJCQlkZXNjcmlwdGlvbiA9IHBvbGljeS5nZXREZXNjcmlwdGlvbigpLnN1YnN0cmluZygwLCBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKS5pbmRleE9mKCJAQ3JlYXRlZEJ5OiIpKTsKIAkJCX1jYXRjaChFeGNlcHRpb24gZSl7CisJCQkJTE9HR0VSLmluZm8oIkdlbmVyYWwgZXJyb3IiICwgZSk7CiAJCQkJZGVzY3JpcHRpb24gPSBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKTsKIAkJCX0KIAkJCXBvbGljeUFkYXB0ZXIuc2V0UG9saWN5RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIuamF2YQppbmRleCBlMTU2MDAyLi43NzdmYjg5IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CkBAIC0xNjAsNyArMTYxLDcgQEAKIAkJCWpzb25Db250ZW50ID0gZGVjb2RlQ29udGVudChyb290LmdldCgicG9saWN5SlNPTiIpKS50b1N0cmluZygpOwogCQkJY29uc3RydWN0SnNvbihwb2xpY3lEYXRhLCBqc29uQ29udGVudCk7CiAJCX1jYXRjaChFeGNlcHRpb24gZSl7Ci0JCQlMT0dHRVIuZXJyb3IoIkVycm9yIHdoaWxlIGRlY29kaW5nIG1pY3Jvc2VydmljZSBjb250ZW50Iik7CisJCQlMT0dHRVIuZXJyb3IoIkVycm9yIHdoaWxlIGRlY29kaW5nIG1pY3Jvc2VydmljZSBjb250ZW50IiwgZSk7CiAJCX0KIAkJCiAJCXJldHVybiBwb2xpY3lEYXRhOwpAQCAtMjI0LDcgKzIyNSw3IEBACiAJCXRyeSB7CiAJCQlqc29uID0gb20ud3JpdGVWYWx1ZUFzU3RyaW5nKG1pY3JvU2VydmljZU9iamVjdCk7CiAJCX0gY2F0Y2ggKEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIGUpIHsKLQkJCUxPR0dFUi5lcnJvcigiRXJyb3Igd3JpdGluZyBvdXQgdGhlIG9iamVjdCIpOworCQkJTE9HR0VSLmVycm9yKCJFcnJvciB3cml0aW5nIG91dCB0aGUgb2JqZWN0IiwgZSk7CiAJCX0KIAkJTE9HR0VSLmluZm8oanNvbik7CiAJCVN0cmluZyBjbGVhbkpzb24gPSBjbGVhblVQSnNvbihqc29uKTsKQEAgLTI1NCw3ICsyNTUsNyBAQAogCQkJCWNsZWFuSnNvbiA9IHJldHVybk5vZGUudG9TdHJpbmcoKTsKIAkJCX0KIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJTE9HR0VSLmVycm9yKCJFcnJvciB3cml0aW5nIG91dCB0aGUgSnNvbk5vZGUiKTsKKwkJCUxPR0dFUi5lcnJvcigiRXJyb3Igd3JpdGluZyBvdXQgdGhlIEpzb25Ob2RlIixlKTsKIAkJfQogCQlyZXR1cm4gY2xlYW5Kc29uOwogCX0KQEAgLTMxMSw3ICszMTIsNyBAQAogCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGxvYWQoYnl0ZVtdIHNvdXJjZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsgCiAJCVlhbWwgeWFtbCA9IG5ldyBZYW1sKCk7IAogCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLQkJTWFwPE9iamVjdCwgT2JqZWN0PiB5YW1sTWFwID0gKE1hcDxPYmplY3QsIE9iamVjdD4pIHlhbWwubG9hZChzb3VyY2UudG9TdHJpbmcoKSk7IAorCQlNYXA8T2JqZWN0LCBPYmplY3Q+IHlhbWxNYXAgPSAoTWFwPE9iamVjdCwgT2JqZWN0PikgeWFtbC5sb2FkKEFycmF5cy50b1N0cmluZyhzb3VyY2UpKTsgCiAJCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOyAKIAkJTWFwPFN0cmluZywgU3RyaW5nPiBzZXR0aW5ncyA9IG5ldyBIYXNoTWFwIDw+KCk7IAogCQlpZiAoeWFtbE1hcCA9PSBudWxsKSB7IApAQCAtMzk3LDEwICszOTgsNyBAQAogCQlIYXNoTWFwPFN0cmluZyxTdHJpbmc+IGRhdGFNYXBGb3JKc29uPW5ldyBIYXNoTWFwIDw+KCk7IAogCQlmb3IoU3RyaW5nIHVuaXF1ZURhdGFLZXk6IHVuaXF1ZURhdGFLZXlzKXsKIAkJCWlmKHVuaXF1ZURhdGFLZXkuY29udGFpbnMoIiUiKSl7Ci0JCQkJU3RyaW5nW10gdW5pcXVlRGF0YUtleVNwbGl0PSB1bmlxdWVEYXRhS2V5LnNwbGl0KCIlIiwyKTsKLQkJCQlpZiAodW5pcXVlRGF0YUtleVNwbGl0Lmxlbmd0aCA8IDIpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQorCQkJCVN0cmluZ1tdIHVuaXF1ZURhdGFLZXlTcGxpdD0gdW5pcXVlRGF0YUtleS5zcGxpdCgiJSIpOwogCQkJCVN0cmluZyBmaW5kVHlwZT1EQVRBVFlQRSt1bmlxdWVEYXRhS2V5U3BsaXRbMF0rUFJPUEVSVElFUyt1bmlxdWVEYXRhS2V5U3BsaXRbMV0rVFlQRTsKIAkJCQlTdHJpbmcgdHlwZVZhbHVlPW1hcC5nZXQoZmluZFR5cGUpOwogCQkJCUxPR0dFUi5pbmZvKHR5cGVWYWx1ZSk7CkBAIC00NzYsMTAgKzQ3NCw3IEBACiAJCUhhc2hNYXA8U3RyaW5nLFN0cmluZz4gaG1TdWI7CiAJCWZvcihNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGVudHJ5OiBkYXRhTWFwRm9ySnNvbi5lbnRyeVNldCgpKXsKIAkJCVN0cmluZyB1bmlxdWVEYXRhS2V5PSBlbnRyeS5nZXRLZXkoKTsKLQkJCVN0cmluZ1tdIHVuaXF1ZURhdGFLZXlTcGxpdD11bmlxdWVEYXRhS2V5LnNwbGl0KCIlIiwyKTsKLQkJCWlmICh1bmlxdWVEYXRhS2V5U3BsaXQubGVuZ3RoIDwgMikgewotCQkJCWNvbnRpbnVlOwotCQkJfQorCQkJU3RyaW5nW10gdW5pcXVlRGF0YUtleVNwbGl0PXVuaXF1ZURhdGFLZXkuc3BsaXQoIiUiKTsKIAkJCVN0cmluZyB2YWx1ZT0gZGF0YU1hcEZvckpzb24uZ2V0KHVuaXF1ZURhdGFLZXkpOwogCQkJaWYoZGF0YU1hcEtleS5jb250YWluc0tleSh1bmlxdWVEYXRhS2V5U3BsaXRbMF0pKXsKIAkJCQlobVN1YiA9IGRhdGFNYXBLZXkuZ2V0KHVuaXF1ZURhdGFLZXlTcGxpdFswXSk7CkBAIC03NDMsMTAgKzczOCw3IEBACiAJCQkJCQkJaWYoanNvbkFycmF5ICE9IG51bGwgJiYgYXJyeUtleS5lcXVhbHMobm9kZUtleS5zdWJzdHJpbmcoMCxub2RlS2V5LmluZGV4T2YoIkAiKSkpKXsKIAkJCQkJCQkJanNvbkFycmF5LnB1dChkZWNvZGVDb250ZW50KG5vZGUpKTsKIAkJCQkJCQl9IAotCQkJCQkJCWlmKGtleS5jb250YWlucygiQCIpICYmICFhcnJ5S2V5LmVxdWFscyhrZXkuc3Vic3RyaW5nKDAsbm9kZUtleS5pbmRleE9mKCJAIikpKSl7Ci0JCQkJCQkJCWpzb25SZXN1bHQucHV0KGFycnlLZXksIGpzb25BcnJheSk7Ci0JCQkJCQkJCWpzb25BcnJheSA9IG5ldyBKU09OQXJyYXkoKTsKLQkJCQkJCQl9ZWxzZSBpZigha2V5LmNvbnRhaW5zKCJAIikpeworCQkJCQkJCWlmKChrZXkuY29udGFpbnMoIkAiKSAmJiAhYXJyeUtleS5lcXVhbHMoa2V5LnN1YnN0cmluZygwLG5vZGVLZXkuaW5kZXhPZigiQCIpKSkpIHx8ICFrZXkuY29udGFpbnMoIkAiKSl7CiAJCQkJCQkJCWpzb25SZXN1bHQucHV0KGFycnlLZXksIGpzb25BcnJheSk7CiAJCQkJCQkJCWpzb25BcnJheSA9IG5ldyBKU09OQXJyYXkoKTsKIAkJCQkJCQl9CkBAIC0xMjMxLDE4ICsxMjIzLDEzIEBACiAJCX0KIAl9CiAKLQlwcml2YXRlIFN0cmluZyBnZXRQb2xpY3lTY29wZShTdHJpbmcgdmFsdWUpIHsJCi0JCUdyb3VwUG9saWN5U2NvcGVMaXN0IHBTY29wZSA9IG5ldyBHcm91cFBvbGljeVNjb3BlTGlzdCgpOwotCQlMaXN0PE9iamVjdD4gZ3JvdXBMaXN0PSBjb21tb25DbGFzc0Rhby5nZXREYXRhKEdyb3VwUG9saWN5U2NvcGVMaXN0LmNsYXNzKTsKLQkJaWYoZ3JvdXBMaXN0LnNpemUoKSA+IDApewotCQkJZm9yKGludCBpID0gMCA7IGkgPCBncm91cExpc3Quc2l6ZSgpIDsgaSArKyl7Ci0JCQkJcFNjb3BlID0gKEdyb3VwUG9saWN5U2NvcGVMaXN0KSBncm91cExpc3QuZ2V0KGkpOwotCQkJCWlmIChwU2NvcGUuZ2V0R3JvdXBMaXN0KCkuZXF1YWxzKHZhbHVlKSl7Ci0JCQkJCWJyZWFrOwotCQkJCX0JCQotCQkJfQorCXByaXZhdGUgU3RyaW5nIGdldFBvbGljeVNjb3BlKFN0cmluZyB2YWx1ZSkgeworCQlMaXN0PE9iamVjdD4gZ3JvdXBMaXN0PSBjb21tb25DbGFzc0Rhby5nZXREYXRhQnlJZChHcm91cFBvbGljeVNjb3BlTGlzdC5jbGFzcywgImdyb3VwTGlzdCIsIHZhbHVlKTsKKwkJaWYoZ3JvdXBMaXN0ICE9IG51bGwgJiYgIWdyb3VwTGlzdC5pc0VtcHR5KCkpeworCQkJR3JvdXBQb2xpY3lTY29wZUxpc3QgcFNjb3BlID0gKEdyb3VwUG9saWN5U2NvcGVMaXN0KSBncm91cExpc3QuZ2V0KDApOworCQkJcmV0dXJuIHBTY29wZS5nZXRHcm91cE5hbWUoKTsJCQogCQl9Ci0JCXJldHVybiBwU2NvcGUuZ2V0R3JvdXBOYW1lKCk7CisJCXJldHVybiBudWxsOwogCX0KIAogCS8vQ29udmVydCB0aGUgbWFwIHZhbHVlcyBhbmQgc2V0IGludG8gSlNPTiBib2R5CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyLmphdmEKaW5kZXggNGFlYTYzNy4uMjIzMmRhNiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZUZpcmV3YWxsQ29udHJvbGxlci5qYXZhCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVGaXJld2FsbENvbnRyb2xsZXIuamF2YQpAQCAtMTksNyArMTksNiBAQAogICovCiAKIHBhY2thZ2Ugb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKQEAgLTY3LDExICs2Niw4IEBACiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5Db250cm9sbGVyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWFwcGluZzsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5zZXJ2bGV0Lk1vZGVsQW5kVmlldzsKIAotaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0aW9uRXhjZXB0aW9uOwogaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5EZXNlcmlhbGl6YXRpb25GZWF0dXJlOwotaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5Kc29uTWFwcGluZ0V4Y2VwdGlvbjsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0V3JpdGVyOwpAQCAtODcsNyArODMsNyBAQAogQENvbnRyb2xsZXIKIEBSZXF1ZXN0TWFwcGluZygiLyIpCiBwdWJsaWMgY2xhc3MgQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyIHsKLQlwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nZ2VyCT0gRmxleExvZ2dlci5nZXRMb2dnZXIoQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyLmNsYXNzKTsKKwlwcml2YXRlIHN0YXRpYyBMb2dnZXIgcG9saWN5TG9nZ2VyCT0gRmxleExvZ2dlci5nZXRMb2dnZXIoQ3JlYXRlRmlyZXdhbGxDb250cm9sbGVyLmNsYXNzKTsKIAogCUBBdXRvd2lyZWQKIAlTZXNzaW9uRmFjdG9yeSBzZXNzaW9uRmFjdG9yeTsKQEAgLTExMCw5ICsxMDYsOSBAQAogCiAJcHVibGljIFBvbGljeVJlc3RBZGFwdGVyIHNldERhdGFUb1BvbGljeVJlc3RBZGFwdGVyKFBvbGljeVJlc3RBZGFwdGVyIHBvbGljeURhdGEpewogCQkKLQkJdGVybUNvbGxlY3Rvckxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJdGFnQ29sbGVjdG9yTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotCQlpZihwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkgPiAwKXsKKwkJdGVybUNvbGxlY3Rvckxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJdGFnQ29sbGVjdG9yTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlpZighcG9saWN5RGF0YS5nZXRBdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKXsKIAkJCWZvcihPYmplY3QgYXR0cmlidXRlIDogcG9saWN5RGF0YS5nZXRBdHRyaWJ1dGVzKCkpewogCQkJCWlmKGF0dHJpYnV0ZSBpbnN0YW5jZW9mIExpbmtlZEhhc2hNYXA8PywgPz4pewogCQkJCQlTdHJpbmcga2V5ID0gKChMaW5rZWRIYXNoTWFwPD8sID8+KSBhdHRyaWJ1dGUpLmdldCgia2V5IikudG9TdHJpbmcoKTsKQEAgLTEzNSwxNiArMTMxLDE0IEBACiAJfQogCiAJcHJpdmF0ZSBMaXN0PFN0cmluZz4gbWFwcGluZyhTdHJpbmcgZXhwYW5kYWJsZUxpc3QpIHsKLQkJU3RyaW5nIHZhbHVlID0gbmV3IFN0cmluZygpOwotCQlTdHJpbmcgZGVzYyA9ICBuZXcgU3RyaW5nKCk7CiAJCUxpc3QgPFN0cmluZz4gdmFsdWVEZXNjPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJTGlzdDxPYmplY3Q+IHByZWZpeExpc3REYXRhID0gY29tbW9uQ2xhc3NEYW8uZ2V0RGF0YShQcmVmaXhMaXN0LmNsYXNzKTsKIAkJZm9yIChpbnQgaSA9IDA7IGk8IHByZWZpeExpc3REYXRhLnNpemUoKTsgaSsrKSB7CiAJCQlQcmVmaXhMaXN0IHByZWZpeExpc3QgPSAoUHJlZml4TGlzdCkgcHJlZml4TGlzdERhdGEuZ2V0KGkpOwogCQkJaWYgKHByZWZpeExpc3QuZ2V0UHJlZml4TGlzdE5hbWUoKS5lcXVhbHMoZXhwYW5kYWJsZUxpc3QpKSB7Ci0JCQkJdmFsdWUgPSBwcmVmaXhMaXN0LmdldFByZWZpeExpc3RWYWx1ZSgpOworCQkJCVN0cmluZyB2YWx1ZSA9IHByZWZpeExpc3QuZ2V0UHJlZml4TGlzdFZhbHVlKCk7CiAJCQkJdmFsdWVEZXNjLmFkZCh2YWx1ZSk7Ci0JCQkJZGVzYz0gcHJlZml4TGlzdC5nZXREZXNjcmlwdGlvbigpOworCQkJCVN0cmluZyBkZXNjPSBwcmVmaXhMaXN0LmdldERlc2NyaXB0aW9uKCk7CiAJCQkJdmFsdWVEZXNjLmFkZChkZXNjKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE5OCwxNCArMTkyLDE1IEBACiAJCQkvLyBwb2xpY3kgbmFtZSB2YWx1ZSBpcyB0aGUgcG9saWN5IG5hbWUgd2l0aG91dCBhbnkgcHJlZml4IGFuZCBFeHRlbnNpb25zLgogCQkJcG9saWN5QWRhcHRlci5zZXRPbGRQb2xpY3lGaWxlTmFtZShwb2xpY3lBZGFwdGVyLmdldFBvbGljeU5hbWUoKSk7CiAJCQlTdHJpbmcgcG9saWN5TmFtZVZhbHVlID0gcG9saWN5QWRhcHRlci5nZXRQb2xpY3lOYW1lKCkuc3Vic3RyaW5nKHBvbGljeUFkYXB0ZXIuZ2V0UG9saWN5TmFtZSgpLmluZGV4T2YoIkZXXyIpICszKTsKLQkJCWlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkgewotCQkJCWxvZ2dlci5kZWJ1ZygiUHJlcG9wdWxhdGluZyBmb3JtIGRhdGEgZm9yIENvbmZpZyBQb2xpY3kgc2VsZWN0ZWQ6IisgcG9saWN5QWRhcHRlci5nZXRQb2xpY3lOYW1lKCkpOworCQkJaWYgKHBvbGljeUxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQkJcG9saWN5TG9nZ2VyLmRlYnVnKCJQcmVwb3B1bGF0aW5nIGZvcm0gZGF0YSBmb3IgQ29uZmlnIFBvbGljeSBzZWxlY3RlZDoiKyBwb2xpY3lBZGFwdGVyLmdldFBvbGljeU5hbWUoKSk7CiAJCQl9CiAJCQlwb2xpY3lBZGFwdGVyLnNldFBvbGljeU5hbWUocG9saWN5TmFtZVZhbHVlKTsKIAkJCVN0cmluZyBkZXNjcmlwdGlvbiA9ICIiOwogCQkJdHJ5ewogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCkuc3Vic3RyaW5nKDAsIHBvbGljeS5nZXREZXNjcmlwdGlvbigpLmluZGV4T2YoIkBDcmVhdGVkQnk6IikpOwogCQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCQlwb2xpY3lMb2dnZXIuaW5mbygiR2VuZXJhbCBlcnJvciIsIGUpOwogCQkJCWRlc2NyaXB0aW9uID0gcG9saWN5LmdldERlc2NyaXB0aW9uKCk7CiAJCQl9CiAJCQlwb2xpY3lBZGFwdGVyLnNldFBvbGljeURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKTsKQEAgLTIyOSw3ICsyMjQsNyBAQAogCQkJCX0KIAkJCX0KIAkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gQ2F1c2VkIHdoaWxlIFJldHJpdmluZyB0aGUgSlNPTiBib2R5IGRhdGEiICtlKTsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBDYXVzZWQgd2hpbGUgUmV0cml2aW5nIHRoZSBKU09OIGJvZHkgZGF0YSIgK2UpOwogCQkJfQogCQkJCiAJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHRlcm1UYWdNYXA9bnVsbDsKQEAgLTMxNywxNCArMzEyLDE0IEBACiAJfQogCQogCUBSZXF1ZXN0TWFwcGluZyh2YWx1ZT17Ii9wb2xpY3lDb250cm9sbGVyL1ZpZXdGV1BvbGljeVJ1bGUuaHRtIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyBzZXRGV1ZpZXdSdWxlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9ueworCXB1YmxpYyB2b2lkIHNldEZXVmlld1J1bGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpewogCQl0cnkgewogCQkJdGVybUNvbGxlY3Rvckxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKIAkJCUpzb25Ob2RlIHJvb3QgPSBtYXBwZXIucmVhZFRyZWUocmVxdWVzdC5nZXRSZWFkZXIoKSk7CiAJCQlQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lEYXRhID0gKFBvbGljeVJlc3RBZGFwdGVyKW1hcHBlci5yZWFkVmFsdWUocm9vdC5nZXQoInBvbGljeURhdGEiKS50b1N0cmluZygpLCBQb2xpY3lSZXN0QWRhcHRlci5jbGFzcyk7Ci0JCQlpZihwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkgPiAwKXsKKwkJCWlmKCFwb2xpY3lEYXRhLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpewogCQkJCWZvcihPYmplY3QgYXR0cmlidXRlIDogcG9saWN5RGF0YS5nZXRBdHRyaWJ1dGVzKCkpewogCQkJCQlpZihhdHRyaWJ1dGUgaW5zdGFuY2VvZiBMaW5rZWRIYXNoTWFwPD8sID8+KXsKIAkJCQkJCVN0cmluZyBrZXkgPSAoKExpbmtlZEhhc2hNYXA8PywgPz4pIGF0dHJpYnV0ZSkuZ2V0KCJrZXkiKS50b1N0cmluZygpOwpAQCAtNDUwLDcgKzQ0NSw3IEBACiAJCQkJCQkJCX0KIAkJCQkJCQl9CiAJCQkJCQl9Ci0JCQkJCQlkaXNwbGF5U3RyaW5nLmFwcGVuZCgiXG4iKTsKKwkJCQkJCWRpc3BsYXlTdHJpbmcuYXBwZW5kKCJcbiIpOwkKIAkJCQkJfQogCiAJCQkJCXJ1bGVBY3Rpb249KGpwYVRlcm1MaXN0KS5nZXRBY3Rpb24oKTsKQEAgLTQ2OSwxMSArNDY0LDkgQEAKIAkJCVN0cmluZyByZXNwb25zZVN0cmluZyA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZGlzcGxheVN0cmluZyk7CiAJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BvbGljeURhdGE6ICIgKyByZXNwb25zZVN0cmluZyArICJ9Iik7CiAJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQkJCXJldHVybiBudWxsOwogCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfUFJPQ0VTU19GTE9XICsgZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyBlKTsKIAkJfQotCQlyZXR1cm4gbnVsbDsJCiAJfQogCiAJcHJpdmF0ZSBTdHJpbmcgY29uc3RydWN0SnNvbihQb2xpY3lSZXN0QWRhcHRlciBwb2xpY3lEYXRhKSB7CkBAIC04NDcsMTAgKzg0MCwxMCBAQAogCQkJCQkJCVByZWZpeElQTGlzdCB0YXJnZXRBZGRyZXNzTGlzdCA9IG5ldyBQcmVmaXhJUExpc3QoKTsKIAkJCQkJCQlBZGRyZXNzTWVtYmVycyBhZGRyZXNzTWVtYmVycz0gbmV3IEFkZHJlc3NNZW1iZXJzKCk7CiAJCQkJCQkJdGFyZ2V0QWRkcmVzc0xpc3Quc2V0TmFtZShwcmVmaXhJUCk7Ci0JCQkJCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfUFJPQ0VTU19GTE9XICsgIlByZWZpeExpc3QgdmFsdWU6IitwcmVmaXhJUCk7CisJCQkJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfUFJPQ0VTU19GTE9XICsgIlByZWZpeExpc3QgdmFsdWU6IitwcmVmaXhJUCk7CiAJCQkJCQkJdmFsdWVEZXNjID0gbWFwcGluZyhwcmVmaXhJUCk7CiAJCQkJCQkJaWYoIXZhbHVlRGVzYy5pc0VtcHR5KCkpewotCQkJCQkJCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyAiUHJlZml4TGlzdCBkZXNjcmlwdGlvbjoiK3ZhbHVlRGVzYy5nZXQoMSkpOworCQkJCQkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9QUk9DRVNTX0ZMT1cgKyAiUHJlZml4TGlzdCBkZXNjcmlwdGlvbjoiK3ZhbHVlRGVzYy5nZXQoMSkpOwogCQkJCQkJCQl0YXJnZXRBZGRyZXNzTGlzdC5zZXREZXNjcmlwdGlvbih2YWx1ZURlc2MuZ2V0KDEpKTsKIAkJCQkJCQl9CiAJCQkJCQkJCkBAIC05MjIsMTYgKzkxNSwxMiBAQAogCQkJT2JqZWN0V3JpdGVyIG9tID0gbmV3IE9iamVjdE1hcHBlcigpLndyaXRlcigpOwogCQkJdHJ5IHsKIAkJCQlqc29uID0gb20ud3JpdGVWYWx1ZUFzU3RyaW5nKHRjKTsKLQkJCX0gY2F0Y2ggKEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKLQkJCX0gY2F0Y2ggKEpzb25NYXBwaW5nRXhjZXB0aW9uIGUpIHsKLQkJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCQl9CQogCiAJCX1jYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAogCQlyZXR1cm4ganNvbjsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EYXNoYm9hcmRDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvRGFzaGJvYXJkQ29udHJvbGxlci5qYXZhCmluZGV4IDU2ZmY2MzcuLjA4OTQ3MDYgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EYXNoYm9hcmRDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0Rhc2hib2FyZENvbnRyb2xsZXIuamF2YQpAQCAtNzMsNyArNzMsNyBAQAogQENvbnRyb2xsZXIKIEBSZXF1ZXN0TWFwcGluZyh7Ii8ifSkKIHB1YmxpYyBjbGFzcyBEYXNoYm9hcmRDb250cm9sbGVyICBleHRlbmRzIFJlc3RyaWN0ZWRCYXNlQ29udHJvbGxlcnsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gRmxleExvZ2dlci5nZXRMb2dnZXIoRGFzaGJvYXJkQ29udHJvbGxlci5jbGFzcyk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIHBvbGljeUxvZ2dlciA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKERhc2hib2FyZENvbnRyb2xsZXIuY2xhc3MpOwogCUBBdXRvd2lyZWQKIAlTeXN0ZW1Mb2dEYkRhbyBzeXN0ZW1EQU87CiAJCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAl9CiAJCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAl9CiAJCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAl9CiAJCkBAIC0xNjEsNyArMTYxLDcgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAl9CiAJCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0KIAl9CiAJCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJCX0KIAkJfSBjYXRjaCAoUEFQRXhjZXB0aW9uIHwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZTEpIHsKIAkJCXBhcFN0YXR1cyA9ICJDQU5OT1RfQ09OTkVDVCI7Ci0JCQlsb2dnZXIuZXJyb3IoIkVycm9yIGdldHRpbmcgUEFQIHN0YXR1cywgUEFQIG5vdCByZXNwb25kaW5nIHRvIHJlcXVlc3RzIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkVycm9yIGdldHRpbmcgUEFQIHN0YXR1cywgUEFQIG5vdCByZXNwb25kaW5nIHRvIHJlcXVlc3RzIiwgZTEpOwogCQl9CiAJCVN0cmluZyBwYXBVUkwgPSBYQUNNTFByb3BlcnRpZXMuZ2V0UHJvcGVydHkoWEFDTUxSZXN0UHJvcGVydGllcy5QUk9QX1BBUF9VUkwpOwogCQlKU09OT2JqZWN0IG9iamVjdCA9IG5ldyBKU09OT2JqZWN0KCk7CkBAIC0yMjksMTEgKzIyOSwxMiBAQAogCQkJCWlmIChwZHAuZ2V0U3RhdHVzKCkuZ2V0U3RhdHVzKCkudG9TdHJpbmcoKSA9PSAiVVBfVE9fREFURSIgJiYgKChFY29tcFBEUCkgcGRwKS5nZXRKbXhQb3J0KCkgIT0gMCl7CiAJCQkJCVN0cmluZyBwZHBJcEFkZHJlc3MgPSBwYXJzZUlQU3lzdGVtKHBkcC5nZXRJZCgpKTsKIAkJCQkJaW50IHBvcnQgPSAoKEVjb21wUERQKSBwZHApLmdldEpteFBvcnQoKTsKLQkJCQkJaWYgKHBvcnQgIT0gMCkKLQkJCQkJbG9nZ2VyLmRlYnVnKCJHZXR0aW5nIEpNWCBSZXNwb25zZSBDb3VudHMgZnJvbSAiICsgcGRwSXBBZGRyZXNzICsgIiBhdCBKTVggcG9ydCAiICsgcG9ydCk7Ci0JCQkJCW5hQ291bnQgPSBnZXRSZXF1ZXN0Q291bnRzKHBkcElwQWRkcmVzcywgcG9ydCwgInBkcEV2YWx1YXRpb25OQSIpOwotCQkJCQlwZXJtaXRDb3VudCA9IGdldFJlcXVlc3RDb3VudHMocGRwSXBBZGRyZXNzLCBwb3J0LCAiUGRwRXZhbHVhdGlvblBlcm1pdCIpOwotCQkJCQlkZW55Q291bnQgPSBnZXRSZXF1ZXN0Q291bnRzKHBkcElwQWRkcmVzcywgcG9ydCwgIlBkcEV2YWx1YXRpb25EZW55Iik7CisJCQkJCWlmIChwb3J0ICE9IDApeworCQkJCQkJcG9saWN5TG9nZ2VyLmRlYnVnKCJHZXR0aW5nIEpNWCBSZXNwb25zZSBDb3VudHMgZnJvbSAiICsgcGRwSXBBZGRyZXNzICsgIiBhdCBKTVggcG9ydCAiICsgcG9ydCk7CisJCQkJCQluYUNvdW50ID0gZ2V0UmVxdWVzdENvdW50cyhwZHBJcEFkZHJlc3MsIHBvcnQsICJwZHBFdmFsdWF0aW9uTkEiKTsKKwkJCQkJCXBlcm1pdENvdW50ID0gZ2V0UmVxdWVzdENvdW50cyhwZHBJcEFkZHJlc3MsIHBvcnQsICJQZHBFdmFsdWF0aW9uUGVybWl0Iik7CisJCQkJCQlkZW55Q291bnQgPSBnZXRSZXF1ZXN0Q291bnRzKHBkcElwQWRkcmVzcywgcG9ydCwgIlBkcEV2YWx1YXRpb25EZW55Iik7CisJCQkJCX0KIAkJCQl9CiAJCQkJaWYgKG5hQ291bnQgPT0gLTEpewogCQkJCQlKU09OT2JqZWN0IG9iamVjdCA9IG5ldyBKU09OT2JqZWN0KCk7CkBAIC0yNzksNyArMjgwLDcgQEAKIAlAU3VwcHJlc3NXYXJuaW5ncyh7ICJyYXd0eXBlcyIsICJ1bmNoZWNrZWQiIH0pCiAJcHJpdmF0ZSBsb25nIGdldFJlcXVlc3RDb3VudHMoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgam14QXR0cmlidXRlKSB7CiAJCQotCQlsb2dnZXIuZGVidWcoIkNyZWF0ZSBhbiBSTUkgY29ubmVjdG9yIGNsaWVudCBhbmQgY29ubmVjdCBpdCB0byB0aGUgSk1YIGNvbm5lY3RvciBzZXJ2ZXIiKTsKKwkJcG9saWN5TG9nZ2VyLmRlYnVnKCJDcmVhdGUgYW4gUk1JIGNvbm5lY3RvciBjbGllbnQgYW5kIGNvbm5lY3QgaXQgdG8gdGhlIEpNWCBjb25uZWN0b3Igc2VydmVyIik7CiAJCUhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKIAkJbWFwID0gbnVsbDsKIAkJSk1YQ29ubmVjdG9yIGpteENvbm5lY3Rpb247CkBAIC0yODgsMjMgKzI4OSwyMyBAQAogCQkJam14Q29ubmVjdGlvbi5jb25uZWN0KCk7CiAJCQlPYmplY3QgbyA9IGpteENvbm5lY3Rpb24uZ2V0TUJlYW5TZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0QXR0cmlidXRlKG5ldyBPYmplY3ROYW1lKCJQZHBSZXN0OnR5cGU9UGRwUmVzdE1vbml0b3IiKSwgam14QXR0cmlidXRlKTsKIAkJCWpteENvbm5lY3Rpb24uY2xvc2UoKTsKLQkJCWxvZ2dlci5kZWJ1ZygicGRwRXZhbHVhdGlvbk5BIHZhbHVlIHJldHJlaXZlZDogIiArIG8pOworCQkJcG9saWN5TG9nZ2VyLmRlYnVnKCJwZHBFdmFsdWF0aW9uTkEgdmFsdWUgcmV0cmVpdmVkOiAiICsgbyk7CiAJCQlyZXR1cm4gKGxvbmcpIG87CiAJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIgLCBlKTsKIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJFcnJvciBpbiByZXRlcml2aW5nIiArIGpteEF0dHJpYnV0ZSArICIgZnJvbSBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFcnJvciBpbiByZXRlcml2aW5nIiArIGpteEF0dHJpYnV0ZSArICIgZnJvbSBKTVggY29ubmVjdGlvbiIsIGUpOwogCQl9IGNhdGNoIChBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CQkKLQkJCWxvZ2dlci5lcnJvcigiQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gICIgKyBqbXhBdHRyaWJ1dGUgKyAgIiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gICIgKyBqbXhBdHRyaWJ1dGUgKyAgIiBmb3IgSk1YIGNvbm5lY3Rpb24iLCBlKTsKIAkJfSBjYXRjaCAoSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIkluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24gIiArIGhvc3QgKyAiIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uICIgKyBob3N0ICsgIiBmb3IgSk1YIGNvbm5lY3Rpb24iLCBlKTsKIAkJfSBjYXRjaCAoTWFsZm9ybWVkT2JqZWN0TmFtZUV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIk1hbGZvcm1lZE9iamVjdE5hbWVFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIk1hbGZvcm1lZE9iamVjdE5hbWVFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIiwgZSk7CiAJCX0gY2F0Y2ggKE1CZWFuRXhjZXB0aW9uIGUpIHsKLQkJCWxvZ2dlci5lcnJvcigiTUJlYW5FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7Ci0JCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiTUJlYW5FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKIAkJfSBjYXRjaCAoUmVmbGVjdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIlJlZmxlY3Rpb25FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIlJlZmxlY3Rpb25FeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIiwgZSk7CiAJCX0KIAkJCiAJCXJldHVybiAtMTsKQEAgLTMzMiw3ICszMzMsNyBAQAogCQkJCXRyeXsKIAkJCQkJcG9saWN5TWFwLnB1dChwb2xpY3kuZ2V0UG9saWN5SWQoKS5yZXBsYWNlKCIgIiwgIiIpLCBwb2xpY3kuZ2V0SWQoKSk7CiAJCQkJfWNhdGNoKEV4Y2VwdGlvbiBlKXsKLQkJCQkJbG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfU0NIRU1BX0lOVkFMSUQrcG9saWN5LmdldE5hbWUoKSArZSk7CisJCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1NDSEVNQV9JTlZBTElEK3BvbGljeS5nZXROYW1lKCkgK2UpOwogCQkJCX0KIAkJCX0KIAkJCQpAQCAtMzg2LDcgKzM4Nyw3IEBACiAJICovCiAJQFN1cHByZXNzV2FybmluZ3MoeyAicmF3dHlwZXMiLCAidW5jaGVja2VkIiB9KQogCXByaXZhdGUgT2JqZWN0IGdldFBvbGljeShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBqbXhBdHRyaWJ1dGUpewotCQlsb2dnZXIuZGVidWcoIkNyZWF0ZSBhbiBSTUkgY29ubmVjdG9yIGNsaWVudCBhbmQgY29ubmVjdCBpdCB0byB0aGUgSk1YIGNvbm5lY3RvciBzZXJ2ZXIgZm9yIFBvbGljeTogIiArIGhvc3QpOworCQlwb2xpY3lMb2dnZXIuZGVidWcoIkNyZWF0ZSBhbiBSTUkgY29ubmVjdG9yIGNsaWVudCBhbmQgY29ubmVjdCBpdCB0byB0aGUgSk1YIGNvbm5lY3RvciBzZXJ2ZXIgZm9yIFBvbGljeTogIiArIGhvc3QpOwogCQlIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7CiAJCW1hcCA9IG51bGw7CiAJCUpNWENvbm5lY3RvciBqbXhDb25uZWN0aW9uOwpAQCAtMzk1LDIzICszOTYsMjMgQEAKIAkJCWpteENvbm5lY3Rpb24uY29ubmVjdCgpOwogCQkJT2JqZWN0IG8gPSBqbXhDb25uZWN0aW9uLmdldE1CZWFuU2VydmVyQ29ubmVjdGlvbigpLmdldEF0dHJpYnV0ZShuZXcgT2JqZWN0TmFtZSgiUGRwUmVzdDp0eXBlPVBkcFJlc3RNb25pdG9yIiksICJwb2xpY3lNYXAiKTsKIAkJCWpteENvbm5lY3Rpb24uY2xvc2UoKTsKLQkJCWxvZ2dlci5kZWJ1ZygicG9saWN5TWFwIHZhbHVlIHJldHJlaXZlZDogIiArIG8pOworCQkJcG9saWN5TG9nZ2VyLmRlYnVnKCJwb2xpY3lNYXAgdmFsdWUgcmV0cmVpdmVkOiAiICsgbyk7CiAJCQlyZXR1cm4gIG87CiAJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIk1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOwogCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIkF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uIGZvciBwb2xpY3lNYXAiICk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uIGZvciBwb2xpY3lNYXAiICk7CiAJCX0gY2F0Y2ggKEF0dHJpYnV0ZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsJCQotCQkJbG9nZ2VyLmVycm9yKCJBdHRyaWJ1dGVOb3RGb3VuZEV4Y2VwdGlvbiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiQXR0cmlidXRlTm90Rm91bmRFeGNlcHRpb24gZm9yIEpNWCBjb25uZWN0aW9uIik7CiAJCX0gY2F0Y2ggKEluc3RhbmNlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJJbnN0YW5jZU5vdEZvdW5kRXhjZXB0aW9uICIgKyBob3N0ICsgIiBmb3IgSk1YIGNvbm5lY3Rpb24iKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcigiSW5zdGFuY2VOb3RGb3VuZEV4Y2VwdGlvbiAiICsgaG9zdCArICIgZm9yIEpNWCBjb25uZWN0aW9uIik7CiAJCX0gY2F0Y2ggKE1hbGZvcm1lZE9iamVjdE5hbWVFeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJNYWxmb3JtZWRPYmplY3ROYW1lRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJNYWxmb3JtZWRPYmplY3ROYW1lRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOwogCQl9IGNhdGNoIChNQmVhbkV4Y2VwdGlvbiBlKSB7Ci0JCQlsb2dnZXIuZXJyb3IoIk1CZWFuRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOwotCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIk1CZWFuRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CiAJCX0gY2F0Y2ggKFJlZmxlY3Rpb25FeGNlcHRpb24gZSkgewotCQkJbG9nZ2VyLmVycm9yKCJSZWZsZWN0aW9uRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOworCQkJcG9saWN5TG9nZ2VyLmVycm9yKCJSZWZsZWN0aW9uRXhjZXB0aW9uIGZvciBKTVggY29ubmVjdGlvbiIpOwogCQl9CiAJCQogCQlyZXR1cm4gbnVsbDsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuamF2YQppbmRleCBlZjQzMTM1Li5mOTU5NDk1IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvRGVjaXNpb25Qb2xpY3lDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0RlY2lzaW9uUG9saWN5Q29udHJvbGxlci5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBwYWNrYWdlIG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsZXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwpAQCAtMzksNyArNDAsNiBAQAogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc3RlcmVvdHlwZS5Db250cm9sbGVyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWFwcGluZzsKIAotaW1wb3J0IG9hc2lzLm5hbWVzLnRjLnhhY21sLl8zXzAuY29yZS5zY2hlbWEud2RfMTcuQWR2aWNlRXhwcmVzc2lvblR5cGU7CiBpbXBvcnQgb2FzaXMubmFtZXMudGMueGFjbWwuXzNfMC5jb3JlLnNjaGVtYS53ZF8xNy5BZHZpY2VFeHByZXNzaW9uc1R5cGU7CiBpbXBvcnQgb2FzaXMubmFtZXMudGMueGFjbWwuXzNfMC5jb3JlLnNjaGVtYS53ZF8xNy5BbGxPZlR5cGU7CiBpbXBvcnQgb2FzaXMubmFtZXMudGMueGFjbWwuXzNfMC5jb3JlLnNjaGVtYS53ZF8xNy5BbnlPZlR5cGU7CkBAIC01OCw3ICs1OCw3IEBACiBAQ29udHJvbGxlcgogQFJlcXVlc3RNYXBwaW5nKCIvIikKIHB1YmxpYyBjbGFzcyBEZWNpc2lvblBvbGljeUNvbnRyb2xsZXIgZXh0ZW5kcyBSZXN0cmljdGVkQmFzZUNvbnRyb2xsZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihEZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBwb2xpY3lMb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihEZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOwogCQogCXB1YmxpYyBEZWNpc2lvblBvbGljeUNvbnRyb2xsZXIoKXt9CiAKQEAgLTg4LDYgKzg4LDcgQEAKIAkJCXRyeXsKIAkJCQlkZXNjcmlwdGlvbiA9IHBvbGljeS5nZXREZXNjcmlwdGlvbigpLnN1YnN0cmluZygwLCBwb2xpY3kuZ2V0RGVzY3JpcHRpb24oKS5pbmRleE9mKCJAQ3JlYXRlZEJ5OiIpKTsKIAkJCX1jYXRjaChFeGNlcHRpb24gZSl7CisJCQkJcG9saWN5TG9nZ2VyLmluZm8oIkdlbmVyYWwgZXJyb3IiLCBlKTsKIAkJCQlkZXNjcmlwdGlvbiA9IHBvbGljeS5nZXREZXNjcmlwdGlvbigpOwogCQkJfQogCQkJcG9saWN5QWRhcHRlci5zZXRQb2xpY3lEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CkBAIC0xNDEsMjMgKzE0MiwyOCBAQAogCQkJCQkJfQogCQkJCQl9CiAJCQkJCS8vIFNldHRpbmcgcmFpbnkgZGF5IGF0dHJpYnV0ZXMgdG8gdGhlIHBhcmFtZXRlcnMgb2JqZWN0IGlmIHRoZXkgZXhpc3QgCisJCQkJCWJvb2xlYW4gcmFpbnkgPSBmYWxzZTsKIAkJCQkJaWYoIWF0dHJpYnV0ZUxpc3QuaXNFbXB0eSgpKSB7CiAJCQkJCQlmb3IoaW50IGk9MDsgaTxhdHRyaWJ1dGVMaXN0LnNpemUoKSA7IGkrKyl7CiAJCQkJCQkJTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSAoTWFwPFN0cmluZyxTdHJpbmc+KWF0dHJpYnV0ZUxpc3QuZ2V0KGkpOwogCQkJCQkJCWlmKG1hcC5nZXQoImtleSIpLmVxdWFscygiV29ya1N0ZXAiKSl7CiAJCQkJCQkJCXJhaW55ZGF5UGFyYW1zLnNldFdvcmtzdGVwKG1hcC5nZXQoInZhbHVlIikpOworCQkJCQkJCQlyYWlueT10cnVlOwogCQkJCQkJCX1lbHNlIGlmKG1hcC5nZXQoImtleSIpLmVxdWFscygiQkJfSUQiKSl7CiAJCQkJCQkJCXJhaW55ZGF5UGFyYW1zLnNldEJiaWQobWFwLmdldCgidmFsdWUiKSk7CisJCQkJCQkJCXJhaW55PXRydWU7CiAJCQkJCQkJfWVsc2UgaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJTZXJ2aWNlVHlwZSIpKXsKIAkJCQkJCQkJcmFpbnlkYXlQYXJhbXMuc2V0U2VydmljZVR5cGUobWFwLmdldCgidmFsdWUiKSk7CisJCQkJCQkJCXJhaW55PXRydWU7CiAJCQkJCQkJfWVsc2UgaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJWTkZUeXBlIikpewogCQkJCQkJCQlyYWlueWRheVBhcmFtcy5zZXRWbmZUeXBlKG1hcC5nZXQoInZhbHVlIikpOworCQkJCQkJCQlyYWlueT10cnVlOwogCQkJCQkJCX0KIAkJCQkJCX0JCiAJCQkJCX0KLQkJCQkJCi0JCQkJCXBvbGljeUFkYXB0ZXIuc2V0UnVsZVByb3ZpZGVyKCJSYWlueV9EYXkiKTsKLQorCQkJCQlpZihyYWlueSl7CisJCQkJCQlwb2xpY3lBZGFwdGVyLnNldFJ1bGVQcm92aWRlcigiUmFpbnlfRGF5Iik7CisJCQkJCX0KIAkJCQl9CiAKIAkJCQlMaXN0PE9iamVjdD4gcnVsZUxpc3QgPSBwb2xpY3kuZ2V0Q29tYmluZXJQYXJhbWV0ZXJzT3JSdWxlQ29tYmluZXJQYXJhbWV0ZXJzT3JWYXJpYWJsZURlZmluaXRpb24oKTsKQEAgLTE2NSw3ICsxNzEsNyBAQAogCQkJCWZvciAoT2JqZWN0IG9iamVjdCA6IHJ1bGVMaXN0KSB7CiAJCQkJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBWYXJpYWJsZURlZmluaXRpb25UeXBlKSB7CiAJCQkJCQlWYXJpYWJsZURlZmluaXRpb25UeXBlIHZhcmlhYmxlRGVmaW5pdGlvblR5cGUgPSAoVmFyaWFibGVEZWZpbml0aW9uVHlwZSkgb2JqZWN0OwotCQkJCQkJTWFwPFN0cmluZywgU3RyaW5nPiBzZXR0aW5ncyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCQkJCQkJTWFwPFN0cmluZywgU3RyaW5nPiBzZXR0aW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKIAkJCQkJCXNldHRpbmdzLnB1dCgia2V5IiwgdmFyaWFibGVEZWZpbml0aW9uVHlwZS5nZXRWYXJpYWJsZUlkKCkpOwogCQkJCQkJSkFYQkVsZW1lbnQ8QXR0cmlidXRlVmFsdWVUeXBlPiBhdHRyaWJ1dGVWYWx1ZVR5cGVFbGVtZW50ID0gKEpBWEJFbGVtZW50PEF0dHJpYnV0ZVZhbHVlVHlwZT4pIHZhcmlhYmxlRGVmaW5pdGlvblR5cGUuZ2V0RXhwcmVzc2lvbigpOwogCQkJCQkJaWYgKGF0dHJpYnV0ZVZhbHVlVHlwZUVsZW1lbnQgIT0gbnVsbCkgewpAQCAtMjAxLDYgKzIwNywxMCBAQAogCQkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldEFjdG9yKG1hcC5nZXQoInZhbHVlIikpOwogCQkJCQkJCQkJCX1lbHNlIGlmKG1hcC5nZXQoImtleSIpLmVxdWFscygicmVjaXBlIikpewogCQkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldFJlY2lwZShtYXAuZ2V0KCJ2YWx1ZSIpKTsKKwkJCQkJCQkJCQl9ZWxzZSBpZihtYXAuZ2V0KCJrZXkiKS5lcXVhbHMoInRhcmdldHMiKSl7CisJCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0VGFyZ2V0cyhBcnJheXMuYXNMaXN0KG1hcC5nZXQoInZhbHVlIikuc3BsaXQoIlxcfCIpKSk7CisJCQkJCQkJCQkJfWVsc2UgaWYobWFwLmdldCgia2V5IikuZXF1YWxzKCJjbG5hbWUiKSl7CisJCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0Q2xuYW1lKG1hcC5nZXQoInZhbHVlIikpOwogCQkJCQkJCQkJCX0KIAkJCQkJCQkJCX0KIAkJCQkJCQkJCUFwcGx5VHlwZSBhcHBseSA9ICgoQXBwbHlUeXBlKSgoQXBwbHlUeXBlKWRlY2lzaW9uQXBwbHkuZ2V0RXhwcmVzc2lvbigpLmdldCgwKS5nZXRWYWx1ZSgpKS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpOwpAQCAtMjE1LDkgKzIyNSwxMSBAQAogCQkJCQkJCQkJCX0KIAkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldEJsYWNrTGlzdChibGFja0xpc3QpOwogCQkJCQkJCQkJfWVsc2V7Ci0JCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRMaW1pdCgoKEF0dHJpYnV0ZVZhbHVlVHlwZSkoKEFwcGx5VHlwZSlkZWNpc2lvbkFwcGx5LmdldEV4cHJlc3Npb24oKS5nZXQoMSkuZ2V0VmFsdWUoKSkuZ2V0RXhwcmVzc2lvbigpLmdldCgxKS5nZXRWYWx1ZSgpKS5nZXRDb250ZW50KCkuZ2V0KDApLnRvU3RyaW5nKCkpOwotCQkJCQkJCQkJCVN0cmluZyB0aW1lV2luZG93ID0gKChBdHRyaWJ1dGVEZXNpZ25hdG9yVHlwZSkoKEFwcGx5VHlwZSkoKEFwcGx5VHlwZSlkZWNpc2lvbkFwcGx5LmdldEV4cHJlc3Npb24oKS5nZXQoMSkuZ2V0VmFsdWUoKSkuZ2V0RXhwcmVzc2lvbigpLmdldCgwKS5nZXRWYWx1ZSgpKS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldElzc3VlcigpOwotCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0VGltZVdpbmRvdyh0aW1lV2luZG93LnN1YnN0cmluZyh0aW1lV2luZG93Lmxhc3RJbmRleE9mKCI6IikrMSkpOworCQkJCQkJCQkJCUFwcGx5VHlwZSB0aW1lV2luZG93U2VjdGlvbiA9IChBcHBseVR5cGUpKChBcHBseVR5cGUpZGVjaXNpb25BcHBseS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldEV4cHJlc3Npb24oKS5nZXQoMSkuZ2V0VmFsdWUoKTsKKwkJCQkJCQkJCQl5YW1sUGFyYW1zLnNldExpbWl0KCgoQXR0cmlidXRlVmFsdWVUeXBlKXRpbWVXaW5kb3dTZWN0aW9uLmdldEV4cHJlc3Npb24oKS5nZXQoMSkuZ2V0VmFsdWUoKSkuZ2V0Q29udGVudCgpLmdldCgwKS50b1N0cmluZygpKTsKKwkJCQkJCQkJCQlTdHJpbmcgdGltZVdpbmRvdyA9ICgoQXR0cmlidXRlRGVzaWduYXRvclR5cGUpKChBcHBseVR5cGUpdGltZVdpbmRvd1NlY3Rpb24uZ2V0RXhwcmVzc2lvbigpLmdldCgwKS5nZXRWYWx1ZSgpKS5nZXRFeHByZXNzaW9uKCkuZ2V0KDApLmdldFZhbHVlKCkpLmdldElzc3VlcigpOworCQkJCQkJCQkJCXlhbWxQYXJhbXMuc2V0VGltZVVuaXRzKHRpbWVXaW5kb3cuc3Vic3RyaW5nKHRpbWVXaW5kb3cubGFzdEluZGV4T2YoJzonKSsxKSk7CisJCQkJCQkJCQkJeWFtbFBhcmFtcy5zZXRUaW1lV2luZG93KHRpbWVXaW5kb3cuc3Vic3RyaW5nKHRpbWVXaW5kb3cuaW5kZXhPZigiOnR3OiIpKzQsdGltZVdpbmRvdy5sYXN0SW5kZXhPZignOicpKSk7CiAJCQkJCQkJCQl9CiAJCQkJCQkJCQlwb2xpY3lBZGFwdGVyLnNldFlhbWxwYXJhbXMoeWFtbFBhcmFtcyk7CiAJCQkJCQkJCQlwb2xpY3lBZGFwdGVyLnNldEF0dHJpYnV0ZXMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkpOwpAQCAtMjI4LDcgKzI0MCw3IEBACiAJCQkJCQkJCXByZVBvcHVsYXRlRGVjaXNpb25Db21wb3VuZFJ1bGVBbGdvcml0aG0oaW5kZXgsIGRlY2lzaW9uQXBwbHkpOwogCQkJCQkJCQlwb2xpY3lBZGFwdGVyLnNldFJ1bGVBbGdvcml0aG1zY2hvaWNlcyhydWxlQWxnb3JpdGhtTGlzdCk7CiAJCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmICgoKFJ1bGVUeXBlKSBvYmplY3QpLmdldEVmZmVjdCgpLmVxdWFscyhFZmZlY3RUeXBlLlBFUk1JVCkpIHsKKwkJCQkJCX0gZWxzZSBpZihwb2xpY3lBZGFwdGVyLmdldFJ1bGVQcm92aWRlcigpIT1udWxsICYmIHBvbGljeUFkYXB0ZXIuZ2V0UnVsZVByb3ZpZGVyKCkuZXF1YWxzKCJSYWlueV9EYXkiKSYmICgoUnVsZVR5cGUpIG9iamVjdCkuZ2V0RWZmZWN0KCkuZXF1YWxzKEVmZmVjdFR5cGUuUEVSTUlUKSkgewogCQkJCQkJCQogCQkJCQkJCVRhcmdldFR5cGUgcnVsZVRhcmdldCA9ICgoUnVsZVR5cGUpIG9iamVjdCkuZ2V0VGFyZ2V0KCk7CiAJCQkJCQkJQWR2aWNlRXhwcmVzc2lvbnNUeXBlIGFkdmljZUV4cHJlc3Npb24gPSAoKFJ1bGVUeXBlKSBvYmplY3QpLmdldEFkdmljZUV4cHJlc3Npb25zKCk7CkBAIC0zMDMsOCArMzE1LDggQEAKIAkJTGlzdDxKQVhCRWxlbWVudDw/Pj4gamF4YkRlY2lzaW9uVHlwZXMgPSBkZWNpc2lvbkFwcGx5LmdldEV4cHJlc3Npb24oKTsKIAkJZm9yIChKQVhCRWxlbWVudDw/PiBqYXhiRWxlbWVudCA6IGpheGJEZWNpc2lvblR5cGVzKSB7CiAJCQkvLyBJZiBUaGVyZSBpcyBBdHRyaWJ1dGUgVmFsdWUgdW5kZXIgRGVjaXNpb24gVHlwZSB0aGF0IG1lYW5zIHdlIGNhbWUgdG8gdGhlIGZpbmFsIGNoaWxkCi0JCQlpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKLQkJCQlsb2dnZXIuZGVidWcoIlByZXBvcHVsYXRpbmcgcnVsZSBhbGdvaXJ0aG06ICIgKyBpbmRleCk7CisJCQlpZiAocG9saWN5TG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZGVidWcoIlByZXBvcHVsYXRpbmcgcnVsZSBhbGdvaXJ0aG06ICIgKyBpbmRleCk7CiAJCQl9CiAJCQkvLyBDaGVjayB0byBzZWUgaWYgQXR0cmlidXRlIFZhbHVlIGV4aXN0cywgaWYgeWVzIHRoZW4gaXQgaXMgbm90IGEgY29tcG91bmQgcnVsZQogCQkJaWYoamF4YkVsZW1lbnQuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIEF0dHJpYnV0ZVZhbHVlVHlwZSkgewpAQCAtMzIxLDggKzMzMyw4IEBACiAJCQkJaW5kZXggPSBwcmVQb3B1bGF0ZURlY2lzaW9uQ29tcG91bmRSdWxlQWxnb3JpdGhtKGluZGV4LCBpbm5lckRlY2lzaW9uQXBwbHkpOwogCQkJfQogCQkJLy8gUG9wdWxhdGUgY29tYm8gYm94Ci0JCQlpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKLQkJCQlsb2dnZXIuZGVidWcoIlByZXBvcHVsYXRpbmcgQ29tcG91bmQgcnVsZSBhbGdvcml0aG06ICIgKyBpbmRleCk7CisJCQlpZiAocG9saWN5TG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZGVidWcoIlByZXBvcHVsYXRpbmcgQ29tcG91bmQgcnVsZSBhbGdvcml0aG06ICIgKyBpbmRleCk7CiAJCQl9CiAJCQlNYXA8U3RyaW5nLCBTdHJpbmc+IHJ1bGUgPSBuZXcgSGFzaE1hcDw+KCk7CiAJCQlmb3IgKFN0cmluZyBrZXkgOiBQb2xpY3lDb250cm9sbGVyLmdldERyb3BEb3duTWFwKCkua2V5U2V0KCkpIHsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9QRFBDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUERQQ29udHJvbGxlci5qYXZhCmluZGV4IDJlOTc3MWUuLjZlZjcxNjUgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9QRFBDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BEUENvbnRyb2xsZXIuamF2YQpAQCAtNTksNyArNTksNyBAQAogQENvbnRyb2xsZXIKIEBSZXF1ZXN0TWFwcGluZyh7Ii8ifSkKIHB1YmxpYyBjbGFzcyBQRFBDb250cm9sbGVyIGV4dGVuZHMgUmVzdHJpY3RlZEJhc2VDb250cm9sbGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCAgTG9nZ2VyIGxvZ2dlciA9IEZsZXhMb2dnZXIuZ2V0TG9nZ2VyKFBEUENvbnRyb2xsZXIuY2xhc3MpOworCXByaXZhdGUgc3RhdGljIGZpbmFsICBMb2dnZXIgcG9saWN5TG9nZ2VyID0gRmxleExvZ2dlci5nZXRMb2dnZXIoUERQQ29udHJvbGxlci5jbGFzcyk7CiAKIAlwcm90ZWN0ZWQgTGlzdDxFY29tcFBEUEdyb3VwPiBncm91cHMgPSBDb2xsZWN0aW9ucy5zeW5jaHJvbml6ZWRMaXN0KG5ldyBBcnJheUxpc3Q8RWNvbXBQRFBHcm91cD4oKSk7CiAJcHJpdmF0ZSBQRFBHcm91cENvbnRhaW5lciBjb250YWluZXI7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAkJCQl9CiAJCQl9IGNhdGNoIChQQVBFeGNlcHRpb24gZSkgewogCQkJCVN0cmluZyBtZXNzYWdlID0gIlVuYWJsZSB0byByZXRyaWV2ZSBHcm91cHMgZnJvbSBzZXJ2ZXI6ICIgKyBlOwotCQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1NZU1RFTV9FUlJPUisiUGFwIEVuZ2luZSBpcyBOdWxsIiArIG1lc3NhZ2UpOworCQkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX1NZU1RFTV9FUlJPUisiUGFwIEVuZ2luZSBpcyBOdWxsIiArIG1lc3NhZ2UpOwogCQkJfQogCQl9CiAJfQpAQCAtMTY3LDEyICsxNjcsMTIgQEAKIAkJCXJlc3BvbnNlLmdldFdyaXRlcigpLndyaXRlKGoudG9TdHJpbmcoKSk7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgcmV0cmlldmluZyB0aGUgUERQIEdyb3VwIGRhdGEiICsgZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIHJldHJpZXZpbmcgdGhlIFBEUCBHcm91cCBkYXRhIiArIGUpOwogCQl9CiAJfQogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BkcF9Hcm91cC9zYXZlX3BkcF9ncm91cCJ9LCBtZXRob2Q9e29yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXF1ZXN0TWV0aG9kLlBPU1R9KQotCXB1YmxpYyBNb2RlbEFuZFZpZXcgc2F2ZVBEUEdyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9ueworCXB1YmxpYyB2b2lkIHNhdmVQRFBHcm91cChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CiAJCXRyeSB7CiAJCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwogCQkJUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gZ2V0UG9saWN5Q29udHJvbGxlckluc3RhbmNlKCk7CkBAIC0xODksNyArMTg5LDcgQEAKIAogCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKIAkJCQlTdHJpbmcgbWVzc2FnZSA9ICJVbmFibGUgdG8gY3JlYXRlIEdyb3VwLiAgUmVhc29uOlxuIiArIGUuZ2V0TWVzc2FnZSgpOwotCQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgY3JlYXRpbmcgdGhlIFBEUCBHcm91cCIgKyBtZXNzYWdlKTsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIGNyZWF0aW5nIHRoZSBQRFAgR3JvdXAiICsgbWVzc2FnZSArIGUpOwogCQkJfQogCiAKQEAgLTIwMiwyMSArMjAyLDIzIEBACiAJCQlKc29uTWVzc2FnZSBtc2cgPSBuZXcgSnNvbk1lc3NhZ2UobWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhncm91cHMpKTsKIAkJCUpTT05PYmplY3QgaiA9IG5ldyBKU09OT2JqZWN0KG1zZyk7CiAJCQlvdXQud3JpdGUoai50b1N0cmluZygpKTsKLQotCQkJcmV0dXJuIG51bGw7CiAJCX0KIAkJY2F0Y2ggKEV4Y2VwdGlvbiBlKXsKLQkJCWxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgU2F2aW5nIHRoZSBQRFAgR3JvdXAiICsgZSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIFNhdmluZyB0aGUgUERQIEdyb3VwIiArIGUpOwogCQkJcmVzcG9uc2Uuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7Ci0JCQlyZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOwotCQkJUHJpbnRXcml0ZXIgb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7Ci0JCQlvdXQud3JpdGUoZS5nZXRNZXNzYWdlKCkpOworCQkJUHJpbnRXcml0ZXIgb3V0ID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKKwkJCQlvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKKwkJCQlvdXQud3JpdGUoZS5nZXRNZXNzYWdlKCkpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSBTYXZpbmcgdGhlIFBEUCBHcm91cCIgKyBlMSk7CisJCQl9CiAJCX0KLQkJcmV0dXJuIG51bGw7CiAJfQogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BkcF9Hcm91cC9yZW1vdmVfcGRwX2dyb3VwIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyByZW1vdmVQRFBHcm91cChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcHVibGljIHZvaWQgcmVtb3ZlUERQR3JvdXAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpewogCQl0cnl7CiAJCQlPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwogCQkJbWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7CkBAIC0yNDAsMjEgKzI0MiwyMyBAQAogCQkJSnNvbk1lc3NhZ2UgbXNnID0gbmV3IEpzb25NZXNzYWdlKG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZ3JvdXBzKSk7CiAJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdChtc2cpOwogCQkJb3V0LndyaXRlKGoudG9TdHJpbmcoKSk7Ci0KLQkJCXJldHVybiBudWxsOwogCQl9CiAJCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIFJlbW92aW5nIHRoZSBQRFAgR3JvdXAiICsgZSk7Ci0JCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7Ci0JCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQkJCW91dC53cml0ZShlLmdldE1lc3NhZ2UoKSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIFJlbW92aW5nIHRoZSBQRFAgR3JvdXAiICsgZSk7CisJCQlQcmludFdyaXRlciBvdXQ7CisJCQl0cnkgeworCQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOworCQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7CisJCQkJb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisJCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiKyBlMSk7CisJCQl9CiAJCX0KLQkJcmV0dXJuIG51bGw7CiAJfQogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BkcF9Hcm91cC9zYXZlX3BkcFRvZ3JvdXAifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgTW9kZWxBbmRWaWV3IHNhdmVQRFBUb0dyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9ueworCXB1YmxpYyB2b2lkIHNhdmVQRFBUb0dyb3VwKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKXsKIAkJdHJ5IHsKIAkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKQEAgLTI3Myw3ICsyNzcsNyBAQAogCQkJCX0KIAkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAJCQkJU3RyaW5nIG1lc3NhZ2UgPSAiVW5hYmxlIHRvIGNyZWF0ZSBHcm91cC4gIFJlYXNvbjpcbiIgKyBlLmdldE1lc3NhZ2UoKTsKLQkJCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIENyZWF0aW5nIFBkcCBpbiBQRFAgR3JvdXAiICsgbWVzc2FnZSk7CisJCQkJcG9saWN5TG9nZ2VyLmVycm9yKFhBQ01MRXJyb3JDb25zdGFudHMuRVJST1JfREFUQV9JU1NVRSsiRXJyb3IgT2NjdXJlZCB3aGlsZSBDcmVhdGluZyBQZHAgaW4gUERQIEdyb3VwIiArIG1lc3NhZ2UgKyBlKTsKIAkJCX0KIAogCkBAIC0yODYsMjEgKzI5MCwyMyBAQAogCQkJSnNvbk1lc3NhZ2UgbXNnID0gbmV3IEpzb25NZXNzYWdlKG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZ3JvdXBzKSk7CiAJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdChtc2cpOwogCQkJb3V0LndyaXRlKGoudG9TdHJpbmcoKSk7Ci0KLQkJCXJldHVybiBudWxsOwogCQl9CiAJCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIENyZWF0aW5nIFBkcCBpbiBQRFAgR3JvdXAiICsgZSk7Ci0JCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7Ci0JCQlQcmludFdyaXRlciBvdXQgPSByZXNwb25zZS5nZXRXcml0ZXIoKTsKLQkJCW91dC53cml0ZShlLmdldE1lc3NhZ2UoKSk7CisJCQlwb2xpY3lMb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIENyZWF0aW5nIFBkcCBpbiBQRFAgR3JvdXAiICsgZSk7CisJCQlQcmludFdyaXRlciBvdXQ7CisJCQl0cnkgeworCQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOworCQkJCXJlcXVlc3Quc2V0Q2hhcmFjdGVyRW5jb2RpbmcoIlVURi04Iik7CisJCQkJb3V0ID0gcmVzcG9uc2UuZ2V0V3JpdGVyKCk7CisJCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJCXBvbGljeUxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiKyBlMSk7CisJCQl9CiAJCX0KLQkJcmV0dXJuIG51bGw7CiAJfQogCiAJQFJlcXVlc3RNYXBwaW5nKHZhbHVlPXsiL3BkcF9Hcm91cC9yZW1vdmVfcGRwRnJvbUdyb3VwIn0sIG1ldGhvZD17b3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNZXRob2QuUE9TVH0pCi0JcHVibGljIE1vZGVsQW5kVmlldyByZW1vdmVQRFBGcm9tR3JvdXAoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24geworCXB1YmxpYyB2b2lkIHJlbW92ZVBEUEZyb21Hcm91cChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSl7CiAJCXRyeXsKIAkJCU9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CiAJCQltYXBwZXIuY29uZmlndXJlKERlc2VyaWFsaXphdGlvbkZlYXR1cmUuRkFJTF9PTl9VTktOT1dOX1BST1BFUlRJRVMsIGZhbHNlKTsKQEAgLTMyMCwxNyArMzI2LDE5IEBACiAJCQlTdHJpbmcgcmVzcG9uc2VTdHJpbmcgPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKGdyb3Vwcyk7CiAJCQlKU09OT2JqZWN0IGogPSBuZXcgSlNPTk9iamVjdCgie3BkcEVudGl0eURhdGFzOiAiICsgcmVzcG9uc2VTdHJpbmcgKyAifSIpOwogCQkJb3V0LndyaXRlKGoudG9TdHJpbmcoKSk7Ci0KLQkJCXJldHVybiBudWxsOwogCQl9CiAJCWNhdGNoIChFeGNlcHRpb24gZSl7Ci0JCQlsb2dnZXIuZXJyb3IoWEFDTUxFcnJvckNvbnN0YW50cy5FUlJPUl9EQVRBX0lTU1VFKyJFcnJvciBPY2N1cmVkIHdoaWxlIFJlbW92aW5nIFBkcCBmcm9tIFBEUCBHcm91cCIgKyBlKTsKLQkJCXJlc3BvbnNlLnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOwotCQkJcmVxdWVzdC5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKLQkJCVByaW50V3JpdGVyIG91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOwotCQkJb3V0LndyaXRlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCXBvbGljeUxvZ2dlci5lcnJvcihYQUNNTEVycm9yQ29uc3RhbnRzLkVSUk9SX0RBVEFfSVNTVUUrIkVycm9yIE9jY3VyZWQgd2hpbGUgUmVtb3ZpbmcgUGRwIGZyb20gUERQIEdyb3VwIiArIGUpOworCQkJUHJpbnRXcml0ZXIgb3V0OworCQkJdHJ5IHsKKwkJCQlyZXNwb25zZS5zZXRDaGFyYWN0ZXJFbmNvZGluZygiVVRGLTgiKTsKKwkJCQlyZXF1ZXN0LnNldENoYXJhY3RlckVuY29kaW5nKCJVVEYtOCIpOworCQkJCW91dCA9IHJlc3BvbnNlLmdldFdyaXRlcigpOworCQkJCW91dC53cml0ZShlLmdldE1lc3NhZ2UoKSk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCQlwb2xpY3lMb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIisgZTEpOworCQkJfQogCQl9Ci0JCXJldHVybiBudWxsOwogCX0KIAogCXByaXZhdGUgUG9saWN5Q29udHJvbGxlciBnZXRQb2xpY3lDb250cm9sbGVySW5zdGFuY2UoKXsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lFeHBvcnRBbmRJbXBvcnRDb250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5RXhwb3J0QW5kSW1wb3J0Q29udHJvbGxlci5qYXZhCmluZGV4IGJmMmExNDguLjhmZTJkNDkgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9Qb2xpY3lFeHBvcnRBbmRJbXBvcnRDb250cm9sbGVyLmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIuamF2YQpAQCAtOTksNiArOTksMTQgQEAKIAkJdGhpcy5wb2xpY3lDb250cm9sbGVyID0gcG9saWN5Q29udHJvbGxlcjsKIAl9CiAKKwlwdWJsaWMgc3RhdGljIENvbW1vbkNsYXNzRGFvIGdldENvbW1vbkNsYXNzRGFvKCkgeworCQlyZXR1cm4gY29tbW9uQ2xhc3NEYW87CisJfQorCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbW1vbkNsYXNzRGFvKENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvKSB7CisJCVBvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIuY29tbW9uQ2xhc3NEYW8gPSBjb21tb25DbGFzc0RhbzsKKwl9CisKIAlAQXV0b3dpcmVkCiAJcHJpdmF0ZSBQb2xpY3lFeHBvcnRBbmRJbXBvcnRDb250cm9sbGVyKENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvKXsKIAkJUG9saWN5RXhwb3J0QW5kSW1wb3J0Q29udHJvbGxlci5jb21tb25DbGFzc0RhbyA9IGNvbW1vbkNsYXNzRGFvOwpAQCAtMTA3LDcgKzExNSw3IEBACiAJcHVibGljIFBvbGljeUV4cG9ydEFuZEltcG9ydENvbnRyb2xsZXIoKXt9CiAKIAlAUmVxdWVzdE1hcHBpbmcodmFsdWU9eyIvcG9saWN5X2Rvd25sb2FkL2V4cG9ydFBvbGljeS5odG0ifSwgbWV0aG9kPXtvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVxdWVzdE1ldGhvZC5QT1NUfSkKLQlwdWJsaWMgdm9pZCBFeHBvcnRQb2xpY3koSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb257CisJcHVibGljIHZvaWQgZXhwb3J0UG9saWN5KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uewogCQl0cnl7CiAJCQlTdHJpbmcgZmlsZSA9IG51bGw7CiAJCQlzZWxlY3RlZFBvbGljeSA9IG5ldyBBcnJheUxpc3Q8PigpOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL1BvbGljeVZhbGlkYXRpb25Db250cm9sbGVyLmphdmEgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5VmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCBjYzY5MDNiLi4wZjhiMzc5IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5VmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvUG9saWN5VmFsaWRhdGlvbkNvbnRyb2xsZXIuamF2YQpAQCAtNDAxLDEwICs0MDEsOCBAQAogCQkJCQkJCQkJaW50IGVuZE51bSA9IEludGVnZXIucGFyc2VJbnQodGVtcFN0cmluZ1sxXSk7CiAJCQkJCQkJCQlTdHJpbmcgcmV0dXJuU3RyaW5nID0gIkludmFsaWQgUmFuZ2U6IiArIHJNYXAuZ2V0S2V5KCkgKyAiIG11c3QgYmUgYmV0d2VlbiAiIAogCQkJCQkJCQkJCQkrIHN0YXJ0TnVtICsgIiAtICIgICsgZW5kTnVtICsgIiwiOwotCQkJCQkJCQkJaWYgKGlzSW50ZWdlcih2YWx1ZS5yZXBsYWNlKCJcIiIsICIiKSkpeworCQkJCQkJCQkJaWYgKFBvbGljeVV0aWxzLmlzSW50ZWdlcih2YWx1ZS5yZXBsYWNlKCJcIiIsICIiKSkpewogCQkJCQkJCQkJCWludCByZXN1bHQgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlLnJlcGxhY2UoIlwiIiwgIiIpKTsKLQotCiAJCQkJCQkJCQkJaWYgKHJlc3VsdCA8IHN0YXJ0TnVtIHx8IHJlc3VsdCA+IGVuZE51bSl7CiAJCQkJCQkJCQkJCXJlc3BvbnNlU3RyaW5nLmFwcGVuZChyZXR1cm5TdHJpbmcpOwkJCQkJCQkJCQogCQkJCQkJCQkJCQl2YWxpZCA9IGZhbHNlOwpAQCAtNDkyLDEzICs0OTAsMjAgQEAKIAkJCQkJCQlpZihwb2xpY3lEYXRhLmdldFlhbWxwYXJhbXMoKS5nZXRMaW1pdCgpPT1udWxsKXsKIAkJCQkJCQkJcmVzcG9uc2VTdHJpbmcuYXBwZW5kKCIgR3VhcmQgUGFyYW1zIDxiPkxpbWl0PC9iPiBpcyBSZXF1aXJlZCAiICsgIjxicj4iKTsKIAkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKLQkJCQkJCQl9ZWxzZSBpZighaXNJbnRlZ2VyKHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldExpbWl0KCkpKXsKKwkJCQkJCQl9ZWxzZSBpZighUG9saWN5VXRpbHMuaXNJbnRlZ2VyKHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldExpbWl0KCkpKXsKIAkJCQkJCQkJcmVzcG9uc2VTdHJpbmcuYXBwZW5kKCIgR3VhcmQgUGFyYW1zIDxiPkxpbWl0PC9iPiBTaG91bGQgYmUgSW50ZWdlciAiICsgIjxicj4iKTsKIAkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKIAkJCQkJCQl9CiAJCQkJCQkJaWYocG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0VGltZVdpbmRvdygpPT1udWxsKXsKIAkJCQkJCQkJcmVzcG9uc2VTdHJpbmcuYXBwZW5kKCJHdWFyZCBQYXJhbXMgPGI+VGltZSBXaW5kb3c8L2I+IGlzIFJlcXVpcmVkIiArICI8YnI+Iik7CiAJCQkJCQkJCXZhbGlkID0gZmFsc2U7CisJCQkJCQkJfWVsc2UgaWYoIVBvbGljeVV0aWxzLmlzSW50ZWdlcihwb2xpY3lEYXRhLmdldFlhbWxwYXJhbXMoKS5nZXRUaW1lV2luZG93KCkpKXsKKwkJCQkJCQkJcmVzcG9uc2VTdHJpbmcuYXBwZW5kKCIgR3VhcmQgUGFyYW1zIDxiPlRpbWUgV2luZG93PC9iPiBTaG91bGQgYmUgSW50ZWdlciAiICsgIjxicj4iKTsKKwkJCQkJCQkJdmFsaWQgPSBmYWxzZTsKKwkJCQkJCQl9CisJCQkJCQkJaWYocG9saWN5RGF0YS5nZXRZYW1scGFyYW1zKCkuZ2V0VGltZVVuaXRzKCk9PW51bGwpeworCQkJCQkJCQlyZXNwb25zZVN0cmluZy5hcHBlbmQoIkd1YXJkIFBhcmFtcyA8Yj5UaW1lIFVuaXRzPC9iPiBpcyBSZXF1aXJlZCIgKyAiPGJyPiIpOworCQkJCQkJCQl2YWxpZCA9IGZhbHNlOwogCQkJCQkJCX0KIAkJCQkJCX1lbHNlIGlmKCJHVUFSRF9CTF9ZQU1MIi5lcXVhbHMocG9saWN5RGF0YS5nZXRSdWxlUHJvdmlkZXIoKSkpewogCQkJCQkJCWlmKHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldEJsYWNrTGlzdCgpPT1udWxsIHx8IHBvbGljeURhdGEuZ2V0WWFtbHBhcmFtcygpLmdldEJsYWNrTGlzdCgpLmlzRW1wdHkoKSl7CkBAIC02MjMsMTUgKzYyOCw2IEBACiAJCXJldHVybiBudWxsOwogCX0KIAotCXByb3RlY3RlZCBib29sZWFuIGlzSW50ZWdlcihTdHJpbmcgbnVtYmVyKSB7Ci0JCXRyeXsKLQkJCUludGVnZXIucGFyc2VJbnQobnVtYmVyKTsKLQkJfWNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKXsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KIAlwcm90ZWN0ZWQgU3RyaW5nICBlbXB0eVZhbGlkYXRvcihTdHJpbmcgZmllbGQpewogCQlTdHJpbmcgZXJyb3I7CiAJCWlmICgiIi5lcXVhbHMoZmllbGQpIHx8IGZpZWxkLmNvbnRhaW5zKCIgIikgfHwgIWZpZWxkLm1hdGNoZXMoIl5bYS16QS1aMC05X10qJCIpKSB7CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9DU1MvYm9vdHN0cmFwL2RvY3MvYXNzZXRzL2pzL3ZlbmRvci9hdXRvcHJlZml4ZXIuanMgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9DU1MvYm9vdHN0cmFwL2RvY3MvYXNzZXRzL2pzL3ZlbmRvci9hdXRvcHJlZml4ZXIuanMKaW5kZXggMjkxOWY1Zi4uMmNmNTdkMyAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvQ1NTL2Jvb3RzdHJhcC9kb2NzL2Fzc2V0cy9qcy92ZW5kb3IvYXV0b3ByZWZpeGVyLmpzCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL0NTUy9ib290c3RyYXAvZG9jcy9hc3NldHMvanMvdmVuZG9yL2F1dG9wcmVmaXhlci5qcwpAQCAtMTQ3NzgsNyArMTQ3NzgsNyBAQAogCiB2YXIgQ29udGFpbmVyID0gcmVxdWlyZSgiLi9jb250YWluZXIiKTsKIAotLy8gQ1NTIGF0LXJ1bGUgbGlrZSCTdGhpcy5rZXlmcmFtZXMgbmFtZSB7IH2ULgorLy8gQ1NTIGF0LXJ1bGUgbGlrZSDvv710aGlzLmtleWZyYW1lcyBuYW1lIHsgfe+/vS4KIC8vCiAvLyBDYW4gY29udGFpbiBkZWNsYXJhdGlvbnMgKGxpa2UgdGhpcy5mb250LWZhY2Ugb3IgdGhpcy5wYWdlKSBvdCBhbm90aGVyIHJ1bGVzLgogdmFyIEF0UnVsZSA9IChmdW5jdGlvbiAoQ29udGFpbmVyKSB7CkBAIC0xNTQ4Niw3ICsxNTQ4Niw3IEBACiB2YXIgTm9kZSA9IHJlcXVpcmUoIi4vbm9kZSIpOwogdmFyIHZlbmRvciA9IHJlcXVpcmUoIi4vdmVuZG9yIik7CiAKLS8vIENTUyBkZWNsYXJhdGlvbiBsaWtlIJNjb2xvcjogYmxhY2uUIGluIHJ1bGVzCisvLyBDU1MgZGVjbGFyYXRpb24gbGlrZSDvv71jb2xvcjogYmxhY2vvv70gaW4gcnVsZXMKIHZhciBEZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoTm9kZSkgewogICAgIGZ1bmN0aW9uIERlY2xhcmF0aW9uKGRlZmF1bHRzKSB7CiAgICAgICAgIHRoaXMudHlwZSA9ICJkZWNsIjsKQEAgLTE3MjgxLDcgKzE3MjgxLDcgQEAKIHZhciBEZWNsYXJhdGlvbiA9IHJlcXVpcmUoIi4vZGVjbGFyYXRpb24iKTsKIHZhciBsaXN0ID0gcmVxdWlyZSgiLi9saXN0Iik7CiAKLS8vIENTUyBydWxlIGxpa2Ugk2EgeyB9lAorLy8gQ1NTIHJ1bGUgbGlrZSDvv71hIHsgfe+/vQogdmFyIFJ1bGUgPSAoZnVuY3Rpb24gKENvbnRhaW5lcikgewogICAgIGZ1bmN0aW9uIFJ1bGUoZGVmYXVsdHMpIHsKICAgICAgICAgdGhpcy50eXBlID0gInJ1bGUiOwpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvV2luZG93cy9QdXNodGFiV2luZG93L3JlbW92ZUdyb3VwUG9saWNpZXNXaW5kb3cuaHRtbCBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL1dpbmRvd3MvUHVzaHRhYldpbmRvdy9yZW1vdmVHcm91cFBvbGljaWVzV2luZG93Lmh0bWwKaW5kZXggNmViZGE0My4uMGNkM2M1MiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvV2luZG93cy9QdXNodGFiV2luZG93L3JlbW92ZUdyb3VwUG9saWNpZXNXaW5kb3cuaHRtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9XaW5kb3dzL1B1c2h0YWJXaW5kb3cvcmVtb3ZlR3JvdXBQb2xpY2llc1dpbmRvdy5odG1sCkBAIC0xOCw3ICsxOCw3IEBACiAgKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovLS0+CiA8c2NyaXB0IHR5cGU9InRleHQvbmctdGVtcGxhdGUiIGlkPSJyZW1vdmVfUERQR3JvdXBQb2xpY2llc19wb3B1cC5odG1sIj4KLTxkaXYgY2xhc3M9Im1vZGFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMjBweDsgd2lkdGg6IDEwMCU7IGhlaWdodDo4MCUiIGRhdGEtYmFja2Ryb3A9InN0YXRpYyIKKzxkaXYgY2xhc3M9Im1vZGFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMjBweDsgd2lkdGg6IDEwMCUiIGhlaWdodDo4MCUiIGRhdGEtYmFja2Ryb3A9InN0YXRpYyIKIAlkYXRhLWtleWJvYXJkPSJmYWxzZSI+CiAJPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nLWxnIj4KIAk8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EQ0FFTWljcm9TZXJ2aWNlUG9saWN5Q29udHJvbGxlci5qcyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EQ0FFTWljcm9TZXJ2aWNlUG9saWN5Q29udHJvbGxlci5qcwppbmRleCBmYjk2NjQzLi45NGMxYmM5IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZUNvbnRyb2xsZXIvRENBRU1pY3JvU2VydmljZVBvbGljeUNvbnRyb2xsZXIuanMKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVDb250cm9sbGVyL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lDb250cm9sbGVyLmpzCkBAIC0xNjMsMTAgKzE2MywxNCBAQAogCQkJCXZhciBhZGRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCArIDE7CiAJCQkJY2xvbmUuaWQgPSAnJyt2YWx1ZSsnQCcrYWRkRWxlbWVudDsKIAkJCQljbG9uZS52YWx1ZSA9ICcnOworCQkJCWNsb25lLmNsYXNzTmFtZSArPSAnIGNoaWxkX3NpbmdsZSc7IC8vaGVyZSBjbG9uZWQgaXMgc2luZ2xlIGVsZW1lbnQKIAkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2LiIrdmFsdWUpLmFwcGVuZENoaWxkKGNsb25lKTsKIAkJCQlwbGFpbkF0dHJpYnV0ZUtleXMucHVzaCgnJyt2YWx1ZSsnQCcrYWRkRWxlbWVudCk7CiAJCQl9ZWxzZXsKIAkJCQlkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGl2LiIrdmFsdWUrIkAwIik7CisJCQkJCisJCQkJZGl2LmNsYXNzTmFtZSArPSAnIGNoaWxkcmVuX2dyb3VwJzsgLy9oZXJlIGlzIGRpdiB3aXRoIGEgZ3JvdXAgb2YgY2hpbGRyZW4uCisJCQkJCiAJCQkJdmFyIGNoaWxkRWxlbWVudCA9IHBhcmVudEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7CiAJCQkJdmFyIGNvdW50UGFyZW50ID0gcGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudDsKIAkJCQl2YXIgY2hpbGRFbGVtZW50U3RyaW5nID0gY2hpbGRFbGVtZW50LmlubmVySFRNTDsKQEAgLTI5NSw5ICsyOTksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgCXZhciBwbGFpbkF0dHJpYnV0ZUtleXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgCSRzY29wZS5kY2FlTW9kZWxEYXRhID0gZGF0YVswXS5kY2FlTW9kZWxEYXRhOwogICAgICAgICAgICAgICAgICAgICAJJHNjb3BlLmRjYWVKc29uRGF0ZSA9IGRhdGFbMF0uanNvblZhbHVlOworICAgICAgICAgICAgICAgICAgICAJY29uc29sZS5sb2coIiRzY29wZS5kY2FlSnNvbkRhdGU6ICIgKyAkc2NvcGUuZGNhZUpzb25EYXRlKTsJCiAgICAgICAgICAgICAgICAgICAgIAl2YXIgYXR0cmlidXRlcyA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLmF0dHJpYnV0ZXM7CiAgICAgICAgICAgICAgICAgICAgIAl2YXIgcmVmQXR0cmlidXRlcyA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLnJlZl9hdHRyaWJ1dGVzOwotICAgICAgICAgICAgICAgICAgICAJdmFyIHN1YkF0dHJpYnV0ZXMgPSAJJHNjb3BlLmRjYWVNb2RlbERhdGEuc3ViX2F0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgICAgIAl2YXIgc3ViQXR0cmlidXRlcyA9IAkkc2NvcGUuZGNhZU1vZGVsRGF0YS5zdWJfYXR0cmlidXRlczsgICAgICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAgICAgCWNvbnNvbGUubG9nKCJzdWJBdHRyaWJ1dGVzOiAiICsgc3ViQXR0cmlidXRlcyk7CQorICAgICAgICAgICAgICAgICAgICAJCiAgICAgICAgICAgICAgICAgICAgICAgIAl2YXIgZW51bUF0dHJpYnV0ZXMgPSAkc2NvcGUuZGNhZU1vZGVsRGF0YS5lbnVtVmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgICAJdmFyIGFubm90YXRpb24gPSAkc2NvcGUuZGNhZU1vZGVsRGF0YS5hbm5vdGF0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAJdmFyIGRpY3Rpb25hcnkgPSAkc2NvcGUubWljcm9TZXJ2aWNlQXR0cmlidXRlRGljdGlvbmFyeURhdGFzOwpAQCAtNDQyLDExICs0NDksMTEgQEAKIAkgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXlUZXN0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKIAkgICAgfQogCSAgICB2YXIgbGFibGVMaXN0ID0gW107Ci0JICAgIAogCQlmdW5jdGlvbiBkZWNvbnN0cnVjdEpTT04oZGF0YVRlc3QsIGxldmVsICwgbmFtZSkgewogCQkJdmFyIGFycmF5ID0gZmFsc2U7CiAJCQl2YXIgbGFiZWwgPSBsZXZlbDsKIAkJCSB2YXIgc3RyaW5nVmFsdWUgPSAiamF2YS5sYW5nLlN0cmluZyI7CisJCQkgdmFyIHN0cmluZyA9ICJzdHJpbmciOwogCQkJIHZhciBpbnRWYWx1ZSA9ICJpbnQiOwogCQkJIHZhciBkb3VibGUgPSAiZG91YmxlIjsKIAkJCSB2YXIgYm9vbGVhbiA9ICJib29sZWFuIjsKQEAgLTQ1OSw2ICs0NjYsNyBAQAogCQkgICAgZm9yIChrZXkgaW4gZGF0YVRlc3QpIHsKIAkJICAgIAlhcnJheSA9IGlzQXJyYXkoZGF0YVRlc3Rba2V5XSk7CiAJCSAgICAJY29uc29sZS5sb2coa2V5ICwgZGF0YVRlc3Rba2V5XSk7CisJICAgIAkKIAkJICAgIAlpZiAoISFkYXRhVGVzdFtrZXldICYmIHR5cGVvZihkYXRhVGVzdFtrZXldKT09Im9iamVjdCIpIHsKIAkJICAgIAkJaWYgKGFycmF5PT1mYWxzZSAmJiBrZXkhPT0iMCIpewogCQkgICAgCQkJJHNjb3BlLmxhYmVsTGF5b3V0KGxhYmVsLCBrZXksIGFycmF5ICk7IAkJCQpAQCAtNTAwLDExICs1MDgsMzUgQEAKIAkJICAgICAgICAJaWYgKGRhdGFUZXN0W2tleV0uaW5jbHVkZXMoJ3JlcXVpcmVkLXRydWUnKSl7CiAJCSAgICAgICAgCQlpc1JlcXVpcmVkID0gdHJ1ZTsKIAkJICAgICAgICAJfQotCQkgICAgICAgIAljb25zb2xlLmxvZygiYXR0aXJidXRlTGFiZWwgPSAiICsgYXR0aXJidXRlTGFiZWwpOworCQkgICAgCQkKKwkJICAgIAkJdmFyIHN1YkF0dHJpYnV0ZXMgPSAkc2NvcGUuZGNhZU1vZGVsRGF0YS5zdWJfYXR0cmlidXRlczsKKwkJICAgIAkJCisJCSAgICAJCWlmKHN1YkF0dHJpYnV0ZXMpewkJICAgIAkJCQorCQkgICAgCQkJdmFyIGpzb25PYmplY3QgPSBKU09OLnBhcnNlKHN1YkF0dHJpYnV0ZXMpOwkJICAgIAkJCQorCQkgICAgCQkJdmFyIGFsbGtleXMgPSBPYmplY3Qua2V5cyhqc29uT2JqZWN0KTsKKwkJICAgIAkJCWlmKGFsbGtleXMpeworCQkgICAgCQkJCWZvciAodmFyIGsgPSAwOyBrIDwgYWxsa2V5cy5sZW5ndGg7IGsrKykgeworCQkgICAgCQkJCQl2YXIga2V5VmFsdWUgPSBhbGxrZXlzW2tdOworCQkgICAgCQkJCQljb25zb2xlLmxvZygiIGtleVZhbHVlOmpzb25PYmplY3RbIitrZXlWYWx1ZSsgIl06ICIgKyBqc29uT2JqZWN0W2tleVZhbHVlXSk7CisJCSAgICAJCQkJCWlmKGpzb25PYmplY3Rba2V5VmFsdWVdKXsKKwkJICAgIAkJCQkJCXZhciB0ZW1wT2JqZWN0ID0ganNvbk9iamVjdFtrZXlWYWx1ZV07CisJCSAgICAJCQkJCQlpZih0ZW1wT2JqZWN0ICYmIHRlbXBPYmplY3Rba2V5XSl7CisJCSAgICAJCQkJICAgICAgICAJaWYgKHRlbXBPYmplY3Rba2V5XS5pbmNsdWRlcygncmVxdWlyZWQtdHJ1ZScpKXsKKwkJICAgIAkJCQkgICAgICAgIAkJaXNSZXF1aXJlZCA9IHRydWU7CisJCSAgICAJCQkJICAgICAgICAJfQkKKwkJICAgIAkJCQkJCX0KKwkJICAgIAkJCQkJfQorCQkgICAgCQkJCX0JCSAgICAJCQkJCisJCSAgICAJCQl9CQkgICAgCQkJCisJCSAgICAJCX0KKwkJICAgIAkJCiAJCSAgICAgICAgCXN3aXRjaCAoZGF0YVRlc3Rba2V5XS5zcGxpdChzcGxpdGNvbG9uKVswXSl7CiAJCSAgICAgICAgCQljYXNlIHN0cmluZ1ZhbHVlOgogCQkJICAgICAgICAJCSRzY29wZS5hdHRyaWJ1dGVCb3goYXR0cmlidXRla2V5LCBhcnJheSwgYXR0aXJidXRlTGFiZWwsIGRlZmF1bHRWYWx1ZSwgaXNSZXF1aXJlZCk7CiAJCSAgICAgICAgCQkJYnJlYWs7CisJCSAgICAgICAgCQljYXNlIHN0cmluZzoKKwkJCSAgICAgICAgCQkkc2NvcGUuYXR0cmlidXRlQm94KGF0dHJpYnV0ZWtleSwgYXJyYXksIGF0dGlyYnV0ZUxhYmVsLCBkZWZhdWx0VmFsdWUsIGlzUmVxdWlyZWQpOworCQkgICAgICAgIAkJCWJyZWFrOwkJICAgICAgICAJCQkKIAkJICAgICAgICAJCWNhc2UgaW50VmFsdWU6IAogCQkgICAgICAgIAkJCSRzY29wZS5hdHRyaWJ1dGVCb3goYXR0cmlidXRla2V5LCBhcnJheSwgYXR0aXJidXRlTGFiZWwsIGRlZmF1bHRWYWx1ZSwgaXNSZXF1aXJlZCk7CiAJCSAgICAgICAgCQkJYnJlYWs7CkBAIC01ODIsMTMgKzYxNCwxMyBAQAogCQkJdmFyIGJ1dHRvbmFkZExhYmVsID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIisiKTsgICAgICAgCiAJCQlhZGRCdXR0b24uYXBwZW5kQ2hpbGQoYnV0dG9uYWRkTGFiZWwpOyAKIAkJCWFkZEJ1dHRvbi5zZXRBdHRyaWJ1dGUoImlkIiwgbGFiZWxWYWx1ZSArIGF0dGlidXRlS2V5KTsKLQkJCWFkZEJ1dHRvbi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgImJ0biBidG4tZGVmYXVsdCIpOworCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiYnRuIGJ0bi1hZGQtcmVtb3ZlIik7CiAJCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJuZy1jbGljayIgLCAgJ2FkZE5ld0Nob2ljZSgiJytsYWJlbFZhbHVlICsgYXR0aWJ1dGVLZXkrJyIpOycpOwogCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgibmctZGlzYWJsZWQiICwgInRlbXAucG9saWN5LnJlYWRPbmx5Iik7CiAJCQl2YXIgcmVtb3ZlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlVUVE9OIik7CiAJCQl2YXIgYnV0dG9ucmVtb3ZlTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLSIpOyAgICAgICAKIAkJCXJlbW92ZUJ1dHRvbi5hcHBlbmRDaGlsZChidXR0b25yZW1vdmVMYWJlbCk7IAotCQkJcmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiYnRuIGJ0bi1kZWZhdWx0Iik7CisJCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWFkZC1yZW1vdmUiKTsKIAkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWNsaWNrIiAsICAncmVtb3ZlQ2hvaWNlKCInK2xhYmVsVmFsdWUgKyBhdHRpYnV0ZUtleSsnIik7Jyk7CiAJCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJuZy1kaXNhYmxlZCIgLCAidGVtcC5wb2xpY3kucmVhZE9ubHkiKTsKIAkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklEKS5hcHBlbmRDaGlsZChhZGRCdXR0b24pOyAKQEAgLTU5Nyw2ICs2MjksNyBAQAogCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpLmFwcGVuZENoaWxkKHRleHRGaWVsZCk7IAogCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpLmFwcGVuZENoaWxkKGJyKTsgCiAJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQoZGl2VGFnKTsgCisJCQkKIAkJfWVsc2V7CiAJCQljaGVja0tleSA9IGxhYmVsVmFsdWUgKyBhdHRpYnV0ZUtleTsKIAkJCXRleHRGaWVsZC5zZXRBdHRyaWJ1dGUoImlkIiAsICcnK2xhYmVsVmFsdWUgK2F0dGlidXRlS2V5KycnKTsKQEAgLTYwOSw2ICs2NDIsMTYgQEAKIAogCQl9CiAJCQorCQlpZihkaXZJRC5pbmNsdWRlcygiQDAiKSAmJiBkaXZJRC5pbmNsdWRlcygiZGl2LiIpKXsKKwkJCXZhciBmaXJzdENoaWxkX0lkID0gZGl2SUQuc3BsaXQoIkAwIilbMF07CisJCQl2YXIgZmlyc3RDaGlsZF9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RDaGlsZF9JZCk7CisJCQlpZihmaXJzdENoaWxkX2VsZW1lbnQpeworCQkJCWZpcnN0Q2hpbGRfZWxlbWVudC5jbGFzc05hbWUgKz0gJyBjaGlsZHJlbl9ncm91cCc7ICAvL2hlcmUgaXMgYSBkaXYgd2l0aCBhIGdyb3VwIG9mIGNoaWxkcmVuLgorCQkJfQorCQl9CisJCWNvbnNvbGUubG9nKCdmaXJzdENoaWxkX0lkOiAnICsgZmlyc3RDaGlsZF9JZCk7CisJCWNvbnNvbGUubG9nKCdkaXZJRDogJyArIGRpdklEKTsKKwkJCiAJCWlmIChkZWZhdWx0VmFsdWUubGVuZ3RoID4gMCl7CQogCQkJaWYoZGVmYXVsdFZhbHVlLmluY2x1ZGVzKCI6IikpewogCQkJCWRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS5zcGxpdCgiOiIpWzBdOwpAQCAtNjYxLDE4ICs3MDQsMjAgQEAKIAkJdmFyIGxhYmVsdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmxlTmFtZSk7CiAJCiAJCWxhYmVsLmFwcGVuZENoaWxkKGxhYmVsdGV4dCk7CisJCQorCQl2YXIgc3ViQXR0cmlidXRlcyA9ICRzY29wZS5kY2FlTW9kZWxEYXRhLnN1Yl9hdHRyaWJ1dGVzOwogCiAJCWlmKGxhYmVsTWFueUtleSl7CiAJCQl2YXIgYWRkQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlVUVE9OIik7CiAJCQl2YXIgYnV0dG9uTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiKyIpOyAgICAgICAKIAkJCWFkZEJ1dHRvbi5hcHBlbmRDaGlsZChidXR0b25MYWJlbCk7IAotCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiYnRuIGJ0bi1kZWZhdWx0Iik7CisJCQlhZGRCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWFkZC1yZW1vdmUiKTsKIAkJCWFkZEJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWNsaWNrIiAsICAnYWRkTmV3Q2hvaWNlKCInK2xhYmVsVmFsdWUgKyBsYWJsZU5hbWUrJyIpOycpOwogCQkJYWRkQnV0dG9uLnNldEF0dHJpYnV0ZSgibmctZGlzYWJsZWQiICwgInRlbXAucG9saWN5LnJlYWRPbmx5Iik7CiAJCQl2YXIgcmVtb3ZlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlVUVE9OIik7CiAJCQl2YXIgYnV0dG9ucmVtb3ZlTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLSIpOyAgICAgICAKIAkJCXJlbW92ZUJ1dHRvbi5hcHBlbmRDaGlsZChidXR0b25yZW1vdmVMYWJlbCk7IAotCQkJcmVtb3ZlQnV0dG9uLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAiYnRuIGJ0bi1kZWZhdWx0Iik7CisJCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJjbGFzcyIsICJidG4gYnRuLWFkZC1yZW1vdmUiKTsKIAkJCXJlbW92ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoIm5nLWNsaWNrIiAsICAncmVtb3ZlQ2hvaWNlKCInK2xhYmVsVmFsdWUgK2xhYmxlTmFtZSsnIik7Jyk7CiAJCQlyZW1vdmVCdXR0b24uc2V0QXR0cmlidXRlKCJuZy1kaXNhYmxlZCIgLCAidGVtcC5wb2xpY3kucmVhZE9ubHkiKTsgCiAJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQoYWRkQnV0dG9uKTsgCkBAIC02ODUsMTIgKzczMCwxNiBAQAogCQkJCiAJCQl2YXIgZGl2VGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAJCQlkaXZUYWcuc2V0QXR0cmlidXRlKCJpZCIsIGlkICsnQDAnKTsKKwkJCQorCQkJZGl2VGFnLmNsYXNzTmFtZSArPSAnIGNoaWxkcmVuX2dyb3VwJzsgLy9oZXJlIGlzIGRpdiB3aXRoIGEgZ3JvdXAgb2YgY2hpbGRyZW4uCisJCQkKIAkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5hcHBlbmRDaGlsZChkaXZUYWcpOwogCQl9ZWxzZXsKIAkJCXZhciBkaXZUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKIAkJCWRpdlRhZy5zZXRBdHRyaWJ1dGUoImlkIiwgImRpdi4iK2xhYmVsVmFsdWUrbGFibGVOYW1lKTsKKwkJCWRpdlRhZy5jbGFzc05hbWUgKz0gJyBjaGlsZHJlbl9ncm91cCc7IC8vaGVyZSBpcyBkaXYgd2l0aCBhIGdyb3VwIG9mIGNoaWxkcmVuLgogCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpLmFwcGVuZENoaWxkKGxhYmVsKTsgIAotCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SUQpLmFwcGVuZENoaWxkKGRpdlRhZyk7CisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJRCkuYXBwZW5kQ2hpbGQoZGl2VGFnKTsJCQkKIAkJfQogICAgIH07CiAKQEAgLTgwMSw3ICs4NTAsNiBAQAogICAgIAkJCQlpZiAoZWx1bWVudExvY2F0aW9uID4gMSl7CiAgICAgCQkJCQllbnVtS2V5ID0ga2V5U3BsaXRba2V5U3BsaXQubGVuZ3RoIC0gMV07CiAgICAgCQkJCX0KLSAgICAJCQkJdmFyIGFXaGl0ZVNwYWNlID0gIiAiOwogICAgIAkJCQlpZiAoZW51bUtleUxpc3QuaW5kZXhPZihlbnVtS2V5KSAhPSAtMSl7CiAJCQkJCQlpZiAoc3BsaXRQbGFpbkF0dHJpYnV0ZUtleVsxXS5pbmRleE9mKCJ0cnVlIikgIT09IC0xKXsKIAkJCQkJCQl2YXIgbXVsdGlTbGVjdCA9IFtdOwpAQCAtODEwLDE5ICs4NTgsMTEgQEAKIAkJCQkJCQkJfQogCQkJCQkJCWpzb25Qb2xpY3lba2V5XT0gbXVsdGlTbGVjdDsKIAkJCQkJCX1lbHNlewotCQkJCQkJCS8vc2V0IGEgc3BhY2UgZHVlIHRvIGVtcHR5IHZhbHVlIGNhdXNlZCBKU09OIGZvcm1hdCBlcnJvciBpbiBQb2xpY3lSZXN0QWRhcHRlciBhbmQgcmVtb3ZlIGl0IGluIGJhY2stZW5kLgotCQkJCQkJCWlmKHNlYXJjaEVsZW1lbnQudmFsdWUgPT0gIiIpewotCQkJCQkJCQlzZWFyY2hFbGVtZW50LnZhbHVlID0gYVdoaXRlU3BhY2U7Ci0JCQkJCQkJfQogCQkJCQkJCWNvbnNvbGUubG9nKCIgc2VhcmNoRWxlbWVudC52YWx1ZSA9ID4gIiArIHNlYXJjaEVsZW1lbnQudmFsdWUpOwogCQkJCQkJCWpzb25Qb2xpY3lba2V5XT0gc2VhcmNoRWxlbWVudC52YWx1ZTsKIAkJCQkJCX0KICAgICAJCQkJfSBlbHNlIHsKICAgICAgICAgCQkJCWlmKHNlYXJjaEVsZW1lbnQudmFsdWUgIT0gbnVsbCl7Ci0JCQkJCQkJLy9zZXQgYSBkZWZhdWx0IHZhbHVlIGR1ZSB0byBlbXB0eSB2YWx1ZSBjYXVzZWQgSlNPTiBmb3JtYXQgZXJyb3IgaW4gUG9saWN5UmVzdEFkYXB0ZXIKLQkJCQkJCQlpZihzZWFyY2hFbGVtZW50LnZhbHVlID09ICIiKXsKLQkJCQkJCQkJc2VhcmNoRWxlbWVudC52YWx1ZSA9IGFXaGl0ZVNwYWNlOwotCQkJCQkJCX0KIAkJCQkJCQljb25zb2xlLmxvZygiIHNlYXJjaEVsZW1lbnQudmFsdWUgPSA+ICIgKyBzZWFyY2hFbGVtZW50LnZhbHVlKTsKICAgICAgICAgCQkJCQlqc29uUG9saWN5W2tleV09IHNlYXJjaEVsZW1lbnQudmFsdWU7CiAgICAgICAgIAkJCQl9CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZUNvbnRyb2xsZXIvRGVjaXNpb25Qb2xpY3lDb250cm9sbGVyLmpzIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVDb250cm9sbGVyL0RlY2lzaW9uUG9saWN5Q29udHJvbGxlci5qcwppbmRleCA0YjVhOTkwLi43MmI2ZjA2IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZUNvbnRyb2xsZXIvRGVjaXNpb25Qb2xpY3lDb250cm9sbGVyLmpzCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlQ29udHJvbGxlci9EZWNpc2lvblBvbGljeUNvbnRyb2xsZXIuanMKQEAgLTgwLDYgKzgwLDI2IEBACiAJCWNvbnNvbGUubG9nKCJmYWlsZWQiKTsKIAl9KTsKIAorCVBvbGljeUFwcFNlcnZpY2UuZ2V0RGF0YSgnZ2V0RGljdGlvbmFyeS9nZXRfUmFpbnlEYXlEaWN0aW9uYXJ5RGF0YUJ5TmFtZScpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKKwkJdmFyIGogPSBkYXRhOworCQkkc2NvcGUuZGF0YSA9IEpTT04ucGFyc2Uoai5kYXRhKTsKKwkJY29uc29sZS5sb2coJHNjb3BlLmRhdGEpOworICAgIAkkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXMgPSBKU09OLnBhcnNlKCRzY29wZS5kYXRhLnJhaW55RGF5RGljdGlvbmFyeURhdGFzKTsKKwkJY29uc29sZS5sb2coJHNjb3BlLnJhaW55RGF5RGljdGlvbmFyeURhdGFzKTsKKwl9LCBmdW5jdGlvbiAoZXJyb3IpIHsKKwkJY29uc29sZS5sb2coImZhaWxlZCIpOworCX0pOworCQorICAgIFBvbGljeUFwcFNlcnZpY2UuZ2V0RGF0YSgnZ2V0RGljdGlvbmFyeS9nZXRfUmFpbnlEYXlEaWN0aW9uYXJ5RGF0YScpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAJdmFyIGogPSBkYXRhOworICAgIAkkc2NvcGUuZGF0YSA9IEpTT04ucGFyc2Uoai5kYXRhKTsKKyAgICAJY29uc29sZS5sb2coJHNjb3BlLmRhdGEpOworICAgIAkkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YUVudGl0eSA9IEpTT04ucGFyc2UoJHNjb3BlLmRhdGEucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXMpOworICAgIAljb25zb2xlLmxvZygkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YXNFbnRpdHkpOworICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgeworICAgIAljb25zb2xlLmxvZygiZmFpbGVkIik7CisgICAgfSk7CisKICAgICBmdW5jdGlvbiBleHRlbmQob2JqLCBzcmMpIHsKICAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykgewogICAgICAgICAgICAgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBvYmpba2V5XSA9IHNyY1trZXldOwpAQCAtMTY2LDYgKzE4Niw5IEBACiAgICAgCWlmKCEkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcyl7CiAgICAgCQkkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcyA9IHt9OwogICAgIAl9CisgICAgCWlmKCEkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy50YXJnZXRzKXsKKyAgICAJCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMgPSBbXTsKKyAgICAJfQogICAgIAlpZighJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMuYmxhY2tMaXN0KXsKICAgICAJCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLmJsYWNrTGlzdCA9IFtdOwogICAgIAl9CkBAIC0xNzgsNyArMjAxLDcgQEAKICAgICAKICAgICB9ZWxzZSBpZigkc2NvcGUudGVtcC5wb2xpY3kucnVsZVByb3ZpZGVyPT0iQ3VzdG9tIil7CiAJICAgaWYoJHNjb3BlLnRlbXAucG9saWN5LmF0dHJpYnV0ZXMubGVuZ3RoID09IDApewotCQkgICAkc2NvcGUudGVtcC5wb2xpY3kuYXR0cmlidXRlcyA9IFtdOworCQkgICAkc2NvcGUudGVtcC5wb2xpY3kuYXR0cmlidXRlcyA9IFtdOyAgICAKIAkgICB9CiAJICAgaWYoJHNjb3BlLnRlbXAucG9saWN5LnNldHRpbmdzLmxlbmd0aCA9PSAwKXsKIAkJICAgJHNjb3BlLnRlbXAucG9saWN5LnNldHRpbmdzID0gW107CkBAIC0xOTAsNiArMjEzLDEwIEBACiAJICAgaWYoJHNjb3BlLnRlbXAucG9saWN5LnlhbWxwYXJhbXMuYmxhY2tMaXN0Lmxlbmd0aD09MCl7CiAJCSAgICRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLmJsYWNrTGlzdCA9IFtdOwogCSAgIH0KKyAgICB9ZWxzZSBpZigkc2NvcGUudGVtcC5wb2xpY3kucnVsZVByb3ZpZGVyPT0iR1VBUkRfWUFNTCIpeworICAgIAlpZigkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy50YXJnZXRzLmxlbmd0aD09MCl7CisgCQkgICAkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy50YXJnZXRzID0gW107CisgCSAgIAl9CiAgICAgfWVsc2UgaWYoJHNjb3BlLnRlbXAucG9saWN5LnJ1bGVQcm92aWRlcj09IlJhaW55X0RheSIpewogICAgIAlpZigkc2NvcGUudGVtcC5wb2xpY3kucmFpbnlkYXkudHJlYXRtZW50VGFibGVDaG9pY2VzID09IG51bGwgfHwgJHNjb3BlLnRlbXAucG9saWN5LnJhaW55ZGF5LnRyZWF0bWVudFRhYmxlQ2hvaWNlcy5sZW5ndGggPT0gMCl7CiAgICAgCQkkc2NvcGUudGVtcC5wb2xpY3kucmFpbnlkYXkudHJlYXRtZW50VGFibGVDaG9pY2VzID0gW107CkBAIC0yMTUsNiArMjQyLDE0IEBACiAgICAgICAkc2NvcGUudGVtcC5wb2xpY3kuc2V0dGluZ3Muc3BsaWNlKGxhc3RJdGVtKTsKICAgICB9OwogICAgIAorICAgICRzY29wZS5hZGROZXdUYXJnZXQgPSBmdW5jdGlvbigpeworICAgIAkkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy50YXJnZXRzLnB1c2goJycpOworICAgIH07CisgICAgJHNjb3BlLnJlbW92ZVRhcmdldCA9IGZ1bmN0aW9uKCl7CisgICAgCXZhciBsYXN0SXRlbSA9ICRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMubGVuZ3RoLTE7CisgICAgCSRzY29wZS50ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMuc3BsaWNlKGxhc3RJdGVtKTsKKyAgICB9OworICAgIAogICAgICRzY29wZS5hZGROZXdCTCA9IGZ1bmN0aW9uKCkgewogICAgIAkkc2NvcGUudGVtcC5wb2xpY3kueWFtbHBhcmFtcy5ibGFja0xpc3QucHVzaCgnJyk7CiAgICAgfTsKQEAgLTIzMiw2ICsyNjcsMjkgQEAKICAgICAJJHNjb3BlLnRlbXAucG9saWN5LnJhaW55ZGF5LnRyZWF0bWVudFRhYmxlQ2hvaWNlcy5zcGxpY2UobGFzdEl0ZW0pOwogICAgIH07CiAgICAgCisJJHNjb3BlLndvcmtzdGVwRGljdGlvbmFyeURhdGFzID0gW107CisJJHNjb3BlLmdldFdvcmtzdGVwVmFsdWVzID0gZnVuY3Rpb24oYmJpZFZhbHVlKXsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCAkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YUVudGl0eS5sZW5ndGg7ICsraSkgeworICAgIAkgICAgdmFyIG9iaiA9ICRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhRW50aXR5W2ldOworICAgIAkgICAgaWYgKG9iai5iYmlkID09IGJiaWRWYWx1ZSl7CisgICAgCSAgICAJJHNjb3BlLndvcmtzdGVwRGljdGlvbmFyeURhdGFzLnB1c2gob2JqLndvcmtzdGVwKTsKKyAgICAJICAgIH0KKyAgICAJfQorCX07CisJCisJJHNjb3BlLmFsbG93ZWRUcmVhdG1lbnRzRGF0YXMgPSBbXTsKKwkkc2NvcGUuZ2V0VHJlYXRtZW50VmFsdWVzID0gZnVuY3Rpb24oYmJpZFZhbHVlLCB3b3Jrc3RlcFZhbHVlKXsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCAkc2NvcGUucmFpbnlEYXlEaWN0aW9uYXJ5RGF0YUVudGl0eS5sZW5ndGg7ICsraSkgeworICAgIAkgICAgdmFyIG9iaiA9ICRzY29wZS5yYWlueURheURpY3Rpb25hcnlEYXRhRW50aXR5W2ldOworICAgIAkgICAgaWYgKG9iai5iYmlkID09IGJiaWRWYWx1ZSAmJiBvYmoud29ya3N0ZXAgPT0gd29ya3N0ZXBWYWx1ZSl7CisgICAgCSAgICAJdmFyIHNwbGl0QWxhcm0gPSBvYmoudHJlYXRtZW50cy5zcGxpdCgnLCcpOworICAgIAkgICAgCWZvciAodmFyIGogPSAwOyBqIDwgc3BsaXRBbGFybS5sZW5ndGg7ICsraikgeworICAgIAkgICAgCQkkc2NvcGUuYWxsb3dlZFRyZWF0bWVudHNEYXRhcy5wdXNoKHNwbGl0QWxhcm1bal0pOworICAgIAkgICAgCX0KKyAgICAJICAgIH0KKyAgICAJfQkKKwl9OworICAgIAogICAgICRzY29wZS5JdGVtTm8gPSAwOwogICAgICRzY29wZS5ydWxlQWxnb3JpdGhtRGF0YXMgPSBbeyJydWxlQWxnb3JpdGhtcyIgOiAkc2NvcGUudGVtcC5wb2xpY3kucnVsZUFsZ29yaXRobXNjaG9pY2VzIH1dOwogICAgIApkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lUZW1wbGF0ZS5odG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RDQUVNaWNyb1NlcnZpY2VQb2xpY3lUZW1wbGF0ZS5odG1sCmluZGV4IGExMjMwMGIuLmY2MjFmMmMgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlcy9EQ0FFTWljcm9TZXJ2aWNlUG9saWN5VGVtcGxhdGUuaHRtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZXMvRENBRU1pY3JvU2VydmljZVBvbGljeVRlbXBsYXRlLmh0bWwKQEAgLTgzLDcgKzgzLDcgQEAKIAkJCTwvZGl2PgogCQk8L2Rpdj4KIAkJPGRpdiBjbGFzcz0id2VsbCI+Ci0JCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIiBpZD0iRHluYW1pY1RlbXBsYXRlIj4KKwkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTEyIiBpZD0iRHluYW1pY1RlbXBsYXRlIj4KIAkJCQk8bGFiZWw+TWljcm8gU2VydmljZSBBdHRyaWJ1dGVzOjxzdXA+PGI+KjwvYj48L3N1cD48L2xhYmVsPjxicj4KIAkJCTwvZGl2PgogCQkJPC9icj4KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlcy9EZWNpc2lvblBvbGljeVRlbXBsYXRlLmh0bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9Qb2xpY3lUZW1wbGF0ZXMvRGVjaXNpb25Qb2xpY3lUZW1wbGF0ZS5odG1sCmluZGV4IDQ5ZmM3MGQuLjk3M2E3YWYgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL1BvbGljeVRlbXBsYXRlcy9EZWNpc2lvblBvbGljeVRlbXBsYXRlLmh0bWwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvUG9saWN5VGVtcGxhdGVzL0RlY2lzaW9uUG9saWN5VGVtcGxhdGUuaHRtbApAQCAtNjIsMTcgKzYyLDI1IEBACiAJCQkJCQkJPGxhYmVsPkJ1aWxkaW5nIEJsb2NrIElEOjxzdXA+PGI+KjwvYj48L3N1cD48L2xhYmVsPgogCQkJCQkJPC9kaXY+CiAJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0yIj4KLQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIKLQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IiBuZy1tb2RlbD0idGVtcC5wb2xpY3kucmFpbnlkYXkuYmJpZCIKLQkJCQkJCQkJcGxhY2Vob2xkZXI9IkJ1aWxkaW5nIEJsb2NrIElEIiAvPgorCQkJCQkJCQk8c2VsZWN0CisJCQkJCQkJCQljbGFzcz0iZm9ybS1jb250cm9sIiBuZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiCisJCQkJCQkJCQluZy1tb2RlbD0idGVtcC5wb2xpY3kucmFpbnlkYXkuYmJpZCIKKwkJCQkJCQkJCW5nLW9wdGlvbnM9Im9wdGlvbiBmb3Igb3B0aW9uIGluIHJhaW55RGF5RGljdGlvbmFyeURhdGFzIHRyYWNrIGJ5IG9wdGlvbiIKKwkJCQkJCQkJCW5nLWNoYW5nZT0iZ2V0V29ya3N0ZXBWYWx1ZXModGVtcC5wb2xpY3kucmFpbnlkYXkuYmJpZCkiPgorCQkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iIj57e3RlbXAucG9saWN5LnJhaW55ZGF5LmJiaWR9fTwvb3B0aW9uPgorCQkJCQkJCQk8L3NlbGVjdD4KIAkJCQkJCTwvZGl2PgogCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMSI+CiAJCQkJCQkJPGxhYmVsPldvcmsgU3RlcDo8c3VwPjxiPio8L2I+PC9zdXA+PC9sYWJlbD4KIAkJCQkJCTwvZGl2PgogCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMiI+Ci0JCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiCi0JCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgbmctbW9kZWw9InRlbXAucG9saWN5LnJhaW55ZGF5LndvcmtzdGVwIgotCQkJCQkJCQlwbGFjZWhvbGRlcj0iV29yayBTdGVwIiAvPgorCQkJCQkJCTxzZWxlY3QKKwkJCQkJCQkJCWNsYXNzPSJmb3JtLWNvbnRyb2wiIG5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIKKwkJCQkJCQkJCW5nLW1vZGVsPSJ0ZW1wLnBvbGljeS5yYWlueWRheS53b3Jrc3RlcCIKKwkJCQkJCQkJCW5nLW9wdGlvbnM9Im9wdGlvbiBmb3Igb3B0aW9uIGluIHdvcmtzdGVwRGljdGlvbmFyeURhdGFzIHRyYWNrIGJ5IG9wdGlvbiIKKwkJCQkJCQkJCW5nLWNoYW5nZT0iZ2V0VHJlYXRtZW50VmFsdWVzKHRlbXAucG9saWN5LnJhaW55ZGF5LmJiaWQsIHRlbXAucG9saWN5LnJhaW55ZGF5LndvcmtzdGVwKSI+CisJCQkJCQkJCQk8b3B0aW9uIHZhbHVlPSIiPnt7dGVtcC5wb2xpY3kucmFpbnlkYXkud29ya3N0ZXB9fTwvb3B0aW9uPgorCQkJCQkJCTwvc2VsZWN0PgogCQkJCQkJPC9kaXY+CiAJCQkJCTwvZGl2PgogCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyI+CkBAIC0xMDAsMTkgKzEwOCwxNCBAQAogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTEiPgogCQkJCQkJCQk8bGFiZWw+RGVzaXJlZCBUcmVhdG1lbnQ6PHN1cD48Yj4qPC9iPjwvc3VwPjwvbGFiZWw+CiAJCQkJCQkJPC9kaXY+CQkKLQkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4JCQkJCQkKLQkJCQkJCQkJPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibXlTZWxlY3QiCisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJCTxzZWxlY3QKKwkJCQkJCQkJCWNsYXNzPSJmb3JtLWNvbnRyb2wiIAogCQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IgogCQkJCQkJCQkJbmctbW9kZWw9InRyZWF0bWVudFRhYmxlQ2hvaWNlLnRyZWF0bWVudCIKLQkJCQkJCQkJCXBsYWNlaG9sZGVyPSJEZXNpcmVkIFRyZWF0bWVudCI+Ci08IS0tIAkJCQkJCQkJPG9wdGlvbiB2YWx1ZT0iIj57e3RhYmxlQ2hvaWNlLmRlc2lyZWR0cmVhdG1lbnR9fTwvb3B0aW9uPiAtLT4KLQkJCQkJCQkJCTxvcHRpb24+Um9sbGJhY2s8L29wdGlvbj4KLQkJCQkJCQkJCTxvcHRpb24+TWFudWFsIEhhbmRsaW5nPC9vcHRpb24+Ci0JCQkJCQkJCQk8b3B0aW9uPkFib3J0PC9vcHRpb24+Ci0JCQkJCQkJCQk8b3B0aW9uPkF1dG8gUm9sbGJhY2s8L29wdGlvbj4KLQkJCQkJCQkJCTxvcHRpb24+UmV0cnk8L29wdGlvbj4KLQkJCQkJCQkJCTxvcHRpb24+U2tpcDwvb3B0aW9uPgotCQkJCQkJCQk8L3NlbGVjdD4KKwkJCQkJCQkJCW5nLW9wdGlvbnM9Im9wdGlvbiBmb3Igb3B0aW9uIGluIGFsbG93ZWRUcmVhdG1lbnRzRGF0YXMgdHJhY2sgYnkgb3B0aW9uIj4KKwkJCQkJCQkJCTxvcHRpb24gdmFsdWU9IiI+e3t0cmVhdG1lbnRUYWJsZUNob2ljZS50cmVhdG1lbnR9fTwvb3B0aW9uPgorCQkJCQkJCQk8L3NlbGVjdD4JCQkJCQkKIAkJCQkJCQk8L2Rpdj4KIAkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0xIj4KIAkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiCkBAIC0xMzEsNyArMTM0LDcgQEAKIAkJCTxkaXYgY2xhc3M9IndlbGwiPgogCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93Ij4KIAkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMSI+Ci0JCQkJCQk8bGFiZWw+R3VhcmQgWUFNTCBBdHRyaWJ1dGVzOjwvbGFiZWw+PGJyPgorCQkJCQkJPGxhYmVsPkd1YXJkIEJsYWNrTGlzdCBZQU1MIEF0dHJpYnV0ZXM6PC9sYWJlbD48YnI+CiAJCQkJCTwvZGl2PgogCQkJCTwvZGl2PgogCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93Ij4KQEAgLTE1Nyw2ICsxNjAsMTYgQEAKIAkJCQkJCTwvZGl2PgogCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciIHN0eWxlPSJtYXJnaW4tbGVmdDogMiUiPgogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgorCQkJCQkJCQk8bGFiZWw+IENMTmFtZTogPC9sYWJlbD4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4KKwkJCQkJCQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiCisJCQkJCQkJCQluZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiIG5nLW1vZGVsPSJ0ZW1wLnBvbGljeS55YW1scGFyYW1zLmNsbmFtZSIKKwkJCQkJCQkJCXBsYWNlaG9sZGVyPSJDTE5hbWUiIC8+CisJCQkJCQkJPC9kaXY+CisJCQkJCQk8L2Rpdj4KKwkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDIlIj4KKwkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4KIAkJCQkJCQkJPGxhYmVsPiBndWFyZEFjdGl2ZVN0YXJ0OiA8L2xhYmVsPgogCQkJCQkJCTwvZGl2PgogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgpAQCAtMjM1LDYgKzI0OCw0MiBAQAogCQkJCQkJPC9kaXY+CiAJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJvdyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAyJSI+CiAJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tMyI+CisJCQkJCQkJCTxsYWJlbD4gQ0xOYW1lOiA8L2xhYmVsPgorCQkJCQkJCTwvZGl2PgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgorCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIKKwkJCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgbmctbW9kZWw9InRlbXAucG9saWN5LnlhbWxwYXJhbXMuY2xuYW1lIgorCQkJCQkJCQkJcGxhY2Vob2xkZXI9IkNMTmFtZSIgLz4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCTwvZGl2PgorCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciIHN0eWxlPSJtYXJnaW4tbGVmdDogMiUiPgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgorCQkJCQkJCQk8bGFiZWw+IFRhcmdldHM6IDwvbGFiZWw+CisJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IgorCQkJCQkJCQkJbmctZGlzYWJsZWQ9InRlbXAucG9saWN5LnJlYWRPbmx5IiBuZy1jbGljaz0iYWRkTmV3VGFyZ2V0KCkiPgorCQkJCQkJCQkJPGkgY2xhc3M9ImZhIGZhLXBsdXMiPjwvaT4KKwkJCQkJCQkJPC9idXR0b24+CisJCQkJCQkJPC9kaXY+CisJCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBjb2wtc20tNCI+CisJCQkJCQkJCTxkaXYgZGF0YS1uZy1yZXBlYXQ9ImNob2ljZSBpbiB0ZW1wLnBvbGljeS55YW1scGFyYW1zLnRhcmdldHMgdHJhY2sgYnkgJGluZGV4Ij4KKwkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcm93Ij4KKwkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTkiPgorCQkJCQkJCQkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIgorCQkJCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIKKwkJCQkJCQkJCQluZy1tb2RlbD0idGVtcC5wb2xpY3kueWFtbHBhcmFtcy50YXJnZXRzWyRpbmRleF0iIHBsYWNlaG9sZGVyPSJUYXJnZXQiIC8+CisJCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTEiPgorCQkJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBuZy1zaG93PSIkbGFzdCIKKwkJCQkJCQkJCQluZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiIG5nLWNsaWNrPSJyZW1vdmVUYXJnZXQoKSI+CisJCQkJCQkJCQkJPGkgY2xhc3M9ImZhIGZhLW1pbnVzIj48L2k+CisJCQkJCQkJCQkJPC9idXR0b24+CisJCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCTwvZGl2PgorCQkJCQkJPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByb3ciIHN0eWxlPSJtYXJnaW4tbGVmdDogMiUiPgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgogCQkJCQkJCQk8bGFiZWw+IGxpbWl0OiA8L2xhYmVsPgogCQkJCQkJCTwvZGl2PgogCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgpAQCAtMjQ3LDE4ICsyOTYsMjAgQEAKIAkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0zIj4KIAkJCQkJCQkJPGxhYmVsPiB0aW1lV2luZG93OiA8L2xhYmVsPgogCQkJCQkJCTwvZGl2PgotCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTMiPgorCQkJCQkJCTxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY29sLXNtLTIiPgorCQkJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIKKwkJCQkJCQkJCW5nLWRpc2FibGVkPSJ0ZW1wLnBvbGljeS5yZWFkT25seSIgbmctbW9kZWw9InRlbXAucG9saWN5LnlhbWxwYXJhbXMudGltZVdpbmRvdyIKKwkJCQkJCQkJCXBsYWNlaG9sZGVyPSJUaW1lIFdpbmRvdyIgLz4KKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIGNvbC1zbS0xIj4KIAkJCQkJCQkJPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBuZy1kaXNhYmxlZD0idGVtcC5wb2xpY3kucmVhZE9ubHkiIAotCQkJCQkJCQluZy1tb2RlbD0idGVtcC5wb2xpY3kueWFtbHBhcmFtcy50aW1lV2luZG93Ij4KLQkJCQkJCQkJPG9wdGlvbj50dzVtaW48L29wdGlvbj4KLQkJCQkJCQkJPG9wdGlvbj50dzEwbWluPC9vcHRpb24+Ci0JCQkJCQkJCTxvcHRpb24+dHczMG1pbjwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3MWg8L29wdGlvbj4KLQkJCQkJCQkJPG9wdGlvbj50dzEyaDwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3MWQ8L29wdGlvbj4KLQkJCQkJCQkJPG9wdGlvbj50dzVkPC9vcHRpb24+Ci0JCQkJCQkJCTxvcHRpb24+dHcxdzwvb3B0aW9uPgotCQkJCQkJCQk8b3B0aW9uPnR3MW1vbjwvb3B0aW9uPgorCQkJCQkJCQluZy1tb2RlbD0idGVtcC5wb2xpY3kueWFtbHBhcmFtcy50aW1lVW5pdHMiPgorCQkJCQkJCQk8b3B0aW9uPm1pbnV0ZTwvb3B0aW9uPgorCQkJCQkJCQk8b3B0aW9uPmhvdXI8L29wdGlvbj4KKwkJCQkJCQkJPG9wdGlvbj5kYXk8L29wdGlvbj4KKwkJCQkJCQkJPG9wdGlvbj53ZWVrPC9vcHRpb24+CisJCQkJCQkJCTxvcHRpb24+bW9udGg8L29wdGlvbj4KKwkJCQkJCQkJPG9wdGlvbj55ZWFyPC9vcHRpb24+CiAJCQkJCQkJCTwvc2VsZWN0PgogCQkJCQkJCTwvZGl2PgogCQkJCQkJPC9kaXY+CmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9jc3MvbWFpbi5jc3MgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci9jc3MvbWFpbi5jc3MKaW5kZXggNzgwMDFmNC4uMTEyMmI2ZiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvY3NzL21haW4uY3NzCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL2Nzcy9tYWluLmNzcwpAQCAtNTgsMTEgKzU4LDQ3IEBACiAgIG1hcmdpbi10b3A6IC01cHg7CiB9CiAKKy5idG4uYnRuLXBlZGVmYXVsdCB7CisJY29sb3I6ICM0NDQ7CisJYmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTsKK30KKwkKIC5idG4uYnRuLWRlZmF1bHQgewogICBjb2xvcjogIzQ0NDsKICAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkFGQTsKIH0KIAorLmJ0bi1hZGQtcmVtb3ZlIHsKKyAgY29sb3I6ICM0NDQ7CisgIGJhY2tncm91bmQtY29sb3I6ICNGQUZBRkE7CisgIG1hcmdpbi1yaWdodDogMTJweDsKKyAgbWFyZ2luLWJvdHRvbTogMTBweDsKK30KKworLmNoaWxkX3NpbmdsZSB7CisgIGNvbG9yOiAjNDQ0OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBOworICBtYXJnaW4tbGVmdDogMHB4OworICBtYXJnaW4tYm90dG9tOiAxMHB4OworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICBib3JkZXItcmFkaXVzOiA0cHg7Cit9CisKKy5jaGlsZHJlbl9ncm91cCB7CisgICAgY29sb3I6ICM0NDQ7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CisgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKKyAgICBtYXJnaW4tdG9wOiAyMHB4OworICAgIG1hcmdpbi1yaWdodDogMjBweDsKKyAgICBwYWRkaW5nLXRvcDogMTBweDsKKyAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CisgICAgcGFkZGluZy1yaWdodDogMjBweDsKKyAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICAgIGJvcmRlci1yYWRpdXM6IDRweDsKK30KKwogLmJ0biB7CiAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgLjI2KTsKICAgZm9udC13ZWlnaHQ6IDUwMDsKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL3RlbXBsYXRlcy9tb2RhbHMuaHRtbCBiL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL3RlbXBsYXRlcy9tb2RhbHMuaHRtbAppbmRleCA3NTRmOTViLi5mN2E2ZDI0IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci90ZW1wbGF0ZXMvbW9kYWxzLmh0bWwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL21vZGFscy5odG1sCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgICAgIDxkaXYgbmctaW5jbHVkZSBkYXRhLXNyYz0iJ2Vycm9yLWJhciciIGNsYXNzPSJjbGVhcmZpeCI+PC9kaXY+CiAgICAgICA8L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+Ci0gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1jbGljaz0icmVmcmVzaCgpOyIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctY2xpY2s9InJlZnJlc2goKTsiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIj5EZWxldGU8L2J1dHRvbj4KICAgICAgIDwvZGl2PgogICAgICAgPC9mb3JtPgpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgPC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctY2xpY2s9InJlZnJlc2goKTsiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIiBhdXRvZm9jdXM9ImF1dG9mb2N1cyI+RGVsZXRlPC9idXR0b24+CiAgICAgICA8L2Rpdj4KICAgICAgIDwvZm9ybT4KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgPGRpdiBuZy1pbmNsdWRlIGRhdGEtc3JjPSInZXJyb3ItYmFyJyIgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1jbGljaz0icmVmcmVzaCgpOyIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+UmVuYW1lPC9idXR0b24+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9mb3JtPgpAQCAtODksNyArODksNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Zvcm0+CiAgICAgPC9kaXY+CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgPGRpdiBuZy1pbmNsdWRlIGRhdGEtc3JjPSInZXJyb3ItYmFyJyIgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWNsaWNrPSJyZWZyZXNoKCk7IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1jbGljaz0icmVmcmVzaCgpOyIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+TW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+U2F2ZTwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICAgICAgICA8ZGl2IG5nLWluY2x1ZGUgZGF0YS1zcmM9IidlcnJvci1iYXInIiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgotICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2xvbmU8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Zvcm0+CkBAIC0xODksNyArMTg5LDcgQEAKICAgICAgICAgICAgICAgPGRpdiBuZy1pbmNsdWRlIGRhdGEtc3JjPSInZXJyb3ItYmFyJyIgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgICAgICAgPGJ1dHRvbiBpZCA9ICJjYW5jZWwiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DYW5jZWw8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBpZCA9ICJjYW5jZWwiIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNhbmNlbDwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DcmVhdGU8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Zvcm0+CkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgICAgPGRpdiBuZy1pbmNsdWRlIGRhdGEtc3JjPSInZXJyb3ItYmFyJyIgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wZWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBuZy1kaXNhYmxlZD0idGVtcC5pbnByb2Nlc3MiPkNyZWF0ZTwvYnV0dG9uPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9ybT4KQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICA8ZGl2IG5nLXNob3c9IiFmaWxlVXBsb2FkZXIucmVxdWVzdGluZyI+Ci0gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2FuY2VsPC9idXR0b24+CisgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcGVkZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBuZy1kaXNhYmxlZD0iIXVwbG9hZEZpbGVMaXN0Lmxlbmd0aCB8fCBmaWxlVXBsb2FkZXIucmVxdWVzdGluZyI+e3sndXBsb2FkJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+CiAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICA8ZGl2IG5nLXNob3c9ImZpbGVVcGxvYWRlci5yZXF1ZXN0aW5nIj4KQEAgLTI2Niw3ICsyNjYsNyBAQAogICAgICAgICA8L2Rpdj4KICAgICAgIDwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KLSAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIG5nLWRpc2FibGVkPSJ0ZW1wLmlucHJvY2VzcyI+Q2xvc2U8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgbmctZGlzYWJsZWQ9InRlbXAuaW5wcm9jZXNzIj5DbG9zZTwvYnV0dG9uPgogICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiAgIDwvZGl2PgpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL3NlYXJjaE5hdmJhci5odG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL21haW4vd2ViYXBwL2FwcC9wb2xpY3lBcHAvcG9saWN5LW1vZGVscy9FZGl0b3IvdGVtcGxhdGVzL3NlYXJjaE5hdmJhci5odG1sCmluZGV4IDcyOTg1YTEuLjc2OGZlNWUgMTAwNjQ0Ci0tLSBhL1BPTElDWS1TREstQVBQL3NyYy9tYWluL3dlYmFwcC9hcHAvcG9saWN5QXBwL3BvbGljeS1tb2RlbHMvRWRpdG9yL3RlbXBsYXRlcy9zZWFyY2hOYXZiYXIuaHRtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvbWFpbi93ZWJhcHAvYXBwL3BvbGljeUFwcC9wb2xpY3ktbW9kZWxzL0VkaXRvci90ZW1wbGF0ZXMvc2VhcmNoTmF2YmFyLmh0bWwKQEAgLTYyLDcgKzYyLDcgQEAKIAkJCQkJCQk8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cC1idG4iPgogCQkJCQkJCQk8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiIHJvbGU9Imdyb3VwIj4KIAkJCQkJCQkJCTxkaXYgY2xhc3M9ImRyb3Bkb3duIGRyb3Bkb3duLWxnIj4KLQkJCQkJCQkJCQk8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGUiCisJCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCBkcm9wZG93bi10b2dnbGUiCiAJCQkJCQkJCQkJCWRhdGEtdG9nZ2xlPSJkcm9wZG93biIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgogCQkJCQkJCQkJCQk8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KIAkJCQkJCQkJCQk8L2J1dHRvbj4KQEAgLTE2Niw3ICsxNjYsNyBAQAogCQkJCQkJCQkJCQk8L2Zvcm0+CiAJCQkJCQkJCQkJPC9kaXY+CiAJCQkJCQkJCQk8L2Rpdj4KLQkJCQkJCQkJCTxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IgorCQkJCQkJCQkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXBlZGVmYXVsdCIKIAkJCQkJCQkJCQluZy1jbGljaz0icmVmcmVzaChzZWFyY2ggPSBudWxsKTsiPgogCQkJCQkJCQkJCTxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj5DbGVhcjwvc3Bhbj4KIAkJCQkJCQkJCTwvYnV0dG9uPgpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lNYW5hZ2VyU2VydmxldFRlc3QuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvYWRtaW4vUG9saWN5TWFuYWdlclNlcnZsZXRUZXN0LmphdmEKaW5kZXggNzczOTU1ZC4uYTI1MDI3NiAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9hZG1pbi9Qb2xpY3lNYW5hZ2VyU2VydmxldFRlc3QuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2FkbWluL1BvbGljeU1hbmFnZXJTZXJ2bGV0VGVzdC5qYXZhCkBAIC0xOSwxMSArMTksMTYgQEAKICAqLwogcGFja2FnZSBvcmcub3BlbmVjb21wLnBvbGljeS5hZG1pbjsKIAoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CisKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZzsKIGltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwogCkBAIC0zMyw4ICszOCwxMyBAQAogaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29tbW9uLmxvZ2dpbmcuZmxleGxvZ2dlci5GbGV4TG9nZ2VyOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbW1vbi5sb2dnaW5nLmZsZXhsb2dnZXIuTG9nZ2VyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsZXIuQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXI7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxlci5Qb2xpY3lDb250cm9sbGVyOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1vZGVsLlJvbGVzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuZGFvLkNvbW1vbkNsYXNzRGFvOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuanBhLkFjdGlvbkJvZHlFbnRpdHk7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5qcGEuQ29uZmlndXJhdGlvbkRhdGFFbnRpdHk7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5qcGEuR3JvdXBQb2xpY3lTY29wZUxpc3Q7CiBpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kucmVzdC5qcGEuUG9saWN5RWRpdG9yU2NvcGVzOwogaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnJlc3QuanBhLlBvbGljeUVudGl0eTsKIGltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5yZXN0LmpwYS5Qb2xpY3lWZXJzaW9uOwpAQCAtNDMsMTEgKzUzLDEzIEBACiBwdWJsaWMgY2xhc3MgUG9saWN5TWFuYWdlclNlcnZsZXRUZXN0IGV4dGVuZHMgTW9ja2l0b3sKIAkKIAlwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nZ2VyID0gRmxleExvZ2dlci5nZXRMb2dnZXIoUG9saWN5TWFuYWdlclNlcnZsZXRUZXN0LmNsYXNzKTsKKwlwcml2YXRlIExpc3Q8U3RyaW5nPiBoZWFkZXJzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CiAKIAlwcml2YXRlIHN0YXRpYyBMaXN0PE9iamVjdD4gcm9sZXNkYXRhOwotCXByaXZhdGUgc3RhdGljIExpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhOworCXByaXZhdGUgc3RhdGljIExpc3Q8T2JqZWN0PiBiYXNlUG9saWN5RGF0YTsKIAlwcml2YXRlIHN0YXRpYyBMaXN0PE9iamVjdD4gcG9saWN5RWRpdG9yU2NvcGVzOwogCXByaXZhdGUgc3RhdGljIExpc3Q8T2JqZWN0PiBwb2xpY3lWZXJzaW9uOworCXByaXZhdGUgc3RhdGljIENvbW1vbkNsYXNzRGFvIGNvbW1vbkNsYXNzRGFvOwogCQogCUBCZWZvcmUKIAlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb257CkBAIC02OCw3ICs4MCw3IEBACiAgICAgICAgIHJvbGVzZGF0YS5hZGQocm9sZXMxKTsKICAgICAgICAgCiAgICAgICAgIC8vUG9saWN5RW50aXR5IERhdGEKLSAgICAgICAgcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBiYXNlUG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOwogICAgICAgICB0cnkgewogCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CkBAIC04MCw3ICs5MiwxMyBAQAogICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX1NhbXBsZVRlc3QuMS54bWwiKTsKICAgICAgICAgZW50aXR5LnNldFBvbGljeURhdGEocG9saWN5Q29udGVudCk7CiAgICAgICAgIGVudGl0eS5zZXRTY29wZSgiY29tIik7Ci0gICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisgICAgICAgIENvbmZpZ3VyYXRpb25EYXRhRW50aXR5IGNvbmZpZ3VyYXRpb25FbnRpdHkgPSBuZXcgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdCb2R5KCJTYW1wbGUgVGVzdCIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ1R5cGUoIk9USEVSIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlndXJhdGlvbk5hbWUoImNvbS5Db25maWdfU2FtcGxlVGVzdDEyMDYuMS50eHQiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIGJhc2VQb2xpY3lEYXRhLmFkZChlbnRpdHkpOwogICAgICAgICAKICAgICAgICAgLy9Qb2xpY3lFZGl0b3JTY29wZXMgZGF0YQogICAgICAgICBwb2xpY3lFZGl0b3JTY29wZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKQEAgLTEwNyw2ICsxMjUsMjEgQEAKIAl9CiAJCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW5pdCgpeworCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CisJCVNlcnZsZXRDb25maWcgc2VydmxldENvbmZpZyA9IG1vY2soU2VydmxldENvbmZpZy5jbGFzcyk7ICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAJd2hlbihzZXJ2bGV0Q29uZmlnLmdldEluaXRQYXJhbWV0ZXJOYW1lcygpKS50aGVuUmV0dXJuKENvbGxlY3Rpb25zLmVudW1lcmF0aW9uKGhlYWRlcnMpKTsKKyAgICAgICAgCXdoZW4oc2VydmxldENvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJYQUNNTF9QUk9QRVJUSUVTX05BTUUiKSkudGhlblJldHVybigieGFjbWwuYWRtaW4ucHJvcGVydGllcyIpOworICAgICAgICAJU3lzdGVtLnNldFByb3BlcnR5KCJ4YWNtbC5yZXN0LmFkbWluLmNsb3NlZExvb3BKU09OIiwgbmV3IEZpbGUoIi4iKS5nZXRDYW5vbmljYWxQYXRoKCkgKyBGaWxlLnNlcGFyYXRvciArICJzcmMiKyBGaWxlLnNlcGFyYXRvciArICJ0ZXN0IiArIEZpbGUuc2VwYXJhdG9yICsgInJlc291cmNlcyIgKyBGaWxlLnNlcGFyYXRvciArICJKU09OQ29uZmlnLmpzb24iKTsKKwkJCXNlcnZsZXQuaW5pdChzZXJ2bGV0Q29uZmlnKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCQlmYWlsKCk7CisJCX0KKwl9CisJCisJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmVQb2xpY3koKXsKIAkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOwogCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCkBAIC0xMTYsMTEgKzE0OSwxMiBAQAogICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcigie3BhcmFtczogeyBtb2RlOiAnREVTQ1JJQkVQT0xJQ1lGSUxFJywgcGF0aDogJ2NvbS5Db25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwnfX0iKSk7CiAgICAgICAgIHRyeSB7CiAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKLQkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKwkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihiYXNlUG9saWN5RGF0YSk7CiAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CiAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgewogCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQkJZmFpbCgpOwogCQl9CiAJfQogCQpAQCAtMTQ3LDkgKzE4MSwzOTAgQEAKICAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKICAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOwogICAgIAkJfQogICAgICAgICB9CiAJfQogCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdEJhc2VQb2xpY3lUZXN0KCl7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnQ29uZmlnX1NhbXBsZVRlc3QxMjA2LjEueG1sJyBhbmQgc2NvcGUgPSdjb20nIikpLnRoZW5SZXR1cm4oYmFzZVBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQorCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdEJSTVNQYXJhbVBvbGljeVRlc3QoKXsKKwkJTGlzdDxPYmplY3Q+IHBvbGljeURhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgU3RyaW5nIHBvbGljeUNvbnRlbnQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGNvbmZpZ0RhdGEgPSAiIjsKKyAgICAgICAgdHJ5IHsKKwkJCUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworCQkJcG9saWN5Q29udGVudCA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbCIpKTsKKwkJCWNvbmZpZ0RhdGEgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oImNvbS5Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEudHh0IikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiT1RIRVIiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWd1cmF0aW9uTmFtZSgiY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdEJSTVNSYXdQb2xpY3lUZXN0KCl7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CisgICAgICAgIFN0cmluZyBjb25maWdEYXRhID0gIiI7CisgICAgICAgIHRyeSB7CisJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkJCXBvbGljeUNvbnRlbnQgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oIkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbCIpKTsKKwkJCWNvbmZpZ0RhdGEgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oImNvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQiKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQl9CisgICAgICAgIFBvbGljeUVudGl0eSBlbnRpdHkgPSBuZXcgUG9saWN5RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJDb25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS54bWwiKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeURhdGEocG9saWN5Q29udGVudCk7CisgICAgICAgIGVudGl0eS5zZXRTY29wZSgiY29tIik7CisgICAgICAgIENvbmZpZ3VyYXRpb25EYXRhRW50aXR5IGNvbmZpZ3VyYXRpb25FbnRpdHkgPSBuZXcgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdCb2R5KGNvbmZpZ0RhdGEpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ1R5cGUoIk9USEVSIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlndXJhdGlvbk5hbWUoImNvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQiKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sJyBhbmQgc2NvcGUgPSdjb20nIikpLnRoZW5SZXR1cm4ocG9saWN5RGF0YSk7CisgICAgCQkJc2VydmxldC5zZXRQb2xpY3lDb250cm9sbGVyKGNvbnRyb2xsZXIpOworICAgIAkJCXNlcnZsZXQuc2V0VGVzdFVzZXJJZCgiVGVzdCIpOworICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CisgICAgCQl9CisgICAgICAgIH0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0Q2xvc2VkTG9vcEZhdWx0UG9saWN5VGVzdCgpeworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICBTdHJpbmcgY29uZmlnRGF0YSA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJDb25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS54bWwiKSk7CisJCQljb25maWdEYXRhID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJjb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEuanNvbiIpKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCX0KKyAgICAgICAgUG9saWN5RW50aXR5IGVudGl0eSA9IG5ldyBQb2xpY3lFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeU5hbWUoIkNvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiSlNPTiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ3VyYXRpb25OYW1lKCJjb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEuanNvbiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldERlc2NyaXB0aW9uKCJ0ZXN0Iik7CisgICAgICAgIGVudGl0eS5zZXRDb25maWd1cmF0aW9uRGF0YShjb25maWd1cmF0aW9uRW50aXR5KTsKKyAgICAgICAgcG9saWN5RGF0YS5hZGQoZW50aXR5KTsKKwkJUG9saWN5TWFuYWdlclNlcnZsZXQgc2VydmxldCA9IG5ldyBQb2xpY3lNYW5hZ2VyU2VydmxldCgpOworCQlIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UgPSBtb2NrKEh0dHBTZXJ2bGV0UmVzcG9uc2UuY2xhc3MpOyAKKyAgICAgICAgUG9saWN5Q29udHJvbGxlciBjb250cm9sbGVyID0gbW9jayhQb2xpY3lDb250cm9sbGVyLmNsYXNzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbGlzdC5hZGQoIntwYXJhbXM6IHsgbW9kZTogJ0VESVRGSUxFJywgcGF0aDogJy9jb20vQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGVkaXRDbG9zZWRMb29wUE1Qb2xpY3lUZXN0KCl7CisJCUxpc3Q8T2JqZWN0PiBwb2xpY3lEYXRhID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFN0cmluZyBwb2xpY3lDb250ZW50ID0gIiI7CisgICAgICAgIFN0cmluZyBjb25maWdEYXRhID0gIiI7CisgICAgICAgIHRyeSB7CisJCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKwkJCXBvbGljeUNvbnRlbnQgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oIkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbiIpKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCX0KKyAgICAgICAgUG9saWN5RW50aXR5IGVudGl0eSA9IG5ldyBQb2xpY3lFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeU5hbWUoIkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBDb25maWd1cmF0aW9uRGF0YUVudGl0eSBjb25maWd1cmF0aW9uRW50aXR5ID0gbmV3IENvbmZpZ3VyYXRpb25EYXRhRW50aXR5KCk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnQm9keShjb25maWdEYXRhKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdUeXBlKCJKU09OIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlndXJhdGlvbk5hbWUoImNvbS5Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLmpzb24iKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQorCQorCUBUZXN0CisJcHVibGljIHZvaWQgZWRpdE1pY3JvU2VydmljZVBvbGljeVRlc3QoKXsKKwkJR3JvdXBQb2xpY3lTY29wZUxpc3QgZ3JvdXBEYXRhID0gbmV3ICBHcm91cFBvbGljeVNjb3BlTGlzdCgpOworCQlncm91cERhdGEuc2V0R3JvdXBOYW1lKCJUZXN0Iik7CisJCWdyb3VwRGF0YS5zZXRHcm91cExpc3QoInJlc291cmNlPVNhbXBsZVJlc291cmNlLHNlcnZpY2U9U2FtcGxlU2VydmljZSx0eXBlPVNhbXBsZVR5cGUsY2xvc2VkTG9vcENvbnRyb2xOYW1lPVNhbXBsZUNsb3NlZExvb3AiKTsKKwkJTGlzdDxPYmplY3Q+IGdyb3VwTGlzdERhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJZ3JvdXBMaXN0RGF0YS5hZGQoZ3JvdXBEYXRhKTsKKwkJY29tbW9uQ2xhc3NEYW8gPSBtb2NrKENvbW1vbkNsYXNzRGFvLmNsYXNzKTsKKwkJQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXIuc2V0Q29tbW9uQ2xhc3NEYW8oY29tbW9uQ2xhc3NEYW8pOworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICBTdHJpbmcgY29uZmlnRGF0YSA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJDb25maWdfTVNfdkZpcmV3YWxsLjEueG1sIikpOworCQkJY29uZmlnRGF0YSA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiY29tLkNvbmZpZ19NU192RmlyZXdhbGwuMS5qc29uIikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkgY29uZmlndXJhdGlvbkVudGl0eSA9IG5ldyBDb25maWd1cmF0aW9uRGF0YUVudGl0eSgpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ0JvZHkoY29uZmlnRGF0YSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0Q29uZmlnVHlwZSgiSlNPTiIpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ3VyYXRpb25OYW1lKCJjb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLmpzb24iKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXREZXNjcmlwdGlvbigidGVzdCIpOworICAgICAgICBlbnRpdHkuc2V0Q29uZmlndXJhdGlvbkRhdGEoY29uZmlndXJhdGlvbkVudGl0eSk7CisgICAgICAgIHBvbGljeURhdGEuYWRkKGVudGl0eSk7CisJCVBvbGljeU1hbmFnZXJTZXJ2bGV0IHNlcnZsZXQgPSBuZXcgUG9saWN5TWFuYWdlclNlcnZsZXQoKTsKKwkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlID0gbW9jayhIdHRwU2VydmxldFJlc3BvbnNlLmNsYXNzKTsgCisgICAgICAgIFBvbGljeUNvbnRyb2xsZXIgY29udHJvbGxlciA9IG1vY2soUG9saWN5Q29udHJvbGxlci5jbGFzcyk7CisgICAgICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIGxpc3QuYWRkKCJ7cGFyYW1zOiB7IG1vZGU6ICdFRElURklMRScsIHBhdGg6ICcvY29tL0NvbmZpZ19NU192RmlyZXdhbGwuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29tbW9uQ2xhc3NEYW8uZ2V0RGF0YUJ5SWQoR3JvdXBQb2xpY3lTY29wZUxpc3QuY2xhc3MsICJncm91cExpc3QiLCAicmVzb3VyY2U9U2FtcGxlUmVzb3VyY2Usc2VydmljZT1TYW1wbGVTZXJ2aWNlLHR5cGU9U2FtcGxlVHlwZSxjbG9zZWRMb29wQ29udHJvbE5hbWU9U2FtcGxlQ2xvc2VkTG9vcCIpKS50aGVuUmV0dXJuKGdyb3VwTGlzdERhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0NvbmZpZ19NU192RmlyZXdhbGwuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGVkaXRGaXJld2FsbFBvbGljeVRlc3QoKXsKKwkJTGlzdDxPYmplY3Q+IHBvbGljeURhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgU3RyaW5nIHBvbGljeUNvbnRlbnQgPSAiIjsKKyAgICAgICAgU3RyaW5nIGNvbmZpZ0RhdGEgPSAiIjsKKyAgICAgICAgdHJ5IHsKKwkJCUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworCQkJcG9saWN5Q29udGVudCA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLnhtbCIpKTsKKwkJCWNvbmZpZ0RhdGEgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oImNvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEuanNvbiIpKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisJCX0KKyAgICAgICAgUG9saWN5RW50aXR5IGVudGl0eSA9IG5ldyBQb2xpY3lFbnRpdHkoKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeU5hbWUoIkNvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwiKTsKKyAgICAgICAgZW50aXR5LnNldFBvbGljeURhdGEocG9saWN5Q29udGVudCk7CisgICAgICAgIGVudGl0eS5zZXRTY29wZSgiY29tIik7CisgICAgICAgIENvbmZpZ3VyYXRpb25EYXRhRW50aXR5IGNvbmZpZ3VyYXRpb25FbnRpdHkgPSBuZXcgQ29uZmlndXJhdGlvbkRhdGFFbnRpdHkoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWdCb2R5KGNvbmZpZ0RhdGEpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldENvbmZpZ1R5cGUoIkpTT04iKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRDb25maWd1cmF0aW9uTmFtZSgiY29tLkNvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS5qc29uIik7CisgICAgICAgIGNvbmZpZ3VyYXRpb25FbnRpdHkuc2V0RGVzY3JpcHRpb24oInRlc3QiKTsKKyAgICAgICAgZW50aXR5LnNldENvbmZpZ3VyYXRpb25EYXRhKGNvbmZpZ3VyYXRpb25FbnRpdHkpOworICAgICAgICBwb2xpY3lEYXRhLmFkZChlbnRpdHkpOworCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CisJCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKKyAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IG1vY2soSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcyk7IAorICAgICAgICBQb2xpY3lDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtb2NrKFBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOworICAgICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBsaXN0LmFkZCgie3BhcmFtczogeyBtb2RlOiAnRURJVEZJTEUnLCBwYXRoOiAnL2NvbS9Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sJywgb25seUZvbGRlcnM6IGZhbHNlfX0iKTsKKyAgICAgICAgZm9yKGludCBpID0wOyBpIDwgbGlzdC5zaXplKCk7IGkrKyl7CisgICAgICAgIAlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihsaXN0LmdldChpKSkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAJCQl3aGVuKHJlcXVlc3QuZ2V0UmVhZGVyKCkpLnRoZW5SZXR1cm4ocmVhZGVyKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0Um9sZXMoIlRlc3QiKSkudGhlblJldHVybihyb2xlc2RhdGEpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXREYXRhQnlRdWVyeSgiRlJPTSBQb2xpY3lFbnRpdHkgd2hlcmUgcG9saWN5TmFtZSA9ICdDb25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sJyBhbmQgc2NvcGUgPSdjb20nIikpLnRoZW5SZXR1cm4ocG9saWN5RGF0YSk7CisgICAgCQkJc2VydmxldC5zZXRQb2xpY3lDb250cm9sbGVyKGNvbnRyb2xsZXIpOworICAgIAkJCXNlcnZsZXQuc2V0VGVzdFVzZXJJZCgiVGVzdCIpOworICAgIAkJCXNlcnZsZXQuZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgIAkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKyAgICAJCQlmYWlsKCk7CisgICAgCQl9CisgICAgICAgIH0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBlZGl0QWN0aW9uUG9saWN5VGVzdCgpeworCQlMaXN0PE9iamVjdD4gcG9saWN5RGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJpbmcgcG9saWN5Q29udGVudCA9ICIiOworICAgICAgICBTdHJpbmcgY29uZmlnRGF0YSA9ICIiOworICAgICAgICB0cnkgeworCQkJQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisJCQlwb2xpY3lDb250ZW50ID0gSU9VdGlscy50b1N0cmluZyhjbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJBY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbCIpKTsKKwkJCWNvbmZpZ0RhdGEgPSBJT1V0aWxzLnRvU3RyaW5nKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oImNvbS5BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLmpzb24iKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworCQl9CisgICAgICAgIFBvbGljeUVudGl0eSBlbnRpdHkgPSBuZXcgUG9saWN5RW50aXR5KCk7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lOYW1lKCJBY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbCIpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5RGF0YShwb2xpY3lDb250ZW50KTsKKyAgICAgICAgZW50aXR5LnNldFNjb3BlKCJjb20iKTsKKyAgICAgICAgQWN0aW9uQm9keUVudGl0eSBjb25maWd1cmF0aW9uRW50aXR5ID0gbmV3IEFjdGlvbkJvZHlFbnRpdHkoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbkVudGl0eS5zZXRBY3Rpb25Cb2R5KGNvbmZpZ0RhdGEpOworICAgICAgICBjb25maWd1cmF0aW9uRW50aXR5LnNldEFjdGlvbkJvZHlOYW1lKCJjb20uQWN0aW9uX1Rlc3RBY3Rpb25Qb2xpY3kuMS5qc29uIik7CisgICAgICAgIGVudGl0eS5zZXRBY3Rpb25Cb2R5RW50aXR5KGNvbmZpZ3VyYXRpb25FbnRpdHkpOworICAgICAgICBwb2xpY3lEYXRhLmFkZChlbnRpdHkpOworCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CisJCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKKyAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IG1vY2soSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcyk7IAorICAgICAgICBQb2xpY3lDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtb2NrKFBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOworICAgICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBsaXN0LmFkZCgie3BhcmFtczogeyBtb2RlOiAnRURJVEZJTEUnLCBwYXRoOiAnL2NvbS9BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbCcsIG9ubHlGb2xkZXJzOiBmYWxzZX19Iik7CisgICAgICAgIGZvcihpbnQgaSA9MDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspeworICAgICAgICAJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBTdHJpbmdSZWFkZXIobGlzdC5nZXQoaSkpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldFJvbGVzKCJUZXN0IikpLnRoZW5SZXR1cm4ocm9sZXNkYXRhKTsKKyAgICAJCQl3aGVuKGNvbnRyb2xsZXIuZ2V0RGF0YUJ5UXVlcnkoIkZST00gUG9saWN5RW50aXR5IHdoZXJlIHBvbGljeU5hbWUgPSAnQWN0aW9uX1Rlc3RBY3Rpb25Qb2xpY3kuMS54bWwnIGFuZCBzY29wZSA9J2NvbSciKSkudGhlblJldHVybihwb2xpY3lEYXRhKTsKKyAgICAJCQlzZXJ2bGV0LnNldFBvbGljeUNvbnRyb2xsZXIoY29udHJvbGxlcik7CisgICAgCQkJc2VydmxldC5zZXRUZXN0VXNlcklkKCJUZXN0Iik7CisgICAgCQkJc2VydmxldC5kb1Bvc3QocmVxdWVzdCwgcmVzcG9uc2UpOworICAgIAkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisgICAgCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZTEpOworICAgIAkJCWZhaWwoKTsKKyAgICAJCX0KKyAgICAgICAgfQorCX0KKwkKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGVkaXREZWNpc2lvblBvbGljeVRlc3QoKXsKKwkJTGlzdDxPYmplY3Q+IHBvbGljeURhdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgU3RyaW5nIHBvbGljeUNvbnRlbnQgPSAiIjsKKyAgICAgICAgdHJ5IHsKKwkJCUNsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworCQkJcG9saWN5Q29udGVudCA9IElPVXRpbHMudG9TdHJpbmcoY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiRGVjaXNpb25fVGVzdERlY2lzaW9uUG9saWN5V2l0aFJ1bGVBbGdvcml0aG1zLjEueG1sIikpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKwkJCWxvZ2dlci5lcnJvcigiRXhjZXB0aW9uIE9jY3VyZWQiK2UxKTsKKwkJfQorICAgICAgICBQb2xpY3lFbnRpdHkgZW50aXR5ID0gbmV3IFBvbGljeUVudGl0eSgpOworICAgICAgICBlbnRpdHkuc2V0UG9saWN5TmFtZSgiRGVjaXNpb25fVGVzdERlY2lzaW9uUG9saWN5V2l0aFJ1bGVBbGdvcml0aG1zLjEueG1sIik7CisgICAgICAgIGVudGl0eS5zZXRQb2xpY3lEYXRhKHBvbGljeUNvbnRlbnQpOworICAgICAgICBlbnRpdHkuc2V0U2NvcGUoImNvbSIpOworICAgICAgICBwb2xpY3lEYXRhLmFkZChlbnRpdHkpOworCQlQb2xpY3lNYW5hZ2VyU2VydmxldCBzZXJ2bGV0ID0gbmV3IFBvbGljeU1hbmFnZXJTZXJ2bGV0KCk7CisJCUh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0ID0gbW9jayhIdHRwU2VydmxldFJlcXVlc3QuY2xhc3MpOyAgICAgICAKKyAgICAgICAgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9IG1vY2soSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcyk7IAorICAgICAgICBQb2xpY3lDb250cm9sbGVyIGNvbnRyb2xsZXIgPSBtb2NrKFBvbGljeUNvbnRyb2xsZXIuY2xhc3MpOworICAgICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBsaXN0LmFkZCgie3BhcmFtczogeyBtb2RlOiAnRURJVEZJTEUnLCBwYXRoOiAnL2NvbS9EZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWwnLCBvbmx5Rm9sZGVyczogZmFsc2V9fSIpOworICAgICAgICBmb3IoaW50IGkgPTA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKXsKKyAgICAgICAgCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKGxpc3QuZ2V0KGkpKSk7CisgICAgICAgICAgICB0cnkgeworICAgIAkJCXdoZW4ocmVxdWVzdC5nZXRSZWFkZXIoKSkudGhlblJldHVybihyZWFkZXIpOworICAgIAkJCXdoZW4oY29udHJvbGxlci5nZXRSb2xlcygiVGVzdCIpKS50aGVuUmV0dXJuKHJvbGVzZGF0YSk7CisgICAgCQkJd2hlbihjb250cm9sbGVyLmdldERhdGFCeVF1ZXJ5KCJGUk9NIFBvbGljeUVudGl0eSB3aGVyZSBwb2xpY3lOYW1lID0gJ0RlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbCcgYW5kIHNjb3BlID0nY29tJyIpKS50aGVuUmV0dXJuKHBvbGljeURhdGEpOworICAgIAkJCXNlcnZsZXQuc2V0UG9saWN5Q29udHJvbGxlcihjb250cm9sbGVyKTsKKyAgICAJCQlzZXJ2bGV0LnNldFRlc3RVc2VySWQoIlRlc3QiKTsKKyAgICAJCQlzZXJ2bGV0LmRvUG9zdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgCQl9IGNhdGNoIChFeGNlcHRpb24gZTEpIHsKKyAgICAJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlMSk7CisgICAgCQkJZmFpbCgpOworICAgIAkJfQorICAgICAgICB9CisJfQogfQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0FkbWluVGFiQ29udHJvbGxlclRlc3QuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9BZG1pblRhYkNvbnRyb2xsZXJUZXN0LmphdmEKaW5kZXggNDNiOGE2Zi4uMDdiZDU0OSAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0FkbWluVGFiQ29udHJvbGxlclRlc3QuamF2YQorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQWRtaW5UYWJDb250cm9sbGVyVGVzdC5qYXZhCkBAIC0xOSwxMCArMTksMTIgQEAKICAqLwogcGFja2FnZSBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbGVyOwogCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOwogaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ud2hlbjsKIAoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC00MSwxMiArNDMsMjAgQEAKIAogCXByaXZhdGUgc3RhdGljIExvZ2dlciBsb2dnZXIgPSBGbGV4TG9nZ2VyLmdldExvZ2dlcihBZG1pblRhYkNvbnRyb2xsZXJUZXN0LmNsYXNzKTsKIAlwcml2YXRlIHN0YXRpYyBDb21tb25DbGFzc0RhbyBjb21tb25DbGFzc0RhbzsKKwlwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0OworCXByaXZhdGUgTW9ja0h0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2U7CiAJCiAJQEJlZm9yZQogCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAkJbG9nZ2VyLmluZm8oInNldFVwOiBFbnRlcmluZyIpOwogICAgICAgICBjb21tb25DbGFzc0RhbyA9IG1vY2soQ29tbW9uQ2xhc3NEYW8uY2xhc3MpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdCA9IG1vY2soSHR0cFNlcnZsZXRSZXF1ZXN0LmNsYXNzKTsgICAgICAgCisJCXJlc3BvbnNlID0gIG5ldyBNb2NrSHR0cFNlcnZsZXRSZXNwb25zZSgpOworCQkKKwkJQWRtaW5UYWJDb250cm9sbGVyLnNldENvbW1vbkNsYXNzRGFvKGNvbW1vbkNsYXNzRGFvKTsKKwkJCiAgICAgICAgIEdsb2JhbFJvbGVTZXR0aW5ncyBnbG9iYWxSb2xlID0gbmV3IEdsb2JhbFJvbGVTZXR0aW5ncygpOwogICAgICAgICBnbG9iYWxSb2xlLnNldExvY2tkb3duKHRydWUpOwogICAgICAgICBnbG9iYWxSb2xlLnNldFJvbGUoInN1cGVyLWFkbWluIik7CkBAIC01NywxNyArNjcsMjggQEAKIAkKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RHZXRBZG1pblJvbGUoKXsKLQkJSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QgPSBtb2NrKEh0dHBTZXJ2bGV0UmVxdWVzdC5jbGFzcyk7ICAgICAgIAotCQlNb2NrSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSA9ICBuZXcgTW9ja0h0dHBTZXJ2bGV0UmVzcG9uc2UoKTsKLQkJCiAJCUFkbWluVGFiQ29udHJvbGxlciBhZG1pbiA9IG5ldyBBZG1pblRhYkNvbnRyb2xsZXIoKTsKLQkJQWRtaW5UYWJDb250cm9sbGVyLnNldENvbW1vbkNsYXNzRGFvKGNvbW1vbkNsYXNzRGFvKTsKLQkJYWRtaW4uZ2V0QWRtaW5UYWJFbnRpdHlEYXRhKHJlcXVlc3QsIHJlc3BvbnNlKTsKLQkJCiAJCXRyeSB7CisJCQlhZG1pbi5nZXRBZG1pblRhYkVudGl0eURhdGEocmVxdWVzdCwgcmVzcG9uc2UpOwogCQkJYXNzZXJ0VHJ1ZShyZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKSAhPSBudWxsICYmIHJlc3BvbnNlLmdldENvbnRlbnRBc1N0cmluZygpLmNvbnRhaW5zKCJsb2NrZG93bmRhdGEiKSk7CiAJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewogCQkJbG9nZ2VyLmVycm9yKCJFeGNlcHRpb24gT2NjdXJlZCIrZSk7CisJCQlmYWlsKCk7CisJCX0KKwl9CisJCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0U2F2ZUFkbWluUm9sZSgpIHRocm93cyBFeGNlcHRpb257CisJCUFkbWluVGFiQ29udHJvbGxlciBhZG1pbiA9IG5ldyBBZG1pblRhYkNvbnRyb2xsZXIoKTsKKwkJU3RyaW5nIGRhdGEgPSAie1wibG9ja2Rvd25kYXRhXCI6e1wibG9ja2Rvd25cIjp0cnVlfX0iOworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IFN0cmluZ1JlYWRlcihkYXRhKSk7CQorCQl0cnkgeworCQkJd2hlbihyZXF1ZXN0LmdldFJlYWRlcigpKS50aGVuUmV0dXJuKHJlYWRlcik7CisJCQlhZG1pbi5zYXZlQWRtaW5UYWJMb2NrZG93blZhbHVlKHJlcXVlc3QsIHJlc3BvbnNlKTsKKwkJCWFzc2VydFRydWUocmVzcG9uc2UuZ2V0Q29udGVudEFzU3RyaW5nKCkgIT0gbnVsbCAmJiByZXNwb25zZS5nZXRDb250ZW50QXNTdHJpbmcoKS5jb250YWlucygiZGVzY3JpcHRpdmVTY29wZURpY3Rpb25hcnlEYXRhcyIpKTsKKwkJfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CisJCQlsb2dnZXIuZXJyb3IoIkV4Y2VwdGlvbiBPY2N1cmVkIitlKTsKKwkJCWZhaWwoKTsKIAkJfQogCX0KIAkKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlclRlc3QuamF2YSBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L2phdmEvb3JnL29wZW5lY29tcC9wb2xpY3kvY29udHJvbGxlci9DcmVhdGVEY2FlTWljcm9TZXJ2aWNlQ29udHJvbGxlclRlc3QuamF2YQppbmRleCBiNDYxOWI4Li5jYTkxNTQ0IDEwMDY0NAotLS0gYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9qYXZhL29yZy9vcGVuZWNvbXAvcG9saWN5L2NvbnRyb2xsZXIvQ3JlYXRlRGNhZU1pY3JvU2VydmljZUNvbnRyb2xsZXJUZXN0LmphdmEKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvamF2YS9vcmcvb3BlbmVjb21wL3BvbGljeS9jb250cm9sbGVyL0NyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyVGVzdC5qYXZhCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJLy9leHBlY3Q6IHVuaXF1ZUtleXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdmFsdWUgCiAJCUNyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyIGNvbnRyb2xsZXJBID0gbmV3IENyZWF0ZURjYWVNaWNyb1NlcnZpY2VDb250cm9sbGVyKCk7CiAJCVN0cmluZyBzdHIgPSAidGVzdGluZ1xcLmJ5Q29ycmVjdFdheVxcLk9mREFUQSI7CisJCVN0cmluZyB2YWx1ZSA9IG51bGw7CiAJCWFzc2VydEVxdWFscygxLCBjb250cm9sbGVyQS5zdHJpbmdCZXR3ZWVuRG90cyhzdHIpKTsKIAkJCiAJCS8vZXhwZWN0OiB1bmlxdWVLZXlzIHNob3VsZCBub3QgY29udGFpbiBhIHN0cmluZyB2YWx1ZSAKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbCBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M5MzY3Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0FjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKyA8UG9saWN5IHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmNvcmU6c2NoZW1hOndkLTE3IiBQb2xpY3lJZD0idXJuOnhhY21sOnBvbGljeTppZDpiOGUxODBkZS0zZGNjLTRiNWItODE0ZC05MjVlNjc0ZTU3M2MiIFZlcnNpb249IjEiIFJ1bGVDb21iaW5pbmdBbGdJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpydWxlLWNvbWJpbmluZy1hbGdvcml0aG06cGVybWl0LW92ZXJyaWRlcyI+CisgICAgIDxEZXNjcmlwdGlvbj5UZXN0QWN0aW9uUG9saWN5QENyZWF0ZWRCeTpAQ3JlYXRlZEJ5OkBNb2RpZmllZEJ5OkBNb2RpZmllZEJ5OjwvRGVzY3JpcHRpb24+CisgICAgIDxUYXJnZXQ+CisgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTI8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICA8L0FueU9mPgorICAgICA8L1RhcmdldD4KKyAgICAgPFJ1bGUgUnVsZUlkPSIiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgIDxUYXJnZXQvPgorICAgICAgICAgPENvbmRpdGlvbj4KKyAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjphbmQiPgorICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLW9uZS1hbmQtb25seSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iU2FtcGxUZXN0IiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj50ZXN0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1vbmUtYW5kLW9ubHkiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgPC9Db25kaXRpb24+CisgICAgICAgICA8T2JsaWdhdGlvbkV4cHJlc3Npb25zPgorICAgICAgICAgICAgIDxPYmxpZ2F0aW9uRXhwcmVzc2lvbiBPYmxpZ2F0aW9uSWQ9IlRlc3QiIEZ1bGZpbGxPbj0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJwZXJmb3JtZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6cmVjaXBpZW50LXN1YmplY3QiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlBFUEFjdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0idHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5SRVNUPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJ1cmwiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+aHR0cDovL2xvY2FsaG9zdC5jb208L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1ldGhvZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5HRVQ8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9ImJvZHkiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9BY3Rpb24vY29tLkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEueG1sLmpzb248L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgIDwvT2JsaWdhdGlvbkV4cHJlc3Npb24+CisgICAgICAgICA8L09ibGlnYXRpb25FeHByZXNzaW9ucz4KKyAgICAgPC9SdWxlPgorIDwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmMTg2NAotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEueG1sCkBAIC0wLDAgKzEsOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxQb2xpY3kgeG1sbnM9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6Y29yZTpzY2hlbWE6d2QtMTciIFBvbGljeUlkPSJ1cm46Y29tOnhhY21sOnBvbGljeTppZDoyNTZmNDcxMi1hOTY1LTQ4MTctYTg1MS1hNzFiZGViOWZiNDkiIFZlcnNpb249IjEiIFJ1bGVDb21iaW5pbmdBbGdJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpydWxlLWNvbWJpbmluZy1hbGdvcml0aG06cGVybWl0LW92ZXJyaWRlcyI+CisgICAgPERlc2NyaXB0aW9uPkJSTVNQYXJhbSB2RlcgRGVtbyBQb2xpY3lAQ3JlYXRlZEJ5OkBDcmVhdGVkQnk6QE1vZGlmaWVkQnk6QE1vZGlmaWVkQnk6PC9EZXNjcmlwdGlvbj4KKyAgICA8VGFyZ2V0PgorICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EUk9PTFM8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iRUNPTVBOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QlJNU19QQVJBTV9SVUxFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IkNvbmZpZ05hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkZhbHNlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgPC9BbnlPZj4KKyAgICA8L1RhcmdldD4KKyAgICA8UnVsZSBSdWxlSWQ9InVybjpjb206eGFjbWw6cnVsZTppZDo4Y2RiODhhYS00NDhiLTRlZDEtYmNlNS02YTAzNzY1MWU3M2MiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QUNDRVNTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlnPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgIDwvVGFyZ2V0PgorICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbnM+CisgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iQlJNU1BBUkFNSUQiIEFwcGxpZXNUbz0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlndXJhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlVSTElEIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNhbnlVUkkiPiRVUkwvQ29uZmlnL2NvbS5Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEudHh0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0JSTVNfUGFyYW1fQlJNU1BhcmFtdkZXRGVtb1BvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlZlcnNpb25OdW1iZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkVDT01QTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EUk9PTFM8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpDb25maWdOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkJSTVNfUEFSQU1fUlVMRTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9ImtleTpjb250cm9sbGVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnZGVzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJndWFyZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5GYWxzZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlRUTERhdGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbj4KKyAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9ucz4KKyAgICA8L1J1bGU+Cis8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYThhYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbApAQCAtMCwwICsxLDExMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorIDxQb2xpY3kgeG1sbnM9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6Y29yZTpzY2hlbWE6d2QtMTciIFBvbGljeUlkPSJ1cm46eGFjbWw6cG9saWN5OmlkOjA1YzFjNGViLWE5NGMtNGYxYy04ZmY3LTU0OGY3ZDBiMDNjMiIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICAgPERlc2NyaXB0aW9uPlRlc3RCUk1TUmF3UG9saWN5QENyZWF0ZWRCeTpAQ3JlYXRlZEJ5OkBNb2RpZmllZEJ5OkBNb2RpZmllZEJ5OjwvRGVzY3JpcHRpb24+CisgICAgIDxUYXJnZXQ+CisgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19CUk1TX1Jhd19UZXN0QlJNU1Jhd1BvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRST09MUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iRUNPTVBOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+QlJNU19SQVdfUlVMRTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iQ29uZmlnTmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkhpZ2g8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4yPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgIDwvQW55T2Y+CisgICAgIDwvVGFyZ2V0PgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkFDQ0VTUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iQlJNU1JBV0lEIiBBcHBsaWVzVG89IlBlcm1pdCI+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0idHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlndXJhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVVJMSUQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNhbnlVUkkiPiRVUkwvQ29uZmlnL2NvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQ8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlZlcnNpb25OdW1iZXIiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkVDT01QTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RFJPT0xTPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpDb25maWdOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5CUk1TX1JBV19SVUxFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJjb250cm9sbGVyOlRlc3RDb250cm9sbGVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj57CisgICAgICJhcnRpZmFjdElkIjogInRlc3RpbmciLAorICAgICAiZ3JvdXBJZCIgOiAib3JnLm9wZW5lY29tcCIKKyB9PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJkZXBlbmRlbmNpZXM6VGVzdEJSTVNEZXBlbmRlbmN5LCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+W3sKKyAgICAgImdyb3VwSWQiIDoib3JnLnRlc3QiICwKKyAgICAgImFydGlmYWN0SWQiIDogInRlc3RfMi4xMCIsCisgICAgICJ2ZXJzaW9uIiA6ICIzLjAuMiIsCisgICAgICJleGNsdXNpb25zIiA6IFsgeworICAgICAgICAgImdyb3VwSWQiIDoib3JnLnRlc3QudGVzdHMiICwKKyAgICAgICAgICJhcnRpZmFjdElkIiA6ICJ0ZXN0LWNvbmZpZ18yLjEwIgorICAgICB9XQorIH1dPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJrZXk6Y29udHJvbGxlciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+dkZXPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+SGlnaDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza0xldmVsIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4yPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJndWFyZCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VHJ1ZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgorICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgPC9SdWxlPgorIDwvUG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzNGNhZQotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEueG1sCkBAIC0wLDAgKzEsODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKyA8UG9saWN5IHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmNvcmU6c2NoZW1hOndkLTE3IiBQb2xpY3lJZD0idXJuOnhhY21sOnBvbGljeTppZDoyZjVjMWIxZS03Y2Q0LTRlNzEtOWEwZC0yZmNlZjJhNmNiN2IiIFZlcnNpb249IjEiIFJ1bGVDb21iaW5pbmdBbGdJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpydWxlLWNvbWJpbmluZy1hbGdvcml0aG06cGVybWl0LW92ZXJyaWRlcyI+CisgICAgIDxEZXNjcmlwdGlvbj5UZXN0RmlyZVdhbGxQb2xpY3lAQ3JlYXRlZEJ5OkBDcmVhdGVkQnk6QE1vZGlmaWVkQnk6QE1vZGlmaWVkQnk6PC9EZXNjcmlwdGlvbj4KKyAgICAgPFRhcmdldD4KKyAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRlc3RGaXJlV2FsbFBvbGljeTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iQ29uZmlnTmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UcnVlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9Imd1YXJkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICA8L0FueU9mPgorICAgICA8L1RhcmdldD4KKyAgICAgPFJ1bGUgUnVsZUlkPSIiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgIDxUYXJnZXQ+CisgICAgICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5BQ0NFU1M8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlnPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnJlc291cmNlOnJlc291cmNlLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgICA8L0FueU9mPgorICAgICAgICAgPC9UYXJnZXQ+CisgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbnM+CisgICAgICAgICAgICAgPEFkdmljZUV4cHJlc3Npb24gQWR2aWNlSWQ9ImZpcmV3YWxsQ29uZmlnSUQiIEFwcGxpZXNUbz0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJ0eXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWd1cmF0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJVUkxJRCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9Db25maWcvY29tLkNvbmZpZ19GV19UZXN0RmlyZVdhbGxQb2xpY3kuMS5qc29uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVmVyc2lvbk51bWJlciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6RUNPTVBOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIi8+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6Q29uZmlnTmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGVzdEZpcmVXYWxsUG9saWN5PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlRUTERhdGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA4LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbj4KKyAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbnM+CisgICAgIDwvUnVsZT4KKyA8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJlMzQyCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbApAQCAtMCwwICsxLDgzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjp4YWNtbDpwb2xpY3k6aWQ6OTQ3Y2ZhMzctNzFkYS00YzEwLTllNjQtYmIzNjM1YWE5ZjUyIiBWZXJzaW9uPSIxIiBSdWxlQ29tYmluaW5nQWxnSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6cnVsZS1jb21iaW5pbmctYWxnb3JpdGhtOnBlcm1pdC1vdmVycmlkZXMiPgorICAgICA8RGVzY3JpcHRpb24+VGVzdENsb3NlZExvb3BQb2xpY3lAQ3JlYXRlZEJ5OnJiNzE0N0BDcmVhdGVkQnk6QE1vZGlmaWVkQnk6cmI3MTQ3QE1vZGlmaWVkQnk6PC9EZXNjcmlwdGlvbj4KKyAgICAgPFRhcmdldD4KKyAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RENBRTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iRUNPTVBOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wNy0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgIDwvQW55T2Y+CisgICAgIDwvVGFyZ2V0PgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJQZXJtaXQiPgorICAgICAgICAgPFRhcmdldD4KKyAgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkFDQ0VTUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OmFjdGlvbiIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6YWN0aW9uOmFjdGlvbi1pZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6cmVzb3VyY2U6cmVzb3VyY2UtaWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxBZHZpY2VFeHByZXNzaW9ucz4KKyAgICAgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbiBBZHZpY2VJZD0iZmF1bHRJRCIgQXBwbGllc1RvPSJQZXJtaXQiPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZ3VyYXRpb248L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlVSTElEIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjYW55VVJJIj4kVVJML0NvbmZpZy9jb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEuanNvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19GYXVsdF9UZXN0Q2xvc2VkTG9vcFBvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVmVyc2lvbk51bWJlciIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0ibWF0Y2hpbmc6RUNPTVBOYW1lIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5EQ0FFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRydWU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlRUTERhdGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjA3LTA2LTIwMTc8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbj4KKyAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbnM+CisgICAgIDwvUnVsZT4KKyA8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbCBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfTVNfdkZpcmV3YWxsLjEueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZDBiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbApAQCAtMCwwICsxLDExNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjpjb206eGFjbWw6cG9saWN5OmlkOjM0OTI4YjA1LWIwZjYtNDk3NC04NDU4LWY0ZDM0YTJhMTc2NCIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICA8RGVzY3JpcHRpb24+TWljcm8gU2VydmljZSB2RmlyZXdhbGwgRGVtbyBQb2xpY3lAQ3JlYXRlZEJ5OmRlbW9AQ3JlYXRlZEJ5OkBNb2RpZmllZEJ5OmRlbW9ATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgIDxUYXJnZXQ+CisgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5jb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJQb2xpY3lOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkRDQUU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iRUNPTVBOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlQ29uZmlnTmFtZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJDb25maWdOYW1lIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGNhTWV0cmljcy12MS4wLjAuNTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9InNlcnZpY2UiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4vc2VydmljZXMvY2RhcC10Y2EtaGktbG8vaW5zdGFuY2VzL2RlbW8vY29uZmlndXJhdGlvbi9tZXRyaWNzUGVyRnVuY3Rpb25hbFJvbGUvdkZpcmV3YWxsPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBBdHRyaWJ1dGVJZD0idXVpZCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVNlcnZpY2VMb2NhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9ImxvY2F0aW9uIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlUmlza1R5cGU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5GYWxzZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9Imd1YXJkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDctMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgIDwvQW55T2Y+CisgICAgPC9UYXJnZXQ+CisgICAgPFJ1bGUgUnVsZUlkPSJ1cm46Y29tOnhhY21sOnJ1bGU6aWQ6MDYzMTYxZGUtMDUzNC00OTg5LWJkMDEtNDJmNzg0ZGFmMjFlIiBFZmZlY3Q9IlBlcm1pdCI+CisgICAgICAgIDxUYXJnZXQ+CisgICAgICAgICAgICA8QW55T2Y+CisgICAgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkFDQ0VTUzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6YWN0aW9uIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDphY3Rpb246YWN0aW9uLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPkNvbmZpZzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnJlc291cmNlOnJlc291cmNlLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICAgICA8L0FueU9mPgorICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgPEFkdmljZUV4cHJlc3Npb25zPgorICAgICAgICAgICAgPEFkdmljZUV4cHJlc3Npb24gQWR2aWNlSWQ9Ik1TSUQiIEFwcGxpZXNUbz0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9InR5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlndXJhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlVSTElEIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNhbnlVUkkiPiRVUkwvQ29uZmlnL2NvbS5Db25maWdfTVNfdkZpcmV3YWxsLjEuanNvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19NU192RmlyZXdhbGwuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJWZXJzaW9uTnVtYmVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpFQ09NUE5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+RENBRTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkNvbmZpZ05hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlQ29uZmlnTmFtZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOnNlcnZpY2UiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+VGNhTWV0cmljcy12MS4wLjAuNTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOnV1aWQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+L3NlcnZpY2VzL2NkYXAtdGNhLWhpLWxvL2luc3RhbmNlcy9kZW1vL2NvbmZpZ3VyYXRpb24vbWV0cmljc1BlckZ1bmN0aW9uYWxSb2xlL3ZGaXJld2FsbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOkxvY2F0aW9uIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVNlcnZpY2VMb2NhdGlvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlByaW9yaXR5IiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrVHlwZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5TYW1wbGVSaXNrVHlwZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlJpc2tMZXZlbCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iZ3VhcmQiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9IlRUTERhdGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDctMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgIDwvQWR2aWNlRXhwcmVzc2lvbj4KKyAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9ucz4KKyAgICA8L1J1bGU+Cis8L1BvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWwgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX1BNX1Rlc3RDbG9zZWRMb29wUE1Qb2xpY3kuMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1NmNmNAotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLnhtbApAQCAtMCwwICsxLDkwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CisgPFBvbGljeSB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpjb3JlOnNjaGVtYTp3ZC0xNyIgUG9saWN5SWQ9InVybjp4YWNtbDpwb2xpY3k6aWQ6YTNmZjNjNDgtYjE2Zi00MzZhLTlhYWEtYWM3YTM1MTViMGU4IiBWZXJzaW9uPSIxIiBSdWxlQ29tYmluaW5nQWxnSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6cnVsZS1jb21iaW5pbmctYWxnb3JpdGhtOnBlcm1pdC1vdmVycmlkZXMiPgorICAgICA8RGVzY3JpcHRpb24+VGVzdENsb3NlZExvb3BQTVBvbGljeUBDcmVhdGVkQnk6cmI3MTQ3QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpyYjcxNDdATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgICA8VGFyZ2V0PgorICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLnhtbDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpzdWJqZWN0LWNhdGVnb3J5OmFjY2Vzcy1zdWJqZWN0IiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IkVDT01QTmFtZSIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlJpc2tUeXBlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UcnVlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9Imd1YXJkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+UmVnaXN0cmF0aW9uIEZhaWx1cmUoVHJpbml0eSk8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IlNlcnZpY2VUeXBlIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgIDwvQWxsT2Y+CisgICAgICAgICA8L0FueU9mPgorICAgICA8L1RhcmdldD4KKyAgICAgPFJ1bGUgUnVsZUlkPSIiIEVmZmVjdD0iUGVybWl0Ij4KKyAgICAgICAgIDxUYXJnZXQ+CisgICAgICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5BQ0NFU1M8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Q29uZmlnPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnJlc291cmNlOnJlc291cmNlLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgICA8L0FueU9mPgorICAgICAgICAgPC9UYXJnZXQ+CisgICAgICAgICA8QWR2aWNlRXhwcmVzc2lvbnM+CisgICAgICAgICAgICAgPEFkdmljZUV4cHJlc3Npb24gQWR2aWNlSWQ9IlBNSUQiIEFwcGxpZXNUbz0iUGVybWl0Ij4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJ0eXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5Db25maWd1cmF0aW9uPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJVUkxJRCIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2FueVVSSSI+JFVSTC9Db25maWcvY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbjwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUG9saWN5TmFtZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+Y29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEueG1sPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJWZXJzaW9uTnVtYmVyIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4xPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJtYXRjaGluZzpFQ09NUE5hbWUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Im1hdGNoaW5nOlNlcnZpY2VUeXBlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5SZWdpc3RyYXRpb24gRmFpbHVyZShUcmluaXR5KTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgIDwvQXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24+CisgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iUmlza1R5cGUiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZVJpc2tUeXBlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJSaXNrTGV2ZWwiIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgSXNzdWVyPSIiPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPjE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgorICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQXNzaWdubWVudEV4cHJlc3Npb24gQXR0cmlidXRlSWQ9Imd1YXJkIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UcnVlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uIEF0dHJpYnV0ZUlkPSJUVExEYXRlIiBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIElzc3Vlcj0iIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgPC9BdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbj4KKyAgICAgICAgICAgICA8L0FkdmljZUV4cHJlc3Npb24+CisgICAgICAgICA8L0FkdmljZUV4cHJlc3Npb25zPgorICAgICA8L1J1bGU+CisgPC9Qb2xpY3k+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbCBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9Db25maWdfU2FtcGxlVGVzdDEyMDYuMS54bWwKaW5kZXggNWMzMmNkNC4uNTM5MDU0OCAxMDA2NDQKLS0tIGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0NvbmZpZ19TYW1wbGVUZXN0MTIwNi4xLnhtbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvQ29uZmlnX1NhbXBsZVRlc3QxMjA2LjEueG1sCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9Imd1YXJkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgogICAgICAgICAgICAgICAgIDwvTWF0Y2g+CiAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgotICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+TkE8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+MDgtMDYtMjAxNzwvQXR0cmlidXRlVmFsdWU+CiAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlRUTERhdGUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CiAgICAgICAgICAgICAgICAgPC9NYXRjaD4KICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0ib3JnLm9wZW5lY29tcC5mdW5jdGlvbi5yZWdleC1tYXRjaCI+CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UcnVlPC9BdHRyaWJ1dGVWYWx1ZT4KICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgogICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVBc3NpZ25tZW50RXhwcmVzc2lvbiBBdHRyaWJ1dGVJZD0iVFRMRGF0ZSIgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6YXR0cmlidXRlLWNhdGVnb3J5OnJlc291cmNlIiBJc3N1ZXI9IiI+Ci0gICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5OQTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj4wOC0wNi0yMDE3PC9BdHRyaWJ1dGVWYWx1ZT4KICAgICAgICAgICAgICAgICA8L0F0dHJpYnV0ZUFzc2lnbm1lbnRFeHByZXNzaW9uPgogICAgICAgICAgICAgPC9BZHZpY2VFeHByZXNzaW9uPgogICAgICAgICA8L0FkdmljZUV4cHJlc3Npb25zPgpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0RlY2lzaW9uX1Rlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtcy4xLnhtbCBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9EZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMGU2OAotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9EZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWwKQEAgLTAsMCArMSw4NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorIDxQb2xpY3kgeG1sbnM9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6Y29yZTpzY2hlbWE6d2QtMTciIFBvbGljeUlkPSJ1cm46eGFjbWw6cG9saWN5OmlkOmI2MjJkODA4LWJhNjItNDM5Mi05M2M4LWVhZmYwY2JmYjYzZiIgVmVyc2lvbj0iMSIgUnVsZUNvbWJpbmluZ0FsZ0lkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOnJ1bGUtY29tYmluaW5nLWFsZ29yaXRobTpwZXJtaXQtb3ZlcnJpZGVzIj4KKyAgICAgPERlc2NyaXB0aW9uPlRlc3REZWNpc2lvblBvbGljeVdpdGhSdWxlQWxnb3JpdGhtc0BDcmVhdGVkQnk6cmI3MTQ3QENyZWF0ZWRCeTpATW9kaWZpZWRCeTpyYjcxNDdATW9kaWZpZWRCeTo8L0Rlc2NyaXB0aW9uPgorICAgICA8VGFyZ2V0PgorICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgIDxBbGxPZj4KKyAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9Im9yZy5vcGVuZWNvbXAuZnVuY3Rpb24ucmVnZXgtbWF0Y2giPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPmNvbS5EZWNpc2lvbl9UZXN0RGVjaXNpb25Qb2xpY3lXaXRoUnVsZUFsZ29yaXRobXMuMS54bWw8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZURlc2lnbmF0b3IgQ2F0ZWdvcnk9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6c3ViamVjdC1jYXRlZ29yeTphY2Nlc3Mtc3ViamVjdCIgQXR0cmlidXRlSWQ9IlBvbGljeU5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5UZXN0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOnN1YmplY3QtY2F0ZWdvcnk6YWNjZXNzLXN1YmplY3QiIEF0dHJpYnV0ZUlkPSJFQ09NUE5hbWUiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgIDwvTWF0Y2g+CisgICAgICAgICAgICAgICAgIDxNYXRjaCBNYXRjaElkPSJvcmcub3BlbmVjb21wLmZ1bmN0aW9uLnJlZ2V4LW1hdGNoIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj50ZXN0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgPC9BbnlPZj4KKyAgICAgPC9UYXJnZXQ+CisgICAgIDxWYXJpYWJsZURlZmluaXRpb24gVmFyaWFibGVJZD0iVGVzdFNldHRpbmdzIj4KKyAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj50ZXN0PC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgPC9WYXJpYWJsZURlZmluaXRpb24+CisgICAgIDxSdWxlIFJ1bGVJZD0iIiBFZmZlY3Q9IlBlcm1pdCI+CisgICAgICAgICA8VGFyZ2V0PgorICAgICAgICAgICAgIDxBbnlPZj4KKyAgICAgICAgICAgICAgICAgPEFsbE9mPgorICAgICAgICAgICAgICAgICAgICAgPE1hdGNoIE1hdGNoSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDozLjA6ZnVuY3Rpb246c3RyaW5nLWVxdWFsLWlnbm9yZS1jYXNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+REVDSURFPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6YWN0aW9uIiBBdHRyaWJ1dGVJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDphY3Rpb246YWN0aW9uLWlkIiBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIiBNdXN0QmVQcmVzZW50PSJmYWxzZSIvPgorICAgICAgICAgICAgICAgICAgICAgPC9NYXRjaD4KKyAgICAgICAgICAgICAgICAgPC9BbGxPZj4KKyAgICAgICAgICAgICA8L0FueU9mPgorICAgICAgICAgPC9UYXJnZXQ+CisgICAgICAgICA8Q29uZGl0aW9uPgorICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOmFuZCI+CisgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbCI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+U2FtcGxlPC9BdHRyaWJ1dGVWYWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1vbmUtYW5kLW9ubHkiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlVmFsdWUgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyI+dGVzdDwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICA8QXBwbHkgRnVuY3Rpb25JZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjEuMDpmdW5jdGlvbjpzdHJpbmctb25lLWFuZC1vbmx5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJTYW1wbFRlc3QiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICA8L0NvbmRpdGlvbj4KKyAgICAgPC9SdWxlPgorICAgICA8UnVsZSBSdWxlSWQ9IiIgRWZmZWN0PSJEZW55Ij4KKyAgICAgICAgIDxUYXJnZXQ+CisgICAgICAgICAgICAgPEFueU9mPgorICAgICAgICAgICAgICAgICA8QWxsT2Y+CisgICAgICAgICAgICAgICAgICAgICA8TWF0Y2ggTWF0Y2hJZD0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDpmdW5jdGlvbjpzdHJpbmctZXF1YWwtaWdub3JlLWNhc2UiPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVWYWx1ZSBEYXRhVHlwZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nIj5ERUNJREU8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTphY3Rpb24iIEF0dHJpYnV0ZUlkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmFjdGlvbjphY3Rpb24taWQiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICA8L01hdGNoPgorICAgICAgICAgICAgICAgICA8L0FsbE9mPgorICAgICAgICAgICAgIDwvQW55T2Y+CisgICAgICAgICA8L1RhcmdldD4KKyAgICAgICAgIDxDb25kaXRpb24+CisgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246bm90Ij4KKyAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246YW5kIj4KKyAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPlNhbXBsZTwvQXR0cmlidXRlVmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGx5IEZ1bmN0aW9uSWQ9InVybjpvYXNpczpuYW1lczp0Yzp4YWNtbDoxLjA6ZnVuY3Rpb246c3RyaW5nLW9uZS1hbmQtb25seSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBdHRyaWJ1dGVEZXNpZ25hdG9yIENhdGVnb3J5PSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmF0dHJpYnV0ZS1jYXRlZ29yeTpyZXNvdXJjZSIgQXR0cmlidXRlSWQ9IlNhbXBsVGVzdCIgRGF0YVR5cGU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI3N0cmluZyIgTXVzdEJlUHJlc2VudD0iZmFsc2UiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8L0FwcGx5PgorICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6My4wOmZ1bmN0aW9uOnN0cmluZy1lcXVhbC1pZ25vcmUtY2FzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgPEF0dHJpYnV0ZVZhbHVlIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciPnRlc3Q8L0F0dHJpYnV0ZVZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBseSBGdW5jdGlvbklkPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGFjbWw6MS4wOmZ1bmN0aW9uOnN0cmluZy1vbmUtYW5kLW9ubHkiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXR0cmlidXRlRGVzaWduYXRvciBDYXRlZ29yeT0idXJuOm9hc2lzOm5hbWVzOnRjOnhhY21sOjMuMDphdHRyaWJ1dGUtY2F0ZWdvcnk6cmVzb3VyY2UiIEF0dHJpYnV0ZUlkPSJTYW1wbFRlc3QiIERhdGFUeXBlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNzdHJpbmciIE11c3RCZVByZXNlbnQ9ImZhbHNlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgICAgIDwvQXBwbHk+CisgICAgICAgICAgICAgPC9BcHBseT4KKyAgICAgICAgIDwvQ29uZGl0aW9uPgorICAgICA8L1J1bGU+CisgPC9Qb2xpY3k+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL0pTT05Db25maWcuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9KU09OQ29uZmlnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmOTg1OQotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9KU09OQ29uZmlnLmpzb24KQEAgLTAsMCArMSwxMzIgQEAKK1sKKyAgICB7CisgICAgICAgICJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiUmVnaXN0cmF0aW9uIEZhaWx1cmUoVHJpbml0eSkiLAorICAgICAgICAidmVydGljYU1ldHJpY3MiOiAiREFURVRJTUVVVENcbiBWTkZDX05BTUVcbiBCV19TSVBfU1RBVFNfUkVHSVNURVJfUkVTUE9OU0VfQ09ERV9WQUxVRSBcbkJXX1NJUF9TVEFUU19SRUdJU1RFUl9SRVNQT05TRV9JTlMgXG4gQldfU0lQX1NUQVRTX1JFR0lTVEVSX1JFU1BPTlNFX09VVFMiLAorICAgICAgICAiYXR0cmlidXRlcyI6IHsKKyAgICAgICAgICAgICJPbnNldCZhYmF0ZW1lbnQgYW5vbWFseSBkZXRlY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgIlB0aWxlTGltaXQiOiAiUGVyY2VudGlsZSB2YWx1ZSB1c2VkIGJ5IGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiVGhyZXNob2xkIjogImluaXRpYWwgdmFsdWUgZm9yIHRoZSBxdWFudGlsZSBhdCBwZXJjZW50aWxlKFB0aWxlTGltaXQpIHVzZWQgYnkgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiV2luZG93IjogIk51bWJlciBvZiB3ZWVrcyBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBrZWVwcyBpbiBtZW1vcnkgdG8gZXN0aW1hdGUgVGhyZXNob2xkIiwKKyAgICAgICAgICAgICAgICAiVHJhaW5pbmciOiAiTnVtYmVyIG9mIGhpc3RvcmljYWwgd2Vla3MgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgbmVlZHMgZm9yIHRyYWluaW5nICIsCisgICAgICAgICAgICAgICAgIkZyYWN0aW9uU2FtcGxlUGVyRGF5IjogIlRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIG1pbmltdW0gbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGRheSB0byBiZSB1c2VkIGluIHRoZSBkYWlseSBwZXJjZW50aWxlIGNvbXB1dGF0aW9uIHdoZW4gdXBkYXRpbmcgdGhlIGRpc3RyaWJ1dGlvbiB0YWlsIGNyb3NzaW5nIG1vZGVsLiBXaGVuIHRoZXJlIGFyZSBsZXNzIHNhbXBsZXMgdGhhbiB0aGF0IHRocmVzaG9sZCwgdGhlIG1vZGVsIGlzIG5vdCB1cGRhdGVkIHdpdGggdGhlc2Ugc2FtcGxlcy4gIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiQ29uc2VjdXRpdmVJbnRlcnZhbE9uc2V0IjogIk51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlcnZhbHMgbm9ybWFsaXplZCBtZXRyaWMgbXVzdCB0cmlnZ2VyIHRoZSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBiZWZvcmUgcmVzdWx0aW5nIGluIGFuIGFjdGlvbiIsCisgICAgICAgICAgICAgICAgIlJldHJ5VGltZXIiOiAiTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHBvbGljeSB0cmlnZ2VycyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiQWJhdGVtZW50IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJDb25zZWN1dGl2ZUludGVydmFsQWJhdGVtZW50IjogIk51bWJlciBvZiBjb25zZWN1dGl2ZSBpbnRlcnZhbHMgbm9ybWFsaXplZCBtZXRyaWMgZG9lcyBub3QgdHJpZ2dlciB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgYWZ0ZXIgb25zZXQgc2lnbmF0dXJlIHdhcyB0cmlnZ2VyZWQiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0ICYgYWJhdGVtZW50IFVFQiBub3RpZmljYXRpb24iOiB7CisgICAgICAgICAgICAgICAgIk9uc2V0TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBPblNldE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiLAorICAgICAgICAgICAgICAgICJBYmF0ZW1lbnRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIEFiYXRlbWVudE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiLAorICAgICAgICAgICAgICAgICJQb2xpY3lOYW1lIjogIlZhbHVlIG9mIGZpZWxkIFBvbGljeU5hbWUgc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJwb2xpY3lEZXNjcmlwdGlvbiI6ICJQb2xpY3kgdG8gZGV0ZWN0IGluc3RhbmNlcyB3aGVyZSBTSVAgcmVnaXN0cmF0aW9uIHJhdGUgZXhjZWVkcyBhIG5vcm1hbCBsZXZlbCBvdmVyIGEgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNhbXBsaW5nIHBlcmlvZHMuIFxuIE5vdGVzIFxuICgxKSBWZXJ0aWNhIG1ldHJpY3Mgbm9ybWFsaXplZCBhbmQgY29tYmluZWQgaW4gYSBTSVAgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcHJvYmFiaWxpdHkgcGVyIFNpdGUgYW5kIHBlciBWTS4gXG4gKDIpIEFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIG9wZXJhdGVzIG9uIFNJUCByZWdpc3RyYXRpb24gZmFpbHVyZSBwcm9iYWJpbGl0eS4gXG4gKDMpIEFub21hbHkgZGV0ZWN0aW9uIGNvbnNpc3RzIG9mIGFuIGVzdGltYXRlZCBkaXN0cmlidXRpb24gcGVyY2VudGlsZSB0aHJlc2hvbGQgY3Jvc3NpbmcuIFxuICg0KSBBY3Rpb25zOiBTZW5kIGVtYWlsIGFuZC9vciBVRUIgbm90aWZpY2F0aW9uIgorICAgIH0sCisgICAgeworICAgICAgICAic2VydmljZVR5cGVQb2xpY3lOYW1lIjogIkludGVybmF0aW9uYWwgRnJhdWQoVHJpbml0eSkiLAorICAgICAgICAidmVydGljYU1ldHJpY3MiOiAiSU5URVJWQUxfU1RBUlRfVFNcbiBDVVNUT01FUlxuIEFfU0lURVxuIEFfU0JHXG4gQldcbiBaX0NPVU5UUllcbiBDQUxMX0NPVU5UXG4gTUlOVVRFU19PRl9VU0UiLAorICAgICAgICAiYXR0cmlidXRlcyI6IHsKKyAgICAgICAgICAgICJPbnNldCZhYmF0ZW1lbnQgYW5vbWFseSBkZXRlY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgIlB0aWxlTGltaXQiOiAiUGVyY2VudGlsZSB2YWx1ZSB1c2VkIGJ5IGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiVGhyZXNob2xkIjogImluaXRpYWwgdmFsdWUgZm9yIHRoZSBxdWFudGlsZSBhdCBwZXJjZW50aWxlKFB0aWxlTGltaXQpIHVzZWQgYnkgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIiwKKyAgICAgICAgICAgICAgICAiV2luZG93IjogIk51bWJlciBvZiB3ZWVrcyBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBrZWVwcyBpbiBtZW1vcnkgdG8gZXN0aW1hdGUgVGhyZXNob2xkIiwKKyAgICAgICAgICAgICAgICAiVHJhaW5pbmciOiAiTnVtYmVyIG9mIGhpc3RvcmljYWwgd2Vla3MgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgbmVlZHMgZm9yIHRyYWluaW5nICIsCisgICAgICAgICAgICAgICAgICJGcmFjdGlvblNhbXBsZVBlckRheSI6ICJUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBtaW5pbXVtIG51bWJlciBvZiBzYW1wbGVzIHBlciBkYXkgdG8gYmUgdXNlZCBpbiB0aGUgZGFpbHkgcGVyY2VudGlsZSBjb21wdXRhdGlvbiB3aGVuIHVwZGF0aW5nIHRoZSBkaXN0cmlidXRpb24gdGFpbCBjcm9zc2luZyBtb2RlbC4gV2hlbiB0aGVyZSBhcmUgbGVzcyBzYW1wbGVzIHRoYW4gdGhhdCB0aHJlc2hvbGQsIHRoZSBtb2RlbCBpcyBub3QgdXBkYXRlZCB3aXRoIHRoZXNlIHNhbXBsZXMuICIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIkNvbnNlY3V0aXZlSW50ZXJ2YWxPbnNldCI6ICJOdW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZXJ2YWxzIG5vcm1hbGl6ZWQgbWV0cmljIG11c3QgdHJpZ2dlciB0aGUgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwgYmVmb3JlIHJlc3VsdGluZyBpbiBhbiBhY3Rpb24iLAorICAgICAgICAgICAgICAgICJSZXRyeVRpbWVyIjogIk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBwb2xpY3kgdHJpZ2dlcnMiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIkFiYXRlbWVudCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiQ29uc2VjdXRpdmVJbnRlcnZhbEFiYXRlbWVudCI6ICJOdW1iZXIgb2YgY29uc2VjdXRpdmUgaW50ZXJ2YWxzIG5vcm1hbGl6ZWQgbWV0cmljIGRvZXMgbm90IHRyaWdnZXIgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGFmdGVyIG9uc2V0IHNpZ25hdHVyZSB3YXMgdHJpZ2dlcmVkIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCAmIGFiYXRlbWVudCBVRUIgbm90aWZpY2F0aW9uICI6IHsKKyAgICAgICAgICAgICAgICAiT25zZXRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIE9uU2V0TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIkFiYXRlbWVudE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgQWJhdGVtZW50TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIlBvbGljeU5hbWUiOiAiVmFsdWUgb2YgZmllbGQgUG9saWN5TmFtZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInBvbGljeURlc2NyaXB0aW9uIjogIlBvbGljeSB0byBkZXRlY3QgaW5zdGFuY2VzIHdoZXJlIGNvdW50IG9mIGNhbGxzIHRvd2FyZHMgYW4gaW50ZXJuYXRpb25hbCBkZXN0aW5hdGlvbiBleGNlZWRzIGEgbm9ybWFsIGxldmVsIG92ZXIgYSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2FtcGxpbmcgcGVyaW9kcy4gXG4gTm90ZXMgXG4gKDEpIFZlcnRpY2EgbWV0cmljcyBub3JtYWxpemVkIGFuZCBjb21iaW5lZCBpbiBhIFNJUCByZWdpc3RyYXRpb24gZmFpbHVyZSBwcm9iYWJpbGl0eSBwZXIgQ3VzdG9tZXIsIHBlciBTaXRlIGFuZCBwZXIgVk0uIFxuICgyKSBBbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBvcGVyYXRlcyBvbiBjb3VudHMgdG93YXJkcyBhbiBpbnRlcm5hdGlvbmFsIGRlc3RpbmF0aW9uLiBcbiAoMykgQW5vbWFseSBkZXRlY3Rpb24gY29uc2lzdHMgb2YgYW4gZXN0aW1hdGVkIGRpc3RyaWJ1dGlvbiBwZXJjZW50aWxlIHRocmVzaG9sZCBjcm9zc2luZy4gXG4gKDQpIEFjdGlvbnM6IFNlbmQgZW1haWwgYW5kL29yIFVFQiBub3RpZmljYXRpb24iCisgICAgfSwKKyAgICB7CisgICAgICAgICJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiTm8gZGlhbCB0b25lKFRyaW5pdHkpIiwKKyAgICAgICAgInZlcnRpY2FNZXRyaWNzIjogIklOVEVSVkFMX1NUQVJUX1RTXG4gU1VNKENBTExTX0FUVEVNUFRFRClcbiBTVU0oTk9fQU5TV0VSX09SX1ZPSUNFX01BSUwpXG4gQV9TSVRFIG9yIEFfU0JHIG9yIEJXIG9yIENVU1RPTUVSIiwKKyAgICAgICAgImF0dHJpYnV0ZXMiOiB7CisgICAgICAgICAgICAiT25zZXQmYWJhdGVtZW50IGFub21hbHkgZGV0ZWN0aW9uIjogeworICAgICAgICAgICAgICAgICJQdGlsZUxpbWl0IjogIlBlcmNlbnRpbGUgdmFsdWUgdXNlZCBieSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCIsCisgICAgICAgICAgICAgICAgIlRocmVzaG9sZCI6ICJpbml0aWFsIHZhbHVlIGZvciB0aGUgcXVhbnRpbGUgYXQgcGVyY2VudGlsZShQdGlsZUxpbWl0KSB1c2VkIGJ5IHRoZSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCIsCisgICAgICAgICAgICAgICAgIldpbmRvdyI6ICJOdW1iZXIgb2Ygd2Vla3MgYW5vbWFseSBkZXRlY3Rpb24gbW9kZWwga2VlcHMgaW4gbWVtb3J5IHRvIGVzdGltYXRlIFRocmVzaG9sZCIsCisgICAgICAgICAgICAgICAgIlRyYWluaW5nIjogIk51bWJlciBvZiBoaXN0b3JpY2FsIHdlZWtzIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIG5lZWRzIGZvciB0cmFpbmluZyAiLAorICAgICAgICAgICAgICAgICAiRnJhY3Rpb25TYW1wbGVQZXJEYXkiOiAiVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgbWluaW11bSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgZGF5IHRvIGJlIHVzZWQgaW4gdGhlIGRhaWx5IHBlcmNlbnRpbGUgY29tcHV0YXRpb24gd2hlbiB1cGRhdGluZyB0aGUgZGlzdHJpYnV0aW9uIHRhaWwgY3Jvc3NpbmcgbW9kZWwuIFdoZW4gdGhlcmUgYXJlIGxlc3Mgc2FtcGxlcyB0aGFuIHRoYXQgdGhyZXNob2xkLCB0aGUgbW9kZWwgaXMgbm90IHVwZGF0ZWQgd2l0aCB0aGVzZSBzYW1wbGVzLiAiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJDb25zZWN1dGl2ZUludGVydmFsT25zZXQiOiAiTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVydmFscyBub3JtYWxpemVkIG1ldHJpYyBtdXN0IHRyaWdnZXIgdGhlIGFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIGJlZm9yZSByZXN1bHRpbmcgaW4gYW4gYWN0aW9uIiwKKyAgICAgICAgICAgICAgICAiUmV0cnlUaW1lciI6ICJNaW5pbXVtIGludGVydmFsIGJldHdlZW4gcG9saWN5IHRyaWdnZXJzIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJBYmF0ZW1lbnQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIkNvbnNlY3V0aXZlSW50ZXJ2YWxBYmF0ZW1lbnQiOiAiTnVtYmVyIG9mIGNvbnNlY3V0aXZlIGludGVydmFscyBub3JtYWxpemVkIG1ldHJpYyBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBhbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBhZnRlciBvbnNldCBzaWduYXR1cmUgd2FzIHRyaWdnZXJlZCIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgJiBhYmF0ZW1lbnQgVUVCIG5vdGlmaWNhdGlvbiAiOiB7CisgICAgICAgICAgICAgICAgIk9uc2V0TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBPblNldE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiLAorICAgICAgICAgICAgICAgICJBYmF0ZW1lbnRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIEFiYXRlbWVudE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiLAorICAgICAgICAgICAgICAgICJQb2xpY3lOYW1lIjogIlZhbHVlIG9mIGZpZWxkIFBvbGljeU5hbWUgc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIiCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJwb2xpY3lEZXNjcmlwdGlvbiI6ICJQb2xpY3kgdG8gZGV0ZWN0ID8gXG4gTm90ZXM6XG4gKDEpIEFjdGlvbnM6IFNlbmQgZW1haWwgYW5kL29yIFVFQiBub3RpZmljYXRpb24iCisgICAgfSwKKyAgICB7CisgICAgICAgICJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiQ2FsbCBzdG9ybShUcmluaXR5KSIsCisgICAgICAgICJ2ZXJ0aWNhTWV0cmljcyI6ICIiLAorICAgICAgICAiYXR0cmlidXRlcyI6IHsKKyAgICAgICAgICAgICJPbnNldCZhYmF0ZW1lbnQgYW5vbWFseSBkZXRlY3Rpb24iOiB7CisgICAgICAgICAgICAgICAgIlNlYXNvbkxlbmd0aCI6ICJNZXRyaWMgc2Vhc29uYWxpdHkgKDVtaW4gc2FtcGxpbmcgcGVyaW9kIHdpdGggNyBkYXlzIHNlYXNvbmFsaXR5OiA3KjI4OCkgdXNlZCBieSBIb2x0LVdpbnRlcnMgbW9kZWwiLAorICAgICAgICAgICAgICAgICJUcmFpbkxlbmd0aCI6ICJUcmFpbmluZyBsZW5ndGggKDVtaW4gc2FtcGxpbmcgcGVyaW9kIHdpdGggNyBkYXlzIHNlYXNvbmFsaXR5IGFuZCA1IGN5Y2xlcyB0cmFpbmluZzogNyoyODgqNSkgdXNlZCBieSBIb2x0LVdpbnRlcnMiLAorICAgICAgICAgICAgICAgICJBbHBoYSI6ICJTbW9vdGhpbmcgcGFyYW1ldGVyIChyYW5nZSAwLTEsIGRlZmF1bHQgMC4yKSIsCisgICAgICAgICAgICAgICAgIkJldGEiOiAiVHJlbmQgcGFyYW1ldGVyIChyYW5nZSAwLTEsIGRlZmF1bHQgMCkgIiwKKyAgICAgICAgICAgICAgICAiR2FtbWEiOiAiU2Vhc29uYWxpdHkgKHJhbmdlIDAtMSwgZGVmYXVsdCAwLjA1KSIsCisgICAgICAgICAgICAgICAgIkRldmlhdGlvbiBUaHJlc2hvbGQiOiAiQXBwcm94aW1hdGVseSBhIGxpbWl0IG9uIHRoZSBmYWN0b3IgYnkgaG93IG11Y2ggY3VycmVudCB2YWx1ZSBoYXMgZGV2aWF0ZWQgY29tcGFyZWQgdG8gZXhwZWN0ZWQgdmFyaWFuY2UiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIk9uc2V0IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJSZXRyeVRpbWVyIjogIk1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBwb2xpY3kgdHJpZ2dlcnMiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIkFiYXRlbWVudCBzaWduYXR1cmUgdHJpZ2dlciI6IHsKKyAgICAgICAgICAgICAgICAiSHctVGltZW91dCI6ICJNYXhpbXVtIHRpbWUgZm9yIGFuIEhlYWx0aENoZWNrIHJlc3BvbnNlIChtZWFzdXJlZCBmcm9tIHRoZSB0aW1lIGEgcG9zaXRpdmUgQXBwLUMgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkKSIsCisgICAgICAgICAgICAgICAgIk9uU2V0TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBNZXNzYWdlIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCICIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgJiBhYmF0ZW1lbnQgVUVCIG5vdGlmaWNhdGlvbiAiOiB7CisgICAgICAgICAgICAgICAgIkFiYXRlbWVudE1lc3NhZ2UiOiAiVmFsdWUgb2YgZmllbGQgQWJhdGVtZW50TWVzc2FnZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIsCisgICAgICAgICAgICAgICAgIlBvbGljeU5hbWUiOiAiVmFsdWUgb2YgZmllbGQgUG9saWN5TmFtZSBzZW50IGJ5IEFuYWx5dGljcyBFbmdpbmUgcHVibGlzaGVkIG9uIFVFQiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInBvbGljeURlc2NyaXB0aW9uIjogIlBvbGljeSB0byBkZXRlY3QgaW5zdGFuY2VzIHdoZXJlIGNvdW50IG9mIEZvcm1hdHRlZCB0YWJsZSA/IGV4Y2VlZHMgYSBwcmVkaWN0ZWQgbGV2ZWwuIFxuIE5vdGVzIFxuICgxKSBWZXJ0aWNhIG1ldHJpY3Mgbm9ybWFsaXplZCBhbmQgY29tYmluZWQgaW4gPyBwZXIgQ3VzdG9tZXIsIHBlciBTaXRlIGFuZCBwZXIgVk0uIFxuICgyKSBBbm9tYWx5IGRldGVjdGlvbiBtb2RlbCBvcGVyYXRlcyBvbiA/IFxuICgzKSBBbm9tYWx5IGRldGVjdGlvbiBjb25zaXN0cyBvZiBkZXRlY3RpbmcgZGV2aWF0aW9ucyBmcm9tIEhvbHQtV2ludGVycyBwcmVkaWN0aW9ucy4gXG4gKDQpIEFjdGlvbnM6IFNlbmQgZW1haWwgYW5kL29yIFVFQiBub3RpZmljYXRpb24iCisgICAgfSwKKyAgICB7CisgICAgICAgICJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiUmVnaXN0cmF0aW9uIHN0b3JtKFRyaW5pdHkpIiwKKyAgICAgICAgInZlcnRpY2FNZXRyaWNzIjogIiIsCisgICAgICAgICJhdHRyaWJ1dGVzIjogeworICAgICAgICAgICAgIk9uc2V0JmFiYXRlbWVudCBhbm9tYWx5IGRldGVjdGlvbiI6IHsKKyAgICAgICAgICAgICAgICAiU2Vhc29uTGVuZ3RoIjogIk1ldHJpYyBzZWFzb25hbGl0eSAoNW1pbiBzYW1wbGluZyBwZXJpb2Qgd2l0aCA3IGRheXMgc2Vhc29uYWxpdHk6IDcqMjg4KSB1c2VkIGJ5IEhvbHQtV2ludGVycyBtb2RlbCIsCisgICAgICAgICAgICAgICAgIlRyYWluTGVuZ3RoIjogIlRyYWluaW5nIGxlbmd0aCAoNW1pbiBzYW1wbGluZyBwZXJpb2Qgd2l0aCA3IGRheXMgc2Vhc29uYWxpdHkgYW5kIDUgY3ljbGVzIHRyYWluaW5nOiA3KjI4OCo1KSB1c2VkIGJ5IEhvbHQtV2ludGVycyIsCisgICAgICAgICAgICAgICAgIkFscGhhIjogIlNtb290aGluZyBwYXJhbWV0ZXIgKHJhbmdlIDAtMSwgZGVmYXVsdCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiQmV0YSI6ICJUcmVuZCBwYXJhbWV0ZXIgKHJhbmdlIDAtMSwgZGVmYXVsdCAwKSAiLAorICAgICAgICAgICAgICAgICJHYW1tYSI6ICJTZWFzb25hbGl0eSAocmFuZ2UgMC0xLCBkZWZhdWx0IDAuMDUpIiwKKyAgICAgICAgICAgICAgICAiRGV2aWF0aW9uIFRocmVzaG9sZCI6ICJBcHByb3hpbWF0ZWx5IGEgbGltaXQgb24gdGhlIGZhY3RvciBieSBob3cgbXVjaCBjdXJyZW50IHZhbHVlIGhhcyBkZXZpYXRlZCBjb21wYXJlZCB0byBleHBlY3RlZCB2YXJpYW5jZSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiT25zZXQgc2lnbmF0dXJlIHRyaWdnZXIiOiB7CisgICAgICAgICAgICAgICAgIlJldHJ5VGltZXIiOiAiTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIHBvbGljeSB0cmlnZ2VycyIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiQWJhdGVtZW50IHNpZ25hdHVyZSB0cmlnZ2VyIjogeworICAgICAgICAgICAgICAgICJIdy1UaW1lb3V0IjogIk1heGltdW0gdGltZSBmb3IgYW4gSGVhbHRoQ2hlY2sgcmVzcG9uc2UgKG1lYXN1cmVkIGZyb20gdGhlIHRpbWUgYSBwb3NpdGl2ZSBBcHAtQyByZXNwb25zZSB3YXMgcmVjZWl2ZWQpIiwKKyAgICAgICAgICAgICAgICAiT25TZXRNZXNzYWdlIjogIlZhbHVlIG9mIGZpZWxkIE1lc3NhZ2Ugc2VudCBieSBBbmFseXRpY3MgRW5naW5lIHB1Ymxpc2hlZCBvbiBVRUIgIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJPbnNldCAmIGFiYXRlbWVudCBVRUIgbm90aWZpY2F0aW9uICI6IHsKKyAgICAgICAgICAgICAgICAiQWJhdGVtZW50TWVzc2FnZSI6ICJWYWx1ZSBvZiBmaWVsZCBBYmF0ZW1lbnRNZXNzYWdlIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIiwKKyAgICAgICAgICAgICAgICAiUG9saWN5TmFtZSI6ICJWYWx1ZSBvZiBmaWVsZCBQb2xpY3lOYW1lIHNlbnQgYnkgQW5hbHl0aWNzIEVuZ2luZSBwdWJsaXNoZWQgb24gVUVCIgorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAicG9saWN5RGVzY3JpcHRpb24iOiAiUG9saWN5IHRvIGRldGVjdCBpbnN0YW5jZXMgd2hlcmUgY291bnQgb2YgRm9ybWF0dGVkIHRhYmxlID8gZXhjZWVkcyBhIHByZWRpY3RlZCBsZXZlbC4gXG4gTm90ZXMgXG4gKDEpIFZlcnRpY2EgbWV0cmljcyBub3JtYWxpemVkIGFuZCBjb21iaW5lZCBpbiA/IHBlciBDdXN0b21lciwgcGVyIFNpdGUgYW5kIHBlciBWTS4gXG4gKDIpIEFub21hbHkgZGV0ZWN0aW9uIG1vZGVsIG9wZXJhdGVzIG9uID8gXG4gKDMpIEFub21hbHkgZGV0ZWN0aW9uIGNvbnNpc3RzIG9mIGRldGVjdGluZyBkZXZpYXRpb25zIGZyb20gSG9sdC1XaW50ZXJzIHByZWRpY3Rpb25zLiBcbiAoNCkgQWN0aW9uczogU2VuZCBlbWFpbCBhbmQvb3IgVUVCIG5vdGlmaWNhdGlvbiIKKyAgICB9CitdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLmpzb24gYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkFjdGlvbl9UZXN0QWN0aW9uUG9saWN5LjEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjIyOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5BY3Rpb25fVGVzdEFjdGlvblBvbGljeS4xLmpzb24KQEAgLTAsMCArMSBAQAoreyJhIjoiYiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEudHh0IGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfQlJNU19QYXJhbV9CUk1TUGFyYW12RldEZW1vUG9saWN5LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NWFmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuMS50eHQKQEAgLTAsMCArMSwxMTQ1IEBACisvKiBBdXRvZ2VuZXJhdGVkIENvZGUgUGxlYXNlIERvbid0IGNoYW5nZS9yZW1vdmUgdGhpcyBjb21tZW50IHNlY3Rpb24uIFRoaXMgaXMgZm9yIHRoZSBVSSBwdXJwb3NlLiAKKwkgPCQlQlJNU1BhcmFtVGVtcGxhdGU9Q29udHJvbExvb3BEZW1vX19jbG9zZWRMb29wQ29udHJvbE5hbWUlJD4gCisgKi8gCisKKworLyotCisgKiA9PT09PT09PT09PT1MSUNFTlNFX1NUQVJUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogYXJjaGV0eXBlLWNsb3NlZC1sb29wLWRlbW8tcnVsZXMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKK3BhY2thZ2Ugb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3A7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5VVUlEOworCitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3AuVmlydHVhbENvbnRyb2xMb29wRXZlbnQ7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3AuQ29udHJvbExvb3BFdmVudFN0YXR1czsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5jb250cm9sbG9vcC5WaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuY29udHJvbGxvb3AuQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsb29wLkNvbnRyb2xMb29wT3BlcmF0aW9uOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmNvbnRyb2xsb29wLkNvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlcjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS50ZW1wbGF0ZS5kZW1vLkNvbnRyb2xMb29wRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlDbG91ZFJlZ2lvbjsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OUV4dHJhUHJvcGVydGllczsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OUV4dHJhUHJvcGVydHk7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlHZW5lcmljVk5GOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5SW5zdGFuY2VGaWx0ZXJzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5SW52ZW50b3J5UmVzcG9uc2VJdGVtOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5SW52ZW50b3J5UmVzcG9uc2VJdGVtczsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OU1hbmFnZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlOYW1lZFF1ZXJ5OworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5UXVlcnlQYXJhbWV0ZXJzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5UmVxdWVzdDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVJlcXVlc3RXcmFwcGVyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFhaS5BQUlOUUYxOTkuQUFJTlFGMTk5UmVzcG9uc2U7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlSZXNwb25zZVdyYXBwZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlTZXJ2aWNlSW5zdGFuY2U7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlUZW5hbnQ7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLkFBSU5RRjE5OS5BQUlOUUYxOTlWZk1vZHVsZTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hYWkuQUFJTlFGMTk5LkFBSU5RRjE5OVZTZXJ2ZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYWFpLnV0aWwuU2VyaWFsaXphdGlvbjsKKworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFwcGMuQ29tbW9uSGVhZGVyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFwcGMuUmVxdWVzdDsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5hcHBjLlJlc3BvbnNlOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFwcGMuUmVzcG9uc2VDb2RlOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LmFwcGMuUmVzcG9uc2VTdGF0dXM7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kuYXBwYy5SZXNwb25zZVZhbHVlOworCitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kudGVtcGxhdGUuZGVtby5FdmVudE1hbmFnZXI7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kudm5mLnRyYWZmaWNnZW5lcmF0b3IuUEdSZXF1ZXN0OworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnZuZi50cmFmZmljZ2VuZXJhdG9yLlBHU3RyZWFtOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5LnZuZi50cmFmZmljZ2VuZXJhdG9yLlBHU3RyZWFtczsKKworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09NYW5hZ2VyOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZXF1ZXN0OworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZXF1ZXN0U3RhdHVzOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZXF1ZXN0RGV0YWlsczsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5tc28uTVNPTW9kZWxJbmZvOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09DbG91ZENvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlcXVlc3RJbmZvOworaW1wb3J0IG9yZy5vcGVuZWNvbXAucG9saWN5Lm1zby5NU09SZXF1ZXN0UGFyYW1ldGVyczsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5tc28uTVNPUmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQ7CitpbXBvcnQgb3JnLm9wZW5lY29tcC5wb2xpY3kubXNvLk1TT1JlbGF0ZWRJbnN0YW5jZTsKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5tc28uTVNPUmVzcG9uc2U7CisKK2ltcG9ydCBvcmcub3BlbmVjb21wLnBvbGljeS5kcm9vbHMuc3lzdGVtLlBvbGljeUVuZ2luZTsKKworLy8KKy8vIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBydW50aW1lIHBvbGljeQorLy8KK2RlY2xhcmUgUGFyYW1zCisgICAgY2xvc2VkTG9vcENvbnRyb2xOYW1lIDogU3RyaW5nCisgICAgYWN0b3IgOiBTdHJpbmcKKyAgICBhYWlVUkwgOiBTdHJpbmcKKyAgICBhYWlVc2VybmFtZSA6IFN0cmluZworICAgIGFhaVBhc3N3b3JkIDogU3RyaW5nCisgICAgbXNvVVJMIDogU3RyaW5nCisgICAgbXNvVXNlcm5hbWUgOiBTdHJpbmcKKyAgICBtc29QYXNzd29yZCA6IFN0cmluZworICAgIGFhaU5hbWVkUXVlcnlVVUlEIDogU3RyaW5nCisgICAgYWFpUGF0dGVybk1hdGNoIDogaW50IAorICAgIG5vdGlmaWNhdGlvblRvcGljIDogU3RyaW5nCisgICAgYXBwY1RvcGljIDogU3RyaW5nCitlbmQKKworLyoKKyoKKyogQ2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSB0byBpbnNlcnQgdGhlIHBhcmFtZXRlcnMgaW50byB3b3JraW5nIG1lbW9yeSBmb3IgdGhpcyBDbG9zZWQgTG9vcCBwb2xpY3kuCisqIChDb21tZW50IFNFVFVQIHJ1bGUgb3V0IGZvciB0aGUgZmlyc3QgRUNPTVAgb3BlbnNvdXJjZSByZWxlYXNlIHNpbmNlIHBvbGljeSBCUk1TX0dXIGFscmVhZHkgcHV0cyBhIFBhcmFtcyBmYWN0IGluIHRoZXJlKQorKgorKgorKnJ1bGUgIkJSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuU0VUVVAiCisqCXdoZW4KKyoJdGhlbgorKgkJU3lzdGVtLm91dC5wcmludGxuKCJydWxlIFNFVFVQIGlzIHRyaWdnZXJlZC4iKTsKKyoJCVBhcmFtcyBwYXJhbXMgPSBuZXcgUGFyYW1zKCk7CisqCQlwYXJhbXMuc2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiKTsKKyoJCXBhcmFtcy5zZXRBY3RvcigiQVBQQyIpOworKgkJcGFyYW1zLnNldEFhaVVSTCgibnVsbCIpOworKgkJcGFyYW1zLnNldEFhaVVzZXJuYW1lKCJudWxsIik7CisqCQlwYXJhbXMuc2V0QWFpUGFzc3dvcmQoIm51bGwiKTsKKyoJCXBhcmFtcy5zZXRNc29VUkwoIm51bGwiKTsKKyoJCXBhcmFtcy5zZXRNc29Vc2VybmFtZSgibnVsbCIpOworKgkJcGFyYW1zLnNldE1zb1Bhc3N3b3JkKCJudWxsIik7CisqCQlwYXJhbXMuc2V0QWFpTmFtZWRRdWVyeVVVSUQoIm51bGwiKTsKKyoJCXBhcmFtcy5zZXRBYWlQYXR0ZXJuTWF0Y2goMSk7CisqCQlwYXJhbXMuc2V0Tm90aWZpY2F0aW9uVG9waWMoIlBPTElDWS1DTC1NR1QiKTsKKyoJCXBhcmFtcy5zZXRBcHBjVG9waWMoIkFQUEMtQ0wiKTsKKyoJCS8vCisqCQkvLyBUaGlzIHN0YXlzIGluIG1lbW9yeSBhcyBsb25nIGFzIHRoZSBydWxlIGlzIGFsaXZlIGFuZCBydW5uaW5nCisqCQkvLworKgkJaW5zZXJ0KHBhcmFtcyk7CisqZW5kCisqLworLyoKKyoKKyogVGhpcyBydWxlIHJlc3BvbmRzIHRvIERDQUUgRXZlbnRzCisqCisqLworcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5FVkVOVCIKKwl3aGVuCisgICAgICAgICRwYXJhbXMgOiBQYXJhbXMoIGdldENsb3NlZExvb3BDb250cm9sTmFtZSgpID09ICJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiICkKKyAgICAgICAgJGV2ZW50IDogVmlydHVhbENvbnRyb2xMb29wRXZlbnQoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkcGFyYW1zLmdldENsb3NlZExvb3BDb250cm9sTmFtZSgpLCBjbG9zZWRMb29wRXZlbnRTdGF0dXMgPT0gQ29udHJvbExvb3BFdmVudFN0YXR1cy5PTlNFVCApCisgICAgICAgIG5vdCAoIEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUgKSkKKwl0aGVuCisJCVN5c3RlbS5vdXQucHJpbnRsbigicnVsZSBFVkVOVCBpcyB0cmlnZ2VyZWQuIik7CisJCXRyeSB7CisJCQkvLyAKKwkJCS8vIENoZWNrIHRoZSByZXF1ZXN0SUQgaW4gdGhlIGV2ZW50IHRvIG1ha2Ugc3VyZSBpdCBpcyBub3QgbnVsbCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBFdmVudE1hbmFnZXIuIAorCQkJLy8gVGhlIEV2ZW50TWFuYWdlciB3aWxsIGRvIGV4dHJhIHN5bnRheCBjaGVja2luZyBhcyB3ZWxsIGNoZWNrIGlmIHRoZSBjbG9zZWQgbG9vcCBpcyBkaXNhYmxlZC8KKwkJCS8vCisJCQlpZiAoJGV2ZW50LnJlcXVlc3RJRCA9PSBudWxsKSB7CisJCQkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24oJGV2ZW50KTsKKwkJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLlJFSkVDVEVEOworCQkJCW5vdGlmaWNhdGlvbi5mcm9tID0gInBvbGljeSI7CisJCQkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSAiTWlzc2luZyByZXF1ZXN0SUQgZnJvbSBEQ0FFIGV2ZW50IjsKKwkJCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lTY29wZSA9ICJjb20iOworCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJCS8vCisJCQkJLy8gTGV0IGludGVyZXN0ZWQgcGFydGllcyBrbm93CisJCQkJLy8KKwkJCQl0cnkgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJCS8vCisJCQkJLy8gUmV0cmFjdCBpdCBmcm9tIG1lbW9yeQorCQkJCS8vCisJCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXZlbnQgd2l0aCByZXF1ZXN0SUQ9bnVsbCBoYXMgYmVlbiByZXRyYWN0ZWQuIik7CisJCQl9IGVsc2UgeworCQkJCS8vCisJCQkJLy8gQ3JlYXRlIGFuIEV2ZW50TWFuYWdlcgorCQkJCS8vCisJCQkJRXZlbnRNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgRXZlbnRNYW5hZ2VyKCRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksICRldmVudC5yZXF1ZXN0SUQsICRldmVudC50YXJnZXQpOworCQkJCS8vCisJCQkJLy8gRGV0ZXJtaW5lIGlmIEV2ZW50TWFuYWdlciBjYW4gYWN0aXZlbHkgcHJvY2VzcyB0aGUgZXZlbnQgKGkuZS4gc3ludGF4KQorCQkJCS8vCisJCQkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG1hbmFnZXIuYWN0aXZhdGUoJGV2ZW50KTsKKwkJCQlub3RpZmljYXRpb24uZnJvbSA9ICJwb2xpY3kiOyAKKwkJCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lTY29wZSA9ICJjb20iOworCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJCS8vCisJCQkJLy8gQXJlIHdlIGFjdGl2ZWx5IHB1cnN1aW5nIHRoaXMgZXZlbnQ/CisJCQkJLy8KKwkJCQlpZiAobm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9PSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuQUNUSVZFKSB7CisJCQkJCS8vCisJCQkJCS8vIEluc2VydCBFdmVudCBNYW5hZ2VyIGludG8gbWVtb3J5LCB0aGlzIHdpbGwgbm93IGtpY2sgb2ZmIHByb2Nlc3NpbmcuCisJCQkJCS8vCisJCQkJCWluc2VydChtYW5hZ2VyKTsKKwkJCQkJLy8KKwkJCQkJLy8gTGV0IGludGVyZXN0ZWQgcGFydGllcyBrbm93CisJCQkJCS8vCisJCQkJCXRyeSB7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCQl9CQkKKwkJCQl9IGVsc2UgeworCQkJCQkvLworCQkJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCQkJLy8KKwkJCQkJdHJ5IHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJCX0KKwkJCQkJLy8KKwkJCQkJLy8gUmV0cmFjdCBpdCBmcm9tIG1lbW9yeQorCQkJCQkvLworCQkJCQlyZXRyYWN0KCRldmVudCk7CisJCQkJfQorCQkJCS8vCisJCQkJLy8gTm93IHRoYXQgdGhlIG1hbmFnZXIgaXMgaW5zZXJ0ZWQgaW50byBEcm9vbHMgd29ya2luZyBtZW1vcnksIHdlJ2xsIHdhaXQgZm9yCisJCQkJLy8gYW5vdGhlciBydWxlIHRvIGZpcmUgaW4gb3JkZXIgdG8gY29udGludWUgcHJvY2Vzc2luZy4gVGhpcyB3YXkgd2UgY2FuIGFsc28KKwkJCQkvLyB0aGVuIHNjcmVlbiBmb3IgYWRkaXRpb25hbCBPTlNFVCBhbmQgQUJBVEVEIGV2ZW50cyBmb3IgdGhpcyBzYW1lIFJlcXVlc3RJRHMgCisJCQkJLy8gYW5kIGZvciBkaWZmZXJlbnQgUmVxdWVzdElEcyBidXQgd2l0aCB0aGUgc2FtZSBjbG9zZWRMb29wQ29udHJvbE5hbWUgYW5kIHRhcmdldC4KKwkJCQkvLworCQkJfQorCQkvLworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCVZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uKCRldmVudCk7CisJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLlJFSkVDVEVEOworCQkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSAiRXhjZXB0aW9uIG9jY3VycmVkICIgKyBlLmdldE1lc3NhZ2UoKTsKKwkJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJLy8KKwkJCS8vCisJCQkvLworCQkJdHJ5IHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJLy8KKwkJCS8vIFJldHJhY3QgdGhlIGV2ZW50CisJCQkvLworCQkJcmV0cmFjdCgkZXZlbnQpOworCQl9CitlbmQKKworLyoKKyoKKyogVGhpcyBydWxlIGhhcHBlbnMgd2hlbiB3ZSBnb3QgYSB2YWxpZCBPTlNFVCwgY2xvc2VkIGxvb3AgaXMgZW5hYmxlZCBhbmQgYW4gRXZlbnQgTWFuYWdlcgorKiBpcyBjcmVhdGVkLiBXZSBjYW4gc3RhcnQgdGhlIG9wZXJhdGlvbnMgZm9yIHRoaXMgY2xvc2VkIGxvb3AuCisqCisqLworcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5FVkVOVC5NQU5BR0VSIgorCXdoZW4KKwkJJHBhcmFtcyA6IFBhcmFtcyggZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCkgPT0gIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIgKQorCQkkZXZlbnQgOiBWaXJ0dWFsQ29udHJvbExvb3BFdmVudCggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksIGNsb3NlZExvb3BFdmVudFN0YXR1cyA9PSBDb250cm9sTG9vcEV2ZW50U3RhdHVzLk9OU0VUICkKKwkJJG1hbmFnZXIgOiBFdmVudE1hbmFnZXIoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkZXZlbnQuY2xvc2VkTG9vcENvbnRyb2xOYW1lLCBjb250cm9sTG9vcFJlc3VsdCA9PSBudWxsKQorCXRoZW4KKwkJU3lzdGVtLm91dC5wcmludGxuKCJydWxlIEVWRU5ULk1BTkFHRVIgaXMgdHJpZ2dlcmVkLiIpOworCQkvLworCQkvLyBDaGVjayB3aGljaCBldmVudCB0aGlzIGlzLgorCQkvLworCQlFdmVudE1hbmFnZXIuTkVXX0VWRU5UX1NUQVRVUyBldmVudFN0YXR1cyA9ICRtYW5hZ2VyLm9uTmV3RXZlbnQoJGV2ZW50KTsKKwkJLy8KKwkJLy8gV2Ugb25seSB3YW50IHRoZSBpbml0aWFsIE9OU0VUIGV2ZW50IGluIG1lbW9yeSwKKwkJLy8gYWxsIHRoZSBvdGhlciBldmVudHMgbmVlZCB0byBiZSByZXRyYWN0ZWQgdG8gc3VwcG9ydAorCQkvLyBjbGVhbnVwIGFuZCBhdm9pZCB0aGUgb3RoZXIgcnVsZXMgYmVpbmcgZmlyZWQgZm9yIHRoaXMgZXZlbnQuCisJCS8vCisJCWlmIChldmVudFN0YXR1cyAhPSBFdmVudE1hbmFnZXIuTkVXX0VWRU5UX1NUQVRVUy5GSVJTVF9PTlNFVCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJSZXRyYWN0aW5nICIrZXZlbnRTdGF0dXMrIiBFdmVudC4iKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHVybjsKKwkJfQorCQkvLworCQkvLyBOb3cgdGhlIGV2ZW50IGluIG1lbW9yeSBpcyBmaXJzdCBvbnNldCBldmVudAorCQkvLworCQl0cnkgeworCQkJLy8KKwkJCS8vIFB1bGwgdGhlIGtub3duIEFBSSBmaWVsZCBmcm9tIHRoZSBFdmVudAorCQkJLy8KKwkJCS8vIGdlbmVyaWMtdm5mIGlzIG5lZWRlZCBmb3IgdkZpcmV3YWxsIGNhc2UKKwkJCS8vIHZzZXJ2ZXItbmFtZSBpcyBuZWVkZWQgZm9yIHZMb2FkQmFsYW5jZXIgY2FzZQorCQkJLy8KKwkJCVN0cmluZyBnZW5lcmljVk5GID0gJGV2ZW50LkFBSS5nZXQoImdlbmVyaWMtdm5mLnZuZi1pZCIpOworCQkJU3RyaW5nIHZzZXJ2ZXIgPSAkZXZlbnQuQUFJLmdldCgidnNlcnZlci52c2VydmVyLW5hbWUiKTsKKwkJCS8vCisJCQkvLyBDaGVjayBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIGEgc2ltcGxlIHBhdHRlcm4gbWF0Y2guCisJCQkvLworCQkJaWYgKCRwYXJhbXMuZ2V0QWFpUGF0dGVybk1hdGNoKCkgPT0gMSkgeworCQkJCS8vCisJCQkJLy8gWWVzCisJCQkJLy8KKwkJCQkvL0Jhc2ljIG5hbWluZyBjaGFyYWN0ZXJpc3RpY3M6CisJCQkJLy9WRiBOYW1lICg5IGNoYXIpK1ZNIG5hbWUgKDEzIGNoYXIgdG90YWwpK1ZGQyAoMTkgY2hhciB0b3RhbCkKKwkJCQkvL0V4YW1wbGU6IAorCQkJCS8vVkYgTmFtZSAoOSBjaGFyYWN0ZXJzKTogICAgY3NjZjAwMDF2CisJCQkJLy9WTSBOYW1lKDEzIGNoYXJhY3RlcnMpOiBjc2NmMDAwMXZtMDAxCisJCQkJLy9WRkMgbmFtZSgxOSBjaGFyYWN0ZXJzKTogY3NjZjAwMDF2bTAwMWNmZzAwMQorCQkJCS8vCisJCQkJLy8gemRmdzFmd2wwMWZ3bDAyIG9yIHpkZncxZndsMDFmd2wwMSAgCisJCQkJLy8gcmVwbGFjZWQgd2l0aAorCQkJCS8vIHpkZncxZndsMDFwZ24wMiBvciB6ZGZ3MWZ3bDAxcGduMDEKKwkJCQkvLworCQkJCWludCBpbmRleCA9IGdlbmVyaWNWTkYubGFzdEluZGV4T2YoImZ3bCIpOworCQkJCWlmIChpbmRleCA9PSAtMSkgeworCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlRoZSBnZW5lcmljLXZuZi52bmYtaWQgZnJvbSBEQ0FFIEV2ZW50IGlzIG5vdCB2YWxpZC4iKTsKKwkJCQl9IGVsc2UgeworCQkJCQlnZW5lcmljVk5GID0gZ2VuZXJpY1ZORi5zdWJzdHJpbmcoMCwgaW5kZXgpICsgInBnbiIgKyBnZW5lcmljVk5GLnN1YnN0cmluZyhpbmRleCsiZndsIi5sZW5ndGgoKSk7CisJCQkJfQorCQkJCS8vCisJCQkJLy8gQ29uc3RydWN0IGFuIEFQUEMgcmVxdWVzdAorCQkJCS8vCisJCQkJQ29udHJvbExvb3BPcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IENvbnRyb2xMb29wT3BlcmF0aW9uKCk7CisJCQkJb3BlcmF0aW9uLmFjdG9yID0gJHBhcmFtcy5nZXRBY3RvcigpOworCQkJCW9wZXJhdGlvbi5vcGVyYXRpb24gPSAiTW9kaWZ5Q29uZmlnIjsKKwkJCQlvcGVyYXRpb24udGFyZ2V0ID0gJGV2ZW50LnRhcmdldDsKKwkJCQkvLworCQkJCS8vIENyZWF0ZSBvcGVyYXRpb25XcmFwcGVyCisJCQkJLy8KKwkJCQlDb250cm9sTG9vcE9wZXJhdGlvbldyYXBwZXIgb3BlcmF0aW9uV3JhcHBlciA9IG5ldyBDb250cm9sTG9vcE9wZXJhdGlvbldyYXBwZXIoJGV2ZW50LnJlcXVlc3RJRCwgb3BlcmF0aW9uKTsKKwkJCQkvLworCQkJCS8vIGluc2VydCBvcGVyYXRpb25XcmFwcGVyIGludG8gbWVtb3J5CisJCQkJLy8KKwkJCQlpbnNlcnQob3BlcmF0aW9uV3JhcHBlcik7CisJCQkJLy8KKwkJCQlSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgpOworCQkJCXJlcXVlc3QuQ29tbW9uSGVhZGVyID0gbmV3IENvbW1vbkhlYWRlcigpOworCQkJCXJlcXVlc3QuQ29tbW9uSGVhZGVyLlJlcXVlc3RJRCA9ICRldmVudC5yZXF1ZXN0SUQ7CisJCQkJcmVxdWVzdC5BY3Rpb24gPSBvcGVyYXRpb24ub3BlcmF0aW9uOworCQkJCXJlcXVlc3QuUGF5bG9hZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpOworCQkJCS8vCisJCQkJLy8gRmlsbCBpbiB0aGUgcGF5bG9hZAorCQkJCS8vCisJCQkJcmVxdWVzdC5QYXlsb2FkLnB1dCgiZ2VuZXJpYy12bmYudm5mLWlkIiwgZ2VuZXJpY1ZORik7CisJCQkJLy8KKwkJCQlQR1JlcXVlc3QgcGdSZXF1ZXN0ID0gbmV3IFBHUmVxdWVzdCgpOworCQkJCXBnUmVxdWVzdC5wZ1N0cmVhbXMgPSBuZXcgUEdTdHJlYW1zKCk7CisJCQkJCisJCQkJUEdTdHJlYW0gcGdTdHJlYW07CisJCQkJZm9yKGludCBpID0gMDsgaSA8IDU7IGkrKyl7CisJCQkJCXBnU3RyZWFtID0gbmV3IFBHU3RyZWFtKCk7CisJCQkJCXBnU3RyZWFtLnN0cmVhbUlkID0gImZ3X3VkcCIrKGkrMSk7CisJCQkJCXBnU3RyZWFtLmlzRW5hYmxlZCA9ICJ0cnVlIjsKKwkJCQkJcGdSZXF1ZXN0LnBnU3RyZWFtcy5wZ1N0cmVhbS5hZGQocGdTdHJlYW0pOworCQkJCX0KKwkJCQlyZXF1ZXN0LlBheWxvYWQucHV0KCJwZy1zdHJlYW1zIiwgcGdSZXF1ZXN0LnBnU3RyZWFtcyk7CisJCQkJCisJCQkJaWYgKHJlcXVlc3QgIT0gbnVsbCkgeworCQkJCQkvLworCQkJCQkvLyBJbnNlcnQgcmVxdWVzdCBpbnRvIG1lbW9yeQorCQkJCQkvLworCQkJCQlpbnNlcnQocmVxdWVzdCk7CisJCQkJCS8vCisJCQkJCS8vIFRlbGwgaW50ZXJlc3RlZCBwYXJ0aWVzIHdlIGFyZSBwZXJmb3JtaW5nIHRoaXMgT3BlcmF0aW9uCisJCQkJCS8vCisJCQkJCVZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uKCRldmVudCk7CisJCQkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuT1BFUkFUSU9OOworCQkJCQkvLyBtZXNzYWdlIGFuZCBoaXN0b3J5ID8/CisJCQkJCW5vdGlmaWNhdGlvbi5mcm9tID0gInBvbGljeSI7CisJCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lOYW1lID0gZHJvb2xzLmdldFJ1bGUoKS5nZXROYW1lKCk7CisJCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lTY29wZSA9ICJjb20iOworCQkJCQlub3RpZmljYXRpb24ucG9saWN5VmVyc2lvbiA9ICIxIjsKKwkJCQkJdHJ5IHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCQkJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCX0KKwkJCQkJLy8KKwkJCQkJLy8gTm93IHNlbmQgdGhlIG9wZXJhdGlvbiByZXF1ZXN0CisJCQkJCS8vCisJCQkJCWlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFQUEMgcmVxdWVzdCBzZW50OiIpOworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKHJlcXVlc3QpKTsKKwkJCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0QXBwY1RvcGljKCksIHJlcXVlc3QpOworCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciByZXF1ZXN0OiAiICsgcmVxdWVzdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvLworCQkJCQkvLyB3aGF0IGhhcHBlbnMgaWYgaXQgaXMgbnVsbAorCQkJCQkvLworCQkJCX0KKwkJCQkvLworCQkJfSBlbHNlIHsKKwkJCQkvLworCQkJCS8vIGNyZWF0ZSBBQUkgbmFtZWQtcXVlcnkgcmVxdWVzdCB3aXRoIFVVSUQgc3RhcnRlZCB3aXRoICJGMTk5IgorCQkJCS8vCisJCQkJQUFJTlFGMTk5UmVxdWVzdCBhYWlucWYxOTlyZXF1ZXN0ID0gbmV3IEFBSU5RRjE5OVJlcXVlc3QoKTsKKwkJCQlBQUlOUUYxOTlRdWVyeVBhcmFtZXRlcnMgYWFpbnFmMTk5cXVlcnlwYXJhbSA9IG5ldyBBQUlOUUYxOTlRdWVyeVBhcmFtZXRlcnMoKTsKKwkJCQlBQUlOUUYxOTlOYW1lZFF1ZXJ5IGFhaW5xZjE5OW5hbWVkcXVlcnkgPSBuZXcgQUFJTlFGMTk5TmFtZWRRdWVyeSgpOworCQkJCUFBSU5RRjE5OUluc3RhbmNlRmlsdGVycyBhYWlucWYxOTlpbnN0YW5jZWZpbHRlciA9IG5ldyBBQUlOUUYxOTlJbnN0YW5jZUZpbHRlcnMoKTsKKwkJCQkvLworCQkJCS8vIHF1ZXJ5UGFyYW1ldGVycworCQkJCS8vCisJCQkJYWFpbnFmMTk5bmFtZWRxdWVyeS5uYW1lZFF1ZXJ5VVVJRCA9IFVVSUQuZnJvbVN0cmluZygkcGFyYW1zLmdldEFhaU5hbWVkUXVlcnlVVUlEKCkpOyAKKwkJCQlhYWlucWYxOTlxdWVyeXBhcmFtLm5hbWVkUXVlcnkgPSBhYWlucWYxOTluYW1lZHF1ZXJ5OworCQkJCWFhaW5xZjE5OXJlcXVlc3QucXVlcnlQYXJhbWV0ZXJzID0gYWFpbnFmMTk5cXVlcnlwYXJhbTsKKwkJCQkvLworCQkJCS8vIGluc3RhbmNlRmlsdGVycworCQkJCS8vCisJCQkJTWFwIGFhaW5xZjE5OWluc3RhbmNlZmlsdGVybWFwID0gbmV3IEhhc2hNYXAoKTsKKwkJCQlNYXAgYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXJtYXBpdGVtID0gbmV3IEhhc2hNYXAoKTsKKwkJCQlhYWlucWYxOTlpbnN0YW5jZWZpbHRlcm1hcGl0ZW0ucHV0KCJ2c2VydmVyLW5hbWUiLCB2c2VydmVyKTsgCisJCQkJYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXJtYXAucHV0KCJ2c2VydmVyIiwgYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXJtYXBpdGVtKTsKKwkJCQlhYWlucWYxOTlpbnN0YW5jZWZpbHRlci5pbnN0YW5jZUZpbHRlci5hZGQoYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXJtYXApOworCQkJCWFhaW5xZjE5OXJlcXVlc3QuaW5zdGFuY2VGaWx0ZXJzID0gYWFpbnFmMTk5aW5zdGFuY2VmaWx0ZXI7CisJCQkJLy8KKwkJCQkvLyBwcmludCBhYWlucWYxOTlyZXF1ZXN0IGZvciBkZWJ1ZworCQkJCS8vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJBQUkgUmVxdWVzdCBzZW50OiIpOworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKGFhaW5xZjE5OXJlcXVlc3QpKTsKKwkJCQkvLworCQkJCS8vIENyZWF0ZSBBQUlOUUYxOTlSZXF1ZXN0V3JhcHBlcgorCQkJCS8vCisJCQkJQUFJTlFGMTk5UmVxdWVzdFdyYXBwZXIgYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIgPSBuZXcgQUFJTlFGMTk5UmVxdWVzdFdyYXBwZXIoJGV2ZW50LnJlcXVlc3RJRCwgYWFpbnFmMTk5cmVxdWVzdCk7CisJCQkJLy8KKwkJCQkvLyBpbnNlcnQgYWFpbnFmMTk5cmVxdWVzdCBpbnRvIG1lbW9yeQorCQkJCS8vCisJCQkJaW5zZXJ0KGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyKTsKKwkJCX0KKwkJCS8vCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCSBlLnByaW50U3RhY2tUcmFjZSgpOworCQl9CitlbmQKKworLyoKKyoKKyogVGhpcyBydWxlIGhhcHBlbnMgd2hlbiB3ZSBnb3QgYSB2YWxpZCBPTlNFVCwgY2xvc2VkIGxvb3AgaXMgZW5hYmxlZCwgYW4gRXZlbnQgTWFuYWdlcgorKiBpcyBjcmVhdGVkLCBBQUkgTWFuYWdlciBhbmQgQUFJIFJlcXVlc3QgYXJlIHJlYWR5IGluIG1lbW9yeS4gV2UgY2FuIHN0YXJ0IHNlbmRpbmcgcXVlcnkgdG8gQUFJIGFuZCB0aGVuIHdhaXQgZm9yIHJlc3BvbnNlLgorKgorKi8KK3J1bGUgIkJSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuRVZFTlQuTUFOQUdFUi5BQUlOUUYxOTlSRVFVRVNUIgorCXdoZW4KKwkJJHBhcmFtcyA6IFBhcmFtcyggZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCkgPT0gIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIgKQorCQkkZXZlbnQgOiBWaXJ0dWFsQ29udHJvbExvb3BFdmVudCggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksIGNsb3NlZExvb3BFdmVudFN0YXR1cyA9PSBDb250cm9sTG9vcEV2ZW50U3RhdHVzLk9OU0VUICkKKwkJJG1hbmFnZXIgOiBFdmVudE1hbmFnZXIoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkZXZlbnQuY2xvc2VkTG9vcENvbnRyb2xOYW1lICkKKwkJJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyIDogQUFJTlFGMTk5UmVxdWVzdFdyYXBwZXIocmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQpCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgRVZFTlQuTUFOQUdFUi5BQUlOUUYxOTlSRVFVRVNUIGlzIHRyaWdnZXJlZC4iKTsKKwkJLy8KKwkJLy8gc2VuZCB0aGUgcmVxdWVzdAorCQkvLworCQlBQUlOUUYxOTlSZXNwb25zZSBhYWlucWYxOTlyZXNwb25zZSA9IEFBSU5RRjE5OU1hbmFnZXIucG9zdFF1ZXJ5KCRwYXJhbXMuZ2V0QWFpVVJMKCksICRwYXJhbXMuZ2V0QWFpVXNlcm5hbWUoKSwgJHBhcmFtcy5nZXRBYWlQYXNzd29yZCgpLAorCQkJCQkJCQkJCQkJCSAgICRhYWlucWYxOTlSZXF1ZXN0V3JhcHBlci5hYWlucWYxOTlyZXF1ZXN0LCAkZXZlbnQucmVxdWVzdElEKTsKKwkJLy8KKwkJLy8gQ2hlY2sgQUFJIHJlc3BvbnNlCisJCS8vCisJCWlmIChhYWlucWYxOTlyZXNwb25zZSA9PSBudWxsKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkZhaWxlZCB0byBnZXQgQUFJIHJlc3BvbnNlIik7CisJCQkvLworCQkJLy8gRmFpbCBhbmQgcmV0cmFjdCBldmVyeXRoaW5nCisJCQkvLworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0cmFjdCgkbWFuYWdlcik7CisJCQlyZXRyYWN0KCRhYWlucWYxOTlSZXF1ZXN0V3JhcHBlcik7CisJCX0gZWxzZSB7CisJCQkvLworCQkJLy8gQ3JlYXRlIEFBSU5RRjE5OVJlc3BvbnNlV3JhcHBlcgorCQkJLy8KKwkJCUFBSU5RRjE5OVJlc3BvbnNlV3JhcHBlciBhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIgPSBuZXcgQUFJTlFGMTk5UmVzcG9uc2VXcmFwcGVyKCRldmVudC5yZXF1ZXN0SUQsIGFhaW5xZjE5OXJlc3BvbnNlKTsKKwkJCS8vCisJCQkvLyBpbnNlcnQgYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyIHRvIG1lbWVvcnkKKwkJCS8vCisJCQlpbnNlcnQoYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyKTsKKwkJfQorZW5kCisKKy8qCisqCisqIFRoaXMgcnVsZSBoYXBwZW5zIHdoZW4gd2UgZ290IGEgdmFsaWQgQUFJIHJlc3BvbnNlLiBXZSBjYW4gc3RhcnQgc2VuZGluZyByZXF1ZXN0IHRvIEFQUEMgb3IgTVNPIG5vdy4KKyoKKyovCitydWxlICJCUk1TUGFyYW12RldEZW1vUG9saWN5LkVWRU5ULk1BTkFHRVIuQUFJTlFGMTk5UkVTUE9OU0UiCisJd2hlbiAKKwkJJHBhcmFtcyA6IFBhcmFtcyggZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCkgPT0gIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIgKQorCQkkZXZlbnQgOiBWaXJ0dWFsQ29udHJvbExvb3BFdmVudCggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksIGNsb3NlZExvb3BFdmVudFN0YXR1cyA9PSBDb250cm9sTG9vcEV2ZW50U3RhdHVzLk9OU0VUICkKKwkJJG1hbmFnZXIgOiBFdmVudE1hbmFnZXIoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkZXZlbnQuY2xvc2VkTG9vcENvbnRyb2xOYW1lICkKKwkJJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyIDogQUFJTlFGMTk5UmVxdWVzdFdyYXBwZXIocmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQpCisJCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIgOiBBQUlOUUYxOTlSZXNwb25zZVdyYXBwZXIocmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQpCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgRVZFTlQuTUFOQUdFUi5BQUlOUUYxOTlSRVNQT05TRSBpcyB0cmlnZ2VyZWQuIik7CisJCS8vCisJCS8vIEV4dHJhY3QgcmVsYXRlZCBmaWVsZHMgb3V0IG9mIEFBSU5RRjE5OVJFU1BPTlNFCisJCS8vCisJCVN0cmluZyB2bmZJdGVtVm5mSWQsIHZuZkl0ZW1WbmZUeXBlLCB2bmZJdGVtUGVyc29uYU1vZGVsSWQsIHZuZkl0ZW1QZXJzb25hTW9kZWxWZXJzaW9uLCB2bmZJdGVtTW9kZWxOYW1lLCAKKwkJICAgICAgIHZuZkl0ZW1Nb2RlbFZlcnNpb24sIHZuZkl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQsIHNlcnZpY2VJdGVtU2VydmljZUluc3RhbmNlSWQsIHNlcnZpY2VJdGVtUGVyc29uYU1vZGVsSWQsCisJCSAgICAgICBzZXJ2aWNlSXRlbU1vZGVsTmFtZSwgc2VydmljZUl0ZW1Nb2RlbFR5cGUsIHNlcnZpY2VJdGVtTW9kZWxWZXJzaW9uLCBzZXJ2aWNlSXRlbU1vZGVsTmFtZVZlcnNpb25JZCwKKwkJICAgICAgIHZmTW9kdWxlSXRlbVZmTW9kdWxlTmFtZSwgdmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsSWQsIHZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbFZlcnNpb24sIHZmTW9kdWxlSXRlbU1vZGVsTmFtZSwgCisJCSAgICAgICB2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQsIHRlbmFudEl0ZW1UZW5hbnRJZCwgY2xvdWRSZWdpb25JdGVtQ2xvdWRSZWdpb25JZDsKKwkJdHJ5IHsKKwkJCS8vCisJCQkvLyB2bmZJdGVtCisJCQkvLworCQkJdm5mSXRlbVZuZklkID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5nZW5lcmljVk5GLnZuZklEOworCQkJdm5mSXRlbVZuZlR5cGUgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmdlbmVyaWNWTkYudm5mVHlwZTsKKwkJCXZuZkl0ZW1WbmZUeXBlID0gdm5mSXRlbVZuZlR5cGUuc3Vic3RyaW5nKHZuZkl0ZW1WbmZUeXBlLmxhc3RJbmRleE9mKCIvIikrMSk7CisJCQl2bmZJdGVtUGVyc29uYU1vZGVsSWQgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmdlbmVyaWNWTkYucGVyc29uYU1vZGVsSWQ7CisJCQl2bmZJdGVtUGVyc29uYU1vZGVsVmVyc2lvbiA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZ2VuZXJpY1ZORi5wZXJzb25hTW9kZWxWZXJzaW9uOworCQkJdm5mSXRlbU1vZGVsTmFtZSA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDApLnByb3BlcnR5VmFsdWU7CisJCQl2bmZJdGVtTW9kZWxWZXJzaW9uID0gCQkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCgyKS5wcm9wZXJ0eVZhbHVlOworCQkJdm5mSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9IAkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCg0KS5wcm9wZXJ0eVZhbHVlOworCQkJLy8KKwkJCS8vIHNlcnZpY2VJdGVtCisJCQkvLworCQkJc2VydmljZUl0ZW1TZXJ2aWNlSW5zdGFuY2VJZCA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuc2VydmljZUluc3RhbmNlLnNlcnZpY2VJbnN0YW5jZUlEOworCQkJc2VydmljZUl0ZW1QZXJzb25hTW9kZWxJZCA9ICRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuc2VydmljZUluc3RhbmNlLnBlcnNvbmFNb2RlbElkOworCQkJc2VydmljZUl0ZW1Nb2RlbE5hbWUgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCgwKS5wcm9wZXJ0eVZhbHVlOworCQkJc2VydmljZUl0ZW1Nb2RlbFR5cGUgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCgxKS5wcm9wZXJ0eVZhbHVlOworCQkJc2VydmljZUl0ZW1Nb2RlbFZlcnNpb24gPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLnNlcnZpY2VJbnN0YW5jZS5wZXJzb25hTW9kZWxWZXJzaW9uOworCQkJc2VydmljZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCg0KS5wcm9wZXJ0eVZhbHVlOworCQkJLy8KKwkJCS8vIEZpbmQgdGhlIGluZGV4IGZvciBiYXNlIHZmIG1vZHVsZSBhbmQgbm9uLWJhc2UgdmYgbW9kdWxlCisJCQkvLworCQkJaW50IGJhc2VJbmRleCA9IC0xOworCQkJaW50IG5vbkJhc2VJbmRleCA9IC0xOworCQkJTGlzdDxBQUlOUUYxOTlJbnZlbnRvcnlSZXNwb25zZUl0ZW0+IGludmVudG9yeUl0ZW1zID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zOworCQkJZm9yIChBQUlOUUYxOTlJbnZlbnRvcnlSZXNwb25zZUl0ZW0gbSA6IGludmVudG9yeUl0ZW1zKSB7CisJCQkJaWYgKG0udmZNb2R1bGUgIT0gbnVsbCAmJiBtLnZmTW9kdWxlLmlzQmFzZVZmTW9kdWxlID09IHRydWUpIHsKKwkJCQkJYmFzZUluZGV4ID0gaW52ZW50b3J5SXRlbXMuaW5kZXhPZihtKTsKKwkJCQl9IGVsc2UgaWYgKG0udmZNb2R1bGUgIT0gbnVsbCAmJiBtLnZmTW9kdWxlLmlzQmFzZVZmTW9kdWxlID09IGZhbHNlICYmIG0udmZNb2R1bGUub3JjaGVzdHJhdGlvblN0YXR1cyA9PSBudWxsKSB7CisJCQkJCW5vbkJhc2VJbmRleCA9IGludmVudG9yeUl0ZW1zLmluZGV4T2YobSk7CisJCQkJfQorCQkJCS8vCisJCQkJaWYgKGJhc2VJbmRleCAhPSAtMSAmJiBub25CYXNlSW5kZXggIT0gLTEpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJLy8KKwkJCS8vIFJlcG9ydCB0aGUgZXJyb3IgaWYgZWl0aGVyIGJhc2UgdmYgbW9kdWxlIG9yIG5vbi1iYXNlIHZmIG1vZHVsZSBpcyBub3QgZm91bmQKKwkJCS8vCisJCQlpZiAoYmFzZUluZGV4ID09IC0xIHx8IG5vbkJhc2VJbmRleCA9PSAtMSkgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRWl0aGVyIGJhc2Ugb3Igbm9uLWJhc2UgdmYgbW9kdWxlIGlzIG5vdCBmb3VuZCBmcm9tIEFBSSByZXNwb25zZS4iKTsKKwkJCQlyZXRyYWN0KCRhYWlucWYxOTlSZXF1ZXN0V3JhcHBlcik7CisJCQkJcmV0cmFjdCgkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyKTsKKwkJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJCQlyZXRyYWN0KCRldmVudCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJLy8KKwkJCS8vIFRoaXMgY29tZXMgZnJvbSB0aGUgYmFzZSBtb2R1bGUKKwkJCS8vCisJCQl2Zk1vZHVsZUl0ZW1WZk1vZHVsZU5hbWUgPSAJCQkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KGJhc2VJbmRleCkudmZNb2R1bGUudmZNb2R1bGVOYW1lOworCQkJdmZNb2R1bGVJdGVtVmZNb2R1bGVOYW1lID0gdmZNb2R1bGVJdGVtVmZNb2R1bGVOYW1lLnJlcGxhY2UoIlZmbW9kdWxlIiwgInZETlMiKTsKKwkJCS8vCisJCQkvLyB2Zk1vZHVsZUl0ZW0gLSBOT1QgdGhlIGJhc2UgbW9kdWxlCisJCQkvLworCQkJdmZNb2R1bGVJdGVtUGVyc29uYU1vZGVsSWQgPSAJCSRhYWlucWYxOTlSZXNwb25zZVdyYXBwZXIuYWFpbnFmMTk5cmVzcG9uc2UuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQoMCkuaXRlbXMuaW52ZW50b3J5UmVzcG9uc2VJdGVtcy5nZXQobm9uQmFzZUluZGV4KS52Zk1vZHVsZS5wZXJzb25hTW9kZWxJZDsKKwkJCXZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbFZlcnNpb24gPSAJJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldChub25CYXNlSW5kZXgpLnZmTW9kdWxlLnBlcnNvbmFNb2RlbFZlcnNpb247CisJCQl2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWUgPSAJCQkkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KG5vbkJhc2VJbmRleCkuZXh0cmFQcm9wZXJ0aWVzLmV4dHJhUHJvcGVydHkuZ2V0KDApLnByb3BlcnR5VmFsdWU7CisJCQl2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQgPSAJJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldChub25CYXNlSW5kZXgpLmV4dHJhUHJvcGVydGllcy5leHRyYVByb3BlcnR5LmdldCg0KS5wcm9wZXJ0eVZhbHVlOworCQkJLy8KKwkJCS8vIHRlbmFudEl0ZW0KKwkJCS8vCisJCQl0ZW5hbnRJdGVtVGVuYW50SWQgPSAkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyLmFhaW5xZjE5OXJlc3BvbnNlLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDApLml0ZW1zLmludmVudG9yeVJlc3BvbnNlSXRlbXMuZ2V0KDEpLnRlbmFudC50ZW5hbnRJZDsKKwkJCS8vCisJCQkvLyBjbG91ZFJlZ2lvbkl0ZW0KKwkJCS8vCisJCQljbG91ZFJlZ2lvbkl0ZW1DbG91ZFJlZ2lvbklkID0gJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlci5hYWlucWYxOTlyZXNwb25zZS5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgxKS5pdGVtcy5pbnZlbnRvcnlSZXNwb25zZUl0ZW1zLmdldCgwKS5jbG91ZFJlZ2lvbi5jbG91ZFJlZ2lvbklkOworCQkJLy8KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5SRUpFQ1RFRDsKKwkJCW5vdGlmaWNhdGlvbi5tZXNzYWdlID0gIkV4Y2VwdGlvbiBvY2N1cnJlZCAiICsgZS5nZXRNZXNzYWdlKCk7CisJCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQlub3RpZmljYXRpb24ucG9saWN5VmVyc2lvbiA9ICIxIjsKKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUxKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCQkvLworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9GQUlMVVJFOworCQkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSAiSW52YWxpZCBuYW1lZC1xdWVyeSByZXNwb25zZSBmcm9tIEFBSSI7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKyAgICAgICAgICAgICAgICBQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlMSkgeworICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICAgICAgIGUxLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorCQkJLy8KKwkJCS8vIFJldHJhY3QgZXZlcnl0aGluZworCQkJLy8KKwkJCXJldHJhY3QoJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyKTsKKwkJCXJldHJhY3QoJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlcik7CisJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHVybjsKKwkJfQkKKwkJLy8KKwkJLy8gRXh0cmFjdGVkIGZpZWxkcyBzaG91bGQgbm90IGJlIG51bGwKKwkJLy8KKwkJaWYgKCh2bmZJdGVtVm5mSWQgPT0gbnVsbCkgfHwgKHZuZkl0ZW1WbmZUeXBlID09IG51bGwpIHx8CisJCSAgICAodm5mSXRlbVBlcnNvbmFNb2RlbElkID09IG51bGwpIHx8ICh2bmZJdGVtTW9kZWxOYW1lID09IG51bGwpIHx8CisJCSAgICAodm5mSXRlbU1vZGVsVmVyc2lvbiA9PSBudWxsKSB8fCAodm5mSXRlbU1vZGVsTmFtZVZlcnNpb25JZCA9PSBudWxsKSB8fAorCQkgICAgKHNlcnZpY2VJdGVtU2VydmljZUluc3RhbmNlSWQgPT0gbnVsbCkgfHwgKHNlcnZpY2VJdGVtTW9kZWxOYW1lID09IG51bGwpIHx8CisJCSAgICAoc2VydmljZUl0ZW1Nb2RlbFR5cGUgPT0gbnVsbCkgfHwgKHNlcnZpY2VJdGVtTW9kZWxWZXJzaW9uID09IG51bGwpIHx8CisJCSAgICAoc2VydmljZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQgPT0gbnVsbCkgfHwgKHZmTW9kdWxlSXRlbVZmTW9kdWxlTmFtZSA9PSBudWxsKSB8fAorCQkgICAgKHZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbElkID09IG51bGwpIHx8ICh2Zk1vZHVsZUl0ZW1QZXJzb25hTW9kZWxWZXJzaW9uID09IG51bGwpIHx8CisJCSAgICAodmZNb2R1bGVJdGVtTW9kZWxOYW1lID09IG51bGwpIHx8ICh2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQgPT0gbnVsbCkgfHwKKwkJICAgICh0ZW5hbnRJdGVtVGVuYW50SWQgPT0gbnVsbCkgfHwgKGNsb3VkUmVnaW9uSXRlbUNsb3VkUmVnaW9uSWQgPT0gbnVsbCkpIHsKKwkJCS8vCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oInNvbWUgZmllbGRzIGFyZSBtaXNzaW5nIGZyb20gQUFJIHJlc3BvbnNlLiIpOworCQkJLy8KKwkJCS8vIEZhaWwgYW5kIHJldHJhY3QgZXZlcnl0aGluZworCQkJLy8KKwkJCXJldHJhY3QoJGFhaW5xZjE5OVJlcXVlc3RXcmFwcGVyKTsKKwkJCXJldHJhY3QoJGFhaW5xZjE5OVJlc3BvbnNlV3JhcHBlcik7CisJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHVybjsKKwkJfQorCQkvLworCQkvLyBXZSBkb24ndCBuZWVkIHRoZW0gYW55IG1vcmUKKwkJLy8KKwkJcmV0cmFjdCgkYWFpbnFmMTk5UmVzcG9uc2VXcmFwcGVyKTsKKwkJcmV0cmFjdCgkYWFpbnFmMTk5UmVxdWVzdFdyYXBwZXIpOyAgCisJCS8vCisJCS8vIGNoZWNrIHRoZSBhY3RvciBvZiB0aGlzIGNsb3NlZCBsb29wCisJCS8vCisJCXN3aXRjaCAoJHBhcmFtcy5nZXRBY3RvcigpKSB7CisJCQljYXNlICJBUFBDIjoKKwkJCXsKKwkJCQkvLworCQkJCS8vIENvbnN0cnVjdCBhbiBBUFBDIHJlcXVlc3QKKwkJCQkvLworCQkJCUNvbnRyb2xMb29wT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5ldyBDb250cm9sTG9vcE9wZXJhdGlvbigpOworCQkJCW9wZXJhdGlvbi5hY3RvciA9ICRwYXJhbXMuZ2V0QWN0b3IoKTsKKwkJCQlvcGVyYXRpb24ub3BlcmF0aW9uID0gIk1vZGlmeUNvbmZpZyI7CisJCQkJb3BlcmF0aW9uLnRhcmdldCA9ICRldmVudC50YXJnZXQ7CisJCQkJLy8KKwkJCQkvLyBDcmVhdGUgb3BlcmF0aW9uV3JhcHBlcgorCQkJCS8vCisJCQkJQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyIG9wZXJhdGlvbldyYXBwZXIgPSBuZXcgQ29udHJvbExvb3BPcGVyYXRpb25XcmFwcGVyKCRldmVudC5yZXF1ZXN0SUQsIG9wZXJhdGlvbik7CisJCQkJLy8KKwkJCQkvLyBpbnNlcnQgb3BlcmF0aW9uV3JhcHBlciBpbnRvIG1lbW9yeQorCQkJCS8vCisJCQkJaW5zZXJ0KG9wZXJhdGlvbldyYXBwZXIpOworCQkJCS8vCisJCQkJUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoKTsKKwkJCQlyZXF1ZXN0LkNvbW1vbkhlYWRlciA9IG5ldyBDb21tb25IZWFkZXIoKTsKKwkJCQlyZXF1ZXN0LkNvbW1vbkhlYWRlci5SZXF1ZXN0SUQgPSAkZXZlbnQucmVxdWVzdElEOworCQkJCXJlcXVlc3QuQWN0aW9uID0gb3BlcmF0aW9uLm9wZXJhdGlvbjsKKwkJCQlyZXF1ZXN0LlBheWxvYWQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKTsKKwkJCQkvLworCQkJCS8vIEZpbGwgaW4gdGhlIHBheWxvYWQKKwkJCQkvLyBIYXJkY29kZSBnZW5lcmljVk5GIGZvciBub3cgc2luY2UgQUFJIGhhcyBub3QgYmVlbiByZWFkeSBmb3IgdkZpcmV3YWxsIGRlbW8gY2FzZQorCQkJCS8vCisJCQkJU3RyaW5nIGdlbmVyaWNWTkYgPSAiemRmdzFmd2wwMXBnbjAyIjsKKwkJCQlyZXF1ZXN0LlBheWxvYWQucHV0KCJnZW5lcmljLXZuZi52bmYtaWQiLCBnZW5lcmljVk5GKTsKKwkJCQkvLworCQkJCVBHUmVxdWVzdCBwZ1JlcXVlc3QgPSBuZXcgUEdSZXF1ZXN0KCk7CisJCQkJcGdSZXF1ZXN0LnBnU3RyZWFtcyA9IG5ldyBQR1N0cmVhbXMoKTsKKwkJCQkKKwkJCQlQR1N0cmVhbSBwZ1N0cmVhbTsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgNTsgaSsrKXsKKwkJCQkJcGdTdHJlYW0gPSBuZXcgUEdTdHJlYW0oKTsKKwkJCQkJcGdTdHJlYW0uc3RyZWFtSWQgPSAiZndfdWRwIisoaSsxKTsKKwkJCQkJcGdTdHJlYW0uaXNFbmFibGVkID0gInRydWUiOworCQkJCQlwZ1JlcXVlc3QucGdTdHJlYW1zLnBnU3RyZWFtLmFkZChwZ1N0cmVhbSk7CisJCQkJfQorCQkJCXJlcXVlc3QuUGF5bG9hZC5wdXQoInBnLXN0cmVhbXMiLCBwZ1JlcXVlc3QucGdTdHJlYW1zKTsKKwkJCQkKKwkJCQlpZiAocmVxdWVzdCAhPSBudWxsKSB7CisJCQkJCS8vCisJCQkJCS8vIEluc2VydCByZXF1ZXN0IGludG8gbWVtb3J5CisJCQkJCS8vCisJCQkJCWluc2VydChyZXF1ZXN0KTsKKwkJCQkJLy8KKwkJCQkJLy8gVGVsbCBpbnRlcmVzdGVkIHBhcnRpZXMgd2UgYXJlIHBlcmZvcm1pbmcgdGhpcyBPcGVyYXRpb24KKwkJCQkJLy8KKwkJCQkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24oJGV2ZW50KTsKKwkJCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT047CisJCQkJCS8vIG1lc3NhZ2UgYW5kIGhpc3RvcnkgPz8KKwkJCQkJbm90aWZpY2F0aW9uLmZyb20gPSAicG9saWN5IjsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeU5hbWUgPSBkcm9vbHMuZ2V0UnVsZSgpLmdldE5hbWUoKTsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJCQl0cnkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJfQorCQkJCQkvLworCQkJCQkvLyBOb3cgc2VuZCB0aGUgb3BlcmF0aW9uIHJlcXVlc3QKKwkJCQkJLy8KKwkJCQkJaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7CisJCQkJCQl0cnkgeworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQVBQQyByZXF1ZXN0IHNlbnQ6Iik7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24ocmVxdWVzdCkpOworCQkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXRBcHBjVG9waWMoKSwgcmVxdWVzdCk7CisJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIHJlcXVlc3Q6ICIgKyByZXF1ZXN0KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8vCisJCQkJCS8vIHdoYXQgaGFwcGVucyBpZiBpdCBpcyBudWxsCisJCQkJCS8vCisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCQljYXNlICJNU08iOgorCQkJeworCQkJCS8vCisJCQkJLy8gQ29uc3RydWN0IGFuIG9wZXJhdGlvbgorCQkJCS8vCisJCQkJQ29udHJvbExvb3BPcGVyYXRpb24gb3BlcmF0aW9uID0gbmV3IENvbnRyb2xMb29wT3BlcmF0aW9uKCk7CisJCQkJb3BlcmF0aW9uLmFjdG9yID0gJHBhcmFtcy5nZXRBY3RvcigpOworCQkJCW9wZXJhdGlvbi5vcGVyYXRpb24gPSAiY3JlYXRlTW9kdWxlSW5zdGFuY2UiOworCQkJCW9wZXJhdGlvbi50YXJnZXQgPSAkZXZlbnQudGFyZ2V0OworCQkJCS8vCisJCQkJLy8gQ3JlYXRlIG9wZXJhdGlvbldyYXBwZXIKKwkJCQkvLworCQkJCUNvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlciBvcGVyYXRpb25XcmFwcGVyID0gbmV3IENvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlcigkZXZlbnQucmVxdWVzdElELCBvcGVyYXRpb24pOworCQkJCS8vCisJCQkJLy8gQ29uc3RydWN0IGFuIE1TTyByZXF1ZXN0CisJCQkJLy8KKwkJCQlNU09SZXF1ZXN0IHJlcXVlc3QgPSBuZXcgTVNPUmVxdWVzdCgpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMgPSBuZXcgTVNPUmVxdWVzdERldGFpbHMoKTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLm1vZGVsSW5mbyA9IG5ldyBNU09Nb2RlbEluZm8oKTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLmNsb3VkQ29uZmlndXJhdGlvbiA9IG5ldyBNU09DbG91ZENvbmZpZ3VyYXRpb24oKTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlcXVlc3RJbmZvID0gbmV3IE1TT1JlcXVlc3RJbmZvKCk7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5yZXF1ZXN0UGFyYW1ldGVycyA9IG5ldyBNU09SZXF1ZXN0UGFyYW1ldGVycygpOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMucmVxdWVzdFBhcmFtZXRlcnMudXNlclBhcmFtcyA9IG51bGw7CisJCQkJLy8KKwkJCQkvLyBjbG91ZENvbmZpZ3VyYXRpb24KKwkJCQkvLworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMuY2xvdWRDb25maWd1cmF0aW9uLmxjcENsb3VkUmVnaW9uSWQgPSBjbG91ZFJlZ2lvbkl0ZW1DbG91ZFJlZ2lvbklkOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMuY2xvdWRDb25maWd1cmF0aW9uLnRlbmFudElkID0gdGVuYW50SXRlbVRlbmFudElkOworCQkJCS8vCisJCQkJLy8gbW9kZWxJbmZvCisJCQkJLy8KKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLm1vZGVsSW5mby5tb2RlbFR5cGUgPSAidmZNb2R1bGUiOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMubW9kZWxJbmZvLm1vZGVsSW52YXJpYW50SWQgPSB2Zk1vZHVsZUl0ZW1QZXJzb25hTW9kZWxJZDsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLm1vZGVsSW5mby5tb2RlbE5hbWVWZXJzaW9uSWQgPSB2Zk1vZHVsZUl0ZW1Nb2RlbE5hbWVWZXJzaW9uSWQ7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5tb2RlbEluZm8ubW9kZWxOYW1lID0gdmZNb2R1bGVJdGVtTW9kZWxOYW1lOworCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMubW9kZWxJbmZvLm1vZGVsVmVyc2lvbiA9IHZmTW9kdWxlSXRlbVBlcnNvbmFNb2RlbFZlcnNpb247CisJCQkJLy8KKwkJCQkvLyByZXF1ZXN0SW5mbworCQkJCS8vCisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5yZXF1ZXN0SW5mby5pbnN0YW5jZU5hbWUgPSB2Zk1vZHVsZUl0ZW1WZk1vZHVsZU5hbWU7CisJCQkJcmVxdWVzdC5yZXF1ZXN0RGV0YWlscy5yZXF1ZXN0SW5mby5zb3VyY2UgPSAiUE9MSUNZIjsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlcXVlc3RJbmZvLnN1cHByZXNzUm9sbGJhY2sgPSBmYWxzZTsKKwkJCQkvLworCQkJCS8vIHJlbGF0ZWRJbnN0YW5jZUxpc3QKKwkJCQkvLworCQkJCU1TT1JlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50IHJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MSA9IG5ldyBNU09SZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudCgpOworCQkJCU1TT1JlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50IHJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MiA9IG5ldyBNU09SZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudCgpOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UgPSBuZXcgTVNPUmVsYXRlZEluc3RhbmNlKCk7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZSA9IG5ldyBNU09SZWxhdGVkSW5zdGFuY2UoKTsKKwkJCQkvLworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UuaW5zdGFuY2VJZCA9IHNlcnZpY2VJdGVtU2VydmljZUluc3RhbmNlSWQ7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8gPSBuZXcgTVNPTW9kZWxJbmZvKCk7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxUeXBlID0gInNlcnZpY2UiOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsSW52YXJpYW50SWQgPSBzZXJ2aWNlSXRlbVBlcnNvbmFNb2RlbElkOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsTmFtZVZlcnNpb25JZCA9IHNlcnZpY2VJdGVtTW9kZWxOYW1lVmVyc2lvbklkOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsTmFtZSA9IHNlcnZpY2VJdGVtTW9kZWxOYW1lOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50MS5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsVmVyc2lvbiA9IHNlcnZpY2VJdGVtTW9kZWxWZXJzaW9uOworCQkJCS8vCisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5pbnN0YW5jZUlkID0gdm5mSXRlbVZuZklkOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mi5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvID0gbmV3IE1TT01vZGVsSW5mbygpOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mi5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsVHlwZSA9ICJ2bmYiOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mi5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsSW52YXJpYW50SWQgPSB2bmZJdGVtUGVyc29uYU1vZGVsSWQ7CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxOYW1lVmVyc2lvbklkID0gdm5mSXRlbU1vZGVsTmFtZVZlcnNpb25JZDsKKwkJCQlyZWxhdGVkSW5zdGFuY2VMaXN0RWxlbWVudDIucmVsYXRlZEluc3RhbmNlLm1vZGVsSW5mby5tb2RlbE5hbWUgPSB2bmZJdGVtTW9kZWxOYW1lOworCQkJCXJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mi5yZWxhdGVkSW5zdGFuY2UubW9kZWxJbmZvLm1vZGVsVmVyc2lvbiA9IHZuZkl0ZW1Nb2RlbFZlcnNpb247CisJCQkJcmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQyLnJlbGF0ZWRJbnN0YW5jZS5tb2RlbEluZm8ubW9kZWxDdXN0b21pemF0aW9uTmFtZSA9IHZuZkl0ZW1WbmZUeXBlOworCQkJCS8vCQorCQkJCXJlcXVlc3QucmVxdWVzdERldGFpbHMucmVsYXRlZEluc3RhbmNlTGlzdC5hZGQocmVsYXRlZEluc3RhbmNlTGlzdEVsZW1lbnQxKTsKKwkJCQlyZXF1ZXN0LnJlcXVlc3REZXRhaWxzLnJlbGF0ZWRJbnN0YW5jZUxpc3QuYWRkKHJlbGF0ZWRJbnN0YW5jZUxpc3RFbGVtZW50Mik7CisJCQkJLy8KKwkJCQkvLyBwcmludCBNU08gcmVxdWVzdCBmb3IgZGVidWcKKwkJCQkvLworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTVNPIHJlcXVlc3Qgc2VudDoiKTsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihyZXF1ZXN0KSk7CisJCQkJLy8KKwkJCQkvLworCQkJCS8vCisJCQkJaWYgKHJlcXVlc3QgIT0gbnVsbCkgeworCQkJCQkvLworCQkJCQkvLyBUZWxsIGludGVyZXN0ZWQgcGFydGllcyB3ZSBhcmUgcGVyZm9ybWluZyB0aGlzIE9wZXJhdGlvbgorCQkJCQkvLworCQkJCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQkJCQlub3RpZmljYXRpb24ubm90aWZpY2F0aW9uID0gQ29udHJvbExvb3BOb3RpZmljYXRpb25UeXBlLk9QRVJBVElPTjsKKwkJCQkJbm90aWZpY2F0aW9uLmZyb20gPSAicG9saWN5IjsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeU5hbWUgPSBkcm9vbHMuZ2V0UnVsZSgpLmdldE5hbWUoKTsKKwkJCQkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCQkJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQkJCQl0cnkgeworCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisJCQkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJfQorCQkJCQkvLworCQkJCQkvLyBDb25jYXRlbmF0ZSBzZXJ2aWNlSXRlbVNlcnZpY2VJbnN0YW5jZUlkIGFuZCB2bmZJdGVtVm5mSWQgdG8gbXNvVVJMCisJCQkJCS8vCisJCQkJCVN0cmluZyBNU09VcmwgPSAkcGFyYW1zLmdldE1zb1VSTCgpICsgIi9zZXJ2aWNlSW5zdGFuY2VzL3YyLyIgKyBzZXJ2aWNlSXRlbVNlcnZpY2VJbnN0YW5jZUlkICsgIi92bmZzLyIgKyB2bmZJdGVtVm5mSWQgKyAiL3ZmTW9kdWxlcyI7CisJCQkJCS8vCisJCQkJCS8vIENhbGwgTVNPCisJCQkJCS8vCisJCQkJCU1TT1Jlc3BvbnNlIHJlc3BvbnNlID0gTVNPTWFuYWdlci5jcmVhdGVNb2R1bGVJbnN0YW5jZShNU09VcmwsICRwYXJhbXMuZ2V0TXNvVVJMKCksICRwYXJhbXMuZ2V0TXNvVXNlcm5hbWUoKSwgJHBhcmFtcy5nZXRNc29QYXNzd29yZCgpLCByZXF1ZXN0KTsKKwkJCQkJLy8KKwkJCQkJaWYgKHJlc3BvbnNlICE9IG51bGwpIHsKKwkJCQkJCS8vCisJCQkJCQkvLyBBc3NpZ24gcmVxdWVzdElkCisJCQkJCQkvLworCQkJCQkJcmVxdWVzdC5yZXF1ZXN0SWQgPSAkZXZlbnQucmVxdWVzdElELnRvU3RyaW5nKCk7CQkJCQkJCisJCQkJCQlyZXNwb25zZS5yZXF1ZXN0LnJlcXVlc3RJZCA9ICRldmVudC5yZXF1ZXN0SUQudG9TdHJpbmcoKTsKKwkJCQkJCS8vCisJCQkJCQkvLyBJbnNlcnQgZmFjdHMKKwkJCQkJCS8vCisJCQkJCQlpbnNlcnQob3BlcmF0aW9uV3JhcHBlcik7CisJCQkJCQlpbnNlcnQocmVxdWVzdCk7CisJCQkJCQlpbnNlcnQocmVzcG9uc2UpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8KKwkJCQkJCS8vIE1TTyByZXF1ZXN0IG5vdCBldmVuIGFjY2VwdGVkCisJCQkJCQkvLworCQkJCQkJbm90aWZpY2F0aW9uLm1lc3NhZ2UgPSBvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi50b01lc3NhZ2UoKTsKKwkJCQkJCW9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm1lc3NhZ2UgPSBvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi50b01lc3NhZ2UoKTsKKwkJCQkJCW9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiRkFJTFVSRV9FWENFUFRJT04iOworCQkJCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkVfRVhDRVBUSU9OIik7CisJCQkJCQlub3RpZmljYXRpb24uaGlzdG9yeS5hZGQob3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24pOworCQkJCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT05fRkFJTFVSRTsKKwkJCQkJCS8vCisJCQkJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCQkJCS8vCisJCQkJCQl0cnkgeworCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJfQorCSAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJCS8vCisJCQkJCQkvLyBSZXRyYWN0IGV2ZXJ5dGhpbmcKKwkJCQkJCS8vCisJCQkJCQlyZXRyYWN0KCRldmVudCk7CisJCQkJCQlyZXRyYWN0KCRtYW5hZ2VyKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiY29uc3RydWN0ZWQgTVNPIHJlcXVlc3QgaXMgaW52YWxpZC4iKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsgCisJCX0gCitlbmQKKwkJCisvKgorKgorKiBUaGlzIHJ1bGUgcmVzcG9uZHMgdG8gQVBQQyBSZXNwb25zZSBFdmVudHMKKyoKKyovCitydWxlICJCUk1TUGFyYW12RldEZW1vUG9saWN5LkFQUEMuUkVTUE9OU0UiCisJd2hlbgorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisJCSRldmVudCA6IFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKQorCQkkbWFuYWdlciA6IEV2ZW50TWFuYWdlciggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRldmVudC5jbG9zZWRMb29wQ29udHJvbE5hbWUgKQorCQkkb3BlcmF0aW9uV3JhcHBlciA6IENvbnRyb2xMb29wT3BlcmF0aW9uV3JhcHBlciggcmVxdWVzdElEID09ICRldmVudC5yZXF1ZXN0SUQgKQorCQkkcmVxdWVzdCA6IFJlcXVlc3QoIGdldENvbW1vbkhlYWRlcigpLlJlcXVlc3RJRCA9PSAkZXZlbnQucmVxdWVzdElEICkKKwkJJHJlc3BvbnNlIDogUmVzcG9uc2UoIGdldENvbW1vbkhlYWRlcigpLlJlcXVlc3RJRCA9PSAkZXZlbnQucmVxdWVzdElEICkJCisJdGhlbgorCQlTeXN0ZW0ub3V0LnByaW50bG4oInJ1bGUgQVBQQy5SRVNQT05TRSBpcyB0cmlnZ2VyZWQuIik7CisJCWlmICgkcmVzcG9uc2UuU3RhdHVzID09IG51bGwpIHsKKwkJCSRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5vdXRjb21lID0gIkZBSUxVUkVfRVhDRVBUSU9OIjsKKwkJCSRtYW5hZ2VyLnNldENvbnRyb2xMb29wUmVzdWx0KCJGQUlMVVJFX0VYQ0VQVElPTiIpOworCQl9IAorCQkvLworCQkvLyBHZXQgdGhlIFJlc3BvbnNlIENvZGUKKwkJLy8KKwkJUmVzcG9uc2VDb2RlIGNvZGUgPSBSZXNwb25zZUNvZGUudG9SZXNwb25zZUNvZGUoJHJlc3BvbnNlLlN0YXR1cy5Db2RlKTsKKwkJaWYgKGNvZGUgPT0gbnVsbCkgeworCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiRkFJTFVSRV9FWENFUFRJT04iOworCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkVfRVhDRVBUSU9OIik7CisJCX0KKwkJLy8KKwkJLy8gQ29uc3RydWN0IG5vdGlmaWNhdGlvbgorCQkvLworCQlWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uID0gbmV3IFZpcnR1YWxDb250cm9sTG9vcE5vdGlmaWNhdGlvbigkZXZlbnQpOworCQlub3RpZmljYXRpb24uZnJvbSA9ICJwb2xpY3kiOworCQlub3RpZmljYXRpb24ucG9saWN5TmFtZSA9IGRyb29scy5nZXRSdWxlKCkuZ2V0TmFtZSgpOworCQlub3RpZmljYXRpb24ucG9saWN5U2NvcGUgPSAiY29tIjsKKwkJbm90aWZpY2F0aW9uLnBvbGljeVZlcnNpb24gPSAiMSI7CisJCW5vdGlmaWNhdGlvbi5tZXNzYWdlID0gJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLnRvTWVzc2FnZSgpOworCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ubWVzc2FnZSA9ICRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi50b01lc3NhZ2UoKTsKKwkJLy8KKwkJLy8gT2ssIGxldCdzIGZpZ3VyZSBvdXQgd2hhdCBBUFAtQydzIHJlc3BvbnNlIGlzCisJCS8vCisJCXN3aXRjaCAoY29kZSkgeworCQkJY2FzZSBBQ0NFUFQ6CisJCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiUFJPQ0VTU0lORyI7CisJCQkJYnJlYWs7CisJCQljYXNlIEVSUk9SOgorCQkJY2FzZSBSRUpFQ1Q6CisJCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiRkFJTFVSRV9FWENFUFRJT04iOworCQkJCSRtYW5hZ2VyLnNldENvbnRyb2xMb29wUmVzdWx0KCJGQUlMVVJFX0VYQ0VQVElPTiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVUNDRVNTOgorCQkJCSRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5vdXRjb21lID0gIlNVQ0NFU1MiOworCQkJCSRtYW5hZ2VyLnNldENvbnRyb2xMb29wUmVzdWx0KCJTVUNDRVNTIik7CisJCQkJYnJlYWs7CisJCQljYXNlIEZBSUxVUkU6CisJCQkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUgPSAiRkFJTFVSRSI7CisJCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIkZBSUxVUkUiKTsKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm91dGNvbWUuZXF1YWxzKCJTVUNDRVNTIikpIHsKKwkJCW5vdGlmaWNhdGlvbi5oaXN0b3J5LmFkZCgkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24pOworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT05fU1VDQ0VTUzsKKwkJCS8vCisJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorICAgICAgICAgICAgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9TVUNDRVNTOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKyAgICAgICAgICAgIAlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIH0KKworCQkJLy8KKwkJCS8vIFdlIGFyZSBnb2luZyB0byByZXRyYWN0IHRoZXNlIG9iamVjdHMgZnJvbSBtZW1vcnkKKwkJCS8vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHJhY3RpbmcgZXZlcnl0aGluZyIpOworCQkJcmV0cmFjdCgkb3BlcmF0aW9uV3JhcHBlcik7CisJCQlyZXRyYWN0KCRyZXF1ZXN0KTsKKwkJCXJldHJhY3QoJHJlc3BvbnNlKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHJhY3QoJG1hbmFnZXIpOworCQl9IGVsc2UgaWYgKCRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5vdXRjb21lLmVxdWFscygiUFJPQ0VTU0lORyIpKSB7CisJCQlyZXRyYWN0KCRyZXNwb25zZSk7CisJCX0gZWxzZSB7CisJCQlub3RpZmljYXRpb24uaGlzdG9yeS5hZGQoJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uKTsKKwkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuT1BFUkFUSU9OX0ZBSUxVUkU7CisJCQkvLworCQkJLy8gTGV0IGludGVyZXN0ZWQgcGFydGllcyBrbm93CisJCQkvLworCQkJdHJ5IHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKyAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuRklOQUxfRkFJTFVSRTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworICAgICAgICAgICAgCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorCQkJLy8KKwkJCS8vIFdlIGFyZSBnb2luZyB0byByZXRyYWN0IHRoZXNlIG9iamVjdHMgZnJvbSBtZW1vcnkKKwkJCS8vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHJhY3RpbmcgZXZlcnl0aGluZyIpOworCQkJcmV0cmFjdCgkb3BlcmF0aW9uV3JhcHBlcik7CisJCQlyZXRyYWN0KCRyZXF1ZXN0KTsKKwkJCXJldHJhY3QoJHJlc3BvbnNlKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHJhY3QoJG1hbmFnZXIpOworCQl9CisJCQorZW5kCQkKKworLyoKKyoKKyogVGhpcyBydWxlIGlzIHVzZWQgdG8gY2xlYW4gdXAgQVBQQyByZXNwb25zZQorKgorKi8JCQorcnVsZSAiQlJNU1BhcmFtdkZXRGVtb1BvbGljeS5BUFBDLlJFU1BPTlNFLkNMRUFOVVAiCisJd2hlbgorCQkkcGFyYW1zIDogUGFyYW1zKCBnZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSA9PSAiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4IiApCisgICAgICAgICRyZXNwb25zZSA6IFJlc3BvbnNlKCRpZCA6IGdldENvbW1vbkhlYWRlcigpLlJlcXVlc3RJRCApCisJCW5vdCAoIFZpcnR1YWxDb250cm9sTG9vcEV2ZW50KCBjbG9zZWRMb29wQ29udHJvbE5hbWUgPT0gJHBhcmFtcy5nZXRDbG9zZWRMb29wQ29udHJvbE5hbWUoKSwgcmVxdWVzdElEID09ICRpZCwgY2xvc2VkTG9vcEV2ZW50U3RhdHVzID09IENvbnRyb2xMb29wRXZlbnRTdGF0dXMuT05TRVQgKSApIAorCXRoZW4KKwkJU3lzdGVtLm91dC5wcmludGxuKCJydWxlIEFQUEMuUkVTUE9OU0UuQ0xFQU5VUCBpcyB0cmlnZ2VyZWQuIik7CisJCXJldHJhY3QoJHJlc3BvbnNlKTsKK2VuZAorCisvKgorKgorKiBUaGlzIHJ1bGUgcmVzcG9uZHMgdG8gTVNPIFJlc3BvbnNlIEV2ZW50cworKgorKi8KK3J1bGUgIkJSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuTVNPLlJFU1BPTlNFIgorCXdoZW4KKwkJJHBhcmFtcyA6IFBhcmFtcyggZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCkgPT0gIkNMLUZSV0wtTE9XLVRSQUZGSUMtU0lHLWQ5MjVlZDczLTgyMzEtNGQwMi05NTQ1LWRiNGUxMDFmODhmOCIgKQorCQkkZXZlbnQgOiBWaXJ0dWFsQ29udHJvbExvb3BFdmVudCggY2xvc2VkTG9vcENvbnRyb2xOYW1lID09ICRwYXJhbXMuZ2V0Q2xvc2VkTG9vcENvbnRyb2xOYW1lKCksIGNsb3NlZExvb3BFdmVudFN0YXR1cyA9PSBDb250cm9sTG9vcEV2ZW50U3RhdHVzLk9OU0VUICkKKwkJJG1hbmFnZXIgOiBFdmVudE1hbmFnZXIoIGNsb3NlZExvb3BDb250cm9sTmFtZSA9PSAkZXZlbnQuY2xvc2VkTG9vcENvbnRyb2xOYW1lICkKKwkJJG9wZXJhdGlvbldyYXBwZXIgOiBDb250cm9sTG9vcE9wZXJhdGlvbldyYXBwZXIoIHJlcXVlc3RJRCA9PSAkZXZlbnQucmVxdWVzdElEICkKKwkJJHJlcXVlc3QgOiBNU09SZXF1ZXN0KCByZXF1ZXN0SWQgPT0gJGV2ZW50LnJlcXVlc3RJRC50b1N0cmluZygpICkKKwkJJHJlc3BvbnNlIDogTVNPUmVzcG9uc2UoIHJlcXVlc3QucmVxdWVzdElkID09ICRldmVudC5yZXF1ZXN0SUQudG9TdHJpbmcoKSApCQorCXRoZW4KKwkJU3lzdGVtLm91dC5wcmludGxuKCJydWxlIE1TTy5SRVNQT05TRSBpcyB0cmlnZ2VyZWQuIik7CisJCS8vCisJCS8vIENvbnN0cnVjdCBub3RpZmljYXRpb24KKwkJLy8KKwkJVmlydHVhbENvbnRyb2xMb29wTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBWaXJ0dWFsQ29udHJvbExvb3BOb3RpZmljYXRpb24oJGV2ZW50KTsKKwkJbm90aWZpY2F0aW9uLmZyb20gPSAicG9saWN5IjsKKwkJbm90aWZpY2F0aW9uLnBvbGljeU5hbWUgPSBkcm9vbHMuZ2V0UnVsZSgpLmdldE5hbWUoKTsKKwkJbm90aWZpY2F0aW9uLnBvbGljeVNjb3BlID0gImNvbSI7CisJCW5vdGlmaWNhdGlvbi5wb2xpY3lWZXJzaW9uID0gIjEiOworCQlub3RpZmljYXRpb24ubWVzc2FnZSA9ICRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi50b01lc3NhZ2UoKTsKKwkJJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uLm1lc3NhZ2UgPSAkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24udG9NZXNzYWdlKCk7CisJCS8vCisJCS8vIFRoZSBvcGVyYXRpb24gY2FuIGVpdGhlciBiZSBzdWNjZWVkZWQgb3IgZmFpbGVkCisJCS8vIAorCQlpZigkcmVzcG9uc2UucmVxdWVzdC5yZXF1ZXN0U3RhdHVzLnJlcXVlc3RTdGF0ZS5lcXVhbHMoIkNPTVBMRVRFIikpIHsKKwkJCSRvcGVyYXRpb25XcmFwcGVyLm9wZXJhdGlvbi5vdXRjb21lID0gIlNVQ0NFU1MiOworCQkJJG1hbmFnZXIuc2V0Q29udHJvbExvb3BSZXN1bHQoIlNVQ0NFU1MiKTsKKwkJCW5vdGlmaWNhdGlvbi5oaXN0b3J5LmFkZCgkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24pOworCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5PUEVSQVRJT05fU1VDQ0VTUzsKKwkJCS8vCisJCQkvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKwkJCS8vCisJCQl0cnkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworCQkJCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbiA9IENvbnRyb2xMb29wTm90aWZpY2F0aW9uVHlwZS5GSU5BTF9TVUNDRVNTOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIExldCBpbnRlcmVzdGVkIHBhcnRpZXMga25vdworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKFNlcmlhbGl6YXRpb24uZ3NvblByZXR0eS50b0pzb24obm90aWZpY2F0aW9uKSk7CisgICAgICAgICAgICAJUG9saWN5RW5naW5lLm1hbmFnZXIuZGVsaXZlcigkcGFyYW1zLmdldE5vdGlmaWNhdGlvblRvcGljKCksIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbigiQ2FuJ3QgZGVsaXZlciBub3RpZmljYXRpb246ICIgKyBub3RpZmljYXRpb24pOworICAgICAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLworCQkJLy8gV2UgYXJlIGdvaW5nIHRvIHJldHJhY3QgdGhlc2Ugb2JqZWN0cyBmcm9tIG1lbW9yeQorCQkJLy8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiUmV0cmFjdGluZyBldmVyeXRoaW5nIik7CisJCQlyZXRyYWN0KCRvcGVyYXRpb25XcmFwcGVyKTsKKwkJCXJldHJhY3QoJHJlcXVlc3QpOworCQkJcmV0cmFjdCgkcmVzcG9uc2UpOworCQkJcmV0cmFjdCgkZXZlbnQpOworCQkJcmV0cmFjdCgkbWFuYWdlcik7CisJCX0gZWxzZSB7CisJCQkkb3BlcmF0aW9uV3JhcHBlci5vcGVyYXRpb24ub3V0Y29tZSA9ICJGQUlMVVJFIjsKKwkJCSRtYW5hZ2VyLnNldENvbnRyb2xMb29wUmVzdWx0KCJGQUlMVVJFIik7CisJCQlub3RpZmljYXRpb24uaGlzdG9yeS5hZGQoJG9wZXJhdGlvbldyYXBwZXIub3BlcmF0aW9uKTsKKwkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuT1BFUkFUSU9OX0ZBSUxVUkU7CisJCQkvLworCQkJLy8gTGV0IGludGVyZXN0ZWQgcGFydGllcyBrbm93CisJCQkvLworCQkJdHJ5IHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oU2VyaWFsaXphdGlvbi5nc29uUHJldHR5LnRvSnNvbihub3RpZmljYXRpb24pKTsKKwkJCQlQb2xpY3lFbmdpbmUubWFuYWdlci5kZWxpdmVyKCRwYXJhbXMuZ2V0Tm90aWZpY2F0aW9uVG9waWMoKSwgbm90aWZpY2F0aW9uKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYW4ndCBkZWxpdmVyIG5vdGlmaWNhdGlvbjogIiArIG5vdGlmaWNhdGlvbik7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCW5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb24gPSBDb250cm9sTG9vcE5vdGlmaWNhdGlvblR5cGUuRklOQUxfRkFJTFVSRTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBMZXQgaW50ZXJlc3RlZCBwYXJ0aWVzIGtub3cKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgCVN5c3RlbS5vdXQucHJpbnRsbihTZXJpYWxpemF0aW9uLmdzb25QcmV0dHkudG9Kc29uKG5vdGlmaWNhdGlvbikpOworICAgICAgICAgICAgCVBvbGljeUVuZ2luZS5tYW5hZ2VyLmRlbGl2ZXIoJHBhcmFtcy5nZXROb3RpZmljYXRpb25Ub3BpYygpLCBub3RpZmljYXRpb24pOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIkNhbid0IGRlbGl2ZXIgbm90aWZpY2F0aW9uOiAiICsgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8KKwkJCS8vIFdlIGFyZSBnb2luZyB0byByZXRyYWN0IHRoZXNlIG9iamVjdHMgZnJvbSBtZW1vcnkKKwkJCS8vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJldHJhY3RpbmcgZXZlcnl0aGluZyIpOworCQkJcmV0cmFjdCgkb3BlcmF0aW9uV3JhcHBlcik7CisJCQlyZXRyYWN0KCRyZXF1ZXN0KTsKKwkJCXJldHJhY3QoJHJlc3BvbnNlKTsKKwkJCXJldHJhY3QoJGV2ZW50KTsKKwkJCXJldHJhY3QoJG1hbmFnZXIpOworCQl9CisJCQorZW5kCQorcnVsZSAiY29tLkNvbmZpZ19CUk1TX1BhcmFtX0JSTVNQYXJhbXZGV0RlbW9Qb2xpY3kuUGFyYW1zIiAKKwlzYWxpZW5jZSAxMDAwIAorCXdoZW4KKwl0aGVuCisJCVBhcmFtcyBwYXJhbXMgPSBuZXcgUGFyYW1zKCk7CisJCXBhcmFtcy5zZXRBYWlQYXR0ZXJuTWF0Y2goMSk7CisJCXBhcmFtcy5zZXRBcHBjVG9waWMoIkFQUEMtQ0wiKTsKKwkJcGFyYW1zLnNldEFhaVVSTCgibnVsbCIpOworCQlwYXJhbXMuc2V0TXNvUGFzc3dvcmQoIm51bGwiKTsKKwkJcGFyYW1zLnNldENsb3NlZExvb3BDb250cm9sTmFtZSgiQ0wtRlJXTC1MT1ctVFJBRkZJQy1TSUctZDkyNWVkNzMtODIzMS00ZDAyLTk1NDUtZGI0ZTEwMWY4OGY4Iik7CisJCXBhcmFtcy5zZXRNc29VUkwoIm51bGwiKTsKKwkJcGFyYW1zLnNldEFhaVVzZXJuYW1lKCJudWxsIik7CisJCXBhcmFtcy5zZXRBY3RvcigiQVBQQyIpOworCQlwYXJhbXMuc2V0TXNvVXNlcm5hbWUoIm51bGwiKTsKKwkJcGFyYW1zLnNldEFhaU5hbWVkUXVlcnlVVUlEKCJudWxsIik7CisJCXBhcmFtcy5zZXRBYWlQYXNzd29yZCgibnVsbCIpOworCQlwYXJhbXMuc2V0Tm90aWZpY2F0aW9uVG9waWMoIlBPTElDWS1DTC1NR1QiKTsKKwkJaW5zZXJ0KHBhcmFtcyk7CitlbmQKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEudHh0IGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfQlJNU19SYXdfVGVzdEJSTVNSYXdQb2xpY3kuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyNGZjMwotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0JSTVNfUmF3X1Rlc3RCUk1TUmF3UG9saWN5LjEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2UgY29tLnNhbXBsZQoraW1wb3J0IGNvbS5zYW1wbGUuRHJvb2xzVGVzdC5NZXNzYWdlOworLy8gRGVjbGFyZSB0aGUgUGFyYW1ldGVycyBoZXJlLgorZGVjbGFyZSBQYXJhbXMKKyAgICBzYW1Qb2xsIDogaW50CisgICAgdmFsdWUgOiBTdHJpbmcKK2VuZAorLy8gVGhpcyBSdWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBVSS4KK3J1bGUgIkNyZWF0ZSBwYXJhbWV0ZXJzIHN0cnVjdHVyZSIKKyAgICBzYWxpZW5jZSAxMDAwICAKKyAgICB3aGVuCisgICAgdGhlbgorICAgICAgICBQYXJhbXMgcGFyYW1zID0gbmV3IFBhcmFtcygpOworICAgICAgICBwYXJhbXMuc2V0U2FtUG9sbCg3Nik7CisgICAgICAgIHBhcmFtcy5zZXRWYWx1ZSgiQm9iYnkiKTsKKyAgICAgICAgaW5zZXJ0TG9naWNhbChwYXJhbXMpOworZW5kCisvLyBTdGFydCB1c2luZyB0aGUgcGFyYW1ldGVycyBhcyBiZWxvdyBpbiBSdWxlcy4KK3J1bGUgIlJ1bGUgMTogQ2hlY2sgcGFyYW1ldGVyIHN0cnVjdHVyZSBhY2Nlc3MgZnJvbSB3aGVuL3RoZW4iCisgICAgd2hlbgorICAgICAgICAkcGFyYW06IFBhcmFtcygpCisgICAgICAgIFBhcmFtcygkcGFyYW0uc2FtUG9sbCA+IDUwKQorICAgIHRoZW4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaXJpbmcgcnVsZSAxIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigkcGFyYW0pOworZW5kCitydWxlICJSdWxlIDI6IENoZWNrIHBhcmFtZXRlciB2YWx1ZSBhY2Nlc3MgZnJvbSB3aGVuL3RoZW4iCisgICAgd2hlbgorICAgICAgICAkcGFyYW06IFBhcmFtcygpCisgICAgICAgIFBhcmFtcygkcGFyYW0uc2FtUG9sbCA+IDUwKQorICAgIHRoZW4KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGaXJpbmcgcnVsZSAyIik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigkcGFyYW0uZ2V0VmFsdWUoKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigkcGFyYW0uZ2V0U2FtUG9sbCgpKTsKK2VuZApkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRldfVGVzdEZpcmVXYWxsUG9saWN5LjEuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlMWVkNQotLS0gL2Rldi9udWxsCisrKyBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0ZXX1Rlc3RGaXJlV2FsbFBvbGljeS4xLmpzb24KQEAgLTAsMCArMSBAQAoreyJzZXJ2aWNlVHlwZUlkIjoiL3YwL2ZpcmV3YWxsL3BhbiIsImNvbmZpZ05hbWUiOiJUZXN0RmlyZVdhbGxQb2xpY3kiLCJkZXBsb3ltZW50T3B0aW9uIjp7ImRlcGxveU5vdyI6ZmFsc2V9LCJzZWN1cml0eVpvbmVJZCI6IjEuNS4zIiwidmVuZG9yU2VydmljZUlkIjoidmlwciIsInZlbmRvclNwZWNpZmljRGF0YSI6eyJpZE1hcCI6W3siYXN0cmFJZCI6IjEuNS4zIiwidmVuZG9ySWQiOiJkZXZpY2VHcm91cDpkZXYifV19LCJzZXJ2aWNlR3JvdXBzIjpbXSwiYWRkcmVzc0dyb3VwcyI6W10sImZpcmV3YWxsUnVsZUxpc3QiOlt7InBvc2l0aW9uIjoiMSIsInJ1bGVOYW1lIjoidGVzdCIsImZyb21ab25lcyI6W10sInRvWm9uZXMiOltdLCJuZWdhdGVTb3VyY2UiOmZhbHNlLCJuZWdhdGVEZXN0aW5hdGlvbiI6ZmFsc2UsInNvdXJjZUxpc3QiOltdLCJkZXN0aW5hdGlvbkxpc3QiOltdLCJzb3VyY2VTZXJ2aWNlcyI6W10sImRlc3RTZXJ2aWNlcyI6W10sImFjdGlvbiI6bnVsbCwiZGVzY3JpcHRpb24iOm51bGwsImVuYWJsZWQiOnRydWUsImxvZyI6dHJ1ZX1dLCJydWxlVG9UYWciOlt7InJ1bGVOYW1lIjoidGVzdCIsInRhZ3MiOlt7ImtleSI6InRlc3QiLCJ2YWx1ZSI6InRlc3QifV0sInRhZ1BpY2tlck5hbWUiOiJ0ZXN0IiwibmV0d29ya1JvbGUiOiJ0ZXN0In1dfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEuanNvbiBiL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX0ZhdWx0X1Rlc3RDbG9zZWRMb29wUG9saWN5LjEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2UyNWNhCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfRmF1bHRfVGVzdENsb3NlZExvb3BQb2xpY3kuMS5qc29uCkBAIC0wLDAgKzEgQEAKK3sidHJpbml0eSI6ZmFsc2UsInZVU1AiOnRydWUsIm1jciI6ZmFsc2UsImdhbWEiOmZhbHNlLCJ2RE5TIjpmYWxzZSwidm5mVHlwZSI6IlNhbXBsZVZORiIsInZTZXJ2aWNlcyI6bnVsbCwiY2xvc2VkTG9vcFBvbGljeVN0YXR1cyI6IkFjdGl2ZSIsInRyaWdnZXJTaWduYXR1cmVzIjp7InNpZ25hdHVyZXMiOiIoKE5PVChOT1QoMS4wLjIuMylBTkQoMS4wLjIuMykpLCBUaW1lID0gMTEpQU5EKChOT1QoMS4wLjIuMylBTkQoMS4wLjIuMykpLCBUaW1lID0gMTIpKSIsInRpbWVXaW5kb3ciOjExLCJ0cmFwTWF4QWdlIjoxMn0sImFjdGlvbnMiOiJTYW1wbGVWU0NMIiwidGltZUludGVydmFsIjoxMSwidGltZU91dHZQUk8iOjExLCJ0aW1lT3V0UnVieSI6MTEsInJldHJ5cyI6MSwiYWdpbmdXaW5kb3ciOjEsImdlb0xpbmsiOiJURVNUIiwiZW1haWxBZGRyZXNzIjoiYWFAdGVzdC5jb24iLCJ2ZXJpZmljYXRpb25TaWduYXR1cmVzIjp7InNpZ25hdHVyZXMiOiIoTk9UKDEuMC4yLjMpQU5EKDEuMC4yLjMpKSIsInRpbWVXaW5kb3ciOjEyfSwiY29uZGl0aW9ucyI6IlNFTkQiLCJ0cmlnZ2VyU2lnbmF0dXJlc1VzZWRGb3JVSSI6eyJzaWduYXR1cmVzIjoiTk9UQCFTYW1wbGVWYXJiaW5kQCFBTkRAIVNhbXBsZVZhcmJpbmQjIT8hTk9UQCFTYW1wbGVWYXJiaW5kQCFPUkAhU2FtcGxlVmFyYmluZCMhTk9UQCFBMUAhQU5EQCFTYW1wbGVWYXJiaW5kIyFOT1RAIUExQCFBTkRAIUEyIyE/ISIsImNvbm5lY3RTaWduYXR1cmVzIjoiTk9UQCFUcmFwMUAhMTFAIUFOREAhVHJhcDFAITEyIyE/ISJ9LCJ2ZXJpZmljYXRpb25TaWduYXR1cmVzVXNlZEZvclVJIjp7InNpZ25hdHVyZXMiOiJOT1RAIVNhbXBsZVZhcmJpbmRAIUFOREAhU2FtcGxlVmFyYmluZCMhPyEiLCJjb25uZWN0U2lnbmF0dXJlcyI6bnVsbH0sInRyaWdnZXJUaW1lV2luZG93VXNlZEZvclVJIjoxMSwidmVyZmlmaWNhdGlvblRpbWVXaW5kb3dVc2VkRm9yVUkiOjEyLCJwZXBOYW1lIjpudWxsLCJwZXBBY3Rpb24iOm51bGwsInRlbXBsYXRlVmVyc2lvbiI6bnVsbCwidHJhcE1heEFnZVVzZWRGb3JVSSI6MTIsImVjb21wbmFtZSI6bnVsbH0KZGlmZiAtLWdpdCBhL1BPTElDWS1TREstQVBQL3NyYy90ZXN0L3Jlc291cmNlcy9jb20uQ29uZmlnX01TX3ZGaXJld2FsbC4xLmpzb24gYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19NU192RmlyZXdhbGwuMS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTI4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19NU192RmlyZXdhbGwuMS5qc29uCkBAIC0wLDAgKzEgQEAKK3sic2VydmljZSI6IlRjYU1ldHJpY3MiLCJsb2NhdGlvbiI6IlNhbXBsZVNlcnZpY2VMb2NhdGlvbiIsInV1aWQiOiIvc2VydmljZXMvY2RhcC10Y2EtaGktbG8vaW5zdGFuY2VzL2RlbW8vY29uZmlndXJhdGlvbi9tZXRyaWNzUGVyRnVuY3Rpb25hbFJvbGUvdkZpcmV3YWxsIiwicG9saWN5TmFtZSI6InZGaXJld2FsbCIsImRlc2NyaXB0aW9uIjoiTWljcm8gU2VydmljZSB2RmlyZXdhbGwgRGVtbyBQb2xpY3lAQ3JlYXRlZEJ5OkBDcmVhdGVkQnk6QE1vZGlmaWVkQnk6QE1vZGlmaWVkQnk6IiwiY29uZmlnTmFtZSI6IlNhbXBsZUNvbmZpZ05hbWUiLCJ0ZW1wbGF0ZVZlcnNpb24iOiJPcGVuU291cmNlLnZlcnNpb24uMSIsInZlcnNpb24iOiIxLjAuMC41IiwicHJpb3JpdHkiOiIxIiwicG9saWN5U2NvcGUiOiJyZXNvdXJjZT1TYW1wbGVSZXNvdXJjZSxzZXJ2aWNlPVNhbXBsZVNlcnZpY2UsdHlwZT1TYW1wbGVUeXBlLGNsb3NlZExvb3BDb250cm9sTmFtZT1TYW1wbGVDbG9zZWRMb29wIiwiY29udGVudCI6eyJ0aHJlc2hvbGRzIjpbeyJzZXZlcml0eSI6Ik1BSk9SIiwiZmllbGRQYXRoIjoiJC5ldmVudC5tZWFzdXJlbWVudHNGb3JWZlNjYWxpbmdGaWVsZHMudk5pY1VzYWdlQXJyYXlbKl0ucGFja2V0c0luIiwidGhyZXNob2xkVmFsdWUiOiIzMDAiLCJjbG9zZWRMb29wQ29udHJvbE5hbWUiOiJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiLCJ2ZXJzaW9uIjoiMS4wLjIiLCJkaXJlY3Rpb24iOiJMRVNTX09SX0VRVUFMIn0seyJzZXZlcml0eSI6IkNSSVRJQ0FMIiwiZmllbGRQYXRoIjoiJC5ldmVudC5tZWFzdXJlbWVudHNGb3JWZlNjYWxpbmdGaWVsZHMudk5pY1VzYWdlQXJyYXlbKl0ucGFja2V0c0luIiwidGhyZXNob2xkVmFsdWUiOiI3MDAiLCJjbG9zZWRMb29wQ29udHJvbE5hbWUiOiJDTC1GUldMLUxPVy1UUkFGRklDLVNJRy1kOTI1ZWQ3My04MjMxLTRkMDItOTU0NS1kYjRlMTAxZjg4ZjgiLCJ2ZXJzaW9uIjoiMS4wLjIiLCJkaXJlY3Rpb24iOiJHUkVBVEVSX09SX0VRVUFMIn1dLCJmdW5jdGlvbmFsUm9sZSI6InZGaXJld2FsbCIsIm5hbWUiOiIwIn19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLmpzb24gYi9QT0xJQ1ktU0RLLUFQUC9zcmMvdGVzdC9yZXNvdXJjZXMvY29tLkNvbmZpZ19QTV9UZXN0Q2xvc2VkTG9vcFBNUG9saWN5LjEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA1N2VkCi0tLSAvZGV2L251bGwKKysrIGIvUE9MSUNZLVNESy1BUFAvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbS5Db25maWdfUE1fVGVzdENsb3NlZExvb3BQTVBvbGljeS4xLmpzb24KQEAgLTAsMCArMSBAQAoreyJzZXJ2aWNlVHlwZVBvbGljeU5hbWUiOiAiUmVnaXN0cmF0aW9uIEZhaWx1cmUoVHJpbml0eSkiLCJ2VVNQIjp0cnVlLCJhdHRyaWJ1dGVzIjp7IlB0aWxlTGltaXQiOiIxMSIsIlRocmVzaG9sZCI6IjEyIiwiV2luZG93IjoiMTMiLCJUcmFpbmluZyI6IjE0IiwiRnJhY3Rpb25TYW1wbGVQZXJEYXkiOiIxNSIsIkNvbnNlY3V0aXZlSW50ZXJ2YWxPbnNldCI6IjExIiwiUmV0cnlUaW1lciI6IjEyIiwiQ29uc2VjdXRpdmVJbnRlcnZhbEFiYXRlbWVudCI6IjExIiwiT25zZXRNZXNzYWdlIjoiMTEiLCJBYmF0ZW1lbnRNZXNzYWdlIjoiMTIiLCJQb2xpY3lOYW1lIjoiMTMifSwiZ2VvTGluayI6IlRFU1QiLCJlbWFpbEFkZHJlc3MiOiJ0ZXN0QHRlc3QuY29tIn0K