ZGlmZiAtLWdpdCBhL01hYy9Ub29scy9JREUvUHlFZGl0LnB5IGIvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKaW5kZXggZmM4NTAzYS4uZDk2ODExNCAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKKysrIGIvTWFjL1Rvb2xzL0lERS9QeUVkaXQucHkKQEAgLTY3LDcgKzY3LDcgQEAKIAkJCWVsc2U6CiAJCQkJc291cmNlT1MgPSAnVU5JWCcKIAkJCQlzZWFyY2hTdHJpbmcgPSAnXG4nCi0JCQljaGFuZ2UgPSBFYXN5RGlhbG9ncy5Bc2tZZXNOb0NhbmNlbCgnsyVzsiBjb250YWlucyAlcy1zdHlsZSBsaW5lIGZlZWRzLiAnCisJCQljaGFuZ2UgPSBFYXN5RGlhbG9ncy5Bc2tZZXNOb0NhbmNlbCgnliVzlCBjb250YWlucyAlcy1zdHlsZSBsaW5lIGZlZWRzLiAnCiAJCQkJCSdDaGFuZ2UgdGhlbSB0byBNYWNPUyBjYXJyaWFnZSByZXR1cm5zPycgJSAoc2VsZi50aXRsZSwgc291cmNlT1MpLCAxKQogCQkJIyBidWc6IENhbmNlbCBpcyB0cmVhdGVkIGFzIE5vCiAJCQlpZiBjaGFuZ2UgPiAwOgpAQCAtMjI0LDE0ICsyMjQsMTQgQEAKIAkJc2VsZi5saW5lZmllbGQuYmluZCgiPGNsaWNrPiIsIHNlbGYuY2xpY2tsaW5lZmllbGQpCiAJCiAJZGVmIG1ha2VvcHRpb25zbWVudShzZWxmKToKLQkJbWVudWl0ZW1zID0gWygnRm9udCBzZXR0aW5nc4onLCBzZWxmLmRvbWVudV9mb250c2V0dGluZ3MpLCAKLQkJCQkoIlNhdmUgb3B0aW9uc4oiLCBzZWxmLmRvbWVudV9vcHRpb25zKSwKKwkJbWVudWl0ZW1zID0gWygnRm9udCBzZXR0aW5nc4MnLCBzZWxmLmRvbWVudV9mb250c2V0dGluZ3MpLCAKKwkJCQkoIlNhdmUgb3B0aW9uc4MiLCBzZWxmLmRvbWVudV9vcHRpb25zKSwKIAkJCQknLScsCiAJCQkJKCdcMCcgKyBjaHIoc2VsZi5ydW5fYXNfbWFpbikgKyAnUnVuIGFzIF9fbWFpbl9fJywgc2VsZi5kb21lbnVfdG9nZ2xlX3J1bl9hc19tYWluKSwgCiAJCQkJIygnXDAnICsgY2hyKHNlbGYucnVuX3dpdGhfaW50ZXJwcmV0ZXIpICsgJ1J1biB3aXRoIEludGVycHJldGVyJywgc2VsZi5kb21lbnVfdG9nZ2xlX3J1bl93aXRoX2ludGVycHJldGVyKSwgCiAJCQkJIyctJywKIAkJCQkoJ01vZHVsYXJpemUnLCBzZWxmLmRvbWVudV9tb2R1bGFyaXplKSwKLQkJCQkoJ0Jyb3dzZSBuYW1lc3BhY2WKJywgc2VsZi5kb21lbnVfYnJvd3NlbmFtZXNwYWNlKSwgCisJCQkJKCdCcm93c2UgbmFtZXNwYWNlgycsIHNlbGYuZG9tZW51X2Jyb3dzZW5hbWVzcGFjZSksIAogCQkJCSctJ10KIAkJaWYgc2VsZi5wcm9maWxpbmc6CiAJCQltZW51aXRlbXMgPSBtZW51aXRlbXMgKyBbKCdEaXNhYmxlIHByb2ZpbGVyJywgc2VsZi5kb21lbnVfdG9nZ2xlcHJvZmlsZXIpXQpAQCAtMjQwLDcgKzI0MCw3IEBACiAJCWlmIHNlbGYuZWRpdGdyb3VwLmVkaXRvci5fZGVidWdnZXI6CiAJCQltZW51aXRlbXMgPSBtZW51aXRlbXMgKyBbKCdEaXNhYmxlIGRlYnVnZ2VyJywgc2VsZi5kb21lbnVfdG9nZ2xlZGVidWdnZXIpLAogCQkJCSgnQ2xlYXIgYnJlYWtwb2ludHMnLCBzZWxmLmRvbWVudV9jbGVhcmJyZWFrcG9pbnRzKSwKLQkJCQkoJ0VkaXQgYnJlYWtwb2ludHOKJywgc2VsZi5kb21lbnVfZWRpdGJyZWFrcG9pbnRzKV0KKwkJCQkoJ0VkaXQgYnJlYWtwb2ludHODJywgc2VsZi5kb21lbnVfZWRpdGJyZWFrcG9pbnRzKV0KIAkJZWxzZToKIAkJCW1lbnVpdGVtcyA9IG1lbnVpdGVtcyArIFsoJ0VuYWJsZSBkZWJ1Z2dlcicsIHNlbGYuZG9tZW51X3RvZ2dsZWRlYnVnZ2VyKV0KIAkJc2VsZi5lZGl0Z3JvdXAub3B0aW9uc21lbnUuc2V0KG1lbnVpdGVtcykKQEAgLTI4NSw3ICsyODUsNyBAQAogCWRlZiBkb21lbnVfbW9kdWxhcml6ZShzZWxmLCAqYXJncyk6CiAJCW1vZG5hbWUgPSBfZmlsZW5hbWVfYXNfbW9kbmFtZShzZWxmLnRpdGxlKQogCQlpZiBub3QgbW9kbmFtZToKLQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgJ0Nhbrl0IG1vZHVsYXJpemUgsyVzsicgJSBzZWxmLnRpdGxlCisJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBtb2R1bGFyaXplIJYlc5QnICUgc2VsZi50aXRsZQogCQlydW5fYXNfbWFpbiA9IHNlbGYucnVuX2FzX21haW4KIAkJc2VsZi5ydW5fYXNfbWFpbiA9IDAKIAkJc2VsZi5ydW4oKQpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCQlpbXBvcnQgRWFzeURpYWxvZ3MKIAkJCWltcG9ydCBRZAogCQkJUWQuSW5pdEN1cnNvcigpICMgWFhYIHNob3VsZCBiZSBkb25lIGJ5IGRpYWxvZwotCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlIHdpbmRvdyCzJXOyIGJlZm9yZSBjbG9zaW5nPycgJSBzZWxmLnRpdGxlLCAxKQorCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlIHdpbmRvdyCWJXOUIGJlZm9yZSBjbG9zaW5nPycgJSBzZWxmLnRpdGxlLCAxKQogCQkJaWYgc2F2ZSA+IDA6CiAJCQkJaWYgc2VsZi5kb21lbnVfc2F2ZSgpOgogCQkJCQlyZXR1cm4gMQpAQCAtNDIwLDcgKzQyMCw3IEBACiAJCQlpbXBvcnQgYnVpbGR0b29scwogCQlleGNlcHQgSW1wb3J0RXJyb3I6CiAJCQkjIG9ubHkgaGF2ZSBidWlsZHRvb2xzIGluIFB5dGhvbiA+PSAxLjUuMgotCQkJcmFpc2UgVy5BbGVydEVycm9yLCAis1NhdmUgYXMgQXBwbGV0siBpcyBvbmx5IHN1cHBvcnRlZCBpblxyUHl0aG9uIDEuNS4yIGFuZCB1cC4iCisJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICKWU2F2ZSBhcyBBcHBsZXSUIGlzIG9ubHkgc3VwcG9ydGVkIGluXHJQeXRob24gMS41LjIgYW5kIHVwLiIKIAkJCiAJCWJ1aWxkdG9vbHMuREVCVUcgPSAwCSMgb3VjaC4KIAkJCkBAIC01MDQsNyArNTA0LDcgQEAKIAkJCWlmIHNlbGYuZWRpdGdyb3VwLmVkaXRvci5jaGFuZ2VkOgogCQkJCWltcG9ydCBFYXN5RGlhbG9ncwogCQkJCWltcG9ydCBRZDsgUWQuSW5pdEN1cnNvcigpCi0JCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlILMlc7IgYmVmb3JlIHJ1bm5pbmc/JyAlIHNlbGYudGl0bGUsIDEpCisJCQkJc2F2ZSA9IEVhc3lEaWFsb2dzLkFza1llc05vQ2FuY2VsKCdTYXZlIJYlc5QgYmVmb3JlIHJ1bm5pbmc/JyAlIHNlbGYudGl0bGUsIDEpCiAJCQkJaWYgc2F2ZSA+IDA6CiAJCQkJCWlmIHNlbGYuZG9tZW51X3NhdmUoKToKIAkJCQkJCXJldHVybgpAQCAtNTYwLDIzICs1NjAsMjMgQEAKIAkJCQkJY2xhc3NuYW1lID0gc3RyaW5nLnNwbGl0KHN0cmluZy5zdHJpcChsaW5lWzY6XSkpWzBdCiAJCQkJCWNsYXNzZW5kID0gaWRlbnRpZmllUkVfbWF0Y2goY2xhc3NuYW1lKQogCQkJCQlpZiBjbGFzc2VuZCA8IDE6Ci0JCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW65dCBmaW5kIGEgY2xhc3MuJworCQkJCQkJcmFpc2UgVy5BbGVydEVycm9yLCAnQ2Fu1XQgZmluZCBhIGNsYXNzLicKIAkJCQkJY2xhc3NuYW1lID0gY2xhc3NuYW1lWzpjbGFzc2VuZF0KIAkJCQkJYnJlYWsKIAkJCQllbGlmIGxpbmUgYW5kIGxpbmVbMF0gbm90IGluICdcdCMnOgotCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW65dCBmaW5kIGEgY2xhc3MuJworCQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBmaW5kIGEgY2xhc3MuJwogCQkJZWxzZToKLQkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW65dCBmaW5kIGEgY2xhc3MuJworCQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgJ0NhbtV0IGZpbmQgYSBjbGFzcy4nCiAJCQlpZiBnbG9iYWxzLmhhc19rZXkoY2xhc3NuYW1lKToKIAkJCQlsb2NhbHMgPSBnbG9iYWxzW2NsYXNzbmFtZV0uX19kaWN0X18KIAkJCWVsc2U6Ci0JCQkJcmFpc2UgVy5BbGVydEVycm9yLCAnQ2FuuXQgZmluZCBjbGFzcyCzJXOyLicgJSBjbGFzc25hbWUKKwkJCQlyYWlzZSBXLkFsZXJ0RXJyb3IsICdDYW7VdCBmaW5kIGNsYXNzIJYlc5QuJyAlIGNsYXNzbmFtZQogCQkJIyBkZWRlbnQgdG8gdG9wIGxldmVsCiAJCQlmb3IgaSBpbiByYW5nZShsZW4obGluZXMpKToKIAkJCQlsaW5lc1tpXSA9IGxpbmVzW2ldWzE6XQogCQkJcHl0ZXh0ID0gc3RyaW5nLmpvaW4obGluZXMsICdccicpCiAJCWVsaWYgaW5kZW50ID4gMDoKLQkJCXJhaXNlIFcuQWxlcnRFcnJvciwgJ0Nhbrl0IHJ1biBpbmRlbnRlZCBjb2RlLicKKwkJCXJhaXNlIFcuQWxlcnRFcnJvciwgJ0NhbtV0IHJ1biBpbmRlbnRlZCBjb2RlLicKIAkJCiAJCSMgYWRkICJuZXdsaW5lcyIgdG8gZm9vbCBjb21waWxlL2V4ZWM6IAogCQkjIG5vdyBhIHRyYWNlYmFjayB3aWxsIGdpdmUgdGhlIHJpZ2h0IGxpbmUgbnVtYmVyCkBAIC04MzksNyArODM5LDcgQEAKIAkJc2VsZi5idXR0b25zID0gWwkoIkZpbmQiLAkJImNtZGYiLAkgc2VsZi5maW5kKSwgCiAJCQkJCSgiUmVwbGFjZSIsCSAgICAgImNtZHIiLAkgc2VsZi5yZXBsYWNlKSwgCiAJCQkJCSgiUmVwbGFjZSBhbGwiLAkgTm9uZSwgICBzZWxmLnJlcGxhY2VhbGwpLCAKLQkJCQkJKCJEb265dCBmaW5kIiwgICJjbWRkIiwJIHNlbGYuZG9udCksIAorCQkJCQkoIkRvbtV0IGZpbmQiLCAgImNtZGQiLAkgc2VsZi5kb250KSwgCiAJCQkJCSgiQ2FuY2VsIiwJICAgICAgImNtZC4iLAkgc2VsZi5jYW5jZWwpCiAJCQkJXQogCQlmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5idXR0b25zKSk6CkBAIC04NDgsNyArODQ4LDcgQEAKIAkJCXNlbGYud1t0aXRsZV0gPSBXLkJ1dHRvbihib3VuZHMsIHRpdGxlLCBjYWxsYmFjaykKIAkJCWlmIHNob3J0Y3V0OgogCQkJCXNlbGYudy5iaW5kKHNob3J0Y3V0LCBzZWxmLndbdGl0bGVdLnB1c2gpCi0JCXNlbGYudy5zZXRkZWZhdWx0YnV0dG9uKHNlbGYud1siRG9uuXQgZmluZCJdKQorCQlzZWxmLncuc2V0ZGVmYXVsdGJ1dHRvbihzZWxmLndbIkRvbtV0IGZpbmQiXSkKIAkJc2VsZi53LmZpbmQuZWRpdC5iaW5kKCI8a2V5PiIsIHNlbGYua2V5KQogCQlzZWxmLncuYmluZCgiPGFjdGl2YXRlPiIsIHNlbGYuYWN0aXZhdGUpCiAJCXNlbGYudy5iaW5kKCI8Y2xvc2U+Iiwgc2VsZi5jbG9zZSkKQEAgLTg4MSwxMSArODgxLDExIEBACiAJCQllbHNlOgogCQkJCWZvciB0aXRsZSwgY21kLCBjYWxsIGluIHNlbGYuYnV0dG9uc1s6LTJdOgogCQkJCQlzZWxmLndbdGl0bGVdLmVuYWJsZSgwKQotCQkJCXNlbGYudy5zZXRkZWZhdWx0YnV0dG9uKHNlbGYud1siRG9uuXQgZmluZCJdKQorCQkJCXNlbGYudy5zZXRkZWZhdWx0YnV0dG9uKHNlbGYud1siRG9u1XQgZmluZCJdKQogCQllbHNlOgogCQkJZm9yIHRpdGxlLCBjbWQsIGNhbGwgaW4gc2VsZi5idXR0b25zWzotMl06CiAJCQkJc2VsZi53W3RpdGxlXS5lbmFibGUoMCkKLQkJCXNlbGYudy5zZXRkZWZhdWx0YnV0dG9uKHNlbGYud1siRG9uuXQgZmluZCJdKQorCQkJc2VsZi53LnNldGRlZmF1bHRidXR0b24oc2VsZi53WyJEb27VdCBmaW5kIl0pCiAJCiAJZGVmIGZpbmQoc2VsZik6CiAJCXNlbGYuZ2V0cGFybXNmcm9td2luZG93KCkKQEAgLTEyMDQsNyArMTIwNCw3IEBACiAJCXNlbGYudGVtcGxhdGUgPSAiJXMsICVkIHBvaW50IgogCQlzZWxmLmZvbnRzZXR0aW5ncywgc2VsZi50YWJzZXR0aW5ncywgc2VsZi53aW5kb3dzaXplID0gZ2V0ZWRpdG9ycHJlZnMoKQogCQlzZWxmLncgPSBXLkRpYWxvZygoMzI4LCAxMjApLCAiRWRpdG9yIGRlZmF1bHQgc2V0dGluZ3MiKQotCQlzZWxmLncuc2V0Zm9udGJ1dHRvbiA9IFcuQnV0dG9uKCg4LCA4LCA4MCwgMTYpLCAiU2V0IGZvbnSKIiwgc2VsZi5kb2ZvbnQpCisJCXNlbGYudy5zZXRmb250YnV0dG9uID0gVy5CdXR0b24oKDgsIDgsIDgwLCAxNiksICJTZXQgZm9udIMiLCBzZWxmLmRvZm9udCkKIAkJc2VsZi53LmZvbnR0ZXh0ID0gVy5UZXh0Qm94KCg5OCwgMTAsIC04LCAxNCksIHNlbGYudGVtcGxhdGUgJSAoc2VsZi5mb250c2V0dGluZ3NbMF0sIHNlbGYuZm9udHNldHRpbmdzWzJdKSkKIAkJCiAJCXNlbGYudy5waWNrc2l6ZWJ1dHRvbiA9IFcuQnV0dG9uKCg4LCA1MCwgODAsIDE2KSwgIkZyb250IHdpbmRvdyIsIHNlbGYucGlja3NpemUpCg==