From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 10/42] drm/i915: make plane helpers fully atomic Date: Tue, 12 May 2015 18:00:22 +0200 Message-ID: <20150512160022.GE15256@phenom.ffwll.local> References: <1431354318-11995-1-git-send-email-maarten.lankhorst@linux.intel.com> <1431354318-11995-11-git-send-email-maarten.lankhorst@linux.intel.com> <20150512081810.GW15256@phenom.ffwll.local> <55520118.1000501@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f47.google.com (mail-wg0-f47.google.com [74.125.82.47]) by gabe.freedesktop.org (Postfix) with ESMTP id 2AE346E63B for ; Tue, 12 May 2015 08:58:02 -0700 (PDT) Received: by wgin8 with SMTP id n8so15194094wgi.0 for ; Tue, 12 May 2015 08:58:01 -0700 (PDT) Content-Disposition: inline In-Reply-To: <55520118.1000501@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBNYXkgMTIsIDIwMTUgYXQgMDM6MzM6MTJQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gT3AgMTItMDUtMTUgb20gMTA6MTggc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gTW9uLCBNYXkgMTEsIDIwMTUgYXQgMDQ6MjQ6NDZQTSArMDIwMCwgTWFhcnRlbiBMYW5r aG9yc3Qgd3JvdGU6Cj4gPj4gVGhpcyBraWxscyBvZmYgbW9zdCBvZiB0aGUgdHJhbnNpdGlvbmFs IGhlbHBlcnMgYW5kIHVzZXMgYXRvbWljIHBsYW5lIHVwZGF0ZXMKPiA+PiBpbiB0aGUgbW9kZXNl dCBwYXRoIHRvIHVwZGF0ZSBldmVyeXRoaW5nLgo+ID4+Cj4gPj4gR2V0dGluZyByaWQgb2YgdGhl IHRyYW5zaXRpb25hbCBwbGFuZSBoZWxwZXJzIG1lYW50IHRoYXQgcGxhbmVzIGhhZCB0byBiZSBh ZGRlZAo+ID4+IGluIHRoZSBjcnRjIGNoZWNrIGZ1bmN0aW9uLiBPbiBtb2Rlc2V0IGEgY29ubmVj dG9yIGNhbiBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudAo+ID4+IGNydGMsIGFuZCB0aGlzIGlzIG5v dCBoYW5kbGVkIGNvcnJlY3RseSBvdGhlcndpc2UuCj4gPj4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBN YWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+ID4g T2sgcGlsZSBvZiBjb21tZW50cyBvbiB0aGlzIG9uZS4gSSBkb24ndCB5ZXQgZnVsbHkgZ3Jhc3Ag aXQgYWxsLCBidXQgYXQKPiA+IHRoZSB2ZXJ5IGJvdHRvbSBJJ3ZlIGpvdHRlZCBkb3duIGEgbGlz dCBvZiBpZGVhcyBmb3IgaG93IHRvIG1vdmUgZm9yd2FyZAo+ID4gd2l0aCB0aGlzIG9uZS4KPiA+ Cj4gPj4gLS0tCj4gPj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5j IHwgIDU5ICsrLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAg ICB8IDY1NSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgfCAgIDIgKy0KPiA+PiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgfCAgODAgKy0tLQo+ID4+ICA0IGZpbGVzIGNo YW5nZWQsIDQ0MSBpbnNlcnRpb25zKCspLCAzNTUgZGVsZXRpb25zKC0pCj4gPj4KPiA+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+ID4+IGluZGV4IDg2YmE0YjJj M2E2NS4uODViODdlNGQ0YjZlIDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2F0b21pY19wbGFuZS5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfYXRvbWljX3BsYW5lLmMKPiA+PiBAQCAtMTEwLDMyICsxMTAsNDAgQEAgc3RhdGljIGludCBp bnRlbF9wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPj4gIAkJ CQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4gPj4gIHsKPiA+PiAgCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5jcnRjOwo+ID4+IC0Jc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGM7Cj4gPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsK PiA+PiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+PiAgCXN0cnVjdCBp bnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gPj4gIAlz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3Rh dGUoc3RhdGUpOwo+ID4+ICAKPiA+PiAtCWNydGMgPSBjcnRjID8gY3J0YyA6IHBsYW5lLT5jcnRj Owo+ID4+IC0JaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPj4gLQo+ID4+ICsJ aW50ZWxfc3RhdGUtPnZpc2libGUgPSBmYWxzZTsKPiA+PiAgCS8qCj4gPj4gIAkgKiBCb3RoIGNy dGMgYW5kIHBsYW5lLT5jcnRjIGNvdWxkIGJlIE5VTEwgaWYgd2UncmUgdXBkYXRpbmcgYQo+ID4+ ICAJICogcHJvcGVydHkgd2hpbGUgdGhlIHBsYW5lIGlzIGRpc2FibGVkLiAgV2UgZG9uJ3QgYWN0 dWFsbHkgaGF2ZQo+ID4+ICAJICogYW55dGhpbmcgZHJpdmVyLXNwZWNpZmljIHdlIG5lZWQgdG8g dGVzdCBpbiB0aGF0IGNhc2UsIHNvCj4gPj4gIAkgKiBqdXN0IHJldHVybiBzdWNjZXNzLgo+ID4+ ICAJICovCj4gPj4gLQlpZiAoIWNydGMpCj4gPj4gKwlpZiAoIWNydGMpIHsKPiA+PiArCQlEUk1f REVCVUdfQVRPTUlDKCJJbnZpc2libGU6IG5vIGNydGNcbiIpOwo+ID4+ICAJCXJldHVybiAwOwo+ ID4+ICsJfQo+ID4+ICsKPiA+PiArCWNydGNfc3RhdGUgPSBzdGF0ZS0+c3RhdGUtPmNydGNfc3Rh dGVzW2RybV9jcnRjX2luZGV4KGNydGMpXTsKPiA+IFBsZWFzZSByZXVzZSBkcm1fYXRvbWljX2dl dF9jcnRjX3N0YXRlLCB0aGlzIGRlcmVmIG1hZ2ljIGlzIGhhcmQgdG8gcmVhZC4KPiA+IE1heWJl IHdlIHNob3VsZCBoYXZlIGEgbm9mYWlsIHZhcmlhbnQgb2YgdGhvc2UgdG8gZW5jb2RlIHRoZSBi ZWxvdyBXQVJOX09OCj4gPiBldmVuIC4uLgo+IFllYWgsIHRoZXJlIGFyZSBhIGZldyBwbGFjZXMg d2hlcmUgSSB1c2UgaXQgbGlrZSB0aGlzLCBiZWNhdXNlIGluIHRob3NlIGNhc2VzIHRoZSByZWxl dmFudCBzdGF0ZSBzaG91bGQgYWxyZWFkeSBleGlzdC4KCkltbyBnZXRfZm9vX3N0YXRlICsgV0FS Tl9PTihJU19FUlIpIGlzIGJldHRlciB0aGFuIG9wZW4tY29kaW5nIGl0LiBJdCdzIGEKdHJpY2t5 IGRlcmVmIGNoYWluIGFuZCBJJ3ZlIGdvdHRlbiBpdCB3cm9uZyBtdWx0aXBsZSB0aW1lcyB3aGVu IHdyaXRpbmcKYXRvbWljIGhlbHBlcnMuCgo+ID4+ICsJaWYgKFdBUk5fT04oIWNydGNfc3RhdGUp KQo+ID4+ICsJCXJldHVybiAwOwo+ID4+ICsKPiA+PiArCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxl KSB7Cj4gPj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBjcnRjIG9mZlxuIik7Cj4g Pj4gIAo+ID4+IC0JLyogRklYTUU6IHRlbXBvcmFyeSBoYWNrIG5lY2Vzc2FyeSB3aGlsZSB3ZSBz dGlsbCB1c2UgdGhlIHBsYW5lIHVwZGF0ZQo+ID4+IC0JICogaGVscGVyLiAqLwo+ID4+IC0JaWYg KHN0YXRlLT5zdGF0ZSkgewo+ID4+IC0JCWNydGNfc3RhdGUgPQo+ID4+IC0JCQlpbnRlbF9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBpbnRlbF9jcnRjKTsKPiA+PiAtCQlpZiAo SVNfRVJSKGNydGNfc3RhdGUpKQo+ID4+IC0JCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsK PiA+PiAtCX0gZWxzZSB7Cj4gPj4gLQkJY3J0Y19zdGF0ZSA9IGludGVsX2NydGMtPmNvbmZpZzsK PiA+PiArCQkvKgo+ID4+ICsJCSAqIFByb2JhYmx5IGFsbG93ZWQgYWZ0ZXIgY29udmVydGluZyB0 byBhdG9taWMuIFJpZ2h0Cj4gPj4gKwkJICogbm93IGl0IHByb2JhYmx5IG1lYW5zIHdlIGhhdmUg dGhlIHN0YXRlIGNvbmZ1c2VkLgo+ID4+ICsJCSAqLwo+ID4+ICsJCUk5MTVfU1RBVEVfV0FSTl9P TihwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiA+IFRoaXMgaXMgYWxy ZWFkeSBwb3NzaWJsZSB3aXRoIHRoZSBwcmltYXJ5IHBsYW5lIHN1cHBvcnQgLSB5b3UgY2FuIGRp c2FibGUKPiA+IGl0ICh0aG91Z2ggbm90IGNoYW5nZSB0aGUgbW9kZSBhdCB0aGUgc2FtZSB0aW1l KS4KPiBUaGF0IGV4cGxhaW5zIGEgZmV3IHdhcm5pbmdzLCB0aGFua3MuIDotKQo+ID4+ICsJCXJl dHVybiAwOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCWlmICghY3J0Y19zdGF0ZS0+YWN0aXZlKSB7 Cj4gPj4gKwkJRFJNX0RFQlVHX0FUT01JQygiSW52aXNpYmxlOiBkcG1zIG9mZlxuIik7Cj4gPj4g KwkJcmV0dXJuIDA7Cj4gPj4gIAl9Cj4gPj4gIAo+ID4+ICAJLyoKPiA+PiBAQCAtMTU1LDI0ICsx NjMsOSBAQCBzdGF0aWMgaW50IGludGVsX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKPiA+PiAgCS8qIENsaXAgYWxsIHBsYW5lcyB0byBDUlRDIHNpemUsIG9yIDB4 MCBpZiBDUlRDIGlzIGRpc2FibGVkICovCj4gPj4gIAlpbnRlbF9zdGF0ZS0+Y2xpcC54MSA9IDA7 Cj4gPj4gIAlpbnRlbF9zdGF0ZS0+Y2xpcC55MSA9IDA7Cj4gPj4gLQlpbnRlbF9zdGF0ZS0+Y2xp cC54MiA9Cj4gPj4gLQkJY3J0Y19zdGF0ZS0+YmFzZS5hY3RpdmUgPyBjcnRjX3N0YXRlLT5waXBl X3NyY193IDogMDsKPiA+PiAtCWludGVsX3N0YXRlLT5jbGlwLnkyID0KPiA+PiAtCQljcnRjX3N0 YXRlLT5iYXNlLmFjdGl2ZSA/IGNydGNfc3RhdGUtPnBpcGVfc3JjX2ggOiAwOwo+ID4+IC0KPiA+ PiAtCS8qCj4gPj4gLQkgKiBEaXNhYmxpbmcgYSBwbGFuZSBpcyBhbHdheXMgb2theTsgd2UganVz dCBuZWVkIHRvIHVwZGF0ZQo+ID4+IC0JICogZmIgdHJhY2tpbmcgaW4gYSBzcGVjaWFsIHdheSBz aW5jZSBjbGVhbnVwX2ZiKCkgd29uJ3QKPiA+PiAtCSAqIGdldCBjYWxsZWQgYnkgdGhlIHBsYW5l IGhlbHBlcnMuCj4gPj4gLQkgKi8KPiA+PiAtCWlmIChzdGF0ZS0+ZmIgPT0gTlVMTCAmJiBwbGFu ZS0+c3RhdGUtPmZiICE9IE5VTEwpIHsKPiA+PiAtCQkvKgo+ID4+IC0JCSAqICdwcmVwYXJlJyBp cyBuZXZlciBjYWxsZWQgd2hlbiBwbGFuZSBpcyBiZWluZyBkaXNhYmxlZCwgc28KPiA+PiAtCQkg KiB3ZSBuZWVkIHRvIGhhbmRsZSBmcm9udGJ1ZmZlciB0cmFja2luZyBhcyBhIHNwZWNpYWwgY2Fz ZQo+ID4+IC0JCSAqLwo+ID4+IC0JCWludGVsX2NydGMtPmF0b21pYy5kaXNhYmxlZF9wbGFuZXMg fD0KPiA+PiAtCQkJKDEgPDwgZHJtX3BsYW5lX2luZGV4KHBsYW5lKSk7Cj4gPj4gLQl9Cj4gPj4g Kwlkcm1fY3J0Y19nZXRfaHZfdGltaW5nKCZjcnRjX3N0YXRlLT5tb2RlLAo+ID4+ICsJCQkgICAg ICAgJmludGVsX3N0YXRlLT5jbGlwLngyLAo+ID4+ICsJCQkgICAgICAgJmludGVsX3N0YXRlLT5j bGlwLnkyKTsKPiA+IEltbyB0aGlzIGlzIG9iZnVzY2F0aW5nIHRoaW5ncyBhIGJpdCwgd2h5IG5v dCBqdXN0IHVuY29uZGl0aW9uYWxseSBjb3B5Cj4gPiBwaXBlX3NyY193L2ggdG8gY2xpcC54L3ky PyBnZXRfaHZfdGltaW5nIGlzIGZvciB0aGUgcGlwZSBzaXplLCB3aGljaCBvbgo+ID4gbW9zdCBw bGF0Zm9ybXMgbXVzdCBtYXRjaCB0aGUgcHJpbWFyeSBwbGFuZSB3aW5kb3cgZXhjZXB0IGZvciBn ZW4yIGFuZAo+ID4gZ2VuOSsuCj4gcGlwZV9zcmNfKiBpcyBjYWxjdWxhdGVkIGluIHRoZSBzYW1l IHdheSwgYW5kIGF0IHRoZSB0aW1lIG9mIHBsYW5lIHZhbGlkYXRpb24gdGhlIGNydGMgdmFsaWRh dGlvbiBoYXNuJ3QgcnVuIHlldCwKPiBzbyBwaXBlX3NyY18qIGNvbnRhaW5zIG91dGRhdGVkIHZh bHVlcyB3aGljaCBicmVhayBpbiBpbnRlcmVzdGluZyB3YXlzLgoKU2VlIG15IGNvbW1lbnQgaW4g cmVwbHkgdG8gVmlsbGUncyBtYWlsIC0gd2UgbmVlZCB0byB0cmFjayB0aGlzIGRvd24gYW5kCnBh cGVyIG92ZXIgKGlmIG5lZWRlZCkgc29tZXdoZXJlIGVsc2UgdGhhbiB0aGUgYXRvbWljIHBsYW5l IGNvZGUuCgo+IAo+ID4+ICAKPiA+PiAgCWlmIChzdGF0ZS0+ZmIgJiYgaW50ZWxfcm90YXRpb25f OTBfb3JfMjcwKHN0YXRlLT5yb3RhdGlvbikpIHsKPiA+PiAgCQlpZiAoIShzdGF0ZS0+ZmItPm1v ZGlmaWVyWzBdID09IEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEIHx8Cj4gPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4+IGluZGV4IDk1NmM5OTY0Mjc1ZC4uOTYxMGY3NmEyNDg5 IDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ ID4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4+IEBAIC0x MDAsMTQgKzEwMCwxNiBAQCBzdGF0aWMgdm9pZCB2bHZfcHJlcGFyZV9wbGwoc3RydWN0IGludGVs X2NydGMgKmNydGMsCj4gPj4gIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWcpOwo+ID4+ICBzdGF0aWMgdm9pZCBjaHZfcHJlcGFyZV9wbGwoc3RydWN0IGlu dGVsX2NydGMgKmNydGMsCj4gPj4gIAkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcpOwo+ID4+ICtzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVja19jcnRj KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiArCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSk7Cj4gPiBJIGNvbnNpZGVyIGZvcndhcmQgZGVjbGFyYXRpb25zIGV2aWws IGJ1dCBnaXZlbiBob3cgbXVjaCBvZiBhIG1lc3MKPiA+IGludGVsX2Rpc3BsYXkuYyBpcyBpdCBk b2Vzbid0IHJlYWxseSBtYXR0ZXIgbXVjaCA7LSkKPiA+Cj4gPj4gIHN0YXRpYyB2b2lkIGludGVs X2JlZ2luX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPj4gIHN0YXRpYyB2 b2lkIGludGVsX2ZpbmlzaF9jcnRjX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4+ ICBzdGF0aWMgdm9pZCBza2xfaW5pdF9zY2FsZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+ID4+ICAJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpOwo+ID4+ICBzdGF0aWMgaW50IGk5eHhfZ2V0X3JlZmNsayhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+PiAgCQkJICAgaW50IG51bV9j b25uZWN0b3JzKTsKPiA+PiAtc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19lbmFibGVfcGxhbmVzKHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNfZGlzYWJs ZV9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKPiA+PiArc3RhdGljIHZvaWQgaW50ZWxf cHJlX2Rpc2FibGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwo+ID4+ICtzdGF0aWMg dm9pZCBpbnRlbF9wb3N0X2VuYWJsZV9wcmltYXJ5KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4g Pj4gIAo+ID4+ICBzdGF0aWMgc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2ZpbmRfZW5jb2Rl cihzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBwaXBlKQo+ID4+ICB7Cj4g Pj4gQEAgLTIyMjAsMjggKzIyMjIsNiBAQCB2b2lkIGludGVsX2ZsdXNoX3ByaW1hcnlfcGxhbmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ID4+ICAJUE9TVElOR19SRUFEKHJl Zyk7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gLS8qKgo+ID4+IC0gKiBpbnRlbF9lbmFibGVfcHJpbWFy eV9od19wbGFuZSAtIGVuYWJsZSB0aGUgcHJpbWFyeSBwbGFuZSBvbiBhIGdpdmVuIHBpcGUKPiA+ PiAtICogQHBsYW5lOiAgcGxhbmUgdG8gYmUgZW5hYmxlZAo+ID4+IC0gKiBAY3J0YzogY3J0YyBm b3IgdGhlIHBsYW5lCj4gPj4gLSAqCj4gPj4gLSAqIEVuYWJsZSBAcGxhbmUgb24gQGNydGMsIG1h a2luZyBzdXJlIHRoYXQgdGhlIHBpcGUgaXMgcnVubmluZyBmaXJzdC4KPiA+PiAtICovCj4gPj4g LXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9wcmltYXJ5X2h3X3BsYW5lKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAo+ID4+IC0JCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ID4+IC17Cj4g Pj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiA+PiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4gLQlzdHJ1 Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPj4gLQo+ ID4+IC0JLyogSWYgdGhlIHBpcGUgaXNuJ3QgZW5hYmxlZCwgd2UgY2FuJ3QgcHVtcCBwaXhlbHMg YW5kIG1heSBoYW5nICovCj4gPj4gLQlhc3NlcnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBpbnRl bF9jcnRjLT5waXBlKTsKPiA+PiAtCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSkt PnZpc2libGUgPSB0cnVlOwo+ID4+IC0KPiA+PiAtCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9w cmltYXJ5X3BsYW5lKGNydGMsIHBsYW5lLT5mYiwKPiA+PiAtCQkJCQkgICAgICAgY3J0Yy0+eCwg Y3J0Yy0+eSk7Cj4gPj4gLX0KPiA+PiAtCj4gPj4gIHN0YXRpYyBib29sIG5lZWRfdnRkX3dhKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPj4gIHsKPiA+PiAgI2lmZGVmIENPTkZJR19JTlRFTF9J T01NVQo+ID4+IEBAIC0zMTYxLDExICszMTQxLDIwIEBAIGludGVsX3BpcGVfc2V0X2Jhc2VfYXRv bWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCj4g Pj4gIHsKPiA+PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPj4gIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ID4+ ICsJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSA9Cj4gPj4gKwkJdG9faW50 ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJpbWFyeS0+c3RhdGUpOwo+ID4+ICsJYm9vbCB3YXNfdmlz aWJsZSA9IHBsYW5lX3N0YXRlLT52aXNpYmxlOwo+ID4+ICAKPiA+PiAtCWlmIChkZXZfcHJpdi0+ ZGlzcGxheS5kaXNhYmxlX2ZiYykKPiA+PiArCS8qIE5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93IGJ5 IHRoZSBoZWxwZXIsIGJ1dCBsZXRzIGJlIHRob3JvdWdoLiAqLwo+ID4+ICsJaWYgKHdhc192aXNp YmxlICYmICFmYikKPiA+PiArCQlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMpOwo+ID4+ ICsJZWxzZSBpZiAod2FzX3Zpc2libGUgJiYgZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMp Cj4gPj4gIAkJZGV2X3ByaXYtPmRpc3BsYXkuZGlzYWJsZV9mYmMoZGV2KTsKPiA+PiAgCj4gPj4g KwlwbGFuZV9zdGF0ZS0+dmlzaWJsZSA9ICEhZmI7Cj4gPj4gIAlkZXZfcHJpdi0+ZGlzcGxheS51 cGRhdGVfcHJpbWFyeV9wbGFuZShjcnRjLCBmYiwgeCwgeSk7Cj4gPj4gKwlpZiAoIXdhc192aXNp YmxlICYmIGZiKQo+ID4+ICsJCWludGVsX3Bvc3RfZW5hYmxlX3ByaW1hcnkoY3J0Yyk7Cj4gPiBU aGlzIGNvbnRhaW5zIGEgdmJsYW5rX3dhaXQgKGF0IGxlYXN0IGZvciBicm9hZHdlbGwpIHdoaWNo IGlzIGEgbm8tZ28gaW4KPiA+IHNldF9iYXNlX2F0b21pYy4gR2l2ZW4gdGhhdCB0aGlzIGlzIG9u bHkgdXNlZCBieSBrZ2RiIGFuZCBJJ20gbm90IGF3YXJlIG9mCj4gPiBhbnlvbmUgdXNpbmcgdGhh dCBhbmQgd2UgYWxzbyBkb24ndCBoYXZlIGFueSB0ZXN0Y2FzZSBmb3IgdGhpcyBjb2RlIEkKPiA+ IHRoaW5rIHRoZSBiZXN0IHdvdWxkIGJlIHRvIGp1c3Qgbm90IHRvdWNoIHRoaXMgYW5kIGxldCBp dCBrZWVwIG9uCj4gPiBiaXRyb3R0aW5nIC4uLgo+IE9rLCBJJ2xsIGRyb3AgdGhpcyBodW5rLgo+ IAo+ID4+ICAKPiA+PiAgCXJldHVybiAwOwo+ID4+ICB9Cj4gPj4gQEAgLTMxOTIsMTYgKzMxODEs MTcgQEAgc3RhdGljIHZvaWQgaW50ZWxfdXBkYXRlX3ByaW1hcnlfcGxhbmVzKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4gPj4gIAkJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19p bnRlbF9jcnRjKGNydGMpOwo+ID4+ICAKPiA+PiAgCQlkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5t dXRleCwgTlVMTCk7Cj4gPj4gLQkJLyoKPiA+PiAtCQkgKiBGSVhNRTogT25jZSB3ZSBoYXZlIHBy b3BlciBzdXBwb3J0IGZvciBwcmltYXJ5IHBsYW5lcyAoYW5kCj4gPj4gLQkJICogZGlzYWJsaW5n IHRoZW0gd2l0aG91dCBkaXNhYmxpbmcgdGhlIGVudGlyZSBjcnRjKSBhbGxvdyBhZ2Fpbgo+ID4+ IC0JCSAqIGEgTlVMTCBjcnRjLT5wcmltYXJ5LT5mYi4KPiA+PiAtCQkgKi8KPiA+PiAtCQlpZiAo aW50ZWxfY3J0Yy0+YWN0aXZlICYmIGNydGMtPnByaW1hcnktPmZiKQo+ID4+ICsKPiA+PiArCQlp ZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKSB7Cj4gPj4gKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqc3RhdGUgPQo+ID4+ICsJCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUoY3J0Yy0+cHJp bWFyeS0+c3RhdGUpOwo+ID4+ICsKPiA+PiAgCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3By aW1hcnlfcGxhbmUoY3J0YywKPiA+PiAtCQkJCQkJCSAgICAgICBjcnRjLT5wcmltYXJ5LT5mYiwK PiA+PiAtCQkJCQkJCSAgICAgICBjcnRjLT54LAo+ID4+IC0JCQkJCQkJICAgICAgIGNydGMtPnkp Owo+ID4+ICsJCQkJCQkJc3RhdGUtPmJhc2UuZmIsCj4gPj4gKwkJCQkJCQlzdGF0ZS0+c3JjLngx ID4+IDE2LAo+ID4+ICsJCQkJCQkJc3RhdGUtPnNyYy55MSA+PiAxNik7Cj4gPj4gKwkJfQo+ID4g SSB0aGluayB0aGUgYWJvdmUgaHVuayBjb3VsZCBiZSBzcGxpdCBvdXQuIEFuZCBJJ20gbm90IHN1 cmUgaXQncyByZXF1aXJlZAo+ID4gcmVhbGx5LCB0aGlzIGlzIGp1c3QgdG8gY2F0Y2ggdXAgb24g Q1MgZmxpcHMuIFdoaWNoIHdvbid0IGJlIHVzZWQgYW55IG1vcmUKPiA+IG9uY2Ugd2UgaGF2ZSBh dG9taWMsIGJ1dCB1bnRpbCB0aGVuIHRoZSBsZWdhY3kgc3RhdGUgc3R1ZmYgdXNlZCBoZXJlCj4g PiBzaG91bGQgYmUgZ29vZCBlbm91Z2guCj4gPwoKVGhpcyBpcyB0aGUgZ3B1IHJlc2V0IGNvZGUg LSBDUyBiYXNlZCBmbGlwcyBjYW4gZ2V0IGxvc3QgaWYgdGhlIGdwdSBnZXRzCnJlc2V0LCB3aGlj aCBtZWFucyB3ZSBuZWVkIHRvIGRvIHRoZW0gbWFudWFsbHkuIEJ5IHJlLXJ1bm5pbmcKdXBkYXRl X3ByaW1hcnlfcGxhbmUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS4KCkJ1dCBDUyBiYXNlZCBmbGlw cyBkb24ndCB3b3JrIGZvciBhdG9taWMsIHdoaWNoIG1lYW5zIGFzIHNvb24gYXMgd2UndmUKaG9v a2VkIHVwIHRoZSBwYWdlZmxpcCBhdG9taWMgaGVscGVyIHdlIHdvbid0IGV2ZXIgc2VlIGFuIGEg Q1MgYmFzZWQgZmxpcAp3aGVuIHVzaW5nIGF0b21pYy4gV2hpY2ggbWVhbnMgdXNpbmcgdGhlIGxl Z2FjeSBzdGF0ZSBvYmplY3RzIG1lYW53aGlsZQoodW50aWwgdGhhdCB0cmFuc2l0aW9uIGlzIGRv bmUgYW5kIHdlIGNhbiBqdXN0IG91dHJpZ2h0IG51a2UgdGhpcyBjb2RlKQpzaG91bGQgYmUgcGVy ZmVjdGx5IHNhZmUuCgo+ID4+ICsKPiA+PiAgCQlkcm1fbW9kZXNldF91bmxvY2soJmNydGMtPm11 dGV4KTsKPiA+PiAgCX0KPiA+PiAgfQo+ID4+IEBAIC00NTcyLDIwICs0NTYyLDYgQEAgc3RhdGlj IHZvaWQgaXJvbmxha2VfcGZpdF9lbmFibGUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gPj4g IAl9Cj4gPj4gIH0KPiA+PiAgCj4gPj4gLXN0YXRpYyB2b2lkIGludGVsX2VuYWJsZV9zcHJpdGVf cGxhbmVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+PiAtewo+ID4+IC0Jc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+PiAtCWVudW0gcGlwZSBwaXBlID0gdG9faW50ZWxf Y3J0YyhjcnRjKS0+cGlwZTsKPiA+PiAtCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ID4+IC0J c3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZTsKPiA+PiAtCj4gPj4gLQlkcm1fZm9yX2Vh Y2hfbGVnYWN5X3BsYW5lKHBsYW5lLCAmZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9saXN0KSB7Cj4g Pj4gLQkJaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZSk7Cj4gPj4gLQkJaWYgKGlu dGVsX3BsYW5lLT5waXBlID09IHBpcGUpCj4gPj4gLQkJCWludGVsX3BsYW5lX3Jlc3RvcmUoJmlu dGVsX3BsYW5lLT5iYXNlKTsKPiA+PiAtCX0KPiA+PiAtfQo+ID4+IC0KPiA+PiAgdm9pZCBoc3df ZW5hYmxlX2lwcyhzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPiA+PiAgewo+ID4+ICAJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ID4+IEBAIC00ODE1LDQ0ICs0Nzkx LDYgQEAgaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g Pj4gIAloc3dfZGlzYWJsZV9pcHMoaW50ZWxfY3J0Yyk7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gLXN0 YXRpYyB2b2lkIGludGVsX2NydGNfZW5hYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gPj4gLXsKPiA+PiAtCWludGVsX2VuYWJsZV9wcmltYXJ5X2h3X3BsYW5lKGNydGMtPnByaW1h cnksIGNydGMpOwo+ID4+IC0JaW50ZWxfZW5hYmxlX3Nwcml0ZV9wbGFuZXMoY3J0Yyk7Cj4gPj4g LQlpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0YywgdHJ1ZSk7Cj4gPj4gLQo+ID4+IC0JaW50 ZWxfcG9zdF9lbmFibGVfcHJpbWFyeShjcnRjKTsKPiA+PiAtfQo+ID4+IC0KPiA+PiAtc3RhdGlj IHZvaWQgaW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4g Pj4gLXsKPiA+PiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gPj4gLQlz dHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPj4g LQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lOwo+ID4+IC0JaW50IHBpcGUgPSBpbnRl bF9jcnRjLT5waXBlOwo+ID4+IC0KPiA+PiAtCWludGVsX2NydGNfd2FpdF9mb3JfcGVuZGluZ19m bGlwcyhjcnRjKTsKPiA+PiAtCj4gPj4gLQlpbnRlbF9wcmVfZGlzYWJsZV9wcmltYXJ5KGNydGMp Owo+ID4+IC0KPiA+PiAtCWludGVsX2NydGNfZHBtc19vdmVybGF5X2Rpc2FibGUoaW50ZWxfY3J0 Yyk7Cj4gPj4gLQlmb3JfZWFjaF9pbnRlbF9wbGFuZShkZXYsIGludGVsX3BsYW5lKSB7Cj4gPj4g LQkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUpIHsKPiA+PiAtCQkJc3RydWN0IGRybV9j cnRjICpmcm9tID0gaW50ZWxfcGxhbmUtPmJhc2UuY3J0YzsKPiA+PiAtCj4gPj4gLQkJCWludGVs X3BsYW5lLT5kaXNhYmxlX3BsYW5lKCZpbnRlbF9wbGFuZS0+YmFzZSwKPiA+PiAtCQkJCQkJICAg ZnJvbSA/OiBjcnRjLCB0cnVlKTsKPiA+PiAtCQl9Cj4gPj4gLQl9Cj4gPj4gLQo+ID4+IC0JLyoK PiA+PiAtCSAqIEZJWE1FOiBPbmNlIHdlIGdyb3cgcHJvcGVyIG51Y2xlYXIgZmxpcCBzdXBwb3J0 IG91dCBvZiB0aGlzIHdlIG5lZWQKPiA+PiAtCSAqIHRvIGNvbXB1dGUgdGhlIG1hc2sgb2YgZmxp cCBwbGFuZXMgcHJlY2lzZWx5LiBGb3IgdGhlIHRpbWUgYmVpbmcKPiA+PiAtCSAqIGNvbnNpZGVy IHRoaXMgYSBmbGlwIHRvIGEgTlVMTCBwbGFuZS4KPiA+PiAtCSAqLwo+ID4+IC0JaW50ZWxfZnJv bnRidWZmZXJfZmxpcChkZXYsIElOVEVMX0ZST05UQlVGRkVSX0FMTF9NQVNLKHBpcGUpKTsKPiA+ PiAtfQo+ID4+IC0KPiA+PiAgc3RhdGljIHZvaWQgaXJvbmxha2VfY3J0Y19lbmFibGUoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ID4+ICB7Cj4gPj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y3J0Yy0+ZGV2Owo+ID4+IEBAIC0xMTA2MSw2ICsxMDk5OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKPiA+PiAgCS5s b2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCj4gPj4gIAkuYXRvbWljX2JlZ2luID0gaW50 ZWxfYmVnaW5fY3J0Y19jb21taXQsCj4gPj4gIAkuYXRvbWljX2ZsdXNoID0gaW50ZWxfZmluaXNo X2NydGNfY29tbWl0LAo+ID4+ICsJLmF0b21pY19jaGVjayA9IGludGVsX2F0b21pY19jaGVja19j cnRjLAo+ID4+ICB9Owo+ID4+ICAKPiA+PiAgLyogVHJhbnNpdGlvbmFsIGhlbHBlciB0byBjb3B5 IGN1cnJlbnQgY29ubmVjdG9yL2VuY29kZXIgc3RhdGUgdG8KPiA+PiBAQCAtMTE0MjYsMTYgKzEx MzY1LDYgQEAgaW50ZWxfbW9kZXNldF9waXBlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs Cj4gPj4gIAlpbnQgaTsKPiA+PiAgCWJvb2wgcmV0cnkgPSB0cnVlOwo+ID4+ICAKPiA+PiAtCWlm ICghY2hlY2tfZW5jb2Rlcl9jbG9uaW5nKHN0YXRlLCB0b19pbnRlbF9jcnRjKGNydGMpKSkgewo+ ID4+IC0JCURSTV9ERUJVR19LTVMoInJlamVjdGluZyBpbnZhbGlkIGNsb25pbmcgY29uZmlndXJh dGlvblxuIik7Cj4gPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gLQl9Cj4gPj4gLQo+ID4+IC0J aWYgKCFjaGVja19kaWdpdGFsX3BvcnRfY29uZmxpY3RzKHN0YXRlKSkgewo+ID4+IC0JCURSTV9E RUJVR19LTVMoInJlamVjdGluZyBjb25mbGljdGluZyBkaWdpdGFsIHBvcnQgY29uZmlndXJhdGlv blxuIik7Cj4gPj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gLQl9Cj4gPj4gLQo+ID4gSSB0aGlu ayBpdCB3b3VsZCBoZWxwIGlmIHlvdSdkIHNwbGl0IG91dCB0aGUgYWRkaXRpb24gb2YgdGhlIGNy dGNfY2hlY2sKPiA+IGZ1bmN0aW9uIGludG8gYSBzZXBhcmF0ZSBwcmVwIHBhdGNoLiBBdCBsZWFz dCBJIGRvbid0IHNlZSBhIGRlcGVuY3kgaGVyZQo+ID4gLi4uCj4gWWVhaCBidXQgdGhhdCB3b3Vs ZCBiZSB0aGUgb25seSB0aGluZyBwdXQgaW4gdGhlcmUsIG9oIHdlbGwgZ290IHRvIHN0YXJ0IHNv bWV3aGVyZS4uLgoKWWVhaCB0aGF0J3Mga2luZGEgd2hhdCBJIG1lYW4uIFRoaXMgcGF0Y2gncyBz dWJqZWN0IHRhbGtzIGFib3V0IHJld29ya2luZwp0aGUgcGxhbmUgdXBkYXRlIGhhbmRsaW5nLCB0 aGlzIGNsZWFybHkgaXNuJ3QgcGFydCBvZiB0aGF0LiBTbyBpbW8gYSBnb29kCihzbWFsbCkgcHJl cCBwYXRjaCB0byBzcGxpdCBvdXQuCgo+ID4KPiA+PiBAQCAtMTIyNzUsNyArMTIzMzMsNyBAQCBz dGF0aWMgaW50IF9faW50ZWxfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICptb2Rlc2V0X2NydGMs Cj4gPj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBwaXBlX2NvbmZpZy0+YmFz ZS5zdGF0ZTsKPiA+PiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiA+PiAgCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+PiAtCWludCByZXQgPSAwOwo+ID4+ICsJaW50IHJl dDsKPiA+PiAgCWludCBpOwo+ID4+ICAKPiA+PiAgCXJldCA9IF9faW50ZWxfc2V0X21vZGVfY2hl Y2tzKHN0YXRlKTsKPiA+PiBAQCAtMTIyODYsMTQgKzEyMzQ0LDE0IEBAIHN0YXRpYyBpbnQgX19p bnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVzZXRfY3J0YywKPiA+PiAgCWlmIChy ZXQpCj4gPj4gIAkJcmV0dXJuIHJldDsKPiA+PiAgCj4gPj4gKwlfX2ludGVsX3NldF9tb2RlX3Vw ZGF0ZV9wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4gPiBUaGlzIGNhbGxzIGNydGMtPmF0b21pY19iZWdp biwgd2hpY2ggZG9lcyBhbiBpcnFfZGlzYWJsZSAuLi4KPiBZZWFoIEkgdHJpZWQgdG8gaGFuZGxl IGl0IGJ5IGZpeGluZyBhbGwgcHJldmlvdXMgcGxhY2VzIHRvIHByZXZlbnQgYXRvbWljIGV2YWRp bmcgb24gbW9kZXNldCwKPiB3aGljaCBtZWFucyBpdCBpcyBtb3N0bHkgc2FmZSB0byBkbyBpdCBs aWtlIHRoaXMuCgpIbSwgd2Ugd2FudCB0byBkbyB0aGUgZmxpcCB0byBibGFjayBiZWZvcmUgZGlz YWJsZXMgYW5kIHRoZSBmbGlwIGZvcm0KYmxhY2sgb24gZW5hYmxpbmcgYXMgbnVjbGVhciBmbGlw cyB0b28uIERyb3BwaW5nIHRoZSB2YmxhbmsgZXZhZGUgaXNuJ3QgYQpnb29kIGlkZWEgaW1vIHNp bmNlIHdlJ2xsIG5lZWQgdG8gcmVzdXJyZWN0IGl0LiBBbmQgZmFpbGluZyB0byBicmluZyB1cAph bGwgcGxhbmVzIG9uIHRoZSB2ZXJ5IGZpcnN0IGZyYW1lIHRvcnBlZG9lcyB0aGUgImFsbCBmcmFt ZXMgYXJlIHBlcmZlY3QiCmdvYWwuCgpBbmQgdGhlcmUncyBhIGxvdCBtb3JlIHNwZWNpYWwgY2Fz ZXMgdGhhbiBqdXN0IHRoZSBldmFkZSBJIHRoaW5rLCBzbyBJJ20Kbm90IHN1cmUgd2hldGhlciB0 aGUgcmV1c2UgaXMgd29ydGggaXQuCgo+IAo+ID4KPiA+PiArCj4gPj4gIAlmb3JfZWFjaF9jcnRj X2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gPj4gIAkJaWYgKCFuZWVk c19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+ID4+ICAJCQljb250aW51ZTsKPiA+PiAgCj4gPj4gLQkJ aW50ZWxfY3J0Y19kaXNhYmxlX3BsYW5lcyhjcnRjKTsKPiA+PiArCQlpbnRlbF9jcnRjX2RwbXNf b3ZlcmxheV9kaXNhYmxlKHRvX2ludGVsX2NydGMoY3J0YykpOwo+ID4+ICAJCWRldl9wcml2LT5k aXNwbGF5LmNydGNfZGlzYWJsZShjcnRjKTsKPiA+PiAtCQlpZiAoIWNydGNfc3RhdGUtPmVuYWJs ZSkKPiA+PiAtCQkJZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxlKGNydGMtPnByaW1hcnkpOwo+ID4+ ICAJfQo+ID4+ICAKPiA+PiAgCS8qIE9ubHkgYWZ0ZXIgZGlzYWJsaW5nIGFsbCBvdXRwdXQgcGlw ZWxpbmVzIHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGNhbiB3ZQo+ID4+IEBAIC0xMjMwNSw4ICsxMjM2 Myw2IEBAIHN0YXRpYyBpbnQgX19pbnRlbF9zZXRfbW9kZShzdHJ1Y3QgZHJtX2NydGMgKm1vZGVz ZXRfY3J0YywKPiA+PiAgCj4gPj4gIAltb2Rlc2V0X3VwZGF0ZV9jcnRjX3Bvd2VyX2RvbWFpbnMo c3RhdGUpOwo+ID4+ICAKPiA+PiAtCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2 LCBzdGF0ZSk7Cj4gPj4gLQo+ID4+ICAJLyogTm93IGVuYWJsZSB0aGUgY2xvY2tzLCBwbGFuZSwg cGlwZSwgYW5kIGNvbm5lY3RvcnMgdGhhdCB3ZSBzZXQgdXAuICovCj4gPj4gIAlmb3JfZWFjaF9j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Cj4gPj4gIAkJaWYgKCFj cnRjLT5zdGF0ZS0+YWN0aXZlKQo+ID4+IEBAIC0xMjMxNCwxMyArMTIzNzAsMTMgQEAgc3RhdGlj IGludCBfX2ludGVsX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqbW9kZXNldF9jcnRjLAo+ID4+ ICAKPiA+PiAgCQl1cGRhdGVfc2NhbmxpbmVfb2Zmc2V0KHRvX2ludGVsX2NydGMoY3J0YykpOwo+ ID4+ICAKPiA+PiAtCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShjcnRjKTsKPiA+PiAt CQlpbnRlbF9jcnRjX2VuYWJsZV9wbGFuZXMoY3J0Yyk7Cj4gPj4gKwkJaWYgKG5lZWRzX21vZGVz ZXQoY3J0Yy0+c3RhdGUpKQo+ID4+ICsJCQlkZXZfcHJpdi0+ZGlzcGxheS5jcnRjX2VuYWJsZShj cnRjKTsKPiA+PiAgCX0KPiA+PiAgCj4gPj4gLQkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVy ICovCj4gPj4gKwlfX2ludGVsX3NldF9tb2RlX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwo+ ID4gd2hpY2ggaXMgb25seSBjbGVhcmVkIGluIGF0b21pY19mbHVzaCBoZXJlLiBXZSBuZWVkIGJv dGggb2YgdGhlc2UgYXQgdGhlCj4gPiBib3R0b20gaGVyZS4gSW4gYXRvbWljLWhlbHBlcnMtc3Bl YWsgdGhlIHNlcXVlbmNlIHNob3VsZCBiZQo+ID4KPiA+IGRybV9hdG9taWNfaGVscGVyX2NvbW1p dF9tb2Rlc2V0X2Rpc2FibGVzKCk7Cj4gPiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNl dF9lbmFibGVzKCk7Cj4gPiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKCk7Cj4gPgo+ ID4gd2l0aCB0aGUgbm90ZSB0aGF0IG91ciBjcnRjX2Rpc2FibGUgbXVzdCBkbyB0aGUgdW5jb25k aXRpb25hbCBwbGFuZQo+ID4gZGlzYWJsaW5nIGl0c2VsZi4gSS5lLiB5b3UgY2FuJ3QganVzdCBy ZW1vdmUgZGlzYWJsZV9wbGFuZXMgd2l0aG91dAo+ID4gcmVwbGFjZW1lbnQsIHRoYXQgb25lIG5l ZWRzIHRvIGJlIG9wZW4tY29kZWQgKHVzaW5nIHBsYW5lLT5hdG9taWNfZGlzYWJsZQo+ID4gaWYg cG9zc2libGUpLgo+ID4KPiA+IERvaW5nIHRoaW5ncyB0aGlzIHdheSB3b3VsZCBhbHNvIGFsbGV2 aWF0ZSBhbnkgbmVlZCB0byBzcGxpdCB1cCBzd2FwX3N0YXRlCj4gPiBhcyB5b3UgZG8gaW4gdGhp cyBwYXRjaCBoZXJlLgo+IFlvdSdyZSByaWdodCBpdCBjb3VsZCBiZSBkb25lIGxpa2UgdGhpcywg YnV0IGRvaW5nIGNvbW1pdF9wbGFuZXMgYXJvdW5kIHRoZSBtb2Rlc2V0cyBhbGxvd3MKPiB1cyB0 byB0ZXN0IHRoZSBzYW1lIGNvZGUgZm9yIGNhbGN1bGF0aW5nIGRpc2FibGUgcGxhbmVzIGR1cmlu ZyBtb2Rlc2V0IGFzIHdoZW4gdG9nZ2luZyBwbGFuZXMKPiBzZXBhcmF0ZWx5LiBGb3IgZXhhbXBs ZSB0aGlzIGlzIHVzZWZ1bCB3aGVuIGEgY29ubmVjdG9yIG1vdmVzIHRvIGEgZGlmZmVyZW50IGNy dGMuCgpNb3ZpbmcgY29ubmVjdG9ycyB3aWxsIGZvcmNlIGEgZnVsbCBtb2Rlc2V0IG9uIGJvdGgg Y3J0Y3MgKGF0IGxlYXN0IHdpdGgKYXRvbWljIGhlbHBlcnMsIGN1cnJlbnQgaTkxNSBjb2RlIGlz bid0IGZ1bGx5IHRoZXJlIHlldCB3aXRob3V0IHlvdXIKc2VyaWVzIGhlcmUpLiBTbyBJJ20gbm90 IHN1cmUgaG93IG11Y2ggdGhpcyBoZWxwcy4KCkFuZCBJIGRvbid0IHRoaW5rIGNvZGUgcmV1c2Ug aXMgdGhhdCB1c2VmdWwgcmVhbGx5IHNpbmNlIGNydGMgZGlzYWJsaW5nIGlzCmEgc3BlY2lhbCBj YXNlIGFueXdheS4KCj4gSW4gYW55IGNhc2UgdGhpcyBpcyBjb3NtZXRpYywgYW5kIGRvbmUgZm9y IGJpc2VjdGluZy4gSSBjYW4gbW92ZSB0aGUgc3dhcF9zdGF0ZXMgaW4gdGhpcyBjb21taXQsCj4g YnV0IGNob3NlIHRvIGRvIGl0IDIgY29tbWl0cyBsYXRlciBmb3IgZWFzaWVyIGJpc2VjdGlvbi4K PiAKPiBJIGNhbid0IG1vdmUgaXQgdG8gYmVmb3JlIHRoaXMgY29tbWl0IGJlY2F1c2UgY2FsbGlu ZyB0aGUgcGxhbmUgaGVscGVycyBtZXNzZXMgdXAgdGhlIHN0YXRlLgoKWWVhaCB0aGF0IGRpcmVj dGlvbiBpcyBjbGVhci4gQnV0IEknbSBub3QgdG9vIGNsZWFyIG9uIHdoeSB3ZSBoYXZlIHRvIG1v dmUKdGhpbmdzIG5vdyBhbHJlYWR5PyBJdCB3b24ndCB3b3JrIHdpdGggeW91ciBhcHByb2FjaCwg YnV0IHdpdGggbXkgaWRlYSBvZgphIHNwZWNpYWwtcHVycG9zZSBkaXNhYmxlX3BsYW5lcyBmdW5j dGlvbiBvbmx5IHVzZWQgZm9yIGNydGNfZGlzYWJsZSB3ZQpvbmx5IG5lZWQgdGhlIGZ1bGwgYXRv bWljIHN0YXRlIGluIGNydGNfZW5hYmxlLiBBbmQgd2l0aCB0aGUgY3VycmVudApwb3NpdGlvbiBv ZiBzd2FwX3N0YXRlcyB0aGF0J3MgdGhlIHJpZ2h0IG9uZSBhbHJlYWR5LgoKVGhlbiB3ZSBjYW4g c3RpbGwgbW92ZSBzd2FwX3N0YXRlcyB1cCBpbiB0aGUgc2VxdWVuY2UgaW4gYSBsYXRlciBwYXRj aApsaWtlIHlvdSBkbywgYnV0IHdpdGhvdXQgdGhlIGJpZyBpbnRlcm1lZGlhdGUgc3BsaXQuIFRo YXQncyBteSBvdGhlcgpyZWFzb24gZm9yIGRvaW5nIHRoZSBzcGVjaWFsX2Rpc2FibGVfcGxhbmVz ICsgY29tbWl0X3BsYW5lcyBhZnRlciBtb2Rlc2V0CmlzIGFsbCBkb25lLgoKPiA+PiAtCWRybV9h dG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwo+ID4gUGxlYXNlIGtlZXAg dGhpcyBzZXBhcmF0ZSBhbmQgZG9uJ3QgaGlkZSBpdCBpbiBhbm90aGVyIGZ1bmN0aW9uLCBpdCdz IGEKPiA+IGRpc3RpbmN0IHN0ZXAgZnJvbSB0aGUgaHcgdXBkYXRlICh3aGljaCBpcyBub3cgZG9u ZSBpbiB0aGUgbWlzbmFtZWQKPiA+IGludGVsX3NldF9tb2RlX2NsZWFudXBfcGxhbmVzKS4KPiBP ay4KPiA+Cj4gPj4gKwkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCj4gPj4gIAo+ID4+ ICAJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRlKTsKPiA+PiAgCj4gPj4gQEAgLTEyNTY4LDIw ICsxMjYyNCwxMSBAQCBpbnRlbF9tb2Rlc2V0X3N0YWdlX291dHB1dF9zdGF0ZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ID4+ICAJcmV0dXJuIDA7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gLXN0YXRp YyBib29sIHByaW1hcnlfcGxhbmVfdmlzaWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gPj4g LXsKPiA+PiAtCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUgPQo+ID4+IC0J CXRvX2ludGVsX3BsYW5lX3N0YXRlKGNydGMtPnByaW1hcnktPnN0YXRlKTsKPiA+PiAtCj4gPj4g LQlyZXR1cm4gcGxhbmVfc3RhdGUtPnZpc2libGU7Cj4gPj4gLX0KPiA+PiAtCj4gPj4gIHN0YXRp YyBpbnQgaW50ZWxfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCkKPiA+ PiAgewo+ID4+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiA+PiAgCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSA9IE5VTEw7Cj4gPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq cGlwZV9jb25maWc7Cj4gPj4gLQlib29sIHByaW1hcnlfcGxhbmVfd2FzX3Zpc2libGU7Cj4gPj4g IAlpbnQgcmV0Owo+ID4+ICAKPiA+PiAgCUJVR19PTighc2V0KTsKPiA+PiBAQCAtMTI2MjAsMzgg KzEyNjY3LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9t b2RlX3NldCAqc2V0KQo+ID4+ICAKPiA+PiAgCWludGVsX3VwZGF0ZV9waXBlX3NpemUodG9faW50 ZWxfY3J0YyhzZXQtPmNydGMpKTsKPiA+PiAgCj4gPj4gLQlwcmltYXJ5X3BsYW5lX3dhc192aXNp YmxlID0gcHJpbWFyeV9wbGFuZV92aXNpYmxlKHNldC0+Y3J0Yyk7Cj4gPj4gLQo+ID4+ICAJcmV0 ID0gaW50ZWxfc2V0X21vZGVfd2l0aF9jb25maWcoc2V0LT5jcnRjLCBwaXBlX2NvbmZpZyk7Cj4g Pj4gLQo+ID4+IC0JaWYgKHJldCA9PSAwICYmCj4gPj4gLQkgICAgcGlwZV9jb25maWctPmJhc2Uu ZW5hYmxlICYmCj4gPj4gLQkgICAgcGlwZV9jb25maWctPmJhc2UucGxhbmVzX2NoYW5nZWQgJiYK PiA+PiAtCSAgICAhbmVlZHNfbW9kZXNldCgmcGlwZV9jb25maWctPmJhc2UpKSB7Cj4gPj4gLQkJ c3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKHNldC0+Y3J0Yyk7 Cj4gPj4gLQo+ID4+IC0JCS8qCj4gPj4gLQkJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBy aW1hcnkgcGxhbmUgaXMgcmUtZW5hYmxlZCBpZiBpdAo+ID4+IC0JCSAqIGhhcyBwcmV2aW91c2x5 IGJlZW4gdHVybmVkIG9mZi4KPiA+PiAtCQkgKi8KPiA+PiAtCQlpZiAocmV0ID09IDAgJiYgIXBy aW1hcnlfcGxhbmVfd2FzX3Zpc2libGUgJiYKPiA+PiAtCQkgICAgcHJpbWFyeV9wbGFuZV92aXNp YmxlKHNldC0+Y3J0YykpIHsKPiA+PiAtCQkJV0FSTl9PTighaW50ZWxfY3J0Yy0+YWN0aXZlKTsK PiA+PiAtCQkJaW50ZWxfcG9zdF9lbmFibGVfcHJpbWFyeShzZXQtPmNydGMpOwo+ID4+IC0JCX0K PiA+PiAtCj4gPj4gLQkJLyoKPiA+PiAtCQkgKiBJbiB0aGUgZmFzdGJvb3QgY2FzZSB0aGlzIG1h eSBiZSBvdXIgb25seSBjaGVjayBvZiB0aGUKPiA+PiAtCQkgKiBzdGF0ZSBhZnRlciBib290LiAg SXQgd291bGQgYmUgYmV0dGVyIHRvIG9ubHkgZG8gaXQgb24KPiA+PiAtCQkgKiB0aGUgZmlyc3Qg dXBkYXRlLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IG9mIGRvaW5nIHRoYXQKPiA+PiAt CQkgKiAoYW5kIHJlYWxseSwgc2V0X2NvbmZpZyBpc24ndCB1c2VkIG11Y2ggZm9yIGhpZ2ggZnJl cSBwYWdlCj4gPj4gLQkJICogZmxpcHBpbmcsIHNvIGluY3JlYXNpbmcgaXRzIGNvc3QgaGVyZSBz aG91bGRuJ3QgYmUgYSBiaWcKPiA+PiAtCQkgKiBkZWFsKS4KPiA+PiAtCQkgKi8KPiA+PiAtCQlp ZiAoaTkxNS5mYXN0Ym9vdCAmJiByZXQgPT0gMCkKPiA+PiAtCQkJaW50ZWxfbW9kZXNldF9jaGVj a19zdGF0ZShzZXQtPmNydGMtPmRldik7Cj4gPj4gLQl9Cj4gPj4gLQo+ID4+ICAJaWYgKHJldCkg ewo+ID4+ICAJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byBzZXQgbW9kZSBvbiBbQ1JUQzolZF0s IGVyciA9ICVkXG4iLAo+ID4+ICAJCQkgICAgICBzZXQtPmNydGMtPmJhc2UuaWQsIHJldCk7Cj4g Pj4gQEAgLTEyNzkxLDYgKzEyODA3LDkgQEAgYm9vbCBpbnRlbF93bV9uZWVkX3VwZGF0ZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+PiAgCSAgICBwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICE9 IHN0YXRlLT5yb3RhdGlvbikKPiA+PiAgCQlyZXR1cm4gdHJ1ZTsKPiA+PiAgCj4gPj4gKwlpZiAo cGxhbmUtPnN0YXRlLT5jcnRjX3cgIT0gc3RhdGUtPmNydGNfdykKPiA+PiArCQlyZXR1cm4gdHJ1 ZTsKPiA+PiArCj4gPj4gIAlyZXR1cm4gZmFsc2U7Cj4gPj4gIH0KPiA+PiAgCj4gPj4gQEAgLTEy ODE5LDYgKzEyODM4LDkgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKPiA+PiAgCXVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMgPSAwOwo+ID4+ICAJaW50 IHJldCA9IDA7Cj4gPj4gIAo+ID4+ICsJaWYgKCF0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+ c3RhdGUpLT52aXNpYmxlKQo+ID4+ICsJCW9sZF9vYmogPSBOVUxMOwo+ID4+ICsKPiA+PiAgCWlm ICghb2JqKQo+ID4+ICAJCXJldHVybiAwOwo+ID4+ICAKPiA+PiBAQCAtMTI5MTUsMTAgKzEyOTM3 LDggQEAgaW50ZWxfY2hlY2tfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiA+PiAgCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlKQo+ID4+ICB7Cj4gPj4g IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiA+PiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4gIAlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwo+ID4+ICAJc3RydWN0IGludGVsX2Ny dGMgKmludGVsX2NydGM7Cj4gPj4gLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZTsKPiA+PiAgCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4g Pj4gIAlzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QgPSAmc3RhdGUtPmRzdDsKPiA+PiAgCXN0cnVjdCBk cm1fcmVjdCAqc3JjID0gJnN0YXRlLT5zcmM7Cj4gPj4gQEAgLTEyOTI2LDkwICsxMjk0Niw0NiBA QCBpbnRlbF9jaGVja19wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ ICAJYm9vbCBjYW5fcG9zaXRpb24gPSBmYWxzZTsKPiA+PiAgCWludCBtYXhfc2NhbGUgPSBEUk1f UExBTkVfSEVMUEVSX05PX1NDQUxJTkc7Cj4gPj4gIAlpbnQgbWluX3NjYWxlID0gRFJNX1BMQU5F X0hFTFBFUl9OT19TQ0FMSU5HOwo+ID4+IC0JaW50IHJldDsKPiA+PiAgCj4gPj4gLQljcnRjID0g Y3J0YyA/IGNydGMgOiBwbGFuZS0+Y3J0YzsKPiA+PiAgCWludGVsX2NydGMgPSB0b19pbnRlbF9j cnRjKGNydGMpOwo+ID4+IC0JY3J0Y19zdGF0ZSA9IHN0YXRlLT5iYXNlLnN0YXRlID8KPiA+PiAt CQlpbnRlbF9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUtPmJhc2Uuc3RhdGUsIGludGVsX2Ny dGMpIDogTlVMTDsKPiA+PiAgCj4gPj4gIAlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkg ewo+ID4+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0KPiA+PiArCQkJ aW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLT5iYXNlLnN0YXRlLCBpbnRlbF9jcnRj KTsKPiA+PiArCj4gPj4gIAkJbWluX3NjYWxlID0gMTsKPiA+PiAgCQltYXhfc2NhbGUgPSBza2xf bWF4X3NjYWxlKGludGVsX2NydGMsIGNydGNfc3RhdGUpOwo+ID4+ICAJCWNhbl9wb3NpdGlvbiA9 IHRydWU7Cj4gPj4gIAl9Cj4gPj4gIAo+ID4+IC0JcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVj a191cGRhdGUocGxhbmUsIGNydGMsIGZiLAo+ID4+IC0JCQkJCSAgICBzcmMsIGRlc3QsIGNsaXAs Cj4gPj4gLQkJCQkJICAgIG1pbl9zY2FsZSwKPiA+PiAtCQkJCQkgICAgbWF4X3NjYWxlLAo+ID4+ IC0JCQkJCSAgICBjYW5fcG9zaXRpb24sIHRydWUsCj4gPj4gLQkJCQkJICAgICZzdGF0ZS0+dmlz aWJsZSk7Cj4gPj4gLQlpZiAocmV0KQo+ID4+IC0JCXJldHVybiByZXQ7Cj4gPj4gLQo+ID4+IC0J aWYgKGludGVsX2NydGMtPmFjdGl2ZSkgewo+ID4+IC0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqb2xkX3N0YXRlID0KPiA+PiAtCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRl KTsKPiA+PiAtCj4gPj4gLQkJaW50ZWxfY3J0Yy0+YXRvbWljLndhaXRfZm9yX2ZsaXBzID0gdHJ1 ZTsKPiA+PiAtCj4gPj4gLQkJLyoKPiA+PiAtCQkgKiBGQkMgZG9lcyBub3Qgd29yayBvbiBzb21l IHBsYXRmb3JtcyBmb3Igcm90YXRlZAo+ID4+IC0JCSAqIHBsYW5lcywgc28gZGlzYWJsZSBpdCB3 aGVuIHJvdGF0aW9uIGlzIG5vdCAwIGFuZAo+ID4+IC0JCSAqIHVwZGF0ZSBpdCB3aGVuIHJvdGF0 aW9uIGlzIHNldCBiYWNrIHRvIDAuCj4gPj4gLQkJICoKPiA+PiAtCQkgKiBGSVhNRTogVGhpcyBp cyByZWR1bmRhbnQgd2l0aCB0aGUgZmJjIHVwZGF0ZSBkb25lIGluCj4gPj4gLQkJICogdGhlIHBy aW1hcnkgcGxhbmUgZW5hYmxlIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0IHRoYXQKPiA+PiAtCQkgKiBv bmUgaXMgZG9uZSB0b28gbGF0ZS4gV2UgZXZlbnR1YWxseSBuZWVkIHRvIHVuaWZ5Cj4gPj4gLQkJ ICogdGhpcy4KPiA+PiAtCQkgKi8KPiA+PiAtCQlpZiAoc3RhdGUtPnZpc2libGUgJiYKPiA+PiAt CQkgICAgSU5URUxfSU5GTyhkZXYpLT5nZW4gPD0gNCAmJiAhSVNfRzRYKGRldikgJiYKPiA+PiAt CQkgICAgZGV2X3ByaXYtPmZiYy5jcnRjID09IGludGVsX2NydGMgJiYKPiA+PiAtCQkgICAgc3Rh dGUtPmJhc2Uucm90YXRpb24gIT0gQklUKERSTV9ST1RBVEVfMCkpIHsKPiA+PiAtCQkJaW50ZWxf Y3J0Yy0+YXRvbWljLmRpc2FibGVfZmJjID0gdHJ1ZTsKPiA+PiAtCQl9Cj4gPj4gLQo+ID4+IC0J CWlmIChzdGF0ZS0+dmlzaWJsZSAmJiAhb2xkX3N0YXRlLT52aXNpYmxlKSB7Cj4gPj4gLQkJCS8q Cj4gPj4gLQkJCSAqIEJEVyBzaWduYWxzIGZsaXAgZG9uZSBpbW1lZGlhdGVseSBpZiB0aGUgcGxh bmUKPiA+PiAtCQkJICogaXMgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIHBsYW5lIGVuYWJsZSBpcyBh bHJlYWR5Cj4gPj4gLQkJCSAqIGFybWVkIHRvIG9jY3VyIGF0IHRoZSBuZXh0IHZibGFuayA6KAo+ ID4+IC0JCQkgKi8KPiA+PiAtCQkJaWYgKElTX0JST0FEV0VMTChkZXYpKQo+ID4+IC0JCQkJaW50 ZWxfY3J0Yy0+YXRvbWljLndhaXRfdmJsYW5rID0gdHJ1ZTsKPiA+PiAtCQl9Cj4gPj4gLQo+ID4+ IC0JCWludGVsX2NydGMtPmF0b21pYy5mYl9iaXRzIHw9Cj4gPj4gLQkJCUlOVEVMX0ZST05UQlVG RkVSX1BSSU1BUlkoaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gPj4gLQo+ID4+IC0JCWludGVsX2NydGMt PmF0b21pYy51cGRhdGVfZmJjID0gdHJ1ZTsKPiA+PiAtCj4gPj4gLQkJaWYgKGludGVsX3dtX25l ZWRfdXBkYXRlKHBsYW5lLCAmc3RhdGUtPmJhc2UpKQo+ID4+IC0JCQlpbnRlbF9jcnRjLT5hdG9t aWMudXBkYXRlX3dtID0gdHJ1ZTsKPiA+PiAtCX0KPiA+PiArCXJldHVybiBkcm1fcGxhbmVfaGVs cGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0YywgZmIsCj4gPj4gKwkJCQkJICAgICBzcmMsIGRl c3QsIGNsaXAsCj4gPj4gKwkJCQkJICAgICBtaW5fc2NhbGUsIG1heF9zY2FsZSwKPiA+PiArCQkJ CQkgICAgIGNhbl9wb3NpdGlvbiwgdHJ1ZSwKPiA+PiArCQkJCQkgICAgICZzdGF0ZS0+dmlzaWJs ZSk7Cj4gPj4gK30KPiA+PiAgCj4gPj4gLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkg ewo+ID4+IC0JCXJldCA9IHNrbF91cGRhdGVfc2NhbGVyX3VzZXJzKGludGVsX2NydGMsIGNydGNf c3RhdGUsCj4gPj4gLQkJCXRvX2ludGVsX3BsYW5lKHBsYW5lKSwgc3RhdGUsIDApOwo+ID4+IC0J CWlmIChyZXQpCj4gPj4gLQkJCXJldHVybiByZXQ7Cj4gPj4gLQl9Cj4gPj4gK3N0YXRpYyB2b2lk Cj4gPj4gK2ludGVsX2Rpc2FibGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPiA+PiArCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiArCQkJICAgIGJvb2wg Zm9yY2UpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2 Owo+ID4+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiA+PiAgCj4gPj4gLQlyZXR1cm4gMDsKPiA+PiArCWRldl9wcml2LT5kaXNwbGF5LnVw ZGF0ZV9wcmltYXJ5X3BsYW5lKGNydGMsIE5VTEwsIDAsIDApOwo+ID4+ICB9Cj4gPj4gIAo+ID4+ ICBzdGF0aWMgdm9pZAo+ID4+ICBpbnRlbF9jb21taXRfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiA+PiAtCQkJICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0 ZSkKPiA+PiArCQkJICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCj4gPj4g IHsKPiA+PiAtCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7Cj4gPj4g LQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5iYXNlLmZiOwo+ID4+ICsJc3Ry dWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3N0YXRlLT5iYXNlLmNydGM7Cj4gPj4gKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG5ld19zdGF0ZS0+YmFzZS5mYjsKPiA+PiAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2Owo+ID4+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiA+PiAgCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjOwo+ID4+IC0Jc3RydWN0IGRybV9yZWN0ICpzcmMgPSAmc3RhdGUtPnNyYzsK PiA+PiArCXN0cnVjdCBkcm1fcmVjdCAqc3JjID0gJm5ld19zdGF0ZS0+c3JjOwo+ID4+ICAKPiA+ PiAgCWNydGMgPSBjcnRjID8gY3J0YyA6IHBsYW5lLT5jcnRjOwo+ID4+ICAJaW50ZWxfY3J0YyA9 IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPj4gQEAgLTEzMDE4LDI1ICsxMjk5NCwxNzggQEAgaW50 ZWxfY29tbWl0X3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gPj4gIAlj cnRjLT54ID0gc3JjLT54MSA+PiAxNjsKPiA+PiAgCWNydGMtPnkgPSBzcmMtPnkxID4+IDE2Owo+ ID4+ICAKPiA+PiAtCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpIHsKPiA+PiAtCQlpZiAoc3RhdGUt PnZpc2libGUpCj4gPj4gLQkJCS8qIEZJWE1FOiBraWxsIHRoaXMgZmFzdGJvb3QgaGFjayAqLwo+ ID4+IC0JCQlpbnRlbF91cGRhdGVfcGlwZV9zaXplKGludGVsX2NydGMpOwo+ID4+ICsJaWYgKCFu ZXdfc3RhdGUtPnZpc2libGUgfHwKPiA+PiArCSAgICBXQVJOX09OKG5ld19zdGF0ZS0+dmlzaWJs ZSAmJiAhY3J0Yy0+c3RhdGUtPmFjdGl2ZSkpIHsKPiA+PiArCQlpbnRlbF9kaXNhYmxlX3ByaW1h cnlfcGxhbmUocGxhbmUsIGNydGMsIGZhbHNlKTsKPiA+PiArCX0gZWxzZSB7Cj4gPj4gKwkJLyog RklYTUU6IGtpbGwgdGhpcyBmYXN0Ym9vdCBoYWNrICovCj4gPj4gKwkJaW50ZWxfdXBkYXRlX3Bp cGVfc2l6ZShpbnRlbF9jcnRjKTsKPiA+PiAgCj4gPj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBk YXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgcGxhbmUtPmZiLAo+ID4+IC0JCQkJCQkgICAgICAgY3J0 Yy0+eCwgY3J0Yy0+eSk7Cj4gPj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlf cGxhbmUoY3J0YywgZmIsCj4gPj4gKwkJCQkJCSAgICAgICBzcmMtPngxID4+IDE2LAo+ID4+ICsJ CQkJCQkgICAgICAgc3JjLT55MSA+PiAxNik7Cj4gPj4gIAl9Cj4gPj4gIH0KPiA+PiAgCj4gPj4g LXN0YXRpYyB2b2lkCj4gPj4gLWludGVsX2Rpc2FibGVfcHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiA+PiAtCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+PiAt CQkJICAgIGJvb2wgZm9yY2UpCj4gPj4gKy8qIFRyYW5zaXRpb25hbCBjaGVja2luZyBoZXJlLCBt b3N0bHkgZm9yIHBsYW5lIHVwZGF0ZXMgKi8KPiA+PiArc3RhdGljIGludCBpbnRlbF9hdG9taWNf Y2hlY2tfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gPj4gKwkJCQkgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gPj4gIHsKPiA+PiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBwbGFuZS0+ZGV2Owo+ID4+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVf Y29uZmlnID0gdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsKPiA+PiArCXN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKPiA+PiArCXN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IGNydGNfc3RhdGUtPnN0YXRlOwo+ID4+ICsJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPiA+PiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPj4gKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZTsKPiA+PiArCXVuc2lnbmVkIHBsYW5lX21hc2s7Cj4gPj4gKwlpbnQgaWR4LCBy ZXQ7Cj4gPj4gKwlib29sIG1vZGVfY2hhbmdlZCA9IG5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSk7 Cj4gPj4gKwlib29sIGlzX2NydGNfZW5hYmxlZCA9IGNydGNfc3RhdGUtPmFjdGl2ZTsKPiA+PiAr CWJvb2wgd2FzX2NydGNfZW5hYmxlZCA9IGNydGMtPnN0YXRlLT5hY3RpdmU7Cj4gPj4gIAo+ID4+ IC0JZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3ByaW1hcnlfcGxhbmUoY3J0YywgTlVMTCwgMCwg MCk7Cj4gPj4gKwlpZiAoIWNoZWNrX2VuY29kZXJfY2xvbmluZyhzdGF0ZSwgdG9faW50ZWxfY3J0 YyhjcnRjKSkpIHsKPiA+PiArCQlEUk1fREVCVUdfS01TKCJyZWplY3RpbmcgaW52YWxpZCBjbG9u aW5nIGNvbmZpZ3VyYXRpb25cbiIpOwo+ID4+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4+ICsJfQo+ ID4gSSB0aGluayB3ZSBuZWVkIHR3byBoYXZlIDIgYmxvY2tzIGluIHRoZSBjcnRjX2NoZWNrIGZ1 bmN0aW9uOiBPbmUgcGFydAo+ID4gdGhhdCBqdXN0IHVwZGF0ZXMgd2F0ZXJtYXJrcyAod2hlbiBz dGF0ZS0+cGxhbmVfY2hhbmdlZCBpcyBzZXQpIGFuZCBvbmUKPiA+IHBhcnQgdGhhdCBkZWFscyB3 aXRoIHRoZSBtb2Rlc2V0IGNoZWNrcyAoYWRkaW5nIHBsYW5lcywgY2hlY2tpbmcgY2xvbmluZwo+ ID4gYW5kIGFsbCB0aGF0KSB3aGVuIG5lZWRzX21vZGVzZXQoc3RhdGUpIGlzIHRydWUuCj4gTWFr ZXMgc2Vuc2UuCj4gCj4gPj4gKwo+ID4+ICsJbWVtc2V0KCZpbnRlbF9jcnRjLT5hdG9taWMsIDAs IHNpemVvZihpbnRlbF9jcnRjLT5hdG9taWMpKTsKPiA+PiArCWludGVsX2NydGMtPmF0b21pYy51 cGRhdGVfd20gPSBtb2RlX2NoYW5nZWQ7Cj4gPj4gKwo+ID4+ICsJaWR4ID0gY3J0Yy0+YmFzZS5p ZDsKPiA+PiArCUk5MTVfU1RBVEVfV0FSTihjcnRjLT5zdGF0ZS0+YWN0aXZlICE9IGludGVsX2Ny dGMtPmFjdGl2ZSwKPiA+PiArCQkiQ3J0YyAlaSBtaXNtYXRjaCBiZXR3ZWVuIHN0YXRlLT5hY3Rp dmUoJWkpIGFuZCBjcnRjLT5hY3RpdmUgKCVpKVxuIiwKPiA+PiArCQlpZHgsIGNydGMtPnN0YXRl LT5hY3RpdmUsIGludGVsX2NydGMtPmFjdGl2ZSk7Cj4gPiBTdGF0ZSBjb21wdXRhdGlvbiBpcyBh c3luYywgeW91IGNhbnQgY2hlY2sgdGhpcyBpbiB0aGUgYXRvbWljX2NoZWNrCj4gPiBmdW5jdGlv bnMuIElmIHlvdSB0aGluayB0aGlzIGlzIHVzZWZ1bCB0aGVuIHdlJ2QgbmVlZCB0byBjaGVjayB0 aGlzIGV2ZXJ5Cj4gPiB0aW1lIGJlZm9yZSB3ZSB1cGRhdGUgaW50ZWxfY3J0Yy0+YWN0aXZlLiBC dXQgd2UgaGF2ZSB0aGUgdmFyaW91cyBXQVJOX09OCj4gPiBhbGwgb3ZlciB0aGUgcGxhY2UgKGNv bnZlcnRlZCBvdmVyIHRvIGNydGMtPnN0YXRlLT5hY3RpdmUpIHNvIEkgdGhpbmsKPiA+IHdlJ3Jl IG1vcmUgdGhhbiBjb3ZlcmVkIGFuZCBjYW4ganVzdCByaXAgb3V0IG91ciBvd24gaW50ZWxfY3J0 Yy0+YWN0aXZlCj4gPiBldmVudHVhbGx5LiBBdCBsZWFzdCB0aGF0J3Mga2luZGEgYmVlbiBteSBp ZGVhIHdpdGggc3RhdGUtPmFjdGl2ZSB0b28uCj4gWWVhaCwgaXQncyBhIHJlbWFpbmRlciB3aGVu IEkgaGFkIHRoZSBjb21taXRzIGluIGEgZGlmZmVyZW50IG9yZGVyLgo+ID4+ICsKPiA+PiArCURS TV9ERUJVR19BVE9NSUMoIkNydGMgJWkgd2FzIGVuYWJsZWQgJWkgbm93IGVuYWJsZWQ6ICVpXG4i LAo+ID4+ICsJCQkgaWR4LCB3YXNfY3J0Y19lbmFibGVkLCBpc19jcnRjX2VuYWJsZWQpOwo+ID4+ ICsKPiA+PiArCXBsYW5lX21hc2sgPSBjcnRjX3N0YXRlLT5wbGFuZV9tYXNrIHwgY3J0Yy0+c3Rh dGUtPnBsYW5lX21hc2s7Cj4gPj4gKwlkcm1fZm9yX2VhY2hfcGxhbmVfbWFzayhwbGFuZSwgZGV2 LCBwbGFuZV9tYXNrKSB7Cj4gPj4gKwkJaW50IGkgPSBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOwo+ ID4+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0gc3RhdGUtPnBsYW5l X3N0YXRlc1tpXTsKPiA+PiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9z dGF0ZTsKPiA+PiArCQlib29sIHR1cm5fb2ZmLCB0dXJuX29uLCB2aXNpYmxlLCB3YXNfdmlzaWJs ZTsKPiA+PiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiA+PiArCj4gPj4gKwkJaWYg KCFwbGFuZV9zdGF0ZSkgewo+ID4+ICsJCQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9m dW5jcyAqZnVuY3M7Cj4gPj4gKwkJCWludCByZXQ7Cj4gPj4gKwo+ID4+ICsJCQlpZiAoIW1vZGVf Y2hhbmdlZCB8fCAhcGxhbmUtPnN0YXRlLT5mYikKPiA+PiArCQkJCWNvbnRpbnVlOwo+ID4+ICsK PiA+PiArCQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwg cGxhbmUpOwo+ID4gV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIGNydGMgY29uc3RyYWlucyBiZWZv cmUgYWNxdWlyaW5nIHRoZSBwbGFuZSBzdGF0ZSwKPiA+IG90aGVyd2lzZSBhbGwgdGhlIGxvY2tp bmcgZ29lcyBzaW5nbGUtdGhyZWFkZWQuIE9uIGludGVsIGh3IHdlIGNhbiBkbyB0aGF0Cj4gPiBi ZWNhdXNlIHRoZSBwbGFuZS0+Y3J0YyBsaW5rcyBhcmUgc3RhdGljLCB5b3UgY2FuIGxvb2sgYXQK PiA+IGludGVsX3BsYW5lLT5waXBlLgo+IFRoaXMgY29kZSBpcyB0byBtYWtlIHN1cmUgYWxsIHBs YW5lcyBhcmUgY2hlY2tlZCB3aGVuIG1vZGVfY2hhbmdlZCAmJiBwbGFuZS0+c3RhdGUtPmZiLAo+ IHBsYW5lX3N0YXRlLT52aXNpYmxlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgaW4gdGhhdCBjYXNlLgoK WWVzIHdlIG5lZWQgdG8gcmVjb21wdXRlIHBsYW5lIHN0YXRlLCB3aGljaCBpcyB3aHkgbW9kZXNl dCBjaGVjayBzaG91bGQgYmUKZG9uZSBmaXJzdCAoaW5jbHVkaW5nIGFkZGluZyBhbnkgYWRkaXRp b25hbCBwbGFuZSBzdGF0ZXMgYmVjYXVzZQptb2RlX2NoYW5nZWQgaXMgdHJ1ZSkuIFRoZW4gYWZ0 ZXIgYWxsIHRoYXQgd2UgY2FuIGNhbGwgdGhlIGF0b21pY19jaGVjawpmdW5jdGlvbnMgZm9yIHRo ZSBwbGFuZSB1cGRhdGUuIFRoZXJlJ3MgbW9yZSBkZXRhaWwgaW4gbXkgcmVwbHkgZnVydGhlcgpk b3duLCBidXQgc2VlIGFsc28gVmlsbGUncyByZXBseS4KCj4gCj4gPj4gKwkJCWlmIChJU19FUlIo cGxhbmVfc3RhdGUpKQo+ID4+ICsJCQkJcmV0dXJuIFBUUl9FUlIocGxhbmVfc3RhdGUpOwo+ID4+ ICsKPiA+PiArCQkJZnVuY3MgPSBwbGFuZS0+aGVscGVyX3ByaXZhdGU7Cj4gPj4gKwkJCXJldCA9 IGZ1bmNzLT5hdG9taWNfY2hlY2socGxhbmUsIHBsYW5lX3N0YXRlKTsKPiA+PiArCQkJaWYgKHJl dCkKPiA+PiArCQkJCXJldHVybiByZXQ7Cj4gPj4gKwkJfQo+ID4+ICsJCW9sZF9wbGFuZV9zdGF0 ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Cj4gPj4gKwo+ID4+ICsJCXdh c192aXNpYmxlID0gd2FzX2NydGNfZW5hYmxlZCAmJiAob2xkX3BsYW5lX3N0YXRlLT52aXNpYmxl IHx8Cj4gPj4gKwkJCSAgICAgIG9sZF9wbGFuZV9zdGF0ZS0+aHdfZW5hYmxlZCk7Cj4gPj4gKwkJ dmlzaWJsZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKS0+dmlzaWJsZSAmJgo+ ID4+ICsJCQkgICAgICBpc19jcnRjX2VuYWJsZWQ7Cj4gPj4gKwo+ID4+ICsJCWlmIChwbGFuZS0+ c3RhdGUtPmNydGMgIT0gY3J0YykKPiA+PiArCQkJd2FzX3Zpc2libGUgPSBmYWxzZTsKPiA+PiAr CQlpZiAocGxhbmVfc3RhdGUtPmNydGMgIT0gY3J0YykKPiA+PiArCQkJdmlzaWJsZSA9IGZhbHNl Owo+ID4+ICsKPiA+PiArCQlpZiAoIXdhc192aXNpYmxlICYmICF2aXNpYmxlKQo+ID4+ICsJCQlj b250aW51ZTsKPiA+PiArCj4gPj4gKwkJdHVybl9vZmYgPSB3YXNfdmlzaWJsZSAmJiAoIXZpc2li bGUgfHwgbW9kZV9jaGFuZ2VkKTsKPiA+PiArCQl0dXJuX29uID0gdmlzaWJsZSAmJiAoIXdhc192 aXNpYmxlIHx8IG1vZGVfY2hhbmdlZCk7Cj4gPj4gKwkJZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7Cj4g Pj4gKwo+ID4+ICsJCURSTV9ERUJVR19BVE9NSUMoIkNydGMgJWkgaGFzIHBsYW5lICVpIHdpdGgg ZmIgJWlcbiIsIGlkeCwKPiA+PiArCQkJcGxhbmUtPmJhc2UuaWQsIGZiID8gZmItPmJhc2UuaWQg OiAtMSk7Cj4gPj4gKwkJRFJNX0RFQlVHX0FUT01JQygiXHR2aXNpYmxlICVpIC0+ICVpLCBvZmYg JWksIG9uICVpLCBtcyAlaVxuIiwKPiA+PiArCQkJd2FzX3Zpc2libGUsIHZpc2libGUsIHR1cm5f b2ZmLCB0dXJuX29uLCBtb2RlX2NoYW5nZWQpOwo+ID4+ICsKPiA+PiArCQkvKiBwbGFuZSBiZWlu ZyB0dXJuZWQgb2ZmIGFzIHBhcnQgb2YgbW9kZXNldCBvciBjaGFuZ2VzPyAqLwo+ID4+ICsJCWlm IChpbnRlbF93bV9uZWVkX3VwZGF0ZShwbGFuZSwgcGxhbmVfc3RhdGUpKQo+ID4+ICsJCQlpbnRl bF9jcnRjLT5hdG9taWMudXBkYXRlX3dtID0gdHJ1ZTsKPiA+PiArCj4gPj4gKwkJaWYgKElOVEVM X0lORk8oZGV2KS0+Z2VuID49IDkgJiYKPiA+PiArCQkgICAgcGxhbmUtPmJhc2UudHlwZSAhPSBE Uk1fUExBTkVfVFlQRV9DVVJTT1IpIHsKPiA+PiArCQkJcmV0ID0gc2tsX3VwZGF0ZV9zY2FsZXJf dXNlcnMoaW50ZWxfY3J0YywgcGlwZV9jb25maWcsCj4gPj4gKwkJCQkJdG9faW50ZWxfcGxhbmUo cGxhbmUpLAo+ID4+ICsJCQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKSwgMCk7 Cj4gPj4gKwkJCWlmIChyZXQpCj4gPj4gKwkJCQlyZXR1cm4gcmV0Owo+ID4+ICsJCX0KPiA+PiAr Cj4gPj4gKwkJLyoKPiA+PiArCQkgKiAncHJlcGFyZScgaXMgbmV2ZXIgY2FsbGVkIHdoZW4gcGxh bmUgaXMgYmVpbmcgZGlzYWJsZWQsIHNvCj4gPj4gKwkJICogd2UgbmVlZCB0byBoYW5kbGUgZnJv bnRidWZmZXIgdHJhY2tpbmcgYXMgYSBzcGVjaWFsIGNhc2UKPiA+PiArCQkgKi8KPiA+PiArCQlp ZiAob2xkX3BsYW5lX3N0YXRlLT5iYXNlLmZiICYmICF2aXNpYmxlKQo+ID4+ICsJCQlpbnRlbF9j cnRjLT5hdG9taWMuZGlzYWJsZWRfcGxhbmVzIHw9IDEgPDwgaTsKPiA+PiArCj4gPj4gKwkJc3dp dGNoIChwbGFuZS0+YmFzZS50eXBlKSB7Cj4gPiBXZSBzaG91bGQgcHJvYmFibHkgc3RvcmUgdGhl IGZyb250YnVmZmVyIHRyYWNraW5nIG1hc2sgaW4gaW50ZWxfcGxhbmUKPiA+IHNvbWV3aGVyZS4K PiAKPiBJbmRlZWQsIGJ1dCB0aGlzIGNvZGUncyBhbHJlYWR5IGNvbXBsaWNhdGVkIGVub3VnaCBz byBJIGZlbHQgdGhhdCBpbml0aWFsbHkgZG9pbmcKPiBhIDE6MSBtb3ZpbmcgZnJvbSBwbGFuZV9j aGVjayB0byBjcnRjX2NoZWNrIHdvdWxkIGJlIGVhc2llciB0byBkZWJ1Zy4KPiAKPiAKPiA+PiA8 c25pcD4KPiA+IEknbSBjb21wbGV0ZWx5IGxvc3QgYXMgdG8gd2h5IHdlIG5lZWQgdG8gbW92ZSBh bGwgdGhlIHBsYW5lLT5hdG9taWNfY2hlY2sKPiA+IGNvZGUgaW50byBhIGxvb3AgaW4gdGhlIGNy dGNfY2hlY2sgZnVuY3Rpb24/Cj4gVG8gY2FsY3VsYXRlIHdoYXQgbmVlZHMgdG8gaGFwcGVuIGR1 cmluZyBhdG9taWNfYmVnaW4gYW5kIGF0b21pY19mbHVzaCgpIG9uIGVhY2ggY3J0Yy4KCldlbGwg d2UgbmVlZCB0byBydW4gdGhlIGNvZGUsIHRoYXQncyBjbGVhci4gQnV0IHdoeSBkbyB3ZSBuZWVk IHRvIG1vdmUgaXQKb3V0IG9mIHRoZSBwbGFuZS0+YXRvbWljX2NoZWNrIGZ1bmN0aW9ucz8gV2l0 aCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlCgoxLiB1cGRhdGUgbW9kZXNldCBzdGF0ZXMsIGVuc3Vy ZSBjcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgaXMgYWNjdXJhdGUKMi4gYWRkIGFsbCBwbGFuZV9z dGF0ZXMgZm9yIGEgY3J0YyBpZiBtb2RlX2NoYW5nZWQgaXMgc2V0CjMuIGNhbGwgaGVscGVyX2No ZWNrX3BsYW5lcwoKcGxhbmUtPmF0b21pY19jaGVjayBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCwg YW5kIGFsd2F5cyB3aXRoIHRoZSByaWdodApzdGF0ZS4gSXMgdGhlcmUgc29tZSByZWZhY3RvciBv cmRlcmluZyBpc3N1ZSBJJ20gbWlzc2luZyB0aGF0IHByZXZlbnRzIHVzCmdvaW5nIGZvciB0aGlz IGRpcmVjdGx5PwoKPiAKPiA+PiA8c25pcD4KPiA+PiBAQCAtMTMzMDYsMjAgKzEzNDI3LDI2IEBA IGludGVsX2Rpc2FibGVfY3Vyc29yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4+ ICAKPiA+PiAgc3RhdGljIHZvaWQKPiA+PiAgaW50ZWxfY29tbWl0X2N1cnNvcl9wbGFuZShzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiA+PiAtCQkJICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnN0YXRlKQo+ID4+ICsJCQkgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQo+ ID4+ICB7Cj4gPj4gLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOwo+ ID4+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbmV3X3N0YXRlLT5iYXNlLmNydGM7Cj4gPj4g IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKPiA+PiAgCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjOwo+ID4+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IGludGVsX2ZiX29iaihzdGF0ZS0+YmFzZS5mYik7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKG5ld19zdGF0ZS0+YmFzZS5mYik7Cj4gPj4g IAl1aW50MzJfdCBhZGRyOwo+ID4+ICAKPiA+PiAgCWNydGMgPSBjcnRjID8gY3J0YyA6IHBsYW5l LT5jcnRjOwo+ID4+ICAJaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7Cj4gPj4gIAo+ ID4+IC0JcGxhbmUtPmZiID0gc3RhdGUtPmJhc2UuZmI7Cj4gPj4gLQljcnRjLT5jdXJzb3JfeCA9 IHN0YXRlLT5iYXNlLmNydGNfeDsKPiA+PiAtCWNydGMtPmN1cnNvcl95ID0gc3RhdGUtPmJhc2Uu Y3J0Y195Owo+ID4+ICsJcGxhbmUtPmZiID0gbmV3X3N0YXRlLT5iYXNlLmZiOwo+ID4+ICsJY3J0 Yy0+Y3Vyc29yX3ggPSBuZXdfc3RhdGUtPmJhc2UuY3J0Y194Owo+ID4+ICsJY3J0Yy0+Y3Vyc29y X3kgPSBuZXdfc3RhdGUtPmJhc2UuY3J0Y195Owo+ID4+ICsKPiA+PiArCWlmICghbmV3X3N0YXRl LT52aXNpYmxlIHx8Cj4gPj4gKwkgICAgV0FSTl9PTihuZXdfc3RhdGUtPnZpc2libGUgJiYgIWNy dGMtPnN0YXRlLT5hY3RpdmUpKSB7Cj4gPiBBcyBhbiBhc2lkZTogV2UgbXVzdCBtb3ZlIG92ZXIg dG8gY29tcHV0ZSAtPnZpc2libGUgaXJyZXNwZWN0aXZlIG9mCj4gPiAtPmFjdGl2ZS4gSSBoYXZl bid0IGNoZWNrIHdoZXRoZXIgeW91IGZpeCB0aGF0IGxhdGVyIG9uIGFscmVhZHksIGJ1dCB0aGlz Cj4gPiBpcyBpbXBvcnRhbnQgdG8gYmUgYWJsZSB0byBjaGVjayB3bSBjb25zdHJhaW50cyBjb3Jy ZWN0bHkuIFRoZQo+ID4gY3J0Y19zdGF0ZS0+YWN0aXZlIGhhbmRsaW5nIHNob3VsZCBpbW8gYmUg ZG9uZSBpbiB0aGUgY29tbW9uIGNvZGUgYnkKPiA+IHNpbXBseSBub3QgY2FsbGluZyBhbnkgb2Yg dGhlIHBsYW5lIG9yIGNydGMgZnVuY3Rpb25zIGh3IHVwZGF0ZSBpZiB0aGUKPiA+IGNydGMgaXMg b2ZmLgo+IEluIHRoZSBjcnRjX2NoZWNrIGZ1bmN0aW9uIEknbSBzZXR0aW5nOgo+IGludGVsX2Ny dGMtPmF0b21pYy51cGRhdGVfd20gPSBtb2RlX2NoYW5nZWQ7ID8KPiAKPiBJdCBtZWFucyByZWNh bGN1bGF0aW5nIHdtIG9uIGRwbXMgb2ZmLT5vbiB0b28gYnV0IGlzIHRoYXQgcmVhbGx5IHN1Y2gg YSBidXJkZW4/Cj4gVHJlYXRpbmcgY3J0Yy0+c3RhdGUtPmFjdGl2ZSBhcyB0aGUgb25seSBrbm9i IGZvciBjcnRjIG9uL29mZiBzaW1wbGlmaWVzIHRoaW5ncy4KCk5vdCBmcm9tIHRoZSBjb21wdXRh dGlvbiBwb3YsIGp1c3QgZnJvbSBjb3JyZWN0bmVzLiBXZSBtdXN0IHJlamVjdCBwbGFuZQpjb25m aWdzIHRoYXQgZG9uJ3QgaGF2ZSBlbm91Z2ggZmlmbyBzcGFjZSBmb3Igd2F0ZXJtYXJrcyBpcnJl c3BlY3RpdmUgb2YKY3J0Y19zdGF0ZS0+YWN0aXZlLiBNeSBjb21tZW50IHdhcyBhbHNvIGp1c3Qg bWVhbnQgYXMgYSBxdWVzdGlvbi9oaW50IGluCnRoZSBsYXJnZXIgcGljdHVyZSBvZiBtb3Zpbmcg YWxsIHRoZSBjcnRjX3N0YXRlLT5hY3RpdmUgY2hlY2tzIHVwIGluIHRoZQpsYXllcmluZyAoc2lu Y2UgcGxhdGZvcm0gcGxhbmUgY29kZSBzaG91bGRuJ3QgZXZlciBjYXJlIHRvIG1ha2Ugc3VyZQp0 aGVyZSdzIG5vIGJ1Z3MpLgoKPiA+IE9mIGNvdXJzZSB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gYWRk IGFsbCBwbGFuZXMgYm90aCBmb3IgLT5tb2RlX2NoYW5nZWQgYW5kCj4gPiBmb3IgLT5hY3RpdmVf Y2hhbmdlZCwgYnV0IG5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkgdGFrZXMgY2FyZSBvZiB0aGF0 Cj4gPiBhbHJlYWR5Lgo+IFRoaXMgaXMgZXhhY3RseSB3aHkgSSBhZGQgYWxsIHBsYW5lcyBpbiB0 aGUgY2hlY2sgZnVuY3Rpb24uCj4gCj4gPiBBc2lkZTogVGhlIGlkZWEgYmVoaW5kIHRoZSBzcGxp dCBiZXR3ZWVuIGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lcwo+ID4gYW5kIGRybV9hdG9t aWNfaGVscGVyX2NoZWNrX21vZGVzZXQgaXMgdGhhdCB0aGUgZm9ybWVyIGhhbmRsZXMgcGxhbmVz LW9ubHkKPiA+IHVwZGF0ZXMgd2hpbGUgdGhlIGxhdHRlciBoYW5kbGVzIG1vZGVzZXQuIFdlIGNh bid0IGZ1bGx5IHVzZQo+ID4gY2hlY2tfbW9kZXNldHMgYmVjYXVzZSB3ZSBkb24ndCB1c2UgY3J0 YyBoZWxwZXJzLCBidXQgSSB0aGluayByZXVzaW5nIHRoZQo+ID4gc2FtZSBpZGVhIHN0aWxsIGhh cyBtZXJpdDoKPiA+Cj4gPiAtIFdlIGNyZWF0ZSBhbiBpbnRlbF9jaGVja19tb2Rlc2V0IHdoaWNo IGNhbGxzIHRoZSBoZWxwZXIncyBjaGVja19tb2Rlc2V0Cj4gPiAgIHBsdXMgYWZ0ZXJ3YXJkcyBh bGwgdGhlIG1vZGVzZXQgY2hlY2tzIChkcGxsLCBjbG9uaW5nIGNoZWNrcywgYWRkaW5nCj4gPiAg IHBsYW5lIHN0YXRlcyBhbmQgZ2xvYmFsIHJlc291cmNlcykgdGhhdCB3ZSBkbyBpbiBjcnRjX2Nv bXB1dGVfY29uZmlnIGFuZAo+ID4gICBmcmllbmRzIHJpZ2h0IG5vdy4gVGhhdCBvbmUgd291bGQg YWxzbyBhZGQgcGxhbmUgc3RhdGVzIGFzIG5lZWRlZCAoYnV0Cj4gPiAgIG5vdCBjYWxsIHBsYW5l LT5hdG9taWNfY2hlY2spLiBBbGwgb2YgdGhpcyB3b3VsZCBiZSBza2lwcGVkIGlmCj4gPiAgIG5l ZWRzX21vZGVzZXQgaXNuJ3QgdHJ1ZS4KPiBNaWdodCBiZSBkb2FibGUgaWYgd2UgZG8gYWRkIHBs YW5lcyBiZXR3ZWVuIGNoZWNrX21vZGVzZXQgYW5kIGNoZWNrX3BsYW5lcy4KPiAKPiBPcmlnaW5h bGx5IEkgdHJpZWQgaXQgaW4gaW50ZWxfbW9kZXNldF9jb21wdXRlX2NvbmZpZywgYnV0IHRoYXQg ZGlkbid0IHdvcmsgd2hlbgo+IHRoZSBjcnRjIHdhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIHRo YXQgaGFkIHRoZSBhcmd1bWVudCBwYXNzZWQuCgpSaWdodCBub3cgdGhhdCBzaG91bGQgb25seSBi ZSBwb3NzaWJsZSAoaW4gdGhlIGxlZ2FjeSBtb2Rlc2V0IGNvZGUpIGlmIHdlCm1vdmUgYSBjb25u ZWN0b3IsIHdoaWNoIG1lYW5zIHRoZSBvdGhlciBjcnRjIGlzIGd1YXJhbnRlZWQgdG8gZ2V0CmRp c2FibGVkLiBJZiBhZGRpbmcgcGxhbmUgc3RhdGVzIGZvciB0aGF0IGNhc2UgZG9lc24ndCAoeWV0 KSB3b3JrIHdlIGNvdWxkCmRvIGFuIGludGVybWVkaWF0ZSBzdGVwIGFuZCBqdXN0IGZvcmNlLWRp c2FibGUgYWxsIHBsYW5lcyBpZiB0aGVpciBjdXJyZW50CnN0YXRlIGluZGljYXRlcyB0aGVpciBv bi4gTm90IGFzIHByZXR0eSBhcyB3YWxraW5nIG92ZXIgb2xkIHN0YXRlcyBpbiB0aGUKZGlzYWJs ZSBjb2RlLCBidXQgb2sgYXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAgaW1vLgoKT25jZSB0aGUgbXVs dGktY3J0YyBwYXRjaCBpcyBkb25lIHdlIGNhbiB0aGVuIHN3aXRjaCBvdmVyIHRvIGFkZGluZyBw bGFuZQpzdGF0ZXMgZm9yIHRoaXMgY2FzZSB0b28gYW5kIHRoZSB1c3VhbCBzdGF0ZSB3YWxraW5n IGxvb3AuCgo+ID4gLSBBZnRlciB0aGF0IHdlJ2QgY2FsbCB0aGUgaGVscGVyJ3MgcGxhbmVfY2hl Y2sgZnVuY3Rpb25zIHdoaWNoIGRvZXMKPiA+ICAgZXhjbHVzaXZlbHkgcGxhbmUtdXBkYXRlIHJl bGF0ZWQgY2hlY2tzLiBjcnRjL3BsYW5lLT5hdG9taWNfY2hlY2sKPiA+ICAgd291bGRuJ3QgY29u dGFpbiBhbnkgbW9kZXNldCByZWxhdGVkIGNoZWNrcyAobGlrZSB0aGUgZW5jb2RlciBjbG9uaW5n IG9yCj4gPiAgIHBsYW5lIGFkZGluZyB5b3UncmUgZG9pbmcgcmlnaHQgbm93KS4KPiBJIHRoaW5r IGVuY29kZXIgY2xvbmluZyBvdWdodCB0byBiZSBwYXJ0IG9mIHRoZSBjcnRjIGNoZWNrIHNpbmNl IGl0cyBkb25lIG9uIGVhY2ggY3J0Yy4KPiA+PiA8c25pcD4KPiA+IE9rIEkgdGhpbmsgb3ZlcmFs bCB0aGlzIHBhdGNoIGlzIHRvbyBiaWcgYW5kIG5lZWRzIHRvIGJlIHNwbGl0IGEgYml0LiBUaGUK PiA+IGZvbGxvd2luZyBzaG91bGQgYmUgZG9hYmxlIGFzIHByZXAtcGF0Y2hlczoKPiA+IC0gc2V0 X2Jhc2VfYXRvbWljIChpZiB3ZSBkYXJlIHRvIHRvdWNoIGl0IGF0IGFsbCkKPiBJIHRoaW5rIEkn bGwgZHJvcCBpdC4KPiA+IC0gc2h1ZmZsaW5nIHRoZSBjcnRjIG1vZGVzZXQgY2hlY2sgbG9naWMg YXJvdW5kIHRvIGFkZCBwbGFuZSBzdGF0ZXMgYXMKPiA+ICAgbmVlZGVkLCBtYWtpbmcgc3VyZSB3 ZSBvbmx5IHJ1biB0aGF0IGlmIG5lZWRzX21vZGVzZXQgaW5kaWNhdGVzIHNvLgo+IEkgdGhpbmsg c3BsaXR0aW5nIHRoaXMgb3V0IHdvdWxkIGJyZWFrIHRoZSB0cmFuc2l0aW9uYWwgaGVscGVycywg dGhleQo+IHJlbHkgb24gdGhlIHBsYW5lIHN0YXRlIG5vdCBiZWluZyB0aGVyZSBzbyB0aGUgc3Rh dGUgaXMgY29ycmVjdGx5Cj4gdXBkYXRlZCB3aGVuIHRoZSB0cmFuc2l0aW9uYWwgcGxhbmUgaGVs cGVycyBydW4sIGVsc2Ugd2Ugd291bGQgY2F1c2UKPiBzdGFsZSBzdGF0ZSB0byBiZSBzd2FwcGVk LiA6LSgKCkhtIHJpZ2h0IHRoYXQncyBhbiB1Z2x5IHRyYW5zaXRpb24gaW5kZWVkLiBXZSBjb3Vs ZCBwYW1wZXIgb3ZlciBpdCBieQpvcGVuLWNvZGluZyB0aGUgaGVscGVycyBhbmQgcGFzc2luZyBp biB0aGUgcGxhbmVfc3RhdGUgdG8gdXBkYXRlLiBXb3VsZAptZWFuIGV2ZW4gbW9yZSBwYXRjaGVz IC4uLgoKPiA+IC0gUHVzaGluZyB0aGUgY2hlY2tzIGZvciBpbnRlbF9jcnRjLT5hY3RpdmUgb3Ig Y3J0Yy0+c3RhdGUtPmFjdGl2ZSBvdXQgb2YKPiA+ICAgdGhlIGxvdy1sZXZlbCBwbGFuZSBjb2Rl IHVwIGludG8gaGlnaGVyIGxldmVsIGF0b21pYyBwbGFuZSBjb2RlIChhbmQgdGhlCj4gPiAgIGZl dyBsZWdhY3kgZW50cnkgcG9pbnRzIGZvciBwbGFuZSB1cGRhdGVzIHRoYXQgd2Ugc3RpbGwgaGF2 ZSBtYXliZSwgYnV0Cj4gPiAgIHRob3NlIHNob3VsZCBiZSBjb3ZlcmVkIEkgdGhpbmsgd2l0aCB0 aGUgdW5pdmVyc2FsIHBsYW5lICsgdHJhbnNpdGlvbmFsCj4gPiAgIGhlbHBlcnMpLgo+IEkgZmVh ciB0aGlzIG1pZ2h0IGJyZWFrIHRoZSB0cmFuc2l0aW9uYWwgaGVscGVyIGNhbGxzIHRvbywgdGhl Cj4gdHJhbnNpdGlvbmFsIGhlbHBlcnMgcmVxdWlyZSB0aGUgdHJhbnNpdGlvbmFsIHN0YXRlIHRv IGJlIG1vc3RseSBpbiBzeW5jCj4gd2l0aCB0aGUgYXRvbWljIHN0YXRlLgoKSG0geWVhaC4gQnV0 IGlmIHdlIGdvIHdpdGggdGhlIGFib3ZlIGludGVybWVkaWF0ZSBzdGVwIHRoZW4KY3J0Y19zdGF0 ZS0+YWN0aXZlIHNob3VsZCBiZSBhbHdheXMgY29ycmVjdCBhbmQgd2UgY2FuIG1vdmUgdGhpbmdz IGFyb3VuZAppbiB0aGUgcGxhbmUgY29kZSB3aXRob3V0IGV2ZXJ5dGhpbmcgZ2V0dGluZyBvdXQg b2Ygc3luYy4gQXMgbG9uZyBhcyB3ZSd2ZQpmaXJzdCBzd2l0Y2hlZCBhbnkgdXNhZ2Ugb2YgY3J0 Yy0+YWN0aXZlIG92ZXIgdG8gY3J0Y19zdGF0ZS0+YWN0aXZlLgoKPiA+IFRoZW4gd2UgY2FuIHB1 dCBpbiB0aGUgbWVhdCBvZiB0aGlzIHBhdGNoLCBpLmUuIHJlcGxhY2luZyB0aGUgaGVscGVycyB3 aXRoCj4gPiBhdG9taWMgdXBkYXRlcyBpbiB0aGUgbW9kZXNldCBjb2RlLgo+IEkgd2lzaCB0aGF0 IHdvdWxkIHdvcmsuIDstKQoKWWVhaCB0aGlzIGlzIGEgcmVhbGx5IHRyaWNreSBvbmUuIEFuZCBp dCdzIGJpZyBlbm91Z2ggdG8gcmVhbGx5IHNjYXJlIG1lLApzbyBpZiBwb3NzaWJsZSBJJ2QgcHJl ZmVyIGEgbW9yZSBncmFkdWFsIHRyYW5zaXRpb24uIFdlJ3ZlIGhhZCBzb21lIHJlYWxseQpjcmF6 eSByZWdyZXNzaW9uIGFscmVhZHkgd2l0aCBhbGwgdGhhdCBhdG9taWMgd29yaywgdGJoIEkgZG9u J3QgdGhpbmsgSSdkCmhhdmUgYSBjbHVlIHdoYXQgYnJlYWtzIGlmIGEgYmlzZWN0IGxlYWRzIHRv IHRoaXMgcGF0Y2ggOigKCk5vdCBzdXJlIHdoYXQgdG8gZG8gaGVyZSByZWFsbHkgLi4uCi1EYW5p ZWwKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9u Cmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==