From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiri Zupka Subject: Re: [KVM-AUTOTEST][PATCH 1/2][virtio-console] Add subtest layer and prepare to add new tests. Date: Tue, 30 Nov 2010 05:17:24 -0500 (EST) Message-ID: <1963186887.4421291112244197.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> References: <866317693.3411291111700248.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: autotest@test.kernel.org, kvm@vger.kernel.org, kvm-autotest@redhat.com To: Lucas Meneghel Rodrigues Return-path: In-Reply-To: <866317693.3411291111700248.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org Ci0tLS0tICJMdWNhcyBNZW5lZ2hlbCBSb2RyaWd1ZXMiIDxsbXJAcmVkaGF0LmNvbT4gd3JvdGU6 Cgo+IE9uIE1vbiwgMjAxMC0xMS0yMiBhdCAxNDozOCArMDEwMCwgSmnFmcOtIMW9dXBrYSB3cm90 ZTogCj4gPiBUaGlzIHBhdGNoIGNoYW5nZXMgc3RydWN0dXJlIG9mIHRoZSB2aXJ0aW9fY29uc29s ZSB0ZXN0IGFuZAo+ID4gcHJlcGFyZXMgdGhpcyB0ZXN0IGZvciBzaW1wbGVyIHBvcnRpbmcgb2Yg YW5vdGhlciByZXF1aXJlZCB0ZXN0cy4KPiA+IAo+ID4gSXQgY3JlYXRlcyBhIG5ldyBsYXllciBm b3IgcnVubmluZyB0aGUgZWxlbWVudGFyeSB0ZXN0cyBhbGxvd2luZyAKPiA+IHRoZW0gdG8gbm9u LWNyaXRpY2FsbHkgZmFpbCBhbmQgbGV0IHRoZSB0ZXN0IHRvIGZpbmlzaCB0aGUgd2hvbGUKPiB0 ZXN0IGxvb3AuCj4gCj4gXiBJIG11c3Qgc2F5IEkgcmVhbGx5IGxpa2VkIHRoZSBpZGVhLiBXZSBz aG91bGQgdHVybiB0aGlzIGludG8KPiBmcmFtZXdvcmsKPiBpbmZyYXN0cnVjdHVyZSB0byBhY2Nv bW9kYXRlIHNvbWUgcmVxdWVzdHMgSSd2ZSBnb3QuIFB1dHRpbmcgaXQgb24gbXkKPiB0b2RvIGxp c3QuCgpUaGFuayB5b3UuIEkgY2FuIHByZXBhcmUgcGF0Y2ggZm9yIGF1dG90ZXN0IGlmIHlvdSBk b24ndCB3YW50IGRvIG11Y2ggCmNoYW5nZXMgaW4gc3VidGVzdCBsYXllci4gU3VidGVzdCBsYXll ciBpcyBwcmVwYXJlZCBmb3Igc2VwYXJhdGUgZnJvbSAKdmlydGlvX3Rlc3QgYW5kIHRoZXJlIHNo b3VsZCd0IGJlIGFueSBwcm9ibGVtIHdpdGggc2VwYXJhdGUuIAoKRG8geW91IHdhbnQgYWRkIHN1 YnRlc3QgbGF5ZXIgdG8ga3ZtX2F1dG90ZXN0IG9yIHRvIGF1dG90ZXN0IGNsaWVudCBwYXJ0PyAK Cj4gCj4gTWVhbndoaWxlLCBJJ3ZlIHJlc3BpbiB0aGUgcGF0Y2hlcyB5b3UgZ3V5cyBzZW50IGFu ZCBhcHBsaWVkOgo+IAo+IGh0dHA6Ly9hdXRvdGVzdC5rZXJuZWwub3JnL2NoYW5nZXNldC80OTQ5 Cj4gaHR0cDovL2F1dG90ZXN0Lmtlcm5lbC5vcmcvY2hhbmdlc2V0LzQ5NTAKPiAKPiBUaGFua3Mh Cj4gCj4gPiBUZXN0cyBhcmUgZGl2aWRlZCBpbnRvIHBhcnRzIGJ1dCB0aGVpciBiZWhhdmlvciBp cyBwcmVzZXJ2ZWQuCj4gPiBUaGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBzb21lIGNvZGUgY29ycmVj dGlvbi4KPiA+IAo+ID4gQ2xhc3Mgd2hpY2ggbWFrZXMgc3RhdGlzdGljIGFuZCBzdGFydCBzdWJ0 ZXN0IGlzIG5hbWVkIFN1YlRlc3QuCj4gPiBVc2FnZToKPiA+ICAgZGVmIHRlc3RfZnVuYyhwYXJt YTEsIHBhcmFtMik6Cj4gPiAgICAgaWYgc29tZXRoaW5rOgo+ID4gICAgICAgICByYWlzZSBlcnJv ci5UZXN0RmFpbCgiU29tZXRoaW5rIikKPiA+IAo+ID4gICBkZWYgY2xlYW5fZnVuYyhwYXJhbTEs IHBhcmFtMiwgcGFyYW0zKToKPiA+ICAgICBjbGVhbgo+ID4gCj4gPiAgIHRlc3QgPSBTdWJUZXN0 KCkKPiA+IAo+ID4gICAjc2V0IGNsZWFudXAgZnVuY3Rpb24gd2hlbiBzdWJ0ZXN0IGNyYXNoLgo+ ID4gICB0ZXN0LnNldF9jbGVhbnVwX2Z1bmMoY2xlYW5fZnVuYywgW3BhcmFtMSwgcGFyYW0yLCAu Ll0pCj4gPiAKPiA+ICAgI3N0YXJ0IHRlc3QKPiA+ICAgdGVzdC5kb190ZXN0KHRlc3RfZnVuYyxb cGFyYW1zLi5dKQo+ID4gICB0ZXN0LmRvX3Rlc3QodGVzdF9mdW5jLFtwYXJhbXMuLl0sdHJ1ZSkK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXiAtIHRlc3QgaXMgY3Jp dGljYWwuCj4gPiAKPiA+ICAgI3JldHVybiBzdGF0aXN0aWMKPiA+ICAgcHJpbnQgdGVzdC5nZXRf dGV4dF9yZXN1bHQoKQo+ID4gCj4gPiBpZiBhbnkgbm9uLWNyaXRpY2FsIHN1YnRlc3RzIGZhaWxz IHRoZSBwYXJ0aWN1bGFyIHRlc3QgZmluaXNoZXMgYW5kCj4gY2FsbHMKPiA+IHRoZSBjbGVhbi11 cCBmdW5jdGlvbi4gVGhlbiB0aGUgdGVzdC1sb29wIGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0Cj4g PiBlbGVtZW50YXJ5IHN1YnRlc3QuIEFsdGhvdWdoIFN1YlRlc3QgY2xhc3MgZGlzcGxheXMgaW5m b3JtYXRpb24KPiA+IGFib3V0IHRoZSBzdWJ0ZXN0IHByb2JsZW0uIElmIHRoZSBjbGVhbi11cCBm dW5jdGlvbiBhbHNvIGZhaWxlZCBvcgo+ID4gc3VidGVzdCB3YXMgY3JpdGljYWwsIHRoZW4gdGhl IHdob2xlIHRlc3Qgd2lsbCBiZSBpbnRlcnJ1cHRlZC4KPiA+IAo+ID4gQXQgdGhlIGVuZCBvZiB0 aGUgdGVzdC1sb29wIGl0IHN1bW1hcml6ZXMgdGhlIHBhc3NlZC9mYWlsZWQgdGVzdHMKPiBhbmQK PiA+IHByaW50IG91dCB0aGUgcG9zc2libGUgc3VidGVzdCB0cmFjZS1iYWNrcy4KPiA+IC0tLQo+ ID4gIGNsaWVudC90ZXN0cy9rdm0vc2NyaXB0cy92aXJ0aW9fZ3Vlc3QucHkgfCAgMTEzICsrKy0t Cj4gPiAgY2xpZW50L3Rlc3RzL2t2bS90ZXN0cy92aXJ0aW9fY29uc29sZS5weSB8ICA5NDEKPiAr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDYzOCBp bnNlcnRpb25zKCspLCA0MTYgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9jbGll bnQvdGVzdHMva3ZtL3NjcmlwdHMvdmlydGlvX2d1ZXN0LnB5Cj4gYi9jbGllbnQvdGVzdHMva3Zt L3NjcmlwdHMvdmlydGlvX2d1ZXN0LnB5Cj4gPiBpbmRleCA0ODYyZWYyLi44NzcyN2M3IDEwMDc1 NQo+ID4gLS0tIGEvY2xpZW50L3Rlc3RzL2t2bS9zY3JpcHRzL3ZpcnRpb19ndWVzdC5weQo+ID4g KysrIGIvY2xpZW50L3Rlc3RzL2t2bS9zY3JpcHRzL3ZpcnRpb19ndWVzdC5weQo+ID4gQEAgLTMs MzUgKzMsMjMgQEAKPiA+ICAiIiIKPiA+ICBBdXhpbGlhcnkgc2NyaXB0IHVzZWQgdG8gc2VuZCBk YXRhIGJldHdlZW4gcG9ydHMgb24gZ3Vlc3RzLgo+ID4gIAo+ID4gLUBjb3B5cmlnaHQ6IDIwMDgt MjAwOSBSZWQgSGF0IEluYy4KPiA+ICtAY29weXJpZ2h0OiAyMDEwIFJlZCBIYXQsIEluYy4KPiA+ ICBAYXV0aG9yOiBKaXJpIFp1cGthIChqenVwa2FAcmVkaGF0LmNvbSkKPiA+ICBAYXV0aG9yOiBM dWthcyBEb2t0b3IgKGxkb2t0b3JAcmVkaGF0LmNvbSkKPiA+ICAiIiIKPiA+IC0jZnJvbSBfcHlk ZXZfU2ltcGxlWE1MUlBDU2VydmVyIGltcG9ydCBmY250bAo+ID4gLQo+ID4gLSIiIgo+ID4gLVRP RE86Cj4gPiAtdmlydC5pbml0KFtjb25zb2xlc10pICAgIyBzeXNmcywgdWRldiwgT0sKPiA+IC12 aXJ0Lm9wZW4obmFtZSkKPiA+IC12aXJ0LmNsb3NlKG5hbWUpCj4gPiAtdmlydC5wb2xsKG5hbWUs IGV2ZW50bWFzaywgdGltZW91dCkgIyBwb2xsLnJlZ2lzdGVyKCksCj4gcG9sbC5wb2xsKCksCj4g PiAtcmV0dXJuIGV2ZW50Cj4gPiAtdmlydC5zZW5kKG5hbWUsIGxlbmd0aCkgIyBob3N0IGRpc2Nv bm5lY3RlZAo+ID4gLXZpcnQucmVjdihuYW1lLCBsZW5ndGgpICMgaG9zdCBkaXNjb25uZWN0ZWQK PiA+IC12aXJ0LmJsb2NraW5nKG5hbWUsIHRydWUpICAgIyB0cnVlID0gYmxvY2tpbmcsIGZhbHNl ID0gbm9uYmxvY2tpbmcKPiA+IC12aXJ0Lmxvb3BiYWNrKGluX25hbWVzLCBvdXRfbmFtZXMsIHR5 cGU9Ik5vbmUiKSAgIyB1c2Ugc2VsZWN0L3BvbGwKPiA+IC0iIiIKPiA+IC0KPiA+ICBpbXBvcnQg dGhyZWFkaW5nCj4gPiAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAo+ID4gLWltcG9ydCBv cywgdGltZSwgc2VsZWN0LCByZSwgcmFuZG9tLCBzeXMsIGFycmF5LCBmY250bCwgYXJyYXksCj4g c3VicHJvY2Vzcwo+ID4gK2ltcG9ydCBvcywgdGltZSwgc2VsZWN0LCByZSwgcmFuZG9tLCBzeXMs IGFycmF5Cj4gPiAraW1wb3J0IGZjbnRsLCBhcnJheSwgc3VicHJvY2VzcywgdHJhY2ViYWNrCj4g PiAgCj4gPiAgREVCVUdQQVRIID0gIi9zeXMva2VybmVsL2RlYnVnIgo+ID4gIFNZU0ZTUEFUSCA9 ICIvc3lzL2NsYXNzL3ZpcnRpby1wb3J0cy8iCj4gPiAgCj4gPiAKPiA+IC1jbGFzcyB2aXJ0aW9f Z3Vlc3QoKToKPiA+IC0KPiA+ICtjbGFzcyBWaXJ0aW9HdWVzdDoKPiA+ICsgICAgIiIiCj4gPiAr ICAgIFRlc3QgdG9vbHMgb2YgdmlydGlvX3BvcnRzLgo+ID4gKyAgICAiIiIKPiA+ICAgICAgTE9P UF9OT05FID0gMAo+ID4gICAgICBMT09QX1BPTEwgPSAxCj4gPiAgICAgIExPT1BfU0VMRUNUID0g Mgo+ID4gQEAgLTEyNSw3ICsxMTMsNyBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiA+ICAgICAg ICAgIHByaW50ICJQQVNTOiBJbml0IGFuZCBjaGVjayB2aXJ0aW9jb25zb2xlIGZpbGVzIGluCj4g c3lzdGVtLiIKPiA+ICAKPiA+IAo+ID4gLSAgICBjbGFzcyBzd2l0Y2goVGhyZWFkKToKPiA+ICsg ICAgY2xhc3MgU3dpdGNoKFRocmVhZCk6Cj4gPiAgICAgICAgICAiIiIKPiA+ICAgICAgICAgIFRo cmVhZCB0aGF0IHNlbmRzIGRhdGEgYmV0d2VlbiBwb3J0cy4KPiA+ICAgICAgICAgICIiIgo+ID4g QEAgLTEzNyw3ICsxMjUsNyBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiA+ICAgICAgICAgICAg ICBAcGFyYW0gbWV0aG9kOiBNZXRob2Qgb2YgcmVhZC93cml0ZSBhY2Nlc3MuCj4gPiAgICAgICAg ICAgICAgQHBhcmFtIGNhY2hlc2l6ZTogQmxvY2sgdG8gcmVjZWl2ZSBhbmQgc2VuZC4KPiA+ICAg ICAgICAgICAgICAiIiIKPiA+IC0gICAgICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKPiA+ ICsgICAgICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iU3dpdGNoIikKPiA+ICAK PiA+ICAgICAgICAgICAgICBzZWxmLmluX2ZpbGVzID0gaW5fZmlsZXMKPiA+ICAgICAgICAgICAg ICBzZWxmLm91dF9maWxlcyA9IG91dF9maWxlcwo+ID4gQEAgLTIxMSwxNSArMTk5LDE1IEBAIGNs YXNzIHZpcnRpb19ndWVzdCgpOgo+ID4gIAo+ID4gCj4gPiAgICAgICAgICBkZWYgcnVuKHNlbGYp Ogo+ID4gLSAgICAgICAgICAgIGlmIChzZWxmLm1ldGhvZCA9PSB2aXJ0aW9fZ3Vlc3QuTE9PUF9Q T0xMKToKPiA+ICsgICAgICAgICAgICBpZiAoc2VsZi5tZXRob2QgPT0gVmlydGlvR3Vlc3QuTE9P UF9QT0xMKToKPiA+ICAgICAgICAgICAgICAgICAgc2VsZi5fcG9sbF9tb2RlKCkKPiA+IC0gICAg ICAgICAgICBlbGlmIChzZWxmLm1ldGhvZCA9PSB2aXJ0aW9fZ3Vlc3QuTE9PUF9TRUxFQ1QpOgo+ ID4gKyAgICAgICAgICAgIGVsaWYgKHNlbGYubWV0aG9kID09IFZpcnRpb0d1ZXN0LkxPT1BfU0VM RUNUKToKPiA+ICAgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0X21vZGUoKQo+ID4gICAgICAg ICAgICAgIGVsc2U6Cj4gPiAgICAgICAgICAgICAgICAgIHNlbGYuX25vbmVfbW9kZSgpCj4gPiAg Cj4gPiAKPiA+IC0gICAgY2xhc3Mgc2VuZGVyKFRocmVhZCk6Cj4gPiArICAgIGNsYXNzIFNlbmRl cihUaHJlYWQpOgo+ID4gICAgICAgICAgIiIiCj4gPiAgICAgICAgICBDcmVhdGVzIGEgdGhyZWFk IHdoaWNoIHNlbmRzIHJhbmRvbSBibG9ja3Mgb2YgZGF0YSB0byBkc3QKPiBwb3J0Lgo+ID4gICAg ICAgICAgIiIiCj4gPiBAQCAtMjI4LDcgKzIxNiw3IEBAIGNsYXNzIHZpcnRpb19ndWVzdCgpOgo+ ID4gICAgICAgICAgICAgIEBwYXJhbSBwb3J0OiBEZXN0aW5hdGlvbiBwb3J0Cj4gPiAgICAgICAg ICAgICAgQHBhcmFtIGxlbmd0aDogTGVuZ3RoIG9mIHRoZSByYW5kb20gZGF0YSBibG9jawo+ID4g ICAgICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQo+ ID4gKyAgICAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJTZW5kZXIiKQo+ID4g ICAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKPiA+ICAgICAgICAgICAgICBzZWxmLmV4aXRf dGhyZWFkID0gZXZlbnQKPiA+ICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBhcnJheS5hcnJheSgn TCcpCj4gPiBAQCAtMjk2LDcgKzI4NCwyMCBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiA+ICAg ICAgICAgIGlmIChtYXNrWzBdWzFdICYgZXhwZWN0ZWQpID09IGV4cGVjdGVkOgo+ID4gICAgICAg ICAgICAgIHByaW50ICJQQVNTOiBFdmVudHM6ICIgKyBzdHIKPiA+ICAgICAgICAgIGVsc2U6Cj4g PiAtICAgICAgICAgICAgcHJpbnQgIkZBSUw6IEV2ZW50czogIiArIHN0cgo+ID4gKyAgICAgICAg ICAgIGVzdHIgPSAiIgo+ID4gKyAgICAgICAgICAgIGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xM SU4pOgo+ID4gKyAgICAgICAgICAgICAgICBlc3RyICs9ICJJTiAiCj4gPiArICAgICAgICAgICAg aWYgKGV4cGVjdGVkICYgc2VsZWN0LlBPTExQUkkpOgo+ID4gKyAgICAgICAgICAgICAgICBlc3Ry ICs9ICJQUkkgSU4gIgo+ID4gKyAgICAgICAgICAgIGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xM T1VUKToKPiA+ICsgICAgICAgICAgICAgICAgZXN0ciArPSAiT1VUICIKPiA+ICsgICAgICAgICAg ICBpZiAoZXhwZWN0ZWQgJiBzZWxlY3QuUE9MTEVSUik6Cj4gPiArICAgICAgICAgICAgICAgIGVz dHIgKz0gIkVSUiAiCj4gPiArICAgICAgICAgICAgaWYgKGV4cGVjdGVkICYgc2VsZWN0LlBPTExI VVApOgo+ID4gKyAgICAgICAgICAgICAgICBlc3RyICs9ICJIVVAgIgo+ID4gKyAgICAgICAgICAg IGlmIChleHBlY3RlZCAmIHNlbGVjdC5QT0xMTVNHKToKPiA+ICsgICAgICAgICAgICAgICAgZXN0 ciArPSAiTVNHICIKPiA+ICsgICAgICAgICAgICBwcmludCAiRkFJTDogRXZlbnRzOiAiICsgc3Ry ICsgIiAgRXhwZWN0ZWQ6ICIgKyBlc3RyCj4gPiAgCj4gPiAKPiA+ICAgICAgZGVmIGJsb2NraW5n KHNlbGYsIHBvcnQsIG1vZGU9RmFsc2UpOgo+ID4gQEAgLTMwNiw4ICszMDcsNyBAQCBjbGFzcyB2 aXJ0aW9fZ3Vlc3QoKToKPiA+ICAgICAgICAgIEBwYXJhbSBwb3J0OiBwb3J0IHRvIHNldCBtb2Rl Cj4gPiAgICAgICAgICBAcGFyYW0gbW9kZTogRmFsc2UgdG8gc2V0IG5vbmJsb2NrIG1vZGUsIFRy dWUgZm9yIGJsb2NrCj4gbW9kZQo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICBwYXRoID0g c2VsZi5wb3J0c1twb3J0XVsicGF0aCJdCj4gPiAtICAgICAgICBmZCA9IHNlbGYuZmlsZXNbcGF0 aF0KPiA+ICsgICAgICAgIGZkID0gc2VsZi5fb3BlbihbcG9ydF0pWzBdCj4gPiAgCj4gPiAgICAg ICAgICB0cnk6Cj4gPiAgICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9H RVRGTCkKPiA+IEBAIC0zMzYsMjQgKzMzNiwyOCBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiA+ ICAgICAgICAgICAgICBpZiBwYXRoIGluIHNlbGYuZmlsZXMua2V5cygpOgo+ID4gICAgICAgICAg ICAgICAgICBkZXNjcmlwdG9yID0gc2VsZi5maWxlc1twYXRoXQo+ID4gICAgICAgICAgICAgICAg ICBkZWwgc2VsZi5maWxlc1twYXRoXQo+ID4gLSAgICAgICAgdHJ5Ogo+ID4gLSAgICAgICAgICAg IG9zLmNsb3NlKGRlc2NyaXB0b3IpCj4gPiAtICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGlu c3Q6Cj4gPiAtICAgICAgICAgICAgcHJpbnQgIkZBSUw6IENsb3NpbmcgdGhlIGZpbGU6ICIgKyBz dHIoaW5zdCkKPiA+IC0gICAgICAgICAgICByZXR1cm4KPiA+ICsgICAgICAgICAgICBpZiBkZXNj cmlwdG9yICE9IE5vbmU6Cj4gPiArICAgICAgICAgICAgICAgIHRyeToKPiA+ICsgICAgICAgICAg ICAgICAgICAgIG9zLmNsb3NlKGRlc2NyaXB0b3IpCj4gPiArICAgICAgICAgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb24gYXMgaW5zdDoKPiA+ICsgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlM OiBDbG9zaW5nIHRoZSBmaWxlOiAiICsgc3RyKGluc3QpCj4gPiArICAgICAgICAgICAgICAgICAg ICByZXR1cm4KPiA+ICAgICAgICAgIHByaW50ICJQQVNTOiBDbG9zZSIKPiA+ICAKPiA+IAo+ID4g LSAgICBkZWYgb3BlbihzZWxmLCBpbl9maWxlcyk6Cj4gPiArICAgIGRlZiBvcGVuKHNlbGYsIGlu X2ZpbGUpOgo+ID4gICAgICAgICAgIiIiCj4gPiAgICAgICAgICBEaXJlY3Qgb3BlbiBkZXZpY2Vz Lgo+ID4gIAo+ID4gLSAgICAgICAgQHBhcmFtIGluX2ZpbGVzOiBBcnJheSBvZiBmaWxlcy4KPiA+ ICsgICAgICAgIEBwYXJhbSBpbl9maWxlOiBBcnJheSBvZiBmaWxlcy4KPiA+ICAgICAgICAgIEBy ZXR1cm46IEFycmF5IG9mIGRlc2NyaXB0b3JzLgo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAg ICBuYW1lID0gc2VsZi5wb3J0c1tpbl9maWxlc11bInBhdGgiXQo+ID4gKyAgICAgICAgbmFtZSA9 IHNlbGYucG9ydHNbaW5fZmlsZV1bInBhdGgiXQo+ID4gICAgICAgICAgdHJ5Ogo+ID4gICAgICAg ICAgICAgIHNlbGYuZmlsZXNbbmFtZV0gPSBvcy5vcGVuKG5hbWUsIG9zLk9fUkRXUikKPiA+ICsg ICAgICAgICAgICBpZiAoc2VsZi5wb3J0c1tpbl9maWxlXVsiaXNfY29uc29sZSJdID09ICJ5ZXMi KToKPiA+ICsgICAgICAgICAgICAgICAgcHJpbnQgb3Muc3lzdGVtKCJzdHR5IC1GICVzIHJhdyAt ZWNobyIgJSAobmFtZSkpCj4gPiArICAgICAgICAgICAgICAgIHByaW50IG9zLnN5c3RlbSgic3R0 eSAtRiAlcyAtYSIgJSAobmFtZSkpCj4gPiAgICAgICAgICAgICAgcHJpbnQgIlBBU1M6IE9wZW4g YWxsIGZpbGxlcyBjb3JyZWN0bHkuIgo+ID4gICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBp bnN0Ogo+ID4gICAgICAgICAgICAgIHByaW50ICIlc1xuRkFJTDogRmFpbGVkIG9wZW4gZmlsZSAl cyIgJSAoc3RyKGluc3QpLAo+IG5hbWUpCj4gPiBAQCAtMzc0LDcgKzM3OCw3IEBAIGNsYXNzIHZp cnRpb19ndWVzdCgpOgo+ID4gICAgICAgICAgaW5fZiA9IHNlbGYuX29wZW4oaW5fZmlsZXMpCj4g PiAgICAgICAgICBvdXRfZiA9IHNlbGYuX29wZW4ob3V0X2ZpbGVzKQo+ID4gIAo+ID4gLSAgICAg ICAgcyA9IHNlbGYuc3dpdGNoKGluX2YsIG91dF9mLCBzZWxmLmV4aXRfdGhyZWFkLCBjYWNoZXNp emUsCj4gbW9kZSkKPiA+ICsgICAgICAgIHMgPSBzZWxmLlN3aXRjaChpbl9mLCBvdXRfZiwgc2Vs Zi5leGl0X3RocmVhZCwgY2FjaGVzaXplLAo+IG1vZGUpCj4gPiAgICAgICAgICBzLnN0YXJ0KCkK PiA+ICAgICAgICAgIHNlbGYudGhyZWFkcy5hcHBlbmQocykKPiA+ICAgICAgICAgIHByaW50ICJQ QVNTOiBTdGFydCBzd2l0Y2giCj4gPiBAQCAtNDEyLDcgKzQxNiw3IEBAIGNsYXNzIHZpcnRpb19n dWVzdCgpOgo+ID4gICAgICAgICAgc2VsZi5wb3J0cyA9IHNlbGYuX2dldF9wb3J0X3N0YXR1cygp Cj4gPiAgICAgICAgICBpbl9mID0gc2VsZi5fb3BlbihbcG9ydF0pCj4gPiAgCj4gPiAtICAgICAg ICBzZWxmLnRocmVhZHMuYXBwZW5kKHNlbGYuc2VuZGVyKGluX2ZbMF0sIHNlbGYuZXhpdF90aHJl YWQsCj4gbGVuZ3RoKSkKPiA+ICsgICAgICAgIHNlbGYudGhyZWFkcy5hcHBlbmQoc2VsZi5TZW5k ZXIoaW5fZlswXSwgc2VsZi5leGl0X3RocmVhZCwKPiBsZW5ndGgpKQo+ID4gICAgICAgICAgcHJp bnQgIlBBU1M6IFNlbmRlciBwcmVwYXJlIgo+ID4gIAo+ID4gCj4gPiBAQCAtNDg0LDYgKzQ4OCwy OCBAQCBjbGFzcyB2aXJ0aW9fZ3Vlc3QoKToKPiA+ICAgICAgICAgICAgICAgICAgICAgKGxlbmd0 aCwgbGVuKHJlY3ZzKSkpCj4gPiAgCj4gPiAKPiA+ICsgICAgZGVmIGNsZWFuX3BvcnQoc2VsZiwg cG9ydCwgYnVmZmVyPTEwMjQpOgo+ID4gKyAgICAgICAgaW5fZiA9IHNlbGYuX29wZW4oW3BvcnRd KQo+ID4gKyAgICAgICAgcmV0ID0gc2VsZWN0LnNlbGVjdChbaW5fZlswXV0sIFtdLCBbXSwgMS4w KQo+ID4gKyAgICAgICAgYnVmID0gIiIKPiA+ICsgICAgICAgIGlmIHJldFswXToKPiA+ICsgICAg ICAgICAgICBidWYgPSBvcy5yZWFkKGluX2ZbMF0sIGJ1ZmZlcikKPiA+ICsgICAgICAgIHByaW50 ICgiUEFTUzogUmVzdCBpbiBzb2NrZXQ6ICIgKyBidWYpCj4gPiArCj4gPiArCj4gPiArZGVmIGlz X2FsaXZlKCk6Cj4gPiArICAgICIiIgo+ID4gKyAgICBDaGVjayBpcyBvbmx5IG1haW4gdGhyZWFk IGlzIGFsaXZlIGFuZCBpZiBndWVzdCByZWFjdC4KPiA+ICsgICAgIiIiCj4gPiArICAgIGlmIHRo cmVhZGluZy5hY3RpdmVDb3VudCgpID09IDE6Cj4gPiArICAgICAgICBwcmludCAoIlBBU1M6IEd1 ZXN0IGlzIG9rIG5vIHRocmVhZCBhbGl2ZSIpCj4gPiArICAgIGVsc2U6Cj4gPiArICAgICAgICB0 aHJlYWRzID0gIiIKPiA+ICsgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkaW5nLmVudW1lcmF0 ZSgpOgo+ID4gKyAgICAgICAgICAgIHRocmVhZHMgKz0gdGhyZWFkLm5hbWUgKyAiLCAiCj4gPiAr ICAgICAgICBwcmludCAoIkZBSUw6IE9uIGd1ZXN0IHJ1biB0aHJlYWQuIEFjdGl2ZSB0aHJlYWQ6 IiArCj4gdGhyZWFkcykKPiA+ICsKPiA+ICsKPiA+ICBkZWYgY29tcGlsZSgpOgo+ID4gICAgICAi IiIKPiA+ICAgICAgQ29tcGlsZSB2aXJ0aW9fZ3Vlc3QucHkgdG8gc3BlZWQgdXAuCj4gPiBAQCAt NTAxLDEyICs1MjcsMTkgQEAgZGVmIG1haW4oKToKPiA+ICAgICAgaWYgKGxlbihzeXMuYXJndikg PiAxKSBhbmQgKHN5cy5hcmd2WzFdID09ICItYyIpOgo+ID4gICAgICAgICAgY29tcGlsZSgpCj4g PiAgCj4gPiAtICAgIHZpcnQgPSB2aXJ0aW9fZ3Vlc3QoKQo+ID4gKyAgICB2aXJ0ID0gVmlydGlv R3Vlc3QoKQo+ID4gICAgICBwcmludCAiUEFTUzogU3RhcnQiCj4gPiAgCj4gPiAgICAgIHdoaWxl IFRydWU6Cj4gPiAgICAgICAgICBzdHIgPSByYXdfaW5wdXQoKQo+ID4gLSAgICAgICAgZXhlYyBz dHIKPiA+ICsgICAgICAgIHRyeToKPiA+ICsgICAgICAgICAgICBleGVjIHN0cgo+ID4gKyAgICAg ICAgZXhjZXB0Ogo+ID4gKyAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFj ZWJhY2sgPSBzeXMuZXhjX2luZm8oKQo+ID4gKyAgICAgICAgICAgIHByaW50ICJPbiBHdWVzdCBl eGNlcHRpb24gZnJvbTogXG4iICsgIiIuam9pbigKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAo+IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y190eXBlLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCj4gZXhjX3ZhbHVlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4gZXhjX3RyYWNlYmFjaykpCj4gPiAgCj4g PiAKPiA+ICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgo+ID4gZGlmZiAtLWdpdCBhL2NsaWVu dC90ZXN0cy9rdm0vdGVzdHMvdmlydGlvX2NvbnNvbGUucHkKPiBiL2NsaWVudC90ZXN0cy9rdm0v dGVzdHMvdmlydGlvX2NvbnNvbGUucHkKPiA+IGluZGV4IGFhNjY4ZTEuLmQ2OWMwYTUgMTAwNjQ0 Cj4gPiAtLS0gYS9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5Cj4gPiAr KysgYi9jbGllbnQvdGVzdHMva3ZtL3Rlc3RzL3ZpcnRpb19jb25zb2xlLnB5Cj4gPiBAQCAtMSwx NSArMSwxNiBAQAo+ID4gICIiIgo+ID4gIHZpcnRpb19jb25zb2xlIHRlc3QKPiA+ICAKPiA+IC1A Y29weXJpZ2h0OiBSZWQgSGF0IDIwMTAKPiA+ICtAY29weXJpZ2h0OiAyMDEwIFJlZCBIYXQsIElu Yy4KPiA+ICAiIiIKPiA+ICBpbXBvcnQgYXJyYXksIGxvZ2dpbmcsIG9zLCByYW5kb20sIHJlLCBz ZWxlY3QsIHNodXRpbCwgc29ja2V0LCBzeXMsCj4gdGVtcGZpbGUKPiA+IC1pbXBvcnQgdGhyZWFk aW5nLCB0aW1lCj4gPiAraW1wb3J0IHRocmVhZGluZywgdGltZSwgdHJhY2ViYWNrCj4gPiAgZnJv bSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKPiA+ICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhy ZWFkCj4gPiAgCj4gPiAgaW1wb3J0IGt2bV9zdWJwcm9jZXNzLCBrdm1fdGVzdF91dGlscywga3Zt X3V0aWxzLAo+IGt2bV9wcmVwcm9jZXNzaW5nCj4gPiAgZnJvbSBhdXRvdGVzdF9saWIuY2xpZW50 LmNvbW1vbl9saWIgaW1wb3J0IGVycm9yCj4gPiArZnJvbSBhdXRvdGVzdF9saWIuY2xpZW50LmJp biBpbXBvcnQgdXRpbHMKPiA+ICAKPiA+IAo+ID4gIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVz dCwgcGFyYW1zLCBlbnYpOgo+ID4gQEAgLTMwLDcgKzMxLDE5NCBAQCBkZWYgcnVuX3ZpcnRpb19j b25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAgQHBhcmFtIHBhcmFtczogRGljdGlv bmFyeSB3aXRoIHRoZSB0ZXN0IHBhcmFtZXRlcnMKPiA+ICAgICAgQHBhcmFtIGVudjogRGljdGlv bmFyeSB3aXRoIHRlc3QgZW52aXJvbm1lbnQKPiA+ICAgICAgIiIiCj4gPiAtICAgIGNsYXNzIHRo X3NlbmQoVGhyZWFkKToKPiA+ICsgICAgY2xhc3MgU3ViVGVzdChvYmplY3QpOgo+ID4gKyAgICAg ICAgIiIiCj4gPiArICAgICAgICBDb2xsZWN0IHJlc3VsdCBvZiBzdWJ0ZXN0IG9mIG1haW4gdGVz dC4KPiA+ICsgICAgICAgICIiIgo+ID4gKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgo+ID4g KyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIEluaXRpYWxpemUgb2JqZWN0Cj4gPiAr ICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBbXQo+ID4gKyAg ICAgICAgICAgIHNlbGYucGFzc2VkID0gMAo+ID4gKyAgICAgICAgICAgIHNlbGYuZmFpbGVkID0g MAo+ID4gKyAgICAgICAgICAgIHNlbGYuY2xlYW51cF9mdW5jID0gTm9uZQo+ID4gKyAgICAgICAg ICAgIHNlbGYuY2xlYW51cF9hcmdzID0gTm9uZQo+ID4gKwo+ID4gKwo+ID4gKyAgICAgICAgZGVm IHNldF9jbGVhbnVwX2Z1bmMoc2VsZiwgZnVuYywgYXJncyk6Cj4gPiArICAgICAgICAgICAgIiIi Cj4gPiArICAgICAgICAgICAgU2V0IGNsZWFudXAgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdo ZW4gc3VidGVzdAo+IGZhaWxzLgo+ID4gKwo+ID4gKyAgICAgICAgICAgIEBwYXJhbSBmdW5jOiBG dW5jdGlvbiB3aGljaCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGVzdAo+IGZhaWxzLgo+ID4gKyAg ICAgICAgICAgIEBwYXJhbSBhcmdzOiBBcmd1bWVudHMgb2YgY2xlYW51cCBmdW5jdGlvbi4KPiA+ ICsgICAgICAgICAgICAiIiIKPiA+ICsgICAgICAgICAgICBzZWxmLmNsZWFudXBfZnVuYyA9IGZ1 bmMKPiA+ICsgICAgICAgICAgICBzZWxmLmNsZWFudXBfYXJncyA9IGFyZ3MKPiA+ICsKPiA+ICsK PiA+ICsgICAgICAgIGRlZiBkb190ZXN0KHNlbGYsIGZ1bmN0aW9uLCBhcmdzPU5vbmUsIGZhdGFs PUZhbHNlLAo+IGNsZWFudXA9VHJ1ZSk6Cj4gPiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAg ICAgICAgRXhlY3V0ZSBzdWJ0ZXN0IGZ1bmN0aW9uLgo+ID4gKwo+ID4gKyAgICAgICAgICAgIEBw YXJhbSBmdW5jdGlvbjogT2JqZWN0IG9mIGZ1bmN0aW9uLgo+ID4gKyAgICAgICAgICAgIEBwYXJh bSBhcmdzOiBMaXN0IG9mIGFyZ3VtZW50cyBvZiBmdW5jdGlvbi4KPiA+ICsgICAgICAgICAgICBA cGFyYW0gZmF0YWw6IElmIHRydWUgZXhjZXB0aW9uIGlzIGZvcndhcmRlZCB0byBtYWluCj4gdGVz dC4KPiA+ICsgICAgICAgICAgICBAcmV0dXJuOiBSZXR1cm4gd2hhdCByZXR1cm5lZCBleGVjdXRl ZCBzdWJ0ZXN0Lgo+ID4gKyAgICAgICAgICAgIEByYWlzZSBUZXN0RXJyb3I6IElmIGNvbGxhcHNl IG9mIHRlc3QgaXMgZmF0YWwgcmFpc2UKPiBmb3J3YXJkCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgZXhjZXB0aW9uIGZyb20gc3VidGVzdC4KPiA+ICsgICAgICAgICAgICAiIiIKPiA+ICsg ICAgICAgICAgICBpZiBhcmdzID09IE5vbmU6Cj4gPiArICAgICAgICAgICAgICAgIGFyZ3MgPSBb XQo+ID4gKyAgICAgICAgICAgIHRyeToKPiA+ICsgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1 ZygiU3RhcnQgdGVzdCAlcy4iICUKPiBmdW5jdGlvbi5mdW5jX25hbWUpCj4gPiArICAgICAgICAg ICAgICAgIHJldCA9IGZ1bmN0aW9uKCphcmdzKQo+ID4gKyAgICAgICAgICAgICAgICBsb2dnaW5n LmluZm8oc2VsZi5yZXN1bHRfdG9fc3RyaW5nKChUcnVlLAo+IGZ1bmN0aW9uLmZ1bmNfbmFtZSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXJncykpKQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdC5hcHBlbmQoKFRydWUsIGZ1 bmN0aW9uLmZ1bmNfbmFtZSwKPiBhcmdzKSkKPiA+ICsgICAgICAgICAgICAgICAgc2VsZi5wYXNz ZWQgKz0gMQo+ID4gKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Cj4gPiArICAgICAgICAgICAg ZXhjZXB0Ogo+ID4gKyAgICAgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJh Y2ViYWNrID0KPiBzeXMuZXhjX2luZm8oKQo+ID4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVy cm9yKCJJbiBmdW5jdGlvbiAoIiArIGZ1bmN0aW9uLmZ1bmNfbmFtZQo+ICsgIik6IikKPiA+ICsg ICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiQ2FsbCBmcm9tOlxuIiArCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9zdGFjaygpWy0yXVs6LTFd KQo+ID4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJFeGNlcHRpb24gZnJvbTpcbiIg Kwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLmpvaW4odHJhY2ViYWNrLmZv cm1hdF9leGNlcHRpb24oCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBleGNfdHlwZSwKPiBleGNfdmFsdWUsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+IGV4Y190cmFj ZWJhY2sudGJfbmV4dCkpKQo+ID4gKyAgICAgICAgICAgICAgICAjQ2xlYW4gdXAgZW52aXJvbm1l bnQgYWZ0ZXIgc3ViVGVzdCBjcmFzaAo+ID4gKyAgICAgICAgICAgICAgICBpZiBjbGVhbnVwOgo+ ID4gKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhbnVwX2Z1bmMoKnNlbGYuY2xlYW51cF9h cmdzKQo+ID4gKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oc2VsZi5yZXN1bHRfdG9fc3Ry aW5nKChGYWxzZSwKPiBmdW5jdGlvbi5mdW5jX25hbWUsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MpKSkKPiA+ICsgICAgICAgICAg ICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKChGYWxzZSwgZnVuY3Rpb24uZnVuY19uYW1lLAo+IGFy Z3MpKQo+ID4gKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxlZCArPSAxCj4gPiArICAgICAgICAg ICAgICAgIGlmIGZhdGFsOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKPiA+ICsKPiA+ ICsKPiA+ICsgICAgICAgIGRlZiBpc19mYWlsZWQoc2VsZik6Cj4gPiArICAgICAgICAgICAgIiIi Cj4gPiArICAgICAgICAgICAgQHJldHVybjogSWYgYW55IG9mIHN1YnRlc3Qgbm90IHBhc3MgcmV0 dXJuIFRydWUuCj4gPiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAgcmV0dXJuIFRy dWUgaWYgc2VsZi5mYWlsZWQgPiAwIGVsc2UgRmFsc2UKPiA+ICsKPiA+ICsgICAgICAgIGRlZiBn ZXRfcmVzdWx0KHNlbGYpOgo+ID4gKyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIEBy ZXR1cm46IFJlc3VsdCBvZiBzdWJ0ZXN0cy4KPiA+ICsgICAgICAgICAgICAgICBGb3JtYXQ6Cj4g PiArICAgICAgICAgICAgICAgICB0dXBsZShwYXNzL2ZhaWwsZnVuY3Rpb25fbmFtZSxjYWxsX2Fy Z3VtZW50cykKPiA+ICsgICAgICAgICAgICAiIiIKPiA+ICsgICAgICAgICAgICByZXR1cm4gc2Vs Zi5yZXN1bHQKPiA+ICsKPiA+ICsKPiA+ICsgICAgICAgIGRlZiByZXN1bHRfdG9fc3RyaW5nX2Rl YnVnKHNlbGYsIHJlc3VsdCk6Cj4gPiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAg QHBhcmFtIHJlc3VsdDogUmVzdWx0IG9mIHRlc3QuCj4gPiArICAgICAgICAgICAgIiIiCj4gPiAr ICAgICAgICAgICAgc2FyZ3MgPSAiIgo+ID4gKyAgICAgICAgICAgIGZvciBhcmcgaW4gcmVzdWx0 WzJdOgo+ID4gKyAgICAgICAgICAgICAgICBzYXJncyArPSBzdHIoYXJnKSArICIsIgo+ID4gKyAg ICAgICAgICAgIHNhcmdzID0gc2FyZ3NbOi0xXQo+ID4gKyAgICAgICAgICAgIHJldHVybiAoIlN1 YnRlc3QgKCVzKCVzKSk6ICAtLT4lcyIpICUgKHJlc3VsdFsxXSwKPiBzYXJncywKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFTUyJpZiByZXN1bHRb MF0KPiBlbHNlICJGQUlMIikKPiA+ICsKPiA+ICsKPiA+ICsgICAgICAgIGRlZiByZXN1bHRfdG9f c3RyaW5nKHNlbGYsIHJlc3VsdCk6Cj4gPiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAg ICAgQHBhcmFtIHJlc3VsdDogUmVzdWx0IG9mIHRlc3QuCj4gPiArICAgICAgICAgICAgIiIiCj4g PiArICAgICAgICAgICAgcmV0dXJuICgiU3VidGVzdCAoJXMpOiAgLS0+JXMiKSAlIChyZXN1bHRb MV0sICJQQVNTImlmCj4gcmVzdWx0WzBdCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ICJGQUlMIikKPiA+ICsK PiA+ICsKPiA+ICsgICAgICAgIGRlZiBnZXRfZnVsbF90ZXh0X3Jlc3VsdChzZWxmKToKPiA+ICsg ICAgICAgICAgICAiIiIKPiA+ICsgICAgICAgICAgICBAcmV0dXJuIHN0cmluZyB3aXRoIHRleHQg Zm9ybSBvZiByZXN1bHQKPiA+ICsgICAgICAgICAgICAiIiIKPiA+ICsgICAgICAgICAgICByZXN1 bHQgPSAiIgo+ID4gKyAgICAgICAgICAgIGZvciByZXMgaW4gc2VsZi5yZXN1bHQ6Cj4gPiArICAg ICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLnJlc3VsdF90b19zdHJpbmdfZGVidWcocmVzKSAr ICJcbiIKPiA+ICsgICAgICAgICAgICByZXR1cm4gcmVzdWx0Cj4gPiArCj4gPiArCj4gPiArICAg ICAgICBkZWYgZ2V0X3RleHRfcmVzdWx0KHNlbGYpOgo+ID4gKyAgICAgICAgICAgICIiIgo+ID4g KyAgICAgICAgICAgIEByZXR1cm4gc3RyaW5nIHdpdGggdGV4dCBmb3JtIG9mIHJlc3VsdAo+ID4g KyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIHJlc3VsdCA9ICIiCj4gPiArICAgICAg ICAgICAgZm9yIHJlcyBpbiBzZWxmLnJlc3VsdDoKPiA+ICsgICAgICAgICAgICAgICAgcmVzdWx0 ICs9IHNlbGYucmVzdWx0X3RvX3N0cmluZyhyZXMpICsgIlxuIgo+ID4gKyAgICAgICAgICAgIHJl dHVybiByZXN1bHQKPiA+ICsKPiA+ICsKPiA+ICsgICAgY2xhc3MgUG9ydChvYmplY3QpOgo+ID4g KyAgICAgICAgIiIiCj4gPiArICAgICAgICBEZWZpbmUgc3RydWN0dXJlIHRvIGtlZXAgaW5mb3Jt YXRpb24gYWJvdXQgdXNlZCBwb3J0Lgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICBkZWYg X19pbml0X18oc2VsZiwgc29jaywgbmFtZSwgcG9ydF90eXBlLCBwYXRoKToKPiA+ICsgICAgICAg ICAgICAiIiIKPiA+ICsgICAgICAgICAgICBAcGFyYW0gdm06IHZpcnR1YWwgbWFjaGluZSBvYmpl Y3QgdGhhdCBwb3J0IG93bmVkCj4gPiArICAgICAgICAgICAgQHBhcmFtIHNvY2s6IFNvY2tldCBv ZiBwb3J0IGlmIHBvcnQgaXMgb3Blbi4KPiA+ICsgICAgICAgICAgICBAcGFyYW0gbmFtZTogTmFt ZSBvZiBwb3J0IGZvciBndWVzdCBzaWRlLgo+ID4gKyAgICAgICAgICAgIEBwYXJhbSBwb3J0X3R5 cGU6IFR5cGUgb2YgcG9ydCB5ZXMgPSBjb25zb2xlLCBubz0KPiBzZXJpYWxwb3J0Lgo+ID4gKyAg ICAgICAgICAgIEBwYXJhbSBwYXRoOiBQYXRoIHRvIHBvcnQgb24gaG9zdCBzaWRlLgo+ID4gKyAg ICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKPiA+ICsgICAg ICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCj4gPiArICAgICAgICAgICAgc2VsZi5wb3J0X3R5cGUg PSBwb3J0X3R5cGUKPiA+ICsgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCj4gPiArICAgICAg ICAgICAgc2VsZi5pc19vcGVuID0gRmFsc2UKPiA+ICsKPiA+ICsKPiA+ICsgICAgICAgIGRlZiBm b3JfZ3Vlc3Qoc2VsZik6Cj4gPiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAgRm9y bWF0IGRhdGEgZm9yIGNvbW11bmljYXRpb24gd2l0aCBndWVzdCBzaWRlLgo+ID4gKyAgICAgICAg ICAgICIiIgo+ID4gKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5uYW1lLCBzZWxmLnBvcnRfdHlw ZV0KPiA+ICsKPiA+ICsKPiA+ICsgICAgICAgIGRlZiBvcGVuKHNlbGYpOgo+ID4gKyAgICAgICAg ICAgICIiIgo+ID4gKyAgICAgICAgICAgIE9wZW4gcG9ydCBvbiBob3N0IHNpZGUuCj4gPiArICAg ICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChz b2NrZXQuQUZfVU5JWCwKPiBzb2NrZXQuU09DS19TVFJFQU0pCj4gPiArICAgICAgICAgICAgc2Vs Zi5zb2NrLmNvbm5lY3Qoc2VsZi5wYXRoKQo+ID4gKyAgICAgICAgICAgIHNlbGYuaXNfb3BlbiA9 IFRydWUKPiA+ICsKPiA+ICsKPiA+ICsgICAgICAgIGRlZiBjbGVhbl9wb3J0KHNlbGYpOgo+ID4g KyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIENsZWFuIGFsbCBkYXRhIGZyb20gb3Bl bmVkIHBvcnQgb24gaG9zdCBzaWRlLgo+ID4gKyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAg ICAgIGlmIHNlbGYuaXNfb3BlbjoKPiA+ICsgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCj4g PiArICAgICAgICAgICAgc2VsZi5vcGVuKCkKPiA+ICsgICAgICAgICAgICByZXQgPSBzZWxlY3Qu c2VsZWN0KFtzZWxmLnNvY2tdLCBbXSwgW10sIDEuMCkKPiA+ICsgICAgICAgICAgICBpZiByZXRb MF06Cj4gPiArICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuc29jay5yZWN2KDEwMjQpCj4gPiAr ICAgICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIlJlc3QgaW4gc29ja2V0OiAiICsgYnVmKQo+ ID4gKwo+ID4gKwo+ID4gKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgo+ID4gKyAgICAgICAgICAg ICIiIgo+ID4gKyAgICAgICAgICAgIENsb3NlIHBvcnQuCj4gPiArICAgICAgICAgICAgIiIiCj4g PiArICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCj4gPiAr ICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKPiA+ICsgICAgICAgICAgICBzZWxmLmlzX29w ZW4gPSBGYWxzZQo+ID4gKwo+ID4gKwo+ID4gKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6Cj4g PiArICAgICAgICAgICAgIiIiCj4gPiArICAgICAgICAgICAgQ29udmVydCB0byB0ZXh0Lgo+ID4g KyAgICAgICAgICAgICIiIgo+ID4gKyAgICAgICAgICAgIHJldHVybiAoIiVzLCVzLCVzLCVzLCVk IiAlICgiU29ja2V0Iiwgc2VsZi5uYW1lLAo+IHNlbGYucG9ydF90eXBlLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGgsIHNlbGYuaXNfb3Blbikp Cj4gPiArCj4gPiArCj4gPiArICAgIGNsYXNzIFRoU2VuZChUaHJlYWQpOgo+ID4gICAgICAgICAg IiIiCj4gPiAgICAgICAgICBSYW5kb20gZGF0YSBzZW5kZXIgdGhyZWFkLgo+ID4gICAgICAgICAg IiIiCj4gPiBAQCAtNTMsMTQgKzI0MSwxNCBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3Qs IHBhcmFtcywgZW52KToKPiA+ICAKPiA+IAo+ID4gICAgICAgICAgZGVmIHJ1bihzZWxmKToKPiA+ IC0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9zZW5kICVzOiBydW4iLCBzZWxmLmdldE5h bWUoKSkKPiA+ICsgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaFNlbmQgJXM6IHJ1biIsIHNl bGYuZ2V0TmFtZSgpKQo+ID4gICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmV4aXRldmVudC5p c1NldCgpOgo+ID4gICAgICAgICAgICAgICAgICBzZWxmLmlkeCArPSBzZWxmLnBvcnQuc2VuZChz ZWxmLmRhdGEpCj4gPiAtICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygidGhfc2VuZCAlczogZXhp dCglZCkiLCBzZWxmLmdldE5hbWUoKSwKPiA+ICsgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJU aFNlbmQgJXM6IGV4aXQoJWQpIiwgc2VsZi5nZXROYW1lKCksCj4gPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLmlkeCkKPiA+ICAKPiA+IAo+ID4gLSAgICBjbGFzcyB0aF9zZW5kX2No ZWNrKFRocmVhZCk6Cj4gPiArICAgIGNsYXNzIFRoU2VuZENoZWNrKFRocmVhZCk6Cj4gPiAgICAg ICAgICAiIiIKPiA+ICAgICAgICAgIFJhbmRvbSBkYXRhIHNlbmRlciB0aHJlYWQuCj4gPiAgICAg ICAgICAiIiIKPiA+IEBAIC04NSw3ICsyNzMsNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRl c3QsIHBhcmFtcywgZW52KToKPiA+ICAKPiA+IAo+ID4gICAgICAgICAgZGVmIHJ1bihzZWxmKToK PiA+IC0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9zZW5kX2NoZWNrICVzOiBydW4iLCBz ZWxmLmdldE5hbWUoKSkKPiA+ICsgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaFNlbmRDaGVj ayAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gPiAgICAgICAgICAgICAgdG9vX211Y2hfZGF0 YSA9IEZhbHNlCj4gPiAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZXhpdGV2ZW50LmlzU2V0 KCk6Cj4gPiAgICAgICAgICAgICAgICAgICMgRklYTUU6IHdvcmthcm91bmQgdGhlIHByb2JsZW0g d2l0aCBxZW11LWt2bSBzdGFsbAo+IHdoZW4gdG9vCj4gPiBAQCAtMTA5LDE0ICsyOTcsMTQgQEAg ZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgaWR4ID0gc2VsZi5wb3J0LnNlbmQoYnVmKQo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZiA9IGJ1ZltpZHg6XQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg IHNlbGYuaWR4ICs9IGlkeAo+ID4gLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoX3NlbmRf Y2hlY2sgJXM6IGV4aXQoJWQpIiwKPiBzZWxmLmdldE5hbWUoKSwKPiA+ICsgICAgICAgICAgICBs b2dnaW5nLmRlYnVnKCJUaFNlbmRDaGVjayAlczogZXhpdCglZCkiLAo+IHNlbGYuZ2V0TmFtZSgp LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZHgpCj4gPiAgICAgICAgICAg ICAgaWYgdG9vX211Y2hfZGF0YToKPiA+IC0gICAgICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigi dGhfc2VuZF9jaGVjazogd29ya2Fyb3VuZCB0aGUKPiAndG9vX211Y2hfZGF0YSciCj4gPiArICAg ICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlRoU2VuZENoZWNrOiB3b3JrYXJvdW5kIHRoZQo+ ICd0b29fbXVjaF9kYXRhJyIKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVn IikKPiA+ICAKPiA+IAo+ID4gLSAgICBjbGFzcyB0aF9yZWN2KFRocmVhZCk6Cj4gPiArICAgIGNs YXNzIFRoUmVjdihUaHJlYWQpOgo+ID4gICAgICAgICAgIiIiCj4gPiAgICAgICAgICBSZWNpZXZl cyBkYXRhIGFuZCB0aHJvd3MgaXQgYXdheS4KPiA+ICAgICAgICAgICIiIgo+ID4gQEAgLTEzNCw3 ICszMjIsNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ ICAgICAgICAgICAgICBzZWxmLmJsb2NrbGVuID0gYmxvY2tsZW4KPiA+ICAgICAgICAgICAgICBz ZWxmLmlkeCA9IDAKPiA+ICAgICAgICAgIGRlZiBydW4oc2VsZik6Cj4gPiAtICAgICAgICAgICAg bG9nZ2luZy5kZWJ1ZygidGhfcmVjdiAlczogcnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gPiArICAg ICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiVGhSZWN2ICVzOiBydW4iLCBzZWxmLmdldE5hbWUoKSkK PiA+ICAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5leGl0ZXZlbnQuaXNTZXQoKToKPiA+ICAg ICAgICAgICAgICAgICAgIyBUT0RPOiBXb3JrYXJvdW5kLCBpdCBkaWRuJ3Qgd29yayB3aXRoIHNl bGVjdCA6LS8KPiA+ICAgICAgICAgICAgICAgICAgdHJ5Ogo+ID4gQEAgLTE0MiwxMCArMzMwLDEw IEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAg ICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6Cj4gPiAgICAgICAgICAgICAgICAgICAg ICBwYXNzCj4gPiAgICAgICAgICAgICAgc2VsZi5wb3J0LnNldHRpbWVvdXQoc2VsZi5fcG9ydF90 aW1lb3V0KQo+ID4gLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoInRoX3JlY3YgJXM6IGV4aXQo JWQpIiwgc2VsZi5nZXROYW1lKCksCj4gc2VsZi5pZHgpCj4gPiArICAgICAgICAgICAgbG9nZ2lu Zy5kZWJ1ZygiVGhSZWN2ICVzOiBleGl0KCVkKSIsIHNlbGYuZ2V0TmFtZSgpLAo+IHNlbGYuaWR4 KQo+ID4gIAo+ID4gCj4gPiAtICAgIGNsYXNzIHRoX3JlY3ZfY2hlY2soVGhyZWFkKToKPiA+ICsg ICAgY2xhc3MgVGhSZWN2Q2hlY2soVGhyZWFkKToKPiA+ICAgICAgICAgICIiIgo+ID4gICAgICAg ICAgUmFuZG9tIGRhdGEgcmVjZWl2ZXIvY2hlY2tlciB0aHJlYWQuCj4gPiAgICAgICAgICAiIiIK PiA+IEBAIC0xNjUsMTAgKzM1MywxMCBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBh cmFtcywgZW52KToKPiA+ICAKPiA+IAo+ID4gICAgICAgICAgZGVmIHJ1bihzZWxmKToKPiA+IC0g ICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9yZWN2X2NoZWNrICVzOiBydW4iLCBzZWxmLmdl dE5hbWUoKSkKPiA+ICsgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJUaFJlY3ZDaGVjayAlczog cnVuIiwgc2VsZi5nZXROYW1lKCkpCj4gPiAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZXhp dGV2ZW50LmlzU2V0KCk6Cj4gPiAgICAgICAgICAgICAgICAgIHJldCA9IHNlbGVjdC5zZWxlY3Qo W3NlbGYucG9ydF0sIFtdLCBbXSwgMS4wKQo+ID4gLSAgICAgICAgICAgICAgICBpZiByZXQgYW5k IChub3Qgc2VsZi5leGl0ZXZlbnQuaXNTZXQoKSk6Cj4gPiArICAgICAgICAgICAgICAgIGlmIHJl dFswXSBhbmQgKG5vdCBzZWxmLmV4aXRldmVudC5pc1NldCgpKToKPiA+ICAgICAgICAgICAgICAg ICAgICAgIGJ1ZiA9IHNlbGYucG9ydC5yZWN2KHNlbGYuYmxvY2tsZW4pCj4gPiAgICAgICAgICAg ICAgICAgICAgICBpZiBidWY6Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDb21wYXJl IHRoZSByZWN2ZCBkYXRhIHdpdGggdGhlIGNvbnRyb2wKPiBkYXRhCj4gPiBAQCAtMTg2LDE1NiAr Mzc0LDEzIEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJ1ZiBpbiBzZWxmLmJ1ZmZlcjoK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaF8gKz0gYnVmCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJRdWV1ZSA9ICVz IiwKPiByZXByKGNoXykpCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlz ZQo+IGVycm9yLlRlc3RGYWlsKCJ0aF9yZWN2X2NoZWNrOiBpbmNvcnJlY3QgIgo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIlRoUmVjdkNo ZWNrOgo+IGluY29ycmVjdCAiCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZGF0YSIpCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5pZHggKz0gbGVuKGJ1ZikKPiA+IC0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJ0aF9y ZWN2X2NoZWNrICVzOiBleGl0KCVkKSIsCj4gc2VsZi5nZXROYW1lKCksCj4gPiArICAgICAgICAg ICAgbG9nZ2luZy5kZWJ1ZygiVGhSZWN2Q2hlY2sgJXM6IGV4aXQoJWQpIiwKPiBzZWxmLmdldE5h bWUoKSwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWR4KQo+ID4gIAo+ID4g Cj4gPiAtICAgIGNsYXNzIGNwdV9sb2FkKCk6Cj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAg IEdldCBhdmVyYWdlIGNwdSBsb2FkIGJldHdlZW4gc3RhcnQgYW5kIGdldF9sb2FkLgo+ID4gLSAg ICAgICAgIiIiCj4gPiAtICAgICAgICBkZWYgX19pbml0X18gKHNlbGYpOgo+ID4gLSAgICAgICAg ICAgIHNlbGYub2xkX2xvYWQgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KPiA+IC0g ICAgICAgICAgICBzZWxmLnN0YXJ0VGltZSA9IDAKPiA+IC0gICAgICAgICAgICBzZWxmLmVuZFRp bWUgPSAwCj4gPiAtCj4gPiAtCj4gPiAtICAgICAgICBkZWYgX2dldF9jcHVfbG9hZChzZWxmKToK PiA+IC0gICAgICAgICAgICAjIExldCdzIHNlZSBpZiB3ZSBjYW4gY2FsYyBzeXN0ZW0gbG9hZC4K PiA+IC0gICAgICAgICAgICB0cnk6Cj4gPiAtICAgICAgICAgICAgICAgIGYgPSBvcGVuKCIvcHJv Yy9zdGF0IiwgInIiKQo+ID4gLSAgICAgICAgICAgICAgICB0bXAgPSBmLnJlYWRsaW5lcygyMDAp Cj4gPiAtICAgICAgICAgICAgICAgIGYuY2xvc2UoKQo+ID4gLSAgICAgICAgICAgIGV4Y2VwdDoK PiA+IC0gICAgICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgiRXJyb3IgcmVhZGluZyAvcHJv Yy9zdGF0IikKPiA+IC0gICAgICAgICAgICAgICAgZXJyb3IuVGVzdEZhaWwoImF2ZXJhZ2VfY3B1 X2xvYWQ6IEVycm9yIHJlYWRpbmcKPiAvcHJvYy9zdGF0IikKPiA+IC0KPiA+IC0gICAgICAgICAg ICAjIDIwMCBieXRlcyBzaG91bGQgYmUgZW5vdWdoIGJlY2F1c2UgdGhlIGluZm9ybWF0aW9uIHdl Cj4gbmVlZAo+ID4gLSAgICAgICAgICAgICMgaXMgdHlwaWNhbGx5IHN0b3JlZCBpbiB0aGUgZmly c3QgbGluZQo+ID4gLSAgICAgICAgICAgICMgSW5mbyBhYm91dCBpbmRpdmlkdWFsIHByb2Nlc3Nv cnMgKG5vdCB5ZXQgc3VwcG9ydGVkKQo+IGlzIGluCj4gPiAtICAgICAgICAgICAgIyB0aGUgc2Vj b25kICh0aGlyZCwgLi4uPykgbGluZQo+ID4gLSAgICAgICAgICAgIGZvciBsaW5lIGluIHRtcDoK PiA+IC0gICAgICAgICAgICAgICAgaWYgbGluZVswOjRdID09ICJjcHUgIjoKPiA+IC0gICAgICAg ICAgICAgICAgICAgIHJlZyA9IHJlLmNvbXBpbGUoJ1swLTldKycpCj4gPiAtICAgICAgICAgICAg ICAgICAgICBsb2FkX3ZhbHVlcyA9IHJlZy5maW5kYWxsKGxpbmUpCj4gPiAtICAgICAgICAgICAg ICAgICAgICAjIGV4dHJhY3QgdmFsdWVzIGZyb20gL3Byb2Mvc3RhdAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgbG9hZCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQo+ID4gLSAgICAg ICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOCk6Cj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgbG9hZFtpXSA9IGludChsb2FkX3ZhbHVlc1tpXSkgLQo+IHNlbGYub2xkX2xvYWRbaV0K PiA+IC0KPiA+IC0gICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDgpOgo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX2xvYWRbaV0gPSBpbnQobG9hZF92YWx1ZXNb aV0pCj4gPiAtICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZAo+ID4gLQo+ID4gLQo+ID4g LSAgICAgICAgZGVmIHN0YXJ0IChzZWxmKToKPiA+IC0gICAgICAgICAgICAiIiIKPiA+IC0gICAg ICAgICAgICBTdGFydCBDUFUgdXNhZ2UgbWVhc3VyZW1lbnQKPiA+IC0gICAgICAgICAgICAiIiIK PiA+IC0gICAgICAgICAgICBzZWxmLm9sZF9sb2FkID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDBdCj4gPiAtICAgICAgICAgICAgc2VsZi5zdGFydFRpbWUgPSB0aW1lLnRpbWUoKQo+ID4g LSAgICAgICAgICAgIHNlbGYuX2dldF9jcHVfbG9hZCgpCj4gPiAtCj4gPiAtCj4gPiAtICAgICAg ICBkZWYgZ2V0X2xvYWQoc2VsZik6Cj4gPiAtICAgICAgICAgICAgIiIiCj4gPiAtICAgICAgICAg ICAgR2V0IGFuZCByZXNldCBDUFUgdXNhZ2UKPiA+IC0KPiA+IC0gICAgICAgICAgICBAcmV0dXJu OiByZXR1cm4gZ3JvdXAgY3B1ICh1c2VyWyVdLCBzeXN0ZW1bJV0sIHN1bVslXSwKPiB0ZXN0VGlt ZVtzXSkKPiA+IC0gICAgICAgICAgICAiIiIKPiA+IC0gICAgICAgICAgICBzZWxmLmVuZFRpbWUg PSB0aW1lLnRpbWUoKQo+ID4gLSAgICAgICAgICAgIHRlc3RUaW1lID0gc2VsZi5lbmRUaW1lIC0g c2VsZi5zdGFydFRpbWUKPiA+IC0gICAgICAgICAgICBsb2FkID0gc2VsZi5fZ2V0X2NwdV9sb2Fk KCkKPiA+IC0KPiA+IC0gICAgICAgICAgICB1c2VyID0gbG9hZFswXSAvIHRlc3RUaW1lCj4gPiAt ICAgICAgICAgICAgc3lzdGVtID0gbG9hZFsyXSAvIHRlc3RUaW1lCj4gPiAtICAgICAgICAgICAg c3VtID0gdXNlciArIHN5c3RlbQo+ID4gLQo+ID4gLSAgICAgICAgICAgIHJldHVybiAodXNlciwg c3lzdGVtLCBzdW0sIHRlc3RUaW1lKQo+ID4gLQo+ID4gLQo+ID4gLSAgICBjbGFzcyBwaWRfbG9h ZCgpOgo+ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBHZXQgYXZlcmFnZSBwcm9jZXNzIGNw dSBsb2FkIGJldHdlZW4gc3RhcnQgYW5kIGdldF9sb2FkCj4gPiAtICAgICAgICAiIiIKPiA+IC0g ICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcGlkLCBuYW1lKToKPiA+IC0gICAgICAgICAgICBz ZWxmLm9sZF9sb2FkID0gWzAsIDBdCj4gPiAtICAgICAgICAgICAgc2VsZi5zdGFydFRpbWUgPSAw Cj4gPiAtICAgICAgICAgICAgc2VsZi5lbmRUaW1lID0gMAo+ID4gLSAgICAgICAgICAgIHNlbGYu cGlkID0gcGlkCj4gPiAtICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQo+ID4gLQo+ID4gLQo+ ID4gLSAgICAgICAgZGVmIF9nZXRfY3B1X2xvYWQoc2VsZiwgcGlkKToKPiA+IC0gICAgICAgICAg ICAjIExldCdzIHNlZSBpZiB3ZSBjYW4gY2FsYyBzeXN0ZW0gbG9hZC4KPiA+IC0gICAgICAgICAg ICB0cnk6Cj4gPiAtICAgICAgICAgICAgICAgIGYgPSBvcGVuKCIvcHJvYy8lZC9zdGF0IiAlIChw aWQpLCAiciIpCj4gPiAtICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKPiA+IC0g ICAgICAgICAgICAgICAgZi5jbG9zZSgpCj4gPiAtICAgICAgICAgICAgZXhjZXB0Ogo+ID4gLSAg ICAgICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCJFcnJvciByZWFkaW5nIC9wcm9jLyVkL3N0 YXQiLAo+IHBpZCkKPiA+IC0gICAgICAgICAgICAgICAgZXJyb3IuVGVzdEZhaWwoImF2ZXJhZ2Vf cHJvY2Vzc19jcHVfbG9hZDogRXJyb3IKPiByZWFkaW5nICIKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIi9wcm9jL3N0YXQiKQo+ID4gLSAgICAgICAgICAgIGVsc2U6Cj4gPiAt ICAgICAgICAgICAgICAgIHJlZyA9IHJlLmNvbXBpbGUoJ1swLTldKycpCj4gPiAtICAgICAgICAg ICAgICAgIGxvYWRfdmFsdWVzID0gcmVnLmZpbmRhbGwobGluZSkKPiA+IC0gICAgICAgICAgICAg ICAgZGVsIGxvYWRfdmFsdWVzWzA6MTFdCj4gPiAtICAgICAgICAgICAgICAgICMgZXh0cmFjdCB2 YWx1ZXMgZnJvbSAvcHJvYy9zdGF0Cj4gPiAtICAgICAgICAgICAgICAgIGxvYWQgPSBbMCwgMF0K PiA+IC0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6Cj4gPiAtICAgICAgICAgICAg ICAgICAgICBsb2FkW2ldID0gaW50KGxvYWRfdmFsdWVzW2ldKSAtCj4gc2VsZi5vbGRfbG9hZFtp XQo+ID4gLQo+ID4gLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKPiA+IC0gICAg ICAgICAgICAgICAgICAgIHNlbGYub2xkX2xvYWRbaV0gPSBpbnQobG9hZF92YWx1ZXNbaV0pCj4g PiAtICAgICAgICAgICAgICAgIHJldHVybiBsb2FkCj4gPiAtCj4gPiAtCj4gPiAtICAgICAgICBk ZWYgc3RhcnQgKHNlbGYpOgo+ID4gLSAgICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgICAgIFN0 YXJ0IENQVSB1c2FnZSBtZWFzdXJlbWVudAo+ID4gLSAgICAgICAgICAgICIiIgo+ID4gLSAgICAg ICAgICAgIHNlbGYub2xkX2xvYWQgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KPiA+ IC0gICAgICAgICAgICBzZWxmLnN0YXJ0VGltZSA9IHRpbWUudGltZSgpCj4gPiAtICAgICAgICAg ICAgc2VsZi5fZ2V0X2NwdV9sb2FkKHNlbGYucGlkKQo+ID4gLQo+ID4gLQo+ID4gLSAgICAgICAg ZGVmIGdldF9sb2FkKHNlbGYpOgo+ID4gLSAgICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgICAg IEdldCBhbmQgcmVzZXQgQ1BVIHVzYWdlLgo+ID4gLQo+ID4gLSAgICAgICAgICAgIEByZXR1cm46 IEdyb3VwIGNwdQo+ID4gLSAgICAgICAgICAgICAgICAgICAgKHBpZCwgdXNlclslXSwgc3lzdGVt WyVdLCBzdW1bJV0sIHRlc3RUaW1lW3NdKQo+ID4gLSAgICAgICAgICAgICIiIgo+ID4gLSAgICAg ICAgICAgIHNlbGYuZW5kVGltZSA9IHRpbWUudGltZSgpCj4gPiAtICAgICAgICAgICAgdGVzdFRp bWUgPSBzZWxmLmVuZFRpbWUgLSBzZWxmLnN0YXJ0VGltZQo+ID4gLSAgICAgICAgICAgIGxvYWQg PSBzZWxmLl9nZXRfY3B1X2xvYWQoc2VsZi5waWQpCj4gPiAtCj4gPiAtICAgICAgICAgICAgdXNl ciA9IGxvYWRbMF0gLyB0ZXN0VGltZQo+ID4gLSAgICAgICAgICAgIHN5c3RlbSA9IGxvYWRbMV0g LyB0ZXN0VGltZQo+ID4gLSAgICAgICAgICAgIHN1bSA9IHVzZXIgKyBzeXN0ZW0KPiA+IC0KPiA+ IC0gICAgICAgICAgICByZXR1cm4gKHNlbGYubmFtZSwgc2VsZi5waWQsIHVzZXIsIHN5c3RlbSwg c3VtLAo+IHRlc3RUaW1lKQo+ID4gLQo+ID4gLQo+ID4gLSAgICBkZWYgcHJpbnRfbG9hZChwcm9j ZXNzLCBzeXN0ZW0pOgo+ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBQcmludCBsb2FkIGlu IHRhYnVsYXIgbW9kZS4KPiA+IC0KPiA+IC0gICAgICAgIEBwYXJhbSBwcm9jZXNzOiBMaXN0IG9m IHByb2Nlc3Mgc3RhdGlzdGljIHR1cGxlcy4KPiA+IC0gICAgICAgIEBwYXJhbSBzeXN0ZW06IFR1 cGxlIG9mIHN5c3RlbSBjcHUgdXNhZ2UuCj4gPiAtICAgICAgICAiIiIKPiA+IC0KPiA+IC0gICAg ICAgIGxvZ2dpbmcuaW5mbygiJS0xMHMgJTZzICU1cyAlNXMgJTVzICUxMXMiLAo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICJOQU1FIiwgIlBJRCIsICJVU0VSIiwgIlNZUyIsICJTVU0iLCAiVElN RSIpCj4gPiAtICAgICAgICBmb3IgcHIgaW4gcHJvY2VzczoKPiA+IC0gICAgICAgICAgICBsb2dn aW5nLmluZm8oIiUtMTBzICU2ZCAlNC4wZiUlICU0LjBmJSUgJTQuMGYlJQo+ICUxMC4zZnMiICUg cHIpCj4gPiAtICAgICAgICBsb2dnaW5nLmluZm8oIlRPVEFMOiAgICAgLS0tLS0tICU0LjBmJSUg JTQuMGYlJSAlNC4wZiUlCj4gJTEwLjNmcyIgJQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIHN5 c3RlbSkKPiA+IC0KPiA+IC0KPiA+ICAgICAgZGVmIHByb2Nlc3Nfc3RhdHMoc3RhdHMsIHNjYWxl PTEuMCk6Cj4gPiAgICAgICAgICAiIiIKPiA+ICAgICAgICAgIFByb2Nlc3MgYW5kIHByaW50IHRo ZSBzdGF0aXN0aWMuCj4gPiBAQCAtMzUyLDcgKzM5Nyw3IEBAIGRlZiBydW5fdmlydGlvX2NvbnNv bGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAgICAgcmV0dXJuIHN0YXRzCj4gPiAgCj4g PiAKPiA+IC0gICAgZGVmIGluaXRfZ3Vlc3Qodm0sIHRpbWVvdXQ9Mik6Cj4gPiArICAgIGRlZiBf aW5pdF9ndWVzdCh2bSwgdGltZW91dD0yKToKPiA+ICAgICAgICAgICIiIgo+ID4gICAgICAgICAg RXhlY3V0ZSB2aXJ0aW9fZ3Vlc3QucHkgb24gZ3Vlc3QsIHdhaXQgdW50aWwgaXQgaXMKPiBpbml0 aWFsaXplZC4KPiA+ICAKPiA+IEBAIC0zODQsNiArNDI5LDIxIEBAIGRlZiBydW5fdmlydGlvX2Nv bnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAgICAgdGltZS5zbGVlcCgyKQo+ID4g IAo+ID4gCj4gPiArICAgIGRlZiBpbml0X2d1ZXN0KHZtLCBjb25zb2xlcyk6Cj4gPiArICAgICAg ICAiIiIKPiA+ICsgICAgICAgIFByZXBhcmVzIGd1ZXN0LCBleGVjdXRlcyB2aXJ0aW9fZ3Vlc3Qu cHkgYW5kIGluaXRpYWxpemUgZm9yCj4gdGVzdGluZwo+ID4gKwo+ID4gKyAgICAgICAgQHBhcmFt IHZtOiBJbmZvcm1hdGlvbnMgYWJvdXQgdGhlIGd1ZXN0Lgo+ID4gKyAgICAgICAgQHBhcmFtIGNv bnNvbGVzOiBJbmZvcm1hdGlvbnMgYWJvdXQgY29uc29sZXMKPiA+ICsgICAgICAgICIiIgo+ID4g KyAgICAgICAgY29uc3MgPSBbXQo+ID4gKyAgICAgICAgZm9yIG1vZGUgaW4gY29uc29sZXM6Cj4g PiArICAgICAgICAgICAgZm9yIGNvbnMgaW4gbW9kZToKPiA+ICsgICAgICAgICAgICAgICAgY29u c3MuYXBwZW5kKGNvbnMuZm9yX2d1ZXN0KCkpCj4gPiArICAgICAgICBfaW5pdF9ndWVzdCh2bSwg MTApCj4gPiArICAgICAgICBvbl9ndWVzdCgidmlydC5pbml0KCVzKSIgJSAoY29uc3MpLCB2bSwg MTApCj4gPiArCj4gPiArCj4gPiAgICAgIGRlZiBfb25fZ3Vlc3QoY29tbWFuZCwgdm0sIHRpbWVv dXQ9Mik6Cj4gPiAgICAgICAgICAiIiIKPiA+ICAgICAgICAgIEV4ZWN1dGUgZ2l2ZW4gY29tbWFu ZCBpbnNpZGUgdGhlIHNjcmlwdCdzIG1haW4gbG9vcCwKPiBpbmRpY2F0aW5nIHRoZSB2bQo+ID4g QEAgLTQyNSwyOSArNDg1LDYgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMs IGVudik6Cj4gPiAgICAgICAgICByZXR1cm4gKG1hdGNoLCBkYXRhKQo+ID4gIAo+ID4gCj4gPiAt ICAgIGRlZiBzb2NrZXRfcmVhZGFsbChzb2NrLCByZWFkX3RpbWVvdXQsIG1lc2FnZXNpemUpOgo+ ID4gLSAgICAgICAgIiIiCj4gPiAtICAgICAgICBSZWFkIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc29j a2V0Lgo+ID4gLQo+ID4gLSAgICAgICAgQHBhcmFtIHNvY2s6IFNvY2tldC4KPiA+IC0gICAgICAg IEBwYXJhbSByZWFkX3RpbWVvdXQ6IFJlYWQgdGltZW91dC4KPiA+IC0gICAgICAgIEBwYXJhbSBt ZXNhZ2VzaXplOiBTaXplIG9mIG1lc3NhZ2UuCj4gPiAtICAgICAgICAiIiIKPiA+IC0gICAgICAg IHNvY2tfZGVjcmlwdG9yID0gc29jay5maWxlbm8oKQo+ID4gLSAgICAgICAgc29jay5zZXR0aW1l b3V0KHJlYWRfdGltZW91dCkKPiA+IC0gICAgICAgIG1lc3NhZ2UgPSAiIgo+ID4gLSAgICAgICAg dHJ5Ogo+ID4gLSAgICAgICAgICAgIHdoaWxlIChsZW4obWVzc2FnZSkgPCBtZXNhZ2VzaXplKToK PiA+IC0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBzb2NrLnJlY3YobWVzYWdlc2l6ZSkKPiA+ IC0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgaW5zdDoKPiA+IC0gICAgICAgICAgICBpZiAo aW5zdC5hcmdzWzBdID09ICJ0aW1lZCBvdXQiKToKPiA+IC0gICAgICAgICAgICAgICAgbG9nZ2lu Zy5kZWJ1ZygiUmVhZGluZyB0aW1lb3V0IikKPiA+IC0gICAgICAgICAgICBlbHNlOgo+ID4gLSAg ICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGluc3QpCj4gPiAtICAgICAgICBzb2NrLnNldGJs b2NraW5nKDEpCj4gPiAtICAgICAgICByZXR1cm4gbWVzc2FnZQo+ID4gLQo+ID4gLQo+ID4gICAg ICBkZWYgX2d1ZXN0X2V4aXRfdGhyZWFkcyh2bSwgc2VuZF9wdHMsIHJlY3ZfcHRzKToKPiA+ICAg ICAgICAgICIiIgo+ID4gICAgICAgICAgU2FmZWx5IGV4ZWN1dGVzIG9uX2d1ZXN0KCJ2aXJ0LmV4 aXRfdGhyZWFkcygpIikgdXNpbmcKPiB3b3JrYXJvdW5kIG9mCj4gPiBAQCAtNDYzLDcgKzUwMCw3 IEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAg ICAgICAgIGxvZ2dpbmcuZGVidWcoIldvcmthcm91bmQgdGhlIHN0dWNrIHRocmVhZCBvbiBndWVz dCIpCj4gPiAgICAgICAgICAgICAgIyBUaHJlYWQgaXMgc3R1Y2tlZCBpbiByZWFkL3dyaXRlCj4g PiAgICAgICAgICAgICAgZm9yIHNlbmRfcHQgaW4gc2VuZF9wdHM6Cj4gPiAtICAgICAgICAgICAg ICAgIHNlbmRfcHRbMF0uc2VuZGFsbCgiLiIpCj4gPiArICAgICAgICAgICAgICAgIHNlbmRfcHQu c29jay5zZW5kYWxsKCIuIikKPiA+ICAgICAgICAgIGVsaWYgbWF0Y2ggIT0gMDoKPiA+ICAgICAg ICAgICAgICAjIFNvbWV0aGluZyBlbHNlCj4gPiAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVz dEZhaWwoIlVuZXhwZWN0ZWQgZmFpbFxuTWF0Y2g6Cj4gJXNcbkRhdGE6XG4lcyIKPiA+IEBAIC00 NzEsOCArNTA4LDggQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6 Cj4gPiAgCj4gPiAgICAgICAgICAjIFJlYWQtb3V0IGFsbCByZW1haW5pbmcgZGF0YQo+ID4gICAg ICAgICAgZm9yIHJlY3ZfcHQgaW4gcmVjdl9wdHM6Cj4gPiAtICAgICAgICAgICAgd2hpbGUgc2Vs ZWN0LnNlbGVjdChbcmVjdl9wdFswXV0sIFtdLCBbXSwgMC4xKVswXToKPiA+IC0gICAgICAgICAg ICAgICAgcmVjdl9wdFswXS5yZWN2KDEwMjQpCj4gPiArICAgICAgICAgICAgd2hpbGUgc2VsZWN0 LnNlbGVjdChbcmVjdl9wdC5zb2NrXSwgW10sIFtdLCAwLjEpWzBdOgo+ID4gKyAgICAgICAgICAg ICAgICByZWN2X3B0LnNvY2sucmVjdigxMDI0KQo+ID4gIAo+ID4gICAgICAgICAgIyBUaGlzIHdp bGwgY2F1c2UgZmFpbCBpbiBjYXNlIGFueXRoaW5nIHdlbnQgd3JvbmcuCj4gPiAgICAgICAgICBv bl9ndWVzdCgicHJpbnQgJ1BBU1M6IG5vdGhpbmcnIiwgdm0sIDEwKQo+ID4gQEAgLTQ4Miw2ICs1 MTksMTMgQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gPiAg ICAgICAgICAiIiIKPiA+ICAgICAgICAgIENyZWF0ZXMgdGhlIFZNIGFuZCBjb25uZWN0cyB0aGUg c3BlY2lmaWVkIG51bWJlciBvZgo+IGNvbnNvbGVzIGFuZCBzZXJpYWwKPiA+ICAgICAgICAgIHBv cnRzLgo+ID4gKyAgICAgICAgUG9ydHMgYXJlIGFsbG9jYXRlZCBieSAyIHBlciAxIHZpcnRpby1z ZXJpYWwtcGNpIGRldmljZQo+IHN0YXJ0aW5nIHdpdGgKPiA+ICsgICAgICAgIGNvbnNvbGUuICgz KzIgPT4gQ0N8Q1N8UzsgMCsyID0+IFNTOyAzKzQgPT4gQ0N8Q1N8U1N8UywKPiAuLi4pIFRoaXMg d2F5Cj4gPiArICAgICAgICBpdCdzIGVhc3kgdG8gdGVzdCBjb21tdW5pY2F0aW9uIG9uIHRoZSBz YW1lIG9yIGRpZmZlcmVudAo+ID4gKyAgICAgICAgdmlydGlvLXNlcmlhbC1wY2kgZGV2aWNlLgo+ ID4gKyAgICAgICAgRnVydGhlciBpbiB0ZXN0cyB0aGUgY29uc29sZXMgYXJlIGJlaW5nIHBpY2tl ZCBhbHdheXMgZnJvbQo+IHRoZSBmaXJzdAo+ID4gKyAgICAgICAgYXZhaWxhYmxlIG9uZSAoMysy OiAyeEMgPT4gQ0N8Y3N8cyA8Y29tbXVuaWNhdGlvbiBvbiB0aGUKPiBzYW1lIFBDST47Cj4gPiAr ICAgICAgICAyeEMsMXhTID0+IENDfGNTfHMgPGNvbW11bmljYXRpb24gYmV0d2VlbiAyIFBDSSBk ZXZzKQo+ID4gIAo+ID4gICAgICAgICAgQHBhcmFtIG5vX2NvbnNvbGU6IE51bWJlciBvZiBkZXNp cmVkIHZpcnRjb25zb2xlcy4KPiA+ICAgICAgICAgIEBwYXJhbSBub19zZXJpYWxwb3J0OiBOdW1i ZXIgb2YgZGVzaXJlZCB2aXJ0c2VyaWFscG9ydHMuCj4gPiBAQCAtNTA4LDEyICs1NTIsMTAgQEAg ZGVmIHJ1bl92aXJ0aW9fY29uc29sZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gPiAgICAgICAgICAg ICAgcGFyYW1zWydleHRyYV9wYXJhbXMnXSArPSAoIiAtZGV2aWNlCj4gdmlydHNlcmlhbHBvcnQs Y2hhcmRldj12cyVkLCIKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAibmFtZT1zZXJpYWxwb3J0LSVkLGlkPXAlZCIKPiAlIChpLCBpLCBpKSkKPiA+ICAKPiA+IC0K PiA+ICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIkJvb3RpbmcgZmlyc3QgZ3Vlc3QgJXMiLAo+IHBh cmFtcy5nZXQoIm1haW5fdm0iKSkKPiA+ICAgICAgICAgIGt2bV9wcmVwcm9jZXNzaW5nLnByZXBy b2Nlc3Nfdm0odGVzdCwgcGFyYW1zLCBlbnYsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhcmFtcy5nZXQoIm1haW5fdm0iKSkKPiA+ICAKPiA+IC0KPiA+ICAg ICAgICAgIHZtID0ga3ZtX3V0aWxzLmVudl9nZXRfdm0oZW52LCBwYXJhbXMuZ2V0KCJtYWluX3Zt IikpCj4gPiAgCj4gPiAgICAgICAgICBzZXNzaW9uID0ga3ZtX3Rlc3RfdXRpbHMud2FpdF9mb3Jf bG9naW4odm0sIDAsCj4gPiBAQCAtNTIyLDMwICs1NjQsMjE5IEBAIGRlZiBydW5fdmlydGlvX2Nv bnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gIAo+ID4gICAgICAgICAgIyBjb25uZWN0IHRo ZSBzb2NrZXRzCj4gPiAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBub19jb25zb2xlKToKPiA+ IC0gICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwKPiBzb2Nr ZXQuU09DS19TVFJFQU0pCj4gPiAtICAgICAgICAgICAgc29jay5jb25uZWN0KCIlcy8lZCIgJSAo dG1wX2RpciwgaSkpCj4gPiAtICAgICAgICAgICAgY29uc29sZXMuYXBwZW5kKFtzb2NrLCAiY29u c29sZS0lZCIgJSBpLCAieWVzIl0pCj4gPiArICAgICAgICAgICAgY29uc29sZXMuYXBwZW5kKFBv cnQoTm9uZSAsImNvbnNvbGUtJWQiICUgaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAieWVzIiwgIiVzLyVkIiAlICh0bXBfZGlyLCBpKSkpCj4gPiAgICAgICAgICBmb3Ig aSBpbiByYW5nZShub19jb25zb2xlLCBub19jb25zb2xlICsgbm9fc2VyaWFscG9ydCk6Cj4gPiAt ICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsCj4gc29ja2V0 LlNPQ0tfU1RSRUFNKQo+ID4gLSAgICAgICAgICAgIHNvY2suY29ubmVjdCgiJXMvJWQiICUgKHRt cF9kaXIsIGkpKQo+ID4gLSAgICAgICAgICAgIHNlcmlhbHBvcnRzLmFwcGVuZChbc29jaywgInNl cmlhbHBvcnQtJWQiICUgaSwgIm5vIl0pCj4gPiArICAgICAgICAgICAgc2VyaWFscG9ydHMuYXBw ZW5kKFBvcnQoTm9uZSAsInNlcmlhbHBvcnQtJWQiICUgaSwKPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibm8iLCAiJXMvJWQiICUgKHRtcF9kaXIsIGkpKSkKPiA+ICAK PiA+ICAgICAgICAgIHJldHVybiBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLCBbY29uc29sZXMsIHNl cmlhbHBvcnRzXQo+ID4gIAo+ID4gCj4gPiAtICAgIGRlZiB0ZXN0X3Ntb2tlKHZtLCBjb25zb2xl cywgcGFyYW1zKToKPiA+ICsgICAgZGVmIHRvcGVuKHZtLCBwb3J0KToKPiA+ICsgICAgICAgICIi Igo+ID4gKyAgICAgICAgT3BlbiB2aXJ0aW9jb25zb2xlIHBvcnQuCj4gPiArCj4gPiArICAgICAg ICBAcGFyYW0gdm06IFRhcmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGly XS4KPiA+ICsgICAgICAgIEBwYXJhbSBwb3J0OiBQb3J0IGlkZW50aWZpZXIuCj4gPiArICAgICAg ICAiIiIKPiA+ICsgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0Lm9wZW4oJyVzJykiICUgKHBvcnQubmFt ZSksIHZtLCAyKQo+ID4gKyAgICAgICAgcG9ydC5vcGVuKCkKPiA+ICsKPiA+ICsKPiA+ICsgICAg ZGVmIHRtdWx0aV9vcGVuKHZtLCBwb3J0KToKPiA+ICsgICAgICAgICIiIgo+ID4gKyAgICAgICAg TXVsdGlvcGVuIHZpcnRpb2NvbnNvbGUgcG9ydC4KPiA+ICsKPiA+ICsgICAgICAgIEBwYXJhbSB2 bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ID4gKyAg ICAgICAgQHBhcmFtIHBvcnQ6IFBvcnQgaWRlbnRpZmllci4KPiA+ICsgICAgICAgICIiIgo+ID4g KyAgICAgICAgb25fZ3Vlc3QoInZpcnQuY2xvc2UoJyVzJykiICUgKHBvcnQubmFtZSksIHZtLCAy KQo+ID4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQub3BlbignJXMnKSIgJSAocG9ydC5uYW1lKSwg dm0sIDIpCj4gPiArICAgICAgICBtYXRjaCA9IF9vbl9ndWVzdCgidmlydC5vcGVuKCclcycpIiAl IChwb3J0Lm5hbWUpLCB2bSwKPiAyKVswXQo+ID4gKyAgICAgICAgIyBDb25zb2xlIGlzIHBlcm1p dHRlZCB0byBvcGVuIHRoZSBkZXZpY2UgbXVsdGlwbGUgdGltZXMKPiA+ICsgICAgICAgIGlmIG1h dGNoICE9IDAgYW5kIHBvcnQucG9ydF90eXBlID09ICJ5ZXMiOgo+ID4gKyAgICAgICAgICAgIHJh aXNlIGVycm9yLlRlc3RGYWlsKCJVbmV4cGVjdGVkIGZhaWwgb2Ygb3Blbm5pbmcgdGhlCj4gY29u c29sZSIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRldmljZSBmb3Ig dGhlIDJuZCB0aW1lLiIpCj4gPiArICAgICAgICAjIFNlcmlhbCBwb3J0IGlzIGZvcmJpZGRlbiB0 byBvcGVuIHRoZSBkZXZpY2UgbXVsdGlwbGUKPiB0aW1lcwo+ID4gKyAgICAgICAgZWxpZiBtYXRj aCAhPSAxIGFuZCBwb3J0LnBvcnRfdHlwZSA9PSAibm8iOgo+ID4gKyAgICAgICAgICAgIHJhaXNl IGVycm9yLlRlc3RGYWlsKCJVbmV4cGV0ZGVkIHBhc3Mgb2Ygb3BwZW5pbmcgdGhlCj4gc2VyaWFs cG9ydCIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRldmljZSBmb3Ig dGhlIDJuZCB0aW1lLiIpCj4gPiArICAgICAgICBwb3J0Lm9wZW4oKQo+ID4gKwo+ID4gKyAgICBk ZWYgdGNsb3NlKHZtLCBwb3J0KToKPiA+ICsgICAgICAgICIiIgo+ID4gKyAgICAgICAgQ2xvc2Ug c29ja2V0Lgo+ID4gKwo+ID4gKyAgICAgICAgQHBhcmFtIHZtOiBUYXJnZXQgdmlydHVhbCBtYWNo aW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rpcl0uCj4gPiArICAgICAgICBAcGFyYW0gcG9ydDogUG9y dCB0byBvcGVuLgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICBvbl9ndWVzdCgidmlydC5j bG9zZSgnJXMnKSIgJSAocG9ydC5uYW1lKSwgdm0sIDIpCj4gPiArICAgICAgICBwb3J0LmNsb3Nl KCkKPiA+ICsKPiA+ICsKPiA+ICsgICAgZGVmIHRwb29saW5nKHZtLCBwb3J0KToKPiA+ICsgICAg ICAgICIiIgo+ID4gKyAgICAgICAgVGVzdCB0cnkgcG9vbGluZyBmdW5jdGlvbi4KPiA+ICsKPiA+ ICsgICAgICAgIEBwYXJhbSB2bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24s IHRtcF9kaXJdLgo+ID4gKyAgICAgICAgQHBhcmFtIHBvcnQ6IFBvcnQgdXNlZCBpbiB0ZXN0Lgo+ ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICAjIFBvbGwgKE9VVCkKPiA+ICsgICAgICAgIG9u X2d1ZXN0KCJ2aXJ0LnBvbGwoJyVzJywgJXMpIiAlIChwb3J0Lm5hbWUsCj4gc2VsZWN0LlBPTExP VVQpLCB2bSwKPiA+ICsgICAgICAgICAgICAgICAgIDIpCj4gPiArCj4gPiArICAgICAgICAjIFBv bGwgKElOLCBPVVQpCj4gPiArICAgICAgICBwb3J0LnNvY2suc2VuZGFsbCgidGVzdCIpCj4gPiAr ICAgICAgICBmb3IgdGVzdCBpbiBbc2VsZWN0LlBPTExJTiwgc2VsZWN0LlBPTExPVVRdOgo+ID4g KyAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnBvbGwoJyVzJywgJXMpIiAlIChwb3J0Lm5hbWUs IHRlc3QpLCB2bSwKPiAyKQo+ID4gKwo+ID4gKyAgICAgICAgIyBQb2xsIChJTiBIVVApCj4gPiAr ICAgICAgICAjIEkgc3RvcmUgdGhlIHNvY2tldCBpbmZvcm1hdGlvbnMgYW5kIGNsb3NlIHRoZSBz b2NrZXQKPiA+ICsgICAgICAgIHBvcnQuY2xvc2UoKQo+ID4gKyAgICAgICAgZm9yIHRlc3QgaW4g W3NlbGVjdC5QT0xMSU4sIHNlbGVjdC5QT0xMSFVQXToKPiA+ICsgICAgICAgICAgICBvbl9ndWVz dCgidmlydC5wb2xsKCclcycsICVzKSIgJSAocG9ydC5uYW1lLCB0ZXN0KSwgdm0sCj4gMikKPiA+ ICsKPiA+ICsgICAgICAgICMgUG9sbCAoSFVQKQo+ID4gKyAgICAgICAgb25fZ3Vlc3QoInZpcnQu cmVjdignJXMnLCA0LCAxMDI0LCBGYWxzZSkiICUgKHBvcnQubmFtZSksCj4gdm0sIDIpCj4gPiAr ICAgICAgICBvbl9ndWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAocG9ydC5uYW1lLAo+IHNl bGVjdC5QT0xMSFVQKSwgdm0sCj4gPiArICAgICAgICAgICAgICAgICAyKQo+ID4gKwo+ID4gKyAg ICAgICAgIyBSZWNvbm5lY3QgdGhlIHNvY2tldAo+ID4gKyAgICAgICAgcG9ydC5vcGVuKCkKPiA+ ICsgICAgICAgICMgUmVkZWZpbmUgc29ja2V0IGluIGNvbnNvbGVzCj4gPiArICAgICAgICBvbl9n dWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAocG9ydC5uYW1lLAo+IHNlbGVjdC5QT0xMT1VU KSwgdm0sCj4gPiArICAgICAgICAgICAgICAgICAyKQo+ID4gKwo+ID4gKwo+ID4gKyAgICBkZWYg dHJ3X2hvc3Rfb2ZmbGluZSh2bSwgcG9ydCk6Cj4gPiArICAgICAgICAiIiIKPiA+ICsgICAgICAg IEd1ZXN0IHJlYWQvd3JpdGUgZnJvbSBob3N0IHdoZW4gaG9zdCBpcyBkaXNjb25uZWN0ZWQuCj4g PiArCj4gPiArICAgICAgICBAcGFyYW0gdm06IFRhcmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBz ZXNzaW9uLCB0bXBfZGlyXS4KPiA+ICsgICAgICAgIEBwYXJhbSBwb3J0OiBQb3J0IHVzZWQgaW4g dGVzdC4KPiA+ICsgICAgICAgICIiIgo+ID4gKyAgICAgICAgaWYgcG9ydC5pc19vcGVuOgo+ID4g KyAgICAgICAgICAgIHBvcnQuY2xvc2UoKQo+ID4gKwo+ID4gKyAgICAgICAgIyBSZWFkIHNob3Vs ZCBwYXNzCj4gPiArICAgICAgICAjIEZJWE1FOiBDb25zb2xlIGRvZXNuJ3Qgc3VwcG9ydCBwb2xs aW5nIChQT0xMSFVQIHdpdGhvdXQKPiBob3N0IHNob290cwo+ID4gKyAgICAgICAgIyB0aGUgZ3Vl c3QgT1MpCj4gPiArICAgICAgICBpZiBwb3J0LnBvcnRfdHlwZSAhPSAieWVzIjoKPiA+ICsgICAg ICAgICAgICBvbl9ndWVzdCgidmlydC5yZWN2KCclcycsIDAsIDEwMjQsIEZhbHNlKSIgJSBwb3J0 Lm5hbWUsCj4gdm0sIDIpCj4gPiArICAgICAgICBlbHNlOiAjIFNraXAgdGhpcyB0ZXN0IG9uIHZp cnRpby1jb25zb2xlIHBvcnQKPiA+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgi VGhpcyB0ZXN0IGlzIHVuYWJsZSB0byBydW4gd2l0aAo+IHZpcnRpbyIKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIGNvbnNvbGUuIFBsZWFzZSBzZWUgdGhlIGluX2NvZGUK PiBGSVhNRSIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vdGUgZm9y IG1vcmUgaW5mby5cbiIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tp cHBpbmcgdGhpcyByb3VuZC4iKQo+ID4gKyAgICAgICAgIyBXcml0ZSBzaG91bGQgdGltZWQtb3V0 Cj4gPiArICAgICAgICBtYXRjaCwgdG1wID0gX29uX2d1ZXN0KCJ2aXJ0LnNlbmQoJyVzJywgMTAs IEZhbHNlKSIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgcG9ydC5uYW1l LCB2bSwgMikKPiA+ICsgICAgICAgIGlmIG1hdGNoICE9IE5vbmU6Cj4gPiArICAgICAgICAgICAg cmFpc2UgZXJyb3IuVGVzdEZhaWwoIldyaXRlIG9uIGd1ZXN0IHdoaWxlIGhvc3QKPiBkaXNjb25u ZWN0ZWQgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWRuJ3QgdGlt ZWQgb3V0LlxuT3V0cHV0OlxuJXMiCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJSB0bXApCj4gPiArCj4gPiArICAgICAgICBwb3J0Lm9wZW4oKQo+ID4gKwo+ID4gKyAgICAg ICAgaWYgKHBvcnQuc29jay5yZWN2KDEwMjQpIDwgMTApOgo+ID4gKyAgICAgICAgICAgIHJhaXNl IGVycm9yLlRlc3RGYWlsKCJEaWRuJ3QgcmVjZWl2ZWQgZGF0YSBmcm9tCj4gZ3Vlc3QiKQo+ID4g KyAgICAgICAgIyBOb3cgdGhlIF9vbl9ndWVzdCgidmlydC5zZW5kKCclcycuLi4gY29tbWFuZCBz aG91bGQgYmUKPiBmaW5pc2hlZAo+ID4gKyAgICAgICAgb25fZ3Vlc3QoInByaW50ICdQQVNTOiBu b3RoaW5nJyIsIHZtLCAyKQo+ID4gKwo+ID4gKwo+ID4gKyAgICBkZWYgdHJ3X2Jsb2NraW5nX21v ZGUodm0sIHBvcnQpOgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICBHdWVzdCByZWFkXHdy aXRlIGRhdGEgaW4gYmxvY2tpbmcgbW9kZS4KPiA+ICsKPiA+ICsgICAgICAgIEBwYXJhbSB2bTog VGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ID4gKyAgICAg ICAgQHBhcmFtIHBvcnQ6IFBvcnQgdXNlZCBpbiB0ZXN0Lgo+ID4gKyAgICAgICAgIiIiCj4gPiAr ICAgICAgICAjIEJsb2NraW5nIG1vZGUKPiA+ICsgICAgICAgIGlmIG5vdCBwb3J0LmlzX29wZW46 Cj4gPiArICAgICAgICAgICAgcG9ydC5vcGVuKCkKPiA+ICsgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0 LmJsb2NraW5nKCclcycsIFRydWUpIiAlIHBvcnQubmFtZSwgdm0sIDIpCj4gPiArICAgICAgICAj IFJlY3Ygc2hvdWxkIHRpbWVkIG91dAo+ID4gKyAgICAgICAgbWF0Y2gsIHRtcCA9IF9vbl9ndWVz dCgidmlydC5yZWN2KCclcycsIDEwLCAxMDI0LCBGYWxzZSkiCj4gJQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwb3J0Lm5hbWUsIHZtLCAyKQo+ID4gKyAgICAgICAgaWYgbWF0 Y2ggPT0gMDoKPiA+ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiUmVjZWl2ZWQg ZGF0YSBldmVuIHdoZW4gbm9uIHdlcmUKPiBzZW50XG4iCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkRhdGE6XG4lcyIgJSB0bXApCj4gPiArICAgICAgICBlbGlmIG1hdGNo ICE9IE5vbmU6Cj4gPiArICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIlVuZXhwZWN0 ZWQgZmFpbFxuTWF0Y2g6Cj4gJXNcbkRhdGE6XG4lcyIgJQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChtYXRjaCwgdG1wKSkKPiA+ICsgICAgICAgIHBvcnQuc29jay5zZW5k YWxsKCIxMjM0NTY3ODkwIikKPiA+ICsgICAgICAgICMgTm93IGd1ZXN0IHJlY2VpdmVkIHRoZSBk YXRhIGVuZCBlc2NhcGVkIGZyb20gdGhlIHJlY3YoKQo+ID4gKyAgICAgICAgb25fZ3Vlc3QoInBy aW50ICdQQVNTOiBub3RoaW5nJyIsIHZtLCAyKQo+ID4gKwo+ID4gKwo+ID4gKyAgICBkZWYgdHJ3 X25vbmJsb2NraW5nX21vZGUodm0sIHBvcnQpOgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAg ICBHdWVzdCByZWFkXHdyaXRlIGRhdGEgaW4gbm9uYmxvY2tpbmcgbW9kZS4KPiA+ICsKPiA+ICsg ICAgICAgIEBwYXJhbSB2bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRt cF9kaXJdLgo+ID4gKyAgICAgICAgQHBhcmFtIHBvcnQ6IFBvcnQgdXNlZCBpbiB0ZXN0Lgo+ID4g KyAgICAgICAgIiIiCj4gPiArICAgICAgICAjIE5vbi1ibG9ja2luZyBtb2RlCj4gPiArICAgICAg ICBpZiBub3QgcG9ydC5pc19vcGVuOgo+ID4gKyAgICAgICAgICAgIHBvcnQub3BlbigpCj4gPiAr ICAgICAgICBvbl9ndWVzdCgidmlydC5ibG9ja2luZygnJXMnLCBGYWxzZSkiICUgcG9ydC5uYW1l LCB2bSwgMikKPiA+ICsgICAgICAgICMgUmVjdiBzaG91bGQgcmV0dXJuIEZBSUwgd2l0aCAwIHJl Y2VpdmVkIGRhdGEKPiA+ICsgICAgICAgIG1hdGNoLCB0bXAgPSBfb25fZ3Vlc3QoInZpcnQucmVj dignJXMnLCAxMCwgMTAyNCwgRmFsc2UpIgo+ICUKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwb3J0Lm5hbWUsIHZtLCAyKQo+ID4gKyAgICAgICAgaWYgbWF0Y2ggPT0gMDoKPiA+ ICsgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiUmVjZWl2ZWQgZGF0YSBldmVuIHdo ZW4gbm9uIHdlcmUKPiBzZW50XG4iCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkRhdGE6XG4lcyIgJSB0bXApCj4gPiArICAgICAgICBlbGlmIG1hdGNoID09IE5vbmU6Cj4g PiArICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIlRpbWVkIG91dCwgcHJvYmFibHkg aW4gYmxvY2tpbmcKPiBtb2RlXG4iCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkRhdGE6XG4lcyIgJSB0bXApCj4gPiArICAgICAgICBlbGlmIG1hdGNoICE9IDE6Cj4gPiAr ICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIlVuZXhwZWN0ZWQgZmFpbFxuTWF0Y2g6 Cj4gJXNcbkRhdGE6XG4lcyIgJQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChtYXRjaCwgdG1wKSkKPiA+ICsgICAgICAgIHBvcnQuc29jay5zZW5kYWxsKCIxMjM0NTY3ODkw IikKPiA+ICsgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMTAsIDEwMjQsIEZhbHNl KSIgJSBwb3J0Lm5hbWUsCj4gdm0sIDIpCj4gPiArCj4gPiArCj4gPiArICAgIGRlZiB0YmFzaWNf bG9vcGJhY2sodm0sIHNlbmRfcG9ydCwgcmVjdl9wb3J0LCBkYXRhPSJTbW9rZSB0ZXN0Cj4gZGF0 YSIpOgo+ID4gKyAgICAgICAgIiIiCj4gPiArICAgICAgICBFYXN5IGxvb3AgYmFjayB0ZXN0IHdp dGggbG9vcCBvdmVyIG9ubHkgdHdvIHBvcnQuCj4gPiArCj4gPiArICAgICAgICBAcGFyYW0gdm06 IFRhcmdldCB2aXJ0dWFsIG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXS4KPiA+ICsgICAg ICAgIEBwYXJhbSBwb3J0OiBQb3J0IHVzZWQgaW4gdGVzdC4KPiA+ICsgICAgICAgICIiIgo+ID4g KyAgICAgICAgaWYgbm90IHNlbmRfcG9ydC5pc19vcGVuOgo+ID4gKyAgICAgICAgICAgIHNlbmRf cG9ydC5vcGVuKCkKPiA+ICsgICAgICAgIGlmIG5vdCByZWN2X3BvcnQuaXNfb3BlbjoKPiA+ICsg ICAgICAgICAgICByZWN2X3BvcnQub3BlbigpCj4gPiArICAgICAgICBvbl9ndWVzdCgidmlydC5s b29wYmFjayhbJyVzJ10sIFsnJXMnXSwgMTAyNCwKPiB2aXJ0LkxPT1BfTk9ORSkiICUKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAoc2VuZF9wb3J0Lm5hbWUsIHJlY3ZfcG9ydC5uYW1lKSwgdm0s IDIpCj4gPiArICAgICAgICBzZW5kX3BvcnQuc29jay5zZW5kYWxsKGRhdGEpCj4gPiArICAgICAg ICB0bXAgPSAiIgo+ID4gKyAgICAgICAgaSA9IDAKPiA+ICsgICAgICAgIHdoaWxlIGkgPD0gMTA6 Cj4gPiArICAgICAgICAgICAgaSArPSAxCj4gPiArICAgICAgICAgICAgcmV0ID0gc2VsZWN0LnNl bGVjdChbcmVjdl9wb3J0LnNvY2tdLCBbXSwgW10sIDEuMCkKPiA+ICsgICAgICAgICAgICBpZiBy ZXQ6Cj4gPiArICAgICAgICAgICAgICAgIHRtcCArPSByZWN2X3BvcnQuc29jay5yZWN2KDEwMjQp Cj4gPiArICAgICAgICAgICAgaWYgbGVuKHRtcCkgPj0gbGVuKGRhdGEpOgo+ID4gKyAgICAgICAg ICAgICAgICBicmVhawo+ID4gKyAgICAgICAgaWYgdG1wICE9IGRhdGE6Cj4gPiArICAgICAgICAg ICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIkluY29ycmVjdCBkYXRhOiAnJXMnICE9ICclcyciLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRtcCkKPiA+ICsgICAg ICAgIF9ndWVzdF9leGl0X3RocmVhZHModm0sIFtzZW5kX3BvcnRdLCBbcmVjdl9wb3J0XSkKPiA+ ICsKPiA+ICsKPiA+ICsgICAgZGVmIHRlc3Rfc21va2UodGVzdCwgdm0sIGNvbnNvbGVzLCBwYXJh bXMpOgo+ID4gICAgICAgICAgIiIiCj4gPiAgICAgICAgICBWaXJ0aW8gY29uc29sZSBzbW9rZSB0 ZXN0Lgo+ID4gIAo+ID4gICAgICAgICAgVGVzdHMgdGhlIGJhc2ljIGZ1bmN0aW9uYWxpdGllcyAo cG9sbCwgcmVhZC93cml0ZSB3aXRoIGFuZAo+IHdpdGhvdXQKPiA+ICAgICAgICAgIGNvbm5lY3Rl ZCBob3N0LCBldGMuCj4gPiAgCj4gPiAtICAgICAgICBAcGFyYW0gdm06IHRhcmdldCB2aXJ0dWFs IG1hY2hpbmUgW3ZtLCBzZXNzaW9uLCB0bXBfZGlyXQo+ID4gLSAgICAgICAgQHBhcmFtIGNvbnNv bGVzOiBhIGZpZWxkIG9mIHZpcnRpbyBwb3J0cyB3aXRoIHRoZSBtaW5pbXVtCj4gb2YgMiBpdGVt cwo+ID4gLSAgICAgICAgQHBhcmFtIHBhcmFtczogdGVzdCBwYXJhbWV0ZXJzICckY29uc29sZV90 eXBlOiRkYXRhOy4uLicKPiA+ICsgICAgICAgIEBwYXJhbSB2bTogVGFyZ2V0IHZpcnR1YWwgbWFj aGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ID4gKyAgICAgICAgQHBhcmFtIGNvbnNvbGVz OiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBvZgo+IDIgaXRlbXMuCj4g PiArICAgICAgICBAcGFyYW0gcGFyYW1zOiBUZXN0IHBhcmFtZXRlcnMgJyRjb25zb2xlX3R5cGU6 JGRhdGE7Li4uJwo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICBsb2dnaW5nLmluZm8oIlNt b2tlIHRlc3Q6IFRlc3RzIHRoZSBiYXNpYyBjYXBhYmlsaXRpZXMgb2YKPiAiCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgInZpcnRpb19jb25zb2xlcy4iKQo+ID4gICAgICAgICAgIyBQUkVQQVJF Cj4gPiAgICAgICAgICBmb3IgcGFyYW0gaW4gcGFyYW1zLnNwbGl0KCc7Jyk6Cj4gPiAgICAgICAg ICAgICAgaWYgbm90IHBhcmFtOgo+ID4gQEAgLTU2MCwxMjEgKzc5MSwxOCBAQCBkZWYgcnVuX3Zp cnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAgICAgICAgICBzZW5kX3B0 ID0gY29uc29sZXNbcGFyYW1dWzBdCj4gPiAgICAgICAgICAgICAgcmVjdl9wdCA9IGNvbnNvbGVz W3BhcmFtXVsxXQo+ID4gIAo+ID4gLSAgICAgICAgICAgICMgVEVTVAo+ID4gLSAgICAgICAgICAg ICMgUG9sbCAoT1VUKQo+ID4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnBvbGwoJyVzJywg JXMpIiAlIChzZW5kX3B0WzFdLAo+IHNlbGVjdC5QT0xMT1VUKSwgdm0sCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgMikKPiA+IC0KPiA+IC0gICAgICAgICAgICAjIFBvbGwgKElOLCBPVVQpCj4g PiAtICAgICAgICAgICAgc2VuZF9wdFswXS5zZW5kYWxsKCJ0ZXN0IikKPiA+IC0gICAgICAgICAg ICBmb3IgdGVzdCBpbiBbc2VsZWN0LlBPTExJTiwgc2VsZWN0LlBPTExPVVRdOgo+ID4gLSAgICAg ICAgICAgICAgICBvbl9ndWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAoc2VuZF9wdFsxXSwK PiB0ZXN0KSwgdm0sIDIpCj4gPiAtCj4gPiAtICAgICAgICAgICAgIyBQb2xsIChJTiBIVVApCj4g PiAtICAgICAgICAgICAgIyBJIHN0b3JlIHRoZSBzb2NrZXQgaW5mb3JtYXRpb25zIGFuZCBjbG9z ZSB0aGUgc29ja2V0Cj4gPiAtICAgICAgICAgICAgc29jayA9IHNlbmRfcHRbMF0KPiA+IC0gICAg ICAgICAgICBzZW5kX3B0WzBdID0gc29jay5nZXRwZWVybmFtZSgpCj4gPiAtICAgICAgICAgICAg c29jay5zaHV0ZG93bigyKQo+ID4gLSAgICAgICAgICAgIHNvY2suY2xvc2UoKQo+ID4gLSAgICAg ICAgICAgIGRlbCBzb2NrCj4gPiAtICAgICAgICAgICAgZm9yIHRlc3QgaW4gW3NlbGVjdC5QT0xM SU4sIHNlbGVjdC5QT0xMSFVQXToKPiA+IC0gICAgICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQu cG9sbCgnJXMnLCAlcykiICUgKHNlbmRfcHRbMV0sCj4gdGVzdCksIHZtLCAyKQo+ID4gLQo+ID4g LSAgICAgICAgICAgICMgUG9sbCAoSFVQKQo+ID4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0 LnJlY3YoJyVzJywgNCwgMTAyNCwgRmFsc2UpIiAlCj4gKHNlbmRfcHRbMV0pLCB2bSwgMikKPiA+ IC0gICAgICAgICAgICBvbl9ndWVzdCgidmlydC5wb2xsKCclcycsICVzKSIgJSAoc2VuZF9wdFsx XSwKPiBzZWxlY3QuUE9MTEhVUCksIHZtLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgIDIpCj4g PiAtCj4gPiAtICAgICAgICAgICAgIyBSZWNvbm5lY3QgdGhlIHNvY2tldAo+ID4gLSAgICAgICAg ICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLAo+IHNvY2tldC5TT0NLX1NU UkVBTSkKPiA+IC0gICAgICAgICAgICBzb2NrLmNvbm5lY3Qoc2VuZF9wdFswXSkKPiA+IC0gICAg ICAgICAgICBzZW5kX3B0WzBdID0gc29jawo+ID4gLSAgICAgICAgICAgICMgUmVkZWZpbmUgc29j a2V0IGluIGNvbnNvbGVzCj4gPiAtICAgICAgICAgICAgY29uc29sZXNbcGFyYW1dWzBdID0gc2Vu ZF9wdAo+ID4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnBvbGwoJyVzJywgJXMpIiAlIChz ZW5kX3B0WzFdLAo+IHNlbGVjdC5QT0xMT1VUKSwgdm0sCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgMikKPiA+IC0KPiA+IC0gICAgICAgICAgICAjIFJlYWQvd3JpdGUgd2l0aG91dCBob3N0IGNv bm5lY3RlZAo+ID4gLSAgICAgICAgICAgICMgSSBzdG9yZSB0aGUgc29ja2V0IGluZm9ybWF0aW9u cyBhbmQgY2xvc2UgdGhlIHNvY2tldAo+ID4gLSAgICAgICAgICAgIHNvY2sgPSBzZW5kX3B0WzBd Cj4gPiAtICAgICAgICAgICAgc2VuZF9wdFswXSA9IHNvY2suZ2V0cGVlcm5hbWUoKQo+ID4gLSAg ICAgICAgICAgIHNvY2suc2h1dGRvd24oMikKPiA+IC0gICAgICAgICAgICBzb2NrLmNsb3NlKCkK PiA+IC0gICAgICAgICAgICBkZWwgc29jawo+ID4gLSAgICAgICAgICAgICMgUmVhZCBzaG91bGQg cGFzcwo+ID4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnJlY3YoJyVzJywgMCwgMTAyNCwg RmFsc2UpIiAlCj4gc2VuZF9wdFsxXSwgdm0sIDIpCj4gPiAtICAgICAgICAgICAgIyBXcml0ZSBz aG91bGQgdGltZWQtb3V0Cj4gPiAtICAgICAgICAgICAgbWF0Y2gsIHRtcCA9IF9vbl9ndWVzdCgi dmlydC5zZW5kKCclcycsIDEwLCBGYWxzZSkiCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJSBzZW5kX3B0WzFdLCB2bSwgMikKPiA+IC0gICAgICAgICAgICBpZiBtYXRj aCAhPSBOb25lOgo+ID4gLSAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiUmVh ZCBvbiBndWVzdCB3aGlsZSBob3N0Cj4gZGlzY29ubmVjdGVkICIKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImRpZG4ndCB0aW1lZAo+IG91dC5cbk91dHB1dDpcbiVz Igo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRtcCkKPiA+IC0g ICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwKPiBzb2NrZXQu U09DS19TVFJFQU0pCj4gPiAtICAgICAgICAgICAgc29jay5jb25uZWN0KHNlbmRfcHRbMF0pCj4g PiAtICAgICAgICAgICAgc2VuZF9wdFswXSA9IHNvY2sKPiA+IC0KPiA+IC0gICAgICAgICAgICAj IFJlZGVmaW5lIHNvY2tldCBpbiBjb25zb2xlcwo+ID4gLSAgICAgICAgICAgIGNvbnNvbGVzW3Bh cmFtXVswXSA9IHNlbmRfcHQKPiA+IC0gICAgICAgICAgICBpZiAoc2VuZF9wdFswXS5yZWN2KDEw MjQpIDwgMTApOgo+ID4gLSAgICAgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCgiRGlk bid0IHJlY2VpdmVkIGRhdGEgZnJvbQo+IGd1ZXN0IikKPiA+IC0gICAgICAgICAgICAjIE5vdyB0 aGUgX29uX2d1ZXN0KCJ2aXJ0LnNlbmQoJyVzJy4uLiBjb21tYW5kIHNob3VsZAo+IGJlIGZpbmlz aGVkCj4gPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInByaW50ICdQQVNTOiBub3RoaW5nJyIsIHZt LCAyKQo+ID4gLQo+ID4gLSAgICAgICAgICAgICMgTm9uLWJsb2NraW5nIG1vZGUKPiA+IC0gICAg ICAgICAgICBvbl9ndWVzdCgidmlydC5ibG9ja2luZygnJXMnLCBGYWxzZSkiICUgc2VuZF9wdFsx XSwgdm0sCj4gMikKPiA+IC0gICAgICAgICAgICAjIFJlY3Ygc2hvdWxkIHJldHVybiBGQUlMIHdp dGggMCByZWNlaXZlZCBkYXRhCj4gPiAtICAgICAgICAgICAgbWF0Y2gsIHRtcCA9IF9vbl9ndWVz dCgidmlydC5yZWN2KCclcycsIDEwLCAxMDI0LAo+IEZhbHNlKSIgJQo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9wdFsxXSwgdm0sIDIpCj4gPiAtICAgICAgICAg ICAgaWYgbWF0Y2ggPT0gMDoKPiA+IC0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZh aWwoIlJlY2VpdmVkIGRhdGEgZXZlbiB3aGVuIG5vbgo+IHdlcmUgc2VudFxuIgo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YTpcbiVzIiAlIHRtcCkKPiA+IC0g ICAgICAgICAgICBlbGlmIG1hdGNoID09IE5vbmU6Cj4gPiAtICAgICAgICAgICAgICAgIHJhaXNl IGVycm9yLlRlc3RGYWlsKCJUaW1lZCBvdXQsIHByb2JhYmx5IGluCj4gYmxvY2tpbmcgbW9kZVxu Igo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YTpcbiVzIiAl IHRtcCkKPiA+IC0gICAgICAgICAgICBlbGlmIG1hdGNoICE9IDE6Cj4gPiAtICAgICAgICAgICAg ICAgIHJhaXNlIGVycm9yLlRlc3RGYWlsKCJVbmV4cGVjdGVkIGZhaWxcbk1hdGNoOgo+ICVzXG5E YXRhOlxuJXMiICUKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h dGNoLCB0bXApKQo+ID4gLSAgICAgICAgICAgIHNlbmRfcHRbMF0uc2VuZGFsbCgiMTIzNDU2Nzg5 MCIpCj4gPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQucmVjdignJXMnLCAxMCwgMTAyNCwg RmFsc2UpIiAlCj4gc2VuZF9wdFsxXSwgdm0sIDIpCj4gPiAtCj4gPiAtICAgICAgICAgICAgIyBC bG9ja2luZyBtb2RlCj4gPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQuYmxvY2tpbmcoJyVz JywgVHJ1ZSkiICUgc2VuZF9wdFsxXSwgdm0sCj4gMikKPiA+IC0gICAgICAgICAgICAjIFJlY3Yg c2hvdWxkIHRpbWVkIG91dAo+ID4gLSAgICAgICAgICAgIG1hdGNoLCB0bXAgPSBfb25fZ3Vlc3Qo InZpcnQucmVjdignJXMnLCAxMCwgMTAyNCwKPiBGYWxzZSkiICUKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlbmRfcHRbMV0sIHZtLCAyKQo+ID4gLSAgICAgICAgICAg IGlmIG1hdGNoID09IDA6Cj4gPiAtICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWls KCJSZWNlaXZlZCBkYXRhIGV2ZW4gd2hlbiBub24KPiB3ZXJlIHNlbnRcbiIKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGE6XG4lcyIgJSB0bXApCj4gPiAtICAg ICAgICAgICAgZWxpZiBtYXRjaCAhPSBOb25lOgo+ID4gLSAgICAgICAgICAgICAgICByYWlzZSBl cnJvci5UZXN0RmFpbCgiVW5leHBlY3RlZCBmYWlsXG5NYXRjaDoKPiAlc1xuRGF0YTpcbiVzIiAl Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXRjaCwgdG1wKSkK PiA+IC0gICAgICAgICAgICBzZW5kX3B0WzBdLnNlbmRhbGwoIjEyMzQ1Njc4OTAiKQo+ID4gLSAg ICAgICAgICAgICMgTm93IGd1ZXN0IHJlY2VpdmVkIHRoZSBkYXRhIGVuZCBlc2NhcGVkIGZyb20g dGhlCj4gcmVjdigpCj4gPiAtICAgICAgICAgICAgb25fZ3Vlc3QoInByaW50ICdQQVNTOiBub3Ro aW5nJyIsIHZtLCAyKQo+ID4gLQo+ID4gLSAgICAgICAgICAgICMgQmFzaWMgbG9vcGJhY2sgdGVz dAo+ID4gLSAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0Lmxvb3BiYWNrKFsnJXMnXSwgWyclcydd LCAxMDI0LAo+IHZpcnQuTE9PUF9OT05FKSIgJQo+ID4gLSAgICAgICAgICAgICAgICAgICAgIChz ZW5kX3B0WzFdLCByZWN2X3B0WzFdKSwgdm0sIDIpCj4gPiAtICAgICAgICAgICAgc2VuZF9wdFsw XS5zZW5kYWxsKGRhdGEpCj4gPiAtICAgICAgICAgICAgdG1wID0gIiIKPiA+IC0gICAgICAgICAg ICBpID0gMAo+ID4gLSAgICAgICAgICAgIHdoaWxlIGkgPD0gMTA6Cj4gPiAtICAgICAgICAgICAg ICAgIGkgKz0gMQo+ID4gLSAgICAgICAgICAgICAgICByZXQgPSBzZWxlY3Quc2VsZWN0KFtyZWN2 X3B0WzBdXSwgW10sIFtdLCAxLjApCj4gPiAtICAgICAgICAgICAgICAgIGlmIHJldDoKPiA+IC0g ICAgICAgICAgICAgICAgICAgIHRtcCArPSByZWN2X3B0WzBdLnJlY3YoMTAyNCkKPiA+IC0gICAg ICAgICAgICAgICAgaWYgbGVuKHRtcCkgPj0gbGVuKGRhdGEpOgo+ID4gLSAgICAgICAgICAgICAg ICAgICAgYnJlYWsKPiA+IC0gICAgICAgICAgICBpZiB0bXAgIT0gZGF0YToKPiA+IC0gICAgICAg ICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoIkluY29ycmVjdCBkYXRhOiAnJXMnICE9Cj4g JyVzJyIsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHRt cCkKPiA+IC0gICAgICAgICAgICBfZ3Vlc3RfZXhpdF90aHJlYWRzKHZtLCBbc2VuZF9wdF0sIFty ZWN2X3B0XSkKPiA+IC0KPiA+IC0gICAgICAgIHJldHVybiBjb25zb2xlcwo+ID4gLQo+ID4gLQo+ ID4gLSAgICBkZWYgdGVzdF9sb29wYmFjayh2bSwgY29uc29sZXMsIHBhcmFtcyk6Cj4gPiArICAg ICAgICAgICAgdGVzdC5kb190ZXN0KHRvcGVuLCBbdm0sIHNlbmRfcHRdICwgVHJ1ZSkKPiA+ICsg ICAgICAgICAgICB0ZXN0LmRvX3Rlc3QodGNsb3NlLCBbdm0sIHNlbmRfcHRdLCBUcnVlKQo+ID4g KyAgICAgICAgICAgIHRlc3QuZG9fdGVzdCh0bXVsdGlfb3BlbiwgW3ZtLCBzZW5kX3B0XSwgVHJ1 ZSkKPiA+ICsgICAgICAgICAgICB0ZXN0LmRvX3Rlc3QodHBvb2xpbmcsIFt2bSwgc2VuZF9wdF0p Cj4gPiArICAgICAgICAgICAgdGVzdC5kb190ZXN0KHRyd19ob3N0X29mZmxpbmUsIFt2bSwgc2Vu ZF9wdF0pCj4gPiArICAgICAgICAgICAgdGVzdC5kb190ZXN0KHRyd19ub25ibG9ja2luZ19tb2Rl LCBbdm0sIHNlbmRfcHRdKQo+ID4gKyAgICAgICAgICAgIHRlc3QuZG9fdGVzdCh0cndfYmxvY2tp bmdfbW9kZSwgW3ZtLCBzZW5kX3B0XSkKPiA+ICsgICAgICAgICAgICB0ZXN0LmRvX3Rlc3QodGJh c2ljX2xvb3BiYWNrLCBbdm0sIHNlbmRfcHQsIHJlY3ZfcHRdLAo+IGRhdGEpCj4gPiArCj4gPiAr Cj4gPiArCj4gPiArICAgIGRlZiB0bG9vcGJhY2sodm0sIGNvbnNvbGVzLCBwYXJhbXMpOgo+ID4g ICAgICAgICAgIiIiCj4gPiAgICAgICAgICBWaXJ0aW8gY29uc29sZSBsb29wYmFjayB0ZXN0Lgo+ ID4gIAo+ID4gQEAgLTY4MiwxNiArODEwLDEzIEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVz dCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAgICAgcG9ydHMgYW5kIHNlbmRzIGxlbmd0aCBhbW91 bnQgb2YgZGF0YSB0aHJvdWdoIHRoaXMKPiBjb25uZWN0aW9uLgo+ID4gICAgICAgICAgSXQgdmFs aWRhdGVzIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgZGF0YSBzZW50Lgo+ID4gIAo+ID4gLSAgICAg ICAgQHBhcmFtIHZtOiB0YXJnZXQgdmlydHVhbCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwgdG1wX2Rp cl0KPiA+IC0gICAgICAgIEBwYXJhbSBjb25zb2xlczogYSBmaWVsZCBvZiB2aXJ0aW8gcG9ydHMg d2l0aCB0aGUgbWluaW11bQo+IG9mIDIgaXRlbXMKPiA+ICsgICAgICAgIEBwYXJhbSB2bTogVGFy Z2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ID4gKyAgICAgICAg QHBhcmFtIGNvbnNvbGVzOiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWluaW11bSBv Zgo+IDIgaXRlbXMuCj4gPiAgICAgICAgICBAcGFyYW0gcGFyYW1zOiB0ZXN0IHBhcmFtZXRlcnMs IG11bHRpcGxlIHJlY2lldmVycwo+IGFsbG93ZWQuCj4gPiAgICAgICAgICAgICAgJyRzb3VyY2Vf Y29uc29sZV90eXBlQGJ1ZmZlcl9sZW5ndGg6Cj4gPiAgICAgICAgICAgICAgICRkZXN0aW5hdGlv bl9jb25zb2xlX3R5cGUxQCRidWZmZXJfbGVuZ3RoOi4uLjoKPiA+ICAgICAgICAgICAgICAgJGxv b3BiYWNrX2J1ZmZlcl9sZW5ndGg7Li4uJwo+ID4gICAgICAgICAgIiIiCj4gPiAtICAgICAgICBs b2dnaW5nLmluZm8oIkxvb3BiYWNrIHRlc3Q6IENyZWF0ZXMgYSBsb29wYmFjayBiZXR3ZWVuCj4g c2VuZGVyIHBvcnQgIgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICJhbmQgcmVjZWl2aW5nIHBv cnQsIHNlbmQgZGF0YSB0aHJvdWdoIHRoaXMKPiBjb25uZWN0aW9uLCAiCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgInZlcmlmeSBkYXRhIGNvcnJlY3RuZXNzLiIpCj4gPiAgICAgICAgICAjIFBS RVBBUkUKPiA+ICAgICAgICAgIGZvciBwYXJhbSBpbiBwYXJhbXMuc3BsaXQoJzsnKToKPiA+ICAg ICAgICAgICAgICBpZiBub3QgcGFyYW06Cj4gPiBAQCAtNzMwLDYgKzg1NSwxMyBAQCBkZWYgcnVu X3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAgICAgICAgICBpZiBs ZW4oYnVmX2xlbikgPT0gKGlkeF9jb25zb2xlICsgaWR4X3NlcmlhbHBvcnQpOgo+ID4gICAgICAg ICAgICAgICAgICBidWZfbGVuLmFwcGVuZCgxMDI0KQo+ID4gIAo+ID4gKyAgICAgICAgICAgIGZv ciBwIGluIHJlY3ZfcHRzOgo+ID4gKyAgICAgICAgICAgICAgICBpZiBub3QgcC5pc19vcGVuOgo+ ID4gKyAgICAgICAgICAgICAgICAgICAgcC5vcGVuKCkKPiA+ICsKPiA+ICsgICAgICAgICAgICBp ZiBub3Qgc2VuZF9wdC5pc19vcGVuOgo+ID4gKyAgICAgICAgICAgICAgICBzZW5kX3B0Lm9wZW4o KQo+ID4gKwo+ID4gICAgICAgICAgICAgIGlmIGxlbihyZWN2X3B0cykgPT0gMDoKPiA+ICAgICAg ICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwoInRlc3RfbG9vcGJhY2s6IGluY29ycmVj dCByZWN2Cj4gY29uc29sZXMiCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJkZWZpbml0aW9uIikKPiA+IEBAIC03MzksMjEgKzg3MSwyMiBAQCBkZWYgcnVuX3ZpcnRp b19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAgICAgICAgICBmb3IgaSBpbiBy YW5nZSgwLCBsZW4ocmVjdl9wdHMpKToKPiA+ICAgICAgICAgICAgICAgICAgcXVldWVzLmFwcGVu ZChkZXF1ZSgpKQo+ID4gIAo+ID4gLSAgICAgICAgICAgIHRtcCA9ICInJXMnIiAlIHJlY3ZfcHRz WzBdWzFdCj4gPiArICAgICAgICAgICAgdG1wID0gIiclcyciICUgcmVjdl9wdHNbMF0ubmFtZQo+ ID4gICAgICAgICAgICAgIGZvciByZWN2X3B0IGluIHJlY3ZfcHRzWzE6XToKPiA+IC0gICAgICAg ICAgICAgICAgdG1wICs9ICIsICclcyciICUgKHJlY3ZfcHRbMV0pCj4gPiArICAgICAgICAgICAg ICAgIHRtcCArPSAiLCAnJXMnIiAlIChyZWN2X3B0Lm5hbWUpCj4gPiAgICAgICAgICAgICAgb25f Z3Vlc3QoInZpcnQubG9vcGJhY2soWyclcyddLCBbJXNdLCAlZCwKPiB2aXJ0LkxPT1BfUE9MTCki Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgJSAoc2VuZF9wdFsxXSwgdG1wLCBidWZfbGVuWy0x XSksIHZtLCAyKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICUgKHNlbmRfcHQubmFtZSwgdG1w LCBidWZfbGVuWy0xXSksIHZtLCAyKQo+ID4gIAo+ID4gICAgICAgICAgICAgIGV4aXRfZXZlbnQg PSB0aHJlYWRpbmcuRXZlbnQoKQo+ID4gIAo+ID4gICAgICAgICAgICAgICMgVEVTVAo+ID4gLSAg ICAgICAgICAgIHRocmVhZCA9IHRoX3NlbmRfY2hlY2soc2VuZF9wdFswXSwgZXhpdF9ldmVudCwg cXVldWVzLAo+IGJ1Zl9sZW5bMF0pCj4gPiArICAgICAgICAgICAgdGhyZWFkID0gVGhTZW5kQ2hl Y2soc2VuZF9wdC5zb2NrLCBleGl0X2V2ZW50LCBxdWV1ZXMsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBidWZfbGVuWzBdKQo+ID4gICAgICAgICAgICAgIHRocmVhZC5z dGFydCgpCj4gPiAgICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkKQo+ID4gIAo+ID4g ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyZWN2X3B0cykpOgo+ID4gLSAgICAgICAg ICAgICAgICB0aHJlYWQgPSB0aF9yZWN2X2NoZWNrKHJlY3ZfcHRzW2ldWzBdLCBxdWV1ZXNbaV0s Cj4gZXhpdF9ldmVudCwKPiA+ICsgICAgICAgICAgICAgICAgdGhyZWFkID0gVGhSZWN2Q2hlY2so cmVjdl9wdHNbaV0uc29jaywgcXVldWVzW2ldLAo+IGV4aXRfZXZlbnQsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbltpICsgMV0pCj4gPiAgICAgICAg ICAgICAgICAgIHRocmVhZC5zdGFydCgpCj4gPiAgICAgICAgICAgICAgICAgIHRocmVhZHMuYXBw ZW5kKHRocmVhZCkKPiA+IEBAIC03NzAsOCArOTAzLDggQEAgZGVmIHJ1bl92aXJ0aW9fY29uc29s ZSh0ZXN0LCBwYXJhbXMsIGVudik6Cj4gPiAgCj4gPiAgICAgICAgICAgICAgIyBSZWFkLW91dCBh bGwgcmVtYWluaW5nIGRhdGEKPiA+ICAgICAgICAgICAgICBmb3IgcmVjdl9wdCBpbiByZWN2X3B0 czoKPiA+IC0gICAgICAgICAgICAgICAgd2hpbGUgc2VsZWN0LnNlbGVjdChbcmVjdl9wdFswXV0s IFtdLCBbXSwgMC4xKVswXToKPiA+IC0gICAgICAgICAgICAgICAgICAgIHJlY3ZfcHRbMF0ucmVj digxMDI0KQo+ID4gKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxlY3Quc2VsZWN0KFtyZWN2X3B0 LnNvY2tdLCBbXSwgW10sCj4gMC4xKVswXToKPiA+ICsgICAgICAgICAgICAgICAgICAgIHJlY3Zf cHQuc29jay5yZWN2KDEwMjQpCj4gPiAgCj4gPiAgICAgICAgICAgICAgX2d1ZXN0X2V4aXRfdGhy ZWFkcyh2bSwgW3NlbmRfcHRdLCByZWN2X3B0cykKPiA+ICAKPiA+IEBAIC03NzksMTkgKzkxMiwx NyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAg ICAgICAgICBkZWwgdGhyZWFkc1s6XQo+ID4gIAo+ID4gCj4gPiAtICAgIGRlZiB0ZXN0X3BlcmYo dm0sIGNvbnNvbGVzLCBwYXJhbXMpOgo+ID4gKyAgICBkZWYgdHBlcmYodm0sIGNvbnNvbGVzLCBw YXJhbXMpOgo+ID4gICAgICAgICAgIiIiCj4gPiAgICAgICAgICBUZXN0cyBwZXJmb3JtYW5jZSBv ZiB0aGUgdmlydGlvX2NvbnNvbGUgdHVuZWwuIEZpcnN0IGl0Cj4gc2VuZHMgdGhlIGRhdGEKPiA+ ICAgICAgICAgIGZyb20gaG9zdCB0byBndWVzdCBhbmQgdGhhbiBiYWNrLiBJdCBwcm92aWRlcyBp bmZvcm1hdGlvbnMKPiBhYm91dAo+ID4gICAgICAgICAgY29tcHV0ZXIgdXRpbGlzYXRpb24gYW5k IHN0YXRpc3RpYyBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlCj4gdHJvdWdocHV0Lgo+ID4gIAo+ID4g LSAgICAgICAgQHBhcmFtIHZtOiB0YXJnZXQgdmlydHVhbCBtYWNoaW5lIFt2bSwgc2Vzc2lvbiwg dG1wX2Rpcl0KPiA+IC0gICAgICAgIEBwYXJhbSBjb25zb2xlczogYSBmaWVsZCBvZiB2aXJ0aW8g cG9ydHMgd2l0aCB0aGUgbWluaW11bQo+IG9mIDIgaXRlbXMKPiA+ICsgICAgICAgIEBwYXJhbSB2 bTogVGFyZ2V0IHZpcnR1YWwgbWFjaGluZSBbdm0sIHNlc3Npb24sIHRtcF9kaXJdLgo+ID4gKyAg ICAgICAgQHBhcmFtIGNvbnNvbGVzOiBGaWVsZCBvZiB2aXJ0aW8gcG9ydHMgd2l0aCB0aGUgbWlu aW11bSBvZgo+IDIgaXRlbXMuCj4gPiAgICAgICAgICBAcGFyYW0gcGFyYW1zOiB0ZXN0IHBhcmFt ZXRlcnM6Cj4gPiAgICAgICAgICAgICAgICAgICckY29uc29sZV90eXBlQCRidWZmZXJfbGVuZ3Ro OiR0ZXN0X2R1cmF0aW9uOy4uLicKPiA+ICAgICAgICAgICIiIgo+ID4gLSAgICAgICAgbG9nZ2lu Zy5pbmZvKCJQZXJmb3JtYW5jZSB0ZXN0OiBNZWFzdXJlIHBlcmZvcm1hbmNlIGZvciB0aGUKPiAi Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgInZpcnRpbyBjb25zb2xlIHR1bm5lbCIpCj4gPiAg ICAgICAgICBmb3IgcGFyYW0gaW4gcGFyYW1zLnNwbGl0KCc7Jyk6Cj4gPiAgICAgICAgICAgICAg aWYgbm90IHBhcmFtOgo+ID4gICAgICAgICAgICAgICAgICBjb250aW51ZQo+ID4gQEAgLTgxMSwz OSArOTQyLDM4IEBAIGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ ID4gICAgICAgICAgICAgIHBhcmFtID0gKHBhcmFtWzBdID09ICdzZXJpYWxwb3J0JykKPiA+ICAg ICAgICAgICAgICBwb3J0ID0gY29uc29sZXNbcGFyYW1dWzBdCj4gPiAgCj4gPiArICAgICAgICAg ICAgaWYgbm90IHBvcnQuaXNfb3BlbjoKPiA+ICsgICAgICAgICAgICAgICAgcG9ydC5vcGVuKCkK PiA+ICsKPiA+ICAgICAgICAgICAgICBkYXRhID0gIiIKPiA+ICAgICAgICAgICAgICBmb3IgaSBp biByYW5nZShidWZfbGVuKToKPiA+ICAgICAgICAgICAgICAgICAgZGF0YSArPSAiJWMiICUgcmFu ZG9tLnJhbmRyYW5nZSgyNTUpCj4gPiAgCj4gPiAgICAgICAgICAgICAgZXhpdF9ldmVudCA9IHRo cmVhZGluZy5FdmVudCgpCj4gPiAtICAgICAgICAgICAgc2xpY2UgPSBmbG9hdChkdXJhdGlvbikv MTAwCj4gPiArICAgICAgICAgICAgc2xpY2UgPSBmbG9hdChkdXJhdGlvbikgLyAxMDAKPiA+ICAK PiA+ICAgICAgICAgICAgICAjIEhPU1QgLT4gR1VFU1QKPiA+ICAgICAgICAgICAgICBvbl9ndWVz dCgndmlydC5sb29wYmFjayhbIiVzIl0sIFtdLCAlZCwKPiB2aXJ0LkxPT1BfTk9ORSknICUKPiA+ IC0gICAgICAgICAgICAgICAgICAgICAocG9ydFsxXSwgYnVmX2xlbiksIHZtLCAyKQo+ID4gLSAg ICAgICAgICAgIHRocmVhZCA9IHRoX3NlbmQocG9ydFswXSwgZGF0YSwgZXhpdF9ldmVudCkKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAocG9ydC5uYW1lLCBidWZfbGVuKSwgdm0sIDIpCj4gPiAr ICAgICAgICAgICAgdGhyZWFkID0gVGhTZW5kKHBvcnQuc29jaywgZGF0YSwgZXhpdF9ldmVudCkK PiA+ICAgICAgICAgICAgICBzdGF0cyA9IGFycmF5LmFycmF5KCdmJywgW10pCj4gPiAtICAgICAg ICAgICAgbG9hZHMgPSBbXQo+ID4gLSAgICAgICAgICAgIGxvYWRzLmFwcGVuZChjcHVfbG9hZCgp KQo+ID4gLSAgICAgICAgICAgIGxvYWRzLmFwcGVuZChwaWRfbG9hZChvcy5nZXRwaWQoKSwgJ2F1 dG90ZXN0JykpCj4gPiAtICAgICAgICAgICAgbG9hZHMuYXBwZW5kKHBpZF9sb2FkKHZtWzBdLmdl dF9waWQoKSwgJ1ZNJykpCj4gPiAtCj4gPiAtICAgICAgICAgICAgZm9yIGxvYWQgaW4gbG9hZHM6 Cj4gPiAtICAgICAgICAgICAgICAgIGxvYWQuc3RhcnQoKQo+ID4gKyAgICAgICAgICAgIGxvYWRz ID0gdXRpbHMuU3lzdGVtTG9hZChbKG9zLmdldHBpZCgpLCAnYXV0b3Rlc3QnKSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2bVswXS5nZXRfcGlkKCksICdWTScp LCAwXSkKPiA+ICsgICAgICAgICAgICBsb2Fkcy5zdGFydCgpCj4gPiAgICAgICAgICAgICAgX3Rp bWUgPSB0aW1lLnRpbWUoKQo+ID4gICAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCj4gPiAgICAg ICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKPiA+ICAgICAgICAgICAgICAgICAgc3RhdHMu YXBwZW5kKHRocmVhZC5pZHgpCj4gPiAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xpY2Up Cj4gPiAgICAgICAgICAgICAgX3RpbWUgPSB0aW1lLnRpbWUoKSAtIF90aW1lIC0gZHVyYXRpb24K PiA+IC0gICAgICAgICAgICBwcmludF9sb2FkKFtsb2Fkc1sxXS5nZXRfbG9hZCgpLCBsb2Fkc1sy XS5nZXRfbG9hZCgpXSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGxvYWRzWzBdLmdldF9s b2FkKCkpCj4gPiArICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJcbiIgKwo+IGxvYWRzLmdldF9j cHVfc3RhdHVzX3N0cmluZygpWzotMV0pCj4gPiArICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJc biIgKwo+IGxvYWRzLmdldF9tZW1fc3RhdHVzX3N0cmluZygpWzotMV0pCj4gPiAgICAgICAgICAg ICAgZXhpdF9ldmVudC5zZXQoKQo+ID4gICAgICAgICAgICAgIHRocmVhZC5qb2luKCkKPiA+ICAK PiA+ICAgICAgICAgICAgICAjIExldCB0aGUgZ3Vlc3QgcmVhZC1vdXQgYWxsIHRoZSByZW1haW5p bmcgZGF0YQo+ID4gICAgICAgICAgICAgIHdoaWxlIG5vdCBfb25fZ3Vlc3QoInZpcnQucG9sbCgn JXMnLCAlcykiICUKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3J0WzFd LCBzZWxlY3QuUE9MTElOKSwgdm0sCj4gMilbMF06Cj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocG9ydC5uYW1lLCBzZWxlY3QuUE9MTElOKSwgdm0sCj4gMilbMF06Cj4gPiAg ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKPiA+ICAKPiA+ICAgICAgICAgICAgICBfZ3Vl c3RfZXhpdF90aHJlYWRzKHZtLCBbcG9ydF0sIFtdKQo+ID4gQEAgLTg1MywzMCArOTgzLDI5IEBA IGRlZiBydW5fdmlydGlvX2NvbnNvbGUodGVzdCwgcGFyYW1zLCBlbnYpOgo+ID4gICAgICAgICAg ICAgICAgICAiVGVzdCByYW4gJWZzIGxvbmdlciB3aGljaCBpcyBtb3JlIHRoYW4gb25lIHNsaWNl IiwKPiBfdGltZSkKPiA+ICAgICAgICAgICAgICBlbHNlOgo+ID4gICAgICAgICAgICAgICAgICBs b2dnaW5nLmRlYnVnKCJUZXN0IHJhbiAlZnMgbG9uZ2VyIiwgX3RpbWUpCj4gPiAtICAgICAgICAg ICAgc3RhdHMgPSBwcm9jZXNzX3N0YXRzKHN0YXRzWzE6XSwgc2xpY2UqMTA0ODU3NikKPiA+ICsg ICAgICAgICAgICBzdGF0cyA9IHByb2Nlc3Nfc3RhdHMoc3RhdHNbMTpdLCBzbGljZSAqIDEwNDg1 NzYpCj4gPiAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygiU3RhdHMgPSAlcyIsIHN0YXRzKQo+ ID4gICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiSG9zdCAtPiBHdWVzdCBbTUIvc10gKG1pbi9t ZWQvbWF4KSA9Cj4gJS4zZi8lLjNmLyUuM2YiLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg ICBzdGF0c1swXSwgc3RhdHNbbGVuKHN0YXRzKS8yXSwgc3RhdHNbLTFdKQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRzWzBdLCBzdGF0c1tsZW4oc3RhdHMpIC8gMl0sCj4gc3RhdHNb LTFdKQo+ID4gIAo+ID4gICAgICAgICAgICAgIGRlbCB0aHJlYWQKPiA+ICAKPiA+ICAgICAgICAg ICAgICAjIEdVRVNUIC0+IEhPU1QKPiA+ICAgICAgICAgICAgICBleGl0X2V2ZW50LmNsZWFyKCkK PiA+ICAgICAgICAgICAgICBzdGF0cyA9IGFycmF5LmFycmF5KCdmJywgW10pCj4gPiAtICAgICAg ICAgICAgb25fZ3Vlc3QoInZpcnQuc2VuZF9sb29wX2luaXQoJyVzJywgJWQpIiAlIChwb3J0WzFd LAo+IGJ1Zl9sZW4pLAo+ID4gKyAgICAgICAgICAgIG9uX2d1ZXN0KCJ2aXJ0LnNlbmRfbG9vcF9p bml0KCclcycsICVkKSIgJSAocG9ydC5uYW1lLAo+IGJ1Zl9sZW4pLAo+ID4gICAgICAgICAgICAg ICAgICAgICAgIHZtLCAzMCkKPiA+IC0gICAgICAgICAgICB0aHJlYWQgPSB0aF9yZWN2KHBvcnRb MF0sIGV4aXRfZXZlbnQsIGJ1Zl9sZW4pCj4gPiArICAgICAgICAgICAgdGhyZWFkID0gVGhSZWN2 KHBvcnQuc29jaywgZXhpdF9ldmVudCwgYnVmX2xlbikKPiA+ICAgICAgICAgICAgICB0aHJlYWQu c3RhcnQoKQo+ID4gLSAgICAgICAgICAgIGZvciBsb2FkIGluIGxvYWRzOgo+ID4gLSAgICAgICAg ICAgICAgICBsb2FkLnN0YXJ0KCkKPiA+ICsgICAgICAgICAgICBsb2Fkcy5zdGFydCgpCj4gPiAg ICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQuc2VuZF9sb29wKCkiLCB2bSwgMikKPiA+ICAgICAg ICAgICAgICBfdGltZSA9IHRpbWUudGltZSgpCj4gPiAgICAgICAgICAgICAgZm9yIGkgaW4gcmFu Z2UoMTAwKToKPiA+ICAgICAgICAgICAgICAgICAgc3RhdHMuYXBwZW5kKHRocmVhZC5pZHgpCj4g PiAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2xpY2UpCj4gPiAgICAgICAgICAgICAgX3Rp bWUgPSB0aW1lLnRpbWUoKSAtIF90aW1lIC0gZHVyYXRpb24KPiA+IC0gICAgICAgICAgICBwcmlu dF9sb2FkKFtsb2Fkc1sxXS5nZXRfbG9hZCgpLCBsb2Fkc1syXS5nZXRfbG9hZCgpXSwKPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgIGxvYWRzWzBdLmdldF9sb2FkKCkpCj4gPiArICAgICAgICAg ICAgbG9nZ2luZy5pbmZvKCJcbiIgKwo+IGxvYWRzLmdldF9jcHVfc3RhdHVzX3N0cmluZygpWzot MV0pCj4gPiArICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJcbiIgKwo+IGxvYWRzLmdldF9tZW1f c3RhdHVzX3N0cmluZygpWzotMV0pCj4gPiAgICAgICAgICAgICAgb25fZ3Vlc3QoInZpcnQuZXhp dF90aHJlYWRzKCkiLCB2bSwgMikKPiA+ICAgICAgICAgICAgICBleGl0X2V2ZW50LnNldCgpCj4g PiAgICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQo+ID4gQEAgLTg4NSwzNyArMTAxNCw4NiBAQCBk ZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ICAgICAgICAgICAg ICAgICAgIlRlc3QgcmFuICVmcyBsb25nZXIgd2hpY2ggaXMgbW9yZSB0aGFuIG9uZSBzbGljZSIs Cj4gX3RpbWUpCj4gPiAgICAgICAgICAgICAgZWxzZToKPiA+ICAgICAgICAgICAgICAgICAgbG9n Z2luZy5kZWJ1ZygiVGVzdCByYW4gJWZzIGxvbmdlciIgJSBfdGltZSkKPiA+IC0gICAgICAgICAg ICBzdGF0cyA9IHByb2Nlc3Nfc3RhdHMoc3RhdHNbMTpdLCBzbGljZSoxMDQ4NTc2KQo+ID4gKyAg ICAgICAgICAgIHN0YXRzID0gcHJvY2Vzc19zdGF0cyhzdGF0c1sxOl0sIHNsaWNlICogMTA0ODU3 NikKPiA+ICAgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJTdGF0cyA9ICVzIiwgc3RhdHMpCj4g PiAgICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJHdWVzdCAtPiBIb3N0IFtNQi9zXSAobWluL21l ZC9tYXgpID0KPiAlLjNmLyUuM2YvJS4zZiIsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRzWzBdLCBzdGF0c1tsZW4oc3RhdHMpLzJdLCBzdGF0c1stMV0pCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXRzWzBdLCBzdGF0c1tsZW4oc3RhdHMpIC8gMl0sCj4gc3RhdHNb LTFdKQo+ID4gIAo+ID4gICAgICAgICAgICAgIGRlbCB0aHJlYWQKPiA+IC0KPiA+ICAgICAgICAg ICAgICBkZWwgZXhpdF9ldmVudAo+ID4gLSAgICAgICAgICAgIGRlbCBsb2Fkc1s6XQo+ID4gKwo+ ID4gKwo+ID4gKyAgICBkZWYgY2xlYW5fcG9ydHModm0sIGNvbnNvbGVzKToKPiA+ICsgICAgICAg ICIiIgo+ID4gKyAgICAgICAgQ2xlYW4gc3RhdGUgb2YgYWxsIHBvcnRzIGFuZCBzZXQgcG9ydCB0 byBkZWZhdWx0IHN0YXRlLgo+ID4gKyAgICAgICAgRGVmYXVsdCBzdGF0ZToKPiA+ICsgICAgICAg ICAgIE5vIGRhdGEgb24gcG9ydCBvciBpbiBwb3J0IGJ1ZmZlci4KPiA+ICsgICAgICAgICAgIFJl YWQgbW9kZSA9IGJsb2NraW5nLgo+ID4gKwo+ID4gKyAgICAgICAgQHBhcmFtIGNvbnNvbGVzOiBD b25zb2xlcyB3aGljaCBzaG91bGQgYmUgY2xlYW4uCj4gPiArICAgICAgICAiIiIKPiA+ICsgICAg ICAgICMgQ2hlY2sgaWYgcHl0aG9uIGlzIHN0aWxsIGFsaXZlCj4gPiArICAgICAgICBwcmludCAi Q0xFQU5FRCIKPiA+ICsgICAgICAgIG1hdGNoLCB0bXAgPSBfb25fZ3Vlc3QoImlzX2FsaXZlKCki LCB2bSwgMTApCj4gPiArICAgICAgICBpZiAobWF0Y2ggPT0gTm9uZSkgb3IgKG1hdGNoICE9IDAp Ogo+ID4gKyAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIlB5dGhvbiBkaWVkL2lzIHN0dWNrZWQv aGF2ZSByZW1haW5pbmcKPiB0aHJlYWRzIikKPiA+ICsgICAgICAgICAgICB2bVsxXS5jbG9zZSgp Cj4gPiArICAgICAgICAgICAgdm1bMV0gPSBrdm1fdGVzdF91dGlscy53YWl0X2Zvcl9sb2dpbih2 bVswXSwgMCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4g ZmxvYXQocGFyYW1zLmdldCgiYm9vdF90aW1lb3V0IiwgMjQwKSksCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAyKQo+ID4gKyAgICAgICAgICAgIChtYXRj aCwgZGF0YSkgPSBfb25fZ3Vlc3QoImtpbGxhbGwgLTkgcHl0aG9uICIKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICImJiBlY2hvIC1uIFBBU1M6IHB5dGhvbgo+IGtp bGxlZCIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8fCBlY2hv IC1uIFBBU1M6IHB5dGhvbiB3YXMKPiBkZWF0aCIsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2bSwgMzApCj4gPiArICAgICAgICAgICAgaWYgKG1hdGNoID09IE5v bmUpOgo+ID4gKyAgICAgICAgICAgICAgICAjIGtpbGxhbGwgLTkgY29tbWFuZCBkaWRuJ3QgZmlu aXNoZWQgLSBweXRob24KPiBzdHVja2VkCj4gPiArICAgICAgICAgICAgICAgIHJhaXNlIGVycm9y LlRlc3RGYWlsKCJQeXRob24gaXMgcmVhbGx5IHN0dWNrZWQgLSAiCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBraWxsIC05IGl0IikKPiA+ICsKPiA+ICsg ICAgICAgICAgICBvbl9ndWVzdCgicm1tb2QgLWYgdmlydGlvX2NvbnNvbGUgJiYgZWNobyAtbiBQ QVNTOgo+IHJtbW9kICIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAifHwgZWNobyAtbiBGQUlM OiBybW1vZCIsIHZtLCAxMCkKPiA+ICsgICAgICAgICAgICBvbl9ndWVzdCgibW9kcHJvYmUgdmly dGlvX2NvbnNvbGUgIgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICImJiBlY2hvIC1uIFBBU1M6 IG1vZHByb2JlIHx8IGVjaG8gLW4gRkFJTDoKPiBtb2Rwcm9iZSIsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgdm0sIDEwKQo+ID4gKwo+ID4gKyAgICAgICAgICAgIGluaXRfZ3Vlc3Qodm0sIGNv bnNvbGVzKQo+ID4gKyAgICAgICAgICAgIChtYXRjaCwgZGF0YSkgPSBfb25fZ3Vlc3QoInZpcnQu Y2xlYW5fcG9ydCgnJXMnKSwxMDI0Igo+ICUKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnNvbGVzWzBdWzBdLm5hbWUsIHZtLCAyKQo+ID4gKyAgICAgICAgICAg IGlmIChtYXRjaCA9PSBOb25lKSBvciAobWF0Y2ggIT0gMCk6Cj4gPiArICAgICAgICAgICAgICAg IHJhaXNlIGVycm9yLlRlc3RGYWlsKCJWaXJ0aW8tY29uc29sZSBkcml2ZXIgaXMKPiBpcnJlcGFy YWJseSIKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBibG9ja2Vk LiBFdmVyeSBjb21kIGVuZCB3aXRoCj4gc2lnIEtJTEwuIikKPiA+ICsKPiA+ICsgICAgICAgIGZv ciBjdHlwZSBpbiBjb25zb2xlczoKPiA+ICsgICAgICAgICAgICBmb3IgcG9ydCBpbiBjdHlwZToK PiA+ICsgICAgICAgICAgICAgICAgb3Blbm5lZCA9IHBvcnQuaXNfb3Blbgo+ID4gKyAgICAgICAg ICAgICAgICBwb3J0LmNsZWFuX3BvcnQoKQo+ID4gKyAgICAgICAgICAgICAgICAjb25fZ3Vlc3Qo InZpcnQuYmxvY2tpbmcoJyVzJywgVHJ1ZSkiICUgcG9ydC5uYW1lLAo+IHZtLCAyKQo+ID4gKyAg ICAgICAgICAgICAgICBvbl9ndWVzdCgidmlydC5jbGVhbl9wb3J0KCclcycpLDEwMjQiICUgcG9y dC5uYW1lLAo+IHZtLCAyKQo+ID4gKyAgICAgICAgICAgICAgICBpZiBub3Qgb3Blbm5lZDoKPiA+ ICsgICAgICAgICAgICAgICAgICAgIHBvcnQuY2xvc2UoKQo+ID4gIAo+ID4gCj4gPiAgICAgICMg SU5JVElBTElaRQo+ID4gLSAgICB0ZXN0X3Ntb2tlX3BhcmFtcyA9IHBhcmFtcy5nZXQoJ3ZpcnRp b19jb25zb2xlX3Ntb2tlJywgJycpCj4gPiAtICAgIHRlc3RfbG9vcGJhY2tfcGFyYW1zID0gcGFy YW1zLmdldCgndmlydGlvX2NvbnNvbGVfbG9vcGJhY2snLAo+ICcnKQo+ID4gLSAgICB0ZXN0X3Bl cmZfcGFyYW1zID0gcGFyYW1zLmdldCgndmlydGlvX2NvbnNvbGVfcGVyZicsICcnKQo+ID4gKwo+ ID4gKyAgICB0c21va2VfcGFyYW1zID0gcGFyYW1zLmdldCgndmlydGlvX2NvbnNvbGVfc21va2Un LCAnJykKPiA+ICsgICAgdGxvb3BiYWNrX3BhcmFtcyA9IHBhcmFtcy5nZXQoJ3ZpcnRpb19jb25z b2xlX2xvb3BiYWNrJywgJycpCj4gPiArICAgIHRwZXJmX3BhcmFtcyA9IHBhcmFtcy5nZXQoJ3Zp cnRpb19jb25zb2xlX3BlcmYnLCAnJykKPiA+ICAKPiA+ICAgICAgbm9fc2VyaWFscG9ydHMgPSAw Cj4gPiAgICAgIG5vX2NvbnNvbGVzID0gMAo+ID4gICAgICAjIGNvbnNvbGVzIHJlcXVpcmVkIGZv ciBTbW9rZSB0ZXN0Cj4gPiAtICAgIGlmICh0ZXN0X3Ntb2tlX3BhcmFtcy5jb3VudCgnc2VyaWFs cG9ydCcpKToKPiA+ICsgICAgaWYgKHRzbW9rZV9wYXJhbXMuY291bnQoJ3NlcmlhbHBvcnQnKSk6 Cj4gPiAgICAgICAgICBub19zZXJpYWxwb3J0cyA9IG1heCgyLCBub19zZXJpYWxwb3J0cykKPiA+ IC0gICAgaWYgKHRlc3Rfc21va2VfcGFyYW1zLmNvdW50KCdjb25zb2xlJykpOgo+ID4gKyAgICBp ZiAodHNtb2tlX3BhcmFtcy5jb3VudCgnY29uc29sZScpKToKPiA+ICAgICAgICAgIG5vX2NvbnNv bGVzID0gbWF4KDIsIG5vX2NvbnNvbGVzKQo+ID4gICAgICAjIGNvbnNvbGVzIHJlcXVpcmVkIGZv ciBMb29wYmFjayB0ZXN0Cj4gPiAtICAgIGZvciBwYXJhbSBpbiB0ZXN0X2xvb3BiYWNrX3BhcmFt cy5zcGxpdCgnOycpOgo+ID4gKyAgICBmb3IgcGFyYW0gaW4gdGxvb3BiYWNrX3BhcmFtcy5zcGxp dCgnOycpOgo+ID4gICAgICAgICAgbm9fc2VyaWFscG9ydHMgPSBtYXgobm9fc2VyaWFscG9ydHMs Cj4gcGFyYW0uY291bnQoJ3NlcmlhbHBvcnQnKSkKPiA+ICAgICAgICAgIG5vX2NvbnNvbGVzID0g bWF4KG5vX2NvbnNvbGVzLCBwYXJhbS5jb3VudCgnY29uc29sZScpKQo+ID4gICAgICAjIGNvbnNv bGVzIHJlcXVpcmVkIGZvciBQZXJmb3JtYW5jZSB0ZXN0Cj4gPiAtICAgIGlmICh0ZXN0X3BlcmZf cGFyYW1zLmNvdW50KCdzZXJpYWxwb3J0JykpOgo+ID4gKyAgICBpZiAodHBlcmZfcGFyYW1zLmNv dW50KCdzZXJpYWxwb3J0JykpOgo+ID4gICAgICAgICAgbm9fc2VyaWFscG9ydHMgPSBtYXgoMSwg bm9fc2VyaWFscG9ydHMpCj4gPiAtICAgIGlmICh0ZXN0X3BlcmZfcGFyYW1zLmNvdW50KCdjb25z b2xlJykpOgo+ID4gKyAgICBpZiAodHBlcmZfcGFyYW1zLmNvdW50KCdjb25zb2xlJykpOgo+ID4g ICAgICAgICAgbm9fY29uc29sZXMgPSBtYXgoMSwgbm9fY29uc29sZXMpCj4gPiAgCj4gPiAgICAg IGlmIChub19zZXJpYWxwb3J0cyArIG5vX2NvbnNvbGVzKSA9PSAwOgo+ID4gQEAgLTkzMywxNiAr MTExMSwyNyBAQCBkZWYgcnVuX3ZpcnRpb19jb25zb2xlKHRlc3QsIHBhcmFtcywgZW52KToKPiA+ ICAKPiA+ICAgICAgIyBBQ1RVQUwgVEVTVElORwo+ID4gICAgICAjIERlZmluZXMgYWxsIGF2YWls YWJsZSBjb25zb2xlczsgdGVzdHMgdWRldiBhbmQgc3lzZnMKPiA+IC0gICAgY29uc3MgPSBbXQo+ ID4gLSAgICBmb3IgbW9kZSBpbiBjb25zb2xlczoKPiA+IC0gICAgICAgIGZvciBjb25zIGluIG1v ZGU6Cj4gPiAtICAgICAgICAgICAgY29uc3MuYXBwZW5kKGNvbnNbMTozXSkKPiA+IC0gICAgaW5p dF9ndWVzdCh2bSwgMTApCj4gPiAtICAgIG9uX2d1ZXN0KCJ2aXJ0LmluaXQoJXMpIiAlIChjb25z cyksIHZtLCAxMCkKPiA+IC0KPiA+IC0gICAgY29uc29sZXMgPSB0ZXN0X3Ntb2tlKHZtLCBjb25z b2xlcywgdGVzdF9zbW9rZV9wYXJhbXMpCj4gPiAtICAgIHRlc3RfbG9vcGJhY2sodm0sIGNvbnNv bGVzLCB0ZXN0X2xvb3BiYWNrX3BhcmFtcykKPiA+IC0gICAgdGVzdF9wZXJmKHZtLCBjb25zb2xl cywgdGVzdF9wZXJmX3BhcmFtcykKPiA+ICsgICAgaW5pdF9ndWVzdCh2bSwgY29uc29sZXMpCj4g PiArCj4gPiArICAgIHRlc3QgPSBTdWJUZXN0KCkKPiA+ICsgICAgdGVzdC5zZXRfY2xlYW51cF9m dW5jKGNsZWFuX3BvcnRzLCBbdm0sIGNvbnNvbGVzXSkKPiA+ICsgICAgI1Rlc3QgU21va2UKPiA+ ICsgICAgdGVzdF9zbW9rZSh0ZXN0LCB2bSwgY29uc29sZXMsIHRzbW9rZV9wYXJhbXMpCj4gPiAr Cj4gPiArICAgICNUZXN0IExvb3BiYWNrCj4gPiArICAgIHRlc3QuZG9fdGVzdCh0bG9vcGJhY2ss IFt2bSwgY29uc29sZXMsIHRsb29wYmFja19wYXJhbXNdKQo+ID4gKwo+ID4gKyAgICAjVGVzdCBQ ZXJmb3JtYW5jZQo+ID4gKyAgICB0ZXN0LmRvX3Rlc3QodHBlcmYsIFt2bSwgY29uc29sZXMsIHRw ZXJmX3BhcmFtc10pCj4gPiArCj4gPiArICAgIGxvZ2dpbmcuaW5mbygoIlN1bW1hcnk6ICVkIHRl c3RzIHBhc3NlZCAgJWQgdGVzdCBmYWlsZWQgOlxuIiAlCj4gPiArICAgICAgICAgICAgICAgICAg KHRlc3QucGFzc2VkLCB0ZXN0LmZhaWxlZCkpICsKPiB0ZXN0LmdldF90ZXh0X3Jlc3VsdCgpKQo+ ID4gKyAgICBsb2dnaW5nLmRlYnVnKCgiU3VtbWFyeTogJWQgdGVzdHMgcGFzc2VkICAlZCB0ZXN0 IGZhaWxlZCA6XG4iCj4gJQo+ID4gKyAgICAgICAgICAgICAgICAgICAodGVzdC5wYXNzZWQsIHRl c3QuZmFpbGVkKSkgKwo+IHRlc3QuZ2V0X2Z1bGxfdGV4dF9yZXN1bHQoKSkKPiA+ICsKPiA+ICsg ICAgaWYgdGVzdC5pc19mYWlsZWQoKToKPiA+ICsgICAgICAgIHJhaXNlIGVycm9yLlRlc3RGYWls KCJWaXJ0aW9fY29uc29sZSB0ZXN0IEZBSUxFRC4iKQo+ID4gKwo+ID4gIAo+ID4gICAgICAjIENM RUFOVVAKPiA+ICAgICAgdm1bMV0uY2xvc2UoKQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpBdXRvdGVzdCBtYWlsaW5nIGxpc3QKQXV0b3Rlc3RAdGVzdC5r ZXJuZWwub3JnCmh0dHA6Ly90ZXN0Lmtlcm5lbC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv L2F1dG90ZXN0Cg==