From mboxrd@z Thu Jan 1 00:00:00 1970 From: Guido =?iso-8859-1?Q?G=FCnther?= Subject: Re: [PATCH v3 5/8] drm/etnaviv: rework MMU handling Date: Tue, 13 Aug 2019 17:27:09 +0200 Message-ID: <20190813152709.GC22471@bogon.m.sigxcpu.org> References: <20190809120424.32679-1-l.stach@pengutronix.de> <20190809120424.32679-5-l.stach@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190809120424.32679-5-l.stach@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lucas Stach Cc: etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, patchwork-lst@pengutronix.de, kernel@pengutronix.de, Russell King List-Id: dri-devel@lists.freedesktop.org SGksCk9uIEZyaSwgQXVnIDA5LCAyMDE5IGF0IDAyOjA0OjIxUE0gKzAyMDAsIEx1Y2FzIFN0YWNo IHdyb3RlOgo+IFRoaXMgcmV3b3JrcyB0aGUgTU1VIGhhbmRsaW5nIHRvIG1ha2UgaXQgcG9zc2li bGUgdG8gaGF2ZSBtdWx0aXBsZSBNTVUgY29udGV4dHMuCj4gQSBjb250ZXh0IGlzIGJhc2ljYWxs eSBvbmUgaW5zdGFuY2Ugb2YgR1BVIHBhZ2UgdGFibGVzLiBDdXJyZW50bHkgd2UgaGF2ZSBvbmUK PiBzZXQgb2YgcGFnZSB0YWJsZXMgcGVyIEdQVSwgd2hpY2ggaXNuJ3QgYWxsIHRoYXQgY2xldmVy LCBhcyBpdCBoYXMgdGhlCj4gZm9sbG93aW5nIHR3byBjb25zZXF1ZW5jZXM6Cj4gCj4gMS4gQWxs IEdQVSBjbGllbnRzIChha2EgcHJvY2Vzc2VzKSBhcmUgc2hhcmluZyB0aGUgc2FtZSBwYWdldGFi bGVzLCB3aGljaCBtZWFucwo+IHRoZXJlIGlzIG5vIGlzb2xhdGlvbiBiZXR3ZWVuIGNsaWVudHMs IGJ1dCBvbmx5IGJldHdlZW4gR1BVIGFzc2lnbmVkIG1lbW9yeQo+IHNwYWNlcyBhbmQgdGhlIHJl c3Qgb2YgdGhlIHN5c3RlbS4gQmV0dGVyIHRoYW4gbm90aGluZywgYnV0IGFsc28gbm90IGdyZWF0 Lgo+IAo+IDIuIENsaWVudHMgb3BlcmF0aW5nIG9uIHRoZSBzYW1lIHNldCBvZiBidWZmZXJzIHdp dGggZGlmZmVyZW50IGV0bmF2aXYgR1BVCj4gY29yZXMsIGUuZy4gYSB3b3JrbG9hZCB1c2luZyBi b3RoIHRoZSAyRCBhbmQgM0QgR1BVLCBuZWVkIHRvIG1hcCB0aGUgdXNlZAo+IGJ1ZmZlcnMgaW50 byB0aGUgcGFnZXRhYmxlIHNldHMgb2YgZWFjaCB1c2VkIEdQVS4KPiAKPiBUaGlzIHBhdGNoIHJl d29ya3MgYWxsIHRoZSBNTVUgaGFuZGxpbmcgdG8gaW50cm9kdWNlIHRoZSBhYnN0cmFjdGlvbiBv ZiB0aGUKPiBNTVUgY29udGV4dC4gQSBjb250ZXh0IGNhbiBiZSBzaGFyZWQgYWNyb3NzIGRpZmZl cmVudCBHUFUgY29yZXMsIGFzIGxvbmcgYXMKPiB0aGV5IGhhdmUgY29tcGF0aWJsZSBNTVUgaW1w bGVtZW50YXRpb25zLCB3aGljaCBpcyB0aGUgY2FzZSBmb3IgYWxsIHN5c3RlbXMKPiB3aXRoIFZp dmFudGUgR1BVcyBzZWVuIGluIHRoZSB3aWxkLgo+IAo+IEFzIE1NVXYxIGlzIG5vdCBhYmxlIHRv IGNoYW5nZSBwYWdldGFibGVzIG9uIHRoZSBmbHksIHdpdGhvdXQgYQo+ICJzdG9wIHRoZSB3b3Js ZCIgb3BlcmF0aW9uLCB3aGljaCBzdG9wcyBHUFUsIGNoYW5nZXMgcGFnZXRhYmxlcyB2aWEgQ1BV Cj4gaW50ZXJhY3Rpb24sIHJlc3RhcnRzIEdQVSwgdGhlIGltcGxlbWVudGF0aW9uIGludHJvZHVj ZXMgYSBzaGFyZWQgY29udGV4dCBvbgo+IE1NVXYxLCB3aGljaCBpcyByZXR1cm5lZCB3aGVuZXZl ciB0aGVyZSBpcyBhIHJlcXVlc3QgZm9yIGEgbmV3IGNvbnRleHQuCj4gCj4gVGhpcyBwYXRjaCBh c3NpZ25zIGEgTU1VIGNvbnRleHQgdG8gZWFjaCBHUFUsIHNvIG9uIE1NVXYyIHN5c3RlbXMgdGhl cmUgaXMKPiBzdGlsbCBvbmUgc2V0IG9mIHBhZ2V0YWJsZXMgcGVyIEdQVSwgYnV0IGR1ZSB0byB0 aGUgc2hhcmVkIGNvbnRleHQgTU1VdjEKPiBzeXN0ZW1zIHNlZSBhIGNoYW5nZSBpbiBiZWhhdmlv ciBhcyBub3cgYSBzaW5nbGUgcGFnZXRhYmxlIHNldCBpcyB1c2VkCj4gYWNyb3NzIGFsbCBHUFUg Y29yZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9u aXguZGU+Cj4gUmV2aWV3ZWQtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXgu ZGU+CgpSZXZpZXdlZC1ieTogR3VpZG8gR8O8bnRoZXIgPGFneEBzaWd4Y3B1Lm9yZz4KCj4gLS0t Cj4gdjM6Cj4gLSBtb3ZlIG9wcyBkZWNsYXJhdGlvbiB0byBoZWFkZXIuCj4gLSByZW5hbWUgZ3B1 IHN0cnVjdCBtbXUgbWVtYmVyIHRvIG1tdV9jb250ZXh0IGZvciBjb25zaXN0ZW5jeQo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2J1ZmZlci5jICAgfCAgMTAgKy0KPiAg ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYuYyAgIHwgICA4ICstCj4gIGRy aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfY21kYnVmLmggICB8ICAgNiArLQo+ICBkcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2Rydi5jICAgICAgfCAgIDYgKy0KPiAgZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaCAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHVtcC5jICAgICB8ICAxMiArLQo+ICBkcml2ZXJzL2dw dS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jICAgICAgfCAgMjQgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uaCAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfZ3B1LmMgICAgICB8ICAzMSArKy0KPiAgZHJpdmVycy9ncHUvZHJt L2V0bmF2aXYvZXRuYXZpdl9ncHUuaCAgICAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9l dG5hdml2L2V0bmF2aXZfaW9tbXUuYyAgICB8IDE1MSArKysrKystLS0tLS0KPiAgZHJpdmVycy9n cHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdS5oICAgIHwgIDIwIC0tCj4gIGRyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXVfdjIuYyB8IDI2NCArKysrKysrKystLS0tLS0tLS0t LS0KPiAgZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUuYyAgICAgIHwgMjU5ICsr KysrKysrKysrKy0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11 LmggICAgICB8ICA5MSArKysrKy0tCj4gIDE1IGZpbGVzIGNoYW5nZWQsIDQ2MSBpbnNlcnRpb25z KCspLCA0MzAgZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2lvbW11LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2V0bmF2aXYvZXRuYXZpdl9idWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0 bmF2aXZfYnVmZmVyLmMKPiBpbmRleCBhM2NkYjIwYmZjNWYuLjQzMjRiMDk4Njg5ZiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2J1ZmZlci5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9idWZmZXIuYwo+IEBAIC0yMDcsNyArMjA3 LDcgQEAgdTE2IGV0bmF2aXZfYnVmZmVyX2NvbmZpZ19tbXV2MihzdHJ1Y3QgZXRuYXZpdl9ncHUg KmdwdSwgdTMyIG10bGJfYWRkciwgdTMyIHNhZmUKPiAgCXJldHVybiBidWZmZXItPnVzZXJfc2l6 ZSAvIDg7Cj4gIH0KPiAgCj4gLXUxNiBldG5hdml2X2J1ZmZlcl9jb25maWdfcHRhKHN0cnVjdCBl dG5hdml2X2dwdSAqZ3B1KQo+ICt1MTYgZXRuYXZpdl9idWZmZXJfY29uZmlnX3B0YShzdHJ1Y3Qg ZXRuYXZpdl9ncHUgKmdwdSwgdW5zaWduZWQgc2hvcnQgaWQpCj4gIHsKPiAgCXN0cnVjdCBldG5h dml2X2NtZGJ1ZiAqYnVmZmVyID0gJmdwdS0+YnVmZmVyOwo+ICAKPiBAQCAtMjE2LDcgKzIxNiw3 IEBAIHUxNiBldG5hdml2X2J1ZmZlcl9jb25maWdfcHRhKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1 KQo+ICAJYnVmZmVyLT51c2VyX3NpemUgPSAwOwo+ICAKPiAgCUNNRF9MT0FEX1NUQVRFKGJ1ZmZl ciwgVklWU19NTVV2Ml9QVEFfQ09ORklHLAo+IC0JCSAgICAgICBWSVZTX01NVXYyX1BUQV9DT05G SUdfSU5ERVgoMCkpOwo+ICsJCSAgICAgICBWSVZTX01NVXYyX1BUQV9DT05GSUdfSU5ERVgoaWQp KTsKPiAgCj4gIAlDTURfRU5EKGJ1ZmZlcik7Cj4gIAo+IEBAIC0zMTUsNyArMzE1LDcgQEAgdm9p ZCBldG5hdml2X2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgdTMyIGV4ZWNf c3RhdGUsCj4gIAl1MzIgcmV0dXJuX3RhcmdldCwgcmV0dXJuX2R3b3JkczsKPiAgCXUzMiBsaW5r X3RhcmdldCwgbGlua19kd29yZHM7Cj4gIAlib29sIHN3aXRjaF9jb250ZXh0ID0gZ3B1LT5leGVj X3N0YXRlICE9IGV4ZWNfc3RhdGU7Cj4gLQl1bnNpZ25lZCBpbnQgbmV3X2ZsdXNoX3NlcSA9IFJF QURfT05DRShncHUtPm1tdS0+Zmx1c2hfc2VxKTsKPiArCXVuc2lnbmVkIGludCBuZXdfZmx1c2hf c2VxID0gUkVBRF9PTkNFKGdwdS0+bW11X2NvbnRleHQtPmZsdXNoX3NlcSk7Cj4gIAlib29sIG5l ZWRfZmx1c2ggPSBncHUtPmZsdXNoX3NlcSAhPSBuZXdfZmx1c2hfc2VxOwo+ICAKPiAgCWxvY2tk ZXBfYXNzZXJ0X2hlbGQoJmdwdS0+bG9jayk7Cj4gQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIGV0 bmF2aXZfYnVmZmVyX3F1ZXVlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LCB1MzIgZXhlY19zdGF0 ZSwKPiAgCj4gIAkJLyogZmx1c2ggY29tbWFuZCAqLwo+ICAJCWlmIChuZWVkX2ZsdXNoKSB7Cj4g LQkJCWlmIChncHUtPm1tdS0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxKQo+ICsJCQlpZiAo Z3B1LT5tbXVfY29udGV4dC0+Z2xvYmFsLT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpCj4g IAkJCQlleHRyYV9kd29yZHMgKz0gMTsKPiAgCQkJZWxzZQo+ICAJCQkJZXh0cmFfZHdvcmRzICs9 IDM7Cj4gQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIGV0bmF2aXZfYnVmZmVyX3F1ZXVlKHN0cnVj dCBldG5hdml2X2dwdSAqZ3B1LCB1MzIgZXhlY19zdGF0ZSwKPiAgCj4gIAkJaWYgKG5lZWRfZmx1 c2gpIHsKPiAgCQkJLyogQWRkIHRoZSBNTVUgZmx1c2ggKi8KPiAtCQkJaWYgKGdwdS0+bW11LT52 ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEpIHsKPiArCQkJaWYgKGdwdS0+bW11X2NvbnRleHQt Pmdsb2JhbC0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxKSB7Cj4gIAkJCQlDTURfTE9BRF9T VEFURShidWZmZXIsIFZJVlNfR0xfRkxVU0hfTU1VLAo+ICAJCQkJCSAgICAgICBWSVZTX0dMX0ZM VVNIX01NVV9GTFVTSF9GRU1NVSB8Cj4gIAkJCQkJICAgICAgIFZJVlNfR0xfRkxVU0hfTU1VX0ZM VVNIX1VOSzEgfAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2 X2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYuYwo+IGlu ZGV4IGIwYmFiYzBmNzIzMC4uZjM5NDMwYmEzNTkzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfY21kYnVmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRu YXZpdi9ldG5hdml2X2NtZGJ1Zi5jCj4gQEAgLTYwLDE4ICs2MCwxOCBAQCBldG5hdml2X2NtZGJ1 Zl9zdWJhbGxvY19uZXcoc3RydWN0IGRldmljZSAqZGV2KQo+ICB9Cj4gIAo+ICBpbnQgZXRuYXZp dl9jbWRidWZfc3ViYWxsb2NfbWFwKHN0cnVjdCBldG5hdml2X2NtZGJ1Zl9zdWJhbGxvYyAqc3Vi YWxsb2MsCj4gLQkJCQlzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ICsJCQkJc3RydWN0IGV0 bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCQkJCXN0cnVjdCBldG5hdml2X3ZyYW1f bWFwcGluZyAqbWFwcGluZywKPiAgCQkJCXUzMiBtZW1vcnlfYmFzZSkKPiAgewo+IC0JcmV0dXJu IGV0bmF2aXZfaW9tbXVfZ2V0X3N1YmFsbG9jX3ZhKG1tdSwgbWFwcGluZywgbWVtb3J5X2Jhc2Us Cj4gKwlyZXR1cm4gZXRuYXZpdl9pb21tdV9nZXRfc3ViYWxsb2NfdmEoY29udGV4dCwgbWFwcGlu ZywgbWVtb3J5X2Jhc2UsCj4gIAkJCQkJICAgICBzdWJhbGxvYy0+cGFkZHIsIFNVQkFMTE9DX1NJ WkUpOwo+ICB9Cj4gIAo+IC12b2lkIGV0bmF2aXZfY21kYnVmX3N1YmFsbG9jX3VubWFwKHN0cnVj dCBldG5hdml2X2lvbW11ICptbXUsCj4gK3ZvaWQgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2NfdW5t YXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCQkJCSAgIHN0cnVj dCBldG5hdml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZykKPiAgewo+IC0JZXRuYXZpdl9pb21tdV9w dXRfc3ViYWxsb2NfdmEobW11LCBtYXBwaW5nKTsKPiArCWV0bmF2aXZfaW9tbXVfcHV0X3N1YmFs bG9jX3ZhKGNvbnRleHQsIG1hcHBpbmcpOwo+ICB9Cj4gIAo+ICB2b2lkIGV0bmF2aXZfY21kYnVm X3N1YmFsbG9jX2Rlc3Ryb3koc3RydWN0IGV0bmF2aXZfY21kYnVmX3N1YmFsbG9jICpzdWJhbGxv YykKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9jbWRidWYu aCBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfY21kYnVmLmgKPiBpbmRleCBhMjg2 NjhlNDZlMjYuLmFkNmZkOGViMDM3OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRu YXZpdi9ldG5hdml2X2NtZGJ1Zi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRu YXZpdl9jbWRidWYuaAo+IEBAIC05LDcgKzksNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KPiAgCj4gIHN0cnVjdCBkZXZpY2U7Cj4gLXN0cnVjdCBldG5hdml2X2lvbW11Owo+ICtzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0Owo+ICBzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmc7 Cj4gIHN0cnVjdCBldG5hdml2X2NtZGJ1Zl9zdWJhbGxvYzsKPiAgc3RydWN0IGV0bmF2aXZfcGVy Zm1vbl9yZXF1ZXN0Owo+IEBAIC0yOCwxMCArMjgsMTAgQEAgc3RydWN0IGV0bmF2aXZfY21kYnVm X3N1YmFsbG9jICoKPiAgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2NfbmV3KHN0cnVjdCBkZXZpY2Ug KmRldik7Cj4gIHZvaWQgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2NfZGVzdHJveShzdHJ1Y3QgZXRu YXZpdl9jbWRidWZfc3ViYWxsb2MgKnN1YmFsbG9jKTsKPiAgaW50IGV0bmF2aXZfY21kYnVmX3N1 YmFsbG9jX21hcChzdHJ1Y3QgZXRuYXZpdl9jbWRidWZfc3ViYWxsb2MgKnN1YmFsbG9jLAo+IC0J CQkJc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKPiArCQkJCXN0cnVjdCBldG5hdml2X2lvbW11 X2NvbnRleHQgKmNvbnRleHQsCj4gIAkJCQlzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKm1h cHBpbmcsCj4gIAkJCQl1MzIgbWVtb3J5X2Jhc2UpOwo+IC12b2lkIGV0bmF2aXZfY21kYnVmX3N1 YmFsbG9jX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCj4gK3ZvaWQgZXRuYXZpdl9j bWRidWZfc3ViYWxsb2NfdW5tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4 dCwKPiAgCQkJCSAgIHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZyk7Cj4gIAo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmMKPiBpbmRleCA1ZmEzYWE3YmRi YzUuLmViMGMyM2ZlOTc5YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYu Ywo+IEBAIC0xMTksOSArMTE5LDkgQEAgc3RhdGljIGludCBldG5hdml2X21tdV9zaG93KHN0cnVj dCBldG5hdml2X2dwdSAqZ3B1LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4gIAo+ICAJc2VxX3ByaW50 ZihtLCAiQWN0aXZlIE9iamVjdHMgKCVzKTpcbiIsIGRldl9uYW1lKGdwdS0+ZGV2KSk7Cj4gIAo+ IC0JbXV0ZXhfbG9jaygmZ3B1LT5tbXUtPmxvY2spOwo+IC0JZHJtX21tX3ByaW50KCZncHUtPm1t dS0+bW0sICZwKTsKPiAtCW11dGV4X3VubG9jaygmZ3B1LT5tbXUtPmxvY2spOwo+ICsJbXV0ZXhf bG9jaygmZ3B1LT5tbXVfY29udGV4dC0+bG9jayk7Cj4gKwlkcm1fbW1fcHJpbnQoJmdwdS0+bW11 X2NvbnRleHQtPm1tLCAmcCk7Cj4gKwltdXRleF91bmxvY2soJmdwdS0+bW11X2NvbnRleHQtPmxv Y2spOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9ldG5hdml2L2V0bmF2aXZfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2 X2Rydi5oCj4gaW5kZXggZTA1MmQ3ZGI2NmFlLi41ZjhkYjA4ZjFjMTcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfZHJ2LmgKPiBAQCAtMjIsNiArMjIsNyBAQCBzdHJ1Y3QgZXRu YXZpdl9ncHU7Cj4gIHN0cnVjdCBldG5hdml2X21tdTsKPiAgc3RydWN0IGV0bmF2aXZfZ2VtX29i amVjdDsKPiAgc3RydWN0IGV0bmF2aXZfZ2VtX3N1Ym1pdDsKPiArc3RydWN0IGV0bmF2aXZfaW9t bXVfZ2xvYmFsOwo+ICAKPiAgc3RydWN0IGV0bmF2aXZfZmlsZV9wcml2YXRlIHsKPiAgCS8qCj4g QEAgLTM3LDYgKzM4LDcgQEAgc3RydWN0IGV0bmF2aXZfZHJtX3ByaXZhdGUgewo+ICAJc3RydWN0 IGV0bmF2aXZfZ3B1ICpncHVbRVROQV9NQVhfUElQRVNdOwo+ICAKPiAgCXN0cnVjdCBldG5hdml2 X2NtZGJ1Zl9zdWJhbGxvYyAqY21kYnVmX3N1YmFsbG9jOwo+ICsJc3RydWN0IGV0bmF2aXZfaW9t bXVfZ2xvYmFsICptbXVfZ2xvYmFsOwo+ICAKPiAgCS8qIGxpc3Qgb2YgR0VNIG9iamVjdHM6ICov Cj4gIAlzdHJ1Y3QgbXV0ZXggZ2VtX2xvY2s7Cj4gQEAgLTY5LDcgKzcxLDcgQEAgaW50IGV0bmF2 aXZfZ2VtX25ld191c2VycHRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSwKPiAgCXVpbnRwdHJfdCBwdHIsIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAqaGFu ZGxlKTsKPiAgdTE2IGV0bmF2aXZfYnVmZmVyX2luaXQoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUp Owo+ICB1MTYgZXRuYXZpdl9idWZmZXJfY29uZmlnX21tdXYyKHN0cnVjdCBldG5hdml2X2dwdSAq Z3B1LCB1MzIgbXRsYl9hZGRyLCB1MzIgc2FmZV9hZGRyKTsKPiAtdTE2IGV0bmF2aXZfYnVmZmVy X2NvbmZpZ19wdGEoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpOwo+ICt1MTYgZXRuYXZpdl9idWZm ZXJfY29uZmlnX3B0YShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSwgdW5zaWduZWQgc2hvcnQgaWQp Owo+ICB2b2lkIGV0bmF2aXZfYnVmZmVyX2VuZChzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSk7Cj4g IHZvaWQgZXRuYXZpdl9zeW5jX3BvaW50X3F1ZXVlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LCB1 bnNpZ25lZCBpbnQgZXZlbnQpOwo+ICB2b2lkIGV0bmF2aXZfYnVmZmVyX3F1ZXVlKHN0cnVjdCBl dG5hdml2X2dwdSAqZ3B1LCB1MzIgZXhlY19zdGF0ZSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kdW1wLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X2R1bXAuYwo+IGluZGV4IDJjZTYwYmFhNGFkOS4uN2U2NzkxNTE3NjkzIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZHVtcC5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9kdW1wLmMKPiBAQCAtOTMsNyArOTMsNyBAQCBz dGF0aWMgdm9pZCBldG5hdml2X2NvcmVfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGNvcmVfZHVtcF9p dGVyYXRvciAqaXRlciwKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgZXRuYXZpdl9jb3JlX2R1bXBf bW11KHN0cnVjdCBjb3JlX2R1bXBfaXRlcmF0b3IgKml0ZXIsCj4gLQlzdHJ1Y3QgZXRuYXZpdl9p b21tdSAqbW11LCBzaXplX3QgbW11X3NpemUpCj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250 ZXh0ICptbXUsIHNpemVfdCBtbXVfc2l6ZSkKPiAgewo+ICAJZXRuYXZpdl9pb21tdV9kdW1wKG1t dSwgaXRlci0+ZGF0YSk7Cj4gIAo+IEBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBldG5hdml2X2Nv cmVfZHVtcChzdHJ1Y3QgZXRuYXZpdl9nZW1fc3VibWl0ICpzdWJtaXQpCj4gIAkJcmV0dXJuOwo+ ICAJZXRuYXZpdl9kdW1wX2NvcmUgPSBmYWxzZTsKPiAgCj4gLQltdXRleF9sb2NrKCZncHUtPm1t dS0+bG9jayk7Cj4gKwltdXRleF9sb2NrKCZncHUtPm1tdV9jb250ZXh0LT5sb2NrKTsKPiAgCj4g LQltbXVfc2l6ZSA9IGV0bmF2aXZfaW9tbXVfZHVtcF9zaXplKGdwdS0+bW11KTsKPiArCW1tdV9z aXplID0gZXRuYXZpdl9pb21tdV9kdW1wX3NpemUoZ3B1LT5tbXVfY29udGV4dCk7Cj4gIAo+ICAJ LyogV2UgYWx3YXlzIGR1bXAgcmVnaXN0ZXJzLCBtbXUsIHJpbmcsIGhhbmdpbmcgY21kYnVmIGFu ZCBlbmQgbWFya2VyICovCj4gIAluX29iaiA9IDU7Cj4gQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lk IGV0bmF2aXZfY29yZV9kdW1wKHN0cnVjdCBldG5hdml2X2dlbV9zdWJtaXQgKnN1Ym1pdCkKPiAg CWl0ZXIuc3RhcnQgPSBfX3ZtYWxsb2MoZmlsZV9zaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9X QVJOIHwgX19HRlBfTk9SRVRSWSwKPiAgCQkJICAgICAgIFBBR0VfS0VSTkVMKTsKPiAgCWlmICgh aXRlci5zdGFydCkgewo+IC0JCW11dGV4X3VubG9jaygmZ3B1LT5tbXUtPmxvY2spOwo+ICsJCW11 dGV4X3VubG9jaygmZ3B1LT5tbXVfY29udGV4dC0+bG9jayk7Cj4gIAkJZGV2X3dhcm4oZ3B1LT5k ZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZGV2Y29yZWR1bXAgZmlsZVxuIik7Cj4gIAkJcmV0dXJu Owo+ICAJfQo+IEBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBldG5hdml2X2NvcmVfZHVtcChzdHJ1 Y3QgZXRuYXZpdl9nZW1fc3VibWl0ICpzdWJtaXQpCj4gIAltZW1zZXQoaXRlci5oZHIsIDAsIGl0 ZXIuZGF0YSAtIGl0ZXIuc3RhcnQpOwo+ICAKPiAgCWV0bmF2aXZfY29yZV9kdW1wX3JlZ2lzdGVy cygmaXRlciwgZ3B1KTsKPiAtCWV0bmF2aXZfY29yZV9kdW1wX21tdSgmaXRlciwgZ3B1LT5tbXUs IG1tdV9zaXplKTsKPiArCWV0bmF2aXZfY29yZV9kdW1wX21tdSgmaXRlciwgZ3B1LT5tbXVfY29u dGV4dCwgbW11X3NpemUpOwo+ICAJZXRuYXZpdl9jb3JlX2R1bXBfbWVtKCZpdGVyLCBFVERVTVBf QlVGX1JJTkcsIGdwdS0+YnVmZmVyLnZhZGRyLAo+ICAJCQkgICAgICBncHUtPmJ1ZmZlci5zaXpl LAo+ICAJCQkgICAgICBldG5hdml2X2NtZGJ1Zl9nZXRfdmEoJmdwdS0+YnVmZmVyLAo+IEBAIC0y MjEsNyArMjIxLDcgQEAgdm9pZCBldG5hdml2X2NvcmVfZHVtcChzdHJ1Y3QgZXRuYXZpdl9nZW1f c3VibWl0ICpzdWJtaXQpCj4gIAkJCQkJIG9iai0+YmFzZS5zaXplKTsKPiAgCX0KPiAgCj4gLQlt dXRleF91bmxvY2soJmdwdS0+bW11LT5sb2NrKTsKPiArCW11dGV4X3VubG9jaygmZ3B1LT5tbXVf Y29udGV4dC0+bG9jayk7Cj4gIAo+ICAJZXRuYXZpdl9jb3JlX2R1bXBfaGVhZGVyKCZpdGVyLCBF VERVTVBfQlVGX0VORCwgaXRlci5kYXRhKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5h dml2X2dlbS5jCj4gaW5kZXggZTE5OWE2ODMzZmYwLi4wY2NjM2M0ZGZmYzQgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKPiBAQCAtMjIzLDEyICsyMjMsMTIgQEAgaW50 IGV0bmF2aXZfZ2VtX21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1NjQg Km9mZnNldCkKPiAgCj4gIHN0YXRpYyBzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmcgKgo+ICBl dG5hdml2X2dlbV9nZXRfdnJhbV9tYXBwaW5nKHN0cnVjdCBldG5hdml2X2dlbV9vYmplY3QgKm9i aiwKPiAtCQkJICAgICBzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11KQo+ICsJCQkgICAgIHN0cnVj dCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCj4gIHsKPiAgCXN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZyAqbWFwcGluZzsKPiAgCj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcHBp bmcsICZvYmotPnZyYW1fbGlzdCwgb2JqX25vZGUpIHsKPiAtCQlpZiAobWFwcGluZy0+bW11ID09 IG1tdSkKPiArCQlpZiAobWFwcGluZy0+Y29udGV4dCA9PSBjb250ZXh0KQo+ICAJCQlyZXR1cm4g bWFwcGluZzsKPiAgCX0KPiAgCj4gQEAgLTI1Niw3ICsyNTYsNyBAQCBzdHJ1Y3QgZXRuYXZpdl92 cmFtX21hcHBpbmcgKmV0bmF2aXZfZ2VtX21hcHBpbmdfZ2V0KAo+ICAJaW50IHJldCA9IDA7Cj4g IAo+ICAJbXV0ZXhfbG9jaygmZXRuYXZpdl9vYmotPmxvY2spOwo+IC0JbWFwcGluZyA9IGV0bmF2 aXZfZ2VtX2dldF92cmFtX21hcHBpbmcoZXRuYXZpdl9vYmosIGdwdS0+bW11KTsKPiArCW1hcHBp bmcgPSBldG5hdml2X2dlbV9nZXRfdnJhbV9tYXBwaW5nKGV0bmF2aXZfb2JqLCBncHUtPm1tdV9j b250ZXh0KTsKPiAgCWlmIChtYXBwaW5nKSB7Cj4gIAkJLyoKPiAgCQkgKiBIb2xkaW5nIHRoZSBv YmplY3QgbG9jayBwcmV2ZW50cyB0aGUgdXNlIGNvdW50IGNoYW5naW5nCj4gQEAgLTI2NSwxMiAr MjY1LDEyIEBAIHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqZXRuYXZpdl9nZW1fbWFwcGlu Z19nZXQoCj4gIAkJICogdGhlIE1NVSBvd25zIHRoaXMgbWFwcGluZyB0byBjbG9zZSB0aGlzIHJh Y2UuCj4gIAkJICovCj4gIAkJaWYgKG1hcHBpbmctPnVzZSA9PSAwKSB7Cj4gLQkJCW11dGV4X2xv Y2soJmdwdS0+bW11LT5sb2NrKTsKPiAtCQkJaWYgKG1hcHBpbmctPm1tdSA9PSBncHUtPm1tdSkK PiArCQkJbXV0ZXhfbG9jaygmZ3B1LT5tbXVfY29udGV4dC0+bG9jayk7Cj4gKwkJCWlmIChtYXBw aW5nLT5jb250ZXh0ID09IGdwdS0+bW11X2NvbnRleHQpCj4gIAkJCQltYXBwaW5nLT51c2UgKz0g MTsKPiAgCQkJZWxzZQo+ICAJCQkJbWFwcGluZyA9IE5VTEw7Cj4gLQkJCW11dGV4X3VubG9jaygm Z3B1LT5tbXUtPmxvY2spOwo+ICsJCQltdXRleF91bmxvY2soJmdwdS0+bW11X2NvbnRleHQtPmxv Y2spOwo+ICAJCQlpZiAobWFwcGluZykKPiAgCQkJCWdvdG8gb3V0Owo+ICAJCX0gZWxzZSB7Cj4g QEAgLTMwMywxMSArMzAzLDExIEBAIHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAqZXRuYXZp dl9nZW1fbWFwcGluZ19nZXQoCj4gIAkJbGlzdF9kZWwoJm1hcHBpbmctPm9ial9ub2RlKTsKPiAg CX0KPiAgCj4gLQltYXBwaW5nLT5tbXUgPSBncHUtPm1tdTsKPiArCW1hcHBpbmctPmNvbnRleHQg PSBncHUtPm1tdV9jb250ZXh0Owo+ICAJbWFwcGluZy0+dXNlID0gMTsKPiAgCj4gLQlyZXQgPSBl dG5hdml2X2lvbW11X21hcF9nZW0oZ3B1LT5tbXUsIGV0bmF2aXZfb2JqLCBncHUtPm1lbW9yeV9i YXNlLAo+IC0JCQkJICAgIG1hcHBpbmcpOwo+ICsJcmV0ID0gZXRuYXZpdl9pb21tdV9tYXBfZ2Vt KGdwdS0+bW11X2NvbnRleHQsIGV0bmF2aXZfb2JqLAo+ICsJCQkJICAgIGdwdS0+bWVtb3J5X2Jh c2UsIG1hcHBpbmcpOwo+ICAJaWYgKHJldCA8IDApCj4gIAkJa2ZyZWUobWFwcGluZyk7Cj4gIAll bHNlCj4gQEAgLTUyNSwxMiArNTI1LDEyIEBAIHZvaWQgZXRuYXZpdl9nZW1fZnJlZV9vYmplY3Qo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gIAo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKG1hcHBpbmcsIHRtcCwgJmV0bmF2aXZfb2JqLT52cmFtX2xpc3QsCj4gIAkJCQkgb2JqX25v ZGUpIHsKPiAtCQlzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11ID0gbWFwcGluZy0+bW11Owo+ICsJ CXN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQgPSBtYXBwaW5nLT5jb250ZXh0 Owo+ICAKPiAgCQlXQVJOX09OKG1hcHBpbmctPnVzZSk7Cj4gIAo+IC0JCWlmIChtbXUpCj4gLQkJ CWV0bmF2aXZfaW9tbXVfdW5tYXBfZ2VtKG1tdSwgbWFwcGluZyk7Cj4gKwkJaWYgKGNvbnRleHQp Cj4gKwkJCWV0bmF2aXZfaW9tbXVfdW5tYXBfZ2VtKGNvbnRleHQsIG1hcHBpbmcpOwo+ICAKPiAg CQlsaXN0X2RlbCgmbWFwcGluZy0+b2JqX25vZGUpOwo+ICAJCWtmcmVlKG1hcHBpbmcpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5oIGIvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uaAo+IGluZGV4IGQ3ZDhhODM1ZjM3OS4uNWEw MDRkNWU0ZWFhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZf Z2VtLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5oCj4gQEAg LTI1LDcgKzI1LDcgQEAgc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nIHsKPiAgCXN0cnVjdCBs aXN0X2hlYWQgc2Nhbl9ub2RlOwo+ICAJc3RydWN0IGxpc3RfaGVhZCBtbXVfbm9kZTsKPiAgCXN0 cnVjdCBldG5hdml2X2dlbV9vYmplY3QgKm9iamVjdDsKPiAtCXN0cnVjdCBldG5hdml2X2lvbW11 ICptbXU7Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0Owo+ICAJc3Ry dWN0IGRybV9tbV9ub2RlIHZyYW1fbm9kZTsKPiAgCXVuc2lnbmVkIGludCB1c2U7Cj4gIAl1MzIg aW92YTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9ncHUu YyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ3B1LmMKPiBpbmRleCAxNzliYzZj NTQ0Y2EuLjg4NWNhOGY5MjMzOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZp di9ldG5hdml2X2dwdS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9n cHUuYwo+IEBAIC02ODEsNyArNjgxLDcgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9ncHVfaHdfaW5p dChzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKPiAgCWV0bmF2aXZfZ3B1X3NldHVwX3B1bHNlX2Vh dGVyKGdwdSk7Cj4gIAo+ICAJLyogc2V0dXAgdGhlIE1NVSAqLwo+IC0JZXRuYXZpdl9pb21tdV9y ZXN0b3JlKGdwdSk7Cj4gKwlldG5hdml2X2lvbW11X3Jlc3RvcmUoZ3B1LCBncHUtPm1tdV9jb250 ZXh0KTsKPiAgCj4gIAkvKiBTdGFydCBjb21tYW5kIHByb2Nlc3NvciAqLwo+ICAJcHJlZmV0Y2gg PSBldG5hdml2X2J1ZmZlcl9pbml0KGdwdSk7Cj4gQEAgLTc1NCwxNCArNzU0LDE5IEBAIGludCBl dG5hdml2X2dwdV9pbml0KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQo+ICAJCWdvdG8gZmFpbDsK PiAgCX0KPiAgCj4gLQlncHUtPm1tdSA9IGV0bmF2aXZfaW9tbXVfbmV3KGdwdSk7Cj4gLQlpZiAo SVNfRVJSKGdwdS0+bW11KSkgewo+IC0JCWRldl9lcnIoZ3B1LT5kZXYsICJGYWlsZWQgdG8gaW5z dGFudGlhdGUgR1BVIElPTU1VXG4iKTsKPiAtCQlyZXQgPSBQVFJfRVJSKGdwdS0+bW11KTsKPiAr CXJldCA9IGV0bmF2aXZfaW9tbXVfZ2xvYmFsX2luaXQoZ3B1KTsKPiArCWlmIChyZXQpCj4gIAkJ Z290byBmYWlsOwo+ICsKPiArCWdwdS0+bW11X2NvbnRleHQgPSBldG5hdml2X2lvbW11X2NvbnRl eHRfaW5pdChwcml2LT5tbXVfZ2xvYmFsKTsKPiArCWlmIChJU19FUlIoZ3B1LT5tbXVfY29udGV4 dCkpIHsKPiArCQlkZXZfZXJyKGdwdS0+ZGV2LCAiRmFpbGVkIHRvIGluc3RhbnRpYXRlIEdQVSBJ T01NVVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihncHUtPm1tdV9jb250ZXh0KTsKPiArCQlnb3Rv IGlvbW11X2dsb2JhbF9maW5pOwo+ICAJfQo+ICAKPiAtCXJldCA9IGV0bmF2aXZfY21kYnVmX3N1 YmFsbG9jX21hcChwcml2LT5jbWRidWZfc3ViYWxsb2MsIGdwdS0+bW11LAo+ICsJcmV0ID0gZXRu YXZpdl9jbWRidWZfc3ViYWxsb2NfbWFwKHByaXYtPmNtZGJ1Zl9zdWJhbGxvYywKPiArCQkJCQkg IGdwdS0+bW11X2NvbnRleHQsCj4gIAkJCQkJICAmZ3B1LT5jbWRidWZfbWFwcGluZywKPiAgCQkJ CQkgIGdwdS0+bWVtb3J5X2Jhc2UpOwo+ICAJaWYgKHJldCkgewo+IEBAIC03NzcsNyArNzgyLDcg QEAgaW50IGV0bmF2aXZfZ3B1X2luaXQoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCj4gIAkJZ290 byB1bm1hcF9zdWJhbGxvYzsKPiAgCX0KPiAgCj4gLQlpZiAoZ3B1LT5tbXUtPnZlcnNpb24gPT0g RVROQVZJVl9JT01NVV9WMSAmJgo+ICsJaWYgKCEoZ3B1LT5pZGVudGl0eS5taW5vcl9mZWF0dXJl czEgJiBjaGlwTWlub3JGZWF0dXJlczFfTU1VX1ZFUlNJT04pICYmCj4gIAkgICAgZXRuYXZpdl9j bWRidWZfZ2V0X3ZhKCZncHUtPmJ1ZmZlciwgJmdwdS0+Y21kYnVmX21hcHBpbmcpID4gMHg4MDAw MDAwMCkgewo+ICAJCXJldCA9IC1FSU5WQUw7Cj4gIAkJZGV2X2VycihncHUtPmRldiwKPiBAQCAt ODA4LDkgKzgxMywxMSBAQCBpbnQgZXRuYXZpdl9ncHVfaW5pdChzdHJ1Y3QgZXRuYXZpdl9ncHUg KmdwdSkKPiAgZnJlZV9idWZmZXI6Cj4gIAlldG5hdml2X2NtZGJ1Zl9mcmVlKCZncHUtPmJ1ZmZl cik7Cj4gIHVubWFwX3N1YmFsbG9jOgo+IC0JZXRuYXZpdl9jbWRidWZfc3ViYWxsb2NfdW5tYXAo Z3B1LT5tbXUsICZncHUtPmNtZGJ1Zl9tYXBwaW5nKTsKPiArCWV0bmF2aXZfY21kYnVmX3N1YmFs bG9jX3VubWFwKGdwdS0+bW11X2NvbnRleHQsICZncHUtPmNtZGJ1Zl9tYXBwaW5nKTsKPiAgZGVz dHJveV9pb21tdToKPiAtCWV0bmF2aXZfaW9tbXVfZGVzdHJveShncHUtPm1tdSk7Cj4gKwlldG5h dml2X2lvbW11X2NvbnRleHRfcHV0KGdwdS0+bW11X2NvbnRleHQpOwo+ICtpb21tdV9nbG9iYWxf ZmluaToKPiArCWV0bmF2aXZfaW9tbXVfZ2xvYmFsX2ZpbmkoZ3B1KTsKPiAgZmFpbDoKPiAgCXBt X3J1bnRpbWVfbWFya19sYXN0X2J1c3koZ3B1LT5kZXYpOwo+ICAJcG1fcnVudGltZV9wdXRfYXV0 b3N1c3BlbmQoZ3B1LT5kZXYpOwo+IEBAIC0xNjgzLDggKzE2OTAsMTAgQEAgc3RhdGljIHZvaWQg ZXRuYXZpdl9ncHVfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz dGVyLAo+ICAKPiAgCWlmIChncHUtPmluaXRpYWxpemVkKSB7Cj4gIAkJZXRuYXZpdl9jbWRidWZf ZnJlZSgmZ3B1LT5idWZmZXIpOwo+IC0JCWV0bmF2aXZfY21kYnVmX3N1YmFsbG9jX3VubWFwKGdw dS0+bW11LCAmZ3B1LT5jbWRidWZfbWFwcGluZyk7Cj4gLQkJZXRuYXZpdl9pb21tdV9kZXN0cm95 KGdwdS0+bW11KTsKPiArCQlldG5hdml2X2NtZGJ1Zl9zdWJhbGxvY191bm1hcChncHUtPm1tdV9j b250ZXh0LAo+ICsJCQkJCSAgICAgICZncHUtPmNtZGJ1Zl9tYXBwaW5nKTsKPiArCQlldG5hdml2 X2lvbW11X2NvbnRleHRfcHV0KGdwdS0+bW11X2NvbnRleHQpOwo+ICsJCWV0bmF2aXZfaW9tbXVf Z2xvYmFsX2ZpbmkoZ3B1KTsKPiAgCQlncHUtPmluaXRpYWxpemVkID0gZmFsc2U7Cj4gIAl9Cj4g IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5oIGIv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9ncHUuaAo+IGluZGV4IDk2MzgwOTQyY2Q4 Yy4uYzBiZDYwMThkNTNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0 bmF2aXZfZ3B1LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dwdS5o Cj4gQEAgLTgsNiArOCw3IEBACj4gIAo+ICAjaW5jbHVkZSAiZXRuYXZpdl9jbWRidWYuaCIKPiAg I2luY2x1ZGUgImV0bmF2aXZfZ2VtLmgiCj4gKyNpbmNsdWRlICJldG5hdml2X21tdS5oIgo+ICAj aW5jbHVkZSAiZXRuYXZpdl9kcnYuaCIKPiAgCj4gIHN0cnVjdCBldG5hdml2X2dlbV9zdWJtaXQ7 Cj4gQEAgLTEzNiw3ICsxMzcsNyBAQCBzdHJ1Y3QgZXRuYXZpdl9ncHUgewo+ICAJdm9pZCBfX2lv bWVtICptbWlvOwo+ICAJaW50IGlycTsKPiAgCj4gLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11 Owo+ICsJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqbW11X2NvbnRleHQ7Cj4gIAl1bnNp Z25lZCBpbnQgZmx1c2hfc2VxOwo+ICAKPiAgCS8qIFBvd2VyIENvbnRyb2w6ICovCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuYyBiL2RyaXZlcnMv Z3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuYwo+IGluZGV4IDE4YzYyN2M1Y2FlMS4uYTJm MWZmMTUxODIyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZf aW9tbXUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuYwo+ IEBAIC0xMSw3ICsxMSw2IEBACj4gIAo+ICAjaW5jbHVkZSAiZXRuYXZpdl9ncHUuaCIKPiAgI2lu Y2x1ZGUgImV0bmF2aXZfbW11LmgiCj4gLSNpbmNsdWRlICJldG5hdml2X2lvbW11LmgiCj4gICNp bmNsdWRlICJzdGF0ZV9oaS54bWwuaCIKPiAgCj4gICNkZWZpbmUgUFRfU0laRQkJU1pfMk0KPiBA QCAtMTksMTEzICsxOCw3OCBAQAo+ICAKPiAgI2RlZmluZSBHUFVfTUVNX1NUQVJUCTB4ODAwMDAw MDAKPiAgCj4gLXN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluIHsKPiAtCXN0cnVjdCBldG5h dml2X2lvbW11X2RvbWFpbiBiYXNlOwo+ICtzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2NvbnRleHQg ewo+ICsJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCBiYXNlOwo+ICAJdTMyICpwZ3RhYmxl X2NwdTsKPiAgCWRtYV9hZGRyX3QgcGd0YWJsZV9kbWE7Cj4gIH07Cj4gIAo+IC1zdGF0aWMgc3Ry dWN0IGV0bmF2aXZfaW9tbXV2MV9kb21haW4gKgo+IC10b19ldG5hdml2X2RvbWFpbihzdHJ1Y3Qg ZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKPiArc3RhdGljIHN0cnVjdCBldG5hdml2X2lv bW11djFfY29udGV4dCAqCj4gK3RvX3YxX2NvbnRleHQoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29u dGV4dCAqY29udGV4dCkKPiAgewo+IC0JcmV0dXJuIGNvbnRhaW5lcl9vZihkb21haW4sIHN0cnVj dCBldG5hdml2X2lvbW11djFfZG9tYWluLCBiYXNlKTsKPiArCXJldHVybiBjb250YWluZXJfb2Yo Y29udGV4dCwgc3RydWN0IGV0bmF2aXZfaW9tbXV2MV9jb250ZXh0LCBiYXNlKTsKPiAgfQo+ICAK PiAtc3RhdGljIGludCBfX2V0bmF2aXZfaW9tbXVfaW5pdChzdHJ1Y3QgZXRuYXZpdl9pb21tdXYx X2RvbWFpbiAqZXRuYXZpdl9kb21haW4pCj4gK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2MV9m cmVlKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCj4gIHsKPiAtCXUzMiAq cDsKPiAtCWludCBpOwo+IC0KPiAtCWV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2NwdSA9 Cj4gLQkJCWRtYV9hbGxvY193YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAo+IC0J CQkJICAgICAmZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hLAo+IC0JCQkJICAgICBH RlBfS0VSTkVMKTsKPiAtCWlmICghZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1KQo+ IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXAgPSBldG5hdml2X2RvbWFpbi0+YmFzZS5iYWRf cGFnZV9jcHU7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgU1pfNEsgLyA0OyBpKyspCj4gLQkJKnArKyA9 IDB4ZGVhZDU1YWE7Cj4gLQo+IC0JZXRuYXZpdl9kb21haW4tPnBndGFibGVfY3B1ID0gZG1hX2Fs bG9jX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwKPiAtCQkJCQkJICAgUFRfU0laRSwKPiAt CQkJCQkJICAgJmV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2RtYSwKPiAtCQkJCQkJICAgR0ZQX0tF Uk5FTCk7Cj4gLQlpZiAoIWV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2NwdSkgewo+IC0JCWRtYV9m cmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgU1pfNEssCj4gLQkJCSAgICBldG5hdml2 X2RvbWFpbi0+YmFzZS5iYWRfcGFnZV9jcHUsCj4gLQkJCSAgICBldG5hdml2X2RvbWFpbi0+YmFz ZS5iYWRfcGFnZV9kbWEpOwo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0JfQo+IC0KPiAtCW1lbXNl dDMyKGV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2NwdSwgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFk X3BhZ2VfZG1hLAo+IC0JCSBQVF9FTlRSSUVTKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ICsJ c3RydWN0IGV0bmF2aXZfaW9tbXV2MV9jb250ZXh0ICp2MV9jb250ZXh0ID0gdG9fdjFfY29udGV4 dChjb250ZXh0KTsKPiAgCj4gLXN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2MV9kb21haW5fZnJl ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKPiAtewo+IC0Jc3RydWN0IGV0 bmF2aXZfaW9tbXV2MV9kb21haW4gKmV0bmF2aXZfZG9tYWluID0KPiAtCQkJdG9fZXRuYXZpdl9k b21haW4oZG9tYWluKTsKPiArCWRybV9tbV90YWtlZG93bigmY29udGV4dC0+bW0pOwo+ICAKPiAt CWRtYV9mcmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgUFRfU0laRSwKPiAtCQkgICAg ZXRuYXZpdl9kb21haW4tPnBndGFibGVfY3B1LCBldG5hdml2X2RvbWFpbi0+cGd0YWJsZV9kbWEp Owo+ICsJZG1hX2ZyZWVfd2MoY29udGV4dC0+Z2xvYmFsLT5kZXYsIFBUX1NJWkUsIHYxX2NvbnRl eHQtPnBndGFibGVfY3B1LAo+ICsJCSAgICB2MV9jb250ZXh0LT5wZ3RhYmxlX2RtYSk7Cj4gIAo+ IC0JZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJhc2UuZGV2LCBTWl80SywKPiAtCQkgICAg ZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1LAo+IC0JCSAgICBldG5hdml2X2RvbWFp bi0+YmFzZS5iYWRfcGFnZV9kbWEpOwo+ICsJY29udGV4dC0+Z2xvYmFsLT52MS5zaGFyZWRfY29u dGV4dCA9IE5VTEw7Cj4gIAo+IC0Ja2ZyZWUoZXRuYXZpdl9kb21haW4pOwo+ICsJa2ZyZWUodjFf Y29udGV4dCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdXYxX21hcChzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKPiArc3RhdGljIGludCBldG5hdml2X2lv bW11djFfbWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCj4gIAkJCSAg ICAgICB1bnNpZ25lZCBsb25nIGlvdmEsIHBoeXNfYWRkcl90IHBhZGRyLAo+ICAJCQkgICAgICAg c2l6ZV90IHNpemUsIGludCBwcm90KQo+ICB7Cj4gLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2Rv bWFpbiAqZXRuYXZpdl9kb21haW4gPSB0b19ldG5hdml2X2RvbWFpbihkb21haW4pOwo+ICsJc3Ry dWN0IGV0bmF2aXZfaW9tbXV2MV9jb250ZXh0ICp2MV9jb250ZXh0ID0gdG9fdjFfY29udGV4dChj b250ZXh0KTsKPiAgCXVuc2lnbmVkIGludCBpbmRleCA9IChpb3ZhIC0gR1BVX01FTV9TVEFSVCkg LyBTWl80SzsKPiAgCj4gIAlpZiAoc2l6ZSAhPSBTWl80SykKPiAgCQlyZXR1cm4gLUVJTlZBTDsK PiAgCj4gLQlldG5hdml2X2RvbWFpbi0+cGd0YWJsZV9jcHVbaW5kZXhdID0gcGFkZHI7Cj4gKwl2 MV9jb250ZXh0LT5wZ3RhYmxlX2NwdVtpbmRleF0gPSBwYWRkcjsKPiAgCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiAtc3RhdGljIHNpemVfdCBldG5hdml2X2lvbW11djFfdW5tYXAoc3RydWN0IGV0 bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW4sCj4gK3N0YXRpYyBzaXplX3QgZXRuYXZpdl9pb21t dXYxX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCj4gIAl1bnNp Z25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplKQo+ICB7Cj4gLQlzdHJ1Y3QgZXRuYXZpdl9pb21t dXYxX2RvbWFpbiAqZXRuYXZpdl9kb21haW4gPQo+IC0JCQl0b19ldG5hdml2X2RvbWFpbihkb21h aW4pOwo+ICsJc3RydWN0IGV0bmF2aXZfaW9tbXV2MV9jb250ZXh0ICp2MV9jb250ZXh0ID0gdG9f djFfY29udGV4dChjb250ZXh0KTsKPiAgCXVuc2lnbmVkIGludCBpbmRleCA9IChpb3ZhIC0gR1BV X01FTV9TVEFSVCkgLyBTWl80SzsKPiAgCj4gIAlpZiAoc2l6ZSAhPSBTWl80SykKPiAgCQlyZXR1 cm4gLUVJTlZBTDsKPiAgCj4gLQlldG5hdml2X2RvbWFpbi0+cGd0YWJsZV9jcHVbaW5kZXhdID0g ZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hOwo+ICsJdjFfY29udGV4dC0+cGd0YWJs ZV9jcHVbaW5kZXhdID0gY29udGV4dC0+Z2xvYmFsLT5iYWRfcGFnZV9kbWE7Cj4gIAo+ICAJcmV0 dXJuIFNaXzRLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc2l6ZV90IGV0bmF2aXZfaW9tbXV2MV9kdW1w X3NpemUoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21haW4pCj4gK3N0YXRpYyBzaXpl X3QgZXRuYXZpdl9pb21tdXYxX2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0 ICpjb250ZXh0KQo+ICB7Cj4gIAlyZXR1cm4gUFRfU0laRTsKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQgZXRuYXZpdl9pb21tdXYxX2R1bXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICpkb21h aW4sIHZvaWQgKmJ1ZikKPiArc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYxX2R1bXAoc3RydWN0 IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiArCQkJCSB2b2lkICpidWYpCj4gIHsK PiAtCXN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Cj4gLQkJ CXRvX2V0bmF2aXZfZG9tYWluKGRvbWFpbik7Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYxX2Nv bnRleHQgKnYxX2NvbnRleHQgPSB0b192MV9jb250ZXh0KGNvbnRleHQpOwo+ICAKPiAtCW1lbWNw eShidWYsIGV0bmF2aXZfZG9tYWluLT5wZ3RhYmxlX2NwdSwgUFRfU0laRSk7Cj4gKwltZW1jcHko YnVmLCB2MV9jb250ZXh0LT5wZ3RhYmxlX2NwdSwgUFRfU0laRSk7Cj4gIH0KPiAgCj4gLXZvaWQg ZXRuYXZpdl9pb21tdXYxX3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCj4gK3N0YXRp YyB2b2lkIGV0bmF2aXZfaW9tbXV2MV9yZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAo+ ICsJCQkgICAgIHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCj4gIHsKPiAt CXN0cnVjdCBldG5hdml2X2lvbW11djFfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Cj4gLQkJCXRv X2V0bmF2aXZfZG9tYWluKGdwdS0+bW11LT5kb21haW4pOwo+ICsJc3RydWN0IGV0bmF2aXZfaW9t bXV2MV9jb250ZXh0ICp2MV9jb250ZXh0ID0gdG9fdjFfY29udGV4dChjb250ZXh0KTsKPiAgCXUz MiBwZ3RhYmxlOwo+ICAKPiAgCS8qIHNldCBiYXNlIGFkZHJlc3NlcyAqLwo+IEBAIC0xMzYsNyAr MTAwLDcgQEAgdm9pZCBldG5hdml2X2lvbW11djFfcmVzdG9yZShzdHJ1Y3QgZXRuYXZpdl9ncHUg KmdwdSkKPiAgCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTUVNT1JZX0JBU0VfQUREUl9QRSwgZ3B1 LT5tZW1vcnlfYmFzZSk7Cj4gIAo+ICAJLyogc2V0IHBhZ2UgdGFibGUgYWRkcmVzcyBpbiBNQyAq Lwo+IC0JcGd0YWJsZSA9ICh1MzIpZXRuYXZpdl9kb21haW4tPnBndGFibGVfZG1hOwo+ICsJcGd0 YWJsZSA9ICh1MzIpdjFfY29udGV4dC0+cGd0YWJsZV9kbWE7Cj4gIAo+ICAJZ3B1X3dyaXRlKGdw dSwgVklWU19NQ19NTVVfRkVfUEFHRV9UQUJMRSwgcGd0YWJsZSk7Cj4gIAlncHVfd3JpdGUoZ3B1 LCBWSVZTX01DX01NVV9UWF9QQUdFX1RBQkxFLCBwZ3RhYmxlKTsKPiBAQCAtMTQ1LDM5ICsxMDks NjIgQEAgdm9pZCBldG5hdml2X2lvbW11djFfcmVzdG9yZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdw dSkKPiAgCWdwdV93cml0ZShncHUsIFZJVlNfTUNfTU1VX1JBX1BBR0VfVEFCTEUsIHBndGFibGUp Owo+ICB9Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluX29w cyBldG5hdml2X2lvbW11djFfb3BzID0gewo+IC0JLmZyZWUgPSBldG5hdml2X2lvbW11djFfZG9t YWluX2ZyZWUsCj4gKwo+ICtjb25zdCBzdHJ1Y3QgZXRuYXZpdl9pb21tdV9vcHMgZXRuYXZpdl9p b21tdXYxX29wcyA9IHsKPiArCS5mcmVlID0gZXRuYXZpdl9pb21tdXYxX2ZyZWUsCj4gIAkubWFw ID0gZXRuYXZpdl9pb21tdXYxX21hcCwKPiAgCS51bm1hcCA9IGV0bmF2aXZfaW9tbXV2MV91bm1h cCwKPiAgCS5kdW1wX3NpemUgPSBldG5hdml2X2lvbW11djFfZHVtcF9zaXplLAo+ICAJLmR1bXAg PSBldG5hdml2X2lvbW11djFfZHVtcCwKPiArCS5yZXN0b3JlID0gZXRuYXZpdl9pb21tdXYxX3Jl c3RvcmUsCj4gIH07Cj4gIAo+IC1zdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKgo+IC1ldG5h dml2X2lvbW11djFfZG9tYWluX2FsbG9jKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQo+ICtzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICoKPiArZXRuYXZpdl9pb21tdXYxX2NvbnRleHRfYWxs b2Moc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWwpCj4gIHsKPiAtCXN0cnVjdCBl dG5hdml2X2lvbW11djFfZG9tYWluICpldG5hdml2X2RvbWFpbjsKPiAtCXN0cnVjdCBldG5hdml2 X2lvbW11X2RvbWFpbiAqZG9tYWluOwo+IC0JaW50IHJldDsKPiArCXN0cnVjdCBldG5hdml2X2lv bW11djFfY29udGV4dCAqdjFfY29udGV4dDsKPiArCXN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRl eHQgKmNvbnRleHQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZ2xvYmFsLT5sb2NrKTsKPiArCj4gKwkv Kgo+ICsJICogTU1VdjEgZG9lcyBub3Qgc3VwcG9ydCBzd2l0Y2hpbmcgYmV0d2VlbiBkaWZmZXJl bnQgY29udGV4dHMgd2l0aG91dAo+ICsJICogYSBzdG9wIHRoZSB3b3JsZCBvcGVyYXRpb24sIHNv IHdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBzaGFyZWQKPiArCSAqIGNvbnRleHQgd2l0aCB0aGlz IHZlcnNpb24uCj4gKwkgKi8KPiArCWlmIChnbG9iYWwtPnYxLnNoYXJlZF9jb250ZXh0KSB7Cj4g KwkJY29udGV4dCA9IGdsb2JhbC0+djEuc2hhcmVkX2NvbnRleHQ7Cj4gKwkJZXRuYXZpdl9pb21t dV9jb250ZXh0X2dldChjb250ZXh0KTsKPiArCQltdXRleF91bmxvY2soJmdsb2JhbC0+bG9jayk7 Cj4gKwkJcmV0dXJuIGNvbnRleHQ7Cj4gKwl9Cj4gIAo+IC0JZXRuYXZpdl9kb21haW4gPSBremFs bG9jKHNpemVvZigqZXRuYXZpdl9kb21haW4pLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghZXRuYXZp dl9kb21haW4pCj4gKwl2MV9jb250ZXh0ID0ga3phbGxvYyhzaXplb2YoKnYxX2NvbnRleHQpLCBH RlBfS0VSTkVMKTsKPiArCWlmICghdjFfY29udGV4dCkKPiAgCQlyZXR1cm4gTlVMTDsKPiAgCj4g LQlkb21haW4gPSAmZXRuYXZpdl9kb21haW4tPmJhc2U7Cj4gKwl2MV9jb250ZXh0LT5wZ3RhYmxl X2NwdSA9IGRtYV9hbGxvY193YyhnbG9iYWwtPmRldiwgUFRfU0laRSwKPiArCQkJCQkgICAgICAg JnYxX2NvbnRleHQtPnBndGFibGVfZG1hLAo+ICsJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKPiAr CWlmICghdjFfY29udGV4dC0+cGd0YWJsZV9jcHUpCj4gKwkJZ290byBvdXRfZnJlZTsKPiAgCj4g LQlkb21haW4tPmRldiA9IGdwdS0+ZGV2Owo+IC0JZG9tYWluLT5iYXNlID0gR1BVX01FTV9TVEFS VDsKPiAtCWRvbWFpbi0+c2l6ZSA9IFBUX0VOVFJJRVMgKiBTWl80SzsKPiAtCWRvbWFpbi0+b3Bz ID0gJmV0bmF2aXZfaW9tbXV2MV9vcHM7Cj4gKwltZW1zZXQzMih2MV9jb250ZXh0LT5wZ3RhYmxl X2NwdSwgZ2xvYmFsLT5iYWRfcGFnZV9kbWEsIFBUX0VOVFJJRVMpOwo+ICAKPiAtCXJldCA9IF9f ZXRuYXZpdl9pb21tdV9pbml0KGV0bmF2aXZfZG9tYWluKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290 byBvdXRfZnJlZTsKPiArCWNvbnRleHQgPSAmdjFfY29udGV4dC0+YmFzZTsKPiArCWNvbnRleHQt Pmdsb2JhbCA9IGdsb2JhbDsKPiArCWtyZWZfaW5pdCgmY29udGV4dC0+cmVmY291bnQpOwo+ICsJ bXV0ZXhfaW5pdCgmY29udGV4dC0+bG9jayk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmY29udGV4dC0+ bWFwcGluZ3MpOwo+ICsJZHJtX21tX2luaXQoJmNvbnRleHQtPm1tLCBHUFVfTUVNX1NUQVJULCBQ VF9FTlRSSUVTICogU1pfNEspOwo+ICsJY29udGV4dC0+Z2xvYmFsLT52MS5zaGFyZWRfY29udGV4 dCA9IGNvbnRleHQ7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZnbG9iYWwtPmxvY2spOwo+ICAKPiAt CXJldHVybiAmZXRuYXZpdl9kb21haW4tPmJhc2U7Cj4gKwlyZXR1cm4gY29udGV4dDsKPiAgCj4g IG91dF9mcmVlOgo+IC0Ja2ZyZWUoZXRuYXZpdl9kb21haW4pOwo+ICsJbXV0ZXhfdW5sb2NrKCZn bG9iYWwtPmxvY2spOwo+ICsJa2ZyZWUodjFfY29udGV4dCk7Cj4gIAlyZXR1cm4gTlVMTDsKPiAg fQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lvbW11Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2lvbW11LmgKPiBkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCBiMjc5NDA0Y2U5MWEuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfaW9tbXUuaAo+ICsrKyAvZGV2L251bGwKPiBA QCAtMSwyMCArMCwwIEBACj4gLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov Cj4gLS8qCj4gLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE4IEV0bmF2aXYgUHJvamVjdAo+IC0g Ki8KPiAtCj4gLSNpZm5kZWYgX19FVE5BVklWX0lPTU1VX0hfXwo+IC0jZGVmaW5lIF9fRVROQVZJ Vl9JT01NVV9IX18KPiAtCj4gLXN0cnVjdCBldG5hdml2X2dwdTsKPiAtc3RydWN0IGV0bmF2aXZf aW9tbXVfZG9tYWluOwo+IC0KPiAtc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICoKPiAtZXRu YXZpdl9pb21tdXYxX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSk7Cj4gLXZv aWQgZXRuYXZpdl9pb21tdXYxX3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpOwo+IC0K PiAtc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWluICoKPiAtZXRuYXZpdl9pb21tdXYyX2RvbWFp bl9hbGxvYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSk7Cj4gLXZvaWQgZXRuYXZpdl9pb21tdXYy X3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpOwo+IC0KPiAtI2VuZGlmIC8qIF9fRVRO QVZJVl9JT01NVV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYv ZXRuYXZpdl9pb21tdV92Mi5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21t dV92Mi5jCj4gaW5kZXggZDdjYzE4NGRhNTcxLi41Y2EyMDc3YzE0OGQgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdV92Mi5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9pb21tdV92Mi5jCj4gQEAgLTEzLDcgKzEzLDYgQEAK PiAgI2luY2x1ZGUgImV0bmF2aXZfY21kYnVmLmgiCj4gICNpbmNsdWRlICJldG5hdml2X2dwdS5o Igo+ICAjaW5jbHVkZSAiZXRuYXZpdl9tbXUuaCIKPiAtI2luY2x1ZGUgImV0bmF2aXZfaW9tbXUu aCIKPiAgI2luY2x1ZGUgInN0YXRlLnhtbC5oIgo+ICAjaW5jbHVkZSAic3RhdGVfaGkueG1sLmgi Cj4gIAo+IEBAIC0yOCwxMSArMjcsOSBAQAo+ICAKPiAgI2RlZmluZSBNTVV2Ml9NQVhfU1RMQl9F TlRSSUVTCQkxMDI0Cj4gIAo+IC1zdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2RvbWFpbiB7Cj4gLQlz dHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gYmFzZTsKPiAtCS8qIFAoYWdlKSBUKGFibGUpIEEo cnJheSkgKi8KPiAtCXU2NCAqcHRhX2NwdTsKPiAtCWRtYV9hZGRyX3QgcHRhX2RtYTsKPiArc3Ry dWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0IHsKPiArCXN0cnVjdCBldG5hdml2X2lvbW11X2Nv bnRleHQgYmFzZTsKPiArCXVuc2lnbmVkIHNob3J0IGlkOwo+ICAJLyogTShhc3RlcikgVExCIGFr YSBmaXJzdCBsZXZlbCBwYWdldGFibGUgKi8KPiAgCXUzMiAqbXRsYl9jcHU7Cj4gIAlkbWFfYWRk cl90IG10bGJfZG1hOwo+IEBAIC00MSw0MSArMzgsNjIgQEAgc3RydWN0IGV0bmF2aXZfaW9tbXV2 Ml9kb21haW4gewo+ICAJZG1hX2FkZHJfdCBzdGxiX2RtYVtNTVV2Ml9NQVhfU1RMQl9FTlRSSUVT XTsKPiAgfTsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2RvbWFpbiAqCj4g LXRvX2V0bmF2aXZfZG9tYWluKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluKQo+ ICtzdGF0aWMgc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0ICoKPiArdG9fdjJfY29udGV4 dChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0KQo+ICB7Cj4gLQlyZXR1cm4g Y29udGFpbmVyX29mKGRvbWFpbiwgc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4sIGJhc2Up Owo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgZXRuYXZpdl9pb21tdXYy X2NvbnRleHQsIGJhc2UpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11djJf ZnJlZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0KQo+ICt7Cj4gKwlzdHJ1 Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2NvbnRleHQgPSB0b192Ml9jb250ZXh0KGNv bnRleHQpOwo+ICsJaW50IGk7Cj4gKwo+ICsJZHJtX21tX3Rha2Vkb3duKCZjb250ZXh0LT5tbSk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IE1NVXYyX01BWF9TVExCX0VOVFJJRVM7IGkrKykgewo+ ICsJCWlmICh2Ml9jb250ZXh0LT5zdGxiX2NwdVtpXSkKPiArCQkJZG1hX2ZyZWVfd2MoY29udGV4 dC0+Z2xvYmFsLT5kZXYsIFNaXzRLLAo+ICsJCQkJICAgIHYyX2NvbnRleHQtPnN0bGJfY3B1W2ld LAo+ICsJCQkJICAgIHYyX2NvbnRleHQtPnN0bGJfZG1hW2ldKTsKPiArCX0KPiArCj4gKwlkbWFf ZnJlZV93Yyhjb250ZXh0LT5nbG9iYWwtPmRldiwgU1pfNEssIHYyX2NvbnRleHQtPm10bGJfY3B1 LAo+ICsJCSAgICB2Ml9jb250ZXh0LT5tdGxiX2RtYSk7Cj4gKwo+ICsJY2xlYXJfYml0KHYyX2Nv bnRleHQtPmlkLCBjb250ZXh0LT5nbG9iYWwtPnYyLnB0YV9hbGxvYyk7Cj4gKwo+ICsJdmZyZWUo djJfY29udGV4dCk7Cj4gK30KPiAgc3RhdGljIGludAo+IC1ldG5hdml2X2lvbW11djJfZW5zdXJl X3N0bGIoc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluLAo+ICtl dG5hdml2X2lvbW11djJfZW5zdXJlX3N0bGIoc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0 ICp2Ml9jb250ZXh0LAo+ICAJCQkgICAgaW50IHN0bGIpCj4gIHsKPiAtCWlmIChldG5hdml2X2Rv bWFpbi0+c3RsYl9jcHVbc3RsYl0pCj4gKwlpZiAodjJfY29udGV4dC0+c3RsYl9jcHVbc3RsYl0p Cj4gIAkJcmV0dXJuIDA7Cj4gIAo+IC0JZXRuYXZpdl9kb21haW4tPnN0bGJfY3B1W3N0bGJdID0K PiAtCQkJZG1hX2FsbG9jX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgU1pfNEssCj4gLQkJ CQkgICAgICZldG5hdml2X2RvbWFpbi0+c3RsYl9kbWFbc3RsYl0sCj4gKwl2Ml9jb250ZXh0LT5z dGxiX2NwdVtzdGxiXSA9Cj4gKwkJCWRtYV9hbGxvY193Yyh2Ml9jb250ZXh0LT5iYXNlLmdsb2Jh bC0+ZGV2LCBTWl80SywKPiArCQkJCSAgICAgJnYyX2NvbnRleHQtPnN0bGJfZG1hW3N0bGJdLAo+ ICAJCQkJICAgICBHRlBfS0VSTkVMKTsKPiAgCj4gLQlpZiAoIWV0bmF2aXZfZG9tYWluLT5zdGxi X2NwdVtzdGxiXSkKPiArCWlmICghdjJfY29udGV4dC0+c3RsYl9jcHVbc3RsYl0pCj4gIAkJcmV0 dXJuIC1FTk9NRU07Cj4gIAo+IC0JbWVtc2V0MzIoZXRuYXZpdl9kb21haW4tPnN0bGJfY3B1W3N0 bGJdLCBNTVV2Ml9QVEVfRVhDRVBUSU9OLAo+ICsJbWVtc2V0MzIodjJfY29udGV4dC0+c3RsYl9j cHVbc3RsYl0sIE1NVXYyX1BURV9FWENFUFRJT04sCj4gIAkJIFNaXzRLIC8gc2l6ZW9mKHUzMikp Owo+ICAKPiAtCWV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdVtzdGxiXSA9IGV0bmF2aXZfZG9tYWlu LT5zdGxiX2RtYVtzdGxiXSB8Cj4gLQkJCQkJCSAgICAgIE1NVXYyX1BURV9QUkVTRU5UOwo+ICsJ djJfY29udGV4dC0+bXRsYl9jcHVbc3RsYl0gPQo+ICsJCQl2Ml9jb250ZXh0LT5zdGxiX2RtYVtz dGxiXSB8IE1NVXYyX1BURV9QUkVTRU5UOwo+ICsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1z dGF0aWMgaW50IGV0bmF2aXZfaW9tbXV2Ml9tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWlu ICpkb21haW4sCj4gK3N0YXRpYyBpbnQgZXRuYXZpdl9pb21tdXYyX21hcChzdHJ1Y3QgZXRuYXZp dl9pb21tdV9jb250ZXh0ICpjb250ZXh0LAo+ICAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpb3Zh LCBwaHlzX2FkZHJfdCBwYWRkciwKPiAgCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgcHJvdCkK PiAgewo+IC0Jc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0K PiAtCQkJdG9fZXRuYXZpdl9kb21haW4oZG9tYWluKTsKPiArCXN0cnVjdCBldG5hdml2X2lvbW11 djJfY29udGV4dCAqdjJfY29udGV4dCA9IHRvX3YyX2NvbnRleHQoY29udGV4dCk7Cj4gIAlpbnQg bXRsYl9lbnRyeSwgc3RsYl9lbnRyeSwgcmV0Owo+ICAJdTMyIGVudHJ5ID0gbG93ZXJfMzJfYml0 cyhwYWRkcikgfCBNTVV2Ml9QVEVfUFJFU0VOVDsKPiAgCj4gQEAgLTkxLDIwICsxMDksMTkgQEAg c3RhdGljIGludCBldG5hdml2X2lvbW11djJfbWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFp biAqZG9tYWluLAo+ICAJbXRsYl9lbnRyeSA9IChpb3ZhICYgTU1VdjJfTVRMQl9NQVNLKSA+PiBN TVV2Ml9NVExCX1NISUZUOwo+ICAJc3RsYl9lbnRyeSA9IChpb3ZhICYgTU1VdjJfU1RMQl9NQVNL KSA+PiBNTVV2Ml9TVExCX1NISUZUOwo+ICAKPiAtCXJldCA9IGV0bmF2aXZfaW9tbXV2Ml9lbnN1 cmVfc3RsYihldG5hdml2X2RvbWFpbiwgbXRsYl9lbnRyeSk7Cj4gKwlyZXQgPSBldG5hdml2X2lv bW11djJfZW5zdXJlX3N0bGIodjJfY29udGV4dCwgbXRsYl9lbnRyeSk7Cj4gIAlpZiAocmV0KQo+ ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JZXRuYXZpdl9kb21haW4tPnN0bGJfY3B1W210bGJfZW50 cnldW3N0bGJfZW50cnldID0gZW50cnk7Cj4gKwl2Ml9jb250ZXh0LT5zdGxiX2NwdVttdGxiX2Vu dHJ5XVtzdGxiX2VudHJ5XSA9IGVudHJ5Owo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1z dGF0aWMgc2l6ZV90IGV0bmF2aXZfaW9tbXV2Ml91bm1hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9k b21haW4gKmRvbWFpbiwKPiArc3RhdGljIHNpemVfdCBldG5hdml2X2lvbW11djJfdW5tYXAoc3Ry dWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCQkJCSAgICB1bnNpZ25lZCBs b25nIGlvdmEsIHNpemVfdCBzaXplKQo+ICB7Cj4gLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2Rv bWFpbiAqZXRuYXZpdl9kb21haW4gPQo+IC0JCQl0b19ldG5hdml2X2RvbWFpbihkb21haW4pOwo+ ICsJc3RydWN0IGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0ICpldG5hdml2X2RvbWFpbiA9IHRvX3Yy X2NvbnRleHQoY29udGV4dCk7Cj4gIAlpbnQgbXRsYl9lbnRyeSwgc3RsYl9lbnRyeTsKPiAgCj4g IAlpZiAoc2l6ZSAhPSBTWl80SykKPiBAQCAtMTE4LDExOCArMTM1LDM1IEBAIHN0YXRpYyBzaXpl X3QgZXRuYXZpdl9pb21tdXYyX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9t YWluLAo+ICAJcmV0dXJuIFNaXzRLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGV0bmF2aXZfaW9t bXV2Ml9pbml0KHN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICpldG5hdml2X2RvbWFpbikK PiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQkvKiBhbGxvY2F0ZSBzY3JhdGNoIHBhZ2UgKi8KPiAt CWV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2NwdSA9Cj4gLQkJCWRtYV9hbGxvY193Yyhl dG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAo+IC0JCQkJICAgICAmZXRuYXZpdl9kb21h aW4tPmJhc2UuYmFkX3BhZ2VfZG1hLAo+IC0JCQkJICAgICBHRlBfS0VSTkVMKTsKPiAtCWlmICgh ZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1KSB7Cj4gLQkJcmV0ID0gLUVOT01FTTsK PiAtCQlnb3RvIGZhaWxfbWVtOwo+IC0JfQo+IC0KPiAtCW1lbXNldDMyKGV0bmF2aXZfZG9tYWlu LT5iYXNlLmJhZF9wYWdlX2NwdSwgMHhkZWFkNTVhYSwKPiAtCQkgU1pfNEsgLyBzaXplb2YodTMy KSk7Cj4gLQo+IC0JZXRuYXZpdl9kb21haW4tPnB0YV9jcHUgPSBkbWFfYWxsb2Nfd2MoZXRuYXZp dl9kb21haW4tPmJhc2UuZGV2LAo+IC0JCQkJCSAgICAgICBTWl80SywgJmV0bmF2aXZfZG9tYWlu LT5wdGFfZG1hLAo+IC0JCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKPiAtCWlmICghZXRuYXZpdl9k b21haW4tPnB0YV9jcHUpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZmFpbF9tZW07 Cj4gLQl9Cj4gLQo+IC0JZXRuYXZpdl9kb21haW4tPm10bGJfY3B1ID0gZG1hX2FsbG9jX3djKGV0 bmF2aXZfZG9tYWluLT5iYXNlLmRldiwKPiAtCQkJCQkJU1pfNEssICZldG5hdml2X2RvbWFpbi0+ bXRsYl9kbWEsCj4gLQkJCQkJCUdGUF9LRVJORUwpOwo+IC0JaWYgKCFldG5hdml2X2RvbWFpbi0+ bXRsYl9jcHUpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZmFpbF9tZW07Cj4gLQl9 Cj4gLQo+IC0JbWVtc2V0MzIoZXRuYXZpdl9kb21haW4tPm10bGJfY3B1LCBNTVV2Ml9QVEVfRVhD RVBUSU9OLAo+IC0JCSBNTVV2Ml9NQVhfU1RMQl9FTlRSSUVTKTsKPiAtCj4gLQlyZXR1cm4gMDsK PiAtCj4gLWZhaWxfbWVtOgo+IC0JaWYgKGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2Nw dSkKPiAtCQlkbWFfZnJlZV93YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAo+IC0J CQkgICAgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfY3B1LAo+IC0JCQkgICAgZXRuYXZp dl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hKTsKPiAtCj4gLQlpZiAoZXRuYXZpdl9kb21haW4t PnB0YV9jcHUpCj4gLQkJZG1hX2ZyZWVfd2MoZXRuYXZpdl9kb21haW4tPmJhc2UuZGV2LCBTWl80 SywKPiAtCQkJICAgIGV0bmF2aXZfZG9tYWluLT5wdGFfY3B1LCBldG5hdml2X2RvbWFpbi0+cHRh X2RtYSk7Cj4gLQo+IC0JaWYgKGV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdSkKPiAtCQlkbWFfZnJl ZV93YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAo+IC0JCQkgICAgZXRuYXZpdl9k b21haW4tPm10bGJfY3B1LCBldG5hdml2X2RvbWFpbi0+bXRsYl9kbWEpOwo+IC0KPiAtCXJldHVy biByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9kb21haW5fZnJl ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbikKPiAtewo+IC0Jc3RydWN0IGV0 bmF2aXZfaW9tbXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0KPiAtCQkJdG9fZXRuYXZpdl9k b21haW4oZG9tYWluKTsKPiAtCWludCBpOwo+IC0KPiAtCWRtYV9mcmVlX3djKGV0bmF2aXZfZG9t YWluLT5iYXNlLmRldiwgU1pfNEssCj4gLQkJICAgIGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9w YWdlX2NwdSwKPiAtCQkgICAgZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hKTsKPiAt Cj4gLQlkbWFfZnJlZV93YyhldG5hdml2X2RvbWFpbi0+YmFzZS5kZXYsIFNaXzRLLAo+IC0JCSAg ICBldG5hdml2X2RvbWFpbi0+cHRhX2NwdSwgZXRuYXZpdl9kb21haW4tPnB0YV9kbWEpOwo+IC0K PiAtCWRtYV9mcmVlX3djKGV0bmF2aXZfZG9tYWluLT5iYXNlLmRldiwgU1pfNEssCj4gLQkJICAg IGV0bmF2aXZfZG9tYWluLT5tdGxiX2NwdSwgZXRuYXZpdl9kb21haW4tPm10bGJfZG1hKTsKPiAt Cj4gLQlmb3IgKGkgPSAwOyBpIDwgTU1VdjJfTUFYX1NUTEJfRU5UUklFUzsgaSsrKSB7Cj4gLQkJ aWYgKGV0bmF2aXZfZG9tYWluLT5zdGxiX2NwdVtpXSkKPiAtCQkJZG1hX2ZyZWVfd2MoZXRuYXZp dl9kb21haW4tPmJhc2UuZGV2LCBTWl80SywKPiAtCQkJCSAgICBldG5hdml2X2RvbWFpbi0+c3Rs Yl9jcHVbaV0sCj4gLQkJCQkgICAgZXRuYXZpdl9kb21haW4tPnN0bGJfZG1hW2ldKTsKPiAtCX0K PiAtCj4gLQl2ZnJlZShldG5hdml2X2RvbWFpbik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzaXplX3Qg ZXRuYXZpdl9pb21tdXYyX2R1bXBfc2l6ZShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRv bWFpbikKPiArc3RhdGljIHNpemVfdCBldG5hdml2X2lvbW11djJfZHVtcF9zaXplKHN0cnVjdCBl dG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQpCj4gIHsKPiAtCXN0cnVjdCBldG5hdml2X2lv bW11djJfZG9tYWluICpldG5hdml2X2RvbWFpbiA9Cj4gLQkJCXRvX2V0bmF2aXZfZG9tYWluKGRv bWFpbik7Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2NvbnRleHQgPSB0 b192Ml9jb250ZXh0KGNvbnRleHQpOwo+ICAJc2l6ZV90IGR1bXBfc2l6ZSA9IFNaXzRLOwo+ICAJ aW50IGk7Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IE1NVXYyX01BWF9TVExCX0VOVFJJRVM7IGkr KykKPiAtCQlpZiAoZXRuYXZpdl9kb21haW4tPm10bGJfY3B1W2ldICYgTU1VdjJfUFRFX1BSRVNF TlQpCj4gKwkJaWYgKHYyX2NvbnRleHQtPm10bGJfY3B1W2ldICYgTU1VdjJfUFRFX1BSRVNFTlQp Cj4gIAkJCWR1bXBfc2l6ZSArPSBTWl80SzsKPiAgCj4gIAlyZXR1cm4gZHVtcF9zaXplOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgdm9pZCBldG5hdml2X2lvbW11djJfZHVtcChzdHJ1Y3QgZXRuYXZpdl9p b21tdV9kb21haW4gKmRvbWFpbiwgdm9pZCAqYnVmKQo+ICtzdGF0aWMgdm9pZCBldG5hdml2X2lv bW11djJfZHVtcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LCB2b2lkICpi dWYpCj4gIHsKPiAtCXN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICpldG5hdml2X2RvbWFp biA9Cj4gLQkJCXRvX2V0bmF2aXZfZG9tYWluKGRvbWFpbik7Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9p b21tdXYyX2NvbnRleHQgKnYyX2NvbnRleHQgPSB0b192Ml9jb250ZXh0KGNvbnRleHQpOwo+ICAJ aW50IGk7Cj4gIAo+IC0JbWVtY3B5KGJ1ZiwgZXRuYXZpdl9kb21haW4tPm10bGJfY3B1LCBTWl80 Syk7Cj4gKwltZW1jcHkoYnVmLCB2Ml9jb250ZXh0LT5tdGxiX2NwdSwgU1pfNEspOwo+ICAJYnVm ICs9IFNaXzRLOwo+ICAJZm9yIChpID0gMDsgaSA8IE1NVXYyX01BWF9TVExCX0VOVFJJRVM7IGkr KywgYnVmICs9IFNaXzRLKQo+IC0JCWlmIChldG5hdml2X2RvbWFpbi0+bXRsYl9jcHVbaV0gJiBN TVV2Ml9QVEVfUFJFU0VOVCkKPiAtCQkJbWVtY3B5KGJ1ZiwgZXRuYXZpdl9kb21haW4tPnN0bGJf Y3B1W2ldLCBTWl80Syk7Cj4gKwkJaWYgKHYyX2NvbnRleHQtPm10bGJfY3B1W2ldICYgTU1VdjJf UFRFX1BSRVNFTlQpCj4gKwkJCW1lbWNweShidWYsIHYyX2NvbnRleHQtPnN0bGJfY3B1W2ldLCBT Wl80Syk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlX25v bnNlYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKPiArc3RhdGljIHZvaWQgZXRuYXZpdl9pb21t dXYyX3Jlc3RvcmVfbm9uc2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAo+ICsJc3RydWN0IGV0 bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCkKPiAgewo+IC0Jc3RydWN0IGV0bmF2aXZfaW9t bXV2Ml9kb21haW4gKmV0bmF2aXZfZG9tYWluID0KPiAtCQkJdG9fZXRuYXZpdl9kb21haW4oZ3B1 LT5tbXUtPmRvbWFpbik7Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2Nv bnRleHQgPSB0b192Ml9jb250ZXh0KGNvbnRleHQpOwo+ICAJdTE2IHByZWZldGNoOwo+ICAKPiAg CS8qIElmIHRoZSBNTVUgaXMgYWxyZWFkeSBlbmFibGVkIHRoZSBzdGF0ZSBpcyBzdGlsbCB0aGVy ZS4gKi8KPiBAQCAtMjM3LDggKzE3MSw4IEBAIHN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9y ZXN0b3JlX25vbnNlYyhzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKPiAgCQlyZXR1cm47Cj4gIAo+ ICAJcHJlZmV0Y2ggPSBldG5hdml2X2J1ZmZlcl9jb25maWdfbW11djIoZ3B1LAo+IC0JCQkJKHUz MilldG5hdml2X2RvbWFpbi0+bXRsYl9kbWEsCj4gLQkJCQkodTMyKWV0bmF2aXZfZG9tYWluLT5i YXNlLmJhZF9wYWdlX2RtYSk7Cj4gKwkJCQkodTMyKXYyX2NvbnRleHQtPm10bGJfZG1hLAo+ICsJ CQkJKHUzMiljb250ZXh0LT5nbG9iYWwtPmJhZF9wYWdlX2RtYSk7Cj4gIAlldG5hdml2X2dwdV9z dGFydF9mZShncHUsICh1MzIpZXRuYXZpdl9jbWRidWZfZ2V0X3BhKCZncHUtPmJ1ZmZlciksCj4g IAkJCSAgICAgcHJlZmV0Y2gpOwo+ICAJZXRuYXZpdl9ncHVfd2FpdF9pZGxlKGdwdSwgMTAwKTsK PiBAQCAtMjQ2LDEwICsxODAsMTAgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jlc3Rv cmVfbm9uc2VjKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KQo+ICAJZ3B1X3dyaXRlKGdwdSwgVklW U19NTVV2Ml9DT05UUk9MLCBWSVZTX01NVXYyX0NPTlRST0xfRU5BQkxFKTsKPiAgfQo+ICAKPiAt c3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVfc2VjKHN0cnVjdCBldG5hdml2X2dw dSAqZ3B1KQo+ICtzdGF0aWMgdm9pZCBldG5hdml2X2lvbW11djJfcmVzdG9yZV9zZWMoc3RydWN0 IGV0bmF2aXZfZ3B1ICpncHUsCj4gKwlzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250 ZXh0KQo+ICB7Cj4gLQlzdHJ1Y3QgZXRuYXZpdl9pb21tdXYyX2RvbWFpbiAqZXRuYXZpdl9kb21h aW4gPQo+IC0JCQkJdG9fZXRuYXZpdl9kb21haW4oZ3B1LT5tbXUtPmRvbWFpbik7Cj4gKwlzdHJ1 Y3QgZXRuYXZpdl9pb21tdXYyX2NvbnRleHQgKnYyX2NvbnRleHQgPSB0b192Ml9jb250ZXh0KGNv bnRleHQpOwo+ICAJdTE2IHByZWZldGNoOwo+ICAKPiAgCS8qIElmIHRoZSBNTVUgaXMgYWxyZWFk eSBlbmFibGVkIHRoZSBzdGF0ZSBpcyBzdGlsbCB0aGVyZS4gKi8KPiBAQCAtMjU3LDI2ICsxOTEs MjYgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmVfc2VjKHN0cnVjdCBldG5h dml2X2dwdSAqZ3B1KQo+ICAJCXJldHVybjsKPiAgCj4gIAlncHVfd3JpdGUoZ3B1LCBWSVZTX01N VXYyX1BUQV9BRERSRVNTX0xPVywKPiAtCQkgIGxvd2VyXzMyX2JpdHMoZXRuYXZpdl9kb21haW4t PnB0YV9kbWEpKTsKPiArCQkgIGxvd2VyXzMyX2JpdHMoY29udGV4dC0+Z2xvYmFsLT52Mi5wdGFf ZG1hKSk7Cj4gIAlncHVfd3JpdGUoZ3B1LCBWSVZTX01NVXYyX1BUQV9BRERSRVNTX0hJR0gsCj4g LQkJICB1cHBlcl8zMl9iaXRzKGV0bmF2aXZfZG9tYWluLT5wdGFfZG1hKSk7Cj4gKwkJICB1cHBl cl8zMl9iaXRzKGNvbnRleHQtPmdsb2JhbC0+djIucHRhX2RtYSkpOwo+ICAJZ3B1X3dyaXRlKGdw dSwgVklWU19NTVV2Ml9QVEFfQ09OVFJPTCwgVklWU19NTVV2Ml9QVEFfQ09OVFJPTF9FTkFCTEUp Owo+ICAKPiAgCWdwdV93cml0ZShncHUsIFZJVlNfTU1VdjJfTk9OU0VDX1NBRkVfQUREUl9MT1cs Cj4gLQkJICBsb3dlcl8zMl9iaXRzKGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2RtYSkp Owo+ICsJCSAgbG93ZXJfMzJfYml0cyhjb250ZXh0LT5nbG9iYWwtPmJhZF9wYWdlX2RtYSkpOwo+ ICAJZ3B1X3dyaXRlKGdwdSwgVklWU19NTVV2Ml9TRUNfU0FGRV9BRERSX0xPVywKPiAtCQkgIGxv d2VyXzMyX2JpdHMoZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hKSk7Cj4gKwkJICBs b3dlcl8zMl9iaXRzKGNvbnRleHQtPmdsb2JhbC0+YmFkX3BhZ2VfZG1hKSk7Cj4gIAlncHVfd3Jp dGUoZ3B1LCBWSVZTX01NVXYyX1NBRkVfQUREUkVTU19DT05GSUcsCj4gIAkJICBWSVZTX01NVXYy X1NBRkVfQUREUkVTU19DT05GSUdfTk9OX1NFQ19TQUZFX0FERFJfSElHSCgKPiAtCQkgIHVwcGVy XzMyX2JpdHMoZXRuYXZpdl9kb21haW4tPmJhc2UuYmFkX3BhZ2VfZG1hKSkgfAo+ICsJCSAgdXBw ZXJfMzJfYml0cyhjb250ZXh0LT5nbG9iYWwtPmJhZF9wYWdlX2RtYSkpIHwKPiAgCQkgIFZJVlNf TU1VdjJfU0FGRV9BRERSRVNTX0NPTkZJR19TRUNfU0FGRV9BRERSX0hJR0goCj4gLQkJICB1cHBl cl8zMl9iaXRzKGV0bmF2aXZfZG9tYWluLT5iYXNlLmJhZF9wYWdlX2RtYSkpKTsKPiArCQkgIHVw cGVyXzMyX2JpdHMoY29udGV4dC0+Z2xvYmFsLT5iYWRfcGFnZV9kbWEpKSk7Cj4gIAo+IC0JZXRu YXZpdl9kb21haW4tPnB0YV9jcHVbMF0gPSBldG5hdml2X2RvbWFpbi0+bXRsYl9kbWEgfAo+IC0J CQkJICAgICBWSVZTX01NVXYyX0NPTkZJR1VSQVRJT05fTU9ERV9NT0RFNF9LOwo+ICsJY29udGV4 dC0+Z2xvYmFsLT52Mi5wdGFfY3B1WzBdID0gdjJfY29udGV4dC0+bXRsYl9kbWEgfAo+ICsJCQkJ IAkgVklWU19NTVV2Ml9DT05GSUdVUkFUSU9OX01PREVfTU9ERTRfSzsKPiAgCj4gIAkvKiB0cmln Z2VyIGEgUFRBIGxvYWQgdGhyb3VnaCB0aGUgRkUgKi8KPiAtCXByZWZldGNoID0gZXRuYXZpdl9i dWZmZXJfY29uZmlnX3B0YShncHUpOwo+ICsJcHJlZmV0Y2ggPSBldG5hdml2X2J1ZmZlcl9jb25m aWdfcHRhKGdwdSwgdjJfY29udGV4dC0+aWQpOwo+ICAJZXRuYXZpdl9ncHVfc3RhcnRfZmUoZ3B1 LCAodTMyKWV0bmF2aXZfY21kYnVmX2dldF9wYSgmZ3B1LT5idWZmZXIpLAo+ICAJCQkgICAgIHBy ZWZldGNoKTsKPiAgCWV0bmF2aXZfZ3B1X3dhaXRfaWRsZShncHUsIDEwMCk7Cj4gQEAgLTI4NCwx NCArMjE4LDE1IEBAIHN0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlX3NlYyhzdHJ1 Y3QgZXRuYXZpdl9ncHUgKmdwdSkKPiAgCWdwdV93cml0ZShncHUsIFZJVlNfTU1VdjJfU0VDX0NP TlRST0wsIFZJVlNfTU1VdjJfU0VDX0NPTlRST0xfRU5BQkxFKTsKPiAgfQo+ICAKPiAtdm9pZCBl dG5hdml2X2lvbW11djJfcmVzdG9yZShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdwdSkKPiArc3RhdGlj IHZvaWQgZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUsCj4g KwkJCQkgICAgc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCkKPiAgewo+ICAJ c3dpdGNoIChncHUtPnNlY19tb2RlKSB7Cj4gIAljYXNlIEVUTkFfU0VDX05PTkU6Cj4gLQkJZXRu YXZpdl9pb21tdXYyX3Jlc3RvcmVfbm9uc2VjKGdwdSk7Cj4gKwkJZXRuYXZpdl9pb21tdXYyX3Jl c3RvcmVfbm9uc2VjKGdwdSwgY29udGV4dCk7Cj4gIAkJYnJlYWs7Cj4gIAljYXNlIEVUTkFfU0VD X0tFUk5FTDoKPiAtCQlldG5hdml2X2lvbW11djJfcmVzdG9yZV9zZWMoZ3B1KTsKPiArCQlldG5h dml2X2lvbW11djJfcmVzdG9yZV9zZWMoZ3B1LCBjb250ZXh0KTsKPiAgCQlicmVhazsKPiAgCWRl ZmF1bHQ6Cj4gIAkJV0FSTigxLCAidW5oYW5kbGVkIEdQVSBzZWN1cml0eSBtb2RlXG4iKTsKPiBA QCAtMjk5LDM5ICsyMzQsNTYgQEAgdm9pZCBldG5hdml2X2lvbW11djJfcmVzdG9yZShzdHJ1Y3Qg ZXRuYXZpdl9ncHUgKmdwdSkKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBl dG5hdml2X2lvbW11X2RvbWFpbl9vcHMgZXRuYXZpdl9pb21tdXYyX29wcyA9IHsKPiAtCS5mcmVl ID0gZXRuYXZpdl9pb21tdXYyX2RvbWFpbl9mcmVlLAo+ICtjb25zdCBzdHJ1Y3QgZXRuYXZpdl9p b21tdV9vcHMgZXRuYXZpdl9pb21tdXYyX29wcyA9IHsKPiArCS5mcmVlID0gZXRuYXZpdl9pb21t dXYyX2ZyZWUsCj4gIAkubWFwID0gZXRuYXZpdl9pb21tdXYyX21hcCwKPiAgCS51bm1hcCA9IGV0 bmF2aXZfaW9tbXV2Ml91bm1hcCwKPiAgCS5kdW1wX3NpemUgPSBldG5hdml2X2lvbW11djJfZHVt cF9zaXplLAo+ICAJLmR1bXAgPSBldG5hdml2X2lvbW11djJfZHVtcCwKPiArCS5yZXN0b3JlID0g ZXRuYXZpdl9pb21tdXYyX3Jlc3RvcmUsCj4gIH07Cj4gIAo+IC1zdHJ1Y3QgZXRuYXZpdl9pb21t dV9kb21haW4gKgo+IC1ldG5hdml2X2lvbW11djJfZG9tYWluX2FsbG9jKHN0cnVjdCBldG5hdml2 X2dwdSAqZ3B1KQo+ICtzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICoKPiArZXRuYXZpdl9p b21tdXYyX2NvbnRleHRfYWxsb2Moc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWwp Cj4gIHsKPiAtCXN0cnVjdCBldG5hdml2X2lvbW11djJfZG9tYWluICpldG5hdml2X2RvbWFpbjsK PiAtCXN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluOwo+IC0JaW50IHJldDsKPiAr CXN0cnVjdCBldG5hdml2X2lvbW11djJfY29udGV4dCAqdjJfY29udGV4dDsKPiArCXN0cnVjdCBl dG5hdml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQ7Cj4gIAo+IC0JZXRuYXZpdl9kb21haW4gPSB2 emFsbG9jKHNpemVvZigqZXRuYXZpdl9kb21haW4pKTsKPiAtCWlmICghZXRuYXZpdl9kb21haW4p Cj4gKwl2Ml9jb250ZXh0ID0gdnphbGxvYyhzaXplb2YoKnYyX2NvbnRleHQpKTsKPiArCWlmICgh djJfY29udGV4dCkKPiAgCQlyZXR1cm4gTlVMTDsKPiAgCj4gLQlkb21haW4gPSAmZXRuYXZpdl9k b21haW4tPmJhc2U7Cj4gKwltdXRleF9sb2NrKCZnbG9iYWwtPmxvY2spOwo+ICsJdjJfY29udGV4 dC0+aWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGdsb2JhbC0+djIucHRhX2FsbG9jLAo+ICsJCQkJ CSAgICAgRVROQVZJVl9QVEFfRU5UUklFUyk7Cj4gKwlpZiAodjJfY29udGV4dC0+aWQgPCBFVE5B VklWX1BUQV9FTlRSSUVTKSB7Cj4gKwkJc2V0X2JpdCh2Ml9jb250ZXh0LT5pZCwgZ2xvYmFsLT52 Mi5wdGFfYWxsb2MpOwo+ICsJfSBlbHNlIHsKPiArCQltdXRleF91bmxvY2soJmdsb2JhbC0+bG9j ayk7Cj4gKwkJZ290byBvdXRfZnJlZTsKPiArCX0KPiArCW11dGV4X3VubG9jaygmZ2xvYmFsLT5s b2NrKTsKPiAgCj4gLQlkb21haW4tPmRldiA9IGdwdS0+ZGV2Owo+IC0JZG9tYWluLT5iYXNlID0g U1pfNEs7Cj4gLQlkb21haW4tPnNpemUgPSAodTY0KVNaXzFHICogNCAtIFNaXzRLOwo+IC0JZG9t YWluLT5vcHMgPSAmZXRuYXZpdl9pb21tdXYyX29wczsKPiArCXYyX2NvbnRleHQtPm10bGJfY3B1 ID0gZG1hX2FsbG9jX3djKGdsb2JhbC0+ZGV2LCBTWl80SywKPiArCQkJCQkgICAgJnYyX2NvbnRl eHQtPm10bGJfZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghdjJfY29udGV4dC0+bXRsYl9jcHUp Cj4gKwkJZ290byBvdXRfZnJlZV9pZDsKPiAgCj4gLQlyZXQgPSBldG5hdml2X2lvbW11djJfaW5p dChldG5hdml2X2RvbWFpbik7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gb3V0X2ZyZWU7Cj4gKwlt ZW1zZXQzMih2Ml9jb250ZXh0LT5tdGxiX2NwdSwgTU1VdjJfUFRFX0VYQ0VQVElPTiwKPiArCQkg TU1VdjJfTUFYX1NUTEJfRU5UUklFUyk7Cj4gKwo+ICsJY29udGV4dCA9ICZ2Ml9jb250ZXh0LT5i YXNlOwo+ICsJY29udGV4dC0+Z2xvYmFsID0gZ2xvYmFsOwo+ICsJa3JlZl9pbml0KCZjb250ZXh0 LT5yZWZjb3VudCk7Cj4gKwltdXRleF9pbml0KCZjb250ZXh0LT5sb2NrKTsKPiArCUlOSVRfTElT VF9IRUFEKCZjb250ZXh0LT5tYXBwaW5ncyk7Cj4gKwlkcm1fbW1faW5pdCgmY29udGV4dC0+bW0s IFNaXzRLLCAodTY0KVNaXzFHICogNCAtIFNaXzRLKTsKPiAgCj4gLQlyZXR1cm4gJmV0bmF2aXZf ZG9tYWluLT5iYXNlOwo+ICsJcmV0dXJuIGNvbnRleHQ7Cj4gIAo+ICtvdXRfZnJlZV9pZDoKPiAr CWNsZWFyX2JpdCh2Ml9jb250ZXh0LT5pZCwgZ2xvYmFsLT52Mi5wdGFfYWxsb2MpOwo+ICBvdXRf ZnJlZToKPiAtCXZmcmVlKGV0bmF2aXZfZG9tYWluKTsKPiArCXZmcmVlKHYyX2NvbnRleHQpOwo+ ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2 aXYvZXRuYXZpdl9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmMK PiBpbmRleCBiYmQxNjI0YTNkZjguLjJmNjRlZWY3NzNlZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X21tdS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvZXRuYXZpdl9tbXUuYwo+IEBAIC0zLDYgKzMsNyBAQAo+ICAgKiBDb3B5cmlnaHQgKEMp IDIwMTUtMjAxOCBFdG5hdml2IFByb2plY3QKPiAgICovCj4gIAo+ICsjaW5jbHVkZSA8bGludXgv ZG1hLW1hcHBpbmcuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Cj4gIAo+ICAj aW5jbHVkZSAiY29tbW9uLnhtbC5oIgo+IEBAIC0xMCwxMCArMTEsOSBAQAo+ICAjaW5jbHVkZSAi ZXRuYXZpdl9kcnYuaCIKPiAgI2luY2x1ZGUgImV0bmF2aXZfZ2VtLmgiCj4gICNpbmNsdWRlICJl dG5hdml2X2dwdS5oIgo+IC0jaW5jbHVkZSAiZXRuYXZpdl9pb21tdS5oIgo+ICAjaW5jbHVkZSAi ZXRuYXZpdl9tbXUuaCIKPiAgCj4gLXN0YXRpYyB2b2lkIGV0bmF2aXZfZG9tYWluX3VubWFwKHN0 cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluLAo+ICtzdGF0aWMgdm9pZCBldG5hdml2 X2NvbnRleHRfdW5tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAg CQkJCSB1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplKQo+ICB7Cj4gIAlzaXplX3QgdW5t YXBwZWRfcGFnZSwgdW5tYXBwZWQgPSAwOwo+IEBAIC0yNiw3ICsyNiw4IEBAIHN0YXRpYyB2b2lk IGV0bmF2aXZfZG9tYWluX3VubWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWlu LAo+ICAJfQo+ICAKPiAgCXdoaWxlICh1bm1hcHBlZCA8IHNpemUpIHsKPiAtCQl1bm1hcHBlZF9w YWdlID0gZG9tYWluLT5vcHMtPnVubWFwKGRvbWFpbiwgaW92YSwgcGdzaXplKTsKPiArCQl1bm1h cHBlZF9wYWdlID0gY29udGV4dC0+Z2xvYmFsLT5vcHMtPnVubWFwKGNvbnRleHQsIGlvdmEsCj4g KwkJCQkJCQkgICAgcGdzaXplKTsKPiAgCQlpZiAoIXVubWFwcGVkX3BhZ2UpCj4gIAkJCWJyZWFr Owo+ICAKPiBAQCAtMzUsNyArMzYsNyBAQCBzdGF0aWMgdm9pZCBldG5hdml2X2RvbWFpbl91bm1h cChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKPiAgCX0KPiAgfQo+ICAKPiAt c3RhdGljIGludCBldG5hdml2X2RvbWFpbl9tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfZG9tYWlu ICpkb21haW4sCj4gK3N0YXRpYyBpbnQgZXRuYXZpdl9jb250ZXh0X21hcChzdHJ1Y3QgZXRuYXZp dl9pb21tdV9jb250ZXh0ICpjb250ZXh0LAo+ICAJCQkgICAgICB1bnNpZ25lZCBsb25nIGlvdmEs IHBoeXNfYWRkcl90IHBhZGRyLAo+ICAJCQkgICAgICBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCj4g IHsKPiBAQCAtNTEsNyArNTIsOCBAQCBzdGF0aWMgaW50IGV0bmF2aXZfZG9tYWluX21hcChzdHJ1 Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gKmRvbWFpbiwKPiAgCX0KPiAgCj4gIAl3aGlsZSAoc2l6 ZSkgewo+IC0JCXJldCA9IGRvbWFpbi0+b3BzLT5tYXAoZG9tYWluLCBpb3ZhLCBwYWRkciwgcGdz aXplLCBwcm90KTsKPiArCQlyZXQgPSBjb250ZXh0LT5nbG9iYWwtPm9wcy0+bWFwKGNvbnRleHQs IGlvdmEsIHBhZGRyLCBwZ3NpemUsCj4gKwkJCQkJCXByb3QpOwo+ICAJCWlmIChyZXQpCj4gIAkJ CWJyZWFrOwo+ICAKPiBAQCAtNjIsMjEgKzY0LDE5IEBAIHN0YXRpYyBpbnQgZXRuYXZpdl9kb21h aW5fbWFwKHN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqZG9tYWluLAo+ICAKPiAgCS8qIHVu cm9sbCBtYXBwaW5nIGluIGNhc2Ugc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KPiAgCWlmIChyZXQp Cj4gLQkJZXRuYXZpdl9kb21haW5fdW5tYXAoZG9tYWluLCBvcmlnX2lvdmEsIG9yaWdfc2l6ZSAt IHNpemUpOwo+ICsJCWV0bmF2aXZfY29udGV4dF91bm1hcChjb250ZXh0LCBvcmlnX2lvdmEsIG9y aWdfc2l6ZSAtIHNpemUpOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bnQgZXRuYXZpdl9pb21tdV9tYXAoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11LCB1MzIgaW92 YSwKPiArc3RhdGljIGludCBldG5hdml2X2lvbW11X21hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdV9j b250ZXh0ICpjb250ZXh0LCB1MzIgaW92YSwKPiAgCQkJICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNn dCwgdW5zaWduZWQgbGVuLCBpbnQgcHJvdCkKPiAtewo+IC0Jc3RydWN0IGV0bmF2aXZfaW9tbXVf ZG9tYWluICpkb21haW4gPSBpb21tdS0+ZG9tYWluOwo+IC0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsKPiArewlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICAJdW5zaWduZWQgaW50IGRhID0gaW92 YTsKPiAgCXVuc2lnbmVkIGludCBpLCBqOwo+ICAJaW50IHJldDsKPiAgCj4gLQlpZiAoIWRvbWFp biB8fCAhc2d0KQo+ICsJaWYgKCFjb250ZXh0IHx8ICFzZ3QpCj4gIAkJcmV0dXJuIC1FSU5WQUw7 Cj4gIAo+ICAJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNnLCBzZ3QtPm5lbnRzLCBpKSB7Cj4gQEAg LTg1LDcgKzg1LDcgQEAgc3RhdGljIGludCBldG5hdml2X2lvbW11X21hcChzdHJ1Y3QgZXRuYXZp dl9pb21tdSAqaW9tbXUsIHUzMiBpb3ZhLAo+ICAKPiAgCQlWRVJCKCJtYXBbJWRdOiAlMDh4ICUw OHgoJXp4KSIsIGksIGlvdmEsIHBhLCBieXRlcyk7Cj4gIAo+IC0JCXJldCA9IGV0bmF2aXZfZG9t YWluX21hcChkb21haW4sIGRhLCBwYSwgYnl0ZXMsIHByb3QpOwo+ICsJCXJldCA9IGV0bmF2aXZf Y29udGV4dF9tYXAoY29udGV4dCwgZGEsIHBhLCBieXRlcywgcHJvdCk7Cj4gIAkJaWYgKHJldCkK PiAgCQkJZ290byBmYWlsOwo+ICAKPiBAQCAtMTAwLDE2ICsxMDAsMTUgQEAgc3RhdGljIGludCBl dG5hdml2X2lvbW11X21hcChzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUsIHUzMiBpb3ZhLAo+ ICAJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNnLCBpLCBqKSB7Cj4gIAkJc2l6ZV90IGJ5dGVzID0g c2dfZG1hX2xlbihzZykgKyBzZy0+b2Zmc2V0Owo+ICAKPiAtCQlldG5hdml2X2RvbWFpbl91bm1h cChkb21haW4sIGRhLCBieXRlcyk7Cj4gKwkJZXRuYXZpdl9jb250ZXh0X3VubWFwKGNvbnRleHQs IGRhLCBieXRlcyk7Cj4gIAkJZGEgKz0gYnl0ZXM7Cj4gIAl9Cj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4gIAo+IC1zdGF0aWMgdm9pZCBldG5hdml2X2lvbW11X3VubWFwKHN0cnVjdCBldG5hdml2X2lv bW11ICppb21tdSwgdTMyIGlvdmEsCj4gK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXVfdW5tYXAo c3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwgdTMyIGlvdmEsCj4gIAkJCQlz dHJ1Y3Qgc2dfdGFibGUgKnNndCwgdW5zaWduZWQgbGVuKQo+ICB7Cj4gLQlzdHJ1Y3QgZXRuYXZp dl9pb21tdV9kb21haW4gKmRvbWFpbiA9IGlvbW11LT5kb21haW47Cj4gIAlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwo+ICAJdW5zaWduZWQgaW50IGRhID0gaW92YTsKPiAgCWludCBpOwo+IEBAIC0x MTcsNyArMTE2LDcgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdV91bm1hcChzdHJ1Y3QgZXRu YXZpdl9pb21tdSAqaW9tbXUsIHUzMiBpb3ZhLAo+ICAJZm9yX2VhY2hfc2coc2d0LT5zZ2wsIHNn LCBzZ3QtPm5lbnRzLCBpKSB7Cj4gIAkJc2l6ZV90IGJ5dGVzID0gc2dfZG1hX2xlbihzZykgKyBz Zy0+b2Zmc2V0Owo+ICAKPiAtCQlldG5hdml2X2RvbWFpbl91bm1hcChkb21haW4sIGRhLCBieXRl cyk7Cj4gKwkJZXRuYXZpdl9jb250ZXh0X3VubWFwKGNvbnRleHQsIGRhLCBieXRlcyk7Cj4gIAo+ ICAJCVZFUkIoInVubWFwWyVkXTogJTA4eCglengpIiwgaSwgaW92YSwgYnl0ZXMpOwo+ICAKPiBA QCAtMTI3LDI0ICsxMjYsMjQgQEAgc3RhdGljIHZvaWQgZXRuYXZpdl9pb21tdV91bm1hcChzdHJ1 Y3QgZXRuYXZpdl9pb21tdSAqaW9tbXUsIHUzMiBpb3ZhLAo+ICAJfQo+ICB9Cj4gIAo+IC1zdGF0 aWMgdm9pZCBldG5hdml2X2lvbW11X3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBldG5hdml2X2lvbW11 ICptbXUsCj4gK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXVfcmVtb3ZlX21hcHBpbmcoc3RydWN0 IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCXN0cnVjdCBldG5hdml2X3ZyYW1f bWFwcGluZyAqbWFwcGluZykKPiAgewo+ICAJc3RydWN0IGV0bmF2aXZfZ2VtX29iamVjdCAqZXRu YXZpdl9vYmogPSBtYXBwaW5nLT5vYmplY3Q7Cj4gIAo+IC0JZXRuYXZpdl9pb21tdV91bm1hcCht bXUsIG1hcHBpbmctPnZyYW1fbm9kZS5zdGFydCwKPiArCWV0bmF2aXZfaW9tbXVfdW5tYXAoY29u dGV4dCwgbWFwcGluZy0+dnJhbV9ub2RlLnN0YXJ0LAo+ICAJCQkgICAgZXRuYXZpdl9vYmotPnNn dCwgZXRuYXZpdl9vYmotPmJhc2Uuc2l6ZSk7Cj4gIAlkcm1fbW1fcmVtb3ZlX25vZGUoJm1hcHBp bmctPnZyYW1fbm9kZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZXRuYXZpdl9pb21tdV9maW5k X2lvdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKPiArc3RhdGljIGludCBldG5hdml2X2lv bW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0LAo+ICAJ CQkJICAgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLCBzaXplX3Qgc2l6ZSkKPiAgewo+ICAJc3Ry dWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICpmcmVlID0gTlVMTDsKPiAgCWVudW0gZHJtX21tX2lu c2VydF9tb2RlIG1vZGUgPSBEUk1fTU1fSU5TRVJUX0xPVzsKPiAgCWludCByZXQ7Cj4gIAo+IC0J bG9ja2RlcF9hc3NlcnRfaGVsZCgmbW11LT5sb2NrKTsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JmNvbnRleHQtPmxvY2spOwo+ICAKPiAgCXdoaWxlICgxKSB7Cj4gIAkJc3RydWN0IGV0bmF2aXZf dnJhbV9tYXBwaW5nICptLCAqbjsKPiBAQCAtMTUyLDE3ICsxNTEsMTcgQEAgc3RhdGljIGludCBl dG5hdml2X2lvbW11X2ZpbmRfaW92YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ICAJCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAgCQlib29sIGZvdW5kOwo+ICAKPiAtCQlyZXQgPSBkcm1f bW1faW5zZXJ0X25vZGVfaW5fcmFuZ2UoJm1tdS0+bW0sIG5vZGUsCj4gKwkJcmV0ID0gZHJtX21t X2luc2VydF9ub2RlX2luX3JhbmdlKCZjb250ZXh0LT5tbSwgbm9kZSwKPiAgCQkJCQkJICBzaXpl LCAwLCAwLCAwLCBVNjRfTUFYLCBtb2RlKTsKPiAgCQlpZiAocmV0ICE9IC1FTk9TUEMpCj4gIAkJ CWJyZWFrOwo+ICAKPiAgCQkvKiBUcnkgdG8gcmV0aXJlIHNvbWUgZW50cmllcyAqLwo+IC0JCWRy bV9tbV9zY2FuX2luaXQoJnNjYW4sICZtbXUtPm1tLCBzaXplLCAwLCAwLCBtb2RlKTsKPiArCQlk cm1fbW1fc2Nhbl9pbml0KCZzY2FuLCAmY29udGV4dC0+bW0sIHNpemUsIDAsIDAsIG1vZGUpOwo+ ICAKPiAgCQlmb3VuZCA9IDA7Cj4gIAkJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwo+IC0JCWxpc3Rf Zm9yX2VhY2hfZW50cnkoZnJlZSwgJm1tdS0+bWFwcGluZ3MsIG1tdV9ub2RlKSB7Cj4gKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShmcmVlLCAmY29udGV4dC0+bWFwcGluZ3MsIG1tdV9ub2RlKSB7Cj4g IAkJCS8qIElmIHRoaXMgdnJhbSBub2RlIGhhcyBub3QgYmVlbiB1c2VkLCBza2lwIHRoaXMuICov Cj4gIAkJCWlmICghZnJlZS0+dnJhbV9ub2RlLm1tKQo+ICAJCQkJY29udGludWU7Cj4gQEAgLTIw NCw4ICsyMDMsOCBAQCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKHN0cnVjdCBl dG5hdml2X2lvbW11ICptbXUsCj4gIAkJICogdGhpcyBtYXBwaW5nLgo+ICAJCSAqLwo+ICAJCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShtLCBuLCAmbGlzdCwgc2Nhbl9ub2RlKSB7Cj4gLQkJCWV0 bmF2aXZfaW9tbXVfcmVtb3ZlX21hcHBpbmcobW11LCBtKTsKPiAtCQkJbS0+bW11ID0gTlVMTDsK PiArCQkJZXRuYXZpdl9pb21tdV9yZW1vdmVfbWFwcGluZyhjb250ZXh0LCBtKTsKPiArCQkJbS0+ Y29udGV4dCA9IE5VTEw7Cj4gIAkJCWxpc3RfZGVsX2luaXQoJm0tPm1tdV9ub2RlKTsKPiAgCQkJ bGlzdF9kZWxfaW5pdCgmbS0+c2Nhbl9ub2RlKTsKPiAgCQl9Cj4gQEAgLTIyMSw3ICsyMjAsNyBA QCBzdGF0aWMgaW50IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKHN0cnVjdCBldG5hdml2X2lvbW11 ICptbXUsCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1pbnQgZXRuYXZpdl9pb21tdV9tYXBf Z2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCj4gK2ludCBldG5hdml2X2lvbW11X21hcF9n ZW0oc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCXN0cnVjdCBldG5h dml2X2dlbV9vYmplY3QgKmV0bmF2aXZfb2JqLCB1MzIgbWVtb3J5X2Jhc2UsCj4gIAlzdHJ1Y3Qg ZXRuYXZpdl92cmFtX21hcHBpbmcgKm1hcHBpbmcpCj4gIHsKPiBAQCAtMjMxLDE3ICsyMzAsMTcg QEAgaW50IGV0bmF2aXZfaW9tbXVfbWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ ICAKPiAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmV0bmF2aXZfb2JqLT5sb2NrKTsKPiAgCj4gLQlt dXRleF9sb2NrKCZtbXUtPmxvY2spOwo+ICsJbXV0ZXhfbG9jaygmY29udGV4dC0+bG9jayk7Cj4g IAo+ICAJLyogdjEgTU1VIGNhbiBvcHRpbWl6ZSBzaW5nbGUgZW50cnkgKGNvbnRpZ3VvdXMpIHNj YXR0ZXJsaXN0cyAqLwo+IC0JaWYgKG1tdS0+dmVyc2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxICYm Cj4gKwlpZiAoY29udGV4dC0+Z2xvYmFsLT52ZXJzaW9uID09IEVUTkFWSVZfSU9NTVVfVjEgJiYK PiAgCSAgICBzZ3QtPm5lbnRzID09IDEgJiYgIShldG5hdml2X29iai0+ZmxhZ3MgJiBFVE5BX0JP X0ZPUkNFX01NVSkpIHsKPiAgCQl1MzIgaW92YTsKPiAgCj4gIAkJaW92YSA9IHNnX2RtYV9hZGRy ZXNzKHNndC0+c2dsKSAtIG1lbW9yeV9iYXNlOwo+ICAJCWlmIChpb3ZhIDwgMHg4MDAwMDAwMCAt IHNnX2RtYV9sZW4oc2d0LT5zZ2wpKSB7Cj4gIAkJCW1hcHBpbmctPmlvdmEgPSBpb3ZhOwo+IC0J CQlsaXN0X2FkZF90YWlsKCZtYXBwaW5nLT5tbXVfbm9kZSwgJm1tdS0+bWFwcGluZ3MpOwo+ICsJ CQlsaXN0X2FkZF90YWlsKCZtYXBwaW5nLT5tbXVfbm9kZSwgJmNvbnRleHQtPm1hcHBpbmdzKTsK PiAgCQkJcmV0ID0gMDsKPiAgCQkJZ290byB1bmxvY2s7Cj4gIAkJfQo+IEBAIC0yNDksMTIgKzI0 OCwxMiBAQCBpbnQgZXRuYXZpdl9pb21tdV9tYXBfZ2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICpt bXUsCj4gIAo+ICAJbm9kZSA9ICZtYXBwaW5nLT52cmFtX25vZGU7Cj4gIAo+IC0JcmV0ID0gZXRu YXZpdl9pb21tdV9maW5kX2lvdmEobW11LCBub2RlLCBldG5hdml2X29iai0+YmFzZS5zaXplKTsK PiArCXJldCA9IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKGNvbnRleHQsIG5vZGUsIGV0bmF2aXZf b2JqLT5iYXNlLnNpemUpOwo+ICAJaWYgKHJldCA8IDApCj4gIAkJZ290byB1bmxvY2s7Cj4gIAo+ ICAJbWFwcGluZy0+aW92YSA9IG5vZGUtPnN0YXJ0Owo+IC0JcmV0ID0gZXRuYXZpdl9pb21tdV9t YXAobW11LCBub2RlLT5zdGFydCwgc2d0LCBldG5hdml2X29iai0+YmFzZS5zaXplLAo+ICsJcmV0 ID0gZXRuYXZpdl9pb21tdV9tYXAoY29udGV4dCwgbm9kZS0+c3RhcnQsIHNndCwgZXRuYXZpdl9v YmotPmJhc2Uuc2l6ZSwKPiAgCQkJCUVUTkFWSVZfUFJPVF9SRUFEIHwgRVROQVZJVl9QUk9UX1dS SVRFKTsKPiAgCj4gIAlpZiAocmV0IDwgMCkgewo+IEBAIC0yNjIsODQgKzI2MSw2MyBAQCBpbnQg ZXRuYXZpdl9pb21tdV9tYXBfZ2VtKHN0cnVjdCBldG5hdml2X2lvbW11ICptbXUsCj4gIAkJZ290 byB1bmxvY2s7Cj4gIAl9Cj4gIAo+IC0JbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bW11X25vZGUs ICZtbXUtPm1hcHBpbmdzKTsKPiAtCW1tdS0+Zmx1c2hfc2VxKys7Cj4gKwlsaXN0X2FkZF90YWls KCZtYXBwaW5nLT5tbXVfbm9kZSwgJmNvbnRleHQtPm1hcHBpbmdzKTsKPiArCWNvbnRleHQtPmZs dXNoX3NlcSsrOwo+ICB1bmxvY2s6Cj4gLQltdXRleF91bmxvY2soJm1tdS0+bG9jayk7Cj4gKwlt dXRleF91bmxvY2soJmNvbnRleHQtPmxvY2spOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAg Cj4gLXZvaWQgZXRuYXZpdl9pb21tdV91bm1hcF9nZW0oc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1t dSwKPiArdm9pZCBldG5hdml2X2lvbW11X3VubWFwX2dlbShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9j b250ZXh0ICpjb250ZXh0LAo+ICAJc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5n KQo+ICB7Cj4gIAlXQVJOX09OKG1hcHBpbmctPnVzZSk7Cj4gIAo+IC0JbXV0ZXhfbG9jaygmbW11 LT5sb2NrKTsKPiArCW11dGV4X2xvY2soJmNvbnRleHQtPmxvY2spOwo+ICAKPiAgCS8qIElmIHRo ZSB2cmFtIG5vZGUgaXMgb24gdGhlIG1tLCB1bm1hcCBhbmQgcmVtb3ZlIHRoZSBub2RlICovCj4g LQlpZiAobWFwcGluZy0+dnJhbV9ub2RlLm1tID09ICZtbXUtPm1tKQo+IC0JCWV0bmF2aXZfaW9t bXVfcmVtb3ZlX21hcHBpbmcobW11LCBtYXBwaW5nKTsKPiArCWlmIChtYXBwaW5nLT52cmFtX25v ZGUubW0gPT0gJmNvbnRleHQtPm1tKQo+ICsJCWV0bmF2aXZfaW9tbXVfcmVtb3ZlX21hcHBpbmco Y29udGV4dCwgbWFwcGluZyk7Cj4gIAo+ICAJbGlzdF9kZWwoJm1hcHBpbmctPm1tdV9ub2RlKTsK PiAtCW1tdS0+Zmx1c2hfc2VxKys7Cj4gLQltdXRleF91bmxvY2soJm1tdS0+bG9jayk7Cj4gKwlj b250ZXh0LT5mbHVzaF9zZXErKzsKPiArCW11dGV4X3VubG9jaygmY29udGV4dC0+bG9jayk7Cj4g IH0KPiAgCj4gLXZvaWQgZXRuYXZpdl9pb21tdV9kZXN0cm95KHN0cnVjdCBldG5hdml2X2lvbW11 ICptbXUpCj4gK3N0YXRpYyB2b2lkIGV0bmF2aXZfaW9tbXVfY29udGV4dF9mcmVlKHN0cnVjdCBr cmVmICprcmVmKQo+ICB7Cj4gLQlkcm1fbW1fdGFrZWRvd24oJm1tdS0+bW0pOwo+IC0JbW11LT5k b21haW4tPm9wcy0+ZnJlZShtbXUtPmRvbWFpbik7Cj4gLQlrZnJlZShtbXUpOwo+IC19Cj4gKwlz dHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0ID0KPiArCQljb250YWluZXJfb2Yo a3JlZiwgc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCwgcmVmY291bnQpOwo+ICAKPiAtc3Ry dWN0IGV0bmF2aXZfaW9tbXUgKmV0bmF2aXZfaW9tbXVfbmV3KHN0cnVjdCBldG5hdml2X2dwdSAq Z3B1KQo+ICsJY29udGV4dC0+Z2xvYmFsLT5vcHMtPmZyZWUoY29udGV4dCk7Cj4gK30KPiArdm9p ZCBldG5hdml2X2lvbW11X2NvbnRleHRfcHV0KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQg KmNvbnRleHQpCj4gIHsKPiAtCWVudW0gZXRuYXZpdl9pb21tdV92ZXJzaW9uIHZlcnNpb247Cj4g LQlzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11Owo+IC0KPiAtCW1tdSA9IGt6YWxsb2Moc2l6ZW9m KCptbXUpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghbW11KQo+IC0JCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+IC0KPiAtCWlmICghKGdwdS0+aWRlbnRpdHkubWlub3JfZmVhdHVyZXMxICYgY2hp cE1pbm9yRmVhdHVyZXMxX01NVV9WRVJTSU9OKSkgewo+IC0JCW1tdS0+ZG9tYWluID0gZXRuYXZp dl9pb21tdXYxX2RvbWFpbl9hbGxvYyhncHUpOwo+IC0JCXZlcnNpb24gPSBFVE5BVklWX0lPTU1V X1YxOwo+IC0JfSBlbHNlIHsKPiAtCQltbXUtPmRvbWFpbiA9IGV0bmF2aXZfaW9tbXV2Ml9kb21h aW5fYWxsb2MoZ3B1KTsKPiAtCQl2ZXJzaW9uID0gRVROQVZJVl9JT01NVV9WMjsKPiAtCX0KPiAt Cj4gLQlpZiAoIW1tdS0+ZG9tYWluKSB7Cj4gLQkJZGV2X2VycihncHUtPmRldiwgIkZhaWxlZCB0 byBhbGxvY2F0ZSBHUFUgSU9NTVUgZG9tYWluXG4iKTsKPiAtCQlrZnJlZShtbXUpOwo+IC0JCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0JfQo+IC0KPiAtCW1tdS0+Z3B1ID0gZ3B1Owo+IC0J bW11LT52ZXJzaW9uID0gdmVyc2lvbjsKPiAtCW11dGV4X2luaXQoJm1tdS0+bG9jayk7Cj4gLQlJ TklUX0xJU1RfSEVBRCgmbW11LT5tYXBwaW5ncyk7Cj4gLQo+IC0JZHJtX21tX2luaXQoJm1tdS0+ bW0sIG1tdS0+ZG9tYWluLT5iYXNlLCBtbXUtPmRvbWFpbi0+c2l6ZSk7Cj4gLQo+IC0JcmV0dXJu IG1tdTsKPiArCWtyZWZfcHV0KCZjb250ZXh0LT5yZWZjb3VudCwgZXRuYXZpdl9pb21tdV9jb250 ZXh0X2ZyZWUpOwo+ICB9Cj4gIAo+IC12b2lkIGV0bmF2aXZfaW9tbXVfcmVzdG9yZShzdHJ1Y3Qg ZXRuYXZpdl9ncHUgKmdwdSkKPiArc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqCj4gK2V0 bmF2aXZfaW9tbXVfY29udGV4dF9pbml0KHN0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAqZ2xv YmFsKQo+ICB7Cj4gLQlpZiAoZ3B1LT5tbXUtPnZlcnNpb24gPT0gRVROQVZJVl9JT01NVV9WMSkK PiAtCQlldG5hdml2X2lvbW11djFfcmVzdG9yZShncHUpOwo+ICsJaWYgKGdsb2JhbC0+dmVyc2lv biA9PSBFVE5BVklWX0lPTU1VX1YxKQo+ICsJCXJldHVybiBldG5hdml2X2lvbW11djFfY29udGV4 dF9hbGxvYyhnbG9iYWwpOwo+ICAJZWxzZQo+IC0JCWV0bmF2aXZfaW9tbXV2Ml9yZXN0b3JlKGdw dSk7Cj4gKwkJcmV0dXJuIGV0bmF2aXZfaW9tbXV2Ml9jb250ZXh0X2FsbG9jKGdsb2JhbCk7Cj4g K30KPiArCj4gK3ZvaWQgZXRuYXZpdl9pb21tdV9yZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAq Z3B1LAo+ICsJCQkgICBzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0ICpjb250ZXh0KQo+ICt7 Cj4gKwljb250ZXh0LT5nbG9iYWwtPm9wcy0+cmVzdG9yZShncHUsIGNvbnRleHQpOwo+ICB9Cj4g IAo+IC1pbnQgZXRuYXZpdl9pb21tdV9nZXRfc3ViYWxsb2NfdmEoc3RydWN0IGV0bmF2aXZfaW9t bXUgKm1tdSwKPiAraW50IGV0bmF2aXZfaW9tbXVfZ2V0X3N1YmFsbG9jX3ZhKHN0cnVjdCBldG5h dml2X2lvbW11X2NvbnRleHQgKmNvbnRleHQsCj4gIAkJCQkgIHN0cnVjdCBldG5hdml2X3ZyYW1f bWFwcGluZyAqbWFwcGluZywKPiAgCQkJCSAgdTMyIG1lbW9yeV9iYXNlLCBkbWFfYWRkcl90IHBh ZGRyLAo+ICAJCQkJICBzaXplX3Qgc2l6ZSkKPiAgewo+IC0JbXV0ZXhfbG9jaygmbW11LT5sb2Nr KTsKPiArCW11dGV4X2xvY2soJmNvbnRleHQtPmxvY2spOwo+ICAKPiAgCS8qCj4gIAkgKiBGb3Ig TU1VdjEgd2UgZG9uJ3QgYWRkIHRoZSBzdWJhbGxvYyByZWdpb24gdG8gdGhlIHBhZ2V0YWJsZXMs IGFzCj4gQEAgLTM0Nyw0MCArMzI1LDQwIEBAIGludCBldG5hdml2X2lvbW11X2dldF9zdWJhbGxv Y192YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11LAo+ICAJICogd2luZG93LiBJbnN0ZWFkIHdl IG1hbnVmYWN0dXJlIGEgbWFwcGluZyB0byBtYWtlIGl0IGxvb2sgdW5pZm9ybQo+ICAJICogdG8g dGhlIHVwcGVyIGxheWVycy4KPiAgCSAqLwo+IC0JaWYgKG1tdS0+dmVyc2lvbiA9PSBFVE5BVklW X0lPTU1VX1YxKSB7Cj4gKwlpZiAoY29udGV4dC0+Z2xvYmFsLT52ZXJzaW9uID09IEVUTkFWSVZf SU9NTVVfVjEpIHsKPiAgCQltYXBwaW5nLT5pb3ZhID0gcGFkZHIgLSBtZW1vcnlfYmFzZTsKPiAg CX0gZWxzZSB7Cj4gIAkJc3RydWN0IGRybV9tbV9ub2RlICpub2RlID0gJm1hcHBpbmctPnZyYW1f bm9kZTsKPiAgCQlpbnQgcmV0Owo+ICAKPiAtCQlyZXQgPSBldG5hdml2X2lvbW11X2ZpbmRfaW92 YShtbXUsIG5vZGUsIHNpemUpOwo+ICsJCXJldCA9IGV0bmF2aXZfaW9tbXVfZmluZF9pb3ZhKGNv bnRleHQsIG5vZGUsIHNpemUpOwo+ICAJCWlmIChyZXQgPCAwKSB7Cj4gLQkJCW11dGV4X3VubG9j aygmbW11LT5sb2NrKTsKPiArCQkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5sb2NrKTsKPiAgCQkJ cmV0dXJuIHJldDsKPiAgCQl9Cj4gIAo+ICAJCW1hcHBpbmctPmlvdmEgPSBub2RlLT5zdGFydDsK PiAtCQlyZXQgPSBldG5hdml2X2RvbWFpbl9tYXAobW11LT5kb21haW4sIG5vZGUtPnN0YXJ0LCBw YWRkciwgc2l6ZSwKPiAtCQkJCQkgRVROQVZJVl9QUk9UX1JFQUQpOwo+ICsJCXJldCA9IGV0bmF2 aXZfY29udGV4dF9tYXAoY29udGV4dCwgbm9kZS0+c3RhcnQsIHBhZGRyLCBzaXplLAo+ICsJCQkJ CSAgRVROQVZJVl9QUk9UX1JFQUQpOwo+ICAKPiAgCQlpZiAocmV0IDwgMCkgewo+ICAJCQlkcm1f bW1fcmVtb3ZlX25vZGUobm9kZSk7Cj4gLQkJCW11dGV4X3VubG9jaygmbW11LT5sb2NrKTsKPiAr CQkJbXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5sb2NrKTsKPiAgCQkJcmV0dXJuIHJldDsKPiAgCQl9 Cj4gIAo+IC0JCW1tdS0+Zmx1c2hfc2VxKys7Cj4gKwkJY29udGV4dC0+Zmx1c2hfc2VxKys7Cj4g IAl9Cj4gIAo+IC0JbGlzdF9hZGRfdGFpbCgmbWFwcGluZy0+bW11X25vZGUsICZtbXUtPm1hcHBp bmdzKTsKPiArCWxpc3RfYWRkX3RhaWwoJm1hcHBpbmctPm1tdV9ub2RlLCAmY29udGV4dC0+bWFw cGluZ3MpOwo+ICAJbWFwcGluZy0+dXNlID0gMTsKPiAgCj4gLQltdXRleF91bmxvY2soJm1tdS0+ bG9jayk7Cj4gKwltdXRleF91bmxvY2soJmNvbnRleHQtPmxvY2spOwo+ICAKPiAgCXJldHVybiAw Owo+ICB9Cj4gIAo+IC12b2lkIGV0bmF2aXZfaW9tbXVfcHV0X3N1YmFsbG9jX3ZhKHN0cnVjdCBl dG5hdml2X2lvbW11ICptbXUsCj4gK3ZvaWQgZXRuYXZpdl9pb21tdV9wdXRfc3ViYWxsb2NfdmEo c3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCQkgIHN0cnVjdCBldG5h dml2X3ZyYW1fbWFwcGluZyAqbWFwcGluZykKPiAgewo+ICAJc3RydWN0IGRybV9tbV9ub2RlICpu b2RlID0gJm1hcHBpbmctPnZyYW1fbm9kZTsKPiBAQCAtMzkwLDIxICszNjgsMTA0IEBAIHZvaWQg ZXRuYXZpdl9pb21tdV9wdXRfc3ViYWxsb2NfdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwK PiAgCj4gIAltYXBwaW5nLT51c2UgPSAwOwo+ICAKPiAtCWlmIChtbXUtPnZlcnNpb24gPT0gRVRO QVZJVl9JT01NVV9WMSkKPiArCWlmIChjb250ZXh0LT5nbG9iYWwtPnZlcnNpb24gPT0gRVROQVZJ Vl9JT01NVV9WMSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JbXV0ZXhfbG9jaygmbW11LT5sb2NrKTsK PiAtCWV0bmF2aXZfZG9tYWluX3VubWFwKG1tdS0+ZG9tYWluLCBub2RlLT5zdGFydCwgbm9kZS0+ c2l6ZSk7Cj4gKwltdXRleF9sb2NrKCZjb250ZXh0LT5sb2NrKTsKPiArCWV0bmF2aXZfY29udGV4 dF91bm1hcChjb250ZXh0LCBub2RlLT5zdGFydCwgbm9kZS0+c2l6ZSk7Cj4gIAlkcm1fbW1fcmVt b3ZlX25vZGUobm9kZSk7Cj4gLQltdXRleF91bmxvY2soJm1tdS0+bG9jayk7Cj4gKwltdXRleF91 bmxvY2soJmNvbnRleHQtPmxvY2spOwo+ICt9Cj4gKwo+ICtzaXplX3QgZXRuYXZpdl9pb21tdV9k dW1wX3NpemUoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCkKPiArewo+ICsJ cmV0dXJuIGNvbnRleHQtPmdsb2JhbC0+b3BzLT5kdW1wX3NpemUoY29udGV4dCk7Cj4gK30KPiAr Cj4gK3ZvaWQgZXRuYXZpdl9pb21tdV9kdW1wKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQg KmNvbnRleHQsIHZvaWQgKmJ1ZikKPiArewo+ICsJY29udGV4dC0+Z2xvYmFsLT5vcHMtPmR1bXAo Y29udGV4dCwgYnVmKTsKPiAgfQo+ICAKPiAtc2l6ZV90IGV0bmF2aXZfaW9tbXVfZHVtcF9zaXpl KHN0cnVjdCBldG5hdml2X2lvbW11ICppb21tdSkKPiAraW50IGV0bmF2aXZfaW9tbXVfZ2xvYmFs X2luaXQoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpCj4gIHsKPiAtCXJldHVybiBpb21tdS0+ZG9t YWluLT5vcHMtPmR1bXBfc2l6ZShpb21tdS0+ZG9tYWluKTsKPiArCWVudW0gZXRuYXZpdl9pb21t dV92ZXJzaW9uIHZlcnNpb24gPSBFVE5BVklWX0lPTU1VX1YxOwo+ICsJc3RydWN0IGV0bmF2aXZf ZHJtX3ByaXZhdGUgKnByaXYgPSBncHUtPmRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgZXRu YXZpdl9pb21tdV9nbG9iYWwgKmdsb2JhbDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGdwdS0+ ZHJtLT5kZXY7Cj4gKwo+ICsJaWYgKGdwdS0+aWRlbnRpdHkubWlub3JfZmVhdHVyZXMxICYgY2hp cE1pbm9yRmVhdHVyZXMxX01NVV9WRVJTSU9OKQo+ICsJCXZlcnNpb24gPSBFVE5BVklWX0lPTU1V X1YyOwo+ICsKPiArCWlmIChwcml2LT5tbXVfZ2xvYmFsKSB7Cj4gKwkJaWYgKHByaXYtPm1tdV9n bG9iYWwtPnZlcnNpb24gIT0gdmVyc2lvbikgewo+ICsJCQlkZXZfZXJyKGdwdS0+ZGV2LAo+ICsJ CQkJIk1NVSB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFsIHZlcnNpb25cbiIpOwo+ICsJCQly ZXR1cm4gLUVOWElPOwo+ICsJCX0KPiArCj4gKwkJcHJpdi0+bW11X2dsb2JhbC0+dXNlKys7Cj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZ2xvYmFsID0ga3phbGxvYyhzaXplb2YoKmdsb2Jh bCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFnbG9iYWwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4g Kwo+ICsJZ2xvYmFsLT5iYWRfcGFnZV9jcHUgPSBkbWFfYWxsb2Nfd2MoZGV2LCBTWl80SywgJmds b2JhbC0+YmFkX3BhZ2VfZG1hLAo+ICsJCQkJCSAgICBHRlBfS0VSTkVMKTsKPiArCWlmICghZ2xv YmFsLT5iYWRfcGFnZV9jcHUpCj4gKwkJZ290byBmcmVlX2dsb2JhbDsKPiArCj4gKwltZW1zZXQz MihnbG9iYWwtPmJhZF9wYWdlX2NwdSwgMHhkZWFkNTVhYSwgU1pfNEsgLyBzaXplb2YodTMyKSk7 Cj4gKwo+ICsJaWYgKHZlcnNpb24gPT0gRVROQVZJVl9JT01NVV9WMikgewo+ICsJCWdsb2JhbC0+ djIucHRhX2NwdSA9IGRtYV9hbGxvY193YyhkZXYsIEVUTkFWSVZfUFRBX1NJWkUsCj4gKwkJCQkJ ICAgICAgICZnbG9iYWwtPnYyLnB0YV9kbWEsIEdGUF9LRVJORUwpOwo+ICsJCWlmICghZ2xvYmFs LT52Mi5wdGFfY3B1KQo+ICsJCQlnb3RvIGZyZWVfYmFkX3BhZ2U7Cj4gKwl9Cj4gKwo+ICsJZ2xv YmFsLT5kZXYgPSBkZXY7Cj4gKwlnbG9iYWwtPnZlcnNpb24gPSB2ZXJzaW9uOwo+ICsJZ2xvYmFs LT51c2UgPSAxOwo+ICsJbXV0ZXhfaW5pdCgmZ2xvYmFsLT5sb2NrKTsKPiArCj4gKwlpZiAodmVy c2lvbiA9PSBFVE5BVklWX0lPTU1VX1YxKQo+ICsJCWdsb2JhbC0+b3BzID0gJmV0bmF2aXZfaW9t bXV2MV9vcHM7Cj4gKwllbHNlCj4gKwkJZ2xvYmFsLT5vcHMgPSAmZXRuYXZpdl9pb21tdXYyX29w czsKPiArCj4gKwlwcml2LT5tbXVfZ2xvYmFsID0gZ2xvYmFsOwo+ICsKPiArCXJldHVybiAwOwo+ ICsKPiArZnJlZV9iYWRfcGFnZToKPiArCWRtYV9mcmVlX3djKGRldiwgU1pfNEssIGdsb2JhbC0+ YmFkX3BhZ2VfY3B1LCBnbG9iYWwtPmJhZF9wYWdlX2RtYSk7Cj4gK2ZyZWVfZ2xvYmFsOgo+ICsJ a2ZyZWUoZ2xvYmFsKTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiAgfQo+ICAKPiAtdm9pZCBl dG5hdml2X2lvbW11X2R1bXAoc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11LCB2b2lkICpidWYp Cj4gK3ZvaWQgZXRuYXZpdl9pb21tdV9nbG9iYWxfZmluaShzdHJ1Y3QgZXRuYXZpdl9ncHUgKmdw dSkKPiAgewo+IC0JaW9tbXUtPmRvbWFpbi0+b3BzLT5kdW1wKGlvbW11LT5kb21haW4sIGJ1Zik7 Cj4gKwlzdHJ1Y3QgZXRuYXZpdl9kcm1fcHJpdmF0ZSAqcHJpdiA9IGdwdS0+ZHJtLT5kZXZfcHJp dmF0ZTsKPiArCXN0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAqZ2xvYmFsID0gcHJpdi0+bW11 X2dsb2JhbDsKPiArCj4gKwlpZiAoLS1nbG9iYWwtPnVzZSA+IDApCj4gKwkJcmV0dXJuOwo+ICsK PiArCWlmIChnbG9iYWwtPnYyLnB0YV9jcHUpCj4gKwkJZG1hX2ZyZWVfd2MoZ2xvYmFsLT5kZXYs IEVUTkFWSVZfUFRBX1NJWkUsCj4gKwkJCSAgICBnbG9iYWwtPnYyLnB0YV9jcHUsIGdsb2JhbC0+ djIucHRhX2RtYSk7Cj4gKwo+ICsJaWYgKGdsb2JhbC0+YmFkX3BhZ2VfY3B1KQo+ICsJCWRtYV9m cmVlX3djKGdsb2JhbC0+ZGV2LCBTWl80SywKPiArCQkJICAgIGdsb2JhbC0+YmFkX3BhZ2VfY3B1 LCBnbG9iYWwtPmJhZF9wYWdlX2RtYSk7Cj4gKwo+ICsJbXV0ZXhfZGVzdHJveSgmZ2xvYmFsLT5s b2NrKTsKPiArCWtmcmVlKGdsb2JhbCk7Cj4gKwo+ICsJcHJpdi0+bW11X2dsb2JhbCA9IE5VTEw7 Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9tbXUu aCBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfbW11LmgKPiBpbmRleCAzNGFmZTI1 ZGY5Y2EuLjQ0MzhkNjZkYjZhYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZp di9ldG5hdml2X21tdS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9t bXUuaAo+IEBAIC0xNiwzMyArMTYsNTggQEAgZW51bSBldG5hdml2X2lvbW11X3ZlcnNpb24gewo+ ICAKPiAgc3RydWN0IGV0bmF2aXZfZ3B1Owo+ICBzdHJ1Y3QgZXRuYXZpdl92cmFtX21hcHBpbmc7 Cj4gLXN0cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbjsKPiArc3RydWN0IGV0bmF2aXZfaW9tbXVf Z2xvYmFsOwo+ICtzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0Owo+ICAKPiAtc3RydWN0IGV0 bmF2aXZfaW9tbXVfZG9tYWluX29wcyB7Cj4gLQl2b2lkICgqZnJlZSkoc3RydWN0IGV0bmF2aXZf aW9tbXVfZG9tYWluICopOwo+IC0JaW50ICgqbWFwKShzdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21h aW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAo+ICtzdHJ1Y3QgZXRuYXZpdl9pb21tdV9v cHMgewo+ICsJc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqKCppbml0KShzdHJ1Y3QgZXRu YXZpdl9pb21tdV9nbG9iYWwgKik7Cj4gKwl2b2lkICgqZnJlZSkoc3RydWN0IGV0bmF2aXZfaW9t bXVfY29udGV4dCAqKTsKPiArCWludCAoKm1hcCkoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4 dCAqY29udGV4dCwgdW5zaWduZWQgbG9uZyBpb3ZhLAo+ICAJCSAgIHBoeXNfYWRkcl90IHBhZGRy LCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpOwo+IC0Jc2l6ZV90ICgqdW5tYXApKHN0cnVjdCBldG5h dml2X2lvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCj4gKwlzaXplX3Qg KCp1bm1hcCkoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQg bG9uZyBpb3ZhLAo+ICAJCQlzaXplX3Qgc2l6ZSk7Cj4gLQlzaXplX3QgKCpkdW1wX3NpemUpKHN0 cnVjdCBldG5hdml2X2lvbW11X2RvbWFpbiAqKTsKPiAtCXZvaWQgKCpkdW1wKShzdHJ1Y3QgZXRu YXZpdl9pb21tdV9kb21haW4gKiwgdm9pZCAqKTsKPiArCXNpemVfdCAoKmR1bXBfc2l6ZSkoc3Ry dWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqKTsKPiArCXZvaWQgKCpkdW1wKShzdHJ1Y3QgZXRu YXZpdl9pb21tdV9jb250ZXh0ICosIHZvaWQgKik7Cj4gKwl2b2lkICgqcmVzdG9yZSkoc3RydWN0 IGV0bmF2aXZfZ3B1ICosIHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKik7Cj4gIH07Cj4g IAo+IC1zdHJ1Y3QgZXRuYXZpdl9pb21tdV9kb21haW4gewo+ICtleHRlcm4gY29uc3Qgc3RydWN0 IGV0bmF2aXZfaW9tbXVfb3BzIGV0bmF2aXZfaW9tbXV2MV9vcHM7Cj4gK2V4dGVybiBjb25zdCBz dHJ1Y3QgZXRuYXZpdl9pb21tdV9vcHMgZXRuYXZpdl9pb21tdXYyX29wczsKPiArCj4gKyNkZWZp bmUgRVROQVZJVl9QVEFfU0laRQlTWl80Swo+ICsjZGVmaW5lIEVUTkFWSVZfUFRBX0VOVFJJRVMJ KEVUTkFWSVZfUFRBX1NJWkUgLyBzaXplb2YodTY0KSkKPiArCj4gK3N0cnVjdCBldG5hdml2X2lv bW11X2dsb2JhbCB7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwllbnVtIGV0bmF2aXZfaW9t bXVfdmVyc2lvbiB2ZXJzaW9uOwo+ICsJY29uc3Qgc3RydWN0IGV0bmF2aXZfaW9tbXVfb3BzICpv cHM7Cj4gKwl1bnNpZ25lZCBpbnQgdXNlOwo+ICsJc3RydWN0IG11dGV4IGxvY2s7Cj4gKwo+ICAJ dm9pZCAqYmFkX3BhZ2VfY3B1Owo+ICAJZG1hX2FkZHJfdCBiYWRfcGFnZV9kbWE7Cj4gLQl1NjQg YmFzZTsKPiAtCXU2NCBzaXplOwo+ICAKPiAtCWNvbnN0IHN0cnVjdCBldG5hdml2X2lvbW11X2Rv bWFpbl9vcHMgKm9wczsKPiArCS8qCj4gKwkgKiBUaGlzIHVuaW9uIGhvbGRzIG1lbWJlcnMgbmVl ZGVkIGJ5IGVpdGhlciBNTVV2MSBvciBNTVV2Miwgd2hpY2gKPiArCSAqIGNhbiBub3QgZXhpc3Qg YXQgdGhlIHNhbWUgdGltZS4KPiArCSAqLwo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCB7Cj4gKwkJ CXN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKnNoYXJlZF9jb250ZXh0Owo+ICsJCX0gdjE7 Cj4gKwkJc3RydWN0IHsKPiArCQkJLyogUChhZ2UpIFQoYWJsZSkgQShycmF5KSAqLwo+ICsJCQl1 NjQgKnB0YV9jcHU7Cj4gKwkJCWRtYV9hZGRyX3QgcHRhX2RtYTsKPiArCQkJc3RydWN0IHNwaW5s b2NrIHB0YV9sb2NrOwo+ICsJCQlERUNMQVJFX0JJVE1BUChwdGFfYWxsb2MsIEVUTkFWSVZfUFRB X0VOVFJJRVMpOwo+ICsJCX0gdjI7Cj4gKwl9Owo+ICB9Owo+ICAKPiAtc3RydWN0IGV0bmF2aXZf aW9tbXUgewo+IC0Jc3RydWN0IGV0bmF2aXZfZ3B1ICpncHU7Cj4gLQlzdHJ1Y3QgZXRuYXZpdl9p b21tdV9kb21haW4gKmRvbWFpbjsKPiAtCj4gLQllbnVtIGV0bmF2aXZfaW9tbXVfdmVyc2lvbiB2 ZXJzaW9uOwo+ICtzdHJ1Y3QgZXRuYXZpdl9pb21tdV9jb250ZXh0IHsKPiArCXN0cnVjdCBrcmVm IHJlZmNvdW50Owo+ICsJc3RydWN0IGV0bmF2aXZfaW9tbXVfZ2xvYmFsICpnbG9iYWw7Cj4gIAo+ ICAJLyogbWVtb3J5IG1hbmFnZXIgZm9yIEdQVSBhZGRyZXNzIGFyZWEgKi8KPiAgCXN0cnVjdCBt dXRleCBsb2NrOwo+IEBAIC01MSwyNiArNzYsNDAgQEAgc3RydWN0IGV0bmF2aXZfaW9tbXUgewo+ ICAJdW5zaWduZWQgaW50IGZsdXNoX3NlcTsKPiAgfTsKPiAgCj4gK2ludCBldG5hdml2X2lvbW11 X2dsb2JhbF9pbml0KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKPiArdm9pZCBldG5hdml2X2lv bW11X2dsb2JhbF9maW5pKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKPiArCj4gIHN0cnVjdCBl dG5hdml2X2dlbV9vYmplY3Q7Cj4gIAo+IC1pbnQgZXRuYXZpdl9pb21tdV9tYXBfZ2VtKHN0cnVj dCBldG5hdml2X2lvbW11ICptbXUsCj4gK2ludCBldG5hdml2X2lvbW11X21hcF9nZW0oc3RydWN0 IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCXN0cnVjdCBldG5hdml2X2dlbV9v YmplY3QgKmV0bmF2aXZfb2JqLCB1MzIgbWVtb3J5X2Jhc2UsCj4gIAlzdHJ1Y3QgZXRuYXZpdl92 cmFtX21hcHBpbmcgKm1hcHBpbmcpOwo+IC12b2lkIGV0bmF2aXZfaW9tbXVfdW5tYXBfZ2VtKHN0 cnVjdCBldG5hdml2X2lvbW11ICptbXUsCj4gK3ZvaWQgZXRuYXZpdl9pb21tdV91bm1hcF9nZW0o c3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY29udGV4dCwKPiAgCXN0cnVjdCBldG5hdml2 X3ZyYW1fbWFwcGluZyAqbWFwcGluZyk7Cj4gIAo+IC1pbnQgZXRuYXZpdl9pb21tdV9nZXRfc3Vi YWxsb2NfdmEoc3RydWN0IGV0bmF2aXZfaW9tbXUgKm1tdSwKPiAraW50IGV0bmF2aXZfaW9tbXVf Z2V0X3N1YmFsbG9jX3ZhKHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmN0eCwKPiAgCQkJ CSAgc3RydWN0IGV0bmF2aXZfdnJhbV9tYXBwaW5nICptYXBwaW5nLAo+ICAJCQkJICB1MzIgbWVt b3J5X2Jhc2UsIGRtYV9hZGRyX3QgcGFkZHIsCj4gIAkJCQkgIHNpemVfdCBzaXplKTsKPiAtdm9p ZCBldG5hdml2X2lvbW11X3B1dF9zdWJhbGxvY192YShzdHJ1Y3QgZXRuYXZpdl9pb21tdSAqbW11 LAo+ICt2b2lkIGV0bmF2aXZfaW9tbXVfcHV0X3N1YmFsbG9jX3ZhKHN0cnVjdCBldG5hdml2X2lv bW11X2NvbnRleHQgKmN0eCwKPiAgCQkJCSAgIHN0cnVjdCBldG5hdml2X3ZyYW1fbWFwcGluZyAq bWFwcGluZyk7Cj4gIAo+IC1zaXplX3QgZXRuYXZpdl9pb21tdV9kdW1wX3NpemUoc3RydWN0IGV0 bmF2aXZfaW9tbXUgKmlvbW11KTsKPiAtdm9pZCBldG5hdml2X2lvbW11X2R1bXAoc3RydWN0IGV0 bmF2aXZfaW9tbXUgKmlvbW11LCB2b2lkICpidWYpOwo+IC0KPiAtc3RydWN0IGV0bmF2aXZfaW9t bXUgKmV0bmF2aXZfaW9tbXVfbmV3KHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1KTsKPiAtdm9pZCBl dG5hdml2X2lvbW11X2Rlc3Ryb3koc3RydWN0IGV0bmF2aXZfaW9tbXUgKmlvbW11KTsKPiAtdm9p ZCBldG5hdml2X2lvbW11X3Jlc3RvcmUoc3RydWN0IGV0bmF2aXZfZ3B1ICpncHUpOwo+ICtzaXpl X3QgZXRuYXZpdl9pb21tdV9kdW1wX3NpemUoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAq Y3R4KTsKPiArdm9pZCBldG5hdml2X2lvbW11X2R1bXAoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29u dGV4dCAqY3R4LCB2b2lkICpidWYpOwo+ICsKPiArc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4 dCAqCj4gK2V0bmF2aXZfaW9tbXVfY29udGV4dF9pbml0KHN0cnVjdCBldG5hdml2X2lvbW11X2ds b2JhbCAqZ2xvYmFsKTsKPiArc3RhdGljIGlubGluZSB2b2lkIGV0bmF2aXZfaW9tbXVfY29udGV4 dF9nZXQoc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqY3R4KQo+ICt7Cj4gKwlrcmVmX2dl dCgmY3R4LT5yZWZjb3VudCk7Cj4gK30KPiArdm9pZCBldG5hdml2X2lvbW11X2NvbnRleHRfcHV0 KHN0cnVjdCBldG5hdml2X2lvbW11X2NvbnRleHQgKmN0eCk7Cj4gK3ZvaWQgZXRuYXZpdl9pb21t dV9yZXN0b3JlKHN0cnVjdCBldG5hdml2X2dwdSAqZ3B1LAo+ICsJCQkgICBzdHJ1Y3QgZXRuYXZp dl9pb21tdV9jb250ZXh0ICpjdHgpOwo+ICsKPiArc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4 dCAqCj4gK2V0bmF2aXZfaW9tbXV2MV9jb250ZXh0X2FsbG9jKHN0cnVjdCBldG5hdml2X2lvbW11 X2dsb2JhbCAqZ2xvYmFsKTsKPiArc3RydWN0IGV0bmF2aXZfaW9tbXVfY29udGV4dCAqCj4gK2V0 bmF2aXZfaW9tbXV2Ml9jb250ZXh0X2FsbG9jKHN0cnVjdCBldG5hdml2X2lvbW11X2dsb2JhbCAq Z2xvYmFsKTsKPiAgCj4gICNlbmRpZiAvKiBfX0VUTkFWSVZfTU1VX0hfXyAqLwo+IC0tIAo+IDIu MjAuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gZXRuYXZpdiBtYWlsaW5nIGxpc3QKPiBldG5hdml2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZXRuYXZpdgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=