ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggNDljOTU1ZC4uNDhjMWE3OCAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqCUZvciBWaW0gdmVyc2lvbiA4LjAuICBMYXN0IGNoYW5nZTogMjAxNyBGZWIgMTcKKypldmFsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDguMC4gIExhc3QgY2hhbmdlOiAyMDE3IE1hciAwNAogCiAKIAkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0yNjIzLDkgKzI2MjMsOSBAQAogPAkJCTIuMzU2MTk0CiAJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrZmxvYXR8IGZlYXR1cmV9CiAKLWJhbGxvb25fc2hvdyh7bXNnfSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJhbGxvb25fc2hvdygpKgotICAgICAgICAgICAgICAgIFNob3cge21zZ30gaW5zaWRlIHRoZSBiYWxsb29uLgotICAgICAgICAgICAgICAgIEV4YW1wbGU6ID4KK2JhbGxvb25fc2hvdyh7bXNnfSkJCQkJCSpiYWxsb29uX3Nob3coKSoKKwkJU2hvdyB7bXNnfSBpbnNpZGUgdGhlIGJhbGxvb24uCisJCUV4YW1wbGU6ID4KIAkJCWZ1bmMgR2V0QmFsbG9vbkNvbnRlbnQoKQogCQkJICAgIiBpbml0aWF0ZSBnZXR0aW5nIHRoZSBjb250ZW50CiAJCQkgICByZXR1cm4gJycKQEAgLTI2MzMsNyArMjYzMyw3IEBACiAJCQlzZXQgYmFsbG9vbmV4cHI9R2V0QmFsbG9vbkNvbnRlbnQoKQogCiAJCQlmdW5jIEJhbGxvb25DYWxsYmFjayhyZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwgYmFsbG9vbl9zaG93KGE6cmVzdWx0KQorCQkJICBjYWxsIGJhbGxvb25fc2hvdyhhOnJlc3VsdCkKIAkJCWVuZGZ1bmMKIDwKIAkJVGhlIGludGVuZGVkIHVzZSBpcyB0aGF0IGZldGNoaW5nIHRoZSBjb250ZW50IG9mIHRoZSBiYWxsb29uCkBAIC0yNjQxLDcgKzI2NDEsMTAgQEAKIAkJYXN5bmNocm9ub3VzIG1ldGhvZCwgaW4gd2hpY2ggYSBjYWxsYmFjayBpbnZva2VzCiAJCWJhbGxvb25fc2hvdygpLiAgVGhlICdiYWxsb29uZXhwcicgaXRzZWxmIGNhbiByZXR1cm4gYW4KIAkJZW1wdHkgc3RyaW5nIG9yIGEgcGxhY2Vob2xkZXIuCi0gICAgICAgICAgICAgICAge29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgK2JldmFsIGZlYXR1cmV9CisKKwkJV2hlbiBzaG93aW5nIGEgYmFsbG9vbiBpcyBub3QgcG9zc2libGUgbm90aGluZyBoYXBwZW5zLCBubworCQllcnJvciBtZXNzYWdlLgorCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSArYmFsbG9vbl9ldmFsIGZlYXR1cmV9CiAKIAkJCQkJCQkqYnJvd3NlKCkqCiBicm93c2Uoe3NhdmV9LCB7dGl0bGV9LCB7aW5pdGRpcn0sIHtkZWZhdWx0fSkKQEAgLTI4MzcsMTc2ICsyODQwLDYgQEAKIDwJCQk0LjAKIAkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtmbG9hdHwgZmVhdHVyZX0KIAotY2hhbmdlbnIoKQkJCQkJCSpjaGFuZ2VucigpKgotCQlSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgbW9zdCByZWNlbnQgY2hhbmdlLiAgVGhpcyBpcyB0aGUgc2FtZQotCQludW1iZXIgYXMgd2hhdCBpcyBkaXNwbGF5ZWQgd2l0aCB8OnVuZG9saXN0fCBhbmQgY2FuIGJlIHVzZWQKLQkJd2l0aCB0aGUgfDp1bmRvfCBjb21tYW5kLgotCQlXaGVuIGEgY2hhbmdlIHdhcyBtYWRlIGl0IGlzIHRoZSBudW1iZXIgb2YgdGhhdCBjaGFuZ2UuICBBZnRlcgotCQlyZWRvIGl0IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJlZG9uZSBjaGFuZ2UuICBBZnRlciB1bmRvIGl0IGlzCi0JCW9uZSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiB0aGUgdW5kb25lIGNoYW5nZS4KLQotY2hhcjJucih7ZXhwcn1bLCB7dXRmOH1dKQkJCQkJKmNoYXIybnIoKSoKLQkJUmV0dXJuIG51bWJlciB2YWx1ZSBvZiB0aGUgZmlyc3QgY2hhciBpbiB7ZXhwcn0uICBFeGFtcGxlczogPgotCQkJY2hhcjJucigiICIpCQlyZXR1cm5zIDMyCi0JCQljaGFyMm5yKCJBQkMiKQkJcmV0dXJucyA2NQotPAkJV2hlbiB7dXRmOH0gaXMgb21pdHRlZCBvciB6ZXJvLCB0aGUgY3VycmVudCAnZW5jb2RpbmcnIGlzIHVzZWQuCi0JCUV4YW1wbGUgZm9yICJ1dGYtOCI6ID4KLQkJCWNoYXIybnIoIuEiKQkJcmV0dXJucyAyMjUKLQkJCWNoYXIybnIoIuEiWzBdKQkJcmV0dXJucyAxOTUKLTwJCVdpdGgge3V0Zjh9IHNldCB0byAxLCBhbHdheXMgdHJlYXQgYXMgdXRmLTggY2hhcmFjdGVycy4KLQkJQSBjb21iaW5pbmcgY2hhcmFjdGVyIGlzIGEgc2VwYXJhdGUgY2hhcmFjdGVyLgotCQl8bnIyY2hhcigpfCBkb2VzIHRoZSBvcHBvc2l0ZS4KLQotY2luZGVudCh7bG51bX0pCQkJCQkJKmNpbmRlbnQoKSoKLQkJR2V0IHRoZSBhbW91bnQgb2YgaW5kZW50IGZvciBsaW5lIHtsbnVtfSBhY2NvcmRpbmcgdGhlIEMKLQkJaW5kZW50aW5nIHJ1bGVzLCBhcyB3aXRoICdjaW5kZW50Jy4KLQkJVGhlIGluZGVudCBpcyBjb3VudGVkIGluIHNwYWNlcywgdGhlIHZhbHVlIG9mICd0YWJzdG9wJyBpcwotCQlyZWxldmFudC4gIHtsbnVtfSBpcyB1c2VkIGp1c3QgbGlrZSBpbiB8Z2V0bGluZSgpfC4KLQkJV2hlbiB7bG51bX0gaXMgaW52YWxpZCBvciBWaW0gd2FzIG5vdCBjb21waWxlZCB0aGUgfCtjaW5kZW50fAotCQlmZWF0dXJlLCAtMSBpcyByZXR1cm5lZC4KLQkJU2VlIHxDLWluZGVudGluZ3wuCi0KLWNsZWFybWF0Y2hlcygpCQkJCQkJKmNsZWFybWF0Y2hlcygpKgotCQlDbGVhcnMgYWxsIG1hdGNoZXMgcHJldmlvdXNseSBkZWZpbmVkIGJ5IHxtYXRjaGFkZCgpfCBhbmQgdGhlCi0JCXw6bWF0Y2h8IGNvbW1hbmRzLgotCi0JCQkJCQkJKmNvbCgpKgotY29sKHtleHByfSkJVGhlIHJlc3VsdCBpcyBhIE51bWJlciwgd2hpY2ggaXMgdGhlIGJ5dGUgaW5kZXggb2YgdGhlIGNvbHVtbgotCQlwb3NpdGlvbiBnaXZlbiB3aXRoIHtleHByfS4gIFRoZSBhY2NlcHRlZCBwb3NpdGlvbnMgYXJlOgotCQkgICAgLgkgICAgdGhlIGN1cnNvciBwb3NpdGlvbgotCQkgICAgJAkgICAgdGhlIGVuZCBvZiB0aGUgY3Vyc29yIGxpbmUgKHRoZSByZXN1bHQgaXMgdGhlCi0JCQkgICAgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBjdXJzb3IgbGluZSBwbHVzIG9uZSkKLQkJICAgICd4CSAgICBwb3NpdGlvbiBvZiBtYXJrIHggKGlmIHRoZSBtYXJrIGlzIG5vdCBzZXQsIDAgaXMKLQkJCSAgICByZXR1cm5lZCkKLQkJICAgIHYgICAgICAgSW4gVmlzdWFsIG1vZGU6IHRoZSBzdGFydCBvZiB0aGUgVmlzdWFsIGFyZWEgKHRoZQotCQkJICAgIGN1cnNvciBpcyB0aGUgZW5kKS4gIFdoZW4gbm90IGluIFZpc3VhbCBtb2RlCi0JCQkgICAgcmV0dXJucyB0aGUgY3Vyc29yIHBvc2l0aW9uLiAgRGlmZmVycyBmcm9tIHwnPHwgaW4KLQkJCSAgICB0aGF0IGl0J3MgdXBkYXRlZCByaWdodCBhd2F5LgotCQlBZGRpdGlvbmFsbHkge2V4cHJ9IGNhbiBiZSBbbG51bSwgY29sXTogYSB8TGlzdHwgd2l0aCB0aGUgbGluZQotCQlhbmQgY29sdW1uIG51bWJlci4gTW9zdCB1c2VmdWwgd2hlbiB0aGUgY29sdW1uIGlzICIkIiwgdG8gZ2V0Ci0JCXRoZSBsYXN0IGNvbHVtbiBvZiBhIHNwZWNpZmljIGxpbmUuICBXaGVuICJsbnVtIiBvciAiY29sIiBpcwotCQlvdXQgb2YgcmFuZ2UgdGhlbiBjb2woKSByZXR1cm5zIHplcm8uCi0JCVRvIGdldCB0aGUgbGluZSBudW1iZXIgdXNlIHxsaW5lKCl8LiAgVG8gZ2V0IGJvdGggdXNlCi0JCXxnZXRwb3MoKXwuCi0JCUZvciB0aGUgc2NyZWVuIGNvbHVtbiBwb3NpdGlvbiB1c2UgfHZpcnRjb2woKXwuCi0JCU5vdGUgdGhhdCBvbmx5IG1hcmtzIGluIHRoZSBjdXJyZW50IGZpbGUgY2FuIGJlIHVzZWQuCi0JCUV4YW1wbGVzOiA+Ci0JCQljb2woIi4iKQkJY29sdW1uIG9mIGN1cnNvcgotCQkJY29sKCIkIikJCWxlbmd0aCBvZiBjdXJzb3IgbGluZSBwbHVzIG9uZQotCQkJY29sKCIndCIpCQljb2x1bW4gb2YgbWFyayB0Ci0JCQljb2woIiciIC4gbWFya25hbWUpCWNvbHVtbiBvZiBtYXJrIG1hcmtuYW1lCi08CQlUaGUgZmlyc3QgY29sdW1uIGlzIDEuICAwIGlzIHJldHVybmVkIGZvciBhbiBlcnJvci4KLQkJRm9yIGFuIHVwcGVyY2FzZSBtYXJrIHRoZSBjb2x1bW4gbWF5IGFjdHVhbGx5IGJlIGluIGFub3RoZXIKLQkJYnVmZmVyLgotCQlGb3IgdGhlIGN1cnNvciBwb3NpdGlvbiwgd2hlbiAndmlydHVhbGVkaXQnIGlzIGFjdGl2ZSwgdGhlCi0JCWNvbHVtbiBpcyBvbmUgaGlnaGVyIGlmIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKLQkJbGluZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBjb2x1bW4gaW4gSW5zZXJ0IG1vZGU6ID4KLQkJCTppbWFwIDxGMj4gPEMtTz46bGV0IHNhdmVfdmUgPSAmdmU8Q1I+Ci0JCQkJXDxDLU8+OnNldCB2ZT1hbGw8Q1I+Ci0JCQkJXDxDLU8+OmVjaG8gY29sKCIuIikgLiAiXG4iIDxCYXI+Ci0JCQkJXGxldCAmdmUgPSBzYXZlX3ZlPENSPgotPAotCi1jb21wbGV0ZSh7c3RhcnRjb2x9LCB7bWF0Y2hlc30pCQkJKmNvbXBsZXRlKCkqICpFNzg1KgotCQlTZXQgdGhlIG1hdGNoZXMgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb24uCi0JCUNhbiBvbmx5IGJlIHVzZWQgaW4gSW5zZXJ0IG1vZGUuICBZb3UgbmVlZCB0byB1c2UgYSBtYXBwaW5nCi0JCXdpdGggQ1RSTC1SID0gKHNlZSB8aV9DVFJMLVJ8KS4gIEl0IGRvZXMgbm90IHdvcmsgYWZ0ZXIgQ1RSTC1PCi0JCW9yIHdpdGggYW4gZXhwcmVzc2lvbiBtYXBwaW5nLgotCQl7c3RhcnRjb2x9IGlzIHRoZSBieXRlIG9mZnNldCBpbiB0aGUgbGluZSB3aGVyZSB0aGUgY29tcGxldGVkCi0JCXRleHQgc3RhcnQuICBUaGUgdGV4dCB1cCB0byB0aGUgY3Vyc29yIGlzIHRoZSBvcmlnaW5hbCB0ZXh0Ci0JCXRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbWF0Y2hlcy4gIFVzZSBjb2woJy4nKSBmb3IgYW4KLQkJZW1wdHkgc3RyaW5nLiAgImNvbCgnLicpIC0gMSIgd2lsbCByZXBsYWNlIG9uZSBjaGFyYWN0ZXIgYnkgYQotCQltYXRjaC4KLQkJe21hdGNoZXN9IG11c3QgYmUgYSB8TGlzdHwuICBFYWNoIHxMaXN0fCBpdGVtIGlzIG9uZSBtYXRjaC4KLQkJU2VlIHxjb21wbGV0ZS1pdGVtc3wgZm9yIHRoZSBraW5kIG9mIGl0ZW1zIHRoYXQgYXJlIHBvc3NpYmxlLgotCQlOb3RlIHRoYXQgdGhlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB5b3UgbmVlZCB0byBhdm9pZAotCQlpbnNlcnRpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCBjYXVzZSBjb21wbGV0aW9uIHRvIHN0b3AuCi0JCVRoZSBtYXRjaCBjYW4gYmUgc2VsZWN0ZWQgd2l0aCBDVFJMLU4gYW5kIENUUkwtUCBhcyB1c3VhbCB3aXRoCi0JCUluc2VydCBtb2RlIGNvbXBsZXRpb24uICBUaGUgcG9wdXAgbWVudSB3aWxsIGFwcGVhciBpZgotCQlzcGVjaWZpZWQsIHNlZSB8aW5zLWNvbXBsZXRpb24tbWVudXwuCi0JCUV4YW1wbGU6ID4KLQlpbm9yZW1hcCA8RjU+IDxDLVI+PUxpc3RNb250aHMoKTxDUj4KLQotCWZ1bmMhIExpc3RNb250aHMoKQotCSAgY2FsbCBjb21wbGV0ZShjb2woJy4nKSwgWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywKLQkJXCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywKLQkJXCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddKQotCSAgcmV0dXJuICcnCi0JZW5kZnVuYwotPAkJVGhpcyBpc24ndCB2ZXJ5IHVzZWZ1bCwgYnV0IGl0IHNob3dzIGhvdyBpdCB3b3Jrcy4gIE5vdGUgdGhhdAotCQlhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgdG8gYXZvaWQgYSB6ZXJvIGJlaW5nIGluc2VydGVkLgotCi1jb21wbGV0ZV9hZGQoe2V4cHJ9KQkJCQkqY29tcGxldGVfYWRkKCkqCi0JCUFkZCB7ZXhwcn0gdG8gdGhlIGxpc3Qgb2YgbWF0Y2hlcy4gIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUKLQkJZnVuY3Rpb24gc3BlY2lmaWVkIHdpdGggdGhlICdjb21wbGV0ZWZ1bmMnIG9wdGlvbi4KLQkJUmV0dXJucyAwIGZvciBmYWlsdXJlIChlbXB0eSBzdHJpbmcgb3Igb3V0IG9mIG1lbW9yeSksCi0JCTEgd2hlbiB0aGUgbWF0Y2ggd2FzIGFkZGVkLCAyIHdoZW4gdGhlIG1hdGNoIHdhcyBhbHJlYWR5IGluCi0JCXRoZSBsaXN0LgotCQlTZWUgfGNvbXBsZXRlLWZ1bmN0aW9uc3wgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHtleHByfS4gIEl0IGlzCi0JCXRoZSBzYW1lIGFzIG9uZSBpdGVtIGluIHRoZSBsaXN0IHRoYXQgJ29tbmlmdW5jJyB3b3VsZCByZXR1cm4uCi0KLWNvbXBsZXRlX2NoZWNrKCkJCQkJKmNvbXBsZXRlX2NoZWNrKCkqCi0JCUNoZWNrIGZvciBhIGtleSB0eXBlZCB3aGlsZSBsb29raW5nIGZvciBjb21wbGV0aW9uIG1hdGNoZXMuCi0JCVRoaXMgaXMgdG8gYmUgdXNlZCB3aGVuIGxvb2tpbmcgZm9yIG1hdGNoZXMgdGFrZXMgc29tZSB0aW1lLgotCQlSZXR1cm5zIHxUUlVFfCB3aGVuIHNlYXJjaGluZyBmb3IgbWF0Y2hlcyBpcyB0byBiZSBhYm9ydGVkLAotCQl6ZXJvIG90aGVyd2lzZS4KLQkJT25seSB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgd2l0aCB0aGUKLQkJJ2NvbXBsZXRlZnVuYycgb3B0aW9uLgotCi0JCQkJCQkqY29uZmlybSgpKgotY29uZmlybSh7bXNnfSBbLCB7Y2hvaWNlc30gWywge2RlZmF1bHR9IFssIHt0eXBlfV1dXSkKLQkJQ29uZmlybSgpIG9mZmVycyB0aGUgdXNlciBhIGRpYWxvZywgZnJvbSB3aGljaCBhIGNob2ljZSBjYW4gYmUKLQkJbWFkZS4gIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY2hvaWNlLiAgRm9yIHRoZSBmaXJzdAotCQljaG9pY2UgdGhpcyBpcyAxLgotCQlOb3RlOiBjb25maXJtKCkgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiBjb21waWxlZCB3aXRoIGRpYWxvZwotCQlzdXBwb3J0LCBzZWUgfCtkaWFsb2dfY29ufCBhbmQgfCtkaWFsb2dfZ3VpfC4KLQotCQl7bXNnfSBpcyBkaXNwbGF5ZWQgaW4gYSB8ZGlhbG9nfCB3aXRoIHtjaG9pY2VzfSBhcyB0aGUKLQkJYWx0ZXJuYXRpdmVzLiAgV2hlbiB7Y2hvaWNlc30gaXMgbWlzc2luZyBvciBlbXB0eSwgIiZPSyIgaXMKLQkJdXNlZCAoYW5kIHRyYW5zbGF0ZWQpLgotCQl7bXNnfSBpcyBhIFN0cmluZywgdXNlICdcbicgdG8gaW5jbHVkZSBhIG5ld2xpbmUuICBPbmx5IG9uCi0JCXNvbWUgc3lzdGVtcyB0aGUgc3RyaW5nIGlzIHdyYXBwZWQgd2hlbiBpdCBkb2Vzbid0IGZpdC4KLQotCQl7Y2hvaWNlc30gaXMgYSBTdHJpbmcsIHdpdGggdGhlIGluZGl2aWR1YWwgY2hvaWNlcyBzZXBhcmF0ZWQKLQkJYnkgJ1xuJywgZS5nLiA+Ci0JCQljb25maXJtKCJTYXZlIGNoYW5nZXM/IiwgIiZZZXNcbiZOb1xuJkNhbmNlbCIpCi08CQlUaGUgbGV0dGVyIGFmdGVyIHRoZSAnJicgaXMgdGhlIHNob3J0Y3V0IGtleSBmb3IgdGhhdCBjaG9pY2UuCi0JCVRodXMgeW91IGNhbiB0eXBlICdjJyB0byBzZWxlY3QgIkNhbmNlbCIuICBUaGUgc2hvcnRjdXQgZG9lcwotCQlub3QgbmVlZCB0byBiZSB0aGUgZmlyc3QgbGV0dGVyOiA+Ci0JCQljb25maXJtKCJmaWxlIGhhcyBiZWVuIG1vZGlmaWVkIiwgIiZTYXZlXG5TYXZlICZBbGwiKQotPAkJRm9yIHRoZSBjb25zb2xlLCB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggY2hvaWNlIGlzIHVzZWQgYXMKLQkJdGhlIGRlZmF1bHQgc2hvcnRjdXQga2V5LgotCi0JCVRoZSBvcHRpb25hbCB7ZGVmYXVsdH0gYXJndW1lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgY2hvaWNlCi0JCXRoYXQgaXMgbWFkZSBpZiB0aGUgdXNlciBoaXRzIDxDUj4uICBVc2UgMSB0byBtYWtlIHRoZSBmaXJzdAotCQljaG9pY2UgdGhlIGRlZmF1bHQgb25lLiAgVXNlIDAgdG8gbm90IHNldCBhIGRlZmF1bHQuICBJZgotCQl7ZGVmYXVsdH0gaXMgb21pdHRlZCwgMSBpcyB1c2VkLgotCi0JCVRoZSBvcHRpb25hbCB7dHlwZX0gYXJndW1lbnQgZ2l2ZXMgdGhlIHR5cGUgb2YgZGlhbG9nLiAgVGhpcwotCQlpcyBvbmx5IHVzZWQgZm9yIHRoZSBpY29uIG9mIHRoZSBHVEssIE1hYywgTW90aWYgYW5kIFdpbjMyCi0JCUdVSS4gIEl0IGNhbiBiZSBvbmUgb2YgdGhlc2UgdmFsdWVzOiAiRXJyb3IiLCAiUXVlc3Rpb24iLAotCQkiSW5mbyIsICJXYXJuaW5nIiBvciAiR2VuZXJpYyIuICBPbmx5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMKLQkJcmVsZXZhbnQuICBXaGVuIHt0eXBlfSBpcyBvbWl0dGVkLCAiR2VuZXJpYyIgaXMgdXNlZC4KLQotCQlJZiB0aGUgdXNlciBhYm9ydHMgdGhlIGRpYWxvZyBieSBwcmVzc2luZyA8RXNjPiwgQ1RSTC1DLAotCQlvciBhbm90aGVyIHZhbGlkIGludGVycnVwdCBrZXksIGNvbmZpcm0oKSByZXR1cm5zIDAuCi0KLQkJQW4gZXhhbXBsZTogPgotICAgOmxldCBjaG9pY2UgPSBjb25maXJtKCJXaGF0IGRvIHlvdSB3YW50PyIsICImQXBwbGVzXG4mT3Jhbmdlc1xuJkJhbmFuYXMiLCAyKQotICAgOmlmIGNob2ljZSA9PSAwCi0gICA6CWVjaG8gIm1ha2UgdXAgeW91ciBtaW5kISIKLSAgIDplbHNlaWYgY2hvaWNlID09IDMKLSAgIDoJZWNobyAidGFzdGVmdWwiCi0gICA6ZWxzZQotICAgOgllY2hvICJJIHByZWZlciBiYW5hbmFzIG15c2VsZi4iCi0gICA6ZW5kaWYKLTwJCUluIGEgR1VJIGRpYWxvZywgYnV0dG9ucyBhcmUgdXNlZC4gIFRoZSBsYXlvdXQgb2YgdGhlIGJ1dHRvbnMKLQkJZGVwZW5kcyBvbiB0aGUgJ3YnIGZsYWcgaW4gJ2d1aW9wdGlvbnMnLiAgSWYgaXQgaXMgaW5jbHVkZWQsCi0JCXRoZSBidXR0b25zIGFyZSBhbHdheXMgcHV0IHZlcnRpY2FsbHkuICBPdGhlcndpc2UsICBjb25maXJtKCkKLQkJdHJpZXMgdG8gcHV0IHRoZSBidXR0b25zIGluIG9uZSBob3Jpem9udGFsIGxpbmUuICBJZiB0aGV5Ci0JCWRvbid0IGZpdCwgYSB2ZXJ0aWNhbCBsYXlvdXQgaXMgdXNlZCBhbnl3YXkuICBGb3Igc29tZSBzeXN0ZW1zCi0JCXRoZSBob3Jpem9udGFsIGxheW91dCBpcyBhbHdheXMgdXNlZC4KLQogY2hfY2FucmVhZCh7aGFuZGxlfSkJCQkJCQkqY2hfY2FucmVhZCgpKgogCQlSZXR1cm4gbm9uLXplcm8gd2hlbiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCBmcm9tIHtoYW5kbGV9LgogCQl7aGFuZGxlfSBjYW4gYmUgYSBDaGFubmVsIG9yIGEgSm9iIHRoYXQgaGFzIGEgQ2hhbm5lbC4KQEAgLTMxOTYsNiArMzAyOSwxNzYgQEAKIAkJImVyciIuICBGb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSBlcnJvciBzdGF0dXM6ID4KIAkJCWNoX3N0YXR1cyhqb2IsIHsicGFydCI6ICJlcnIifSkKIDwKK2NoYW5nZW5yKCkJCQkJCQkqY2hhbmdlbnIoKSoKKwkJUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50IGNoYW5nZS4gIFRoaXMgaXMgdGhlIHNhbWUKKwkJbnVtYmVyIGFzIHdoYXQgaXMgZGlzcGxheWVkIHdpdGggfDp1bmRvbGlzdHwgYW5kIGNhbiBiZSB1c2VkCisJCXdpdGggdGhlIHw6dW5kb3wgY29tbWFuZC4KKwkJV2hlbiBhIGNoYW5nZSB3YXMgbWFkZSBpdCBpcyB0aGUgbnVtYmVyIG9mIHRoYXQgY2hhbmdlLiAgQWZ0ZXIKKwkJcmVkbyBpdCBpcyB0aGUgbnVtYmVyIG9mIHRoZSByZWRvbmUgY2hhbmdlLiAgQWZ0ZXIgdW5kbyBpdCBpcworCQlvbmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIHVuZG9uZSBjaGFuZ2UuCisKK2NoYXIybnIoe2V4cHJ9Wywge3V0Zjh9XSkJCQkJCSpjaGFyMm5yKCkqCisJCVJldHVybiBudW1iZXIgdmFsdWUgb2YgdGhlIGZpcnN0IGNoYXIgaW4ge2V4cHJ9LiAgRXhhbXBsZXM6ID4KKwkJCWNoYXIybnIoIiAiKQkJcmV0dXJucyAzMgorCQkJY2hhcjJucigiQUJDIikJCXJldHVybnMgNjUKKzwJCVdoZW4ge3V0Zjh9IGlzIG9taXR0ZWQgb3IgemVybywgdGhlIGN1cnJlbnQgJ2VuY29kaW5nJyBpcyB1c2VkLgorCQlFeGFtcGxlIGZvciAidXRmLTgiOiA+CisJCQljaGFyMm5yKCLhIikJCXJldHVybnMgMjI1CisJCQljaGFyMm5yKCLhIlswXSkJCXJldHVybnMgMTk1Cis8CQlXaXRoIHt1dGY4fSBzZXQgdG8gMSwgYWx3YXlzIHRyZWF0IGFzIHV0Zi04IGNoYXJhY3RlcnMuCisJCUEgY29tYmluaW5nIGNoYXJhY3RlciBpcyBhIHNlcGFyYXRlIGNoYXJhY3Rlci4KKwkJfG5yMmNoYXIoKXwgZG9lcyB0aGUgb3Bwb3NpdGUuCisKK2NpbmRlbnQoe2xudW19KQkJCQkJCSpjaW5kZW50KCkqCisJCUdldCB0aGUgYW1vdW50IG9mIGluZGVudCBmb3IgbGluZSB7bG51bX0gYWNjb3JkaW5nIHRoZSBDCisJCWluZGVudGluZyBydWxlcywgYXMgd2l0aCAnY2luZGVudCcuCisJCVRoZSBpbmRlbnQgaXMgY291bnRlZCBpbiBzcGFjZXMsIHRoZSB2YWx1ZSBvZiAndGFic3RvcCcgaXMKKwkJcmVsZXZhbnQuICB7bG51bX0gaXMgdXNlZCBqdXN0IGxpa2UgaW4gfGdldGxpbmUoKXwuCisJCVdoZW4ge2xudW19IGlzIGludmFsaWQgb3IgVmltIHdhcyBub3QgY29tcGlsZWQgdGhlIHwrY2luZGVudHwKKwkJZmVhdHVyZSwgLTEgaXMgcmV0dXJuZWQuCisJCVNlZSB8Qy1pbmRlbnRpbmd8LgorCitjbGVhcm1hdGNoZXMoKQkJCQkJCSpjbGVhcm1hdGNoZXMoKSoKKwkJQ2xlYXJzIGFsbCBtYXRjaGVzIHByZXZpb3VzbHkgZGVmaW5lZCBieSB8bWF0Y2hhZGQoKXwgYW5kIHRoZQorCQl8Om1hdGNofCBjb21tYW5kcy4KKworCQkJCQkJCSpjb2woKSoKK2NvbCh7ZXhwcn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBieXRlIGluZGV4IG9mIHRoZSBjb2x1bW4KKwkJcG9zaXRpb24gZ2l2ZW4gd2l0aCB7ZXhwcn0uICBUaGUgYWNjZXB0ZWQgcG9zaXRpb25zIGFyZToKKwkJICAgIC4JICAgIHRoZSBjdXJzb3IgcG9zaXRpb24KKwkJICAgICQJICAgIHRoZSBlbmQgb2YgdGhlIGN1cnNvciBsaW5lICh0aGUgcmVzdWx0IGlzIHRoZQorCQkJICAgIG51bWJlciBvZiBieXRlcyBpbiB0aGUgY3Vyc29yIGxpbmUgcGx1cyBvbmUpCisJCSAgICAneAkgICAgcG9zaXRpb24gb2YgbWFyayB4IChpZiB0aGUgbWFyayBpcyBub3Qgc2V0LCAwIGlzCisJCQkgICAgcmV0dXJuZWQpCisJCSAgICB2ICAgICAgIEluIFZpc3VhbCBtb2RlOiB0aGUgc3RhcnQgb2YgdGhlIFZpc3VhbCBhcmVhICh0aGUKKwkJCSAgICBjdXJzb3IgaXMgdGhlIGVuZCkuICBXaGVuIG5vdCBpbiBWaXN1YWwgbW9kZQorCQkJICAgIHJldHVybnMgdGhlIGN1cnNvciBwb3NpdGlvbi4gIERpZmZlcnMgZnJvbSB8Jzx8IGluCisJCQkgICAgdGhhdCBpdCdzIHVwZGF0ZWQgcmlnaHQgYXdheS4KKwkJQWRkaXRpb25hbGx5IHtleHByfSBjYW4gYmUgW2xudW0sIGNvbF06IGEgfExpc3R8IHdpdGggdGhlIGxpbmUKKwkJYW5kIGNvbHVtbiBudW1iZXIuIE1vc3QgdXNlZnVsIHdoZW4gdGhlIGNvbHVtbiBpcyAiJCIsIHRvIGdldAorCQl0aGUgbGFzdCBjb2x1bW4gb2YgYSBzcGVjaWZpYyBsaW5lLiAgV2hlbiAibG51bSIgb3IgImNvbCIgaXMKKwkJb3V0IG9mIHJhbmdlIHRoZW4gY29sKCkgcmV0dXJucyB6ZXJvLgorCQlUbyBnZXQgdGhlIGxpbmUgbnVtYmVyIHVzZSB8bGluZSgpfC4gIFRvIGdldCBib3RoIHVzZQorCQl8Z2V0cG9zKCl8LgorCQlGb3IgdGhlIHNjcmVlbiBjb2x1bW4gcG9zaXRpb24gdXNlIHx2aXJ0Y29sKCl8LgorCQlOb3RlIHRoYXQgb25seSBtYXJrcyBpbiB0aGUgY3VycmVudCBmaWxlIGNhbiBiZSB1c2VkLgorCQlFeGFtcGxlczogPgorCQkJY29sKCIuIikJCWNvbHVtbiBvZiBjdXJzb3IKKwkJCWNvbCgiJCIpCQlsZW5ndGggb2YgY3Vyc29yIGxpbmUgcGx1cyBvbmUKKwkJCWNvbCgiJ3QiKQkJY29sdW1uIG9mIG1hcmsgdAorCQkJY29sKCInIiAuIG1hcmtuYW1lKQljb2x1bW4gb2YgbWFyayBtYXJrbmFtZQorPAkJVGhlIGZpcnN0IGNvbHVtbiBpcyAxLiAgMCBpcyByZXR1cm5lZCBmb3IgYW4gZXJyb3IuCisJCUZvciBhbiB1cHBlcmNhc2UgbWFyayB0aGUgY29sdW1uIG1heSBhY3R1YWxseSBiZSBpbiBhbm90aGVyCisJCWJ1ZmZlci4KKwkJRm9yIHRoZSBjdXJzb3IgcG9zaXRpb24sIHdoZW4gJ3ZpcnR1YWxlZGl0JyBpcyBhY3RpdmUsIHRoZQorCQljb2x1bW4gaXMgb25lIGhpZ2hlciBpZiB0aGUgY3Vyc29yIGlzIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisJCWxpbmUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aGUgY29sdW1uIGluIEluc2VydCBtb2RlOiA+CisJCQk6aW1hcCA8RjI+IDxDLU8+OmxldCBzYXZlX3ZlID0gJnZlPENSPgorCQkJCVw8Qy1PPjpzZXQgdmU9YWxsPENSPgorCQkJCVw8Qy1PPjplY2hvIGNvbCgiLiIpIC4gIlxuIiA8QmFyPgorCQkJCVxsZXQgJnZlID0gc2F2ZV92ZTxDUj4KKzwKKworY29tcGxldGUoe3N0YXJ0Y29sfSwge21hdGNoZXN9KQkJCSpjb21wbGV0ZSgpKiAqRTc4NSoKKwkJU2V0IHRoZSBtYXRjaGVzIGZvciBJbnNlcnQgbW9kZSBjb21wbGV0aW9uLgorCQlDYW4gb25seSBiZSB1c2VkIGluIEluc2VydCBtb2RlLiAgWW91IG5lZWQgdG8gdXNlIGEgbWFwcGluZworCQl3aXRoIENUUkwtUiA9IChzZWUgfGlfQ1RSTC1SfCkuICBJdCBkb2VzIG5vdCB3b3JrIGFmdGVyIENUUkwtTworCQlvciB3aXRoIGFuIGV4cHJlc3Npb24gbWFwcGluZy4KKwkJe3N0YXJ0Y29sfSBpcyB0aGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGxpbmUgd2hlcmUgdGhlIGNvbXBsZXRlZAorCQl0ZXh0IHN0YXJ0LiAgVGhlIHRleHQgdXAgdG8gdGhlIGN1cnNvciBpcyB0aGUgb3JpZ2luYWwgdGV4dAorCQl0aGF0IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG1hdGNoZXMuICBVc2UgY29sKCcuJykgZm9yIGFuCisJCWVtcHR5IHN0cmluZy4gICJjb2woJy4nKSAtIDEiIHdpbGwgcmVwbGFjZSBvbmUgY2hhcmFjdGVyIGJ5IGEKKwkJbWF0Y2guCisJCXttYXRjaGVzfSBtdXN0IGJlIGEgfExpc3R8LiAgRWFjaCB8TGlzdHwgaXRlbSBpcyBvbmUgbWF0Y2guCisJCVNlZSB8Y29tcGxldGUtaXRlbXN8IGZvciB0aGUga2luZCBvZiBpdGVtcyB0aGF0IGFyZSBwb3NzaWJsZS4KKwkJTm90ZSB0aGF0IHRoZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24geW91IG5lZWQgdG8gYXZvaWQKKwkJaW5zZXJ0aW5nIGFueXRoaW5nIHRoYXQgd291bGQgY2F1c2UgY29tcGxldGlvbiB0byBzdG9wLgorCQlUaGUgbWF0Y2ggY2FuIGJlIHNlbGVjdGVkIHdpdGggQ1RSTC1OIGFuZCBDVFJMLVAgYXMgdXN1YWwgd2l0aAorCQlJbnNlcnQgbW9kZSBjb21wbGV0aW9uLiAgVGhlIHBvcHVwIG1lbnUgd2lsbCBhcHBlYXIgaWYKKwkJc3BlY2lmaWVkLCBzZWUgfGlucy1jb21wbGV0aW9uLW1lbnV8LgorCQlFeGFtcGxlOiA+CisJaW5vcmVtYXAgPEY1PiA8Qy1SPj1MaXN0TW9udGhzKCk8Q1I+CisKKwlmdW5jISBMaXN0TW9udGhzKCkKKwkgIGNhbGwgY29tcGxldGUoY29sKCcuJyksIFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsCisJCVwgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsCisJCVwgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSkKKwkgIHJldHVybiAnJworCWVuZGZ1bmMKKzwJCVRoaXMgaXNuJ3QgdmVyeSB1c2VmdWwsIGJ1dCBpdCBzaG93cyBob3cgaXQgd29ya3MuICBOb3RlIHRoYXQKKwkJYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIHRvIGF2b2lkIGEgemVybyBiZWluZyBpbnNlcnRlZC4KKworY29tcGxldGVfYWRkKHtleHByfSkJCQkJKmNvbXBsZXRlX2FkZCgpKgorCQlBZGQge2V4cHJ9IHRvIHRoZSBsaXN0IG9mIG1hdGNoZXMuICBPbmx5IHRvIGJlIHVzZWQgYnkgdGhlCisJCWZ1bmN0aW9uIHNwZWNpZmllZCB3aXRoIHRoZSAnY29tcGxldGVmdW5jJyBvcHRpb24uCisJCVJldHVybnMgMCBmb3IgZmFpbHVyZSAoZW1wdHkgc3RyaW5nIG9yIG91dCBvZiBtZW1vcnkpLAorCQkxIHdoZW4gdGhlIG1hdGNoIHdhcyBhZGRlZCwgMiB3aGVuIHRoZSBtYXRjaCB3YXMgYWxyZWFkeSBpbgorCQl0aGUgbGlzdC4KKwkJU2VlIHxjb21wbGV0ZS1mdW5jdGlvbnN8IGZvciBhbiBleHBsYW5hdGlvbiBvZiB7ZXhwcn0uICBJdCBpcworCQl0aGUgc2FtZSBhcyBvbmUgaXRlbSBpbiB0aGUgbGlzdCB0aGF0ICdvbW5pZnVuYycgd291bGQgcmV0dXJuLgorCitjb21wbGV0ZV9jaGVjaygpCQkJCSpjb21wbGV0ZV9jaGVjaygpKgorCQlDaGVjayBmb3IgYSBrZXkgdHlwZWQgd2hpbGUgbG9va2luZyBmb3IgY29tcGxldGlvbiBtYXRjaGVzLgorCQlUaGlzIGlzIHRvIGJlIHVzZWQgd2hlbiBsb29raW5nIGZvciBtYXRjaGVzIHRha2VzIHNvbWUgdGltZS4KKwkJUmV0dXJucyB8VFJVRXwgd2hlbiBzZWFyY2hpbmcgZm9yIG1hdGNoZXMgaXMgdG8gYmUgYWJvcnRlZCwKKwkJemVybyBvdGhlcndpc2UuCisJCU9ubHkgdG8gYmUgdXNlZCBieSB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIHdpdGggdGhlCisJCSdjb21wbGV0ZWZ1bmMnIG9wdGlvbi4KKworCQkJCQkJKmNvbmZpcm0oKSoKK2NvbmZpcm0oe21zZ30gWywge2Nob2ljZXN9IFssIHtkZWZhdWx0fSBbLCB7dHlwZX1dXV0pCisJCUNvbmZpcm0oKSBvZmZlcnMgdGhlIHVzZXIgYSBkaWFsb2csIGZyb20gd2hpY2ggYSBjaG9pY2UgY2FuIGJlCisJCW1hZGUuICBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGNob2ljZS4gIEZvciB0aGUgZmlyc3QKKwkJY2hvaWNlIHRoaXMgaXMgMS4KKwkJTm90ZTogY29uZmlybSgpIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gY29tcGlsZWQgd2l0aCBkaWFsb2cKKwkJc3VwcG9ydCwgc2VlIHwrZGlhbG9nX2NvbnwgYW5kIHwrZGlhbG9nX2d1aXwuCisKKwkJe21zZ30gaXMgZGlzcGxheWVkIGluIGEgfGRpYWxvZ3wgd2l0aCB7Y2hvaWNlc30gYXMgdGhlCisJCWFsdGVybmF0aXZlcy4gIFdoZW4ge2Nob2ljZXN9IGlzIG1pc3Npbmcgb3IgZW1wdHksICImT0siIGlzCisJCXVzZWQgKGFuZCB0cmFuc2xhdGVkKS4KKwkJe21zZ30gaXMgYSBTdHJpbmcsIHVzZSAnXG4nIHRvIGluY2x1ZGUgYSBuZXdsaW5lLiAgT25seSBvbgorCQlzb21lIHN5c3RlbXMgdGhlIHN0cmluZyBpcyB3cmFwcGVkIHdoZW4gaXQgZG9lc24ndCBmaXQuCisKKwkJe2Nob2ljZXN9IGlzIGEgU3RyaW5nLCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNob2ljZXMgc2VwYXJhdGVkCisJCWJ5ICdcbicsIGUuZy4gPgorCQkJY29uZmlybSgiU2F2ZSBjaGFuZ2VzPyIsICImWWVzXG4mTm9cbiZDYW5jZWwiKQorPAkJVGhlIGxldHRlciBhZnRlciB0aGUgJyYnIGlzIHRoZSBzaG9ydGN1dCBrZXkgZm9yIHRoYXQgY2hvaWNlLgorCQlUaHVzIHlvdSBjYW4gdHlwZSAnYycgdG8gc2VsZWN0ICJDYW5jZWwiLiAgVGhlIHNob3J0Y3V0IGRvZXMKKwkJbm90IG5lZWQgdG8gYmUgdGhlIGZpcnN0IGxldHRlcjogPgorCQkJY29uZmlybSgiZmlsZSBoYXMgYmVlbiBtb2RpZmllZCIsICImU2F2ZVxuU2F2ZSAmQWxsIikKKzwJCUZvciB0aGUgY29uc29sZSwgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIGNob2ljZSBpcyB1c2VkIGFzCisJCXRoZSBkZWZhdWx0IHNob3J0Y3V0IGtleS4KKworCQlUaGUgb3B0aW9uYWwge2RlZmF1bHR9IGFyZ3VtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIGNob2ljZQorCQl0aGF0IGlzIG1hZGUgaWYgdGhlIHVzZXIgaGl0cyA8Q1I+LiAgVXNlIDEgdG8gbWFrZSB0aGUgZmlyc3QKKwkJY2hvaWNlIHRoZSBkZWZhdWx0IG9uZS4gIFVzZSAwIHRvIG5vdCBzZXQgYSBkZWZhdWx0LiAgSWYKKwkJe2RlZmF1bHR9IGlzIG9taXR0ZWQsIDEgaXMgdXNlZC4KKworCQlUaGUgb3B0aW9uYWwge3R5cGV9IGFyZ3VtZW50IGdpdmVzIHRoZSB0eXBlIG9mIGRpYWxvZy4gIFRoaXMKKwkJaXMgb25seSB1c2VkIGZvciB0aGUgaWNvbiBvZiB0aGUgR1RLLCBNYWMsIE1vdGlmIGFuZCBXaW4zMgorCQlHVUkuICBJdCBjYW4gYmUgb25lIG9mIHRoZXNlIHZhbHVlczogIkVycm9yIiwgIlF1ZXN0aW9uIiwKKwkJIkluZm8iLCAiV2FybmluZyIgb3IgIkdlbmVyaWMiLiAgT25seSB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzCisJCXJlbGV2YW50LiAgV2hlbiB7dHlwZX0gaXMgb21pdHRlZCwgIkdlbmVyaWMiIGlzIHVzZWQuCisKKwkJSWYgdGhlIHVzZXIgYWJvcnRzIHRoZSBkaWFsb2cgYnkgcHJlc3NpbmcgPEVzYz4sIENUUkwtQywKKwkJb3IgYW5vdGhlciB2YWxpZCBpbnRlcnJ1cHQga2V5LCBjb25maXJtKCkgcmV0dXJucyAwLgorCisJCUFuIGV4YW1wbGU6ID4KKyAgIDpsZXQgY2hvaWNlID0gY29uZmlybSgiV2hhdCBkbyB5b3Ugd2FudD8iLCAiJkFwcGxlc1xuJk9yYW5nZXNcbiZCYW5hbmFzIiwgMikKKyAgIDppZiBjaG9pY2UgPT0gMAorICAgOgllY2hvICJtYWtlIHVwIHlvdXIgbWluZCEiCisgICA6ZWxzZWlmIGNob2ljZSA9PSAzCisgICA6CWVjaG8gInRhc3RlZnVsIgorICAgOmVsc2UKKyAgIDoJZWNobyAiSSBwcmVmZXIgYmFuYW5hcyBteXNlbGYuIgorICAgOmVuZGlmCis8CQlJbiBhIEdVSSBkaWFsb2csIGJ1dHRvbnMgYXJlIHVzZWQuICBUaGUgbGF5b3V0IG9mIHRoZSBidXR0b25zCisJCWRlcGVuZHMgb24gdGhlICd2JyBmbGFnIGluICdndWlvcHRpb25zJy4gIElmIGl0IGlzIGluY2x1ZGVkLAorCQl0aGUgYnV0dG9ucyBhcmUgYWx3YXlzIHB1dCB2ZXJ0aWNhbGx5LiAgT3RoZXJ3aXNlLCAgY29uZmlybSgpCisJCXRyaWVzIHRvIHB1dCB0aGUgYnV0dG9ucyBpbiBvbmUgaG9yaXpvbnRhbCBsaW5lLiAgSWYgdGhleQorCQlkb24ndCBmaXQsIGEgdmVydGljYWwgbGF5b3V0IGlzIHVzZWQgYW55d2F5LiAgRm9yIHNvbWUgc3lzdGVtcworCQl0aGUgaG9yaXpvbnRhbCBsYXlvdXQgaXMgYWx3YXlzIHVzZWQuCisKIAkJCQkJCQkqY29weSgpKgogY29weSh7ZXhwcn0pCU1ha2UgYSBjb3B5IG9mIHtleHByfS4gIEZvciBOdW1iZXJzIGFuZCBTdHJpbmdzIHRoaXMgaXNuJ3QKIAkJZGlmZmVyZW50IGZyb20gdXNpbmcge2V4cHJ9IGRpcmVjdGx5LgpAQCAtMzQ1Miw3ICszNDU1LDcgQEAKIAkJCSIiCQlubyBgOnNpbGVudGAgdXNlZAogCQkJInNpbGVudCIJYDpzaWxlbnRgIHVzZWQKIAkJCSJzaWxlbnQhIglgOnNpbGVudCFgIHVzZWQKLQkJVGhlIGRlZmF1bHQgaXMgJ3NpbGVudCcuICBOb3RlIHRoYXQgd2l0aCAic2lsZW50ISIsIHVubGlrZQorCQlUaGUgZGVmYXVsdCBpcyAic2lsZW50Ii4gIE5vdGUgdGhhdCB3aXRoICJzaWxlbnQhIiwgdW5saWtlCiAJCWA6cmVkaXJgLCBlcnJvciBtZXNzYWdlcyBhcmUgZHJvcHBlZC4gIFdoZW4gdXNpbmcgYW4gZXh0ZXJuYWwKIAkJY29tbWFuZCB0aGUgc2NyZWVuIG1heSBiZSBtZXNzZWQgdXAsIHVzZSBgc3lzdGVtKClgIGluc3RlYWQuCiAJCQkJCQkJKkU5MzAqCkBAIC00MDU0LDEwICs0MDU3LDEwIEBACiBnZXQoe2Z1bmN9LCB7d2hhdH0pCiAJCUdldCBhbiBpdGVtIHdpdGggZnJvbSBGdW5jcmVmIHtmdW5jfS4gIFBvc3NpYmxlIHZhbHVlcyBmb3IKIAkJe3doYXR9IGFyZToKLQkJCSduYW1lJwlUaGUgZnVuY3Rpb24gbmFtZQotCQkJJ2Z1bmMnCVRoZSBmdW5jdGlvbgotCQkJJ2RpY3QnCVRoZSBkaWN0aW9uYXJ5Ci0JCQknYXJncycJVGhlIGxpc3Qgd2l0aCBhcmd1bWVudHMKKwkJCSJuYW1lIglUaGUgZnVuY3Rpb24gbmFtZQorCQkJImZ1bmMiCVRoZSBmdW5jdGlvbgorCQkJImRpY3QiCVRoZSBkaWN0aW9uYXJ5CisJCQkiYXJncyIJVGhlIGxpc3Qgd2l0aCBhcmd1bWVudHMKIAogCQkJCQkJCSpnZXRidWZpbmZvKCkqCiBnZXRidWZpbmZvKFt7ZXhwcn1dKQpAQCAtNzczNSw3ICs3NzM4LDcgQEAKIAkJbWF5IGFwcGVhciwgdGhleSBnaXZlIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgdGhlIHRhZyBpcwogCQljb250YWluZWQgaW4uCiAKLQkJVGhlIGV4LWNvbW1hbmQgJ2NtZCcgY2FuIGJlIGVpdGhlciBhbiBleCBzZWFyY2ggcGF0dGVybiwgYQorCQlUaGUgZXgtY29tbWFuZCAiY21kIiBjYW4gYmUgZWl0aGVyIGFuIGV4IHNlYXJjaCBwYXR0ZXJuLCBhCiAJCWxpbmUgbnVtYmVyIG9yIGEgbGluZSBudW1iZXIgZm9sbG93ZWQgYnkgYSBieXRlIG51bWJlci4KIAogCQlJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgdGFncywgdGhlbiBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgo=