From mboxrd@z Thu Jan 1 00:00:00 1970 From: abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org Subject: Re: [DPU PATCH] drm/msm: Remove dpu_edid_parser Date: Mon, 12 Mar 2018 18:59:33 -0700 Message-ID: References: <20180223191515.155783-1-seanpaul@chromium.org> <20180223215141.GQ223881@art_vandelay> <0569f6fdbf932942defa603f09867c50@codeaurora.org> <20180226153642.GT223881@art_vandelay> <20180312201107.GX223881@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180312201107.GX223881@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: linux-arm-msm , linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Rob Clark , nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Jeykumar Sankaran , freedreno , "Kristian H. Kristensen" List-Id: linux-arm-msm@vger.kernel.org T24gMjAxOC0wMy0xMiAxMzoxMSwgU2VhbiBQYXVsIHdyb3RlOgo+IE9uIE1vbiwgRmViIDI2LCAy MDE4IGF0IDAyOjIzOjQwUE0gLTA4MDAsIGFiaGluYXZrQGNvZGVhdXJvcmEub3JnIAo+IHdyb3Rl Ogo+PiBPbiAyMDE4LTAyLTI2IDA3OjM2LCBTZWFuIFBhdWwgd3JvdGU6Cj4+ID4gT24gRnJpLCBG ZWIgMjMsIDIwMTggYXQgMDU6NDg6NDhQTSAtMDUwMCwgUm9iIENsYXJrIHdyb3RlOgo+PiA+ID4g T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgNTozMSBQTSwgIDxhYmhpbmF2a0Bjb2RlYXVyb3JhLm9y Zz4gd3JvdGU6Cj4+ID4gPiA+IFRoZSBiaXRtYXBzIGluIGRybV9oZG1pX2luZm8gZG9udCBzZWVt IHRvIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLgo+PiA+ID4gPgo+PiA+ID4gPiBPdXIgbW9kZSBz ZWxlY3Rpb24gbG9naWMgaXMgaW4gdXNlcnNwYWNlIGF0IHRoZSBtb21lbnQgd2hpY2ggbWVhbnMg aXRzCj4+ID4gPiA+IGJldHRlciB1c2Vyc3BhY2Uga25vd3Mgd2hpY2ggbW9kZXMgc3VwcG9ydCB3 aGF0Lgo+PiA+ID4gPgo+PiA+ID4gPiBJZiB3ZSBkZWNpZGUgdG8gbW92ZSBtb2RlIHZhbGlkYXRp b24gZW50aXJlbHkgdG8gdGhlIGRyaXZlciwgd2UgY2FuIHVzZQo+PiA+ID4gPiB0aGVzZSBiaXRt YXBzIHRvIHZhbGlkYXRlLgo+PiA+ID4gPgo+PiA+ID4gPiBCdXQgdGhpcyBpcyBhZ2FpbiBhIGZ1 bmRhbWVudGFsIHF1ZXN0aW9uIHRoZW4uCj4+ID4gPiA+Cj4+ID4gPiA+IElzIHRoZXJlIG5vIHVz ZS1jYXNlIHNvIGZhciB3aGVyZSB1c2Vyc3BhY2UgaGFzIGhhZCB0byBrbm93IHdoaWNoIG1vZGVz Cj4+ID4gPiA+IHN1cHBvcnQgd2hpY2ggZm9ybWF0cz8KPj4gPiA+ID4KPj4gPiA+Cj4+ID4gPiBJ IHRoaW5rIGhpc3RvcmljYWxseSBhIGxvdCBtb3JlIG9mIHRoZSBmb2N1cyB1cHN0cmVhbSBzbyBm YXIgaGFzIGJlZW4KPj4gPiA+ICJkZXNrdG9wIHN0eWxlIiB1c2UgY2FzZXMsIHdoZXJlIFJHQiB0 byB0aGUgc2luayBtYWtlcyBtb3JlIHNlbnNlLgo+PiA+ID4gVGhhdCBkb2Vzbid0IG1lYW4gdGhl cmUgaXNuJ3QgYSB1c2UtY2FzZSBmb3IgWVVWLiAgSSdtIG5vdCBzdXJlLCBhbmQKPj4gPiA+IGhh dmVuJ3QgcmVhbGx5IGdpdmVuIG11Y2ggdGhvdWdodCBpbnRvLCBob3cgdG8gZXhwb3NlIHRoaXMg dG8KPj4gPiA+IHVzZXJzcGFjZS4gIEJ1dCBJIGd1ZXNzIHRoZSBzYW1lIHRoaW5nIGNvbWVzIHVw IHcvIEhEUiBhbmQgaGlnaGVyCj4+ID4gPiBiaXQtZGVwdGggUkdCIG1vZGVzIChsaWtlIDEwXzEw XzEwIGZvcm1hdHMsIGV0YyksIGFuZCBwZW9wbGUgYXJlCj4+ID4gPiBnaXZpbmcgdGhvdWdodCB0 byB0aG9zZSB0aGluZ3MgdGhlc2UgZGF5cy4gIEkgaGF2ZW4ndCBiZWVuIGZvbGxvd2luZwo+PiA+ ID4gdGhlIEhEUiB3b3JrICp0aGF0KiBjbG9zZWx5LCBidXQgSSBndWVzcyBpZiB5b3Ugd2FudCB0 byB1c2UgSERSLCB5b3UKPj4gPiA+IHdhbnQgdG8ga25vdyB3aGF0IG1vZGVzIHN1cHBvcnQgaXQg YXQgdGhlIHNpbmsuCj4+ID4gPgo+PiA+ID4gRWl0aGVyIHdheSwgSSB0aGluayB0aGlzIGlzIHNv bWV0aGluZyB3aGljaCBzaG91bGQgYmUgc3VwcG9ydGVkIGluIGRybQo+PiA+ID4gY29yZSB3aXRo IGEgc3RhbmRhcmRpemVkIFVBUEksIHJhdGhlciB0aGFuIGJ5IGRyaXZlciByb2xsaW5nIGl0J3Mg b3duCj4+ID4gPiBlZGlkIHBhcnNpbmcgYW5kIGN1c3RvbSBVQVBJLgo+PiA+ID4KPj4gPiA+IChJ IGd1ZXNzIGV4dGVuZGluZyB0aGUgbW9kZWluZm8gc3RydWN0IG1pZ2h0IGJlIGRpZmZpY3VsdCwg YnV0IHBlcmhhcHMKPj4gPiA+IGEgYmxvYiBwcm9wZXJ0eSB3LyBzdXBwbGVtZW50YWwgaW5mbyBt aWdodCBtYWtlIHNlbnNlPz8gIE9yIG1heWJlCj4+ID4gPiBzb21lb25lIGFscmVhZHkgaGFzIHNv bWUgb3RoZXIgaWRlYXM/KQo+PiA+Cj4+ID4KPj4gPiBZZWFoLCBpbiBjb25qdW5jdGlvbiB3aXRo IGhkciBzdXBwb3J0LCBzb21lIHR5cGUgb2YgbW9kZWluZm8KPj4gPiBzdXBwbGVtZW50YXJ5IGRh dGEKPj4gPiBzZWVtcyBhcHByb3ByaWF0ZS4KPj4gPgo+PiA+IFdlIGhhdmUgc29tZSBzcGFjZSBs ZWZ0IGluIG1vZGVpbmZvLT5mbGFncywgYnV0IHRoYXQgZG9lc24ndCBzY2FsZSBzbwo+PiA+IHdl bGwuCj4+ID4gQWRkaW5nIGEgcHJvcGVydHkgd291bGQgYmUgZWFzaWVzdCBzaW5jZSB3ZSBjb3Vs ZCBqdXN0IGV4cG9zZSB0aGUgYml0bWFwCj4+ID4gdG8KPj4gPiB1c2Vyc3BhY2UgKG1vcmUgb3Ig bGVzcykuIFdlIGNvdWxkIGFsc28gY2hhbmdlICJwYWQiIGluCj4+ID4gZHJtX21vZGVfZ2V0X2Nv bm5lY3Rvcgo+PiA+IHRvIGZsYWdzIGFuZCBhbGxvdyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCBlbmhh bmNlZCBtb2RlIGluZm8uCj4+ID4KPj4gPiBTZWFuCj4+ID4KPj4gWWVzLCB3ZSBoYWQgYmVlbiB1 c2luZyBmbGFncyBzbyBsb25nIGFzIHBlciBvdXIgZWFybGllciBkaXNjdXNzaW9uIAo+PiB3aXRo IFJvYgo+PiBvbiB0aGlzLgo+PiBJdCB3b3JrcyB3ZWxsIHNvIGZhciBhbmQgdGhhdHMgcHJldHR5 IG11Y2ggd2hhdCB0aGUgRURJRCBwYXJzZXIgd2FzIAo+PiBkb2luZy4KPj4gVGhhdHMgd2h5IEkg bWVudGlvbmVkCj4+IHRoYXQgd2UgY2FuIGtlZXAgc29tZSBwYXJ0IG9mIHRoZSBwYXJzZXIgYW5k IGdldCByaWQgb2YgbW9zdCBvZiBpdC4KPiAKPiBHaXZlbiB0aGF0IHdlIGRvbid0IGhhdmUgYSB1 c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMsIGFuZCBpdCAKPiBkb2Vzbid0Cj4gc2Vl bSBsaWtlbHkgdGhhdCB3ZSB3aWxsIGhhdmUgb25lIHNvb24sIEknZCByZWNvbW1lbmQgd2Uga2Vl cCB0aGlzIAo+IHBhdGNoIGFzLWlzCj4gYW5kIGV4cG9zZSBkcm1faGRtaV9pbmZvIHdpdGggYSBw cm9wZXJ0eSB3aGVuIHRoZSBuZWVkIGFyaXNlcy4KPiAKPiBTZWFuCkluIHRoZSBhYnNlbmNlIG9m IGEgc29sdXRpb24gaW4gdGhlIHVwc3RyZWFtIHdoaWNoIGlzIHJlYWRpbHkgdXNhYmxlIEkgCmFt IGhlc2l0YW50LgpIb3dldmVyIHNpbmNlIGNocm9tZSB1c2Vyc3BhY2UgZG9lc250IGhhdmUgdGhp cyBwYXJzaW5nIHN1cHBvcnQgbGV0cyBnbyAKYWhlYWQgd2l0aCBpdC4KSSB3aWxsIHdvcmsgb24g YWxpZ25pbmcgd2l0aCB0aGUgdXBzdHJlYW0gbWV0aG9kIG9uIHRoZSBmb3JtYXRzIHdoZW4gd2Ug CmhhdmUgc29tZXRoaW5nCmNvbmNyZXRlLgo+IAo+PiAKPj4gSWYgd2Ugd2FudCB0byBtb3ZlIG92 ZXIgdG8gYW5vdGhlciBwcm9wZXJ0eSwgd2Ugd2lsbCBleHBsb3JlIHRoaXMgCj4+IG9wdGlvbgo+ PiBtb3ZpbmcgZm9yd2FyZC4KPj4gCj4+IEFiaGluYXYKPj4gPgo+PiA+ID4KPj4gPiA+IEJSLAo+ PiA+ID4gLVIKPj4gPiA+Cj4+ID4gPiA+IFRoYW5rcwo+PiA+ID4gPgo+PiA+ID4gPiBBYmhpbmF2 Cj4+ID4gPiA+Cj4+ID4gPiA+Cj4+ID4gPiA+IE9uIDIwMTgtMDItMjMgMTM6NTEsIFNlYW4gUGF1 bCB3cm90ZToKPj4gPiA+ID4+Cj4+ID4gPiA+PiBPbiBGcmksIEZlYiAyMywgMjAxOCBhdCAwMToy OTowM1BNIC0wODAwLCBhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZyB3cm90ZToKPj4gPiA+ID4+Pgo+ PiA+ID4gPj4+IEkgYW0gT0sgd2l0aCByZW1vdmluZyBzb21lIHBhcnRzIG9mIHRoZSBwYXJzZXIg YnV0IG5vdCBlbnRpcmVseS4KPj4gPiA+ID4+Pgo+PiA+ID4gPj4+IEZ1bmRhbWVudGFsbHksIHdl IHdlbnQgYWhlYWQgd2l0aCB0aGUgcGFyc2VyIGZvciBhIGNvdXBsZSBvZiByZWFzb25zOgo+PiA+ ID4gPj4+Cj4+ID4gPiA+Pj4gLT4gV2Ugd291bGQgbGlrZSB0byBiZSBhYmxlIHRvIGFzc29jaWF0 ZSB0aGUgY29sb3IgZm9ybWF0IHdpdGggdGhlIG1vZGUuCj4+ID4gPiA+Pj4gVGhpcyBoZWxwcyB1 cyBkZWNpZGUgdGhhdCBpZiB0aGUgc2FtZSBtb2RlIHN1cHBvcnRzIGJvdGggUkdCL1lVViB0aGVu Cj4+ID4gPiA+Pj4gd2hpY2gKPj4gPiA+ID4+PiBvbmUgd2UgY2FuIHBpY2suCj4+ID4gPiA+Pj4K Pj4gPiA+ID4+PiAtPiBUaGUgdXBzdHJlYW0gcGFyc2VyIGN1cnJlbnRseSBqdXN0IGFkZHMgaXQg dG8gdGhlIHN1cHBvcnRlZCBmb3JtYXRzIG9mCj4+ID4gPiA+Pj4gdGhlIHNpbmsgaW5mby0+Y29s b3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOyBIb3dldmVyIHRoZQo+PiA+ ID4gPj4+IGxpbmsKPj4gPiA+ID4+PiBiZXR3ZWVuIHRoZSBtb2RlIGFuZCB0aGUgZm9ybWF0IGl0 c2VsZiBpcyB1bmNsZWFyCj4+ID4gPiA+Pj4KPj4gPiA+ID4+PiBJIHdvdWxkIGxpa2UgdG8ga25v dyBpZiBhbnkgb2YgdGhlIGFib3ZlIGhhdmUgYmVlbiBhZGRyZXNzZWQgc28gZmFyCj4+ID4gPiA+ Pj4gYmVmb3JlCj4+ID4gPiA+Pj4gcmV2ZXJ0aW5nIHRoaXMuCj4+ID4gPiA+Pgo+PiA+ID4gPj4K Pj4gPiA+ID4+IFRoZSBpbmZvcm1hdGlvbiBvZiB3aGljaCBtb2RlcyBzdXBwb3J0IHdoaWNoIGZv cm1hdHMgaXMgc3RvcmVkIGluIGJpdG1hcHMKPj4gPiA+ID4+IHdpdGhpbgo+PiA+ID4gPj4gZHJt X2hkbWlfaW5mby4gVGhlIGRvY3VtZW50YXRpb24gaXMgaGVyZToKPj4gPiA+ID4+Cj4+ID4gPiA+ Pgo+PiA+ID4gPj4gaHR0cHM6Ly8wMS5vcmcvbGludXhncmFwaGljcy9nZngtZG9jcy9kcm0vZ3B1 L2RybS1rbXMuaHRtbD9oaWdobGlnaHQ9ZHJtX2hkbWlfaW5mbyNjLmRybV9oZG1pX2luZm8KPj4g PiA+ID4+Cj4+ID4gPiA+PiBJcyB0aGlzIHN1ZmZpY2llbnQ/Cj4+ID4gPiA+Pgo+PiA+ID4gPj4g U2Vhbgo+PiA+ID4gPj4KPj4gPiA+ID4+Pgo+PiA+ID4gPj4+IFRoYW5rcwo+PiA+ID4gPj4+Cj4+ ID4gPiA+Pj4gQWJoaW5hdgo+PiA+ID4gPj4+Cj4+ID4gPiA+Pj4KPj4gPiA+ID4+PiBPbiAyMDE4 LTAyLTIzIDExOjE1LCBTZWFuIFBhdWwgd3JvdGU6Cj4+ID4gPiA+Pj4gPiBVc2UgZHJtX2VkaWQg dG8gcGFyc2UgdGhlIGVkaWQgaW5zdGVhZCBvZiB0aGUgaGFuZCByb2xsZWQgZHB1IHZlcnNpb24u Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gU2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFu cGF1bEBjaHJvbWl1bS5vcmc+ClJldmlld2VkLWJ5OiBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2a0Bj b2RlYXVyb3JhLm9yZz4KPj4gPiA+ID4+PiA+IC0tLQo+PiA+ID4gPj4+ID4gIGRyaXZlcnMvZ3B1 L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgfCAgIDEgLQo+PiA+ID4gPj4+ID4gIGRyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYyAgICAgfCAgMjIgKy0KPj4gPiA+ID4+PiA+ICBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYyAgIHwgICA3IC0KPj4gPiA+ID4+PiA+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMgICAgIHwgIDc3ICsrLQo+PiA+ID4gPj4+ ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgICAgfCAgIDcgKy0KPj4gPiA+ ID4+PiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jIHwgNjU3IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+ID4gPiA+Pj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9k cHVfZWRpZF9wYXJzZXIuaCB8IDE2NiAtLS0tLS0tCj4+ID4gPiA+Pj4gPiAgNyBmaWxlcyBjaGFu Z2VkLCA1NSBpbnNlcnRpb25zKCspLCA4ODIgZGVsZXRpb25zKC0pCj4+ID4gPiA+Pj4gPiAgZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKPj4g PiA+ID4+PiA+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRp ZF9wYXJzZXIuaAo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL01ha2VmaWxlCj4+ID4gPiA+Pj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20v TWFrZWZpbGUKPj4gPiA+ID4+PiA+IGluZGV4IGZjZDg1YWUyOGQ2Ni4uMmZiOWJhMTFkZjE5IDEw MDY0NAo+PiA+ID4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+PiA+ ID4gPj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+PiA+ID4gPj4+ID4g QEAgLTg2LDcgKzg2LDYgQEAgbXNtLXkgOj0gXAo+PiA+ID4gPj4+ID4gICAgICAgZGlzcC9kcHUx L2RwdV9ybS5vIFwKPj4gPiA+ID4+PiA+ICAgICAgIGRpc3AvZHB1MS9kcHVfdmJpZi5vIFwKPj4g PiA+ID4+PiA+ICAgICAgIGRwdV9kYmcubyBcCj4+ID4gPiA+Pj4gPiAtICAgICBkcHVfZWRpZF9w YXJzZXIubyBcCj4+ID4gPiA+Pj4gPiAgICAgICBkcHVfaW9fdXRpbC5vIFwKPj4gPiA+ID4+PiA+ ICAgICAgIGRwdV9kYmdfZXZ0bG9nLm8gXAo+PiA+ID4gPj4+ID4gICAgICAgZHB1X3Bvd2VyX2hh bmRsZS5vIFwKPj4gPiA+ID4+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2F1ZGlvLmMKPj4gPiA+ID4+PiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRp by5jCj4+ID4gPiA+Pj4gPiBpbmRleCA0ZTBjZGNkMTVjOGMuLmNlMDBiOGI1MjYzMSAxMDA2NDQK Pj4gPiA+ID4+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYwo+PiA+ ID4gPj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4+ID4gPiA+ Pj4gPiBAQCAtMTgsNiArMTgsNyBAQAo+PiA+ID4gPj4+ID4gICNpbmNsdWRlIDxsaW51eC9tc21f ZXh0X2Rpc3BsYXkuaD4KPj4gPiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiAgI2luY2x1ZGUgPGRybS9k cm1fZHBfaGVscGVyLmg+Cj4+ID4gPiA+Pj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+ICAjaW5jbHVkZSAiZHBfY2F0YWxvZy5oIgo+PiA+ID4g Pj4+ID4gICNpbmNsdWRlICJkcF9hdWRpby5oIgo+PiA+ID4gPj4+ID4gQEAgLTQ4MCw3ICs0ODEs NiBAQCBzdGF0aWMgaW50IGRwX2F1ZGlvX2dldF9lZGlkX2JsayhzdHJ1Y3QKPj4gPiA+ID4+PiA+ IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4gPiA+ID4+PiA+ICB7Cj4+ID4gPiA+Pj4gPiAgICAg ICBpbnQgcmMgPSAwOwo+PiA+ID4gPj4+ID4gICAgICAgc3RydWN0IGRwX2F1ZGlvX3ByaXZhdGUg KmF1ZGlvOwo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWQ7Cj4+ ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gICAgICAgYXVkaW8gPSBnZXRfYXVkaW9fZ2V0X2RhdGEo cGRldik7Cj4+ID4gPiA+Pj4gPiAgICAgICBpZiAoSVNfRVJSKGF1ZGlvKSkgewo+PiA+ID4gPj4+ ID4gQEAgLTQ4OCwxOSArNDg4LDI5IEBAIHN0YXRpYyBpbnQgZHBfYXVkaW9fZ2V0X2VkaWRfYmxr KHN0cnVjdAo+PiA+ID4gPj4+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+PiA+ID4gPj4+ID4g ICAgICAgICAgICAgICBnb3RvIGVuZDsKPj4gPiA+ID4+PiA+ICAgICAgIH0KPj4gPiA+ID4+PiA+ Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWF1ZGlvLT5wYW5lbCB8fCAhYXVkaW8tPnBhbmVsLT5l ZGlkX2N0cmwpIHsKPj4gPiA+ID4+PiA+ICsgICAgIGlmICghYXVkaW8tPnBhbmVsIHx8ICFhdWRp by0+cGFuZWwtPmVkaWQpIHsKPj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAgcHJfZXJyKCJpbnZh bGlkIHBhbmVsIGRhdGFcbiIpOwo+PiA+ID4gPj4+ID4gICAgICAgICAgICAgICByYyA9IC1FSU5W QUw7Cj4+ID4gPiA+Pj4gPiAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+PiA+ID4gPj4+ID4gICAg ICAgfQo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+IC0gICAgIGVkaWQgPSBhdWRpby0+cGFuZWwt PmVkaWRfY3RybDsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+ICsvKgo+PiA+ID4gPj4+ID4g KyAqIFRPRE86Cj4+ID4gPiA+Pj4gPiArICogICBhdWRpb19kYXRhX2JsayBzaG91bGQgYmUgY2hh bmdlZCB0byBiZSBhIGNlYV9zYWQgYXJyYXkKPj4gPiA+ID4+PiA+ICsgKiAgIGF1ZGlvX2RhdGFf YmxrX3NpemUgc2hvdWxkIGJlIGNoYW5nZWQgdG8gY29udGFpbiBhIGNvdW50IG9mIHNhZHMKPj4g PiA+ID4+PiA+ICsgKgo+PiA+ID4gPj4+ID4gKyAqICAgT25jZSB0aGlzIGlzIGRvbmUsIHVzZSBk cm1fZWRpZF90b19zYWQoKSB0byBleHRyYWN0IHRoaXMgZnJvbQo+PiA+ID4gPj4+ID4gKyAqICAg YXVkaW8tPnBhbmVsLT5lZGlkLiBJJ2QgY2hhbmdlIHRoaXMsIGJ1dCBJIGRvbid0IGhhdmUgdGhh dCBjb2RlCj4+ID4gPiA+Pj4gPiA6Lwo+PiA+ID4gPj4+ID4gKyAqLwo+PiA+ID4gPj4+ID4gKyNp ZiAwCj4+ID4gPiA+Pj4gPiAgICAgICBibGstPmF1ZGlvX2RhdGFfYmxrID0gZWRpZC0+YXVkaW9f ZGF0YV9ibG9jazsKPj4gPiA+ID4+PiA+ICAgICAgIGJsay0+YXVkaW9fZGF0YV9ibGtfc2l6ZSA9 IGVkaWQtPmFkYl9zaXplOwo+PiA+ID4gPj4+ID4gKyNlbmRpZgo+PiA+ID4gPj4+ID4gKwo+PiA+ ID4gPj4+ID4gKyAgICAgYmxrLT5zcGtfYWxsb2NfZGF0YV9ibGtfc2l6ZSA9IGRybV9lZGlkX3Rv X3NwZWFrZXJfYWxsb2NhdGlvbigKPj4gPiA+ID4+PiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhdWRpby0+cGFuZWwtPmVkaWQsCj4+ID4gPiA+Pj4gPiAr Cj4+ID4gPiA+Pj4gPiBibGstPnNwa3JfYWxsb2NfZGF0YV9ibG9jayk7Cj4+ID4gPiA+Pj4gPgo+ PiA+ID4gPj4+ID4gLSAgICAgYmxrLT5zcGtfYWxsb2NfZGF0YV9ibGsgPSBlZGlkLT5zcGtyX2Fs bG9jX2RhdGFfYmxvY2s7Cj4+ID4gPiA+Pj4gPiAtICAgICBibGstPnNwa19hbGxvY19kYXRhX2Js a19zaXplID0gZWRpZC0+c2FkYl9zaXplOwo+PiA+ID4gPj4+ID4gIGVuZDoKPj4gPiA+ID4+PiA+ ICAgICAgIHJldHVybiByYzsKPj4gPiA+ID4+PiA+ICB9Cj4+ID4gPiA+Pj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4gPiA+ID4+PiA+IGIvZHJp dmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4gPiA+ID4+PiA+IGluZGV4IDZmMmMw NjgwOWJmNS4uODQ2ZWYzM2FlY2JkIDEwMDY0NAo+PiA+ID4gPj4+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPj4gPiA+ID4+PiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCj4+ID4gPiA+Pj4gPiBAQCAtMzczLDEyICszNzMsNiBA QCBzdGF0aWMgaW50IGRwX2Rpc3BsYXlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ID4gPiA+ Pj4gPiBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4+ID4gPiA+Pj4gPiAgICAgICAgICAgICAgIGdv dG8gZW5kOwo+PiA+ID4gPj4+ID4gICAgICAgfQo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+IC0g ICAgIHJjID0gZHAtPnBhbmVsLT5kcHVfZWRpZF9yZWdpc3RlcihkcC0+cGFuZWwpOwo+PiA+ID4g Pj4+ID4gLSAgICAgaWYgKHJjKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHByX2Vycigi RFJNIERQIEVESUQgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAg ICAgZ290byBlbmQ7Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+ Pj4gPiAgICAgICByYyA9IGRwLT5wb3dlci0+cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyLCAm cHJpdi0+cGhhbmRsZSk7Cj4+ID4gPiA+Pj4gPiAgICAgICBpZiAocmMpIHsKPj4gPiA+ID4+PiA+ ICAgICAgICAgICAgICAgcHJfZXJyKCJQb3dlciBjbGllbnQgY3JlYXRlIGZhaWxlZFxuIik7Cj4+ ID4gPiA+Pj4gPiBAQCAtNDEyLDcgKzQwNiw2IEBAIHN0YXRpYyB2b2lkIGRwX2Rpc3BsYXlfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gPiA+ID4+PiA+IHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKPj4gPiA+ID4+PiA+ICAgICAgIH0KPj4gPiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiAgICAgICAo dm9pZClkcC0+cG93ZXItPnBvd2VyX2NsaWVudF9kZWluaXQoZHAtPnBvd2VyKTsKPj4gPiA+ID4+ PiA+IC0gICAgICh2b2lkKWRwLT5wYW5lbC0+ZHB1X2VkaWRfZGVyZWdpc3RlcihkcC0+cGFuZWwp Owo+PiA+ID4gPj4+ID4gICAgICAgKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyKGRw LT5hdXgpOwo+PiA+ID4gPj4+ID4gICAgICAgZHBfZGlzcGxheV9kZWluaXRpYWxpemVfaGRjcChk cCk7Cj4+ID4gPiA+Pj4gPiAgfQo+PiA+ID4gPj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+PiA+ID4gPj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3BhbmVsLmMKPj4gPiA+ID4+PiA+IGluZGV4IDExYzMzMzhlMjNiMS4uNjNmOWJmNDA3 NTA4IDEwMDY0NAo+PiA+ID4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YW5lbC5jCj4+ID4gPiA+Pj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVs LmMKPj4gPiA+ID4+PiA+IEBAIC0xNiw2ICsxNiw5IEBACj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ ID4gICNpbmNsdWRlICJkcF9wYW5lbC5oIgo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPj4gPiA+ID4+PiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9lZGlkLmg+Cj4+ID4gPiA+Pj4gPiArCj4+ID4gPiA+Pj4gPiAgI2RlZmluZSBEUF9QQU5FTF9E RUZBVUxUX0JQUCAyNAo+PiA+ID4gPj4+ID4gICNkZWZpbmUgRFBfTUFYX0RTX1BPUlRfQ09VTlQg MQo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+IEBAIC0xNTEsOSArMTU0LDEwIEBAIHN0YXRpYyBp bnQgZHBfcGFuZWxfcmVhZF9lZGlkKHN0cnVjdCBkcF9wYW5lbAo+PiA+ID4gPj4+ID4gKmRwX3Bh bmVsLAo+PiA+ID4gPj4+ID4gICAgICAgcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlLAo+PiA+ID4gPj4+ID4gZHBfcGFuZWwpOwo+PiA+ID4gPj4+ ID4KPj4gPiA+ID4+PiA+ICAgICAgIGRvIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgZHB1 X2dldF9lZGlkKGNvbm5lY3RvciwgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYywKPj4gPiA+ID4+ PiA+IC0gICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikmZHBfcGFuZWwtPmVkaWRfY3RybCk7 Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGlmICghZHBfcGFuZWwtPmVkaWRfY3RybC0+ZWRp ZCkgewo+PiA+ID4gPj4+ID4gKyAgICAgICAgICAgICBrZnJlZShkcF9wYW5lbC0+ZWRpZCk7Cj4+ ID4gPiA+Pj4gPiArICAgICAgICAgICAgIGRwX3BhbmVsLT5lZGlkID0gZHJtX2dldF9lZGlkKGNv bm5lY3RvciwKPj4gPiA+ID4+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYyk7Cj4+ID4gPiA+Pj4gPiArICAgICAg ICAgICAgIGlmICghZHBfcGFuZWwtPmVkaWQpIHsKPj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAg ICAgICAgICBwcl9lcnIoIkVESUQgcmVhZCBmYWlsZWRcbiIpOwo+PiA+ID4gPj4+ID4gICAgICAg ICAgICAgICAgICAgICAgIHJldHJ5X2NudCsrOwo+PiA+ID4gPj4+ID4gICAgICAgICAgICAgICAg ICAgICAgIHBhbmVsLT5hdXgtPnJlY29uZmlnKHBhbmVsLT5hdXgpOwo+PiA+ID4gPj4+ID4gQEAg LTE2Myw3ICsxNjcsNyBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBf cGFuZWwKPj4gPiA+ID4+PiA+ICpkcF9wYW5lbCwKPj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAg fQo+PiA+ID4gPj4+ID4gICAgICAgfSB3aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKPj4g PiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiAtICAgICByZXR1cm4gLUVJTlZBTDsKPj4gPiA+ID4+PiA+ ICsgICAgIHJldHVybiBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRp ZCk7Cj4+ID4gPiA+Pj4gPiAgfQo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+ICBzdGF0aWMgaW50 IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCj4+ID4g PiA+Pj4gPiBAQCAtMTg4LDcgKzE5Miw3IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9zaW5r X2NhcHMoc3RydWN0IGRwX3BhbmVsCj4+ID4gPiA+Pj4gPiAqZHBfcGFuZWwsCj4+ID4gPiA+Pj4g PiAgICAgICB9Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gICAgICAgcmMgPSBkcF9wYW5lbF9y ZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAocmMp IHsKPj4gPiA+ID4+PiA+ICsgICAgIGlmIChyYyA8IDApIHsKPj4gPiA+ID4+PiA+ICAgICAgICAg ICAgICAgcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVkLCBzZXQgZmFpbHNhZmUgbW9kZVxu Iik7Cj4+ID4gPiA+Pj4gPiAgICAgICAgICAgICAgIHJldHVybiByYzsKPj4gPiA+ID4+PiA+ICAg ICAgIH0KPj4gPiA+ID4+PiA+IEBAIC0yMTUsNyArMjE5LDcgQEAgc3RhdGljIHUzMiBkcF9wYW5l bF9nZXRfbWF4X3BjbGsoc3RydWN0IGRwX3BhbmVsCj4+ID4gPiA+Pj4gPiAqZHBfcGFuZWwpCj4+ ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gICAgICAgbGlua19pbmZvID0gJmRwX3BhbmVsLT5saW5r X2luZm87Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gLSAgICAgYnBjID0gZHB1X2dldF9zaW5r X2JwYyhkcF9wYW5lbC0+ZWRpZF9jdHJsKTsKPj4gPiA+ID4+PiA+ICsgICAgIGJwYyA9IGRwX3Bh bmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGM7Cj4+ID4gPiA+Pj4gPiAgICAgICBicHAg PSBicGMgKiBudW1fY29tcG9uZW50czsKPj4gPiA+ID4+PiA+ICAgICAgIGlmICghYnBwKQo+PiA+ ID4gPj4+ID4gICAgICAgICAgICAgICBicHAgPSBEUF9QQU5FTF9ERUZBVUxUX0JQUDsKPj4gPiA+ ID4+PiA+IEBAIC0yOTAsOCArMjk0LDggQEAgc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMo c3RydWN0IGRwX3BhbmVsCj4+ID4gPiA+Pj4gPiAqZHBfcGFuZWwsCj4+ID4gPiA+Pj4gPiAgICAg ICBpZiAoZHBfcGFuZWwtPnZpZGVvX3Rlc3QpIHsKPj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAg ZHBfcGFuZWxfc2V0X3Rlc3RfbW9kZShwYW5lbCwgbW9kZSk7Cj4+ID4gPiA+Pj4gPiAgICAgICAg ICAgICAgIHJldHVybiAxOwo+PiA+ID4gPj4+ID4gLSAgICAgfSBlbHNlIGlmIChkcF9wYW5lbC0+ ZWRpZF9jdHJsLT5lZGlkKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBfZHB1 X2VkaWRfdXBkYXRlX21vZGVzKGNvbm5lY3RvciwKPj4gPiA+ID4+PiA+IGRwX3BhbmVsLT5lZGlk X2N0cmwpOwo+PiA+ID4gPj4+ID4gKyAgICAgfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgewo+ PiA+ID4gPj4+ID4gKyAgICAgICAgICAgICByZXR1cm4gZHBfcGFuZWxfcmVhZF9lZGlkKGRwX3Bh bmVsLCBjb25uZWN0b3IpOwo+PiA+ID4gPj4+ID4gICAgICAgfQo+PiA+ID4gPj4+ID4KPj4gPiA+ ID4+PiA+ICAgICAgIC8qIGZhaWwtc2FmZSBtb2RlICovCj4+ID4gPiA+Pj4gPiBAQCAtMzAwLDYg KzMwNCwyNyBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHBfcGFuZWwK Pj4gPiA+ID4+PiA+ICpkcF9wYW5lbCwKPj4gPiA+ID4+PiA+ICAgICAgIHJldHVybiAxOwo+PiA+ ID4gPj4+ID4gIH0KPj4gPiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiArc3RhdGljIHU4IGRwX3BhbmVs X2dldF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBlZGlkICplZGlkKQo+PiA+ID4gPj4+ID4gK3sKPj4g PiA+ID4+PiA+ICsgICAgIHN0cnVjdCBlZGlkICpsYXN0X2Jsb2NrID0gTlVMTDsKPj4gPiA+ID4+ PiA+ICsgICAgIHU4ICpyYXdfZWRpZCA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiArCj4+ID4gPiA+Pj4g PiArICAgICBpZiAoIWVkaWQpIHsKPj4gPiA+ID4+PiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJp bnZhbGlkIGVkaWQgaW5wdXRcbiIpOwo+PiA+ID4gPj4+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsKPj4gPiA+ID4+PiA+ICsgICAgIH0KPj4gPiA+ID4+PiA+ICsKPj4gPiA+ID4+PiA+ICsgICAg IHJhd19lZGlkID0gKHU4ICopZWRpZDsKPj4gPiA+ID4+PiA+ICsgICAgIHJhd19lZGlkICs9IChl ZGlkLT5leHRlbnNpb25zICogRURJRF9MRU5HVEgpOwo+PiA+ID4gPj4+ID4gKyAgICAgbGFzdF9i bG9jayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwo+PiA+ID4gPj4+ID4gKwo+PiA+ID4gPj4+ ID4gKyAgICAgaWYgKGxhc3RfYmxvY2spCj4+ID4gPiA+Pj4gPiArICAgICAgICAgICAgIHJldHVy biBsYXN0X2Jsb2NrLT5jaGVja3N1bTsKPj4gPiA+ID4+PiA+ICsKPj4gPiA+ID4+PiA+ICsgICAg IHByX2VycigiSW52YWxpZCBibG9jaywgbm8gY2hlY2tzdW1cbiIpOwo+PiA+ID4gPj4+ID4gKyAg ICAgcmV0dXJuIDA7Cj4+ID4gPiA+Pj4gPiArfQo+PiA+ID4gPj4+ID4gKwo+PiA+ID4gPj4+ID4g IHN0YXRpYyB2b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0IGRwX3BhbmVs ICpkcF9wYW5lbCkKPj4gPiA+ID4+PiA+ICB7Cj4+ID4gPiA+Pj4gPiAgICAgICBzdHJ1Y3QgZHBf cGFuZWxfcHJpdmF0ZSAqcGFuZWw7Cj4+ID4gPiA+Pj4gPiBAQCAtMzEyLDcgKzMzNyw3IEBAIHN0 YXRpYyB2b2lkIGRwX3BhbmVsX2hhbmRsZV9zaW5rX3JlcXVlc3Qoc3RydWN0Cj4+ID4gPiA+Pj4g PiBkcF9wYW5lbCAqZHBfcGFuZWwpCj4+ID4gPiA+Pj4gPiAgICAgICBwYW5lbCA9IGNvbnRhaW5l cl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsCj4+ID4gPiA+Pj4gPiBkcF9w YW5lbCk7Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gICAgICAgaWYgKHBhbmVsLT5saW5rLT5z aW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Cj4+ID4gPiA+Pj4gPiAtICAg ICAgICAgICAgIHU4IGNoZWNrc3VtID0gZHB1X2dldF9lZGlkX2NoZWNrc3VtKGRwX3BhbmVsLT5l ZGlkX2N0cmwpOwo+PiA+ID4gPj4+ID4gKyAgICAgICAgICAgICB1OCBjaGVja3N1bSA9IGRwX3Bh bmVsX2dldF9lZGlkX2NoZWNrc3VtKGRwX3BhbmVsLT5lZGlkKTsKPj4gPiA+ID4+PiA+Cj4+ID4g PiA+Pj4gPiAgICAgICAgICAgICAgIHBhbmVsLT5saW5rLT5zZW5kX2VkaWRfY2hlY2tzdW0ocGFu ZWwtPmxpbmssIGNoZWNrc3VtKTsKPj4gPiA+ID4+PiA+ICAgICAgICAgICAgICAgcGFuZWwtPmxp bmstPnNlbmRfdGVzdF9yZXNwb25zZShwYW5lbC0+bGluayk7Cj4+ID4gPiA+Pj4gPiBAQCAtMzgy LDM2ICs0MDcsNiBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX3RpbWluZ19jZmcoc3RydWN0IGRwX3Bh bmVsCj4+ID4gPiA+Pj4gPiAqZHBfcGFuZWwpCj4+ID4gPiA+Pj4gPiAgICAgICByZXR1cm4gcmM7 Cj4+ID4gPiA+Pj4gPiAgfQo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+PiA+IC1zdGF0aWMgaW50IGRw X3BhbmVsX2VkaWRfcmVnaXN0ZXIoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPj4gPiA+ID4+ PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICBpbnQgcmMgPSAwOwo+PiA+ID4gPj4+ID4gLQo+PiA+ ID4gPj4+ID4gLSAgICAgaWYgKCFkcF9wYW5lbCkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAg ICBwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBy YyA9IC1FSU5WQUw7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGdvdG8gZW5kOwo+PiA+ID4g Pj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgZHBfcGFuZWwt PmVkaWRfY3RybCA9IGRwdV9lZGlkX2luaXQoKTsKPj4gPiA+ID4+PiA+IC0gICAgIGlmICghZHBf cGFuZWwtPmVkaWRfY3RybCkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBwcl9lcnIoImRw dSBlZGlkIGluaXQgZm9yIERQIGZhaWxlZFxuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAg IHJjID0gLUVOT01FTTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgZ290byBlbmQ7Cj4+ID4g PiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtZW5kOgo+PiA+ID4gPj4+ID4gLSAgICAgcmV0 dXJuIHJjOwo+PiA+ID4gPj4+ID4gLX0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC1zdGF0 aWMgdm9pZCBkcF9wYW5lbF9lZGlkX2RlcmVnaXN0ZXIoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5l bCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWRwX3BhbmVsKSB7Cj4+ ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHByX2VycigiaW52YWxpZCBpbnB1dFxuIik7Cj4+ID4g PiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybjsKPj4gPiA+ID4+PiA+IC0gICAgIH0KPj4gPiA+ ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGRwdV9lZGlkX2RlaW5pdCgodm9pZCAqKikmZHBf cGFuZWwtPmVkaWRfY3RybCk7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4g Pj4+ID4gIHN0YXRpYyBpbnQgZHBfcGFuZWxfaW5pdF9wYW5lbF9pbmZvKHN0cnVjdCBkcF9wYW5l bCAqZHBfcGFuZWwpCj4+ID4gPiA+Pj4gPiAgewo+PiA+ID4gPj4+ID4gICAgICAgaW50IHJjID0g MDsKPj4gPiA+ID4+PiA+IEBAIC01MDMsOCArNDk4LDYgQEAgc3RydWN0IGRwX3BhbmVsICpkcF9w YW5lbF9nZXQoc3RydWN0IGRwX3BhbmVsX2luCj4+ID4gPiA+Pj4gPiAqaW4pCj4+ID4gPiA+Pj4g PiAgICAgICBkcF9wYW5lbCA9ICZwYW5lbC0+ZHBfcGFuZWw7Cj4+ID4gPiA+Pj4gPiAgICAgICBw YW5lbC0+YXV4X2NmZ191cGRhdGVfZG9uZSA9IGZhbHNlOwo+PiA+ID4gPj4+ID4KPj4gPiA+ID4+ PiA+IC0gICAgIGRwX3BhbmVsLT5kcHVfZWRpZF9yZWdpc3RlciA9IGRwX3BhbmVsX2VkaWRfcmVn aXN0ZXI7Cj4+ID4gPiA+Pj4gPiAtICAgICBkcF9wYW5lbC0+ZHB1X2VkaWRfZGVyZWdpc3RlciA9 IGRwX3BhbmVsX2VkaWRfZGVyZWdpc3RlcjsKPj4gPiA+ID4+PiA+ICAgICAgIGRwX3BhbmVsLT5p bml0X2luZm8gPSBkcF9wYW5lbF9pbml0X3BhbmVsX2luZm87Cj4+ID4gPiA+Pj4gPiAgICAgICBk cF9wYW5lbC0+dGltaW5nX2NmZyA9IGRwX3BhbmVsX3RpbWluZ19jZmc7Cj4+ID4gPiA+Pj4gPiAg ICAgICBkcF9wYW5lbC0+cmVhZF9zaW5rX2NhcHMgPSBkcF9wYW5lbF9yZWFkX3NpbmtfY2FwczsK Pj4gPiA+ID4+PiA+IEBAIC01MjcsNSArNTIwLDcgQEAgdm9pZCBkcF9wYW5lbF9wdXQoc3RydWN0 IGRwX3BhbmVsICpkcF9wYW5lbCkKPj4gPiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiAgICAgICBwYW5l bCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsCj4+ID4g PiA+Pj4gPiBkcF9wYW5lbCk7Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gKyAgICAga2ZyZWUo ZHBfcGFuZWwtPmVkaWQpOwo+PiA+ID4gPj4+ID4gKyAgICAgZHBfcGFuZWwtPmVkaWQgPSBOVUxM Owo+PiA+ID4gPj4+ID4gICAgICAgZGV2bV9rZnJlZShwYW5lbC0+ZGV2LCBwYW5lbCk7Cj4+ID4g PiA+Pj4gPiAgfQo+PiA+ID4gPj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZHAvZHBfcGFuZWwuaAo+PiA+ID4gPj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bh bmVsLmgKPj4gPiA+ID4+PiA+IGluZGV4IGE5NWZkMDE1N2E0ZS4uZDZlYmRiOThmNzY3IDEwMDY0 NAo+PiA+ID4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4+ ID4gPiA+Pj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKPj4gPiA+ ID4+PiA+IEBAIC0xOCw3ICsxOCw4IEBACj4+ID4gPiA+Pj4gPiAgI2luY2x1ZGUgImRwX2F1eC5o Igo+PiA+ID4gPj4+ID4gICNpbmNsdWRlICJkcF9saW5rLmgiCj4+ID4gPiA+Pj4gPiAgI2luY2x1 ZGUgImRwX3VzYnBkLmgiCj4+ID4gPiA+Pj4gPiAtI2luY2x1ZGUgImRwdV9lZGlkX3BhcnNlci5o Igo+PiA+ID4gPj4+ID4gKwo+PiA+ID4gPj4+ID4gK3N0cnVjdCBlZGlkOwo+PiA+ID4gPj4+ID4K Pj4gPiA+ID4+PiA+ICBlbnVtIGRwX2xhbmVfY291bnQgewo+PiA+ID4gPj4+ID4gICAgICAgRFBf TEFORV9DT1VOVF8xID0gMSwKPj4gPiA+ID4+PiA+IEBAIC02Myw3ICs2NCw3IEBAIHN0cnVjdCBk cF9wYW5lbCB7Cj4+ID4gPiA+Pj4gPiAgICAgICB1OCBkc19wb3J0c1tEUF9NQVhfRE9XTlNUUkVB TV9QT1JUU107Cj4+ID4gPiA+Pj4gPgo+PiA+ID4gPj4+ID4gICAgICAgc3RydWN0IGRybV9kcF9s aW5rIGxpbmtfaW5mbzsKPj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcHVfZWRpZF9jdHJsICpl ZGlkX2N0cmw7Cj4+ID4gPiA+Pj4gPiArICAgICBzdHJ1Y3QgZWRpZCAqZWRpZDsKPj4gPiA+ID4+ PiA+ICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4+ID4gPiA+Pj4gPiAg ICAgICBzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBwaW5mbzsKPj4gPiA+ID4+PiA+ICAgICAgIGJvb2wg dmlkZW9fdGVzdDsKPj4gPiA+ID4+PiA+IEBAIC03MSw4ICs3Miw2IEBAIHN0cnVjdCBkcF9wYW5l bCB7Cj4+ID4gPiA+Pj4gPiAgICAgICB1MzIgdmljOwo+PiA+ID4gPj4+ID4gICAgICAgdTMyIG1h eF9wY2xrX2toejsKPj4gPiA+ID4+PiA+Cj4+ID4gPiA+Pj4gPiAtICAgICBpbnQgKCpkcHVfZWRp ZF9yZWdpc3Rlcikoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7Cj4+ID4gPiA+Pj4gPiAtICAg ICB2b2lkICgqZHB1X2VkaWRfZGVyZWdpc3Rlcikoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCk7 Cj4+ID4gPiA+Pj4gPiAgICAgICBpbnQgKCppbml0X2luZm8pKHN0cnVjdCBkcF9wYW5lbCAqZHBf cGFuZWwpOwo+PiA+ID4gPj4+ID4gICAgICAgaW50ICgqdGltaW5nX2NmZykoc3RydWN0IGRwX3Bh bmVsICpkcF9wYW5lbCk7Cj4+ID4gPiA+Pj4gPiAgICAgICBpbnQgKCpyZWFkX3NpbmtfY2Fwcyko c3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKPj4gPiA+ID4+PiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jCj4+ID4gPiA+Pj4gPiBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKPj4gPiA+ID4+PiA+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAo+PiA+ID4gPj4+ID4gaW5kZXggMjRmNWY0NGMxNDkyLi4wMDAwMDAwMDAwMDAK Pj4gPiA+ID4+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMK Pj4gPiA+ID4+PiA+ICsrKyAvZGV2L251bGwKPj4gPiA+ID4+PiA+IEBAIC0xLDY1NyArMCwwIEBA Cj4+ID4gPiA+Pj4gPiAtLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3Vu ZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiA+ID4gPj4+ID4gLSAqCj4+ID4gPiA+Pj4g PiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgo+PiA+ID4gPj4+ID4gbW9kaWZ5Cj4+ID4gPiA+Pj4gPiAtICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5k Cj4+ID4gPiA+Pj4gPiAtICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4+ID4gPiA+Pj4gPiAtICoKPj4gPiA+ID4+PiA+IC0gKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKPj4gPiA+ID4+PiA+IC0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiA+ID4gPj4+ID4gLSAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPj4gPiA+ ID4+PiA+IC0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ PiA+ID4gPj4+ID4gLSAqLwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSNpbmNsdWRlIDxk cm0vZHJtX2VkaWQuaD4KPj4gPiA+ID4+PiA+IC0jaW5jbHVkZSA8bGludXgvaGRtaS5oPgo+PiA+ ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSNpbmNsdWRlICJkcHVfa21zLmgiCj4+ID4gPiA+Pj4g PiAtI2luY2x1ZGUgImRwdV9lZGlkX3BhcnNlci5oIgo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ ID4gLSNkZWZpbmUgREJDX1NUQVJUX09GRlNFVCA0Cj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBFRElE X0RURF9MRU4gMTgKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC1lbnVtIGRhdGFfYmxvY2tf dHlwZXMgewo+PiA+ID4gPj4+ID4gLSAgICAgUkVTRVJWRUQsCj4+ID4gPiA+Pj4gPiAtICAgICBB VURJT19EQVRBX0JMT0NLLAo+PiA+ID4gPj4+ID4gLSAgICAgVklERU9fREFUQV9CTE9DSywKPj4g PiA+ID4+PiA+IC0gICAgIFZFTkRPUl9TUEVDSUZJQ19EQVRBX0JMT0NLLAo+PiA+ID4gPj4+ID4g LSAgICAgU1BFQUtFUl9BTExPQ0FUSU9OX0RBVEFfQkxPQ0ssCj4+ID4gPiA+Pj4gPiAtICAgICBW RVNBX0RUQ19EQVRBX0JMT0NLLAo+PiA+ID4gPj4+ID4gLSAgICAgUkVTRVJWRUQyLAo+PiA+ID4g Pj4+ID4gLSAgICAgVVNFX0VYVEVOREVEX1RBRwo+PiA+ID4gPj4+ID4gLX07Cj4+ID4gPiA+Pj4g PiAtCj4+ID4gPiA+Pj4gPiAtc3RhdGljIHU4ICpkcHVfZmluZF9lZGlkX2V4dGVuc2lvbihzdHJ1 Y3QgZWRpZCAqZWRpZCwgaW50IGV4dF9pZCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAt ICAgICB1OCAqZWRpZF9leHQgPSBOVUxMOwo+PiA+ID4gPj4+ID4gLSAgICAgaW50IGk7Cj4+ID4g PiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICAvKiBObyBFRElEIG9yIEVESUQgZXh0ZW5zaW9u cyAqLwo+PiA+ID4gPj4+ID4gLSAgICAgaWYgKGVkaWQgPT0gTlVMTCB8fCBlZGlkLT5leHRlbnNp b25zID09IDApCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+PiA+ID4g Pj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgLyogRmluZCBDRUEgZXh0ZW5zaW9uICovCj4+ID4g PiA+Pj4gPiAtICAgICBmb3IgKGkgPSAwOyBpIDwgZWRpZC0+ZXh0ZW5zaW9uczsgaSsrKSB7Cj4+ ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGVkaWRfZXh0ID0gKHU4ICopZWRpZCArIEVESURfTEVO R1RIICogKGkgKyAxKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgaWYgKGVkaWRfZXh0WzBd ID09IGV4dF9pZCkKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4g PiA+ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmIChp ID09IGVkaWQtPmV4dGVuc2lvbnMpCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBO VUxMOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIGVkaWRfZXh0Owo+ PiA+ID4gPj4+ID4gLX0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC1zdGF0aWMgdTggKmRw dV9maW5kX2NlYV9leHRlbnNpb24oc3RydWN0IGVkaWQgKmVkaWQpCj4+ID4gPiA+Pj4gPiAtewo+ PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIGRwdV9maW5kX2VkaWRfZXh0ZW5zaW9uKGVkaWQsIERQ VV9DRUFfRVhUKTsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt c3RhdGljIGludAo+PiA+ID4gPj4+ID4gLWRwdV9jZWFfZGJfcGF5bG9hZF9sZW4oY29uc3QgdTgg KmRiKQo+PiA+ID4gPj4+ID4gLXsKPj4gPiA+ID4+PiA+IC0gICAgIHJldHVybiBkYlswXSAmIDB4 MWY7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRpYyBp bnQKPj4gPiA+ID4+PiA+IC1kcHVfY2VhX2RiX3RhZyhjb25zdCB1OCAqZGIpCj4+ID4gPiA+Pj4g PiAtewo+PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIGRiWzBdID4+IDU7Cj4+ID4gPiA+Pj4gPiAt fQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRpYyBpbnQKPj4gPiA+ID4+PiA+IC1k cHVfY2VhX3JldmlzaW9uKGNvbnN0IHU4ICpjZWEpCj4+ID4gPiA+Pj4gPiAtewo+PiA+ID4gPj4+ ID4gLSAgICAgcmV0dXJuIGNlYVsxXTsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ ID4gPiA+Pj4gPiAtc3RhdGljIGludAo+PiA+ID4gPj4+ID4gLWRwdV9jZWFfZGJfb2Zmc2V0cyhj b25zdCB1OCAqY2VhLCBpbnQgKnN0YXJ0LCBpbnQgKmVuZCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4g PiA+Pj4gPiAtICAgICAvKiBEYXRhIGJsb2NrIG9mZnNldCBpbiBDRUEgZXh0ZW5zaW9uIGJsb2Nr ICovCj4+ID4gPiA+Pj4gPiAtICAgICAqc3RhcnQgPSA0Owo+PiA+ID4gPj4+ID4gLSAgICAgKmVu ZCA9IGNlYVsyXTsKPj4gPiA+ID4+PiA+IC0gICAgIGlmICgqZW5kID09IDApCj4+ID4gPiA+Pj4g PiAtICAgICAgICAgICAgICplbmQgPSAxMjc7Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoKmVuZCA8 IDQgfHwgKmVuZCA+IDEyNykKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIC1FUkFO R0U7Cj4+ID4gPiA+Pj4gPiAtICAgICByZXR1cm4gMDsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+ Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBkcHVfZm9yX2VhY2hfY2VhX2RiKGNlYSwgaSwg c3RhcnQsIGVuZCkgXAo+PiA+ID4gPj4+ID4gLWZvciAoKGkpID0gKHN0YXJ0KTsgXAo+PiA+ID4g Pj4+ID4gLShpKSA8IChlbmQpICYmIChpKSArIGRwdV9jZWFfZGJfcGF5bG9hZF9sZW4oJihjZWEp WyhpKV0pIDwgKGVuZCk7IFwKPj4gPiA+ID4+PiA+IC0oaSkgKz0gZHB1X2NlYV9kYl9wYXlsb2Fk X2xlbigmKGNlYSlbKGkpXSkgKyAxKQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRp YyBib29sIGRwdV9jZWFfZGJfaXNfaGRtaV9oZl92c2RiKGNvbnN0IHU4ICpkYikKPj4gPiA+ID4+ PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICBpbnQgaGRtaV9pZDsKPj4gPiA+ID4+PiA+IC0KPj4g PiA+ID4+PiA+IC0gICAgIGlmIChkcHVfY2VhX2RiX3RhZyhkYikgIT0gVkVORE9SX1NQRUNJRklD X0RBVEFfQkxPQ0spCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4g PiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmIChkcHVfY2VhX2RiX3BheWxvYWRfbGVu KGRiKSA8IDcpCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4gPiA+ ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGhkbWlfaWQgPSBkYlsxXSB8IChkYlsyXSA8PCA4 KSB8IChkYlszXSA8PCAxNik7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICByZXR1 cm4gaGRtaV9pZCA9PSBIRE1JX0ZPUlVNX0lFRUVfT1VJOwo+PiA+ID4gPj4+ID4gLX0KPj4gPiA+ ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC1zdGF0aWMgdTggKmRwdV9lZGlkX2ZpbmRfZXh0ZW5kZWRf dGFnX2Jsb2NrKHN0cnVjdCBlZGlkICplZGlkLCBpbnQKPj4gPiA+ID4+PiA+IGJsa19pZCkKPj4g PiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCAqZGIgPSBOVUxMOwo+PiA+ID4gPj4+ ID4gLSAgICAgdTggKmNlYSA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAg ICBpZiAoIWVkaWQpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCIlczog aW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKPj4gPiA+ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+ PiA+IC0gICAgIGNlYSA9IGRwdV9maW5kX2NlYV9leHRlbnNpb24oZWRpZCk7Cj4+ID4gPiA+Pj4g PiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoY2VhICYmIGRwdV9jZWFfcmV2aXNpb24oY2VhKSA+ PSAzKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGludCBpLCBzdGFydCwgZW5kOwo+PiA+ ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBpZiAoZHB1X2NlYV9kYl9vZmZz ZXRzKGNlYSwgJnN0YXJ0LCAmZW5kKSkKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAg ZHB1X2Zvcl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQpIHsKPj4gPiA+ID4+PiA+IC0g ICAgICAgICAgICAgICAgICAgICBkYiA9ICZjZWFbaV07Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgICAgICAgICAgaWYgKChkcHVfY2VhX2RiX3RhZyhkYikgPT0gRFBVX0VYVEVOREVEX1RBRykg JiYKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYlsxXSA9PSBi bGtfaWQpKQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGRiOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ ID4gPiA+Pj4gPiAtICAgICByZXR1cm4gTlVMTDsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4g PiAtCj4+ID4gPiA+Pj4gPiAtc3RhdGljIHU4ICoKPj4gPiA+ID4+PiA+IC1kcHVfZWRpZF9maW5k X2Jsb2NrKHN0cnVjdCBlZGlkICplZGlkLCBpbnQgYmxrX2lkKQo+PiA+ID4gPj4+ID4gLXsKPj4g PiA+ID4+PiA+IC0gICAgIHU4ICpkYiA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCAqY2Vh ID0gTlVMTDsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmICghZWRpZCkgewo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4i LCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+PiA+ ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgY2VhID0g ZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+ IC0gICAgIGlmIChjZWEgJiYgZHB1X2NlYV9yZXZpc2lvbihjZWEpID49IDMpIHsKPj4gPiA+ID4+ PiA+IC0gICAgICAgICAgICAgaW50IGksIHN0YXJ0LCBlbmQ7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4g PiA+Pj4gPiAtICAgICAgICAgICAgIGlmIChkcHVfY2VhX2RiX29mZnNldHMoY2VhLCAmc3RhcnQs ICZlbmQpKQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBkcHVfZm9yX2VhY2hfY2Vh X2RiKGNlYSwgaSwgc3RhcnQsIGVuZCkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgIGRiID0gJmNlYVtpXTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAo ZHB1X2NlYV9kYl90YWcoZGIpID09IGJsa19pZCkKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBkYjsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgfQo+ PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIE5VTEw7Cj4+ID4g PiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0 YXRpYyBjb25zdCB1OCAqX2RwdV9lZGlkX2ZpbmRfYmxvY2soY29uc3QgdTggKmluX2J1ZiwgdTMy Cj4+ID4gPiA+Pj4gPiBzdGFydF9vZmZzZXQsCj4+ID4gPiA+Pj4gPiAtICAgICB1OCB0eXBlLCB1 OCAqbGVuKQo+PiA+ID4gPj4+ID4gLXsKPj4gPiA+ID4+PiA+IC0gICAgIC8qIHRoZSBzdGFydCBv ZiBkYXRhIGJsb2NrIGNvbGxlY3Rpb24sIHN0YXJ0IG9mIFZpZGVvIERhdGEgQmxvY2sKPj4gPiA+ ID4+PiA+ICovCj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0Owo+ PiA+ID4gPj4+ID4gLSAgICAgdTMyIGRiY19vZmZzZXQgPSBpbl9idWZbMl07Cj4+ID4gPiA+Pj4g PiAtCj4+ID4gPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsK Pj4gPiA+ID4+PiA+IC0gICAgIC8qCj4+ID4gPiA+Pj4gPiAtICAgICAgKiAqIGVkaWQgYnVmZmVy IDEsIGJ5dGUgMiBiZWluZyA0IG1lYW5zIG5vIG5vbi1EVEQvRGF0YSBibG9jawo+PiA+ID4gPj4+ ID4gLSAgICAgICogICBjb2xsZWN0aW9uIHByZXNlbnQuCj4+ID4gPiA+Pj4gPiAtICAgICAgKiAq IGVkaWQgYnVmZmVyIDEsIGJ5dGUgMiBiZWluZyAwIG1lYW5zIG5vIG5vbi1EVEQvREFUQSBibG9j awo+PiA+ID4gPj4+ID4gLSAgICAgICogICBjb2xsZWN0aW9uIHByZXNlbnQgYW5kIG5vIERURCBk YXRhIHByZXNlbnQuCj4+ID4gPiA+Pj4gPiAtICAgICAgKi8KPj4gPiA+ID4+PiA+IC0gICAgIGlm ICgoZGJjX29mZnNldCA9PSAwKSB8fCAoZGJjX29mZnNldCA9PSA0KSkgewo+PiA+ID4gPj4+ID4g LSAgICAgICAgICAgICBEUFVfRVJST1IoIkVESUQ6IG5vIERURCBvciBub24tRFREIGRhdGEgcHJl c2VudFxuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+PiA+ID4g Pj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgd2hpbGUgKG9m ZnNldCA8IGRiY19vZmZzZXQpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgdTggYmxvY2tf bGVuID0gaW5fYnVmW29mZnNldF0gJiAweDFGOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4g LSAgICAgICAgICAgICBpZiAoKG9mZnNldCArIGJsb2NrX2xlbiA8PSBkYmNfb2Zmc2V0KSAmJgo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgKGluX2J1ZltvZmZzZXRdID4+IDUpID09IHR5 cGUpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAqbGVuID0gYmxvY2tfbGVu Owo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIERQVV9FRElEX0RFQlVHKCJibG9j az0lZCBmb3VuZCBAIDB4JXggdy8KPj4gPiA+ID4+PiA+IGxlbj0lZFxuIiwKPj4gPiA+ID4+PiA+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIG9mZnNldCwgYmxvY2tfbGVuKTsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4g aW5fYnVmICsgb2Zmc2V0Owo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4+ID4gPiA+Pj4g PiAtICAgICAgICAgICAgIG9mZnNldCArPSAxICsgYmxvY2tfbGVuOwo+PiA+ID4gPj4+ID4gLSAg ICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJuIE5VTEw7Cj4+ID4g PiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRpYyB2b2lkIGRwdV9l ZGlkX2V4dHJhY3RfdmVuZG9yX2lkKHN0cnVjdCBkcHVfZWRpZF9jdHJsCj4+ID4gPiA+Pj4gPiAq ZWRpZF9jdHJsKQo+PiA+ID4gPj4+ID4gLXsKPj4gPiA+ID4+PiA+IC0gICAgIGNoYXIgKnZlbmRv cl9pZDsKPj4gPiA+ID4+PiA+IC0gICAgIHUzMiBpZF9jb2RlczsKPj4gPiA+ID4+PiA+IC0KPj4g PiA+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+PiA+ID4g Pj4+ID4gLSAgICAgaWYgKCFlZGlkX2N0cmwpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAg RFBVX0VSUk9SKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+PiA+ID4gPj4+ID4g LSAgICAgICAgICAgICByZXR1cm47Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtICAgICB2ZW5kb3JfaWQgPSBlZGlkX2N0cmwtPnZlbmRvcl9pZDsKPj4g PiA+ID4+PiA+IC0gICAgIGlkX2NvZGVzID0gKCh1MzIpZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRb MF0gPDwgOCkgKwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBlZGlkX2N0cmwtPmVkaWQtPm1m Z19pZFsxXTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIHZlbmRvcl9pZFswXSA9 ICdBJyAtIDEgKyAoKGlkX2NvZGVzID4+IDEwKSAmIDB4MUYpOwo+PiA+ID4gPj4+ID4gLSAgICAg dmVuZG9yX2lkWzFdID0gJ0EnIC0gMSArICgoaWRfY29kZXMgPj4gNSkgJiAweDFGKTsKPj4gPiA+ ID4+PiA+IC0gICAgIHZlbmRvcl9pZFsyXSA9ICdBJyAtIDEgKyAoaWRfY29kZXMgJiAweDFGKTsK Pj4gPiA+ID4+PiA+IC0gICAgIHZlbmRvcl9pZFszXSA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICBE UFVfRURJRF9ERUJVRygidmVuZG9yIGlkIGlzICVzICIsIHZlbmRvcl9pZCk7Cj4+ID4gPiA+Pj4g PiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC19 Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfc2V0X3k0 MjBfc3VwcG9ydChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+PiA+ID4gPj4+ID4g LXUzMiB2aWRlb19mb3JtYXQpCj4+ID4gPiA+Pj4gPiAtewo+PiA+ID4gPj4+ID4gLSAgICAgdTgg Y2VhX21vZGUgPSAwOwo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgbW9kZV9mbXRfZmxhZ3MgPSAwOwo+PiA+ID4g Pj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgLyogTmVlZCB0byBhZGQgWTQyMCBzdXBwb3J0IGZs YWcgdG8gdGhlIG1vZGVzICovCj4+ID4gPiA+Pj4gPiAtICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 KG1vZGUsICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgewo+PiA+ID4gPj4+ID4gLSAg ICAgICAgICAgICAvKiBDYWNoZSB0aGUgZm9ybWF0IGZsYWdzIGJlZm9yZSBjbGVhcmluZyAqLwo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBtb2RlX2ZtdF9mbGFncyA9IG1vZGUtPmZsYWdzOwo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAvKiBDbGVhciB0aGUgUkdCL1lVViBmb3JtYXQgZmxh Z3MgYmVmb3JlIGNhbGxpbmcgdXBzdHJlYW0KPj4gPiA+ID4+PiA+IEFQSSAqLwo+PiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICBtb2RlLT5mbGFncyAmPSB+RFBVX0RSTV9NT0RFX0ZMQUdfRk1UX01B U0s7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGNlYV9tb2RlID0gZHJtX21hdGNoX2NlYV9t b2RlKG1vZGUpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAvKiBSZXN0b3JlIHRoZSBmb3Jt YXQgZmxhZ3MgKi8KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgbW9kZS0+ZmxhZ3MgPSBtb2Rl X2ZtdF9mbGFnczsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgaWYgKChjZWFfbW9kZSAhPSAw KSAmJiAoY2VhX21vZGUgPT0gdmlkZW9fZm9ybWF0KSkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAg ICAgICAgICAgICAgIERQVV9FRElEX0RFQlVHKCIlcyBmb3VuZCBtYXRjaCBmb3IgJWQgIiwKPj4g PiA+ID4+PiA+IF9fZnVuY19fLAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIHZp ZGVvX2Zvcm1hdCk7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgbW9kZS0+Zmxh Z3MgfD0gRFJNX01PREVfRkxBR19TVVBQT1JUU19ZVVY7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgIH0KPj4gPiA+ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQyMENNREIoCj4+ID4g PiA+Pj4gPiAtc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwdV9lZGlk X2N0cmwgKmVkaWRfY3RybCwKPj4gPiA+ID4+PiA+IC1jb25zdCB1OCAqZGIpCj4+ID4gPiA+Pj4g PiAtewo+PiA+ID4gPj4+ID4gLSAgICAgdTMyIG9mZnNldCA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAg ICB1OCBjbWRiX2xlbiA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBzdmRfbGVuID0gMDsKPj4g PiA+ID4+PiA+IC0gICAgIGNvbnN0IHU4ICpzdmQgPSBOVUxMOwo+PiA+ID4gPj4+ID4gLSAgICAg dTMyIGkgPSAwLCBqID0gMDsKPj4gPiA+ID4+PiA+IC0gICAgIHUzMiB2aWRlb19mb3JtYXQgPSAw Owo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgaWYgKCFlZGlkX2N0cmwpIHsKPj4g PiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCIlczogZWRpZF9jdHJsIGlzIE5VTExc biIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuOwo+PiA+ID4g Pj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgaWYgKCFkYikg ewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0 XG4iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybjsKPj4gPiA+ ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4i LCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtICAgICBjbWRiX2xlbiA9IGRiWzBdICYgMHgxZjsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIC8qIEJ5dGUgMyB0byBMKzEgY29udGFp biBTVkRzICovCj4+ID4gPiA+Pj4gPiAtICAgICBvZmZzZXQgKz0gMjsKPj4gPiA+ID4+PiA+IC0K Pj4gPiA+ID4+PiA+IC0gICAgIHN2ZCA9IGRwdV9lZGlkX2ZpbmRfYmxvY2soZWRpZF9jdHJsLT5l ZGlkLCBWSURFT19EQVRBX0JMT0NLKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAg IGlmIChzdmQpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgLyptb3ZpbmcgdG8gdGhlIG5l eHQgYnl0ZSBhcyB2aWMgaW5mbyBiZWdpbnMgdGhlcmUqLwo+PiA+ID4gPj4+ID4gLSAgICAgICAg ICAgICBzdmRfbGVuID0gc3ZkWzBdICYgMHgxZjsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAg KytzdmQ7Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt ICAgICBmb3IgKGkgPSAwOyBpIDwgc3ZkX2xlbjsgaSsrLCBqKyspIHsKPj4gPiA+ID4+PiA+IC0g ICAgICAgICAgICAgdmlkZW9fZm9ybWF0ID0gKihzdmQgKyBpKSAmIDB4N0Y7Cj4+ID4gPiA+Pj4g PiAtICAgICAgICAgICAgIGlmIChjbWRiX2xlbiA9PSAxKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAg ICAgICAgICAgICAgICAgLyogSWYgY21kYl9sZW4gaXMgMSwgaXQgbWVhbnMgYWxsIFNWRHMgc3Vw cG9ydAo+PiA+ID4gPj4+ID4gWVVWICovCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAg ICAgZHB1X2VkaWRfc2V0X3k0MjBfc3VwcG9ydChjb25uZWN0b3IsCj4+ID4gPiA+Pj4gPiB2aWRl b19mb3JtYXQpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGRiW29mZnNl dF0gJiAoMSA8PCBqKSkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGRwdV9l ZGlkX3NldF95NDIwX3N1cHBvcnQoY29ubmVjdG9yLAo+PiA+ID4gPj4+ID4gdmlkZW9fZm9ybWF0 KTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAo aiAmIDB4ODApIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGog PSBqLzg7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQr KzsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQg Pj0gY21kYl9sZW4pCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIH0KPj4gPiA+ ID4+PiA+IC0gICAgICAgICAgICAgfQo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4g LQo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4g PiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQyMFZEQigKPj4gPiA+ID4+PiA+IC1zdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9j dHJsLAo+PiA+ID4gPj4+ID4gLWNvbnN0IHU4ICpkYikKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+ Pj4gPiAtICAgICB1OCBsZW4gPSBkYlswXSAmIDB4MWY7Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIg aSA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgdmlkZW9fZm9ybWF0ID0gMDsKPj4gPiA+ID4+ PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmICghZWRpZF9jdHJsKSB7Cj4+ID4gPiA+Pj4gPiAt ICAgICAgICAgICAgIERQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsK Pj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+ PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICtcbiIs IF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIC8qIE9mZnNldCB0 byBieXRlIDMgKi8KPj4gPiA+ID4+PiA+IC0gICAgIGRiICs9IDI7Cj4+ID4gPiA+Pj4gPiAtICAg ICBmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgIHZpZGVvX2Zvcm1hdCA9ICooZGIgKyBpKSAmIDB4N0Y7Cj4+ID4gPiA+Pj4gPiAtICAgICAg ICAgICAgIC8qCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAqIG1vZGUgd2FzIGFscmVhZHkg YWRkZWQgaW4gZ2V0X21vZGVzKCkKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICogb25seSBu ZWVkIHRvIHNldCB0aGUgWTQyMCBzdXBwb3J0IGZsYWcKPj4gPiA+ID4+PiA+IC0gICAgICAgICAg ICAgICovCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGRwdV9lZGlkX3NldF95NDIwX3N1cHBv cnQoY29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4g Pj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4g PiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRpYyB2b2lkIGRwdV9lZGlkX3Nl dF9tb2RlX2Zvcm1hdCgKPj4gPiA+ID4+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+PiA+ID4gPj4+ID4gLXsKPj4g PiA+ID4+PiA+IC0gICAgIGNvbnN0IHU4ICpkYiA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+ IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAt ICAgICAvKiBTZXQgWVVWIG1vZGUgc3VwcG9ydCBmbGFncyBmb3IgWUNiY3I0MjBWREIgKi8KPj4g PiA+ID4+PiA+IC0gICAgIGRiID0gZHB1X2VkaWRfZmluZF9leHRlbmRlZF90YWdfYmxvY2soZWRp ZF9jdHJsLT5lZGlkLAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIFk0MjBfVklE RU9fREFUQV9CTE9DSyk7Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoZGIpCj4+ID4gPiA+Pj4gPiAt ICAgICAgICAgICAgIGRwdV9lZGlkX3BhcnNlX1k0MjBWREIoY29ubmVjdG9yLCBlZGlkX2N0cmws IGRiKTsKPj4gPiA+ID4+PiA+IC0gICAgIGVsc2UKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAg RFBVX0VESURfREVCVUcoIllDYkNyNDIwIFZEQiBpcyBub3QgcHJlc2VudFxuIik7Cj4+ID4gPiA+ Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICAvKiBTZXQgUkdCIHN1cHBvcnRlZCBvbiBhbGwgbW9k ZXMgd2hlcmUgWVVWIGlzIG5vdCBzZXQgKi8KPj4gPiA+ID4+PiA+IC0gICAgIGxpc3RfZm9yX2Vh Y2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Cj4+ID4gPiA+ Pj4gPiAtICAgICAgICAgICAgIGlmICghKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19TVVBQ T1JUU19ZVVYpKQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIG1vZGUtPmZsYWdz IHw9IERSTV9NT0RFX0ZMQUdfU1VQUE9SVFNfUkdCOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgZGIgPSBkcHVfZWRp ZF9maW5kX2V4dGVuZGVkX3RhZ19ibG9jayhlZGlkX2N0cmwtPmVkaWQsCj4+ID4gPiA+Pj4gPiAt ICAgICAgICAgICAgICAgICAgICAgWTQyMF9DQVBBQklMSVRZX01BUF9EQVRBX0JMT0NLKTsKPj4g PiA+ID4+PiA+IC0gICAgIGlmIChkYikKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgZHB1X2Vk aWRfcGFyc2VfWTQyMENNREIoY29ubmVjdG9yLCBlZGlkX2N0cmwsIGRiKTsKPj4gPiA+ID4+PiA+ IC0gICAgIGVsc2UKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VESURfREVCVUcoIllD YkNyNDIwIENNREIgaXMgbm90IHByZXNlbnRcbiIpOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+ IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlkX3Vw ZGF0ZV9kY19tb2RlcygKPj4gPiA+ID4+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+PiA+ID4gPj4+ID4gLXsKPj4g PiA+ID4+PiA+IC0gICAgIGludCBpLCBzdGFydCwgZW5kOwo+PiA+ID4gPj4+ID4gLSAgICAgdTgg KmVkaWRfZXh0LCAqaGRtaTsKPj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcm1fZGlzcGxheV9p bmZvICpkaXNwX2luZm87Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgaGRtaV9kY195dXZfbW9kZXMg PSAwOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVz ICtcbiIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmICgh Y29ubmVjdG9yIHx8ICFlZGlkX2N0cmwpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBV X0VSUk9SKCJpbnZhbGlkIGlucHV0XG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0 dXJuOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAg ICAgZGlzcF9pbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwo+PiA+ID4gPj4+ID4gLQo+ PiA+ID4gPj4+ID4gLSAgICAgZWRpZF9leHQgPSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWRf Y3RybC0+ZWRpZCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWVkaWRf ZXh0KSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9FUlJPUigibm8gY2VhIGV4dGVu c2lvblxuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybjsKPj4gPiA+ID4+PiA+ IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmIChkcHVfY2VhX2Ri X29mZnNldHMoZWRpZF9leHQsICZzdGFydCwgJmVuZCkpCj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgIHJldHVybjsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGRwdV9mb3JfZWFj aF9jZWFfZGIoZWRpZF9leHQsIGksIHN0YXJ0LCBlbmQpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAg ICAgICAgaWYgKGRwdV9jZWFfZGJfaXNfaGRtaV9oZl92c2RiKCZlZGlkX2V4dFtpXSkpIHsKPj4g PiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBoZG1pID0gJmVk aWRfZXh0W2ldOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgIGlmIChkcHVfY2VhX2RiX3BheWxvYWRfbGVuKGhkbWkpIDwgNykKPj4gPiA+ID4+PiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+PiA+ID4gPj4+ID4gLQo+PiA+ ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGlmIChoZG1pWzddICYgRFJNX0VESURfWUNC Q1I0MjBfRENfMzApIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhkbWlfZGNfeXV2X21vZGVzIHw9Cj4+ID4gPiA+Pj4gPiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18z MDsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERQVV9FRElEX0RF QlVHKCJZNDIwIDMwLWJpdAo+PiA+ID4gPj4+ID4gc3VwcG9ydGVkXG4iKTsKPj4gPiA+ID4+PiA+ IC0gICAgICAgICAgICAgICAgICAgICB9Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAg ICAgICAgICAgICAgICAgICAgaWYgKGhkbWlbN10gJiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zNikg ewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRtaV9kY195dXZf bW9kZXMgfD0KPj4gPiA+ID4+PiA+IERSTV9FRElEX1lDQkNSNDIwX0RDXzM2Owo+PiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBVX0VESURfREVCVUcoIlk0MjAgMzYt Yml0Cj4+ID4gPiA+Pj4gPiBzdXBwb3J0ZWRcbiIpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAg ICAgICAgICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAg ICAgICBpZiAoaGRtaVs3XSAmIERSTV9FRElEX1lDQkNSNDIwX0RDXzQ4KSB7Cj4+ID4gPiA+Pj4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZG1pX2RjX3l1dl9tb2RlcyB8PQo+PiA+ ID4gPj4+ID4gRFJNX0VESURfWUNCQ1I0MjBfRENfMzY7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBEUFVfRURJRF9ERUJVRygiWTQyMCA0OC1iaXQKPj4gPiA+ID4+ PiA+IHN1cHBvcnRlZFxuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgfQo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+ Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBkaXNwX2luZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8 PSBoZG1pX2RjX3l1dl9tb2RlczsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIERQ VV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4g Pj4+ID4gLQo+PiA+ID4gPj4+ID4gLXN0YXRpYyB2b2lkIF9kcHVfZWRpZF9leHRyYWN0X2F1ZGlv X2RhdGFfYmxvY2tzKAo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVk aWRfY3RybCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBsZW4gPSAwOwo+ PiA+ID4gPj4+ID4gLSAgICAgdTggYWRiX21heCA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICBjb25z dCB1OCAqYWRiID0gTlVMTDsKPj4gPiA+ID4+PiA+IC0gICAgIHUzMiBvZmZzZXQgPSBEQkNfU1RB UlRfT0ZGU0VUOwo+PiA+ID4gPj4+ID4gLSAgICAgdTggKmNlYSA9IE5VTEw7Cj4+ID4gPiA+Pj4g PiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWVkaWRfY3RybCkgewo+PiA+ID4gPj4+ID4gLSAg ICAgICAgICAgICBEUFVfRVJST1IoImludmFsaWQgZWRpZF9jdHJsXG4iKTsKPj4gPiA+ID4+PiA+ IC0gICAgICAgICAgICAgcmV0dXJuOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4g LSAgICAgRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtICAg ICBjZWEgPSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWRfY3RybC0+ZWRpZCk7Cj4+ID4gPiA+ Pj4gPiAtICAgICBpZiAoIWNlYSkgewo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfREVC VUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAg ICAgcmV0dXJuOwo+PiA+ID4gPj4+ID4gLSAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ ID4gLSAgICAgZWRpZF9jdHJsLT5hZGJfc2l6ZSA9IDA7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+ Pj4gPiAtICAgICBtZW1zZXQoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrLCAwLAo+PiA+ID4g Pj4+ID4gLSAgICAgICAgICAgICBzaXplb2YoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrKSk7 Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBkbyB7Cj4+ID4gPiA+Pj4gPiAtICAg ICAgICAgICAgIGxlbiA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGFkYiA9IF9kcHVf ZWRpZF9maW5kX2Jsb2NrKGNlYSwgb2Zmc2V0LCBBVURJT19EQVRBX0JMT0NLLAo+PiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICAgICAgICAgICZsZW4pOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ ID4gLSAgICAgICAgICAgICBpZiAoKGFkYiA9PSBOVUxMKSB8fCAobGVuID4gTUFYX0FVRElPX0RB VEFfQkxPQ0tfU0laRSB8fAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGFkYl9t YXggPj0gTUFYX05VTUJFUl9BREIpKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAg ICAgaWYgKCFlZGlkX2N0cmwtPmFkYl9zaXplKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEUFVfREVCVUcoIk5vL0ludmFsaWQgQXVkaW8gRGF0YQo+PiA+ID4g Pj4+ID4gQmxvY2tcbiIpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIH0KPj4gPiA+ID4+ PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4gPiA+ ID4+PiA+IC0gICAgICAgICAgICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAg ICAgICAgICBtZW1jcHkoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrICsgZWRpZF9jdHJsLT5h ZGJfc2l6ZSwKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBhZGIgKyAxLCBsZW4p Owo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBvZmZzZXQgPSAoYWRiIC0gY2VhKSArIDEgKyBs ZW47Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGVkaWRfY3RybC0+ YWRiX3NpemUgKz0gbGVuOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBhZGJfbWF4Kys7Cj4+ ID4gPiA+Pj4gPiAtICAgICB9IHdoaWxlIChhZGIpOwo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VE SURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4g LQo+PiA+ID4gPj4+ID4gLXN0YXRpYyB2b2lkIF9kcHVfZWRpZF9leHRyYWN0X3NwZWFrZXJfYWxs b2NhdGlvbl9kYXRhKAo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVk aWRfY3RybCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBsZW47Cj4+ID4g PiA+Pj4gPiAtICAgICBjb25zdCB1OCAqc2FkYiA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtICAgICB1 OCAqY2VhID0gTlVMTDsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmICghZWRp ZF9jdHJsKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9FUlJPUigiaW52YWxpZCBl ZGlkX2N0cmxcbiIpOwo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm47Cj4+ID4gPiA+ Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9f ZnVuY19fKTsKPj4gPiA+ID4+PiA+IC0gICAgIGNlYSA9IGRwdV9maW5kX2NlYV9leHRlbnNpb24o ZWRpZF9jdHJsLT5lZGlkKTsKPj4gPiA+ID4+PiA+IC0gICAgIGlmICghY2VhKSB7Cj4+ID4gPiA+ Pj4gPiAtICAgICAgICAgICAgIERQVV9ERUJVRygiQ0VBIGV4dGVuc2lvbiBub3QgZm91bmRcbiIp Owo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm47Cj4+ID4gPiA+Pj4gPiAtICAgICB9 Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBzYWRiID0gX2RwdV9lZGlkX2ZpbmRf YmxvY2soY2VhLCBEQkNfU1RBUlRfT0ZGU0VULAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBT UEVBS0VSX0FMTE9DQVRJT05fREFUQV9CTE9DSywgJmxlbik7Cj4+ID4gPiA+Pj4gPiAtICAgICBp ZiAoKHNhZGIgPT0gTlVMTCkgfHwgKGxlbiAhPSBNQVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJ WkUpKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9ERUJVRygiTm8vSW52YWxpZCBT cGVha2VyIEFsbG9jYXRpb24gRGF0YSBCbG9ja1xuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAg ICAgIHJldHVybjsKPj4gPiA+ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+ PiA+IC0gICAgIG1lbWNweShlZGlkX2N0cmwtPnNwa3JfYWxsb2NfZGF0YV9ibG9jaywgc2FkYiAr IDEsIGxlbik7Cj4+ID4gPiA+Pj4gPiAtICAgICBlZGlkX2N0cmwtPnNhZGJfc2l6ZSA9IGxlbjsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCJzcGVha2Vy IGFsbG9jIGRhdGEgU1AgYnl0ZSA9ICUwOHgKPj4gPiA+ID4+PiA+ICVzJXMlcyVzJXMlcyVzXG4i LAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBzYWRiWzFdLAo+PiA+ID4gPj4+ID4gLSAgICAg ICAgICAgICAoc2FkYlsxXSAmIEJJVCgwKSkgPyAiRkwvRlIsIiA6ICIiLAo+PiA+ID4gPj4+ID4g LSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCgxKSkgPyAiTEZFLCIgOiAiIiwKPj4gPiA+ID4+ PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoMikpID8gIkZDLCIgOiAiIiwKPj4gPiA+ ID4+PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoMykpID8gIlJML1JSLCIgOiAiIiwK Pj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoNCkpID8gIlJDLCIgOiAi IiwKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoNSkpID8gIkZMQy9G UkMsIiA6ICIiLAo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCg2KSkg PyAiUkxDL1JSQywiIDogIiIpOwo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVz IC0iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ ID4gLXN0cnVjdCBkcHVfZWRpZF9jdHJsICpkcHVfZWRpZF9pbml0KHZvaWQpCj4+ID4gPiA+Pj4g PiAtewo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9 IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygi JXMgK1xuIiwgX19mdW5jX18pOwo+PiA+ID4gPj4+ID4gLSAgICAgZWRpZF9jdHJsID0ga3phbGxv YyhzaXplb2YoKmVkaWRfY3RybCksIEdGUF9LRVJORUwpOwo+PiA+ID4gPj4+ID4gLSAgICAgaWYg KCFlZGlkX2N0cmwpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCJlZGlk X2N0cmwgYWxsb2MgZmFpbGVkXG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJu IE5VTEw7Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtICAgICBtZW1zZXQoKGVk aWRfY3RybCksIDAsIHNpemVvZigqZWRpZF9jdHJsKSk7Cj4+ID4gPiA+Pj4gPiAtICAgICBEUFVf RURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwo+PiA+ID4gPj4+ID4gLSAgICAgcmV0dXJu IGVkaWRfY3RybDsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt dm9pZCBkcHVfZnJlZV9lZGlkKHZvaWQgKippbnB1dCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+ Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVf ZWRpZF9jdHJsCj4+ID4gPiA+Pj4gPiAqKSgqaW5wdXQpOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4g Pj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4g PiAtICAgICBrZnJlZShlZGlkX2N0cmwtPmVkaWQpOwo+PiA+ID4gPj4+ID4gLSAgICAgZWRpZF9j dHJsLT5lZGlkID0gTlVMTDsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+ Pj4gPiAtdm9pZCBkcHVfZWRpZF9kZWluaXQodm9pZCAqKmlucHV0KQo+PiA+ID4gPj4+ID4gLXsK Pj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3Ry dWN0IGRwdV9lZGlkX2N0cmwKPj4gPiA+ID4+PiA+ICopKCppbnB1dCk7Cj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPj4g PiA+ID4+PiA+IC0gICAgIGRwdV9mcmVlX2VkaWQoKHZvaWQgKikmZWRpZF9jdHJsKTsKPj4gPiA+ ID4+PiA+IC0gICAgIGtmcmVlKGVkaWRfY3RybCk7Cj4+ID4gPiA+Pj4gPiAtICAgICBEUFVfRURJ RF9ERUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtaW50IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciwKPj4gPiA+ID4+PiA+IC0gICAgIHZvaWQgKmlucHV0KQo+PiA+ID4g Pj4+ID4gLXsKPj4gPiA+ID4+PiA+IC0gICAgIGludCByYyA9IDA7Cj4+ID4gPiA+Pj4gPiAtICAg ICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJs Cj4+ID4gPiA+Pj4gPiAqKShpbnB1dCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAg ICBEUFVfRURJRF9ERUJVRygiJXMgKyIsIF9fZnVuY19fKTsKPj4gPiA+ID4+PiA+IC0gICAgIGlm IChlZGlkX2N0cmwtPmVkaWQpIHsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgZHJtX21vZGVf Y29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwKPj4gPiA+ID4+PiA+IC0g ICAgICAgICAgICAgICAgICAgICBlZGlkX2N0cmwtPmVkaWQpOwo+PiA+ID4gPj4+ID4gLQo+PiA+ ID4gPj4+ID4gLSAgICAgICAgICAgICByYyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3Is IGVkaWRfY3RybC0+ZWRpZCk7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGRwdV9lZGlkX3Nl dF9tb2RlX2Zvcm1hdChjb25uZWN0b3IsIGVkaWRfY3RybCk7Cj4+ID4gPiA+Pj4gPiAtICAgICAg ICAgICAgIF9kcHVfZWRpZF91cGRhdGVfZGNfbW9kZXMoY29ubmVjdG9yLCBlZGlkX2N0cmwpOwo+ PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRURJRF9ERUJVRygiJXMgLSIsIF9fZnVuY19f KTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIHJjOwo+PiA+ID4gPj4+ID4gLSAg ICAgfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgZHJtX21vZGVfY29ubmVjdG9y X3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVMTCk7Cj4+ID4gPiA+Pj4gPiAtICAg ICBEUFVfRURJRF9ERUJVRygiJXMgbnVsbCBlZGlkIC0iLCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4g PiAtICAgICByZXR1cm4gcmM7Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4g Pj4+ID4gLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmlucHV0KQo+PiA+ID4gPj4+ID4gLXsK Pj4gPiA+ID4+PiA+IC0gICAgIHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3Ry dWN0IGRwdV9lZGlkX2N0cmwKPj4gPiA+ID4+PiA+ICopKGlucHV0KTsKPj4gPiA+ID4+PiA+IC0g ICAgIHN0cnVjdCBlZGlkICplZGlkID0gZWRpZF9jdHJsLT5lZGlkOwo+PiA+ID4gPj4+ID4gLQo+ PiA+ID4gPj4+ID4gLSAgICAgaWYgKCFlZGlkKSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAg IERQVV9FUlJPUigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAg ICAgICAgcmV0dXJuIDA7Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtCj4+ID4g PiA+Pj4gPiAtICAgICBpZiAoKGVkaWQtPnJldmlzaW9uIDwgMykgfHwgIShlZGlkLT5pbnB1dCAm Cj4+ID4gPiA+Pj4gPiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKSkKPj4gPiA+ID4+PiA+IC0gICAg ICAgICAgICAgcmV0dXJuIDA7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAo ZWRpZC0+cmV2aXNpb24gPCA0KSB7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGlmIChlZGlk LT5pbnB1dCAmIERSTV9FRElEX0RJR0lUQUxfVFlQRV9EVkkpCj4+ID4gPiA+Pj4gPiAtICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIDg7Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIGVsc2UK Pj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gPiA+ID4+PiA+ IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIHN3aXRjaCAoZWRpZC0+ aW5wdXQgJiBEUk1fRURJRF9ESUdJVEFMX0RFUFRIX01BU0spIHsKPj4gPiA+ID4+PiA+IC0gICAg IGNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF82Ogo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAg ICByZXR1cm4gNjsKPj4gPiA+ID4+PiA+IC0gICAgIGNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBU SF84Ogo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gODsKPj4gPiA+ID4+PiA+IC0g ICAgIGNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xMDoKPj4gPiA+ID4+PiA+IC0gICAgICAg ICAgICAgcmV0dXJuIDEwOwo+PiA+ID4gPj4+ID4gLSAgICAgY2FzZSBEUk1fRURJRF9ESUdJVEFM X0RFUFRIXzEyOgo+PiA+ID4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gMTI7Cj4+ID4gPiA+ Pj4gPiAtICAgICBjYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTQ6Cj4+ID4gPiA+Pj4gPiAt ICAgICAgICAgICAgIHJldHVybiAxNDsKPj4gPiA+ID4+PiA+IC0gICAgIGNhc2UgRFJNX0VESURf RElHSVRBTF9ERVBUSF8xNjoKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIDE2Owo+ PiA+ID4gPj4+ID4gLSAgICAgY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RFUFRIX1VOREVGOgo+PiA+ ID4gPj4+ID4gLSAgICAgZGVmYXVsdDoKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJu IDA7Cj4+ID4gPiA+Pj4gPiAtICAgICB9Cj4+ID4gPiA+Pj4gPiAtfQo+PiA+ID4gPj4+ID4gLQo+ PiA+ID4gPj4+ID4gLXU4IGRwdV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCkKPj4gPiA+ ID4+PiA+IC17Cj4+ID4gPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9j dHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsCj4+ID4gPiA+Pj4gPiAqKShpbnB1dCk7Cj4+ID4g PiA+Pj4gPiAtICAgICBzdHJ1Y3QgZWRpZCAqZWRpZCA9IE5VTEwsICpsYXN0X2Jsb2NrID0gTlVM TDsKPj4gPiA+ID4+PiA+IC0gICAgIHU4ICpyYXdfZWRpZCA9IE5VTEw7Cj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWVkaWRfY3RybCB8fCAhZWRpZF9jdHJsLT5lZGlkKSB7 Cj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9FUlJPUigiaW52YWxpZCBlZGlkIGlucHV0 XG4iKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIDA7Cj4+ID4gPiA+Pj4gPiAt ICAgICB9Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBlZGlkID0gZWRpZF9jdHJs LT5lZGlkOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgcmF3X2VkaWQgPSAodTgg KillZGlkOwo+PiA+ID4gPj4+ID4gLSAgICAgcmF3X2VkaWQgKz0gKGVkaWQtPmV4dGVuc2lvbnMg KiBFRElEX0xFTkdUSCk7Cj4+ID4gPiA+Pj4gPiAtICAgICBsYXN0X2Jsb2NrID0gKHN0cnVjdCBl ZGlkICopcmF3X2VkaWQ7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAobGFz dF9ibG9jaykKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIGxhc3RfYmxvY2stPmNo ZWNrc3VtOwo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSAgICAgRFBVX0VSUk9SKCJJbnZh bGlkIGJsb2NrLCBubyBjaGVja3N1bVxuIik7Cj4+ID4gPiA+Pj4gPiAtICAgICByZXR1cm4gMDsK Pj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtYm9vbCBkcHVfZGV0 ZWN0X2hkbWlfbW9uaXRvcih2b2lkICppbnB1dCkKPj4gPiA+ID4+PiA+IC17Cj4+ID4gPiA+Pj4g PiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRp ZF9jdHJsCj4+ID4gPiA+Pj4gPiAqKShpbnB1dCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4g PiAtICAgICByZXR1cm4gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZF9jdHJsLT5lZGlkKTsK Pj4gPiA+ID4+PiA+IC19Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtdm9pZCBkcHVfZ2V0 X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPj4gPiA+ID4+PiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCB2 b2lkCj4+ID4gPiA+Pj4gPiAqKmlucHV0KQo+PiA+ID4gPj4+ID4gLXsKPj4gPiA+ID4+PiA+IC0g ICAgIHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0 cmwKPj4gPiA+ID4+PiA+ICopKCppbnB1dCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt ICAgICBlZGlkX2N0cmwtPmVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBhZGFwdGVyKTsK Pj4gPiA+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4+ ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtICAgICBpZiAoIWVkaWRfY3RybC0+ZWRpZCkKPj4g PiA+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCJFRElEIHJlYWQgZmFpbGVkXG4iKTsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0gICAgIGlmIChlZGlkX2N0cmwtPmVkaWQpIHsK Pj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgZHB1X2VkaWRfZXh0cmFjdF92ZW5kb3JfaWQoZWRp ZF9jdHJsKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgX2RwdV9lZGlkX2V4dHJhY3RfYXVk aW9fZGF0YV9ibG9ja3MoZWRpZF9jdHJsKTsKPj4gPiA+ID4+PiA+IC0gICAgICAgICAgICAgX2Rw dV9lZGlkX2V4dHJhY3Rfc3BlYWtlcl9hbGxvY2F0aW9uX2RhdGEoZWRpZF9jdHJsKTsKPj4gPiA+ ID4+PiA+IC0gICAgIH0KPj4gPiA+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyAtXG4i LCBfX2Z1bmNfXyk7Cj4+ID4gPiA+Pj4gPiAtfTsKPj4gPiA+ID4+PiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCj4+ID4gPiA+Pj4gPiBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPj4gPiA+ID4+PiA+IGRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAo+PiA+ID4gPj4+ID4gaW5kZXggYzA1MWIxOGJiODEyLi4wMDAwMDAwMDAw MDAKPj4gPiA+ID4+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2Vy LmgKPj4gPiA+ID4+PiA+ICsrKyAvZGV2L251bGwKPj4gPiA+ID4+PiA+IEBAIC0xLDE2NiArMCww IEBACj4+ID4gPiA+Pj4gPiAtLyoKPj4gPiA+ID4+PiA+IC0gKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4+ID4gPiA+ Pj4gPiAtICoKPj4gPiA+ID4+PiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+ID4gPiA+Pj4gPiBtb2RpZnkKPj4gPiA+ ID4+PiA+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhbmQKPj4gPiA+ID4+PiA+IC0gKiBvbmx5IHZlcnNpb24gMiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPj4gPiA+ID4+PiA+IC0g Kgo+PiA+ID4gPj4+ID4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiA+ID4gPj4+ID4gLSAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ID4gPiA+ Pj4gPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+PiA+ID4gPj4+ID4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4+ID4gPiA+Pj4gPiAtICoKPj4gPiA+ID4+PiA+IC0gKi8KPj4g PiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0jaWZuZGVmIF9EUFVfRURJRF9QQVJTRVJfSF8KPj4g PiA+ID4+PiA+IC0jZGVmaW5lIF9EUFVfRURJRF9QQVJTRVJfSF8KPj4gPiA+ID4+PiA+IC0KPj4g PiA+ID4+PiA+IC0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4gPiA+ID4+PiA+IC0jaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+Cj4+ID4gPiA+Pj4gPiAtI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMu aD4KPj4gPiA+ID4+PiA+IC0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+ID4gPiA+Pj4g PiAtI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+PiA+ID4gPj4+ID4gLSNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+PiA+ID4gPj4+ID4gLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPj4gPiA+ID4+PiA+ IC0jaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt Cj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBNQVhfTlVNQkVSX0FEQiA1Cj4+ID4gPiA+Pj4gPiAtI2Rl ZmluZSBNQVhfQVVESU9fREFUQV9CTE9DS19TSVpFIDMwCj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBN QVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkUgMwo+PiA+ID4gPj4+ID4gLSNkZWZpbmUgRURJ RF9WRU5ET1JfSURfU0laRSAgICAgNAo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLSNkZWZp bmUgRFBVX0NFQV9FWFQgICAgMHgwMgo+PiA+ID4gPj4+ID4gLSNkZWZpbmUgRFBVX0VYVEVOREVE X1RBRyAweDA3Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBEUFVfRFJNX01P REVfRkxBR19GTVRfTUFTSyAoMHgzIDw8IDIwKQo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4g LWVudW0gZXh0ZW5kZWRfZGF0YV9ibG9ja190eXBlcyB7Cj4+ID4gPiA+Pj4gPiAtICAgICBWSURF T19DQVBBQklMSVRZX0RBVEFfQkxPQ0sgPSAweDAsCj4+ID4gPiA+Pj4gPiAtICAgICBWRU5ET1Jf U1BFQ0lGSUNfVklERU9fREFUQV9CTE9DSyA9IDB4MDEsCj4+ID4gPiA+Pj4gPiAtICAgICBIRE1J X1ZJREVPX0RBVEFfQkxPQ0sgPSAweDA0LAo+PiA+ID4gPj4+ID4gLSAgICAgSERSX1NUQVRJQ19N RVRBREFUQV9EQVRBX0JMT0NLID0gMHgwNiwKPj4gPiA+ID4+PiA+IC0gICAgIFk0MjBfVklERU9f REFUQV9CTE9DSyA9IDB4MEUsCj4+ID4gPiA+Pj4gPiAtICAgICBWSURFT19GT1JNQVRfUFJFRkVS RU5DRV9EQVRBX0JMT0NLID0gMHgwRCwKPj4gPiA+ID4+PiA+IC0gICAgIFk0MjBfQ0FQQUJJTElU WV9NQVBfREFUQV9CTE9DSyA9IDB4MEYsCj4+ID4gPiA+Pj4gPiAtICAgICBWRU5ET1JfU1BFQ0lG SUNfQVVESU9fREFUQV9CTE9DSyA9IDB4MTEsCj4+ID4gPiA+Pj4gPiAtICAgICBJTkZPRlJBTUVf REFUQV9CTE9DSyA9IDB4MjAsCj4+ID4gPiA+Pj4gPiAtfTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ ID4+PiA+IC0jaWZkZWYgRFBVX0VESURfREVCVUdfRU5BQkxFCj4+ID4gPiA+Pj4gPiAtI2RlZmlu ZSBEUFVfRURJRF9ERUJVRyhmbXQsIGFyZ3MuLi4pICAgRFBVX0VSUk9SKGZtdCwgIyNhcmdzKQo+ PiA+ID4gPj4+ID4gLSNlbHNlCj4+ID4gPiA+Pj4gPiAtI2RlZmluZSBEUFVfRURJRF9ERUJVRyhm bXQsIGFyZ3MuLi4pICAgRFBVX0RFQlVHKGZtdCwgIyNhcmdzKQo+PiA+ID4gPj4+ID4gLSNlbmRp Zgo+PiA+ID4gPj4+ID4gLQo+PiA+ID4gPj4+ID4gLS8qCj4+ID4gPiA+Pj4gPiAtICogc3RydWN0 IGhkbWlfZWRpZF9oZHJfZGF0YSAtIEhEUiBTdGF0aWMgTWV0YWRhdGEKPj4gPiA+ID4+PiA+IC0g KiBAZW90ZjogRWxlY3Ryby1PcHRpY2FsIFRyYW5zZmVyIEZ1bmN0aW9uCj4+ID4gPiA+Pj4gPiAt ICogQG1ldGFkYXRhX3R5cGVfb25lOiBTdGF0aWMgTWV0YWRhdGEgVHlwZSAxIHN1cHBvcnQKPj4g PiA+ID4+PiA+IC0gKiBAbWF4X2x1bWluYW5jZTogRGVzaXJlZCBDb250ZW50IE1heGltdW0gTHVt aW5hbmNlCj4+ID4gPiA+Pj4gPiAtICogQGF2Z19sdW1pbmFuY2U6IERlc2lyZWQgQ29udGVudCBG cmFtZS1hdmVyYWdlIEx1bWluYW5jZQo+PiA+ID4gPj4+ID4gLSAqIEBtaW5fbHVtaW5hbmNlOiBE ZXNpcmVkIENvbnRlbnQgTWluaW11bSBMdW1pbmFuY2UKPj4gPiA+ID4+PiA+IC0gKi8KPj4gPiA+ ID4+PiA+IC1zdHJ1Y3QgZHB1X2VkaWRfaGRyX2RhdGEgewo+PiA+ID4gPj4+ID4gLSAgICAgdTMy IGVvdGY7Cj4+ID4gPiA+Pj4gPiAtICAgICBib29sIG1ldGFkYXRhX3R5cGVfb25lOwo+PiA+ID4g Pj4+ID4gLSAgICAgdTMyIG1heF9sdW1pbmFuY2U7Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgYXZn X2x1bWluYW5jZTsKPj4gPiA+ID4+PiA+IC0gICAgIHUzMiBtaW5fbHVtaW5hbmNlOwo+PiA+ID4g Pj4+ID4gLX07Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtc3RydWN0IGRwdV9lZGlkX3Np bmtfY2FwcyB7Cj4+ID4gPiA+Pj4gPiAtICAgICB1MzIgbWF4X3BjbGtfaW5faHo7Cj4+ID4gPiA+ Pj4gPiAtICAgICBib29sIHNjZGNfcHJlc2VudDsKPj4gPiA+ID4+PiA+IC0gICAgIGJvb2wgc2Ny YW1ibGVfc3VwcG9ydDsgLyogc2NyYW1ibGUgc3VwcG9ydCBmb3IgbGVzcyB0aGFuIDM0ME1jc2MK Pj4gPiA+ID4+PiA+ICovCj4+ID4gPiA+Pj4gPiAtICAgICBib29sIHJlYWRfcmVxX3N1cHBvcnQ7 Cj4+ID4gPiA+Pj4gPiAtICAgICBib29sIG9zZF9kaXNwYXJpdHk7Cj4+ID4gPiA+Pj4gPiAtICAg ICBib29sIGR1YWxfdmlld19zdXBwb3J0Owo+PiA+ID4gPj4+ID4gLSAgICAgYm9vbCBpbmRfdmll d19zdXBwb3J0Owo+PiA+ID4gPj4+ID4gLX07Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAt c3RydWN0IGRwdV9lZGlkX2N0cmwgewo+PiA+ID4gPj4+ID4gLSAgICAgc3RydWN0IGVkaWQgKmVk aWQ7Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBwdF9zY2FuX2luZm87Cj4+ID4gPiA+Pj4gPiAtICAg ICB1OCBpdF9zY2FuX2luZm87Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBjZV9zY2FuX2luZm87Cj4+ ID4gPiA+Pj4gPiAtICAgICB1OCBhdWRpb19kYXRhX2Jsb2NrW01BWF9OVU1CRVJfQURCICogTUFY X0FVRElPX0RBVEFfQkxPQ0tfU0laRV07Cj4+ID4gPiA+Pj4gPiAtICAgICBpbnQgYWRiX3NpemU7 Cj4+ID4gPiA+Pj4gPiAtICAgICB1OCBzcGtyX2FsbG9jX2RhdGFfYmxvY2tbTUFYX1NQS1JfQUxM T0NfREFUQV9CTE9DS19TSVpFXTsKPj4gPiA+ID4+PiA+IC0gICAgIGludCBzYWRiX3NpemU7Cj4+ ID4gPiA+Pj4gPiAtICAgICBib29sIGhkcl9zdXBwb3J0ZWQ7Cj4+ID4gPiA+Pj4gPiAtICAgICBj aGFyIHZlbmRvcl9pZFtFRElEX1ZFTkRPUl9JRF9TSVpFXTsKPj4gPiA+ID4+PiA+IC0gICAgIHN0 cnVjdCBkcHVfZWRpZF9zaW5rX2NhcHMgc2lua19jYXBzOwo+PiA+ID4gPj4+ID4gLSAgICAgc3Ry dWN0IGRwdV9lZGlkX2hkcl9kYXRhIGhkcl9kYXRhOwo+PiA+ID4gPj4+ID4gLX07Cj4+ID4gPiA+ Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtLyoqCj4+ID4gPiA+Pj4gPiAtICogZHB1X2VkaWRfaW5pdCgp IC0gaW5pdCBlZGlkIHN0cnVjdHVyZS4KPj4gPiA+ID4+PiA+IC0gKiBAZWRpZF9jdHJsOiAgICAg SGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+ID4gPj4+ID4gLSAqIFJldHVy bjogaGFuZGxlIHRvIGRwdV9lZGlkX2N0cmwgZm9yIHRoZSBjbGllbnQuCj4+ID4gPiA+Pj4gPiAt ICovCj4+ID4gPiA+Pj4gPiAtc3RydWN0IGRwdV9lZGlkX2N0cmwgKmRwdV9lZGlkX2luaXQodm9p ZCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtLyoqCj4+ID4gPiA+Pj4gPiAtICogZHB1 X2VkaWRfZGVpbml0KCkgLSBkZWluaXQgZWRpZCBzdHJ1Y3R1cmUuCj4+ID4gPiA+Pj4gPiAtICog QGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJsIHN0cnVjdHVyZS4KPj4gPiA+ ID4+PiA+IC0gKgo+PiA+ID4gPj4+ID4gLSAqIFJldHVybjogdm9pZC4KPj4gPiA+ID4+PiA+IC0g Ki8KPj4gPiA+ID4+PiA+IC12b2lkIGRwdV9lZGlkX2RlaW5pdCh2b2lkICoqZWRpZF9jdHJsKTsK Pj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0vKioKPj4gPiA+ID4+PiA+IC0gKiBkcHVfZ2V0 X2VkaWQoKSAtIGdldCBlZGlkIGluZm8uCj4+ID4gPiA+Pj4gPiAtICogQGNvbm5lY3RvcjogICBI YW5kbGUgdG8gdGhlIGRybV9jb25uZWN0b3IuCj4+ID4gPiA+Pj4gPiAtICogQGFkYXB0ZXI6ICAg ICBoYW5kbGUgdG8gaTJjIGFkYXB0ZXIgZm9yIEREQyByZWFkCj4+ID4gPiA+Pj4gPiAtICogQGVk aWRfY3RybDogICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4+ID4gPiA+Pj4g PiAtICoKPj4gPiA+ID4+PiA+IC0gKiBSZXR1cm46IHZvaWQuCj4+ID4gPiA+Pj4gPiAtICovCj4+ ID4gPiA+Pj4gPiAtdm9pZCBkcHVfZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4gPiA+ID4+PiA+IC1zdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCj4+ID4gPiA+ Pj4gPiAtdm9pZCAqKmVkaWRfY3RybCk7Cj4+ID4gPiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtLyoq Cj4+ID4gPiA+Pj4gPiAtICogZHB1X2ZyZWVfZWRpZCgpIC0gZnJlZSBlZGlkIHN0cnVjdHVyZS4K Pj4gPiA+ID4+PiA+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwg c3RydWN0dXJlLgo+PiA+ID4gPj4+ID4gLSAqCj4+ID4gPiA+Pj4gPiAtICogUmV0dXJuOiB2b2lk Lgo+PiA+ID4gPj4+ID4gLSAqLwo+PiA+ID4gPj4+ID4gLXZvaWQgZHB1X2ZyZWVfZWRpZCh2b2lk ICoqZWRpZF9jdHJsKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0vKioKPj4gPiA+ID4+ PiA+IC0gKiBkcHVfZGV0ZWN0X2hkbWlfbW9uaXRvcigpIC0gZGV0ZWN0IEhETUkgbW9kZS4KPj4g PiA+ID4+PiA+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3Ry dWN0dXJlLgo+PiA+ID4gPj4+ID4gLSAqCj4+ID4gPiA+Pj4gPiAtICogUmV0dXJuOiBlcnJvciBj b2RlLgo+PiA+ID4gPj4+ID4gLSAqLwo+PiA+ID4gPj4+ID4gLWJvb2wgZHB1X2RldGVjdF9oZG1p X21vbml0b3Iodm9pZCAqZWRpZF9jdHJsKTsKPj4gPiA+ID4+PiA+IC0KPj4gPiA+ID4+PiA+IC0v KioKPj4gPiA+ID4+PiA+IC0gKiBkcHVfZ2V0X3NpbmtfYnBjKCkgLSByZXR1cm4gdGhlIGJwYyBv ZiBzaW5rIGRldmljZS4KPj4gPiA+ID4+PiA+IC0gKiBAZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRv IHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+ID4gPj4+ID4gLSAqCj4+ID4gPiA+Pj4gPiAt ICogUmV0dXJuOiBicGMgc3VwcG9ydGVkIGJ5IHRoZSBzaW5rLgo+PiA+ID4gPj4+ID4gLSAqLwo+ PiA+ID4gPj4+ID4gLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmVkaWRfY3RybCk7Cj4+ID4g PiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtLyoqCj4+ID4gPiA+Pj4gPiAtICogZHB1X2dldF9lZGlk X2NoZWNrc3VtKCkgLSByZXR1cm4gdGhlIGNoZWNrc3VtIG9mIGxhc3QgYmxvY2sgb2YKPj4gPiA+ ID4+PiA+IEVESUQuCj4+ID4gPiA+Pj4gPiAtICogQGlucHV0OiAgICAgSGFuZGxlIHRvIHRoZSBl ZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+ID4gPj4+ID4gLSAqCj4+ID4gPiA+Pj4gPiAtICogUmV0 dXJuOiBjaGVja3N1bSBvZiB0aGUgbGFzdCBFRElEIGJsb2NrLgo+PiA+ID4gPj4+ID4gLSAqLwo+ PiA+ID4gPj4+ID4gLXU4IGRwdV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCk7Cj4+ID4g PiA+Pj4gPiAtCj4+ID4gPiA+Pj4gPiAtLyoqCj4+ID4gPiA+Pj4gPiAtICogX2RwdV9lZGlkX3Vw ZGF0ZV9tb2RlcygpIC0gcG9wdWxhdGUgRURJRCBtb2Rlcy4KPj4gPiA+ID4+PiA+IC0gKiBAZWRp ZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+PiA+ID4gPj4+ ID4gLSAqCj4+ID4gPiA+Pj4gPiAtICogUmV0dXJuOiBlcnJvciBjb2RlLgo+PiA+ID4gPj4+ID4g LSAqLwo+PiA+ID4gPj4+ID4gLWludCBfZHB1X2VkaWRfdXBkYXRlX21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4+ID4gPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplZGlkX2N0cmwpOwo+PiA+ID4g Pj4+ID4gLQo+PiA+ID4gPj4+ID4gLSNlbmRpZiAvKiBfRFBVX0VESURfUEFSU0VSX0hfICovCj4+ ID4gPiA+Pj4gPiAtCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVu bwo=