ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggZGMyNjBiOS4uYTBlNDQ2ZiAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgTWFyIDI2CisqZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgQXByIDA0CiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xNDEyLDcgKzE0MTIsNyBAQAogCiBTZWUgfGZ1bmN0aW9uLWxpc3R8IGZvciBhIGxpc3QgZ3JvdXBlZCBieSB3aGF0IHRoZSBmdW5jdGlvbiBpcyB1c2VkIGZvci4KIAotKFVzZSBDVFJMLV0gb24gdGhlIGZ1bmN0aW9uIG5hbWUgdG8ganVtcCB0byB0aGUgZnVsbCBleHBsYW5hdGlvbikKKyhVc2UgQ1RSTC1dIG9uIHRoZSBmdW5jdGlvbiBuYW1lIHRvIGp1bXAgdG8gdGhlIGZ1bGwgZXhwbGFuYXRpb24uKQogCiBVU0FHRQkJCQlSRVNVTFQJREVTQ1JJUFRJT04JfgogCkBAIC0xNjIwLDcgKzE2MjAsNyBAQAogCiBhZGQoe2xpc3R9LCB7ZXhwcn0pCQkJCQkqYWRkKCkqCiAJCUFwcGVuZCB0aGUgaXRlbSB7ZXhwcn0gdG8gTGlzdCB7bGlzdH0uICBSZXR1cm5zIHRoZSByZXN1bHRpbmcKLQkJTGlzdC4gRXhhbXBsZXM6ID4KKwkJTGlzdC4gIEV4YW1wbGVzOiA+CiAJCQk6bGV0IGFsaXN0ID0gYWRkKFsxLCAyLCAzXSwgaXRlbSkKIAkJCTpjYWxsIGFkZChteWxpc3QsICJ3b29kc3RvY2siKQogPAkJTm90ZSB0aGF0IHdoZW4ge2V4cHJ9IGlzIGEgTGlzdCBpdCBpcyBhcHBlbmRlZCBhcyBhIHNpbmdsZQpAQCAtMTgwOSw2ICsxODA5LDcgQEAKIDwJCVRoZSBjdXJyZW50ICdlbmNvZGluZycgaXMgdXNlZC4gIEV4YW1wbGUgZm9yICJ1dGYtOCI6ID4KIAkJCWNoYXIybnIoIuEiKQkJcmV0dXJucyAyMjUKIAkJCWNoYXIybnIoIuEiWzBdKQkJcmV0dXJucyAxOTUKKzwJCW5yMmNoYXIoKSBkb2VzIHRoZSBvcHBvc2l0ZS4KIAogY2luZGVudCh7bG51bX0pCQkJCQkJKmNpbmRlbnQoKSoKIAkJR2V0IHRoZSBhbW91bnQgb2YgaW5kZW50IGZvciBsaW5lIHtsbnVtfSBhY2NvcmRpbmcgdGhlIEMKQEAgLTI1NTEsMTAgKzI1NTIsMTAgQEAKIAogZ2V0cmVnKFt7cmVnbmFtZX1dKQkJCQkJKmdldHJlZygpKgogCQlUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLCB3aGljaCBpcyB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIKLQkJe3JlZ25hbWV9LiBFeGFtcGxlOiA+CisJCXtyZWduYW1lfS4gIEV4YW1wbGU6ID4KIAkJCTpsZXQgY2xpcHRleHQgPSBnZXRyZWcoJyonKQogPAkJZ2V0cmVnKCc9JykgcmV0dXJucyB0aGUgbGFzdCBldmFsdWF0ZWQgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24KLQkJcmVnaXN0ZXIuIChGb3IgdXNlIGluIG1hcHMpLgorCQlyZWdpc3Rlci4gIChGb3IgdXNlIGluIG1hcHMuKQogCQlJZiB7cmVnbmFtZX0gaXMgbm90IHNwZWNpZmllZCwgfHY6cmVnaXN0ZXJ8IGlzIHVzZWQuCiAKIApAQCAtMjY3Nyw3ICsyNjc4LDcgQEAKIDwJCVRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgfHNhbmRib3h8LgogCiBoaXN0ZGVsKHtoaXN0b3J5fSBbLCB7aXRlbX1dKQkJCQkqaGlzdGRlbCgpKgotCQlDbGVhciB7aGlzdG9yeX0sIGllLiBkZWxldGUgYWxsIGl0cyBlbnRyaWVzLiAgU2VlIHxoaXN0LW5hbWVzfAorCQlDbGVhciB7aGlzdG9yeX0sIGkuZS4gZGVsZXRlIGFsbCBpdHMgZW50cmllcy4gIFNlZSB8aGlzdC1uYW1lc3wKIAkJZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2Yge2hpc3Rvcnl9LgogCiAJCUlmIHRoZSBwYXJhbWV0ZXIge2l0ZW19IGlzIGdpdmVuIGFzIFN0cmluZywgdGhpcyBpcyBzZWVuCkBAIC0yNzUzLDcgKzI3NTQsNyBAQAogCiBob3N0bmFtZSgpCQkJCQkJKmhvc3RuYW1lKCkqCiAJCVRoZSByZXN1bHQgaXMgYSBTdHJpbmcsIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSBtYWNoaW5lIG9uCi0JCXdoaWNoIFZpbSBpcyBjdXJyZW50bHkgcnVubmluZy4gTWFjaGluZSBuYW1lcyBncmVhdGVyIHRoYW4KKwkJd2hpY2ggVmltIGlzIGN1cnJlbnRseSBydW5uaW5nLiAgTWFjaGluZSBuYW1lcyBncmVhdGVyIHRoYW4KIAkJMjU2IGNoYXJhY3RlcnMgbG9uZyBhcmUgdHJ1bmNhdGVkLgogCiBpY29udih7ZXhwcn0sIHtmcm9tfSwge3RvfSkJCQkJKmljb252KCkqCkBAIC0yODczLDcgKzI4NzQsNyBAQAogCQl7aWR4fS4gIElmIHtpZHh9IGlzIHplcm8gaXQgZ29lcyBiZWZvcmUgdGhlIGZpcnN0IGl0ZW0sIGp1c3QKIAkJbGlrZSBvbWl0dGluZyB7aWR4fS4gIEEgbmVnYXRpdmUge2lkeH0gaXMgYWxzbyBwb3NzaWJsZSwgc2VlCiAJCXxsaXN0LWluZGV4fC4gIC0xIGluc2VydHMganVzdCBiZWZvcmUgdGhlIGxhc3QgaXRlbS4KLQkJUmV0dXJucyB0aGUgcmVzdWx0aW5nIExpc3QuIEV4YW1wbGVzOiA+CisJCVJldHVybnMgdGhlIHJlc3VsdGluZyBMaXN0LiAgRXhhbXBsZXM6ID4KIAkJCTpsZXQgbXlsaXN0ID0gaW5zZXJ0KFsyLCAzLCA1XSwgMSkKIAkJCTpjYWxsIGluc2VydChteWxpc3QsIDQsIC0xKQogCQkJOmNhbGwgaW5zZXJ0KG15bGlzdCwgNiwgbGVuKG15bGlzdCkpCkBAIC0zMTMxLDcgKzMxMzIsNyBAQAogCQlJZiB7c3RhcnR9IGlzIGdpdmVuLCB0aGUgc2VhcmNoIHN0YXJ0cyBmcm9tIGJ5dGUgaW5kZXgKIAkJe3N0YXJ0fSBpbiBhIFN0cmluZyBvciBpdGVtIHtzdGFydH0gaW4gYSBMaXN0LgogCQlUaGUgcmVzdWx0LCBob3dldmVyLCBpcyBzdGlsbCB0aGUgaW5kZXggY291bnRlZCBmcm9tIHRoZQotCQlmaXJzdCBjaGFyYWN0ZXIvaXRlbS4gRXhhbXBsZTogPgorCQlmaXJzdCBjaGFyYWN0ZXIvaXRlbS4gIEV4YW1wbGU6ID4KIAkJCTplY2hvIG1hdGNoKCJ0ZXN0aW5nIiwgImluZyIsIDIpCiA8CQlyZXN1bHQgaXMgYWdhaW4gIjQiLiA+CiAJCQk6ZWNobyBtYXRjaCgidGVzdGluZyIsICJpbmciLCA0KQpAQCAtMzQwNSw3ICszNDA2LDcgQEAKIAkJCTpsZXQgc2VwZXJhdG9yID0gcmVwZWF0KCctJywgODApCiA8CQlXaGVuIHtjb3VudH0gaXMgemVybyBvciBuZWdhdGl2ZSB0aGUgcmVzdWx0IGlzIGVtcHR5LgogCQlXaGVuIHtleHByfSBpcyBhIExpc3QgdGhlIHJlc3VsdCBpcyB7ZXhwcn0gY29uY2F0ZW5hdGVkCi0JCXtjb3VudH0gdGltZXMuIEV4YW1wbGU6ID4KKwkJe2NvdW50fSB0aW1lcy4gIEV4YW1wbGU6ID4KIAkJCTpsZXQgbG9uZ2xpc3QgPSByZXBlYXQoWydhJywgJ2InXSwgMykKIDwJCVJlc3VsdHMgaW4gWydhJywgJ2InLCAnYScsICdiJywgJ2EnLCAnYiddLgogCkBAIC0zNTQ0LDcgKzM1NDUsNyBAQAogCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2NsaWVudHNlcnZlcnwgZmVhdHVyZX0KIAkJTm90ZToKIAkJVGhpcyBpZCBoYXMgdG8gYmUgc3RvcmVkIGJlZm9yZSB0aGUgbmV4dCBjb21tYW5kIGNhbiBiZQotCQlyZWNlaXZlZC4gSWUuIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgcmVjZWl2ZWQgY29tbWFuZCBhbmQKKwkJcmVjZWl2ZWQuICBJLmUuIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgcmVjZWl2ZWQgY29tbWFuZCBhbmQKIAkJYmVmb3JlIGNhbGxpbmcgYW55IGNvbW1hbmRzIHRoYXQgd2FpdHMgZm9yIGlucHV0LgogCQlTZWUgYWxzbyB8Y2xpZW50c2VydmVyfC4KIAkJRXhhbXBsZTogPgpAQCAtMzU4Nyw5ICszNTg4LDEwIEBACiAJCWxpbmUuCiAKIHNldGxpbmUoe2xudW19LCB7bGluZX0pCQkJCQkqc2V0bGluZSgpKgotCQlTZXQgbGluZSB7bG51bX0gb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIHtsaW5lfS4gIElmIHRoaXMKLQkJc3VjY2VlZHMsIDAgaXMgcmV0dXJuZWQuICBJZiB0aGlzIGZhaWxzIChtb3N0IGxpa2VseSBiZWNhdXNlCi0JCXtsbnVtfSBpcyBpbnZhbGlkKSAxIGlzIHJldHVybmVkLiAgRXhhbXBsZTogPgorCQlTZXQgbGluZSB7bG51bX0gb2YgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIHtsaW5lfS4KKwkJe2xudW19IGlzIHVzZWQgbGlrZSB3aXRoIHxnZXRsaW5lKCl8LgorCQlJZiB0aGlzIHN1Y2NlZWRzLCAwIGlzIHJldHVybmVkLiAgSWYgdGhpcyBmYWlscyAobW9zdCBsaWtlbHkKKwkJYmVjYXVzZSB7bG51bX0gaXMgaW52YWxpZCkgMSBpcyByZXR1cm5lZC4gIEV4YW1wbGU6ID4KIAkJCTpjYWxsIHNldGxpbmUoNSwgc3RyZnRpbWUoIiVjIikpCiA8CQlOb3RlOiBUaGUgJ1sgYW5kICddIG1hcmtzIGFyZSBub3Qgc2V0LgogCkBAIC0zNzE1LDcgKzM3MTcsOSBAQAogCQkJOmxldCB3b3JkcyA9IHNwbGl0KGdldGxpbmUoJy4nKSwgJ1xXXCsnKQogPAkJU2luY2UgZW1wdHkgc3RyaW5ncyBhcmUgbm90IGFkZGVkIHRoZSAiXCsiIGlzbid0IHJlcXVpcmVkIGJ1dAogCQlpdCBtYWtlcyB0aGUgZnVuY3Rpb24gd29yayBhIGJpdCBmYXN0ZXIuCi0JCVRoZSBvcHBvc2l0ZSBmdW5jdGlvbiBpcyB8am9pbigpfC4KKwkJVG8gc3BsaXQgYSBzdHJpbmcgaW4gaW5kaXZpZHVhbCBjaGFyYWN0ZXJzOiA+CisJCQk6Zm9yIGMgaW4gc3BsaXQobXlzdHJpbmcsICdcenMnKQorPAkJVGhlIG9wcG9zaXRlIGZ1bmN0aW9uIGlzIHxqb2luKCl8LgogCiAKIHN0cmZ0aW1lKHtmb3JtYXR9IFssIHt0aW1lfV0pCQkJCSpzdHJmdGltZSgpKgpAQCAtMzgwNiw3ICszODEwLDcgQEAKIAkJRm9yIHBhdHRlcm4gc2VhcmNoZXMgdXNlIHxtYXRjaCgpfC4KIAkJLTEgaXMgcmV0dXJuZWQgaWYgdGhlIHtuZWVkbGV9IGRvZXMgbm90IG9jY3VyIGluIHtoYXlzdGFja30uCiAJCUlmIHRoZSB7bmVlZGxlfSBpcyBlbXB0eSB0aGUgbGVuZ3RoIG9mIHtoYXlzdGFja30gaXMgcmV0dXJuZWQuCi0JCVNlZSBhbHNvIHxzdHJpZHgoKXwuIEV4YW1wbGVzOiA+CisJCVNlZSBhbHNvIHxzdHJpZHgoKXwuICBFeGFtcGxlczogPgogCQkgIDplY2hvIHN0cnJpZHgoImFuIGFuZ3J5IGFybWFkaWxsbyIsICJhbiIpCSAgICAgMwogPAkJICAJCQkJCSpzdHJyY2hyKCkqCiAJCVdoZW4gdXNlZCB3aXRoIGEgc2luZ2xlIGNoYXJhY3RlciBpdCB3b3JrcyBzaW1pbGFyIHRvIHRoZSBDCkBAIC0zOTQwLDcgKzM5NDQsNyBAQAogCQkJCQlkZWZpbmVkLgogCQkJY21kCQlFeCBjb21tYW5kIHVzZWQgdG8gbG9jYXRlIHRoZSB0YWcgaW4KIAkJCQkJdGhlIGZpbGUuCi0JCQlraW5kCQl0eXBlIG9mIHRoZSB0YWcuIFRoZSB2YWx1ZSBmb3IgdGhpcworCQkJa2luZAkJdHlwZSBvZiB0aGUgdGFnLiAgVGhlIHZhbHVlIGZvciB0aGlzCiAJCQkJCWVudHJ5IGRlcGVuZHMgb24gdGhlIGxhbmd1YWdlIHNwZWNpZmljCiAJCQkJCWtpbmQgdmFsdWVzIGdlbmVyYXRlZCBieSB0aGUgY3RhZ3MKIAkJCQkJdG9vbC4KQEAgLTQwNjgsNyArNDA3Miw3IEBACiAKIAkJCQkJCQkqd2luYnVmbnIoKSoKIHdpbmJ1Zm5yKHtucn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGJ1ZmZlcgotCQlhc3NvY2lhdGVkIHdpdGggd2luZG93IHtucn0uIFdoZW4ge25yfSBpcyB6ZXJvLCB0aGUgbnVtYmVyIG9mCisJCWFzc29jaWF0ZWQgd2l0aCB3aW5kb3cge25yfS4gIFdoZW4ge25yfSBpcyB6ZXJvLCB0aGUgbnVtYmVyIG9mCiAJCXRoZSBidWZmZXIgaW4gdGhlIGN1cnJlbnQgd2luZG93IGlzIHJldHVybmVkLiAgV2hlbiB3aW5kb3cKIAkJe25yfSBkb2Vzbid0IGV4aXN0LCAtMSBpcyByZXR1cm5lZC4KIAkJRXhhbXBsZTogPgpAQCAtNDY1Nyw3ICs0NjYxLDcgQEAKIHdoZXJlICJlbmRfb2Zfd29yZCIgaXMgZWl0aGVyICJ2ZXJiIiBvciAiamVjdGl2ZSIuCiAKIEhvd2V2ZXIsIHRoZSBleHByZXNzaW9uIGluc2lkZSB0aGUgYnJhY2VzIG11c3QgZXZhbHVhdGUgdG8gYSB2YWxpZCBzaW5nbGUKLXZhcmlhYmxlIG5hbWUuIGUuZy4gdGhpcyBpcyBpbnZhbGlkOiA+Cit2YXJpYWJsZSBuYW1lLCBlLmcuIHRoaXMgaXMgaW52YWxpZDogPgogCTpsZXQgZm9vPSdhICsgYicKIAk6ZWNobyBje2Zvb31kCiAuLiBzaW5jZSB0aGUgcmVzdWx0IG9mIGV4cGFuc2lvbiBpcyAiY2EgKyBiZCIsIHdoaWNoIGlzIG5vdCBhIHZhcmlhYmxlIG5hbWUuCg==