From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [PATCH v2 9/9] drm/i915: Add render decompression support Date: Wed, 1 Mar 2017 09:50:56 -0800 Message-ID: <20170301175056.GA3045@mail.bwidawsk.net> References: <20170104184232.23048-10-ville.syrjala@linux.intel.com> <20170105151454.12862-1-ville.syrjala@linux.intel.com> <20170228232037.GB7989@mail.bwidawsk.net> <20170301105117.GQ31595@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170301105117.GQ31595@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?utf-8?B?U3lyasOkbMOk?= Cc: Vandana Kannan , intel-gfx@lists.freedesktop.org, Maling list - DRI developers , Chad Versace , Jason Ekstrand , Paulo Zanoni List-Id: dri-devel@lists.freedesktop.org T24gMTctMDMtMDEgMTI6NTE6MTcsIFZpbGxlIFN5cmrDpGzDpCB3cm90ZToKPk9uIFR1ZSwgRmVi IDI4LCAyMDE3IGF0IDAzOjIwOjM4UE0gLTA4MDAsIEJlbiBXaWRhd3NreSB3cm90ZToKPj4gT24g MTctMDItMjggMTI6MTg6MzksIEphc29uIEVrc3RyYW5kIHdyb3RlOgo+PHNuaXA+Cj4+ID5JJ3Zl IHNhaWQgaXQgYmVmb3JlIGJ1dCByZWFkaW5nIHRocm91Z2ggQmVuJ3MgcGF0Y2hlcyBhZ2FpbiBt YWtlIG1lIHdhbnQgdG8KPj4gPmJlIHBlc2tpZXIgYWJvdXQgaXQuICBJIHdvdWxkIHJlYWxseSBs aWtlIHRoZSBVQUJJIHRvIHRyZWF0IHRoZSBDQ1MgYXMgaWYKPj4gPml0J3MgWS10aWxlZCB3aXRo IGEgdGlsZSBzaXplIG9mIDEyOEIgeCAzMiByb3dzLiAgV2h5PyAgQmVjYXVzZSB0aGlzIGlzCj4+ ID53aGF0IGFsbCB0aGUgZG9jcyBzYXkgaXQgaXMuICBGcm9tIHRoZSBkaXNwbGF5IGRvY3MgZm9y ICJDb2xvciBDb250cm9sCj4+ID5TdXJmYWNlIjoKPj4gPgo+PiA+IlRoZSBDb2xvciBDb250cm9s IFN1cmZhY2UgKENDUykgY29udGFpbnMgdGhlIGNvbXByZXNzaW9uIHN0YXR1cyBvZiB0aGUKPj4g PmNhY2hlLWxpbmUgcGFpcnMuIFRoZQo+PiA+Y29tcHJlc3Npb24gc3RhdGUgb2YgdGhlIGNhY2hl LWxpbmUgcGFpciBpcyBzcGVjaWZpZWQgYnkgMiBiaXRzIGluIHRoZSBDQ1MuCj4+ID5FYWNoIEND UyBjYWNoZS1saW5lIHJlcHJlc2VudHMKPj4gPmFuIGFyZWEgb24gdGhlIG1haW4gc3VyZmFjZSBv ZiAxNiB4MTYgc2V0cyBvZiAxMjggYnl0ZSBZLXRpbGVkCj4+ID5jYWNoZS1saW5lLXBhaXJzLiBD Q1MgaXMgYWx3YXlzIFkgdGlsZWQuIgo+PiA+Cj4+ID5UaGlzIGNvbnRhaW5zIDk1JSBvZiB0aGUg aW5mb3JtYXRpb24gbmVlZGVkIHRvIGtub3cgdGhlIHJlbGF0aW9uIGJldHdlZW4KPj4gPnRoZSBD Q1MgYW5kIHRoZSBtYWluIHN1cmZhY2UuICBUaGUgb3RoZXIgNSUgKHdoaWNoIGlzIGJhZGx5IGRv Y3VtZW50ZWQpIGlzCj4+ID50aGF0IGNhY2hlIGxpbmUgcGFpcnMgYXJlIGhvcml6b250YWxseSBh ZGphY2VudC4gIFRoaXMgZ2l2ZXMgYSByZWxhdGlvbnNoaXAKPj4gPm9mIG9uZSBjYWNoZSBsaW5l IGluIHRoZSBDQ1MgbWFwcyB0byAzMng2NCBjYWNoZSBsaW5lcyBpbiB0aGUgbWFpbiBzdXJmYWNl Lgo+PiA+Cj4+ID5CdXQgaXQncyBub3QgYWN0dWFsbHkgWS10aWxlZD8gIE9mIGNvdXJzZSBub3Qu ICBJJ3ZlIHdvcmtlZCBvdXQgdGhlIGV4YWN0Cj4+ID50aWxpbmcgYW5kIGl0IGxvb2tzIHNvbWV0 aGluZyBsaWtlIFkgYnV0IGlzbid0IHF1aXRlIHRoZSBzYW1lLiAgSG93ZXZlciwKPj4gPnRoaXMg aXNuJ3QgdW5pcXVlIHRvIENDUy4gIFN0ZW5jaWwgKFctdGlsZWQpLCBIaVosIGFuZCBnZW43LTgK Pj4gPnNpbmdsZS1zYW1wbGVkIE1DUyBhbHNvIGVhY2ggaGF2ZSB0aGVpciBvd24gdGlsaW5nIChI YXN3ZWxsIE1DUyBpcwo+PiA+ZXNwZWNpYWxseSBleG90aWMpIGJ1dCB0aGUgZG9jcyBjYWxsIGFs bCBvZiB0aGVtIFktdGlsZWQgYW5kIEkgdGhpbmsgdGhlCj4+ID5oYXJkd2FyZSBpbnRlcm5hbGx5 IHRyZWF0cyB0aGVtIGFzIFktdGlsZWQgd2l0aCB0aGUgY2FjaGUgbGluZXMgc2h1ZmZsZWQKPj4g PmFyb3VuZCBhIGJpdC4KPj4gPgo+PiA+R2l2ZW4gdGhlIGZhY3QgdGhhdCB0aGV5IHNlZW0gdG8g bGlrZSB0byBjaGFuZ2UgdGhlIE1DUy9DQ1MgdGlsaW5nIGFyb3VuZAo+PiA+b24gZXZlcnkgaGFy ZHdhcmUgZ2VuZXJhdGlvbiwgSSdtIHJlbHVjdGFudCB0byBiYXNlIFVBQkkgb24gdGhlIGZhY3Qg dGhhdAo+PiA+dGhlIENDUyBhcHBlYXJzIHRvIGhhdmUgNjR4NjQgInBpeGVscyIgcGVyIHRpbGUg d2l0aCBlYWNoICJwaXhlbCIKPj4gPmNvcnJlc3BvbmRpbmcgdG8gMTZ4OCBwaXhlbHMgaW4gdGhl IGNvbG9yIHN1cmZhY2UuICBUaGF0J3Mgbm90IHdoYXQgd2UgaGFkCj4+ID5vbiBhbnkgcHJldmlv dXMgZ2VuIGFuZCBtYXkgY2hhbmdlIG9uIGdlbjEwIGZvciBubyBhcGFyZW50IHJlYXNvbi4gIEkn ZAo+PiA+bXVjaCByYXRoZXIgYmFzZSBpdCBvbiBZLXRpbGluZyBhbmQgYSByZWxhdGlvbnNoaXAg YmV0d2VlbiBjYWNoZSBsaW5lcwo+PiA+d2hpY2gsIGV2ZW4gaWYgdGhleSBjaGFuZ2UgdGhlIGV4 YWN0IHN3aXp6bGUgb24gZ2VuMTAsIHdpbGwgcHJvYmFibHkgcmVtYWluCj4+ID50aGUgc2FtZS4g IChGb3IgdGhlIGdlbjctOCBhbmFsb2d1ZSBvZiBDQ1MsIHRoZXkgY2hhbmdlZCB0aGUgdGlsaW5n IGV2ZXJ5Cj4+ID5nZW5lcmF0aW9uIGJ1dCB0aGUgcmVsYXRpb25zaGlwIG9mIG9uZSBNQ1MgY2Fj aGUgbGluZSBtYXBzIHRvIDMyeDEyOCBjb2xvcgo+PiA+Y2FjaGUgbGluZXMgcmVtYWluZWQgdGhl IHNhbWUpLgo+PiA+Cj4+ID5PaywgSSd2ZSBzYWlkIG15IHBlaWNlLiAgSWYgd2UgaGF2ZSB0byBk aXZpZGUgYnkgMiBpbiB1c2Vyc3BhY2UsIHdlIHdvbid0Cj4+ID5kaWUsIGJ1dCBJJ2QgbGlrZSB0 byBnZXQgdGhlIFVBQkkgcmlnaHQgYmVmb3JlIHdlIGNoaXNzZWwgaXQgaW4gc3RvbmUuCj4+ID4K Pj4gPi0tSmFzb24KPj4gPgo+PiA+Cj4+Cj4+IEkgdm90ZSB3ZSBtYWtlIHRoZSBzdHJpZGUgaW4g dW5pdHMgb2YgdGlsZXMgd2hlbiB3ZSBoYXZlIHRoZSBDQ1MgbW9kaWZpZXIuCj4KPlRoYXQgd29u J3QgZmx5IHdpdGggdGhlIEtNUyBBUEkuIEkgc3VwcG9zZSBJIGNvdWxkIG1ha2UgdGhlIHRpbGUg MTI4IGJ5dGVzCj53aWRlIGJ5IHN3YXBwaW5nIHRoZSAiMSBieXRlID09IDE2eDggcGl4ZWxzIiBu b3Rpb24gd2l0aCBhCj4iMSBieXRlID09IDh4MTYgcGl4ZWxzIiBub3Rpb24uIERvZXNuJ3QgbWF0 Y2ggdGhlIGFjdHVhbCB0cnV0aCBhbnltb3JlLAo+YnV0IEkgZ3Vlc3Mgbm8gb25lIHJlYWxseSBj YXJlcy4KPgoKS01TIEFQSSBnb2VzIHJpZ2h0IG91dCB0aGUgd2luZG93IHdpdGggbW9kaWZpZXJz LiBJc24ndCB0aGF0IHJlYWxseSB0aGUgd2hvbGUKcG9pbnQgb2YgbW9kaWZpZXJzPwoKPj4KPj4g Pj4gKyAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwo+PiA+PiAgICAgICAgIGNhc2Ug STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+PiA+PiAgICAgICAgICAgICAgICAgLyoKPj4gPj4g ICAgICAgICAgICAgICAgICAqIEJzcGVjIHNlZW1zIHRvIHN1Z2dlc3QgdGhhdCB0aGUgWWYgdGls ZSB3aWR0aCB3b3VsZAo+PiA+PiBAQCAtMjE1Niw3ICsyMTY0LDcgQEAgc3RhdGljIHVuc2lnbmVk IGludCBpbnRlbF9zdXJmX2FsaWdubWVudChjb25zdAo+PiA+PiBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKPj4gPj4gICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGZiLT5kZXYpOwo+PiA+Pgo+PiA+PiAgICAgICAgIC8qIEFVWF9ESVNUIG5lZWRz IG9ubHkgNEsgYWxpZ25tZW50ICovCj4+ID4+IC0gICAgICAgaWYgKGZiLT5mb3JtYXQtPmZvcm1h dCA9PSBEUk1fRk9STUFUX05WMTIgJiYgcGxhbmUgPT0gMSkKPj4gPj4gKyAgICAgICBpZiAocGxh bmUgPT0gMSkKPj4gPj4gICAgICAgICAgICAgICAgIHJldHVybiA0MDk2Owo+PiA+Pgo+PiA+PiAg ICAgICAgIHN3aXRjaCAoZmItPm1vZGlmaWVyKSB7Cj4+ID4+IEBAIC0yMTY2LDYgKzIxNzQsOCBA QCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX3N1cmZfYWxpZ25tZW50KGNvbnN0Cj4+ID4+IHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+PiA+PiAgICAgICAgICAgICAgICAgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gOSkKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IDI1NiAqIDEwMjQ7Cj4+ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4gPj4gKyAgICAg ICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPj4gPj4gKyAgICAgICBjYXNlIEk5 MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1M6Cj4+ID4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRDoKPj4gPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZZl9USUxF RDoKPj4gPj4gICAgICAgICAgICAgICAgIHJldHVybiAxICogMTAyNCAqIDEwMjQ7Cj4+ID4+IEBA IC0yNDcyLDYgKzI0ODIsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGludGVsX2ZiX21vZGlmaWVy X3RvX3RpbGluZyh1aW50NjRfdAo+PiA+PiBmYl9tb2RpZmllcikKPj4gPj4gICAgICAgICBjYXNl IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEOgo+PiA+PiAgICAgICAgICAgICAgICAgcmV0dXJuIEk5 MTVfVElMSU5HX1g7Cj4+ID4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRDoK Pj4gPj4gKyAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUzoKPj4gPj4gICAg ICAgICAgICAgICAgIHJldHVybiBJOTE1X1RJTElOR19ZOwo+PiA+PiAgICAgICAgIGRlZmF1bHQ6 Cj4+ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gSTkxNV9USUxJTkdfTk9ORTsKPj4gPj4gQEAg LTI1MzYsNiArMjU0NywzNSBAQCBpbnRlbF9maWxsX2ZiX2luZm8oc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPj4gPj4gKmRldl9wcml2LAo+PiA+Pgo+PiA+PiAgICAgICAgICAgICAgICAgaW50ZWxf ZmJfb2Zmc2V0X3RvX3h5KCZ4LCAmeSwgZmIsIGkpOwo+PiA+Pgo+PiA+PiArICAgICAgICAgICAg ICAgaWYgKChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRURfQ0NTKSAmJiBpID09Cj4+ID4+IDEpIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaW50IG1haW5feCwgbWFpbl95Owo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBp bnQgY2NzX3gsIGNjc195Owo+PiA+PiArCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIC8q Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIEVhY2ggYnl0ZSBvZiBDQ1MgY29ycmVz cG9uZHMgdG8gYSAxNng4IGFyZWEgb2YKPj4gPj4gdGhlIG1haW4gc3VyZmFjZSwgYW5kCj4+ID4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAqIGVhY2ggQ0NTIHRpbGUgaXMgNjR4NjQgYnl0ZXMu Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLwo+PiA+PiArICAgICAgICAgICAgICAg ICAgICAgICBjY3NfeCA9ICh4ICogMTYpICUgKDY0ICogMTYpOwo+PiA+PiArICAgICAgICAgICAg ICAgICAgICAgICBjY3NfeSA9ICh5ICogOCkgJSAoNjQgKiA4KTsKPj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgbWFpbl94ID0gaW50ZWxfZmItPm5vcm1hbFswXS54ICUgKDY0ICogMTYpOwo+ PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBtYWluX3kgPSBpbnRlbF9mYi0+bm9ybWFsWzBd LnkgJSAoNjQgKiA4KTsKPj4gPj4gKwo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAvKgo+ PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgKiBDQ1MgZG9lc24ndCBoYXZlIGl0cyBvd24g eC95IG9mZnNldCByZWdpc3RlciwKPj4gPj4gc28gdGhlIGludHJhIENDUyB0aWxlCj4+ID4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAqIHgveSBvZmZzZXRzIG11c3QgbWF0Y2ggYmV0d2VlbiBD Q1MgYW5kIHRoZSBtYWluCj4+ID4+IHN1cmZhY2UuCj4+ID4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAqLwo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFpbl94ICE9IGNjc194 IHx8IG1haW5feSAhPSBjY3NfeSkgewo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERSTV9ERUJVR19LTVMoIkJhZCBDQ1MgeC95IChtYWluICVkLCVkIGNjcwo+PiA+PiAlZCwl ZCkgZnVsbCAobWFpbiAlZCwlZCBjY3MgJWQsJWQpXG4iLAo+PiA+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl94LCBtYWluX3ksCj4+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY3NfeCwgY2NzX3ksCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbF9m Yi0+bm9ybWFsWzBdLngsCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnRlbF9mYi0+bm9ybWFsWzBdLnksCj4+ID4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5KTsKPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgfQo+PiA+PiArICAgICAgICAgICAgICAgfQo+PiA+PiArCj4+ID4+ICAgICAgICAgICAg ICAgICAvKgo+PiA+PiAgICAgICAgICAgICAgICAgICogVGhlIGZlbmNlIChpZiB1c2VkKSBpcyBh bGlnbmVkIHRvIHRoZSBzdGFydCBvZiB0aGUKPj4gPj4gb2JqZWN0Cj4+ID4+ICAgICAgICAgICAg ICAgICAgKiBzbyBoYXZpbmcgdGhlIGZyYW1lYnVmZmVyIHdyYXAgYXJvdW5kIGFjcm9zcyB0aGUg ZWRnZQo+PiA+PiBvZiB0aGUKPj4gPj4gQEAgLTI4NzMsNiArMjkxMyw5IEBAIHN0YXRpYyBpbnQg c2tsX21heF9wbGFuZV93aWR0aChjb25zdCBzdHJ1Y3QKPj4gPj4gZHJtX2ZyYW1lYnVmZmVyICpm YiwgaW50IHBsYW5lLAo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gPj4g ICAgICAgICAgICAgICAgIH0KPj4gPj4gICAgICAgICAgICAgICAgIGJyZWFrOwo+PiA+PiArICAg ICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+PiA+PiArICAgICAgIGNhc2Ug STkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPj4gPj4gKyAgICAgICAgICAgICAgIC8qIEZJ WE1FIEFVWCBwbGFuZT8gKi8KPj4gPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEOgo+PiA+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+PiA+PiAg ICAgICAgICAgICAgICAgc3dpdGNoIChjcHApIHsKPj4gPj4gQEAgLTI4OTUsNiArMjkzOCw0MiBA QCBzdGF0aWMgaW50IHNrbF9tYXhfcGxhbmVfd2lkdGgoY29uc3Qgc3RydWN0Cj4+ID4+IGRybV9m cmFtZWJ1ZmZlciAqZmIsIGludCBwbGFuZSwKPj4gPj4gICAgICAgICByZXR1cm4gMjA0ODsKPj4g Pj4gIH0KPj4gPj4KPj4gPj4gK3N0YXRpYyBib29sIHNrbF9jaGVja19tYWluX2Njc19jb29yZGlu YXRlcyhzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPj4gPj4gKnBsYW5lX3N0YXRlLAo+PiA+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1haW5feCwgaW50 IG1haW5feSwgdTMyCj4+ID4+IG1haW5fb2Zmc2V0KQo+PiA+PiArewo+PiA+PiArICAgICAgIGNv bnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4+ ID4+ICsgICAgICAgaW50IGF1eF94ID0gcGxhbmVfc3RhdGUtPmF1eC54Owo+PiA+PiArICAgICAg IGludCBhdXhfeSA9IHBsYW5lX3N0YXRlLT5hdXgueTsKPj4gPj4gKyAgICAgICB1MzIgYXV4X29m ZnNldCA9IHBsYW5lX3N0YXRlLT5hdXgub2Zmc2V0Owo+PiA+PiArICAgICAgIHUzMiBhbGlnbm1l bnQgPSBpbnRlbF9zdXJmX2FsaWdubWVudChmYiwgMSk7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICB3 aGlsZSAoYXV4X29mZnNldCA+PSBtYWluX29mZnNldCAmJiBhdXhfeSA8PSBtYWluX3kpIHsKPj4g Pj4gKyAgICAgICAgICAgICAgIGludCB4LCB5Owo+PiA+PiArCj4+ID4+ICsgICAgICAgICAgICAg ICBpZiAoYXV4X3ggPT0gbWFpbl94ICYmIGF1eF95ID09IG1haW5feSkKPj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgICAgICAgIGlmIChh dXhfb2Zmc2V0ID09IDApCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+PiA+ PiArCj4+ID4+ICsgICAgICAgICAgICAgICB4ID0gYXV4X3ggLyAxNjsKPj4gPj4gKyAgICAgICAg ICAgICAgIHkgPSBhdXhfeSAvIDg7Cj4+ID4+ICsgICAgICAgICAgICAgICBhdXhfb2Zmc2V0ID0g aW50ZWxfYWRqdXN0X3RpbGVfb2Zmc2V0KCZ4LCAmeSwgcGxhbmVfc3RhdGUsCj4+ID4+IDEsCj4+ ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF1eF9vZmZzZXQsCj4+ID4+IGF1eF9vZmZzZXQgLSBhbGlnbm1lbnQpOwo+PiA+PiArICAgICAg ICAgICAgICAgYXV4X3ggPSB4ICogMTYgKyBhdXhfeCAlIDE2Owo+PiA+PiArICAgICAgICAgICAg ICAgYXV4X3kgPSB5ICogOCArIGF1eF95ICUgODsKPj4gPj4gKyAgICAgICB9Cj4+ID4+ICsKPj4g Pj4gKyAgICAgICBpZiAoYXV4X3ggIT0gbWFpbl94IHx8IGF1eF95ICE9IG1haW5feSkKPj4gPj4g KyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPj4gPj4gKwo+PiA+PiArICAgICAgIHBsYW5l X3N0YXRlLT5hdXgub2Zmc2V0ID0gYXV4X29mZnNldDsKPj4gPj4gKyAgICAgICBwbGFuZV9zdGF0 ZS0+YXV4LnggPSBhdXhfeDsKPj4gPj4gKyAgICAgICBwbGFuZV9zdGF0ZS0+YXV4LnkgPSBhdXhf eTsKPj4gPj4gKwo+PiA+PiArICAgICAgIHJldHVybiB0cnVlOwo+PiA+PiArfQo+PiA+PiArCj4+ ID4+ICBzdGF0aWMgaW50IHNrbF9jaGVja19tYWluX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gPj4gIHsKPj4gPj4gICAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5iYXNlLmZiOwo+PiA+PiBAQCAtMjkz Nyw3ICszMDE2LDcgQEAgc3RhdGljIGludCBza2xfY2hlY2tfbWFpbl9zdXJmYWNlKHN0cnVjdAo+ PiA+PiBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ID4+Cj4+ID4+ICAgICAgICAg ICAgICAgICB3aGlsZSAoKHggKyB3KSAqIGNwcCA+IGZiLT5waXRjaGVzWzBdKSB7Cj4+ID4+ICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gMCkgewo+PiA+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRh YmxlCj4+ID4+IGRpc3BsYXkgc3VyZmFjZSBvZmZzZXRcbiIpOwo+PiA+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoIlVuYWJsZSB0byBmaW5kIHN1aXRhYmxl Cj4+ID4+IGRpc3BsYXkgc3VyZmFjZSBvZmZzZXQgZHVlIHRvIFgtdGlsaW5nXG4iKTsKPj4gPj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gPj4gICAg ICAgICAgICAgICAgICAgICAgICAgfQo+PiA+Pgo+PiA+PiBAQCAtMjk0Niw2ICszMDI1LDI2IEBA IHN0YXRpYyBpbnQgc2tsX2NoZWNrX21haW5fc3VyZmFjZShzdHJ1Y3QKPj4gPj4gaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQo+PiA+PiAgICAgICAgICAgICAgICAgfQo+PiA+PiAgICAg ICAgIH0KPj4gPj4KPj4gPj4gKyAgICAgICAvKgo+PiA+PiArICAgICAgICAqIENDUyBBVVggc3Vy ZmFjZSBkb2Vzbid0IGhhdmUgaXRzIG93biB4L3kgb2Zmc2V0cywgd2UgbXVzdCBtYWtlCj4+ID4+ IHN1cmUKPj4gPj4gKyAgICAgICAgKiB0aGV5IG1hdGNoIHdpdGggdGhlIG1haW4gc3VyZmFjZSB4 L3kgb2Zmc2V0cy4KPj4gPj4gKyAgICAgICAgKi8KPj4gPj4gKyAgICAgICBpZiAoZmItPm1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+PiA+PiArICAgICAgICAgICBm Yi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykgewo+PiA+PiArICAg ICAgICAgICAgICAgd2hpbGUgKCFza2xfY2hlY2tfbWFpbl9jY3NfY29vcmRpbmF0ZXMocGxhbmVf c3RhdGUsIHgsIHksCj4+ID4+IG9mZnNldCkpIHsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG9mZnNldCA9PSAwKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOwo+PiA+PiArCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGlu dGVsX2FkanVzdF90aWxlX29mZnNldCgmeCwgJnksCj4+ID4+IHBsYW5lX3N0YXRlLCAwLAo+PiA+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgb2Zmc2V0LCBvZmZzZXQgLQo+PiA+PiBhbGlnbm1lbnQpOwo+PiA+PiArICAgICAgICAgICAg ICAgfQo+PiA+PiArCj4+ID4+ICsgICAgICAgICAgICAgICBpZiAoeCAhPSBwbGFuZV9zdGF0ZS0+ YXV4LnggfHwgeSAhPSBwbGFuZV9zdGF0ZS0+YXV4LnkpIHsKPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgRFJNX0RFQlVHX0tNUygiVW5hYmxlIHRvIGZpbmQgc3VpdGFibGUgZGlzcGxheQo+ PiA+PiBzdXJmYWNlIG9mZnNldCBkdWUgdG8gQ0NTXG4iKTsKPj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsgICAgICAgICAgICAgICB9Cj4+ID4+ICsg ICAgICAgfQo+PiA+PiArCj4+ID4+ICAgICAgICAgcGxhbmVfc3RhdGUtPm1haW4ub2Zmc2V0ID0g b2Zmc2V0Owo+PiA+PiAgICAgICAgIHBsYW5lX3N0YXRlLT5tYWluLnggPSB4Owo+PiA+PiAgICAg ICAgIHBsYW5lX3N0YXRlLT5tYWluLnkgPSB5Owo+PiA+PiBAQCAtMjk4Miw2ICszMDgxLDQ3IEBA IHN0YXRpYyBpbnQgc2tsX2NoZWNrX252MTJfYXV4X3N1cmZhY2Uoc3RydWN0Cj4+ID4+IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gPj4gICAgICAgICByZXR1cm4gMDsKPj4gPj4g IH0KPj4gPj4KPj4gPj4gK3N0YXRpYyBpbnQgc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUKPj4gPj4gKnBsYW5lX3N0YXRlKQo+PiA+PiArewo+PiA+PiAr ICAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9z dGF0ZS0+Cj4+ID4+IGJhc2UucGxhbmUpOwo+PiA+PiArICAgICAgIHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhwbGFuZV9zdGF0ZS0+YmFzZS5jcnRjKTsKPj4gPj4gKyAg ICAgICBpbnQgc3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmMueDEgPj4gMTY7Cj4+ID4+ICsg ICAgICAgaW50IHNyY195ID0gcGxhbmVfc3RhdGUtPmJhc2Uuc3JjLnkxID4+IDE2Owo+PiA+PiAr ICAgICAgIGludCB4ID0gc3JjX3ggLyAxNjsKPj4gPj4gKyAgICAgICBpbnQgeSA9IHNyY195IC8g ODsKPj4gPj4gKyAgICAgICB1MzIgb2Zmc2V0Owo+PiA+PiArCj4+ID4+ICsgICAgICAgc3dpdGNo IChwbGFuZS0+aWQpIHsKPj4gPj4gKyAgICAgICBjYXNlIFBMQU5FX1BSSU1BUlk6Cj4+ID4+ICsg ICAgICAgY2FzZSBQTEFORV9TUFJJVEUwOgo+PiA+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+ ID4+ICsgICAgICAgZGVmYXVsdDoKPj4gPj4gKyAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMo IlJDIHN1cHBvcnQgb25seSBvbiBwbGFuZSAxIGFuZCAyXG4iKTsKPj4gPj4gKyAgICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOwo+PiA+PiArICAgICAgIH0KPj4gPj4gKwo+PiA+PiArICAgICAg IGlmIChjcnRjLT5waXBlID09IFBJUEVfQykgewo+PiA+PiArICAgICAgICAgICAgICAgRFJNX0RF QlVHX0tNUygiTm8gUkMgc3VwcG9ydCBvbiBwaXBlIENcbiIpOwo+PiA+PiArICAgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsgICAgICAgfQo+PiA+PiArCj4+ID4+ICsgICAgICAg aWYgKHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9uICYmCj4+ID4+ICsgICAgICAgICAgIHBsYW5l X3N0YXRlLT5iYXNlLnJvdGF0aW9uICYgfihEUk1fUk9UQVRFXzAgfCBEUk1fUk9UQVRFXzE4MCkp Cj4+ID4+IHsKPj4gPj4gKyAgICAgICAgICAgICAgIERSTV9ERUJVR19LTVMoIlJDIHN1cHBvcnQg b25seSB3aXRoIDAvMTgwIGRlZ3JlZSByb3RhdGlvbgo+PiA+PiAleFxuIiwKPj4gPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb24pOwo+PiA+ PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsgICAgICAgfQo+PiA+PiAr Cj4+ID4+ICsgICAgICAgaW50ZWxfYWRkX2ZiX29mZnNldHMoJngsICZ5LCBwbGFuZV9zdGF0ZSwg MSk7Cj4+ID4+ICsgICAgICAgb2Zmc2V0ID0gaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwg JnksIHBsYW5lX3N0YXRlLCAxKTsKPj4gPj4gKwo+PiA+PiArICAgICAgIHBsYW5lX3N0YXRlLT5h dXgub2Zmc2V0ID0gb2Zmc2V0Owo+PiA+PiArICAgICAgIHBsYW5lX3N0YXRlLT5hdXgueCA9IHgg KiAxNiArIHNyY194ICUgMTY7Cj4+ID4+ICsgICAgICAgcGxhbmVfc3RhdGUtPmF1eC55ID0geSAq IDggKyBzcmNfeSAlIDg7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICByZXR1cm4gMDsKPj4gPj4gK30K Pj4gPj4gKwo+PiA+PiAgaW50IHNrbF9jaGVja19wbGFuZV9zdXJmYWNlKHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCj4+ID4+ICB7Cj4+ID4+ICAgICAgICAgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPj4gPj4gQEAg LTMwMDIsNiArMzE0MiwxMSBAQCBpbnQgc2tsX2NoZWNrX3BsYW5lX3N1cmZhY2Uoc3RydWN0Cj4+ ID4+IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPj4gPj4gICAgICAgICAgICAgICAg IHJldCA9IHNrbF9jaGVja19udjEyX2F1eF9zdXJmYWNlKHBsYW5lX3N0YXRlKTsKPj4gPj4gICAg ICAgICAgICAgICAgIGlmIChyZXQpCj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4+ID4+ICsgICAgICAgfSBlbHNlIGlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JN QVRfTU9EX1lfVElMRURfQ0NTIHx8Cj4+ID4+ICsgICAgICAgICAgICAgICAgICBmYi0+bW9kaWZp ZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUykgewo+PiA+PiArICAgICAgICAgICAg ICAgcmV0ID0gc2tsX2NoZWNrX2Njc19hdXhfc3VyZmFjZShwbGFuZV9zdGF0ZSk7Cj4+ID4+ICsg ICAgICAgICAgICAgICBpZiAocmV0KQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcmV0Owo+PiA+PiAgICAgICAgIH0gZWxzZSB7Cj4+ID4+ICAgICAgICAgICAgICAgICBwbGFu ZV9zdGF0ZS0+YXV4Lm9mZnNldCA9IH4weGZmZjsKPj4gPj4gICAgICAgICAgICAgICAgIHBsYW5l X3N0YXRlLT5hdXgueCA9IDA7Cj4+ID4+IEBAIC0zMzU3LDggKzM1MDIsMTIgQEAgdTMyIHNrbF9w bGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlmaWVyKQo+PiA+PiAgICAgICAgICAgICAg ICAgcmV0dXJuIFBMQU5FX0NUTF9USUxFRF9YOwo+PiA+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQ6Cj4+ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gUExBTkVfQ1RMX1RJ TEVEX1k7Cj4+ID4+ICsgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M6Cj4+ ID4+ICsgICAgICAgICAgICAgICByZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1kgfCBQTEFORV9DVExf REVDT01QUkVTU0lPTl9FTkFCTEU7Cj4+ID4+ICAgICAgICAgY2FzZSBJOTE1X0ZPUk1BVF9NT0Rf WWZfVElMRUQ6Cj4+ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gUExBTkVfQ1RMX1RJTEVEX1lG Owo+PiA+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPj4gPj4g KyAgICAgICAgICAgICAgIHJldHVybiBQTEFORV9DVExfVElMRURfWUYgfCBQTEFORV9DVExfREVD T01QUkVTU0lPTl8KPj4gPj4gRU5BQkxFOwo+PiA+PiAgICAgICAgIGRlZmF1bHQ6Cj4+ID4+ICAg ICAgICAgICAgICAgICBNSVNTSU5HX0NBU0UoZmJfbW9kaWZpZXIpOwo+PiA+PiAgICAgICAgIH0K Pj4gPj4gQEAgLTM0MDEsNiArMzU1MCw3IEBAIHN0YXRpYyB2b2lkIHNreWxha2VfdXBkYXRlX3By aW1hcnlfcGxhbmUoc3RydWN0Cj4+ID4+IGRybV9wbGFuZSAqcGxhbmUsCj4+ID4+ICAgICAgICAg dTMyIHBsYW5lX2N0bDsKPj4gPj4gICAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFu ZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbjsKPj4gPj4gICAgICAgICB1MzIgc3RyaWRlID0gc2tsX3Bs YW5lX3N0cmlkZShmYiwgMCwgcm90YXRpb24pOwo+PiA+PiArICAgICAgIHUzMiBhdXhfc3RyaWRl ID0gc2tsX3BsYW5lX3N0cmlkZShmYiwgMSwgcm90YXRpb24pOwo+PiA+PiAgICAgICAgIHUzMiBz dXJmX2FkZHIgPSBwbGFuZV9zdGF0ZS0+bWFpbi5vZmZzZXQ7Cj4+ID4+ICAgICAgICAgaW50IHNj YWxlcl9pZCA9IHBsYW5lX3N0YXRlLT5zY2FsZXJfaWQ7Cj4+ID4+ICAgICAgICAgaW50IHNyY194 ID0gcGxhbmVfc3RhdGUtPm1haW4ueDsKPj4gPj4gQEAgLTM0MzYsNiArMzU4NiwxMCBAQCBzdGF0 aWMgdm9pZCBza3lsYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdAo+PiA+PiBkcm1fcGxh bmUgKnBsYW5lLAo+PiA+PiAgICAgICAgIEk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBs YW5lX2lkKSwgKHNyY195IDw8IDE2KSB8IHNyY194KTsKPj4gPj4gICAgICAgICBJOTE1X1dSSVRF KFBMQU5FX1NUUklERShwaXBlLCBwbGFuZV9pZCksIHN0cmlkZSk7Cj4+ID4+ICAgICAgICAgSTkx NV9XUklURShQTEFORV9TSVpFKHBpcGUsIHBsYW5lX2lkKSwgKHNyY19oIDw8IDE2KSB8IHNyY193 KTsKPj4gPj4gKyAgICAgICBJOTE1X1dSSVRFKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lk KSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgIChwbGFuZV9zdGF0ZS0+YXV4Lm9mZnNldCAtIHN1 cmZfYWRkcikgfCBhdXhfc3RyaWRlKTsKPj4gPj4gKyAgICAgICBJOTE1X1dSSVRFKFBMQU5FX0FV WF9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAo+PiA+PiArICAgICAgICAgICAgICAgICAgKHBsYW5l X3N0YXRlLT5hdXgueSA8PCAxNikgfCBwbGFuZV9zdGF0ZS0+YXV4LngpOwo+PiA+Pgo+PiA+PiAg ICAgICAgIGlmIChzY2FsZXJfaWQgPj0gMCkgewo+PiA+PiAgICAgICAgICAgICAgICAgdWludDMy X3QgcHNfY3RybCA9IDA7Cj4+ID4+IEBAIC05ODA3LDEwICs5OTYxLDE2IEBAIHNreWxha2VfZ2V0 X2luaXRpYWxfcGxhbmVfY29uZmlnKHN0cnVjdAo+PiA+PiBpbnRlbF9jcnRjICpjcnRjLAo+PiA+ PiAgICAgICAgICAgICAgICAgZmItPm1vZGlmaWVyID0gSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQ7 Cj4+ID4+ICAgICAgICAgICAgICAgICBicmVhazsKPj4gPj4gICAgICAgICBjYXNlIFBMQU5FX0NU TF9USUxFRF9ZOgo+PiA+PiAtICAgICAgICAgICAgICAgZmItPm1vZGlmaWVyID0gSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQ7Cj4+ID4+ICsgICAgICAgICAgICAgICBpZiAodmFsICYgUExBTkVfQ1RM X0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBmYi0+ bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1M7Cj4+ID4+ICsgICAgICAgICAg ICAgICBlbHNlCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9IEk5 MTVfRk9STUFUX01PRF9ZX1RJTEVEOwo+PiA+PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4+ ICAgICAgICAgY2FzZSBQTEFORV9DVExfVElMRURfWUY6Cj4+ID4+IC0gICAgICAgICAgICAgICBm Yi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7Cj4+ID4+ICsgICAgICAgICAg ICAgICBpZiAodmFsICYgUExBTkVfQ1RMX0RFQ09NUFJFU1NJT05fRU5BQkxFKQo+PiA+PiArICAg ICAgICAgICAgICAgICAgICAgICBmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElM RURfQ0NTOwo+PiA+PiArICAgICAgICAgICAgICAgZWxzZQo+PiA+PiArICAgICAgICAgICAgICAg ICAgICAgICBmYi0+bW9kaWZpZXIgPSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7Cj4+ID4+ICAg ICAgICAgICAgICAgICBicmVhazsKPj4gPj4gICAgICAgICBkZWZhdWx0Ogo+PiA+PiAgICAgICAg ICAgICAgICAgTUlTU0lOR19DQVNFKHRpbGluZyk7Cj4+ID4+IEBAIC0xMjAxNCw3ICsxMjE3NCw3 IEBAIHN0YXRpYyB2b2lkIHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMKPj4gPj4g KmludGVsX2NydGMsCj4+ID4+ICAgICAgICAgdTMyIGN0bCwgc3RyaWRlID0gc2tsX3BsYW5lX3N0 cmlkZShmYiwgMCwgcm90YXRpb24pOwo+PiA+Pgo+PiA+PiAgICAgICAgIGN0bCA9IEk5MTVfUkVB RChQTEFORV9DVEwocGlwZSwgMCkpOwo+PiA+PiAtICAgICAgIGN0bCAmPSB+UExBTkVfQ1RMX1RJ TEVEX01BU0s7Cj4+ID4+ICsgICAgICAgY3RsICY9IH4oUExBTkVfQ1RMX1RJTEVEX01BU0sgfCBQ TEFORV9DVExfREVDT01QUkVTU0lPTl9FTkFCTEUpOwo+PiA+PiAgICAgICAgIHN3aXRjaCAoZmIt Pm1vZGlmaWVyKSB7Cj4+ID4+ICAgICAgICAgY2FzZSBEUk1fRk9STUFUX01PRF9OT05FOgo+PiA+ PiAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+ID4+IEBAIC0xMjAyNCw5ICsxMjE4NCwxNSBAQCBz dGF0aWMgdm9pZCBza2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjCj4+ID4+ICppbnRl bF9jcnRjLAo+PiA+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRUQ6Cj4+ID4+ ICAgICAgICAgICAgICAgICBjdGwgfD0gUExBTkVfQ1RMX1RJTEVEX1k7Cj4+ID4+ICAgICAgICAg ICAgICAgICBicmVhazsKPj4gPj4gKyAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVE X0NDUzoKPj4gPj4gKyAgICAgICAgICAgICAgIGN0bCB8PSBQTEFORV9DVExfVElMRURfWSB8IFBM QU5FX0NUTF9ERUNPTVBSRVNTSU9OX0VOQUJMRTsKPj4gPj4gKyAgICAgICAgICAgICAgIGJyZWFr Owo+PiA+PiAgICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+PiA+PiAgICAg ICAgICAgICAgICAgY3RsIHw9IFBMQU5FX0NUTF9USUxFRF9ZRjsKPj4gPj4gICAgICAgICAgICAg ICAgIGJyZWFrOwo+PiA+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0ND UzoKPj4gPj4gKyAgICAgICAgICAgICAgIGN0bCB8PSBQTEFORV9DVExfVElMRURfWUYgfCBQTEFO RV9DVExfREVDT01QUkVTU0lPTl8KPj4gPj4gRU5BQkxFOwo+PiA+PiArICAgICAgICAgICAgICAg YnJlYWs7Cj4+ID4+ICAgICAgICAgZGVmYXVsdDoKPj4gPj4gICAgICAgICAgICAgICAgIE1JU1NJ TkdfQ0FTRShmYi0+bW9kaWZpZXIpOwo+PiA+PiAgICAgICAgIH0KPj4gPj4gQEAgLTE1OTI1LDkg KzE2MDkxLDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfZnJhbWVidWZmZXJfaW5pdChzdHJ1Y3QKPj4g Pj4gZHJtX2RldmljZSAqZGV2LAo+PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4gPj4gIHsKPj4gPj4gICAgICAg ICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4+ID4+ ICsgICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSAmaW50ZWxfZmItPmJhc2U7Cj4+ ID4+ICAgICAgICAgdW5zaWduZWQgaW50IHRpbGluZyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfdGls aW5nKG9iaik7Cj4+ID4+IC0gICAgICAgaW50IHJldDsKPj4gPj4gLSAgICAgICB1MzIgcGl0Y2hf bGltaXQsIHN0cmlkZV9hbGlnbm1lbnQ7Cj4+ID4+ICsgICAgICAgaW50IHJldCwgaTsKPj4gPj4g KyAgICAgICB1MzIgcGl0Y2hfbGltaXQ7Cj4+ID4+ICAgICAgICAgc3RydWN0IGRybV9mb3JtYXRf bmFtZV9idWYgZm9ybWF0X25hbWU7Cj4+ID4+Cj4+ID4+ICAgICAgICAgV0FSTl9PTighbXV0ZXhf aXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+PiA+PiBAQCAtMTU5NTMsNiArMTYxMjAs MTkgQEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdAo+PiA+PiBkcm1f ZGV2aWNlICpkZXYsCj4+ID4+Cj4+ID4+ICAgICAgICAgLyogUGFzc2VkIGluIG1vZGlmaWVyIHNh bml0eSBjaGVja2luZy4gKi8KPj4gPj4gICAgICAgICBzd2l0Y2ggKG1vZGVfY21kLT5tb2RpZmll clswXSkgewo+PiA+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURfQ0NTOgo+ PiA+PiArICAgICAgIGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUzoKPj4gPj4gKyAg ICAgICAgICAgICAgIHN3aXRjaCAobW9kZV9jbWQtPnBpeGVsX2Zvcm1hdCkgewo+PiA+PiArICAg ICAgICAgICAgICAgY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogo+PiA+PiArICAgICAgICAgICAg ICAgY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4Ogo+PiA+PiArICAgICAgICAgICAgICAgY2FzZSBE Uk1fRk9STUFUX1hSR0I4ODg4Ogo+PiA+PiArICAgICAgICAgICAgICAgY2FzZSBEUk1fRk9STUFU X0FSR0I4ODg4Ogo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4gPj4gKyAg ICAgICAgICAgICAgIGRlZmF1bHQ6Cj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9E RUJVR19LTVMoIlJDIHN1cHBvcnRlZCBvbmx5IHdpdGggUkdCODg4OAo+PiA+PiBmb3JtYXRzXG4i KTsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsg ICAgICAgICAgICAgICB9Cj4+ID4+ICsgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8K Pj4gPj4gICAgICAgICBjYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgo+PiA+PiAgICAgICAg IGNhc2UgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEOgo+PiA+PiAgICAgICAgICAgICAgICAgaWYg KElOVEVMX0dFTihkZXZfcHJpdikgPCA5KSB7Cj4+ID4+IEBAIC0xNjA1OSwyMiArMTYyMzksNDYg QEAgc3RhdGljIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdAo+PiA+PiBkcm1fZGV2 aWNlICpkZXYsCj4+ID4+ICAgICAgICAgaWYgKG1vZGVfY21kLT5vZmZzZXRzWzBdICE9IDApCj4+ ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gPj4KPj4gPj4gLSAgICAgICBk cm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCAmaW50ZWxfZmItPmJhc2UsIG1vZGVf Y21kKTsKPj4gPj4gKyAgICAgICBkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoZGV2LCBm YiwgbW9kZV9jbWQpOwo+PiA+Pgo+PiA+PiAtICAgICAgIHN0cmlkZV9hbGlnbm1lbnQgPSBpbnRl bF9mYl9zdHJpZGVfYWxpZ25tZW50KCZpbnRlbF9mYi0+YmFzZSwgMCk7Cj4+ID4+IC0gICAgICAg aWYgKG1vZGVfY21kLT5waXRjaGVzWzBdICYgKHN0cmlkZV9hbGlnbm1lbnQgLSAxKSkgewo+PiA+ PiAtICAgICAgICAgICAgICAgRFJNX0RFQlVHX0tNUygicGl0Y2ggKCVkKSBtdXN0IGJlIGF0IGxl YXN0ICV1IGJ5dGUKPj4gPj4gYWxpZ25lZFxuIiwKPj4gPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbW9kZV9jbWQtPnBpdGNoZXNbMF0sIHN0cmlkZV9hbGlnbm1lbnQpOwo+PiA+PiAt ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsgICAgICAgZm9yIChpID0gMDsg aSA8IGZiLT5mb3JtYXQtPm51bV9wbGFuZXM7IGkrKykgewo+PiA+PiArICAgICAgICAgICAgICAg dTMyIHN0cmlkZV9hbGlnbm1lbnQ7Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgICAgICAgIGlmICht b2RlX2NtZC0+aGFuZGxlc1tpXSAhPSBtb2RlX2NtZC0+aGFuZGxlc1swXSkgewo+PiA+PiArICAg ICAgICAgICAgICAgICAgICAgICBEUk1fREVCVUdfS01TKCJiYWQgcGxhbmUgJWQgaGFuZGxlXG4i LCBpKTsKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ ICsgICAgICAgICAgICAgICB9Cj4+ID4+ICsKPj4gPj4gKyAgICAgICAgICAgICAgIHN0cmlkZV9h bGlnbm1lbnQgPSBpbnRlbF9mYl9zdHJpZGVfYWxpZ25tZW50KGZiLCBpKTsKPj4gPj4gKwo+PiA+ PiArICAgICAgICAgICAgICAgLyoKPj4gPj4gKyAgICAgICAgICAgICAgICAqIERpc3BsYXkgV0Eg IzA1MzE6IHNrbCxieHQsa2JsLGdsawo+PiA+PiArICAgICAgICAgICAgICAgICoKPj4gPj4gKyAg ICAgICAgICAgICAgICAqIFJlbmRlciBkZWNvbXByZXNzaW9uIGFuZCBwbGFuZSB3aWR0aCA+IDM4 NDAKPj4gPj4gKyAgICAgICAgICAgICAgICAqIGNvbWJpbmVkIHdpdGggaG9yaXpvbnRhbCBwYW5u aW5nIHJlcXVpcmVzIHRoZQo+PiA+PiArICAgICAgICAgICAgICAgICogcGxhbmUgc3RyaWRlIHRv IGJlIGEgbXVsdGlwbGUgb2YgNC4gV2UnbGwganVzdAo+PiA+PiArICAgICAgICAgICAgICAgICog cmVxdWlyZSB0aGUgZW50aXJlIGZiIHRvIGFjY29tbW9kYXRlIHRoYXQgdG8gYXZvaWQKPj4gPj4g KyAgICAgICAgICAgICAgICAqIHBvdGVudGlhbCBydW50aW1lIGVycm9ycyBhdCBwbGFuZSBjb25m aWd1cmF0aW9uIHRpbWUuCj4+ID4+Cj4+ID4KPj4gPk5vdGUgdG8gQmVuOiBVc2Vyc3BhY2UgbmVl ZHMgdG8ga25vdyBhYm91dCB0aGlzIHRvby4gIEluIHRoaXMgY2FzZSwgSQo+PiA+YmVsaWV2ZSAi bXVsdGlwbGUgb2YgNCIgbWVhbnMgIm11bHRpcGxlIG9mIDQgdGlsZXMiLiAgWW91J3ZlIG5ldmVy IGhpdCB0aGlzCj4+ID5iZWNhdXNlIHRoZSBzdGFuZGFyZCAxOTIweDEwODAgaXMgNjAgdGlsZXMg d2lkZSB3aGljaCBpcyBhIG11bHRpcGxlIG9mIDQuCj4+ID4KPj4gPgo+PiA+PiArICAgICAgICAg ICAgICAgICovCj4+ID4+ICsgICAgICAgICAgICAgICBpZiAoSVNfR0VOOShkZXZfcHJpdikgJiYg aSA9PSAwICYmIGZiLT53aWR0aCA+IDM4NDAgJiYKPj4gPj4gKyAgICAgICAgICAgICAgICAgICAo ZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+PiA+PiArICAg ICAgICAgICAgICAgICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVE X0NDUykpCj4+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZV9hbGlnbm1lbnQgKj0g NDsKPj4gPj4gKwo+PiA+PiArICAgICAgICAgICAgICAgaWYgKGZiLT5waXRjaGVzW2ldICYgKHN0 cmlkZV9hbGlnbm1lbnQgLSAxKSkgewo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICBEUk1f REVCVUdfS01TKCJwbGFuZSAlZCBwaXRjaCAoJWQpIG11c3QgYmUgYXQKPj4gPj4gbGVhc3QgJXUg Ynl0ZSBhbGlnbmVkXG4iLAo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGksIGZiLT5waXRjaGVzW2ldLCBzdHJpZGVfYWxpZ25tZW50KTsKPj4gPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ID4+ICsgICAgICAgICAgICAgICB9Cj4+ ID4+ICAgICAgICAgfQo+PiA+Pgo+PiA+PiAgICAgICAgIGludGVsX2ZiLT5vYmogPSBvYmo7Cj4+ ID4+Cj4+ID4+IC0gICAgICAgcmV0ID0gaW50ZWxfZmlsbF9mYl9pbmZvKGRldl9wcml2LCAmaW50 ZWxfZmItPmJhc2UpOwo+PiA+PiArICAgICAgIHJldCA9IGludGVsX2ZpbGxfZmJfaW5mbyhkZXZf cHJpdiwgZmIpOwo+PiA+PiAgICAgICAgIGlmIChyZXQpCj4+ID4+ICAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+PiA+Pgo+PiA+PiAtICAgICAgIHJldCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0 KGRldiwgJmludGVsX2ZiLT5iYXNlLCAmaW50ZWxfZmJfZnVuY3MpOwo+PiA+PiArICAgICAgIHJl dCA9IGRybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgZmIsICZpbnRlbF9mYl9mdW5jcyk7Cj4+ID4+ ICAgICAgICAgaWYgKHJldCkgewo+PiA+PiAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJmcmFt ZWJ1ZmZlciBpbml0IGZhaWxlZCAlZFxuIiwgcmV0KTsKPj4gPj4gICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7Cj4+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9w bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfCj4+ID4+IHBtLmMKPj4gPj4gaW5kZXgg MjQ5NjIzZDQ1YmUwLi4yNTc4MmNkMTc0YzAgMTAwNjQ0Cj4+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMKPj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcG0uYwo+PiA+PiBAQCAtNjIsNiArNjIsMjAgQEAgc3RhdGljIHZvaWQgZ2VuOV9pbml0X2Ns b2NrX2dhdGluZyhzdHJ1Y3QKPj4gPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+ID4+ ICAgICAgICAgSTkxNV9XUklURShDSElDS0VOX1BBUjFfMSwKPj4gPj4gICAgICAgICAgICAgICAg ICAgIEk5MTVfUkVBRChDSElDS0VOX1BBUjFfMSkgfCBTS0xfRURQX1BTUl9GSVhfUkRXUkFQKTsK Pj4gPj4KPj4gPj4gKyAgICAgICAvKgo+PiA+PiArICAgICAgICAqIERpc3BsYXkgV0EjMDM5MDog c2tsLGJ4dCxrYmwsZ2xrCj4+ID4+ICsgICAgICAgICoKPj4gPj4gKyAgICAgICAgKiBNdXN0IG1h dGNoIFNhbXBsZXIsIFBpeGVsIEJhY2sgRW5kLCBhbmQgTWVkaWEKPj4gPj4gKyAgICAgICAgKiAo MHhFMTk0IGJpdCA4LCAweDcwMTQgYml0IDEzLCAweDREREMgYml0cyAyNyBhbmQgMzEpLgo+PiA+ PiArICAgICAgICAqCj4+ID4+ICsgICAgICAgICogSW5jbHVkaW5nIGJpdHMgb3V0c2lkZSB0aGUg cGFnZSBpbiB0aGUgaGFzaCB3b3VsZAo+PiA+PiArICAgICAgICAqIHJlcXVpcmUgMiAob3IgND8p IE1pQiBhbGlnbm1lbnQgb2YgcmVzb3VyY2VzLiBKdXN0Cj4+ID4+ICsgICAgICAgICogYXNzdW1l IHRoZSBkZWZhdWwgaGFzaGluZyBtb2RlIHdoaWNoIG9ubHkgdXNlcyBiaXRzCj4+ID4+ICsgICAg ICAgICogd2l0aGluIHRoZSBwYWdlLgo+PiA+PiArICAgICAgICAqLwo+PiA+PiArICAgICAgIEk5 MTVfV1JJVEUoQ0hJQ0tFTl9QQVIxXzEsCj4+ID4+ICsgICAgICAgICAgICAgICAgICBJOTE1X1JF QUQoQ0hJQ0tFTl9QQVIxXzEpICYgflNLTF9SQ19IQVNIX09VVFNJREUpOwo+PiA+PiArCj4+ID4+ ICAgICAgICAgSTkxNV9XUklURShHRU44X0NPTkZJRzAsCj4+ID4+ICAgICAgICAgICAgICAgICAg ICBJOTE1X1JFQUQoR0VOOF9DT05GSUcwKSB8IEdFTjlfREVGQVVMVF9GSVhFUyk7Cj4+ID4+Cj4+ ID4+IEBAIC0zMzE0LDcgKzMzMjgsOSBAQCBza2xfZGRiX21pbl9hbGxvYyhjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlCj4+ID4+ICpwc3RhdGUsCj4+ID4+Cj4+ID4+ICAgICAgICAgLyogRm9y IE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCj4+ID4+ICAgICAgICAgaWYgKGZiLT5tb2Rp ZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgo+PiA+PiAtICAgICAgICAgICBmYi0+ bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKQo+PiA+PiArICAgICAgICAgICBm Yi0+bW9kaWZpZXIgIT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEICYmCj4+ID4+ICsgICAgICAg ICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgJiYKPj4gPj4g KyAgICAgICAgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01PRF9ZZl9USUxFRF9DQ1Mp Cj4+ID4+ICAgICAgICAgICAgICAgICByZXR1cm4gODsKPj4gPj4KPj4gPj4gICAgICAgICBzcmNf dyA9IGRybV9yZWN0X3dpZHRoKCZpbnRlbF9wc3RhdGUtPmJhc2Uuc3JjKSA+PiAxNjsKPj4gPj4g QEAgLTM1OTAsNyArMzYwNiw5IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29u c3Qgc3RydWN0Cj4+ID4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+PiA+PiAgICAgICAg IH0KPj4gPj4KPj4gPj4gICAgICAgICB5X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9ZX1RJTEVEIHx8Cj4+ID4+IC0gICAgICAgICAgICAgICAgIGZiLT5tb2RpZmllciA9 PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQ7Cj4+ID4+ICsgICAgICAgICAgICAgICAgIGZiLT5t b2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQgfHwKPj4gPj4gKyAgICAgICAgICAg ICAgICAgZmItPm1vZGlmaWVyID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0NDUyB8fAo+PiA+ PiArICAgICAgICAgICAgICAgICBmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJ TEVEX0NDUzsKPj4gPj4gICAgICAgICB4X3RpbGVkID0gZmItPm1vZGlmaWVyID09IEk5MTVfRk9S TUFUX01PRF9YX1RJTEVEOwo+PiA+Pgo+PiA+PiAgICAgICAgIC8qIERpc3BsYXkgV0EgIzExNDE6 IGtibC4gKi8KPj4gPj4gQEAgLTM2NzUsNiArMzY5MywxMyBAQCBzdGF0aWMgaW50IHNrbF9jb21w dXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdAo+PiA+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPj4gPj4gICAgICAgICByZXNfbGluZXMgPSBESVZfUk9VTkRfVVAoc2VsZWN0ZWRfcmVzdWx0 LnZhbCwKPj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmVfYmxvY2tz X3Blcl9saW5lLnZhbCk7Cj4+ID4+Cj4+ID4+ICsgICAgICAgLyogRGlzcGxheSBXQSAjMTEyNTog c2tsLGJ4dCxrYmwsZ2xrICovCj4+ID4+ICsgICAgICAgaWYgKGxldmVsID09IDAgJiYKPj4gPj4g KyAgICAgICAgICAgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1Mg fHwKPj4gPj4gKyAgICAgICAgICAgIGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWWZf VElMRURfQ0NTKSkKPj4gPj4gKyAgICAgICAgICAgICAgIHJlc19ibG9ja3MgKz0gZml4ZWRfMTZf MTZfdG9fdTMyX3JvdW5kX3VwKHlfdGlsZV9taW5pbXVtKTsKPj4gPj4gKwo+PiA+PiArICAgICAg IC8qIERpc3BsYXkgV0EgIzExMjY6IHNrbCxieHQsa2JsLGdsayAqLwo+PiA+PiAgICAgICAgIGlm IChsZXZlbCA+PSAxICYmIGxldmVsIDw9IDcpIHsKPj4gPj4gICAgICAgICAgICAgICAgIGlmICh5 X3RpbGVkKSB7Cj4+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc19ibG9ja3MgKz0gZml4 ZWRfMTZfMTZfdG9fdTMyX3JvdW5kX3VwKHlfCj4+ID4+IHRpbGVfbWluaW11bSk7Cj4+ID4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+PiA+PiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4+ID4+IGluZGV4IDcwMzFiYzczM2Q5 Ny4uMDYzYTk5NDgxNWQwIDEwMDY0NAo+PiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9zcHJpdGUuYwo+PiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJp dGUuYwo+PiA+PiBAQCAtMjEwLDYgKzIxMCw3IEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRy bV9wbGFuZSAqZHJtX3BsYW5lLAo+PiA+PiAgICAgICAgIHUzMiBzdXJmX2FkZHIgPSBwbGFuZV9z dGF0ZS0+bWFpbi5vZmZzZXQ7Cj4+ID4+ICAgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uID0g cGxhbmVfc3RhdGUtPmJhc2Uucm90YXRpb247Cj4+ID4+ICAgICAgICAgdTMyIHN0cmlkZSA9IHNr bF9wbGFuZV9zdHJpZGUoZmIsIDAsIHJvdGF0aW9uKTsKPj4gPj4gKyAgICAgICB1MzIgYXV4X3N0 cmlkZSA9IHNrbF9wbGFuZV9zdHJpZGUoZmIsIDEsIHJvdGF0aW9uKTsKPj4gPj4gICAgICAgICBp bnQgY3J0Y194ID0gcGxhbmVfc3RhdGUtPmJhc2UuZHN0LngxOwo+PiA+PiAgICAgICAgIGludCBj cnRjX3kgPSBwbGFuZV9zdGF0ZS0+YmFzZS5kc3QueTE7Cj4+ID4+ICAgICAgICAgdWludDMyX3Qg Y3J0Y193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT5iYXNlLmRzdCk7Cj4+ID4+IEBA IC0yNDgsNiArMjQ5LDEwIEBAIHNrbF91cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqZHJt X3BsYW5lLAo+PiA+PiAgICAgICAgIEk5MTVfV1JJVEUoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5l X2lkKSwgKHkgPDwgMTYpIHwgeCk7Cj4+ID4+ICAgICAgICAgSTkxNV9XUklURShQTEFORV9TVFJJ REUocGlwZSwgcGxhbmVfaWQpLCBzdHJpZGUpOwo+PiA+PiAgICAgICAgIEk5MTVfV1JJVEUoUExB TkVfU0laRShwaXBlLCBwbGFuZV9pZCksIChzcmNfaCA8PCAxNikgfCBzcmNfdyk7Cj4+ID4+ICsg ICAgICAgSTkxNV9XUklURShQTEFORV9BVVhfRElTVChwaXBlLCBwbGFuZV9pZCksCj4+ID4+ICsg ICAgICAgICAgICAgICAgICAocGxhbmVfc3RhdGUtPmF1eC5vZmZzZXQgLSBzdXJmX2FkZHIpIHwg YXV4X3N0cmlkZSk7Cj4+ID4+ICsgICAgICAgSTkxNV9XUklURShQTEFORV9BVVhfT0ZGU0VUKHBp cGUsIHBsYW5lX2lkKSwKPj4gPj4gKyAgICAgICAgICAgICAgICAgIChwbGFuZV9zdGF0ZS0+YXV4 LnkgPDwgMTYpIHwgcGxhbmVfc3RhdGUtPmF1eC54KTsKPj4gPj4KPj4gPj4gICAgICAgICAvKiBw cm9ncmFtIHBsYW5lIHNjYWxlciAqLwo+PiA+PiAgICAgICAgIGlmIChwbGFuZV9zdGF0ZS0+c2Nh bGVyX2lkID49IDApIHsKPj4gPj4gLS0KPj4gPj4gMi4xMC4yCj4+ID4+Cj4+ID4+Cj4KPi0tIAo+ VmlsbGUgU3lyasOkbMOkCj5JbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==