From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0E008926F for ; Tue, 14 May 2019 06:34:50 +0000 (UTC) References: <20190510123349.5072-1-maarten.lankhorst@linux.intel.com> <0857cfca-743f-b83a-67f1-72d925700f2c@linux.intel.com> <2c3e93c8f8659a9050668211c751d1d5116d3516.camel@bootlin.com> <4e955d61-6dac-cbd8-0ac5-ac73e4430f13@linux.intel.com> From: Juha-Pekka Heikkila Message-ID: Date: Tue, 14 May 2019 09:34:45 +0300 MIME-Version: 1.0 In-Reply-To: <4e955d61-6dac-cbd8-0ac5-ac73e4430f13@linux.intel.com> Content-Language: en-US Subject: Re: [igt-dev] [PATCH i-g-t 1/2] lib/igt_fb: Use cairo conversion in igt_fb_convert_with_stride, v3. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: juhapekka.heikkila@gmail.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , Paul Kocialkowski , igt-dev@lists.freedesktop.org List-ID: VGhpcyBjaGFuZ2UgbG9vayBvayB0byBtZS4gVG8gbWUgaXQgbG9vayB2YzQgdGlsaW5nIGhhbmRs aW5nIHN0YXkgb24gCnNhbWUgbGV2ZWwgYXMgd2hhdCBpdCB3YXMgYmVmb3JlIGFzIHdoYXQgUGF1 bCB3YXMgd29ycmllZCBhYm91dC4KClJldmlld2VkLWJ5OiBKdWhhLVBla2thIEhlaWtraWxhIDxq dWhhcGVra2EuaGVpa2tpbGFAZ21haWwuY29tPgoKT24gMTAuNS4yMDE5IDE5LjAyLCBNYWFydGVu IExhbmtob3JzdCB3cm90ZToKPiBPcCAxMC0wNS0yMDE5IG9tIDE3OjEwIHNjaHJlZWYgUGF1bCBL b2NpYWxrb3dza2k6Cj4+IEhpLAo+Pgo+PiBPbiBGcmksIDIwMTktMDUtMTAgYXQgMTY6MTkgKzAy MDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+Pj4gT3AgMTAtMDUtMjAxOSBvbSAxNTo0MyBz Y2hyZWVmIFBhdWwgS29jaWFsa293c2tpOgo+Pj4+IEhpLAo+Pj4+Cj4+Pj4gSXQgbG9va3MgbGlr ZSBJIGZlbGwgYmVoaW5kIG9uIHJldmlld2luZyBlYXJsaWVyIHZlcnNpb24gaGVyZSwgc29ycnkK Pj4+PiBhYm91dCB0aGF0Lgo+Pj4+Cj4+Pj4gT24gRnJpLCAyMDE5LTA1LTEwIGF0IDE0OjMzICsw MjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90ZToKPj4+Pj4gRXZlciBzaW5jZSBjb21taXQgM2Zh NjVmNGI1MzJiZDlhNWIgKCJmYjogQWRkIHN1cHBvcnQgZm9yIGNvbnZlcnNpb25zCj4+Pj4+IHRo cm91Z2ggcGl4bWFuIikgd2UgY2FuIGdlbmVyYXRlIGEgdmFsaWQgY2Fpcm8gc3VyZmFjZSBmb3Ig YW55IHBsYW5lLAo+Pj4+PiB1c2UgdGhpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW1wbGVtZW50IG91 ciBvd24gY29udmVyc2lvbiByb3V0aW5lLgo+Pj4+Pgo+Pj4+PiBJbnN0ZWFkIG9mIGR1cGxpY2F0 aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSBpbiBpZ3RfZmJfY29udmVydF93aXRoX3N0cmlkZSwKPj4+ Pj4gd2UgY2FuIHNpbXBseSBjb252ZXJ0IHRoaXMgdG8gYSBmZXcgY2Fpcm8gY2FsbHMsIGJlY2F1 c2Ugd2Ugbm93IHN1cHBvcnQKPj4+Pj4gY2Fpcm8gY2FsbHMgdG8gYW55IG9mIHRoZSBzdXBwb3J0 ZWQgZnJhbWVidWZmZXIgZm9ybWF0cy4KPj4+PiBJIGRvbid0IHNlZSBob3cgdGhhdCBpcyB0aGUg Y2FzZS4gQ2Fpcm8gZGVmaW5pdGVseSBkb2VzIG5vdCBzdXBwb3J0IG91cgo+Pj4+IHRpbGVkIGZv cm1hdHMsIHNvIHdlIGNhbid0IGp1c3QgcGlwZSB0aGVtIGludG8gaXQuCj4+Pj4KPj4+PiBBbmQg d2UgYWxyZWFkeSB1c2UgcGl4bWFuIGZvciBjb252ZXJ0aW5nIHRocm91Z2ggdGhlIGZiX2NvbnZl cnQgY2FsbCB0bwo+Pj4+IGNvbnZlcnRfcGl4bWFuIHdoZW4gcG9zc2libGUuIEFsc28sIG15IHVu ZGVyc3RhbmRpbmcgaXMgdGhhdCBjYWlybyBpcwo+Pj4+IHZlcnkgbGltaXRlZCBmb3JtYXQtd2lz ZSwgc28gd2UncmUgbXVjaCBiZXR0ZXIgb2ZmIHVzaW5nIHBpeG1hbgo+Pj4+IGRpcmVjdGx5ICh3 aGljaCBpcyBpcyB3aGF0IGEgbm9uLWFjY2VsZXJhdGVkIGNhaXJvIHN1cmZhY2Ugd2lsbCBkbwo+ Pj4+IGFueXdheSkuCj4+Pj4KPj4+Pj4gVGhpcyBpcyByZXF1aXJlZCB0byBtYWtlIHRoaXMgZnVu Y3Rpb24gbW9yZSBnZW5lcmljLCBhbmQgY29udmVydCBmcm9tIGFueQo+Pj4+PiBmb3JtYXQvbW9k aWZpZXIgdG8gYW55IG90aGVyIGZvcm1hdC9tb2RpZmllci4KPj4+PiBXZSd2ZSBhbHJlYWR5IGRl c2lnbmVkIGl0IHRvIGJlIGdlbmVyaWMsIHdlIGp1c3QgbmVlZCBjb252ZXJzaW9uCj4+Pj4gaGVs cGVycyBmcm9tL3RvIChjdXJyZW50bHkgb25seSB0bykgaGFyZHdhcmUtc3BlY2lmaWMgdGlsaW5n IG1vZGlmaWVycy4KPj4+Pgo+Pj4+IFdlIGNhbid0IGV4cGVjdCBjYWlybyBvciBwaXhtYW4gdG8g ZG8gdGhhdCBqb2IgYW5kIHRoaXMgY2hhbmdlIHByZXR0eQo+Pj4+IG11Y2gga2lsbHMgc3VwcG9y dCBmb3IgdGhlIHZjNCB0aWxpbmcgbW9kZXMgd2UndmUgYWRkZWQuCj4+Pj4KPj4+PiBVbmxlc3Mg SSdtIG1pc3Npbmcgc29tZXRoaW5nLCB0aGF0J3MgYSBOQUNLIG9uIG15IHNpZGUuCj4+PiBZb3Ug aGF2ZSBhIGZ1bmN0aW9uIHRoYXQgY2FuIGNvbnZlcnQgYSB1bnRpbGVkIGZiIHRvIHRpbGVkLCBi dXQgbm90Cj4+PiB0aGUgb3RoZXIgd2F5IGFyb3VuZCBpbiBpZ3RfdmM0LmMKPj4gV2UgZG9uJ3Qg bmVlZCBpdCBmb3IgYW55dGhpbmcgYXQgdGhlIG1vbWVudCBidXQgaXQgd291bGRuJ3QgYmUgYQo+ PiBwcm9ibGVtIHRvIGNvbWUgdXAgd2l0aCBvbmUsIHN1cmUuCj4+Cj4+PiBJZiB5b3UgY291bGQg cHJvdmlkZSB0aGF0LCB3ZSBjb3VsZCBjb252ZXJ0IGZyb20gYW55IGZiL21vZGlmaWVyCj4+PiBm b3JtYXQgdG8gYW55IGZiL21vZGlmaWVyIGZvcm1hdCwgZXZlbiB3aXRoIFZDNCB0aWxpbmcuCj4+ IEkgZG9uJ3QgZnVsbHkgZ2V0IHRoZSBwb2ludCBvZiB0aGF0IGlmIG91ciB0ZXN0cyBhcmUgbm90 IGdvaW5nIHRvIHVzZQo+PiBpdCwgYnV0IGl0IGRvZXNuJ3QgaHVydCBlaXRoZXIgOikKPj4KPj4+ IE91ciBpbnRlcm5hbCBjYWlybyBob29rcyBhbHJlYWR5IHByb3ZpZGUgaGVscGVycyBmb3IgY29u dmVyc2lvbiwgc2VlCj4+PiBpZ3RfZ2V0X2NhaXJvX3N1cmZhY2UoKSB3aGljaCBjYWxscwo+Pj4g Y3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQoKQo+PiBNeSBmZWVsaW5nIGlzIHRoYXQgd2Ug c2hvdWxkIGtpbGwgdXNlIG9mIGNhaXJvIGZvcm1hdHMgYW5kIGdvIHdpdGgKPj4gcGl4bWFuIGRp cmVjdGx5Lgo+Pgo+Pj4gU29tZSBjb252ZXJzaW9ucyBjYW4gb25seSBiZSBkb25lIHRocm91Z2gg Y2Fpcm8sIGNvbnZlcnRpbmcgYmV0d2Vlbgo+Pj4gUDAxeCBhbmQgWFJHQjg4ODggY2Fubm90IGJl IGRvbmUgZGlyZWN0bHksCj4+PiBvdXIgcGl4bWFuIHJlcHJlc2VudGF0aW9uIGZvciB0aGF0IGFy ZSBkb25lIGluIHRoZSBmbG9hdGluZyBwb2ludAo+Pj4gZm9ybWF0cy4KPj4gSSdtIG5vdCBzdXJl IEknbSBmb2xsb3dpbmcgdGhpcyBwb2ludCwgYnV0IGlmIHRoZXJlJ3MgYSBjb252ZXJzaW9uIHRo YXQKPj4gY2Fpcm8gY2FuIGRvIGFuZCBwaXhtYW4gY2FuJ3QsIGl0IGZlZWxzIGxpa2UgdGhlIHJp Z2h0IHRoaW5nIHdvdWxkIGJlCj4+IHRvIGZpeCBwaXhtYW4gdG8gc3VwcG9ydCBpdC4gSXMgdGhl cmUgYSByZWFzb24gaW4gcGFydGljdWxhciB3aHkgdGhpcwo+PiB3b3VsZG4ndCB3b3JrPwo+Pgo+ Pj4gVGhlIG9ubHkgd2F5IHRvIGNvbnZlcnQgYmV0d2VlbiBzb21lIGZyYW1lYnVmZmVyIGZvcm1h dHMgYW5kCj4+PiBtb2RpZmllcnMgaW4gaTkxNSBpcyBieSB1c2luZyB0aG9zZSBjb252ZXJzaW9u IGZ1bmN0aW9ucywKPj4+IHRoZSBmYWN0IHRoYXQgaWd0X2ZiX2NvbnZlcnRfd2l0aF9zdHJpZGUg ZG9lc24ndCBkbyB0aG9zZSwgbWFrZXMgYQo+Pj4gdHJ1bHkgcmFuZG9tIGhkbWktY21wLXBsYW5l cy1yYW5kb20gdXNlbGVzcy4KPj4gU28gaXQgYm9pbHMgZG93biB0byBhIG1pc3NpbmcgZm9ybWF0 IHN1cHBvcnQgaXNzdWUsIG5vdCByZWFsbHkgdG8gYW4KPj4gaXNzdWUgd2l0aCB0aGUgZXhpc3Rp bmcgZmxvdy4KPj4KPj4+IEkgd2FzIGdldHRpbmcgQ1JDIG1pc21hdGNoZXMgYmVjYXVzZSB0aGUg aTkxNSBtb2RpZmllcnMgd2VyZW4ndAo+Pj4gcmVzcGVjdGVkLiBXaGVuIEkgbWFkZSBzdXJlIHRo ZXkgd2VyZSBiZWluZyByZXNwZWN0ZWQKPj4+IEkgZW5kZWQgdXAgd2l0aCBhIGR1cGxpY2F0ZSBv ZiB0aGUgY2Fpcm8gY29udGV4dCBzdHVmZi4gU28gd2h5IG5vdAo+Pj4gbG9zZSBhIGxpdHRsZSBz cGVlZCBhbmQgdXNlIHRoYXQ/Cj4+IE15IGNvdW50ZXItc3VnZ2VzdGlvbiB3b3VsZCBiZSB0byBk byB0aGUgb3Bwb3NpdGUgYW5kIG1ha2Ugc3VyZSBwaXhtYW4KPj4gY2FuIGRlYWwgd2l0aCB0aGVz ZSBjYXNlcyBvbiBpdHMgb3duLgo+Pgo+Pj4gSWYgeW91IHdyaXRlIGFuZCB0ZXN0IGEgZGV0aWxl ciBmdW5jdGlvbiwgSSBjYW4gaG9vayBpdCB1cCBmb3IgeW91Lgo+Pj4gOikKPj4+IElmIG5lY2Vz c2FyeSBJIGNhbiBkbyBpdCBteXNlbGYsIHRvIG1vdmUgdGhpcyBwYXRjaCBmb3J3YXJkLgo+Pj4K Pj4+IENhaXJvIHNob3VsZG4ndCBiZSBtdWNoIHNsb3dlciB0aGFuIHBpeG1hbiwgYmVjYXVzZSBp bnRlcm5hbGx5IGl0Cj4+PiBhbHJlYWR5IHVzZXMgcGl4bWFuIGNhbGxzIGZvciB0aGUgYmFja2Vu ZC4KPj4gU3VyZSwgYnV0IHRoYXQncyBub3QgY2Fpcm8ncyByb2xlOiBjYWlybyBpcyBhYm91dCBk cmF3aW5nLCB3aGlsZSBwaXhtYW4KPj4gaXMgYWJvdXQgcGl4ZWwgY29udmVyc2lvbi4gSSB0aGlu ayBpdCB3b3VsZCBiZSBiZXN0IHRvIHN0aWNrIHRvIHRoYXQuCj4+Cj4+IENoZWVycywKPj4KPj4g UGF1bAo+Pgo+IFdoYXQgYWJvdXQgdGhpcz8KPiAKPiBXZSBjb3VsZCBkcmF3IHJlZmVyZW5jZSBG QidzIGluIHZjNCB0IHRpbGVkIGZvcm1hdHMgbm93IHRvby4uCj4gCj4gLS0tODwtLS0tCj4gIEZy b20gNzI0MmVkZDJjZDAwOTY1NTYwODBlMGNkYThkNGVjZWE0ZTNmYzU4ZCBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKPiBGcm9tOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RA bGludXguaW50ZWwuY29tPgo+IERhdGU6IFR1ZSwgMiBBcHIgMjAxOSAxNjo1NDozMCArMDIwMAo+ IFN1YmplY3Q6IFtQQVRDSCBpLWctdF0gbGliL2lndF9mYjogVXNlIGNhaXJvIGNvbnZlcnNpb24g aW4KPiAgIGlndF9mYl9jb252ZXJ0X3dpdGhfc3RyaWRlLCB2NC4KPiAKPiBFdmVyIHNpbmNlIGNv bW1pdCAzZmE2NWY0YjUzMmJkOWE1YiAoImZiOiBBZGQgc3VwcG9ydCBmb3IgY29udmVyc2lvbnMK PiB0aHJvdWdoIHBpeG1hbiIpIHdlIGNhbiBnZW5lcmF0ZSBhIHZhbGlkIGNhaXJvIHN1cmZhY2Ug Zm9yIGFueSBwbGFuZSwKPiB1c2UgdGhpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW1wbGVtZW50IG91 ciBvd24gY29udmVyc2lvbiByb3V0aW5lLgo+IAo+IEluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhp cyBmdW5jdGlvbmFsaXR5IGluIGlndF9mYl9jb252ZXJ0X3dpdGhfc3RyaWRlLAo+IHdlIGNhbiBz aW1wbHkgY29udmVydCB0aGlzIHRvIGEgZmV3IGNhaXJvIGNhbGxzLCBiZWNhdXNlIHdlIG5vdyBz dXBwb3J0Cj4gY2Fpcm8gY2FsbHMgdG8gYW55IG9mIHRoZSBzdXBwb3J0ZWQgZnJhbWVidWZmZXIg Zm9ybWF0cy4KPiAKPiBUaGlzIGlzIHJlcXVpcmVkIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiBtb3Jl IGdlbmVyaWMsIGFuZCBjb252ZXJ0IGZyb20gYW55Cj4gZm9ybWF0L21vZGlmaWVyIHRvIGFueSBv dGhlciBmb3JtYXQvbW9kaWZpZXIuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAtIFJldHVybiBm Yl9pZCBpbiB0aGUgY2Fpcm8gY2FzZS4KPiBDaGFuZ2VzIHNpbmNlIHYyOgo+IC0gUmVtb3ZlIHRo ZSBtYW51YWwgY29udmVyc2lvbiBmYWxsYmFjay4KPiBDaGFuZ2VzIHNpbmNlIHYzOgo+IC0gSW50 ZWdyYXRlIFZDNCBjb252ZXJzaW9uIHJvdXRpbmVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE1hYXJ0 ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4gQ2M6IFBh dWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBib290bGluLmNvbT4KPiAtLS0KPiAg IGxpYi9pZ3RfZmIuYyAgfCAxMjkgKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgIGxpYi9pZ3Rf dmM0LmMgfCAyNzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0KPiAgIGxpYi9pZ3RfdmM0LmggfCAgMTIgKy0tCj4gICAzIGZpbGVzIGNoYW5nZWQsIDI0 MiBpbnNlcnRpb25zKCspLCAxNzcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9p Z3RfZmIuYyBiL2xpYi9pZ3RfZmIuYwo+IGluZGV4IGQ0OTI5MDE5OTcxYy4uYzZlMTgzOTdiNzU0 IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZmIuYwo+ICsrKyBiL2xpYi9pZ3RfZmIuYwo+IEBAIC0x NzE2LDE3ICsxNzE2LDI1IEBAIHN0YXRpYyB2b2lkIGZyZWVfbGluZWFyX21hcHBpbmcoc3RydWN0 IGZiX2JsaXRfdXBsb2FkICpibGl0KQo+ICAgCXN0cnVjdCBpZ3RfZmIgKmZiID0gYmxpdC0+ZmI7 Cj4gICAJc3RydWN0IGZiX2JsaXRfbGluZWFyICpsaW5lYXIgPSAmYmxpdC0+bGluZWFyOwo+ICAg Cj4gLQlnZW1fbXVubWFwKGxpbmVhci0+bWFwLCBsaW5lYXItPmZiLnNpemUpOwo+IC0JZ2VtX3Nl dF9kb21haW4oZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPiAtCQkgICAgICAgSTkxNV9HRU1f RE9NQUlOX0dUVCwgMCk7Cj4gKwlpZiAoaWd0X3ZjNF9pc190aWxlZChmYi0+bW9kaWZpZXIpKSB7 Cj4gKwkJdm9pZCAqbWFwID0gaWd0X3ZjNF9tbWFwX2JvKGZkLCBmYi0+Z2VtX2hhbmRsZSwgZmIt PnNpemUsIFBST1RfV1JJVEUpOwo+ICAgCj4gLQlpZiAoYmxpdC0+YmF0Y2gpCj4gLQkJcmVuZGVy Y29weShibGl0LCBmYiwgJmxpbmVhci0+ZmIpOwo+IC0JZWxzZQo+IC0JCWJsaXRjb3B5KGZiLCAm bGluZWFyLT5mYik7Cj4gKwkJdmM0X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQoZmIsIG1hcCwg JmxpbmVhci0+ZmIsICZsaW5lYXItPm1hcCk7Cj4gKwo+ICsJCW11bm1hcChtYXAsIGZiLT5zaXpl KTsKPiArCX0gZWxzZSB7Cj4gKwkJZ2VtX211bm1hcChsaW5lYXItPm1hcCwgbGluZWFyLT5mYi5z aXplKTsKPiArCQlnZW1fc2V0X2RvbWFpbihmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlLAo+ICsJ CQlJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKPiArCj4gKwkJaWYgKGJsaXQtPmJhdGNoKQo+ICsJ CQlyZW5kZXJjb3B5KGJsaXQsIGZiLCAmbGluZWFyLT5mYik7Cj4gKwkJZWxzZQo+ICsJCQlibGl0 Y29weShmYiwgJmxpbmVhci0+ZmIpOwo+ICAgCj4gLQlnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5n ZW1faGFuZGxlKTsKPiAtCWdlbV9jbG9zZShmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPiAr CQlnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPiArCQlnZW1fY2xvc2UoZmQs IGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSk7Cj4gKwl9Cj4gICAKPiAgIAlpZiAoYmxpdC0+YmF0Y2gp IHsKPiAgIAkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShibGl0LT5iYXRjaCk7Cj4gQEAgLTE3NTEs NyArMTc1OSw3IEBAIHN0YXRpYyB2b2lkIHNldHVwX2xpbmVhcl9tYXBwaW5nKHN0cnVjdCBmYl9i bGl0X3VwbG9hZCAqYmxpdCkKPiAgIAlzdHJ1Y3QgaWd0X2ZiICpmYiA9IGJsaXQtPmZiOwo+ICAg CXN0cnVjdCBmYl9ibGl0X2xpbmVhciAqbGluZWFyID0gJmJsaXQtPmxpbmVhcjsKPiAgIAo+IC0J aWYgKHVzZV9yZW5kZXJjb3B5KGZiKSkgewo+ICsJaWYgKCFpZ3RfdmM0X2lzX3RpbGVkKGZiLT5t b2RpZmllcikgJiYgdXNlX3JlbmRlcmNvcHkoZmIpKSB7Cj4gICAJCWJsaXQtPmJ1Zm1nciA9IGRy bV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZmQsIDQwOTYpOwo+ICAgCQlibGl0LT5iYXRjaCA9IGlu dGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJsaXQtPmJ1Zm1nciwKPiAgIAkJCQkJCSAgICAgIGludGVs X2dldF9kcm1fZGV2aWQoZmQpKTsKPiBAQCAtMTc3MSwyMyArMTc3OSwzNSBAQCBzdGF0aWMgdm9p ZCBzZXR1cF9saW5lYXJfbWFwcGluZyhzdHJ1Y3QgZmJfYmxpdF91cGxvYWQgKmJsaXQpCj4gICAK PiAgIAlpZ3RfYXNzZXJ0KGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSA+IDApOwo+ICAgCj4gLQkvKiBD b3B5IGZiIGNvbnRlbnQgdG8gbGluZWFyIEJPICovCj4gLQlnZW1fc2V0X2RvbWFpbihmZCwgbGlu ZWFyLT5mYi5nZW1faGFuZGxlLAo+IC0JCQlJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsKPiArCWlm IChpZ3RfdmM0X2lzX3RpbGVkKGZiLT5tb2RpZmllcikpIHsKPiArCQl2b2lkICptYXAgPSBpZ3Rf dmM0X21tYXBfYm8oZmQsIGZiLT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgUFJPVF9SRUFEKTsKPiAg IAo+IC0JaWYgKGJsaXQtPmJhdGNoKQo+IC0JCXJlbmRlcmNvcHkoYmxpdCwgJmxpbmVhci0+ZmIs IGZiKTsKPiAtCWVsc2UKPiAtCQlibGl0Y29weSgmbGluZWFyLT5mYiwgZmIpOwo+ICsJCWxpbmVh ci0+bWFwID0gaWd0X3ZjNF9tbWFwX2JvKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4gKwkJ CQkJICAgICAgbGluZWFyLT5mYi5zaXplLAo+ICsJCQkJCSAgICAgIFBST1RfUkVBRCB8IFBST1Rf V1JJVEUpOwo+ICAgCj4gLQlnZW1fc3luYyhmZCwgbGluZWFyLT5mYi5nZW1faGFuZGxlKTsKPiAr CQl2YzRfZmJfY29udmVydF9wbGFuZV9mcm9tX3RpbGVkKCZsaW5lYXItPmZiLCAmbGluZWFyLT5t YXAsIGZiLCBtYXApOwo+ICAgCj4gLQlnZW1fc2V0X2RvbWFpbihmZCwgbGluZWFyLT5mYi5nZW1f aGFuZGxlLAo+IC0JCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5f Q1BVKTsKPiArCQltdW5tYXAobWFwLCBmYi0+c2l6ZSk7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIENv cHkgZmIgY29udGVudCB0byBsaW5lYXIgQk8gKi8KPiArCQlnZW1fc2V0X2RvbWFpbihmZCwgbGlu ZWFyLT5mYi5nZW1faGFuZGxlLAo+ICsJCQkJSTkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7Cj4gKwo+ ICsJCWlmIChibGl0LT5iYXRjaCkKPiArCQkJcmVuZGVyY29weShibGl0LCAmbGluZWFyLT5mYiwg ZmIpOwo+ICsJCWVsc2UKPiArCQkJYmxpdGNvcHkoJmxpbmVhci0+ZmIsIGZiKTsKPiArCj4gKwkJ Z2VtX3N5bmMoZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSk7Cj4gKwo+ICsJCWdlbV9zZXRfZG9t YWluKGZkLCBsaW5lYXItPmZiLmdlbV9oYW5kbGUsCj4gKwkJCUk5MTVfR0VNX0RPTUFJTl9DUFUs IEk5MTVfR0VNX0RPTUFJTl9DUFUpOwo+ICAgCj4gLQkvKiBTZXR1cCBjYWlybyBjb250ZXh0ICov Cj4gLQlsaW5lYXItPm1hcCA9IGdlbV9tbWFwX19jcHUoZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRs ZSwKPiAtCQkJCSAgICAwLCBsaW5lYXItPmZiLnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp Owo+ICsJCS8qIFNldHVwIGNhaXJvIGNvbnRleHQgKi8KPiArCQlsaW5lYXItPm1hcCA9IGdlbV9t bWFwX19jcHUoZmQsIGxpbmVhci0+ZmIuZ2VtX2hhbmRsZSwKPiArCQkJCQkwLCBsaW5lYXItPmZi LnNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ICsJfQo+ICAgfQo+ICAgCj4gICBzdGF0 aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3B1KGludCBmZCwgc3RydWN0IGlndF9mYiAq ZmIpCj4gQEAgLTI5MDIsNyArMjkyMiw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9jYWlyb19zdXJm YWNlX19jb252ZXJ0KGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCj4gICAJCQkJCQkJICAgICAm YmxpdC0+c2hhZG93X2ZiKTsKPiAgIAlpZ3RfYXNzZXJ0KGJsaXQtPnNoYWRvd19wdHIpOwo+ICAg Cj4gLQlpZiAodXNlX3JlbmRlcmNvcHkoZmIpIHx8IHVzZV9ibGl0dGVyKGZiKSkgewo+ICsJaWYg KHVzZV9yZW5kZXJjb3B5KGZiKSB8fCB1c2VfYmxpdHRlcihmYikgfHwgaWd0X3ZjNF9pc190aWxl ZChmYi0+bW9kaWZpZXIpKSB7Cj4gICAJCXNldHVwX2xpbmVhcl9tYXBwaW5nKCZibGl0LT5iYXNl KTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlibGl0LT5iYXNlLmxpbmVhci5mYiA9ICpmYjsKPiBAQCAt Mjk4Myw3ICszMDAzLDcgQEAgY2Fpcm9fc3VyZmFjZV90ICppZ3RfZ2V0X2NhaXJvX3N1cmZhY2Uo aW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiAgIAkJICAgICgoZi0+Y2Fpcm9faWQgPT0gQ0FJ Uk9fRk9STUFUX0lOVkFMSUQpICYmCj4gICAJCSAgICAgKGYtPnBpeG1hbl9pZCAhPSBQSVhNQU5f aW52YWxpZCkpKQo+ICAgCQkJY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQoZmQsIGZiKTsK PiAtCQllbHNlIGlmICh1c2VfYmxpdHRlcihmYikgfHwgdXNlX3JlbmRlcmNvcHkoZmIpKQo+ICsJ CWVsc2UgaWYgKHVzZV9ibGl0dGVyKGZiKSB8fCB1c2VfcmVuZGVyY29weShmYikgfHwgaWd0X3Zj NF9pc190aWxlZChmYi0+bW9kaWZpZXIpKQo+ICAgCQkJY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2dw dShmZCwgZmIpOwo+ICAgCQllbHNlCj4gICAJCQljcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGZk LCBmYik7Cj4gQEAgLTMxMDIsNTggKzMxMjIsMjMgQEAgdW5zaWduZWQgaW50IGlndF9mYl9jb252 ZXJ0X3dpdGhfc3RyaWRlKHN0cnVjdCBpZ3RfZmIgKmRzdCwgc3RydWN0IGlndF9mYiAqc3JjLAo+ ICAgCQkJCQl1aW50NjRfdCBkc3RfbW9kaWZpZXIsCj4gICAJCQkJCXVuc2lnbmVkIGludCBkc3Rf c3RyaWRlKQo+ICAgewo+IC0Jc3RydWN0IGZiX2NvbnZlcnQgY3Z0ID0geyB9Owo+IC0Jc3RydWN0 IGlndF9mYiBsaW5lYXI7Cj4gLQl2b2lkICpkc3RfcHRyLCAqc3JjX3B0cjsKPiAtCXVpbnQ2NF90 IGJhc2VfbW9kaWZpZXI7Cj4gKwkvKiBVc2UgdGhlIGNhaXJvIGFwaSB0byBjb252ZXJ0ICovCj4g KwljYWlyb19zdXJmYWNlX3QgKnN1cmYgPSBpZ3RfZ2V0X2NhaXJvX3N1cmZhY2Uoc3JjLT5mZCwg c3JjKTsKPiArCWNhaXJvX3QgKmNyOwo+ICAgCWludCBmYl9pZDsKPiAgIAo+IC0JaWYgKGlzX3Zj NF9kZXZpY2Uoc3JjLT5mZCkpCj4gLQkJYmFzZV9tb2RpZmllciA9IGZvdXJjY19tb2RfYnJvYWRj b21fbW9kKGRzdF9tb2RpZmllcik7Cj4gLQllbHNlCj4gLQkJYmFzZV9tb2RpZmllciA9IGRzdF9t b2RpZmllcjsKPiAtCj4gLQlmYl9pZCA9IGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXplKHNyYy0+ ZmQsIHNyYy0+d2lkdGgsIHNyYy0+aGVpZ2h0LAo+IC0JCQkJCSAgIGRzdF9mb3VyY2MsCj4gLQkJ CQkJICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwgJmxpbmVhciwKPiAtCQkJCQkgICAwLCBk c3Rfc3RyaWRlKTsKPiArCWZiX2lkID0gaWd0X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUoc3JjLT5m ZCwgc3JjLT53aWR0aCwKPiArCQkJCQkgICBzcmMtPmhlaWdodCwgZHN0X2ZvdXJjYywKPiArCQkJ CQkgICBkc3RfbW9kaWZpZXIsIGRzdCwgMCwKPiArCQkJCQkgICBkc3Rfc3RyaWRlKTsKPiAgIAlp Z3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gICAKPiAtCXNyY19wdHIgPSBpZ3RfZmJfbWFwX2J1ZmZl cihzcmMtPmZkLCBzcmMpOwo+IC0JaWd0X2Fzc2VydChzcmNfcHRyKTsKPiAtCj4gLQlkc3RfcHRy ID0gaWd0X2ZiX21hcF9idWZmZXIobGluZWFyLmZkLCAmbGluZWFyKTsKPiAtCWlndF9hc3NlcnQo ZHN0X3B0cik7Cj4gLQo+IC0JY3Z0LmRzdC5wdHIgPSBkc3RfcHRyOwo+IC0JY3Z0LmRzdC5mYiA9 ICZsaW5lYXI7Cj4gLQljdnQuc3JjLnB0ciA9IHNyY19wdHI7Cj4gLQljdnQuc3JjLmZiID0gc3Jj Owo+IC0JZmJfY29udmVydCgmY3Z0KTsKPiAtCj4gLQlpZ3RfZmJfdW5tYXBfYnVmZmVyKGRzdCwg ZHN0X3B0cik7Cj4gLQlpZ3RfZmJfdW5tYXBfYnVmZmVyKHNyYywgc3JjX3B0cik7Cj4gLQo+IC0J c3dpdGNoIChiYXNlX21vZGlmaWVyKSB7Cj4gLQljYXNlIERSTV9GT1JNQVRfTU9EX0JST0FEQ09N X1ZDNF9UX1RJTEVEOgo+IC0JCWZiX2lkID0gaWd0X3ZjNF9mYl90X3RpbGVkX2NvbnZlcnQoZHN0 LCAmbGluZWFyKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01f U0FORDMyOgo+IC0JY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5ENjQ6Cj4gLQljYXNl IERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQxMjg6Cj4gLQljYXNlIERSTV9GT1JNQVRfTU9E X0JST0FEQ09NX1NBTkQyNTY6Cj4gLQkJZmJfaWQgPSB2YzRfZmJfc2FuZF90aWxlZF9jb252ZXJ0 KGRzdCwgJmxpbmVhciwgZHN0X21vZGlmaWVyKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJaWd0X2Fzc2VydChkc3RfbW9kaWZpZXIgPT0gTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7 Cj4gLQl9Cj4gLQo+IC0JaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+ICsJY3IgPSBpZ3RfZ2V0X2Nh aXJvX2N0eChkc3QtPmZkLCBkc3QpOwo+ICsJY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCBz dXJmLCAwLCAwKTsKPiArCWNhaXJvX3BhaW50KGNyKTsKPiArCWlndF9wdXRfY2Fpcm9fY3R4KGRz dC0+ZmQsIGRzdCwgY3IpOwo+ICAgCj4gLQlpZiAoZHN0X21vZGlmaWVyID09IExPQ0FMX0RSTV9G T1JNQVRfTU9EX05PTkUpCj4gLQkJKmRzdCA9IGxpbmVhcjsKPiAtCWVsc2UKPiAtCQlpZ3RfcmVt b3ZlX2ZiKGxpbmVhci5mZCwgJmxpbmVhcik7Cj4gKwljYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3Vy Zik7Cj4gICAKPiAgIAlyZXR1cm4gZmJfaWQ7Cj4gICB9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf dmM0LmMgYi9saWIvaWd0X3ZjNC5jCj4gaW5kZXggOWEwYmEzMGI0NDIwLi40NDE1ZmEzMjFjZWIg MTAwNjQ0Cj4gLS0tIGEvbGliL2lndF92YzQuYwo+ICsrKyBiL2xpYi9pZ3RfdmM0LmMKPiBAQCAt NTYsNiArNTYsMjMgQEAKPiAgICAqIHRlc3RzLgo+ICAgICovCj4gICAKPiArYm9vbCBpZ3RfdmM0 X2lzX3RpbGVkKHVpbnQ2NF90IG1vZGlmaWVyKQo+ICt7Cj4gKwlpZiAobW9kaWZpZXIgPj4gNTZV TEwgIT0gRFJNX0ZPUk1BVF9NT0RfVkVORE9SX0JST0FEQ09NKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlzd2l0Y2ggKGZvdXJjY19tb2RfYnJvYWRjb21fbW9kKG1vZGlmaWVyKSkgewo+ICsJ Y2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMzI6Cj4gKwljYXNlIERSTV9GT1JNQVRf TU9EX0JST0FEQ09NX1NBTkQ2NDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FO RDEyODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDI1NjoKPiArCWNhc2Ug RFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fVkM0X1RfVElMRUQ6Cj4gKwkJcmV0dXJuIHRydWU7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiAgIC8qKgo+ICAg ICogaWd0X3ZjNF9nZXRfY2xlYXJlZF9ibzoKPiAgICAqIEBmZDogZGV2aWNlIGZpbGUgZGVzY3Jp cHRvcgo+IEBAIC0xNzgsNjMgKzE5NSwxMiBAQCBib29sIGlndF92YzRfcHVyZ2VhYmxlX2JvKGlu dCBmZCwgaW50IGhhbmRsZSwgYm9vbCBwdXJnZWFibGUpCj4gICAJcmV0dXJuIGFyZy5yZXRhaW5l ZDsKPiAgIH0KPiAgIAo+IC11bnNpZ25lZCBpbnQgaWd0X3ZjNF9mYl90X3RpbGVkX2NvbnZlcnQo c3RydWN0IGlndF9mYiAqZHN0LCBzdHJ1Y3QgaWd0X2ZiICpzcmMpCj4gLXsKPiAtCXVuc2lnbmVk IGludCBmYl9pZDsKPiAtCXVuc2lnbmVkIGludCBpLCBqOwo+IC0Jdm9pZCAqc3JjX2J1ZjsKPiAt CXZvaWQgKmRzdF9idWY7Cj4gLQlzaXplX3QgYnBwID0gc3JjLT5wbGFuZV9icHBbMF07Cj4gLQlz aXplX3QgZHN0X3N0cmlkZSA9IEFMSUdOKHNyYy0+c3RyaWRlc1swXSwgMTI4KTsKPiAtCj4gLQlm Yl9pZCA9IGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXplKHNyYy0+ZmQsIHNyYy0+d2lkdGgsIHNy Yy0+aGVpZ2h0LAo+IC0JCQkJCSAgIHNyYy0+ZHJtX2Zvcm1hdCwKPiAtCQkJCQkgICBEUk1fRk9S TUFUX01PRF9CUk9BRENPTV9WQzRfVF9USUxFRCwKPiAtCQkJCQkgICBkc3QsIDAsIGRzdF9zdHJp ZGUpOwo+IC0JaWd0X2Fzc2VydChmYl9pZCA+IDApOwo+IC0KPiAtCWlndF9hc3NlcnQoYnBwID09 IDE2IHx8IGJwcCA9PSAzMik7Cj4gLQo+IC0Jc3JjX2J1ZiA9IGlndF9mYl9tYXBfYnVmZmVyKHNy Yy0+ZmQsIHNyYyk7Cj4gLQlpZ3RfYXNzZXJ0KHNyY19idWYpOwo+IC0KPiAtCWRzdF9idWYgPSBp Z3RfZmJfbWFwX2J1ZmZlcihkc3QtPmZkLCBkc3QpOwo+IC0JaWd0X2Fzc2VydChkc3RfYnVmKTsK PiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgc3JjLT5oZWlnaHQ7IGkrKykgewo+IC0JCWZvciAoaiA9 IDA7IGogPCBzcmMtPndpZHRoOyBqKyspIHsKPiAtCQkJc2l6ZV90IHNyY19vZmZzZXQgPSBzcmMt Pm9mZnNldHNbMF07Cj4gLQkJCXNpemVfdCBkc3Rfb2Zmc2V0ID0gZHN0LT5vZmZzZXRzWzBdOwo+ IC0KPiAtCQkJc3JjX29mZnNldCArPSBzcmMtPnN0cmlkZXNbMF0gKiBpICsgaiAqIGJwcCAvIDg7 Cj4gLQkJCWRzdF9vZmZzZXQgKz0gaWd0X3ZjNF90X3RpbGVkX29mZnNldChkc3Rfc3RyaWRlLAo+ IC0JCQkJCQkJICAgICBzcmMtPmhlaWdodCwKPiAtCQkJCQkJCSAgICAgYnBwLCBqLCBpKTsKPiAt Cj4gLQkJCXN3aXRjaCAoYnBwKSB7Cj4gLQkJCWNhc2UgMTY6Cj4gLQkJCQkqKHVpbnQxNl90ICop KGRzdF9idWYgKyBkc3Rfb2Zmc2V0KSA9Cj4gLQkJCQkJKih1aW50MTZfdCAqKShzcmNfYnVmICsg c3JjX29mZnNldCk7Cj4gLQkJCQlicmVhazsKPiAtCQkJY2FzZSAzMjoKPiAtCQkJCSoodWludDMy X3QgKikoZHN0X2J1ZiArIGRzdF9vZmZzZXQpID0KPiAtCQkJCQkqKHVpbnQzMl90ICopKHNyY19i dWYgKyBzcmNfb2Zmc2V0KTsKPiAtCQkJCWJyZWFrOwo+IC0JCQl9Cj4gLQkJfQo+IC0JfQo+IC0K PiAtCWlndF9mYl91bm1hcF9idWZmZXIoc3JjLCBzcmNfYnVmKTsKPiAtCWlndF9mYl91bm1hcF9i dWZmZXIoZHN0LCBkc3RfYnVmKTsKPiAtCj4gLQlyZXR1cm4gZmJfaWQ7Cj4gLX0KPiAgIAo+ICAg LyogQ2FsY3VsYXRlIHRoZSB0LXRpbGUgd2lkdGggc28gdGhhdCBzaXplID0gd2lkdGggKiBoZWln aHQgKiBicHAgLyA4LiAqLwo+ICAgI2RlZmluZSBWQzRfVF9USUxFX1coc2l6ZSwgaGVpZ2h0LCBi cHApICgoc2l6ZSkgLyAoaGVpZ2h0KSAvICgoYnBwKSAvIDgpKQo+ICAgCj4gLXNpemVfdCBpZ3Rf dmM0X3RfdGlsZWRfb2Zmc2V0KHNpemVfdCBzdHJpZGUsIHNpemVfdCBoZWlnaHQsIHNpemVfdCBi cHAsCj4gLQkJCSAgICAgIHNpemVfdCB4LCBzaXplX3QgeSkKPiArc3RhdGljIHNpemVfdCBpZ3Rf dmM0X3RfdGlsZWRfb2Zmc2V0KHNpemVfdCBzdHJpZGUsIHNpemVfdCBoZWlnaHQsIHNpemVfdCBi cHAsCj4gKwkJCQkgICAgIHNpemVfdCB4LCBzaXplX3QgeSkKPiAgIHsKPiAgIAljb25zdCBzaXpl X3QgdDFrX21hcF9ldmVuW10gPSB7IDAsIDMsIDEsIDIgfTsKPiAgIAljb25zdCBzaXplX3QgdDFr X21hcF9vZGRbXSA9IHsgMiwgMSwgMywgMCB9Owo+IEBAIC0zMDgsMTggKzI3NCwxMTYgQEAgc2l6 ZV90IGlndF92YzRfdF90aWxlZF9vZmZzZXQoc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGhlaWdodCwg c2l6ZV90IGJwcCwKPiAgIAlyZXR1cm4gb2Zmc2V0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lk IHZjNF9mYl9zYW5kX3RpbGVkX2NvbnZlcnRfcGxhbmUoc3RydWN0IGlndF9mYiAqZHN0LCB2b2lk ICpkc3RfYnVmLAo+ICtzdGF0aWMgdm9pZCB2YzRfZmJfY29udmVydF9wbGFuZV90b190X3RpbGVk KHN0cnVjdCBpZ3RfZmIgKmRzdCwgdm9pZCAqZHN0X2J1ZiwKPiAgIAkJCQkJICAgIHN0cnVjdCBp Z3RfZmIgKnNyYywgdm9pZCAqc3JjX2J1ZiwKPiAtCQkJCQkgICAgc2l6ZV90IGNvbHVtbl93aWR0 aF9ieXRlcywKPiAtCQkJCQkgICAgc2l6ZV90IGNvbHVtbl9oZWlnaHQsCj4gICAJCQkJCSAgICB1 bnNpZ25lZCBpbnQgcGxhbmUpCj4gICB7Cj4gKwlzaXplX3QgYnBwID0gc3JjLT5wbGFuZV9icHBb cGxhbmVdOwo+ICsJdW5zaWduZWQgaW50IGksIGo7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHNy Yy0+aGVpZ2h0OyBpKyspIHsKPiArCQlmb3IgKGogPSAwOyBqIDwgc3JjLT53aWR0aDsgaisrKSB7 Cj4gKwkJCXNpemVfdCBzcmNfb2Zmc2V0ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsKPiArCQkJc2l6 ZV90IGRzdF9vZmZzZXQgPSBkc3QtPm9mZnNldHNbcGxhbmVdOwo+ICsKPiArCQkJc3JjX29mZnNl dCArPSBzcmMtPnN0cmlkZXNbcGxhbmVdICogaSArIGogKiBicHAgLyA4Owo+ICsJCQlkc3Rfb2Zm c2V0ICs9IGlndF92YzRfdF90aWxlZF9vZmZzZXQoZHN0LT5zdHJpZGVzW3BsYW5lXSwKPiArCQkJ CQkJCSAgICAgZHN0LT5oZWlnaHQsCj4gKwkJCQkJCQkgICAgIGJwcCwgaiwgaSk7Cj4gKwo+ICsJ CQlzd2l0Y2ggKGJwcCkgewo+ICsJCQljYXNlIDE2Ogo+ICsJCQkJKih1aW50MTZfdCAqKShkc3Rf YnVmICsgZHN0X29mZnNldCkgPQo+ICsJCQkJCSoodWludDE2X3QgKikoc3JjX2J1ZiArIHNyY19v ZmZzZXQpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgMzI6Cj4gKwkJCQkqKHVpbnQzMl90ICop KGRzdF9idWYgKyBkc3Rfb2Zmc2V0KSA9Cj4gKwkJCQkJKih1aW50MzJfdCAqKShzcmNfYnVmICsg c3JjX29mZnNldCk7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdmM0X2ZiX2NvbnZlcnRfcGxhbmVfZnJvbV90X3RpbGVkKHN0cnVjdCBp Z3RfZmIgKmRzdCwgdm9pZCAqZHN0X2J1ZiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgaWd0X2ZiICpz cmMsIHZvaWQgKnNyY19idWYsCj4gKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHBsYW5lKQo+ICt7 Cj4gKwlzaXplX3QgYnBwID0gc3JjLT5wbGFuZV9icHBbcGxhbmVdOwo+ICsJdW5zaWduZWQgaW50 IGksIGo7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHNyYy0+aGVpZ2h0OyBpKyspIHsKPiArCQlm b3IgKGogPSAwOyBqIDwgc3JjLT53aWR0aDsgaisrKSB7Cj4gKwkJCXNpemVfdCBzcmNfb2Zmc2V0 ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsKPiArCQkJc2l6ZV90IGRzdF9vZmZzZXQgPSBkc3QtPm9m ZnNldHNbcGxhbmVdOwo+ICsKPiArCQkJc3JjX29mZnNldCArPSBpZ3RfdmM0X3RfdGlsZWRfb2Zm c2V0KHNyYy0+c3RyaWRlc1twbGFuZV0sCj4gKwkJCQkJCQkgICAgIHNyYy0+aGVpZ2h0LAo+ICsJ CQkJCQkJICAgICBicHAsIGosIGkpOwo+ICsJCQlzcmNfb2Zmc2V0ICs9IGRzdC0+c3RyaWRlc1tw bGFuZV0gKiBpICsgaiAqIGJwcCAvIDg7Cj4gKwo+ICsJCQlzd2l0Y2ggKGJwcCkgewo+ICsJCQlj YXNlIDE2Ogo+ICsJCQkJKih1aW50MTZfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+ICsJ CQkJCSoodWludDE2X3QgKikoc3JjX2J1ZiArIHNyY19vZmZzZXQpOwo+ICsJCQkJYnJlYWs7Cj4g KwkJCWNhc2UgMzI6Cj4gKwkJCQkqKHVpbnQzMl90ICopKGRzdF9idWYgKyBkc3Rfb2Zmc2V0KSA9 Cj4gKwkJCQkJKih1aW50MzJfdCAqKShzcmNfYnVmICsgc3JjX29mZnNldCk7Cj4gKwkJCQlicmVh azsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCB2YzRfc2Fu ZF90aWxlZF9vZmZzZXQoc2l6ZV90IGNvbHVtbl93aWR0aCwgc2l6ZV90IGNvbHVtbl9zaXplLCBz aXplX3QgeCwKPiArCQkJCSAgICBzaXplX3QgeSwgc2l6ZV90IGJwcCkKPiArewo+ICsJc2l6ZV90 IG9mZnNldCA9IDA7Cj4gKwlzaXplX3QgY29sc194Owo+ICsJc2l6ZV90IHBpeF94Owo+ICsKPiAr CS8qIE9mZnNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZWxldmFudCBjb2x1bW4uICovCj4g Kwljb2xzX3ggPSB4IC8gY29sdW1uX3dpZHRoOwo+ICsJb2Zmc2V0ICs9IGNvbHNfeCAqIGNvbHVt bl9zaXplOwo+ICsKPiArCS8qIE9mZnNldCB0byB0aGUgcmVsZXZhbnQgcGl4ZWwuICovCj4gKwlw aXhfeCA9IHggJSBjb2x1bW5fd2lkdGg7Cj4gKwlvZmZzZXQgKz0gKGNvbHVtbl93aWR0aCAqIHkg KyBwaXhfeCkgKiBicHAgLyA4Owo+ICsKPiArCXJldHVybiBvZmZzZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHZjNF9mYl9jb252ZXJ0X3BsYW5lX3RvX3NhbmRfdGlsZWQoc3RydWN0IGlndF9m YiAqZHN0LCB2b2lkICpkc3RfYnVmLAo+ICsJCQkJCSAgICAgICBzdHJ1Y3QgaWd0X2ZiICpzcmMs IHZvaWQgKnNyY19idWYsCj4gKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBwbGFuZSkKPiArewo+ ICsJdWludDY0X3QgbW9kaWZpZXJfYmFzZSA9IGZvdXJjY19tb2RfYnJvYWRjb21fbW9kKGRzdC0+ bW9kaWZpZXIpOwo+ICsJdWludDMyX3QgY29sdW1uX2hlaWdodCA9IGZvdXJjY19tb2RfYnJvYWRj b21fcGFyYW0oZHN0LT5tb2RpZmllcik7Cj4gKwl1aW50MzJfdCBjb2x1bW5fd2lkdGhfYnl0ZXMs IGNvbHVtbl93aWR0aCwgY29sdW1uX3NpemU7Cj4gICAJc2l6ZV90IGJwcCA9IGRzdC0+cGxhbmVf YnBwW3BsYW5lXTsKPiAtCXNpemVfdCBjb2x1bW5fd2lkdGggPSBjb2x1bW5fd2lkdGhfYnl0ZXMg KiBkc3QtPnBsYW5lX3dpZHRoW3BsYW5lXSAvCj4gLQkJCSAgICAgIGRzdC0+d2lkdGg7Cj4gLQlz aXplX3QgY29sdW1uX3NpemUgPSBjb2x1bW5fd2lkdGhfYnl0ZXMgKiBjb2x1bW5faGVpZ2h0Owo+ ICAgCXVuc2lnbmVkIGludCBpLCBqOwo+ICAgCj4gKwlzd2l0Y2ggKG1vZGlmaWVyX2Jhc2UpIHsK PiArCWNhc2UgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDMyOgo+ICsJCWNvbHVtbl93aWR0 aF9ieXRlcyA9IDMyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENP TV9TQU5ENjQ6Cj4gKwkJY29sdW1uX3dpZHRoX2J5dGVzID0gNjQ7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQxMjg6Cj4gKwkJY29sdW1uX3dpZHRoX2J5 dGVzID0gMTI4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9T QU5EMjU2Ogo+ICsJCWNvbHVtbl93aWR0aF9ieXRlcyA9IDI1NjsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJaWd0X2Fzc2VydChmYWxzZSk7Cj4gKwl9Cj4gKwo+ICsJY29sdW1uX3dpZHRo ID0gY29sdW1uX3dpZHRoX2J5dGVzICogZHN0LT5wbGFuZV93aWR0aFtwbGFuZV0gLyBkc3QtPndp ZHRoOwo+ICsJY29sdW1uX3NpemUgPSBjb2x1bW5fd2lkdGhfYnl0ZXMgKiBjb2x1bW5faGVpZ2h0 Owo+ICsKPiAgIAlmb3IgKGkgPSAwOyBpIDwgZHN0LT5wbGFuZV9oZWlnaHRbcGxhbmVdOyBpKysp IHsKPiAgIAkJZm9yIChqID0gMDsgaiA8IHNyYy0+cGxhbmVfd2lkdGhbcGxhbmVdOyBqKyspIHsK PiAgIAkJCXNpemVfdCBzcmNfb2Zmc2V0ID0gc3JjLT5vZmZzZXRzW3BsYW5lXTsKPiBAQCAtMzQ2 LDE5ICs0MTAsMTUgQEAgc3RhdGljIHZvaWQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydF9wbGFu ZShzdHJ1Y3QgaWd0X2ZiICpkc3QsIHZvaWQgKmRzdF9idWYsCj4gICAJfQo+ICAgfQo+ICAgCj4g LXVuc2lnbmVkIGludCB2YzRfZmJfc2FuZF90aWxlZF9jb252ZXJ0KHN0cnVjdCBpZ3RfZmIgKmRz dCwgc3RydWN0IGlndF9mYiAqc3JjLAo+IC0JCQkJICAgICAgIHVpbnQ2NF90IG1vZGlmaWVyKQo+ ICtzdGF0aWMgdm9pZCB2YzRfZmJfY29udmVydF9wbGFuZV9mcm9tX3NhbmRfdGlsZWQoc3RydWN0 IGlndF9mYiAqZHN0LCB2b2lkICpkc3RfYnVmLAo+ICsJCQkJCQkgc3RydWN0IGlndF9mYiAqc3Jj LCB2b2lkICpzcmNfYnVmLAo+ICsJCQkJCQkgdW5zaWduZWQgaW50IHBsYW5lKQo+ICAgewo+IC0J dWludDY0X3QgbW9kaWZpZXJfYmFzZTsKPiAtCXNpemVfdCBjb2x1bW5fd2lkdGhfYnl0ZXM7Cj4g LQlzaXplX3QgY29sdW1uX2hlaWdodDsKPiAtCXVuc2lnbmVkIGludCBmYl9pZDsKPiAtCXVuc2ln bmVkIGludCBpOwo+IC0Jdm9pZCAqc3JjX2J1ZjsKPiAtCXZvaWQgKmRzdF9idWY7Cj4gLQo+IC0J bW9kaWZpZXJfYmFzZSA9IGZvdXJjY19tb2RfYnJvYWRjb21fbW9kKG1vZGlmaWVyKTsKPiAtCWNv bHVtbl9oZWlnaHQgPSBmb3VyY2NfbW9kX2Jyb2FkY29tX3BhcmFtKG1vZGlmaWVyKTsKPiArCXVp bnQ2NF90IG1vZGlmaWVyX2Jhc2UgPSBmb3VyY2NfbW9kX2Jyb2FkY29tX21vZChzcmMtPm1vZGlm aWVyKTsKPiArCXVpbnQzMl90IGNvbHVtbl9oZWlnaHQgPSBmb3VyY2NfbW9kX2Jyb2FkY29tX3Bh cmFtKHNyYy0+bW9kaWZpZXIpOwo+ICsJdWludDMyX3QgY29sdW1uX3dpZHRoX2J5dGVzLCBjb2x1 bW5fd2lkdGgsIGNvbHVtbl9zaXplOwo+ICsJc2l6ZV90IGJwcCA9IHNyYy0+cGxhbmVfYnBwW3Bs YW5lXTsKPiArCXVuc2lnbmVkIGludCBpLCBqOwo+ICAgCj4gICAJc3dpdGNoIChtb2RpZmllcl9i YXNlKSB7Cj4gICAJY2FzZSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMzI6Cj4gQEAgLTM3 Nyw0MSArNDM3LDYzIEBAIHVuc2lnbmVkIGludCB2YzRfZmJfc2FuZF90aWxlZF9jb252ZXJ0KHN0 cnVjdCBpZ3RfZmIgKmRzdCwgc3RydWN0IGlndF9mYiAqc3JjLAo+ICAgCQlpZ3RfYXNzZXJ0KGZh bHNlKTsKPiAgIAl9Cj4gICAKPiAtCWZiX2lkID0gaWd0X2NyZWF0ZV9mYihzcmMtPmZkLCBzcmMt PndpZHRoLCBzcmMtPmhlaWdodCwgc3JjLT5kcm1fZm9ybWF0LAo+IC0JCQkgICAgICBtb2RpZmll ciwgZHN0KTsKPiAtCWlndF9hc3NlcnQoZmJfaWQgPiAwKTsKPiArCWNvbHVtbl93aWR0aCA9IGNv bHVtbl93aWR0aF9ieXRlcyAqIHNyYy0+cGxhbmVfd2lkdGhbcGxhbmVdIC8gc3JjLT53aWR0aDsK PiArCWNvbHVtbl9zaXplID0gY29sdW1uX3dpZHRoX2J5dGVzICogY29sdW1uX2hlaWdodDsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZHN0LT5wbGFuZV9oZWlnaHRbcGxhbmVdOyBpKyspIHsKPiAr CQlmb3IgKGogPSAwOyBqIDwgc3JjLT5wbGFuZV93aWR0aFtwbGFuZV07IGorKykgewo+ICsJCQlz aXplX3Qgc3JjX29mZnNldCA9IHNyYy0+b2Zmc2V0c1twbGFuZV07Cj4gKwkJCXNpemVfdCBkc3Rf b2Zmc2V0ID0gZHN0LT5vZmZzZXRzW3BsYW5lXTsKPiAgIAo+IC0Jc3JjX2J1ZiA9IGlndF9mYl9t YXBfYnVmZmVyKHNyYy0+ZmQsIHNyYyk7Cj4gLQlpZ3RfYXNzZXJ0KHNyY19idWYpOwo+ICsJCQlz cmNfb2Zmc2V0ICs9IHZjNF9zYW5kX3RpbGVkX29mZnNldChjb2x1bW5fd2lkdGgsCj4gKwkJCQkJ CQkgICAgY29sdW1uX3NpemUsIGosIGksCj4gKwkJCQkJCQkgICAgYnBwKTsKPiArCQkJZHN0X29m ZnNldCArPSBkc3QtPnN0cmlkZXNbcGxhbmVdICogaSArIGogKiBicHAgLyA4Owo+ICAgCj4gLQlk c3RfYnVmID0gaWd0X2ZiX21hcF9idWZmZXIoZHN0LT5mZCwgZHN0KTsKPiAtCWlndF9hc3NlcnQo ZHN0X2J1Zik7Cj4gKwkJCXN3aXRjaCAoYnBwKSB7Cj4gKwkJCWNhc2UgODoKPiArCQkJCSoodWlu dDhfdCAqKShkc3RfYnVmICsgZHN0X29mZnNldCkgPQo+ICsJCQkJCSoodWludDhfdCAqKShzcmNf YnVmICsgc3JjX29mZnNldCk7Cj4gKwkJCQlicmVhazsKPiArCQkJY2FzZSAxNjoKPiArCQkJCSoo dWludDE2X3QgKikoZHN0X2J1ZiArIGRzdF9vZmZzZXQpID0KPiArCQkJCQkqKHVpbnQxNl90ICop KHNyY19idWYgKyBzcmNfb2Zmc2V0KTsKPiArCQkJCWJyZWFrOwo+ICsJCQlkZWZhdWx0Ogo+ICsJ CQkJaWd0X2Fzc2VydChmYWxzZSk7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gK30KPiAgIAo+IC0J Zm9yIChpID0gMDsgaSA8IGRzdC0+bnVtX3BsYW5lczsgaSsrKQo+IC0JCXZjNF9mYl9zYW5kX3Rp bGVkX2NvbnZlcnRfcGxhbmUoZHN0LCBkc3RfYnVmLCBzcmMsIHNyY19idWYsCj4gLQkJCQkJCWNv bHVtbl93aWR0aF9ieXRlcywKPiAtCQkJCQkJY29sdW1uX2hlaWdodCwgaSk7Cj4gK3ZvaWQgdmM0 X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQoc3RydWN0IGlndF9mYiAqZHN0LCB2b2lkICpkc3Rf YnVmLAo+ICsJCQkJICAgICBzdHJ1Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNyY19idWYpCj4gK3sK PiArCXVuc2lnbmVkIGludCBwbGFuZTsKPiAgIAo+IC0JaWd0X2ZiX3VubWFwX2J1ZmZlcihzcmMs IHNyY19idWYpOwo+IC0JaWd0X2ZiX3VubWFwX2J1ZmZlcihkc3QsIGRzdF9idWYpOwo+ICsJaWd0 X2Fzc2VydChzcmMtPm1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUik7Cj4gKwlpZ3Rf YXNzZXJ0KGlndF92YzRfaXNfdGlsZWQoZHN0LT5tb2RpZmllcikpOwo+ICAgCj4gLQlyZXR1cm4g ZmJfaWQ7Cj4gKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBzcmMtPm51bV9wbGFuZXM7IHBsYW5l KyspIHsKPiArCQlpZiAoZHN0LT5tb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9CUk9BRENPTV9W QzRfVF9USUxFRCkKPiArCQkJdmM0X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdF90aWxlZChkc3QsIGRz dF9idWYsIHNyYywgc3JjX2J1ZiwgcGxhbmUpOwo+ICsJCWVsc2UKPiArCQkJdmM0X2ZiX2NvbnZl cnRfcGxhbmVfdG9fc2FuZF90aWxlZChkc3QsIGRzdF9idWYsIHNyYywgc3JjX2J1ZiwgcGxhbmUp Owo+ICsJfQo+ICAgfQo+ICAgCj4gLXNpemVfdCB2YzRfc2FuZF90aWxlZF9vZmZzZXQoc2l6ZV90 IGNvbHVtbl93aWR0aCwgc2l6ZV90IGNvbHVtbl9zaXplLCBzaXplX3QgeCwKPiAtCQkJICAgICBz aXplX3QgeSwgc2l6ZV90IGJwcCkKPiArdm9pZCB2YzRfZmJfY29udmVydF9wbGFuZV9mcm9tX3Rp bGVkKHN0cnVjdCBpZ3RfZmIgKmRzdCwgdm9pZCAqZHN0X2J1ZiwKPiArCQkJCSAgICAgICBzdHJ1 Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNyY19idWYpCj4gICB7Cj4gLQlzaXplX3Qgb2Zmc2V0ID0g MDsKPiAtCXNpemVfdCBjb2xzX3g7Cj4gLQlzaXplX3QgcGl4X3g7Cj4gLQo+IC0JLyogT2Zmc2V0 IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbGV2YW50IGNvbHVtbi4gKi8KPiAtCWNvbHNfeCA9 IHggLyBjb2x1bW5fd2lkdGg7Cj4gLQlvZmZzZXQgKz0gY29sc194ICogY29sdW1uX3NpemU7Cj4g Kwl1bnNpZ25lZCBpbnQgcGxhbmU7Cj4gICAKPiAtCS8qIE9mZnNldCB0byB0aGUgcmVsZXZhbnQg cGl4ZWwuICovCj4gLQlwaXhfeCA9IHggJSBjb2x1bW5fd2lkdGg7Cj4gLQlvZmZzZXQgKz0gKGNv bHVtbl93aWR0aCAqIHkgKyBwaXhfeCkgKiBicHAgLyA4Owo+ICsJaWd0X2Fzc2VydChpZ3RfdmM0 X2lzX3RpbGVkKHNyYy0+bW9kaWZpZXIpKTsKPiArCWlndF9hc3NlcnQoZHN0LT5tb2RpZmllciA9 PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpOwo+ICAgCj4gLQlyZXR1cm4gb2Zmc2V0Owo+ICsJZm9y IChwbGFuZSA9IDA7IHBsYW5lIDwgc3JjLT5udW1fcGxhbmVzOyBwbGFuZSsrKSB7Cj4gKwkJaWYg KHNyYy0+bW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fVkM0X1RfVElMRUQpCj4g KwkJCXZjNF9mYl9jb252ZXJ0X3BsYW5lX2Zyb21fdF90aWxlZChkc3QsIGRzdF9idWYsIHNyYywg c3JjX2J1ZiwgcGxhbmUpOwo+ICsJCWVsc2UKPiArCQkJdmM0X2ZiX2NvbnZlcnRfcGxhbmVfZnJv bV9zYW5kX3RpbGVkKGRzdCwgZHN0X2J1Ziwgc3JjLCBzcmNfYnVmLCBwbGFuZSk7Cj4gKwl9Cj4g ICB9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfdmM0LmggYi9saWIvaWd0X3ZjNC5oCj4gaW5kZXgg YTE3ODEyNjk4ZmU1Li5mMzJiZjM5OGIzZWIgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF92YzQuaAo+ ICsrKyBiL2xpYi9pZ3RfdmM0LmgKPiBAQCAtMjksMTYgKzI5LDE0IEBAIGludCBpZ3RfdmM0X2Ny ZWF0ZV9ibyhpbnQgZmQsIHNpemVfdCBzaXplKTsKPiAgIHZvaWQgKmlndF92YzRfbW1hcF9ibyhp bnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7Cj4g ICBpbnQgaWd0X3ZjNF9nZXRfcGFyYW0oaW50IGZkLCB1aW50MzJfdCBwYXJhbSwgdWludDY0X3Qg KnZhbCk7Cj4gICBib29sIGlndF92YzRfcHVyZ2VhYmxlX2JvKGludCBmZCwgaW50IGhhbmRsZSwg Ym9vbCBwdXJnZWFibGUpOwo+ICtib29sIGlndF92YzRfaXNfdGlsZWQodWludDY0X3QgbW9kaWZp ZXIpOwo+ICAgCj4gICB2b2lkIGlndF92YzRfc2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhh bmRsZSwgdWludDY0X3QgbW9kaWZpZXIpOwo+ICAgdWludDY0X3QgaWd0X3ZjNF9nZXRfdGlsaW5n KGludCBmZCwgdWludDMyX3QgaGFuZGxlKTsKPiAgIAo+IC11bnNpZ25lZCBpbnQgaWd0X3ZjNF9m Yl90X3RpbGVkX2NvbnZlcnQoc3RydWN0IGlndF9mYiAqZHN0LCBzdHJ1Y3QgaWd0X2ZiICpzcmMp Owo+IC1zaXplX3QgaWd0X3ZjNF90X3RpbGVkX29mZnNldChzaXplX3Qgc3RyaWRlLCBzaXplX3Qg aGVpZ2h0LCBzaXplX3QgYnBwLAo+IC0JCQkgICAgICBzaXplX3QgeCwgc2l6ZV90IHkpOwo+IC11 bnNpZ25lZCBpbnQgdmM0X2ZiX3NhbmRfdGlsZWRfY29udmVydChzdHJ1Y3QgaWd0X2ZiICpkc3Qs IHN0cnVjdCBpZ3RfZmIgKnNyYywKPiAtCQkJCSAgICAgICB1aW50NjRfdCBtb2RpZmllcik7Cj4g LXNpemVfdCB2YzRfc2FuZF90aWxlZF9vZmZzZXQoc2l6ZV90IGNvbHVtbl93aWR0aCwgc2l6ZV90 IGNvbHVtbl9zaXplLCBzaXplX3QgeCwKPiAtCQkJICAgICBzaXplX3QgeSwgc2l6ZV90IGJwcCk7 Cj4gK3ZvaWQgdmM0X2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQoc3RydWN0IGlndF9mYiAqZHN0 LCB2b2lkICpkc3RfYnVmLAo+ICsJCQkJICAgICBzdHJ1Y3QgaWd0X2ZiICpzcmMsIHZvaWQgKnNy Y19idWYpOwo+ICt2b2lkIHZjNF9mYl9jb252ZXJ0X3BsYW5lX2Zyb21fdGlsZWQoc3RydWN0IGln dF9mYiAqZHN0LCB2b2lkICpkc3RfYnVmLAo+ICsJCQkJICAgICAgIHN0cnVjdCBpZ3RfZmIgKnNy Yywgdm9pZCAqc3JjX2J1Zik7Cj4gICAKPiAgICNlbmRpZiAvKiBJR1RfVkM0X0ggKi8KPiAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFp bGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==