From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH i-g-t v3] lib/igt_core.c: Expand --run-subtest functionality. Date: Mon, 15 Feb 2016 17:55:10 +0100 Message-ID: <20160215165510.GV11240@phenom.ffwll.local> References: <1454587617-33962-1-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5E6596E1C4 for ; Mon, 15 Feb 2016 16:54:45 +0000 (UTC) Received: by mail-wm0-f52.google.com with SMTP id c200so122414062wme.0 for ; Mon, 15 Feb 2016 08:54:45 -0800 (PST) Content-Disposition: inline In-Reply-To: <1454587617-33962-1-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMDQsIDIwMTYgYXQgMTI6MDY6NTdQTSArMDAwMCwgRGVyZWsgTW9ydG9uIHdy b3RlOgo+IEFkZGVkIGV4dGVuZGVkIHdpbGRjYXJkIHN1cHBvcnQgd2hlbiBzcGVjaWZ5aW5nIC0t cnVuLXN1YnRlc3QuCj4gCj4gV2lsZGNhcmQgZm9ybWF0IGlzIGFzIHNwZWNpZmllZCBpbiByZmMz OTc3IGFuZCB0aGUgdXdpbGRtYXQoKSBpbXBsZW1lbnRhdGlvbgo+IGlzIHRha2VuIGZyb20gbGli aW5uLgo+IFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk3NyNzZWN0aW9uLTQg Zm9yIGEgZGVzY3JpcHRpb24gb2YKPiBhbGxvd2VkIHdpbGRjYXJkIGV4cHJlc3Npb25zLgo+IAo+ IHYyOiBVc2UgY29tbWEgYXMgbGlzdCBzZXBhcmF0b3IgKFZpbGxlIFN5cmphbGEpCj4gc3VwcG9y dCBib3RoIF4gYW5kICEgYXMgbm90IG9wZXJhdG9ycyAoRGF2ZSBHb3Jkb24pCj4gCj4gdjM6IFVw ZGF0ZWQgdG8gdXNlIHV3aWxkbWF0KCkgKERhdmUgR29yZG9uKQo+IAo+IFNpZ25lZC1vZmYtYnk6 IERlcmVrIE1vcnRvbiA8ZGVyZWsuai5tb3J0b25AaW50ZWwuY29tPgo+IC0tLQo+ICBDT1BZSU5H ICAgICAgICAgICAgICAgICB8ICAyMSArKysKPiAgbGliL01ha2VmaWxlLnNvdXJjZXMgICAgfCAg IDIgKwo+ICBsaWIvaWd0X2NvcmUuYyAgICAgICAgICB8ICAxNyArLQo+ICBsaWIvdXdpbGRtYXQv dXdpbGRtYXQuYyB8IDQ3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiAgbGliL3V3aWxkbWF0L3V3aWxkbWF0LmggfCAgMjQgKysrCgpOb3QgcmVhbGx5 IGEgZmFuIG9mIGNvcHlpbmcgb3RoZXIgc291cmNlcyBpbnRvIG91cnMuIERvbid0IHdlIGhhdmUK c29tZXRoaW5nIHJlYWR5LW1hZGUgdGhhdCdzIGdlbmVyYWxseSBhdmFpbGFibGUsIG9yIGNhbiB3 ZSBhdCBsZWFzdCBwdWxsCml0IGluIGFzIGEgYnVpbGQtZGVwPwoKVGhhbmtzLCBEYW5pZWwKCj4g IDUgZmlsZXMgY2hhbmdlZCwgNTM2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdXdpbGRtYXQvdXdpbGRtYXQuYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgbGliL3V3aWxkbWF0L3V3aWxkbWF0LmgKPiAKPiBkaWZmIC0tZ2l0IGEvQ09QWUlORyBi L0NPUFlJTkcKPiBpbmRleCBiOGY2NzUzLi4xNjM3NWYyIDEwMDY0NAo+IC0tLSBhL0NPUFlJTkcK PiArKysgYi9DT1BZSU5HCj4gQEAgLTEwNiwzICsxMDYsMjQgQEAgVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiAgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICBJTiBUSEUgU09GVFdB UkUuCj4gKwo+ICtDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw MDksIDIwMTAsIDIwMTEsIDIwMTIsCj4gKyAgICAyMDEzLCAyMDE0IGJ5IEludGVybmV0IFN5c3Rl bXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCj4gK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5NCwg MTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKPiArICAgIDIwMDIsIDIw MDMgYnkgVGhlIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0gYW5kIFJpY2ggU2Fsego+ICsK PiArVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byB0aGUg SW50ZXJuZXQgU29mdHdhcmUKPiArQ29uc29ydGl1bSBieSBSaWNoIFNhbHouCj4gKwo+ICtQZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJl IGZvciBhbnkKPiArcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVk LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQo+ICtjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgo+ICsKPiArVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lU SAo+ICtSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO VElFUyBPRgo+ICtNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFM TCBJU0MgQkUgTElBQkxFIEZPUiBBTlkKPiArU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCj4gK1dIQVRTT0VWRVIgUkVTVUxU SU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgo+ICtB Q1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBB UklTSU5HIE9VVCBPRgo+ICtPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JN QU5DRSBPRiBUSElTIFNPRlRXQVJFLgo+ICsKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNv dXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDQ5OTk4NjguLmUzMzg2MWUgMTAw NjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291 cmNlcwo+IEBAIC02MCw2ICs2MCw4IEBAIGxpYmludGVsX3Rvb2xzX2xhX1NPVVJDRVMgPSAJXAo+ ICAJaWd0X2NvcmUuaAkJXAo+ICAJaWd0X2RyYXcuYwkJXAo+ICAJaWd0X2RyYXcuaAkJXAo+ICsJ dXdpbGRtYXQvdXdpbGRtYXQuaAlcCj4gKwl1d2lsZG1hdC91d2lsZG1hdC5jCVwKPiAgCSQoTlVM TCkKPiAgCj4gIC5QSE9OWTogdmVyc2lvbi5oLnRtcAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Nv cmUuYyBiL2xpYi9pZ3RfY29yZS5jCj4gaW5kZXggNmI2OWJiNy4uOGUwYmQyZSAxMDA2NDQKPiAt LS0gYS9saWIvaWd0X2NvcmUuYwo+ICsrKyBiL2xpYi9pZ3RfY29yZS5jCj4gQEAgLTU2LDcgKzU2 LDcgQEAKPiAgI2luY2x1ZGUgPGN0eXBlLmg+Cj4gICNpbmNsdWRlIDxsaW1pdHMuaD4KPiAgI2lu Y2x1ZGUgPGxvY2FsZS5oPgo+IC0jaW5jbHVkZSA8Zm5tYXRjaC5oPgo+ICsjaW5jbHVkZSA8dXdp bGRtYXQvdXdpbGRtYXQuaD4KPiAgCj4gICNpbmNsdWRlICJkcm10ZXN0LmgiCj4gICNpbmNsdWRl ICJpbnRlbF9jaGlwc2V0LmgiCj4gQEAgLTIwOSw2ICsyMDksMTkgQEAKPiAgICogaW50ZWwgZ3B1 IHRvIGJlIHByZXNlbnQpLiBUaGVuIGluZGl2aWR1YWwgc3VidGVzdHMgY2FuIGJlIHJ1biB3aXRo Cj4gICAqICItLXJ1bi1zdWJ0ZXN0Ii4gVXNhZ2UgaGVscCBmb3IgdGVzdHMgd2l0aCBzdWJ0ZXN0 cyBjYW4gYmUgb2J0YWluZWQgd2l0aCB0aGUKPiAgICogIi0taGVscCIgY29tbWFuZCBsaW5lIG9w dGlvbi4KPiArICoKPiArICogQSB3aWxkY2FyZCBleHByZXNzaW9uIGNhbiBiZSBnaXZlbiB0byAt LXJ1bi1zdWJ0ZXN0IHRvIHNwZWNpZnkgYSBzdWJzZXQgb2YKPiArICogc3VidGVzdHMgdG8gcnVu LiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5Nzcjc2VjdGlvbi00IGZvciBh Cj4gKyAqIGRlc2NyaXB0aW9uIG9mIGFsbG93ZWQgd2lsZGNhcmQgZXhwcmVzc2lvbnMuCj4gKyAq IFNvbWUgZXhhbXBsZXMgb2YgYWxsb3dlZCB3aWxkY2FyZCBleHByZXNzaW9ucyBhcmU6Cj4gKyAq Cj4gKyAqIC0gJypiYXNpYyonIG1hdGNoIGFueSBzdWJ0ZXN0IGNvbnRhaW5pbmcgYmFzaWMKPiAr ICogLSAnYmFzaWMtPz8/JyBtYXRjaCBhbnkgc3VidGVzdCBuYW1lZCBiYXNpYy0gd2l0aCAzIGNo YXJhY3RlcnMgYWZ0ZXIgLQo+ICsgKiAtICdiYXNpYy1bMC05XScgbWF0Y2ggYW55IHN1YnRlc3Qg bmFtZWQgYmFzaWMtIHdpdGggYSBzaW5nbGUgbnVtYmVyIGFmdGVyIC0KPiArICogLSAnYmFzaWMt W14wLTldJyBtYXRjaCBhbnkgc3VidGVzdCBuYW1lZCBiYXNpYy0gd2l0aCBhIHNpbmdsZSBub24g bnVtZXJpY2FsIGNoYXJhY3RlciBhZnRlciAtCj4gKyAqIC0gJ2Jhc2ljKixhZHZhbmNlZConIG1h dGNoIGFueSBzdWJ0ZXN0IHN0YXJ0aW5nIGJhc2ljIG9yIGFkdmFuY2VkCj4gKyAqIC0gJyosIWJh c2ljKicgbWF0Y2ggYW55IHN1YnRlc3Qgbm90IHN0YXJ0aW5nIGJhc2ljCj4gKyAqIC0gJ2Jhc2lj KiwhYmFzaWMtcmVuZGVyKicgbWF0Y2ggYW55IHN1YnRlc3Qgc3RhcnRpbmcgYmFzaWMgYnV0IG5v dCBzdGFydGluZyBiYXNpYy1yZW5kZXIKPiAgICovCj4gIAo+ICBzdGF0aWMgdW5zaWduZWQgaW50 IGV4aXRfaGFuZGxlcl9jb3VudDsKPiBAQCAtODE0LDcgKzgyNyw3IEBAIGJvb2wgX19pZ3RfcnVu X3N1YnRlc3QoY29uc3QgY2hhciAqc3VidGVzdF9uYW1lKQo+ICAJfQo+ICAKPiAgCWlmIChydW5f c2luZ2xlX3N1YnRlc3QpIHsKPiAtCQlpZiAoZm5tYXRjaChydW5fc2luZ2xlX3N1YnRlc3QsIHN1 YnRlc3RfbmFtZSwgMCkgIT0gMCkKPiArCQlpZiAodXdpbGRtYXQoc3VidGVzdF9uYW1lLCBydW5f c2luZ2xlX3N1YnRlc3QpID09IDApCj4gIAkJCXJldHVybiBmYWxzZTsKPiAgCQllbHNlCj4gIAkJ CXJ1bl9zaW5nbGVfc3VidGVzdF9mb3VuZCA9IHRydWU7Cj4gZGlmZiAtLWdpdCBhL2xpYi91d2ls ZG1hdC91d2lsZG1hdC5jIGIvbGliL3V3aWxkbWF0L3V3aWxkbWF0LmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjJkMzQ3NDIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliL3V3aWxkbWF0L3V3aWxkbWF0LmMKPiBAQCAtMCwwICsxLDQ3NCBAQAo+ICsvKiB1d2lsZG1h dC5jIGlzIHJldXNlZCBmcm9tIGxpYmlubiAtIGh0dHBzOi8vbGF1bmNocGFkLm5ldC91YnVudHUv K3NvdXJjZS9pbm4yLzIuNS40LTEKPiArCj4gK1RoaXMgcHJvdmlkZXMgd2lsZCBjYXJkIG1hdGNo aW5nIG9yaWdpbmFsbHkgdXNlZCBpbiBJbnRlck5ldE5ld3MgYW5kIGlzCj4gK2Rlc2NyaWJlZCBp biBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk3NyNzZWN0aW9uLTQKPiArCj4gK0lO TiBsaWNlbmNlOgo+ICtJTk4gYXMgYSB3aG9sZSBhbmQgYWxsIGNvZGUgY29udGFpbmVkIGluIGl0 IG5vdCBvdGhlcndpc2UgbWFya2VkIHdpdGgKPiArZGlmZmVyZW50IGxpY2Vuc2VzIGFuZC9vciBj b3B5cmlnaHRzIGlzIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKPiArYW5kIGxp Y2Vuc2U6Cj4gKwo+ICsgICBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw MDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsCj4gKyAgICAgICAyMDEzLCAyMDE0IGJ5IEludGVy bmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCj4gKyAgIENvcHlyaWdodCAoYykg MTk5MSwgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKPiAr ICAgICAgIDIwMDIsIDIwMDMgYnkgVGhlIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0gYW5k IFJpY2ggU2Fsego+ICsKPiArICAgVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBj b250cmlidXRlZCB0byB0aGUgSW50ZXJuZXQgU29mdHdhcmUKPiArICAgQ29uc29ydGl1bSBieSBS aWNoIFNhbHouCj4gKwo+ICsgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQg ZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKPiArICAgcHVycG9zZSB3aXRoIG9yIHdp dGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQo+ICsg ICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzLgo+ICsKPiArICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E IElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAo+ICsgICBSRUdBUkQgVE8gVEhJUyBT T0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgo+ICsgICBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZP UiBBTlkKPiArICAgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIE9SIEFOWSBEQU1BR0VTCj4gKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9T UyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgo+ICsgICBBQ1RJT04gT0Yg Q09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9V VCBPRgo+ICsgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBP RiBUSElTIFNPRlRXQVJFLgo+ICsKPiArKi8KPiArCj4gKy8qICAkSWQ6IHV3aWxkbWF0LmMgODkx OCAyMDEwLTAxLTIyIDIzOjI4OjI4WiBpdWxpdXMgJAo+ICsqKgo+ICsqKiAgd2lsZG1hdCBwYXR0 ZXJuIG1hdGNoaW5nIHdpdGggVW5pY29kZSBVVEYtOCBleHRlbnNpb25zLgo+ICsqKgo+ICsqKiAg RG8gc2hlbGwtc3R5bGUgcGF0dGVybiBtYXRjaGluZyBmb3IgPywgXCwgW10sIGFuZCAqIGNoYXJh Y3RlcnMuICBNaWdodCBub3QKPiArKiogIGJlIHJvYnVzdCBpbiBmYWNlIG9mIG1hbGZvcm1lZCBw YXR0ZXJuczsgZS5nLiwgImZvb1thLSIgY291bGQgY2F1c2UgYQo+ICsqKiAgc2VnbWVudGF0aW9u IHZpb2xhdGlvbi4gIEl0IGlzIDgtYml0IGNsZWFuLiAgKFJvYnVzdG5lc3MgaG9wZWZ1bGx5IGZp eGVkCj4gKyoqICBKdWx5IDIwMDA7IGFsbCBtYWxmb3JtZWQgcGF0dGVybnMgc2hvdWxkIG5vdyBq dXN0IGZhaWwgdG8gbWF0Y2ggYW55dGhpbmcuKQo+ICsqKgo+ICsqKiAgT3JpZ2luYWwgYnkgUmlj aCAkYWx6LCBtaXJyb3IhcnMsIFdlZCBOb3YgMjYgMTk6MDM6MTcgRVNUIDE5ODYuCj4gKyoqICBS aWNoICRhbHogaXMgbm93IDxyc2FsekBvc2Yub3JnPi4KPiArKioKPiArKiogIEFwcmlsLCAxOTkx OiAgUmVwbGFjZWQgbXV0dWFsbHktcmVjdXJzaXZlIGNhbGxzIHdpdGggaW4tbGluZSBjb2RlIGZv ciB0aGUKPiArKiogIHN0YXIgY2hhcmFjdGVyLgo+ICsqKgo+ICsqKiAgU3BlY2lhbCB0aGFua3Mg dG8gTGFycyBNYXRoaWVzZW4gPHRob3Jpbm5AZGlrdS5kaz4gZm9yIHRoZSBBQk9SVCBjb2RlLgo+ ICsqKiAgVGhpcyBjYW4gZ3JlYXRseSBzcGVlZCB1cCBmYWlsaW5nIHdpbGRjYXJkIHBhdHRlcm5z LiAgRm9yIGV4YW1wbGU6Cj4gKyoqCj4gKyoqCXBhdHRlcm46IC0qLSotKi0qLSotKi0xMi0qLSot Ki1tLSotKi0qCj4gKyoqCXRleHQgMToJIC1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3JtYWwtLTEy LTEyMC03NS03NS1tLTcwLWlzbzg4NTktMQo+ICsqKgl0ZXh0IDI6CSAtYWRvYmUtY291cmllci1i b2xkLW8tbm9ybWFsLS0xMi0xMjAtNzUtNzUtWC03MC1pc284ODU5LTEKPiArKioKPiArKiogIFRl eHQgMSBtYXRjaGVzIHdpdGggNTEgY2FsbHMsIHdoaWxlIHRleHQgMiBmYWlscyB3aXRoIDU0IGNh bGxzLiAgV2l0aG91dAo+ICsqKiAgdGhlIEFCT1JUIGNvZGUsIGl0IHRha2VzIDIyMzEwIGNhbGxz IHRvIGZhaWwuICBVZ2guICBUaGUgZm9sbG93aW5nCj4gKyoqICBleHBsYW5hdGlvbiBpcyBmcm9t IExhcnM6Cj4gKyoqCj4gKyoqICBUaGUgcHJlY29uZGl0aW9uIHRoYXQgbXVzdCBiZSBmdWxmaWxs ZWQgaXMgdGhhdCBEb01hdGNoIHdpbGwgY29uc3VtZSBhdAo+ICsqKiAgbGVhc3Qgb25lIGNoYXJh Y3RlciBpbiB0ZXh0LiAgVGhpcyBpcyB0cnVlIGlmICpwIGlzIG5laXRoZXIgJyonIG5vciAnXDAn LikKPiArKiogIFRoZSBsYXN0IHJldHVybiBoYXMgQUJPUlQgaW5zdGVhZCBvZiBmYWxzZSB0byBh dm9pZCBxdWFkcmF0aWMgYmVoYXZpb3VyIGluCj4gKyoqICBjYXNlcyBsaWtlIHBhdHRlcm4gIiph KmIqYypkIiB3aXRoIHRleHQgImFiY3h4eHh4Ii4gIFdpdGggZmFsc2UsIGVhY2gKPiArKiogIHN0 YXItbG9vcCBoYXMgdG8gcnVuIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQ7IHdpdGggQUJPUlQgb25s eSB0aGUgbGFzdCBvbmUKPiArKiogIGRvZXMuCj4gKyoqCj4gKyoqICBPbmNlIHRoZSBjb250cm9s IG9mIG9uZSBpbnN0YW5jZSBvZiBEb01hdGNoIGVudGVycyB0aGUgc3Rhci1sb29wLCB0aGF0Cj4g KyoqICBpbnN0YW5jZSB3aWxsIHJldHVybiBlaXRoZXIgdHJ1ZSBvciBBQk9SVCwgYW5kIGFueSBj YWxsaW5nIGluc3RhbmNlIHdpbGwKPiArKiogIHRoZXJlZm9yZSByZXR1cm4gaW1tZWRpYXRlbHkg YWZ0ZXIgKHdpdGhvdXQgY2FsbGluZyByZWN1cnNpdmVseSBhZ2FpbikuCj4gKyoqICBJbiBlZmZl Y3QsIG9ubHkgb25lIHN0YXItbG9vcCBpcyBldmVyIGFjdGl2ZS4gIEl0IHdvdWxkIGJlIHBvc3Np YmxlIHRvCj4gKyoqICBtb2RpZnkgdGhlIGNvZGUgdG8gbWFpbnRhaW4gdGhpcyBjb250ZXh0IGV4 cGxpY2l0bHksIGVsaW1pbmF0aW5nIGFsbAo+ICsqKiAgcmVjdXJzaXZlIGNhbGxzIGF0IHRoZSBj b3N0IG9mIHNvbWUgY29tcGxpY2F0aW9uIGFuZCBsb3NzIG9mIGNsYXJpdHkgKGFuZAo+ICsqKiAg dGhlIEFCT1JUIHN0dWZmIHNlZW1zIHRvIGJlIHVuY2xlYXIgZW5vdWdoIGJ5IGl0c2VsZikuICBJ IHRoaW5rIGl0IHdvdWxkCj4gKyoqICBiZSB1bndpc2UgdG8gdHJ5IHRvIGdldCB0aGlzIGludG8g YSByZWxlYXNlZCB2ZXJzaW9uIHVubGVzcyB5b3UgaGF2ZSBhCj4gKyoqICBnb29kIHRlc3QgZGF0 YSBiYXNlIHRvIHRyeSBpdCBvdXQgb24uCj4gKyoqCj4gKyoqICBKdW5lLCAxOTkxOiAgUm9iZXJ0 IEVseiA8a3JlQG11bm5hcmkub3ouYXU+IGFkZGVkIG1pbnVzIGFuZCBjbG9zZSBicmFja2V0Cj4g KyoqICBoYW5kbGluZyBmb3IgY2hhcmFjdGVyIHNldHMuCj4gKyoqCj4gKyoqICBKdWx5LCAyMDAw OiAgTGFyZ2VseSByZXdyaXR0ZW4gYnkgUnVzcyBBbGxiZXJ5IDxycmFAc3RhbmZvcmQuZWR1PiB0 byBhZGQKPiArKiogIHN1cHBvcnQgZm9yICcsJywgJyEnLCBhbmQgb3B0aW9uYWxseSAnQCcgdG8g dGhlIGNvcmUgd2lsZG1hdCByb3V0aW5lLgo+ICsqKiAgQnJva2UgdGhlIGNoYXJhY3RlciBjbGFz cyBtYXRjaGluZyBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIGNsYXJpdHkKPiArKiogIHNp bmNlIGl0J3MgaW5mcmVxdWVudGx5IHVzZWQgaW4gcHJhY3RpY2UsIGFuZCBhZGRlZCBzb21lIHNp bXBsZSBsb29rYWhlYWQKPiArKiogIHRvIHNpZ25pZmljYW50bHkgZGVjcmVhc2UgdGhlIHJlY3Vy c2l2ZSBjYWxscyBpbiB0aGUgJyonIG1hdGNoaW5nIGNvZGUuCj4gKyoqICBBZGRlZCBzdXBwb3J0 IGZvciBVVEYtOCBhcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhbnkgaGlnaC1iaXQK PiArKiogIGNoYXJhY3RlcnMuCj4gKyoqCj4gKyoqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBV VEYtOCwgc2VlIFJGQyAzNjI5Lgo+ICsqKgo+ICsqKiAgUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGZp bGUgaXMgaW50ZW50aW9uYWxseSB3cml0dGVuIHNvIHRoYXQgY29uZGl0aW9uYWxseQo+ICsqKiAg ZXhlY3V0ZWQgZXhwcmVzc2lvbnMgYXJlIG9uIHNlcGFyYXRlIGxpbmVzIGZyb20gdGhlIGNvbmRp dGlvbiB0bwo+ICsqKiAgZmFjaWxpdGF0ZSBhbmFseXNpcyBvZiB0aGUgY292ZXJhZ2Ugb2YgdGhl IHRlc3Qgc3VpdGUgdXNpbmcgcHVyZWNvdi4KPiArKiogIFBsZWFzZSBwcmVzZXJ2ZSB0aGlzLiAg QXMgb2YgTWFyY2ggMTEsIDIwMDEsIHB1cmVjb3YgcmVwb3J0cyB0aGF0IHRoZQo+ICsqKiAgYWNj b21wYW55aW5nIHRlc3Qgc3VpdGUgYWNoaWV2ZXMgMTAwJSBjb3ZlcmFnZSBvZiB0aGlzIGZpbGUu Cj4gKyovCj4gKwo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlICJ1d2lsZG1hdC5o Igo+ICsKPiArI2RlZmluZSBBQk9SVCAtMQo+ICsKPiArLyogV2hldGhlciBvciBub3QgYW4gb2N0 ZXQgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgYSBVVEYtOCBjaGFyYWN0ZXIuICovCj4gKyNkZWZp bmUgSVNVVEY4KGMpICAgICAgICgoKGMpICYgMHhjMCkgPT0gMHhjMCkKPiArCj4gKwo+ICsvKgo+ ICsqKiAgRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBub24tQVNDSUkgY2hhcmFjdGVyIGluIG9j dGV0cyAoZm9yIGFkdmFuY2luZwo+ICsqKiAgcG9pbnRlcnMgd2hlbiBza2lwcGluZyBvdmVyIGNo YXJhY3RlcnMpLiAgVGFrZXMgYSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZgo+ICsqKiAgdGhlIGNo YXJhY3RlciBhbmQgdG8gdGhlIGxhc3Qgb2N0ZXQgb2YgdGhlIHN0cmluZy4gIElmIGVuZCBpcyBO VUxMLCBleHBlY3QKPiArKiogIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBzdGFydCB0byBiZSBu dWwtdGVybWluYXRlZC4gIElmIHRoZSBjaGFyYWN0ZXIgaXMKPiArKiogIG1hbGZvcm1lZCBVVEYt OCwgcmV0dXJuIDEgdG8gdHJlYXQgaXQgbGlrZSBhbiBlaWdodC1iaXQgbG9jYWwgY2hhcmFjdGVy Lgo+ICsqLwo+ICtzdGF0aWMgaW50Cj4gK3V0ZjhfbGVuZ3RoKGNvbnN0IHVuc2lnbmVkIGNoYXIg KnN0YXJ0LCBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGNo YXIgbWFzayA9IDB4ODA7Cj4gKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOwo+ICsgICAgaW50 IGxlbmd0aCA9IDA7Cj4gKyAgICBpbnQgbGVmdDsKPiArCj4gKyAgICBmb3IgKDsgbWFzayA+IDAg JiYgKCpzdGFydCAmIG1hc2spID09IG1hc2s7IG1hc2sgPj49IDEpCj4gKyAgICAgICAgbGVuZ3Ro Kys7Cj4gKyAgICBpZiAobGVuZ3RoIDwgMiB8fCBsZW5ndGggPiA2KQo+ICsgICAgICAgIHJldHVy biAxOwo+ICsgICAgaWYgKGVuZCAhPSBOVUxMICYmIChlbmQgLSBzdGFydCArIDEpIDwgbGVuZ3Ro KQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgbGVmdCA9IGxlbmd0aCAtIDE7Cj4gKyAgICBm b3IgKHAgPSBzdGFydCArIDE7IGxlZnQgPiAwICYmICgqcCAmIDB4YzApID09IDB4ODA7IHArKykK PiArICAgICAgICBsZWZ0LS07Cj4gKyAgICByZXR1cm4gKGxlZnQgPT0gMCkgPyBsZW5ndGggOiAx Owo+ICt9Cj4gKwo+ICsKPiArLyoKPiArKiogIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgY29udGFp bnMgb25seSB2YWxpZCBVVEYtOCBjaGFyYWN0ZXJzLgo+ICsqLwo+ICtib29sCj4gK2lzX3ZhbGlk X3V0ZjgoY29uc3QgY2hhciAqdGV4dCkKPiArewo+ICsgICAgdW5zaWduZWQgY2hhciBtYXNrOwo+ ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKPiArICAgIGludCBsZW5ndGg7Cj4gKyAgICBp bnQgbGVmdDsKPiArCj4gKyAgICBmb3IgKHAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXRleHQ7 ICpwICE9ICdcMCc7KSB7Cj4gKyAgICAgICAgbWFzayA9IDB4ODA7Cj4gKyAgICAgICAgbGVuZ3Ro ID0gMDsKPiArCj4gKyAgICAgICAgLyogRmluZCBvdXQgdGhlIGV4cGVjdGVkIGxlbmd0aCBvZiB0 aGUgY2hhcmFjdGVyLiAqLwo+ICsgICAgICAgIGZvciAoOyBtYXNrID4gMCAmJiAoKnAgJiBtYXNr KSA9PSBtYXNrOyBtYXNrID4+PSAxKQo+ICsgICAgICAgICAgICBsZW5ndGgrKzsKPiArCj4gKyAg ICAgICAgcCsrOwo+ICsKPiArICAgICAgICAvKiBWYWxpZCBBU0NJSS4gKi8KPiArICAgICAgICBp ZiAobGVuZ3RoID09IDApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIAo+ICsg ICAgICAgIC8qIEludmFsaWQgbGVuZ3RoLiAqLwo+ICsgICAgICAgIGlmIChsZW5ndGggPCAyIHx8 IGxlbmd0aCA+IDYpCj4gKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICAgICAg LyogQ2hlY2sgdGhhdCBlYWNoIGJ5dGUgbG9va3MgbGlrZSAxMHh4eHh4eCwgZXhjZXB0IGZvciB0 aGUgZmlyc3QuICovCj4gKyAgICAgICAgbGVmdCA9IGxlbmd0aCAtIDE7Cj4gKyAgICAgICAgZm9y ICg7IGxlZnQgPiAwICYmICgqcCAmIDB4YzApID09IDB4ODA7IHArKykKPiArICAgICAgICAgICAg bGVmdC0tOwo+ICsKPiArICAgICAgICBpZiAobGVmdCA+IDApCj4gKyAgICAgICAgICAgIHJldHVy biBmYWxzZTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArCj4g Ky8qCj4gKyoqICBDb252ZXJ0IGEgVVRGLTggY2hhcmFjdGVyIHRvIFVDUy00LiAgVGFrZXMgYSBw b2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUKPiArKiogIGNoYXJhY3RlciBhbmQgdG8gdGhlIGxh c3Qgb2N0ZXQgb2YgdGhlIHN0cmluZywgYW5kIHRvIGEgdWludDMyX3QgaW50bwo+ICsqKiAgd2hp Y2ggdG8gcHV0IHRoZSBkZWNvZGVkIFVDUy00IHZhbHVlLiAgSWYgZW5kIGlzIE5VTEwsIGV4cGVj dCB0aGUgc3RyaW5nCj4gKyoqICBwb2ludGVkIHRvIGJ5IHN0YXJ0IHRvIGJlIG51bC10ZXJtaW5h dGVkLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIG9jdGV0cyBpbgo+ICsqKiAgdGhlIFVURi04IGVu Y29kaW5nLiAgSWYgdGhlIFVURi04IGNoYXJhY3RlciBpcyBtYWxmb3JtZWQsIHNldCByZXN1bHQg dG8KPiArKiogIHRoZSBkZWNpbWFsIHZhbHVlIG9mIHRoZSBmaXJzdCBvY3RldDsgdGhpcyBpcyB3 cm9uZywgYnV0IGl0IHdpbGwgZ2VuZXJhbGx5Cj4gKyoqICBjYXVzZSB0aGUgcmVzdCBvZiB0aGUg d2lsZG1hdCBtYXRjaGluZyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIG5vbi1VVEYtOAo+ICsq KiAgaW5wdXQuCj4gKyovCj4gK3N0YXRpYyBpbnQKPiArdXRmOF9kZWNvZGUoY29uc3QgdW5zaWdu ZWQgY2hhciAqc3RhcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKPiArICAgICAgICAgICAg dWludDMyX3QgKnJlc3VsdCkKPiArewo+ICsgICAgdWludDMyX3QgdmFsdWUgPSAwOwo+ICsgICAg aW50IGxlbmd0aCwgaTsKPiArICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzdGFydDsKPiAr ICAgIHVuc2lnbmVkIGNoYXIgbWFzazsKPiArCj4gKyAgICBsZW5ndGggPSB1dGY4X2xlbmd0aChz dGFydCwgZW5kKTsKPiArICAgIGlmIChsZW5ndGggPCAyKSB7Cj4gKyAgICAgICAgKnJlc3VsdCA9 ICpzdGFydDsKPiArICAgICAgICByZXR1cm4gMTsKPiArICAgIH0KPiArICAgIG1hc2sgPSAoMSA8 PCAoNyAtIGxlbmd0aCkpIC0gMTsKPiArICAgIHZhbHVlID0gKnAgJiBtYXNrOwo+ICsgICAgcCsr Owo+ICsgICAgZm9yIChpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgewo+ICsgICAgICAgIHZh bHVlID0gKHZhbHVlIDw8IDYpIHwgKCpwICYgMHgzZik7Cj4gKyAgICAgICAgcCsrOwo+ICsgICAg fQo+ICsgICAgKnJlc3VsdCA9IHZhbHVlOwo+ICsgICAgcmV0dXJuIGxlbmd0aDsKPiArfQo+ICsK PiArCj4gKy8qCj4gKyoqICBNYXRjaCBhIGNoYXJhY3RlciBjbGFzcyBhZ2FpbnN0IHRleHQsIGEg VUNTLTQgY2hhcmFjdGVyLiAgc3RhcnQgaXMgYQo+ICsqKiAgcG9pbnRlciB0byB0aGUgZmlyc3Qg Y2hhcmFjdGVyIG9mIHRoZSBjaGFyYWN0ZXIgY2xhc3MsIGVuZCBhIHBvaW50ZXIgdG8KPiArKiog IHRoZSBsYXN0LiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjbGFzcyBtYXRjaGVzIHRoYXQgY2hhcmFj dGVyLgo+ICsqLwo+ICtzdGF0aWMgYm9vbAo+ICttYXRjaF9jbGFzcyh1aW50MzJfdCB0ZXh0LCBj b25zdCB1bnNpZ25lZCBjaGFyICpzdGFydCwKPiArICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqZW5kKQo+ICt7Cj4gKyAgICBib29sIHJldmVyc2VkLCBhbGxvd3JhbmdlOwo+ICsgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHN0YXJ0Owo+ICsgICAgdWludDMyX3QgZmlyc3QgPSAw Owo+ICsgICAgdWludDMyX3QgbGFzdDsKPiArCj4gKyAgICAvKiBDaGVjayBmb3IgYW4gaW52ZXJ0 ZWQgY2hhcmFjdGVyIGNsYXNzIChzdGFydGluZyB3aXRoIF4pLiAgSWYgdGhlCj4gKyAgICAgICBj aGFyYWN0ZXIgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyIGNsYXNzLCB3ZSByZXR1cm4gIXJldmVyc2Vk OyB0aGF0IHdheSwKPiArICAgICAgIHdlIHJldHVybiB0cnVlIGlmIGl0J3MgYSByZWd1bGFyIGNo YXJhY3RlciBjbGFzcyBhbmQgZmFsc2UgaWYgaXQncyBhCj4gKyAgICAgICByZXZlcnNlZCBvbmUu ICBJZiB0aGUgY2hhcmFjdGVyIGRvZXNuJ3QgbWF0Y2gsIHdlIHJldHVybiByZXZlcnNlZC4gKi8K PiArICAgIHJldmVyc2VkID0gKCpwID09ICdeJyk7Cj4gKyAgICBpZiAocmV2ZXJzZWQpCj4gKyAg ICAgICAgcCsrOwo+ICsKPiArICAgIC8qIFdhbGsgdGhyb3VnaCB0aGUgY2hhcmFjdGVyIGNsYXNz IHVudGlsIHdlIHJlYWNoIHRoZSBlbmQgb3IgZmluZCBhCj4gKyAgICAgICBtYXRjaCwgaGFuZGxp bmcgY2hhcmFjdGVyIHJhbmdlcyBhcyB3ZSBnby4gIE9ubHkgcGVybWl0IGEgcmFuZ2UgdG8KPiAr ICAgICAgIHN0YXJ0IHdoZW4gYWxsb3dyYW5nZSBpcyB0cnVlOyB0aGlzIGFsbG93cyAtIHRvIGJl IHRyZWF0ZWQgbGlrZSBhCj4gKyAgICAgICBub3JtYWwgY2hhcmFjdGVyIGFzIHRoZSBmaXJzdCBj aGFyYWN0ZXIgb2YgdGhlIGNsYXNzIGFuZCBjYXRjaGVzCj4gKyAgICAgICBtYWxmb3JtZWQgcmFu Z2VzIGxpa2UgYS1lLW4uICBXZSB0cmVhdCB0aGUgY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcK PiArICAgICAgIG9mIGEgcmFuZ2UgYXMgYm90aCBhIHJlZ3VsYXIgbWVtYmVyIG9mIHRoZSBjbGFz cyBhbmQgdGhlIGJlZ2lubmluZyBvZgo+ICsgICAgICAgdGhlIHJhbmdlOyB0aGlzIGlzIGhhcm1s ZXNzIChhbHRob3VnaCBpdCBtZWFucyB0aGF0IG1hbGZvcm1lZCByYW5nZXMKPiArICAgICAgIGxp a2UgbS1hIHdpbGwgbWF0Y2ggbSBhbmQgbm90aGluZyBlbHNlKS4gKi8KPiArICAgIGFsbG93cmFu Z2UgPSBmYWxzZTsKPiArICAgIHdoaWxlIChwIDw9IGVuZCkgewo+ICsgICAgICAgIGlmIChhbGxv d3JhbmdlICYmICpwID09ICctJyAmJiBwIDwgZW5kKSB7Cj4gKyAgICAgICAgICAgIHArKzsKPiAr ICAgICAgICAgICAgcCArPSB1dGY4X2RlY29kZShwLCBlbmQsICZsYXN0KTsKPiArICAgICAgICAg ICAgaWYgKHRleHQgPj0gZmlyc3QgJiYgdGV4dCA8PSBsYXN0KQo+ICsgICAgICAgICAgICAgICAg cmV0dXJuICFyZXZlcnNlZDsKPiArICAgICAgICAgICAgYWxsb3dyYW5nZSA9IGZhbHNlOwo+ICsg ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIHAgKz0gdXRmOF9kZWNvZGUocCwgZW5kLCAm Zmlyc3QpOwo+ICsgICAgICAgICAgICBpZiAodGV4dCA9PSBmaXJzdCkKPiArICAgICAgICAgICAg ICAgIHJldHVybiAhcmV2ZXJzZWQ7Cj4gKyAgICAgICAgICAgIGFsbG93cmFuZ2UgPSB0cnVlOwo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiByZXZlcnNlZDsKPiArfQo+ICsKPiAr Cj4gKy8qCj4gKyoqICBNYXRjaCB0aGUgdGV4dCBhZ2FpbnN0IHRoZSBwYXR0ZXJuIGJldHdlZW4g c3RhcnQgYW5kIGVuZC4gIFRoaXMgaXMgYQo+ICsqKiAgc2luZ2xlIHBhdHRlcm47IGEgbGVhZGlu ZyAhIG9yIEAgbXVzdCBhbHJlYWR5IGJlIHRha2VuIGNhcmUgb2YsIGFuZAo+ICsqKiAgY29tbWFz IG11c3QgYmUgZGVhbHQgd2l0aCBvdXRzaWRlIG9mIHRoaXMgcm91dGluZS4KPiArKi8KPiArc3Rh dGljIGludAo+ICttYXRjaF9wYXR0ZXJuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnN0YXJ0LAo+ICsgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmVuZCkKPiArewo+ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSwgKmVuZGNsYXNzOwo+ ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHN0YXJ0Owo+ICsgICAgYm9vbCBpc21ldGE7 Cj4gKyAgICBpbnQgbWF0Y2hlZCwgd2lkdGg7Cj4gKyAgICB1aW50MzJfdCBjOwo+ICsKPiArICAg IGZvciAoOyBwIDw9IGVuZDsgcCsrKSB7Cj4gKyAgICAgICAgaWYgKCEqdGV4dCAmJiAqcCAhPSAn KicpCj4gKyAgICAgICAgICAgIHJldHVybiBBQk9SVDsKPiArCj4gKyAgICAgICAgc3dpdGNoICgq cCkgewo+ICsgICAgICAgIGNhc2UgJ1xcJzoKPiArICAgICAgICAgICAgaWYgKCEqKytwKQo+ICsg ICAgICAgICAgICAgICAgcmV0dXJuIEFCT1JUOwo+ICsgICAgICAgICAgICAvKiBGYWxsIHRocm91 Z2guICovCj4gKwo+ICsgICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgIGlmICgqdGV4dCsr ICE9ICpwKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArCj4gKyAgICAgICAgY2FzZSAnPyc6Cj4gKyAgICAgICAgICAgIHRleHQgKz0gSVNV VEY4KCp0ZXh0KSA/IHV0ZjhfbGVuZ3RoKHRleHQsIE5VTEwpIDogMTsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKwo+ICsgICAgICAgIGNhc2UgJyonOgo+ICsgICAgICAgICAgICAvKiBDb25zZWN1 dGl2ZSBzdGFycyBhcmUgZXF1aXZhbGVudCB0byBvbmUuICBBZHZhbmNlIHBhdHRlcm4gdG8KPiAr ICAgICAgICAgICAgICAgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgc3Rhci4gKi8KPiArICAgICAg ICAgICAgZm9yICgrK3A7ICpwID09ICcqJzsgcCsrKQo+ICsgICAgICAgICAgICAgICAgOwo+ICsK PiArICAgICAgICAgICAgLyogQSB0cmFpbGluZyBzdGFyIHdpbGwgbWF0Y2ggYW55dGhpbmcuICov Cj4gKyAgICAgICAgICAgIGlmIChwID4gZW5kKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7Cj4gKwo+ICsgICAgICAgICAgICAvKiBCYXNpYyBhbGdvcml0aG06IFJlY3Vyc2UgYXQgZWFj aCBwb2ludCB3aGVyZSB0aGUgKiBjb3VsZAo+ICsgICAgICAgICAgICAgICBwb3NzaWJseSBtYXRj aC4gIElmIHRoZSBtYXRjaCBzdWNjZWVkcyBvciBhYm9ydHMsIHJldHVybgo+ICsgICAgICAgICAg ICAgICBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlLCB0cnkgdGhlIG5leHQgcG9zaXRpb24uCj4gKwo+ ICsgICAgICAgICAgICAgICBPcHRpbWl6YXRpb246IElmIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhl ICogaW4gdGhlIHBhdHRlcm4KPiArICAgICAgICAgICAgICAgaXNuJ3QgYSBtZXRhY2hhcmFjdGVy ICh0aGUgY29tbW9uIGNhc2UpLCB0aGVuIHRoZSAqIGhhcyB0bwo+ICsgICAgICAgICAgICAgICBj b25zdW1lIGNoYXJhY3RlcnMgYXQgbGVhc3QgdXAgdG8gdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0 aGF0Cj4gKyAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGUgdGV4dC4gIFNjYW4gZm9yd2Fy ZCBmb3IgdGhvc2UgcG9pbnRzIHJhdGhlcgo+ICsgICAgICAgICAgICAgICB0aGFuIHJlY3Vyc2lu ZyBhdCBldmVyeSBwb3NzaWJsZSBwb2ludCB0byBzYXZlIHRoZSBleHRyYQo+ICsgICAgICAgICAg ICAgICBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLiAqLwo+ICsgICAgICAgICAgICBpc21ldGEgPSAo KnAgPT0gJ1snIHx8ICpwID09ICc/JyB8fCAqcCA9PSAnXFwnKTsKPiArICAgICAgICAgICAgd2hp bGUgKCp0ZXh0KSB7Cj4gKyAgICAgICAgICAgICAgICB3aWR0aCA9IElTVVRGOCgqdGV4dCkgPyB1 dGY4X2xlbmd0aCh0ZXh0LCBOVUxMKSA6IDE7Cj4gKyAgICAgICAgICAgICAgICBpZiAoaXNtZXRh KSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoX3BhdHRlcm4odGV4dCwg cCwgZW5kKTsKPiArICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IHdpZHRoOwo+ICsgICAgICAg ICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnRleHQgJiYg KnRleHQgIT0gKnApIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSB3aWR0aDsK PiArICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBJU1VURjgoKnRleHQpID8gdXRmOF9s ZW5ndGgodGV4dCwgTlVMTCkgOiAxOwo+ICsgICAgICAgICAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgICAgICAgICBpZiAoISp0ZXh0KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gQUJPUlQ7Cj4gKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoX3BhdHRlcm4o Kyt0ZXh0LCBwICsgMSwgZW5kKTsKPiArICAgICAgICAgICAgICAgIH0KPiArICAgICAgICAgICAg ICAgIGlmIChtYXRjaGVkICE9IGZhbHNlKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBt YXRjaGVkOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIHJldHVybiBBQk9SVDsKPiAr Cj4gKyAgICAgICAgY2FzZSAnWyc6Cj4gKyAgICAgICAgICAgIC8qIEZpbmQgdGhlIGVuZCBvZiB0 aGUgY2hhcmFjdGVyIGNsYXNzLCBtYWtpbmcgc3VyZSBub3QgdG8gcGljawo+ICsgICAgICAgICAg ICAgICB1cCBhIGNsb3NlIGJyYWNrZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2xhc3MuICov Cj4gKyAgICAgICAgICAgIHArKzsKPiArICAgICAgICAgICAgcSA9IHAgKyAoKnAgPT0gJ14nKSAr IDE7Cj4gKyAgICAgICAgICAgIGlmIChxID4gZW5kKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IEFCT1JUOwo+ICsgICAgICAgICAgICBlbmRjbGFzcyA9IG1lbWNocihxLCAnXScsIChzaXplX3Qp IChlbmQgLSBxICsgMSkpOwo+ICsgICAgICAgICAgICBpZiAoIWVuZGNsYXNzKQo+ICsgICAgICAg ICAgICAgICAgcmV0dXJuIEFCT1JUOwo+ICsKPiArICAgICAgICAgICAgLyogRG8gdGhlIGhlYXZ5 IGxpZnRpbmcgaW4gYW5vdGhlciBmdW5jdGlvbiBmb3IgY2xhcml0eSwgc2luY2UKPiArICAgICAg ICAgICAgICAgY2hhcmFjdGVyIGNsYXNzZXMgYXJlIGFuIHVuY29tbW9uIGNhc2UuICovCj4gKyAg ICAgICAgICAgIHRleHQgKz0gdXRmOF9kZWNvZGUodGV4dCwgTlVMTCwgJmMpOwo+ICsgICAgICAg ICAgICBpZiAoIW1hdGNoX2NsYXNzKGMsIHAsIGVuZGNsYXNzIC0gMSkpCj4gKyAgICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICAgICAgIHAgPSBlbmRjbGFzczsKPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAoKnRl eHQgPT0gJ1wwJyk7Cj4gK30KPiArCj4gKwo+ICsvKgo+ICsqKiAgVGFrZXMgdGV4dCBhbmQgYSB3 aWxkbWF0IGV4cHJlc3Npb247IGEgd2lsZG1hdCBleHByZXNzaW9uIGlzIGEKPiArKiogIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIHdpbGRtYXQgcGF0dGVybnMsIG9wdGlvbmFsbHkgcHJlY2VkZWQg YnkgISB0bwo+ICsqKiAgaW52ZXJ0IHRoZSBzZW5zZSBvZiB0aGUgZXhwcmVzc2lvbi4gIFJldHVy bnMgVVdJTERNQVRfTUFUQ0ggaWYgdGhhdAo+ICsqKiAgZXhwcmVzc2lvbiBtYXRjaGVzIHRoZSB0 ZXh0LCBVV0lMRE1BVF9GQUlMIG90aGVyd2lzZS4gIElmIGFsbG93cG9pc29uIGlzCj4gKyoqICBz ZXQsIGFsbG93IEAgdG8gaW50cm9kdWNlIGEgcG9pc29uIGV4cHJlc3Npb24gKHRoZSBzYW1lIGFz ICEsIGJ1dCBpZiBpdAo+ICsqKiAgdHJpZ2dlcnMgdGhlIGZhaWxlZCBtYXRjaCB0aGUgcm91dGlu ZSByZXR1cm5zIFVXSUxETUFUX1BPSVNPTiBpbnN0ZWFkKS4KPiArKi8KPiArc3RhdGljIGVudW0g dXdpbGRtYXQKPiArbWF0Y2hfZXhwcmVzc2lvbihjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBj b25zdCB1bnNpZ25lZCBjaGFyICpzdGFydCwKPiArICAgICAgICAgICAgICAgICBib29sIGFsbG93 cG9pc29uKQo+ICt7Cj4gKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbmQsICpzcGxpdDsKPiAr ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzdGFydDsKPiArICAgIGJvb2wgcmV2ZXJzZSwg ZXNjYXBlZDsKPiArICAgIGJvb2wgbWF0Y2ggPSBmYWxzZTsKPiArICAgIGJvb2wgcG9pc29uID0g ZmFsc2U7Cj4gKyAgICBib29sIHBvaXNvbmVkID0gZmFsc2U7Cj4gKwo+ICsgICAgLyogSGFuZGxl IHRoZSBlbXB0eSBleHByZXNzaW9uIHNlcGFyYXRlbHksIHNpbmNlIG90aGVyd2lzZSBlbmQgd2ls bCBiZQo+ICsgICAgICAgc2V0IHRvIGFuIGludmFsaWQgcG9pbnRlci4gKi8KPiArICAgIGlmICgh KnApCj4gKyAgICAgICAgcmV0dXJuICEqdGV4dCA/IFVXSUxETUFUX01BVENIIDogVVdJTERNQVRf RkFJTDsKPiArICAgIGVuZCA9IHN0YXJ0ICsgc3RybGVuKChjb25zdCBjaGFyICopIHN0YXJ0KSAt IDE7Cj4gKwo+ICsgICAgLyogTWFpbiBtYXRjaCBsb29wLiAgRmluZCBlYWNoIGNvbW1hIHRoYXQg c2VwYXJhdGVzIHBhdHRlcm5zLCBhbmQgYXR0ZW1wdCAKPiArICAgICAgIHRvIG1hdGNoIHRoZSB0 ZXh0IHdpdGggZWFjaCBwYXR0ZXJuIGluIG9yZGVyLiAgVGhlIGxhc3QgbWF0Y2hpbmcKPiArICAg ICAgIHBhdHRlcm4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB3aG9sZSBleHByZXNzaW9uIG1hdGNo ZXMuICovCj4gKyAgICBmb3IgKDsgcCA8PSBlbmQgKyAxOyBwID0gc3BsaXQgKyAxKSB7Cj4gKyAg ICAgICAgaWYgKGFsbG93cG9pc29uKQo+ICsgICAgICAgICAgICBwb2lzb24gPSAoKnAgPT0gJ0An KTsKPiArICAgICAgICByZXZlcnNlID0gKCpwID09ICchJykgfHwgcG9pc29uOwo+ICsgICAgICAg IGlmIChyZXZlcnNlKQo+ICsgICAgICAgICAgICBwKys7Cj4gKwo+ICsgICAgICAgIC8qIEZpbmQg dGhlIGZpcnN0IHVuZXNjYXBlZCBjb21tYSwgaWYgYW55LiAgSWYgdGhlcmUgaXMgbm9uZSwgc3Bs aXQKPiArICAgICAgICAgICB3aWxsIGJlIG9uZSBncmVhdGVyIHRoYW4gZW5kIGFuZCBwb2ludCBh dCB0aGUgbnVsIGF0IHRoZSBlbmQgb2YKPiArICAgICAgICAgICB0aGUgc3RyaW5nLiAqLwo+ICsg ICAgICAgIGZvciAoZXNjYXBlZCA9IGZhbHNlLCBzcGxpdCA9IHA7IHNwbGl0IDw9IGVuZDsgc3Bs aXQrKykgewo+ICsgICAgICAgICAgICBpZiAoKnNwbGl0ID09ICdbJykgewo+ICsgICAgICAgICAg ICAgICAgc3BsaXQrKzsKPiArICAgICAgICAgICAgICAgIGlmICgqc3BsaXQgPT0gJ10nKQo+ICsg ICAgICAgICAgICAgICAgICAgIHNwbGl0Kys7Cj4gKyAgICAgICAgICAgICAgICB3aGlsZSAoc3Bs aXQgPD0gZW5kICYmICpzcGxpdCAhPSAnXScpCj4gKyAgICAgICAgICAgICAgICAgICAgc3BsaXQr KzsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICBpZiAoKnNwbGl0ID09ICcsJyAmJiAh ZXNjYXBlZCkKPiArICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICBlc2NhcGVk ID0gKCpzcGxpdCA9PSAnXFwnKSA/ICFlc2NhcGVkIDogZmFsc2U7Cj4gKyAgICAgICAgfQo+ICsK PiArICAgICAgICAvKiBPcHRpbWl6YXRpb246IElmIG1hdGNoID09ICFyZXZlcnNlIGFuZCBwb2lz b24gPT0gcG9pc29uZWQsIHRoaXMKPiArICAgICAgICAgICBwYXR0ZXJuIGNhbid0IGNoYW5nZSB0 aGUgcmVzdWx0LCBzbyBkb24ndCBkbyBhbnkgd29yay4gKi8KPiArICAgICAgICBpZiAobWF0Y2gg PT0gIXJldmVyc2UgJiYgcG9pc29uID09IHBvaXNvbmVkKQo+ICsgICAgICAgICAgICBjb250aW51 ZTsKPiArICAgICAgICBpZiAobWF0Y2hfcGF0dGVybih0ZXh0LCBwLCBzcGxpdCAtIDEpID09IHRy dWUpIHsKPiArICAgICAgICAgICAgcG9pc29uZWQgPSBwb2lzb247Cj4gKyAgICAgICAgICAgIG1h dGNoID0gIXJldmVyc2U7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgaWYgKHBvaXNvbmVk KQo+ICsgICAgICAgIHJldHVybiBVV0lMRE1BVF9QT0lTT047Cj4gKyAgICByZXR1cm4gbWF0Y2gg PyBVV0lMRE1BVF9NQVRDSCA6IFVXSUxETUFUX0ZBSUw7Cj4gK30KPiArCj4gKwo+ICsvKgo+ICsq KiAgVXNlci1sZXZlbCByb3V0aW5lIHVzZWQgZm9yIHdpbGRtYXRzIHdoZXJlIEAgc2hvdWxkIGJl IHRyZWF0ZWQgYXMgYQo+ICsqKiAgcmVndWxhciBjaGFyYWN0ZXIuCj4gKyovCj4gK2Jvb2wKPiAr dXdpbGRtYXQoY29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqcGF0KQo+ICt7Cj4gKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyICp1dGV4dCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHRleHQ7 Cj4gKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1cGF0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg KikgcGF0Owo+ICsKPiArICAgIGlmICh1cGF0WzBdID09ICcqJyAmJiB1cGF0WzFdID09ICdcMCcp Cj4gKyAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAgICBlbHNlCj4gKyAgICAgICAgcmV0dXJuICht YXRjaF9leHByZXNzaW9uKHV0ZXh0LCB1cGF0LCBmYWxzZSkgPT0gVVdJTERNQVRfTUFUQ0gpOwo+ ICt9Cj4gKwo+ICsKPiArLyoKPiArKiogIFVzZXItbGV2ZWwgcm91dGluZSB1c2VkIGZvciB3aWxk bWF0cyB0aGF0IHN1cHBvcnQgcG9pc29uIG1hdGNoZXMuCj4gKyovCj4gK2VudW0gdXdpbGRtYXQK PiArdXdpbGRtYXRfcG9pc29uKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnBhdCkKPiAr ewo+ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXRleHQgPSAoY29uc3QgdW5zaWduZWQgY2hh ciAqKSB0ZXh0Owo+ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXBhdCA9IChjb25zdCB1bnNp Z25lZCBjaGFyICopIHBhdDsKPiArCj4gKyAgICBpZiAodXBhdFswXSA9PSAnKicgJiYgdXBhdFsx XSA9PSAnXDAnKQo+ICsgICAgICAgIHJldHVybiBVV0lMRE1BVF9NQVRDSDsKPiArICAgIGVsc2UK PiArICAgICAgICByZXR1cm4gbWF0Y2hfZXhwcmVzc2lvbih1dGV4dCwgdXBhdCwgdHJ1ZSk7Cj4g K30KPiArCj4gKwo+ICsvKgo+ICsqKiAgVXNlci1sZXZlbCByb3V0aW5lIGZvciBzaW1wbGUgZXhw cmVzc2lvbnMgKG5laXRoZXIgLCBub3IgISBhcmUgc3BlY2lhbCkuCj4gKyovCj4gK2Jvb2wKPiAr dXdpbGRtYXRfc2ltcGxlKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnBhdCkKPiArewo+ ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXRleHQgPSAoY29uc3QgdW5zaWduZWQgY2hhciAq KSB0ZXh0Owo+ICsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXBhdCA9IChjb25zdCB1bnNpZ25l ZCBjaGFyICopIHBhdDsKPiArICAgIHNpemVfdCBsZW5ndGg7Cj4gKwo+ICsgICAgaWYgKHVwYXRb MF0gPT0gJyonICYmIHVwYXRbMV0gPT0gJ1wwJykKPiArICAgICAgICByZXR1cm4gdHJ1ZTsKPiAr ICAgIGVsc2Ugewo+ICsgICAgICAgIGxlbmd0aCA9IHN0cmxlbihwYXQpOwo+ICsgICAgICAgIHJl dHVybiAobWF0Y2hfcGF0dGVybih1dGV4dCwgdXBhdCwgdXBhdCArIGxlbmd0aCAtIDEpID09IHRy dWUpOwo+ICsgICAgfQo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi91d2lsZG1hdC91d2lsZG1hdC5o IGIvbGliL3V3aWxkbWF0L3V3aWxkbWF0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjJlNDcxODkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL3V3aWxkbWF0L3V3 aWxkbWF0LmgKPiBAQCAtMCwwICsxLDI0IEBACj4gKwo+ICsjaWZuZGVmIFVXSUxETUFUX0gKPiAr I2RlZmluZSBVV0lMRE1BVF9IIDEKPiArCj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKwo+ICsvKgo+ICsqKiAg V0lMRE1BVCBNQVRDSElORwo+ICsqLwo+ICtlbnVtIHV3aWxkbWF0IHsKPiArICAgIFVXSUxETUFU X0ZBSUwgICA9IDAsCj4gKyAgICBVV0lMRE1BVF9NQVRDSCAgPSAxLAo+ICsgICAgVVdJTERNQVRf UE9JU09OCj4gK307Cj4gKwo+ICtleHRlcm4gYm9vbCAgICAgICAgICAgICBpc192YWxpZF91dGY4 KGNvbnN0IGNoYXIgKnN0YXJ0KTsKPiArZXh0ZXJuIGJvb2wgICAgICAgICAgICAgdXdpbGRtYXQo Y29uc3QgY2hhciAqdGV4dCwgY29uc3QgY2hhciAqcGF0KTsKPiArZXh0ZXJuIGJvb2wgICAgICAg ICAgICAgdXdpbGRtYXRfc2ltcGxlKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnBhdCk7 Cj4gK2V4dGVybiBlbnVtIHV3aWxkbWF0ICAgIHV3aWxkbWF0X3BvaXNvbihjb25zdCBjaGFyICp0 ZXh0LCBjb25zdCBjaGFyICpwYXQpOwo+ICsKPiArCj4gKyNlbmRpZiAvKiBVV0lMRE1BVF9IICov Cj4gLS0gCj4gMS45LjEKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJ bnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK