ZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CmluZGV4IDYxNzg4NTEuLmYzZGQyM2UgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdApAQCAtMTg1NywzMCArMTg1Nyw3NCBAQAogICAgUmV0dXJucyB0aGUgbG9nZ2VyIHVzZWQgYnkgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gIElmIG5lY2Vzc2FyeSwgYSBuZXcgb25lCiAgICB3aWxsIGJlIGNyZWF0ZWQuCiAKLSAgIFdoZW4gZmlyc3QgY3JlYXRlZCB0aGUgbG9nZ2VyIGhhcyBsZXZlbCA6ZGF0YTpgbG9nZ2luZy5OT1RTRVRgIGFuZCBoYXMgYQotICAgaGFuZGxlciB3aGljaCBzZW5kcyBvdXRwdXQgdG8gOmRhdGE6YHN5cy5zdGRlcnJgIHVzaW5nIGZvcm1hdAotICAgYGAnWyUobGV2ZWxuYW1lKXMvJShwcm9jZXNzTmFtZSlzXSAlKG1lc3NhZ2UpcydgYC4gIChUaGUgbG9nZ2VyIGFsbG93cyB1c2Ugb2YKLSAgIHRoZSBub24tc3RhbmRhcmQgYGAnJShwcm9jZXNzTmFtZSlzJ2BgIGZvcm1hdC4pICBNZXNzYWdlIHNlbnQgdG8gdGhpcyBsb2dnZXIKLSAgIHdpbGwgbm90IGJ5IGRlZmF1bHQgcHJvcGFnYXRlIHRvIHRoZSByb290IGxvZ2dlci4KKyAgIFdoZW4gZmlyc3QgY3JlYXRlZCB0aGUgbG9nZ2VyIGhhcyBsZXZlbCA6ZGF0YTpgbG9nZ2luZy5OT1RTRVRgIGFuZCBubworICAgZGVmYXVsdCBoYW5kbGVyLiBNZXNzYWdlcyBzZW50IHRvIHRoaXMgbG9nZ2VyIHdpbGwgbm90IGJ5IGRlZmF1bHQgcHJvcGFnYXRlCisgICB0byB0aGUgcm9vdCBsb2dnZXIuCiAKICAgIE5vdGUgdGhhdCBvbiBXaW5kb3dzIGNoaWxkIHByb2Nlc3NlcyB3aWxsIG9ubHkgaW5oZXJpdCB0aGUgbGV2ZWwgb2YgdGhlCiAgICBwYXJlbnQgcHJvY2VzcydzIGxvZ2dlciAtLSBhbnkgb3RoZXIgY3VzdG9taXphdGlvbiBvZiB0aGUgbG9nZ2VyIHdpbGwgbm90IGJlCiAgICBpbmhlcml0ZWQuCiAKKy4uIGN1cnJlbnRtb2R1bGU6OiBtdWx0aXByb2Nlc3NpbmcKKy4uIGZ1bmN0aW9uOjogbG9nX3RvX3N0ZGVycigpCisKKyAgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYSBjYWxsIHRvIDpmdW5jOmBnZXRfbG9nZ2VyYCBidXQgaW4gYWRkaXRpb24gdG8KKyAgIHJldHVybmluZyB0aGUgbG9nZ2VyIGNyZWF0ZWQgYnkgZ2V0X2xvZ2dlciwgaXQgYWRkcyBhIGhhbmRsZXIgd2hpY2ggc2VuZHMKKyAgIG91dHB1dCB0byA6ZGF0YTpgc3lzLnN0ZGVycmAgdXNpbmcgZm9ybWF0CisgICBgYCdbJShsZXZlbG5hbWUpcy8lKHByb2Nlc3NOYW1lKXNdICUobWVzc2FnZSlzJ2BgLgorCiBCZWxvdyBpcyBhbiBleGFtcGxlIHNlc3Npb24gd2l0aCBsb2dnaW5nIHR1cm5lZCBvbjo6CiAKICAgICA+Pj4gaW1wb3J0IG11bHRpcHJvY2Vzc2luZywgbG9nZ2luZwotICAgID4+PiBsb2dnZXIgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpCisgICAgPj4+IGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5sb2dfdG9fc3RkZXJyKCkKICAgICA+Pj4gbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICAgICA+Pj4gbG9nZ2VyLndhcm5pbmcoJ2Rvb21lZCcpCiAgICAgW1dBUk5JTkcvTWFpblByb2Nlc3NdIGRvb21lZAogICAgID4+PiBtID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQogICAgIFtJTkZPL1N5bmNNYW5hZ2VyLTFdIGNoaWxkIHByb2Nlc3MgY2FsbGluZyBzZWxmLnJ1bigpCi0gICAgW0lORk8vU3luY01hbmFnZXItMV0gbWFuYWdlciBib3VuZCB0byAnXFxcXC5cXHBpcGVcXHB5Yy0yNzc2LTAtbGowdGZhJworICAgIFtJTkZPL1N5bmNNYW5hZ2VyLTFdIGNyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgLy4uLi9weW1wLVdoNDdPXworICAgIFtJTkZPL1N5bmNNYW5hZ2VyLTFdIG1hbmFnZXIgc2VydmluZyBhdCAnLy4uLi9saXN0ZW5lci1sV3NFUnMnCiAgICAgPj4+IGRlbCBtCiAgICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCiAgICAgW0lORk8vU3luY01hbmFnZXItMV0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCitJbiBhZGRpdGlvbiB0byBoYXZpbmcgdGhlc2UgdHdvIGxvZ2dpbmcgZnVuY3Rpb25zLCB0aGUgbXVsdGlwcm9jZXNzaW5nIGFsc28KK2V4cG9zZXMgdHdvIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbCBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgIDpjb25zdDpgU1VCV0FSTklOR2AKK2FuZCA6Y29uc3Q6YFNVQkRFQlVHYC4gVGhlIHRhYmxlIGJlbG93IGlsbHVzdHJhdGVzIHdoZXJlIHRoZXNlcyBmaXQgaW4gdGhlCitub3JtYWwgbGV2ZWwgaGllcmFyY2h5LgorCisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworfCBMZXZlbCAgICAgICAgICB8IE51bWVyaWMgdmFsdWUgIHwKKys9PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT0rCit8IGBgU1VCV0FSTklOR2BgIHwgMjUgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBTVUJERUJVR2BgICAgfCA1ICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKworCitGb3IgYSBmdWxsIHRhYmxlIG9mIGxvZ2dpbmcgbGV2ZWxzLCBzZWUgdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZS4KKworVGhlc2UgYWRkaXRpb25hbCBsb2dnaW5nIGxldmVscyBhcmUgdXNlZCBwcmltYXJpbHkgZm9yIGNlcnRhaW4gZGVidWcgbWVzc2FnZXMKK3dpdGhpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4gQmVsb3cgaXMgdGhlIHNhbWUgZXhhbXBsZSBhcyBhYm92ZSwgZXhjZXB0Cit3aXRoIDpjb25zdDpgU1VCREVCVUdgIGVuYWJsZWQ6OgorCisgICAgPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcsIGxvZ2dpbmcKKyAgICA+Pj4gbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnIoKQorICAgID4+PiBsb2dnZXIuc2V0TGV2ZWwobXVsdGlwcm9jZXNzaW5nLlNVQkRFQlVHKQorICAgID4+PiBsb2dnZXIud2FybmluZygnZG9vbWVkJykKKyAgICBbV0FSTklORy9NYWluUHJvY2Vzc10gZG9vbWVkCisgICAgPj4+IG0gPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCisgICAgW0lORk8vU3luY01hbmFnZXItMV0gY2hpbGQgcHJvY2VzcyBjYWxsaW5nIHNlbGYucnVuKCkKKyAgICBbSU5GTy9TeW5jTWFuYWdlci0xXSBjcmVhdGVkIHRlbXAgZGlyZWN0b3J5IC8uLi4vcHltcC1kakdCWE4KKyAgICBbSU5GTy9TeW5jTWFuYWdlci0xXSBtYW5hZ2VyIHNlcnZpbmcgYXQgJy8uLi4vcHltcC1kakdCWE4vbGlzdGVuZXIta25CWUdlJworICAgID4+PiBkZWwgbQorICAgIFtTVUJERUJVRy9NYWluUHJvY2Vzc10gZmluYWxpemVyIGNhbGxpbmcgLi4uCisgICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCisgICAgW0RFQlVHL1N5bmNNYW5hZ2VyLTFdIG1hbmFnZXIgcmVjZWl2ZWQgc2h1dGRvd24gbWVzc2FnZQorICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0xXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGNhbGxiYWNrPXVubGluaywgLi4uCisgICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLTFdIGZpbmFsaXplciBjYWxsaW5nIDxidWlsdC1pbiBmdW5jdGlvbiB1bmxpbms+IC4uLgorICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0xXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGRlYWQ+CisgICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLTFdIGZpbmFsaXplciBjYWxsaW5nIDxmdW5jdGlvbiBybXRyZWUgYXQgMHg1YWE3MzA+IC4uLgorICAgIFtJTkZPL1N5bmNNYW5hZ2VyLTFdIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAogVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZy5kdW1teWAgbW9kdWxlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IGFhZDQxOTEuLjVhMTM3NDIgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtNDgsNyArNDgsNyBAQAogICAgICdhbGxvd19jb25uZWN0aW9uX3BpY2tsaW5nJywgJ0J1ZmZlclRvb1Nob3J0JywgJ1RpbWVvdXRFcnJvcicsCiAgICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnQ29uZGl0aW9uJywKICAgICAnRXZlbnQnLCAnUXVldWUnLCAnSm9pbmFibGVRdWV1ZScsICdQb29sJywgJ1ZhbHVlJywgJ0FycmF5JywKLSAgICAnUmF3VmFsdWUnLCAnUmF3QXJyYXknCisgICAgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwpAQCAtNjEsNiArNjEsNyBAQAogaW1wb3J0IHN5cwogCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgorZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgU1VCREVCVUcsIFNVQldBUk5JTkcKIAogIwogIyBFeGNlcHRpb25zCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKaW5kZXggYWM5ZDc5ZS4uYjEzZjU2NSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQpAQCAtMTcsNyArMTcsOCBAQAogX19hbGxfXyA9IFsKICAgICAnc3ViX2RlYnVnJywgJ2RlYnVnJywgJ2luZm8nLCAnc3ViX3dhcm5pbmcnLCAnZ2V0X2xvZ2dlcicsCiAgICAgJ2xvZ190b19zdGRlcnInLCAnZ2V0X3RlbXBfZGlyJywgJ3JlZ2lzdGVyX2FmdGVyX2ZvcmsnLAotICAgICdpc19leGl0aW5nJywgJ0ZpbmFsaXplJywgJ0ZvcmtBd2FyZVRocmVhZExvY2snLCAnRm9ya0F3YXJlTG9jYWwnCisgICAgJ2lzX2V4aXRpbmcnLCAnRmluYWxpemUnLCAnRm9ya0F3YXJlVGhyZWFkTG9jaycsICdGb3JrQXdhcmVMb2NhbCcsCisgICAgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogIwpAQCAtNTcsMTkgKzU4LDI3IEBACiAgICAgUmV0dXJucyBsb2dnZXIgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcKICAgICAnJycKICAgICBnbG9iYWwgX2xvZ2dlcgorICAgIGltcG9ydCBsb2dnaW5nLCBhdGV4aXQKIAotICAgIGlmIG5vdCBfbG9nZ2VyOgotICAgICAgICBpbXBvcnQgbG9nZ2luZywgYXRleGl0CisgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQorICAgIHRyeToKKyAgICAgICAgaWYgbm90IF9sb2dnZXI6CiAKLSAgICAgICAgIyBYWFggbXVsdGlwcm9jZXNzaW5nIHNob3VsZCBjbGVhbnVwIGJlZm9yZSBsb2dnaW5nCi0gICAgICAgIGlmIGhhc2F0dHIoYXRleGl0LCAndW5yZWdpc3RlcicpOgotICAgICAgICAgICAgYXRleGl0LnVucmVnaXN0ZXIoX2V4aXRfZnVuY3Rpb24pCi0gICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoX2V4aXRfZnVuY3Rpb24pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhdGV4aXQuX2V4aXRoYW5kbGVycy5yZW1vdmUoKF9leGl0X2Z1bmN0aW9uLCAoKSwge30pKQotICAgICAgICAgICAgYXRleGl0Ll9leGl0aGFuZGxlcnMuYXBwZW5kKChfZXhpdF9mdW5jdGlvbiwgKCksIHt9KSkKKyAgICAgICAgICAgIF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihMT0dHRVJfTkFNRSkKKyAgICAgICAgICAgIF9sb2dnZXIucHJvcGFnYXRlID0gMAorICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCREVCVUcsICdTVUJERUJVRycpCisgICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShTVUJXQVJOSU5HLCAnU1VCV0FSTklORycpCiAKLSAgICAgICAgX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKExPR0dFUl9OQU1FKQorICAgICAgICAgICAgIyBYWFggbXVsdGlwcm9jZXNzaW5nIHNob3VsZCBjbGVhbnVwIGJlZm9yZSBsb2dnaW5nCisgICAgICAgICAgICBpZiBoYXNhdHRyKGF0ZXhpdCwgJ3VucmVnaXN0ZXInKToKKyAgICAgICAgICAgICAgICBhdGV4aXQudW5yZWdpc3RlcihfZXhpdF9mdW5jdGlvbikKKyAgICAgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoX2V4aXRfZnVuY3Rpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGF0ZXhpdC5fZXhpdGhhbmRsZXJzLnJlbW92ZSgoX2V4aXRfZnVuY3Rpb24sICgpLCB7fSkpCisgICAgICAgICAgICAgICAgYXRleGl0Ll9leGl0aGFuZGxlcnMuYXBwZW5kKChfZXhpdF9mdW5jdGlvbiwgKCksIHt9KSkKKworICAgIGZpbmFsbHk6CisgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIAogICAgIHJldHVybiBfbG9nZ2VyCiAKQEAgLTc5LDE0ICs4OCwxNyBAQAogICAgICcnJwogICAgIGdsb2JhbCBfbG9nX3RvX3N0ZGVycgogICAgIGltcG9ydCBsb2dnaW5nCisKICAgICBsb2dnZXIgPSBnZXRfbG9nZ2VyKCkKICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihERUZBVUxUX0xPR0dJTkdfRk9STUFUKQogICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQotICAgIGlmIGxldmVsIGlzIG5vdCBOb25lOgorCisgICAgaWYgbGV2ZWw6CiAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsZXZlbCkKICAgICBfbG9nX3RvX3N0ZGVyciA9IFRydWUKKyAgICByZXR1cm4gX2xvZ2dlcgogCiAjCiAjIEZ1bmN0aW9uIHJldHVybmluZyBhIHRlbXAgZGlyZWN0b3J5IHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBvbiBleGl0CmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggMjcyY2I2Ni4uYzYwN2Q1MiAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtNzg1LDMgKzc4NSw0IEBACiBVd2UgWmVzc2luCiBUYXJlayBaaWFkjgogUGV0ZXIgxXN0cmFuZAorSmVzc2UgTm9sbGVyCmRpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKaW5kZXggNWY4ZWRhNS4uNjg0YmE3ZiAxMDA2NDQKLS0tIGEvTWlzYy9ORVdTCisrKyBiL01pc2MvTkVXUwpAQCAtMTM5LDYgKzEzOSwxMCBAQAogTGlicmFyeQogLS0tLS0tLQogCistIEZpeCBhbmQgcHJvcGVybHkgZG9jdW1lbnQgdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUncyBsb2dnaW5nCisgIHN1cHBvcnQsIGV4cG9zZSB0aGUgaW50ZXJuYWwgbGV2ZWxzIGFuZCBwcm92aWRlIHByb3BlciB1c2FnZQorICBleGFtcGxlcy4KKwogLSBJc3N1ZSAjMTY3MjMzMjogZml4IHVucGlja2xpbmcgb2Ygc3Vibm9ybWFsIGZsb2F0cywgd2hpY2ggd2FzCiAgIHByb2R1Y2luZyBhIFZhbHVlRXJyb3Igb24gc29tZSBwbGF0Zm9ybXMuCiAK