From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 2/4] drm/i915: Simplify ELSP queue request tracking Date: Tue, 23 Aug 2016 17:28:07 +0300 Message-ID: <87poozmufc.fsf@gaia.fi.intel.com> References: <1470502191-29547-1-git-send-email-chris@chris-wilson.co.uk> <1470502191-29547-3-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7E0116E693 for ; Tue, 23 Aug 2016 14:28:49 +0000 (UTC) In-Reply-To: <1470502191-29547-3-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gRW11bGF0 ZSBIVyB0byB0cmFjayBhbmQgbWFuYWdlIEVMU1AgcXVldWUuIEEgc2V0IG9mIFNXIHBvcnRzIGFy ZSBkZWZpbmVkCj4gYW5kIHJlcXVlc3RzIGFyZSBhc3NpZ25lZCB0byB0aGVzZSBwb3J0cyBiZWZv cmUgc3VibWl0dGluZyB0aGVtIHRvIEhXLiBUaGlzCj4gaGVscHMgaW4gY2xlYW5pbmcgdXAgaW5j b21wbGV0ZSByZXF1ZXN0cyBkdXJpbmcgcmVzZXQgcmVjb3ZlcnkgZWFzaWVyCj4gZXNwZWNpYWxs eSBhZnRlciBlbmdpbmUgcmVzZXQgYnkgZGVjb3VwbGluZyBlbHNwIHF1ZXVlIG1hbmFnZW1lbnQu IFRoaXMKPiB3aWxsIGJlY29tZSBtb3JlIGNsZWFyIGluIHRoZSBuZXh0IHBhdGNoLgo+Cj4gSW4g dGhlIGVuZ2luZSByZXNldCBjYXNlIHdlIHdhbnQgdG8gcmVzdW1lIHdoZXJlIHdlIGxlZnQtb2Zm IGFmdGVyIHNraXBwaW5nCj4gdGhlIGluY29tcGxldGUgYmF0Y2ggd2hpY2ggcmVxdWlyZXMgY2hl Y2tpbmcgdGhlIGVsc3AgcXVldWUsIHJlbW92aW5nCj4gZWxlbWVudCBhbmQgZml4aW5nIGVsc3Bf c3VibWl0dGVkIGNvdW50cyBpbiBzb21lIGNhc2VzLiBJbnN0ZWFkIG9mIGRpcmVjdGx5Cj4gbWFu aXB1bGF0aW5nIHRoZSBlbHNwIHF1ZXVlIGZyb20gcmVzZXQgcGF0aCB3ZSBjYW4gZXhhbWluZSB0 aGVzZSBwb3J0cywgZml4Cj4gdXAgcmluZ2J1ZmZlciBwb2ludGVycyB1c2luZyB0aGUgaW5jb21w bGV0ZSByZXF1ZXN0IGFuZCByZXN0YXJ0IHN1Ym1pc3Npb25zCj4gYWdhaW4gYWZ0ZXIgcmVzZXQu Cj4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiBDYzog TWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+Cj4gQ2M6IEFydW4gU2lsdXZl cnkgPGFydW4uc2lsdXZlcnlAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IExpbms6IGh0dHA6Ly9wYXRjaHdv cmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoL21zZ2lkLzE0NzA0MTQ2MDctMzI0NTMtMy1naXQtc2Vu ZC1lbWFpbC1hcnVuLnNpbHV2ZXJ5QGxpbnV4LmludGVsLmNvbQo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYyAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3JlcXVlc3QuYyB8ICAxMSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9yZXF1ZXN0LmggfCAgMjQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJj LmMgICAgICAgIHwgNDE3ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oICAgICAgICB8ICAgMiAtCj4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8ICAgNyArLQo+ICA3IGZpbGVzIGNoYW5nZWQs IDE2MCBpbnNlcnRpb25zKCspLCAzMDkgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2RlYnVnZnMuYwo+IGluZGV4IDliZDQxNTgxYjU5Mi4uZjFmOTM3YTY0YzI3IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMjIwMCw3ICsyMjAwLDcgQEAgc3Rh dGljIGludCBpOTE1X2V4ZWNsaXN0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4g IAkJc3RhdHVzX3BvaW50ZXIgPSBJOTE1X1JFQUQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5n aW5lKSk7Cj4gIAkJc2VxX3ByaW50ZihtLCAiXHRTdGF0dXMgcG9pbnRlcjogMHglMDhYXG4iLCBz dGF0dXNfcG9pbnRlcik7Cj4gIAo+IC0JCXJlYWRfcG9pbnRlciA9IGVuZ2luZS0+bmV4dF9jb250 ZXh0X3N0YXR1c19idWZmZXI7Cj4gKwkJcmVhZF9wb2ludGVyID0gR0VOOF9DU0JfUkVBRF9QVFIo c3RhdHVzX3BvaW50ZXIpOwo+ICAJCXdyaXRlX3BvaW50ZXIgPSBHRU44X0NTQl9XUklURV9QVFIo c3RhdHVzX3BvaW50ZXIpOwo+ICAJCWlmIChyZWFkX3BvaW50ZXIgPiB3cml0ZV9wb2ludGVyKQo+ ICAJCQl3cml0ZV9wb2ludGVyICs9IEdFTjhfQ1NCX0VOVFJJRVM7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCj4gaW5kZXggZjRmOGVhYTkwZjJhLi4xOTcxNWY1ZTY5OGYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKPiBAQCAtMjQ0Myw3ICsyNDQzLDExIEBAIHN0YXRpYyB2b2lkIGk5MTVf Z2VtX3Jlc2V0X2VuZ2luZV9jbGVhbnVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgCQkvKiBFbnN1cmUgaXJxIGhhbmRsZXIgZmluaXNoZXMgb3IgaXMgY2FuY2VsbGVkLiAqLwo+ ICAJCXRhc2tsZXRfa2lsbCgmZW5naW5lLT5pcnFfdGFza2xldCk7Cj4gIAo+IC0JCWludGVsX2V4 ZWNsaXN0c19jYW5jZWxfcmVxdWVzdHMoZW5naW5lKTsKPiArCQlJTklUX0xJU1RfSEVBRCgmZW5n aW5lLT5leGVjbGlzdF9xdWV1ZSk7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJmVuZ2lu ZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0LAo+ICsJCQkJCU5VTEwpOwo+ICsJCWk5MTVfZ2Vt X3JlcXVlc3RfYXNzaWduKCZlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMV0ucmVxdWVzdCwKPiArCQkJ CQlOVUxMKTsKCkhvdyBhYm91dCBlbmdpbmUtPnJlc2V0KCkgd2hpY2ggd291bGQgY29udGFpbiB0 aGVzZT8KCj4gIAl9Cj4gIAo+ICAJLyoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVx dWVzdC5jCj4gaW5kZXggNmMyNTUzNzE1MjYzLi40OWNjYTQyMzNhOGUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCj4gQEAgLTczNiwxNiArNzM2LDE4IEBAIGNv bXBsZXRlOgo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZW5naW5lX3Jl dGlyZV9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3N0YXRpYyBi b29sIGVuZ2luZV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsICpuZXh0Owo+ ICAKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCBuZXh0LCAmZW5naW5lLT5y ZXF1ZXN0X2xpc3QsIGxpbmspIHsKPiAgCQlpZiAoIWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVk KHJlcXVlc3QpKQo+IC0JCQlicmVhazsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICAKPiAgCQlpOTE1 X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiAgCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsK PiAgfQo+ICAKPiAgdm9pZCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+IEBAIC03NTksOSArNzYxLDggQEAgdm9pZCBpOTE1X2dlbV9y ZXRpcmVfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAKPiAg CUdFTV9CVUdfT04oIWRldl9wcml2LT5ndC5hd2FrZSk7Cj4gIAo+IC0JZm9yX2VhY2hfZW5naW5l KGVuZ2luZSwgZGV2X3ByaXYpIHsKPiAtCQllbmdpbmVfcmV0aXJlX3JlcXVlc3RzKGVuZ2luZSk7 Cj4gLQkJaWYgKCFpbnRlbF9lbmdpbmVfaXNfYWN0aXZlKGVuZ2luZSkpCj4gKwlmb3JfZWFjaF9l bmdpbmVfbWFza2VkKGVuZ2luZSwgZGV2X3ByaXYsIGRldl9wcml2LT5ndC5hY3RpdmVfZW5naW5l cykgewo+ICsJCWlmIChlbmdpbmVfcmV0aXJlX3JlcXVlc3RzKGVuZ2luZSkpCj4gIAkJCWRldl9w cml2LT5ndC5hY3RpdmVfZW5naW5lcyAmPSB+aW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKTsKPiAg CX0KPgoKVGhlc2Ugd2VyZSBhbHJlYWR5IHN0cmlwcGVkIHRvIGFub3RoZXIgcGF0Y2guIEdvb2Qu Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKPiBpbmRleCAzNDk2ZTI4 Nzg1ZTcuLjMyMTIzZTM4ZWY0YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9yZXF1ZXN0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9y ZXF1ZXN0LmgKPiBAQCAtOTQsNiArOTQsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg ewo+ICAJLyoqIFBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIG9mIHRoZSBlbmQgb2YgdGhlIHdo b2xlIHJlcXVlc3QgKi8KPiAgCXUzMiB0YWlsOwo+ICAKPiArCS8qKiBQb3NpdGlvbiBpbiB0aGUg cmluZ2J1ZmZlciBhZnRlciB0aGUgZW5kIG9mIHRoZSB3aG9sZSByZXF1ZXN0ICovCj4gKwl1MzIg d2FfdGFpbDsKPiArCj4gIAkvKiogUHJlYWxsb2NhdGUgc3BhY2UgaW4gdGhlIHJpbmdidWZmZXIg Zm9yIHRoZSBlbWl0dGluZyB0aGUgcmVxdWVzdCAqLwo+ICAJdTMyIHJlc2VydmVkX3NwYWNlOwo+ ICAKPiBAQCAtMTMwLDI3ICsxMzMsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qgewo+ ICAJLyoqIHByb2Nlc3MgaWRlbnRpZmllciBzdWJtaXR0aW5nIHRoaXMgcmVxdWVzdCAqLwo+ICAJ c3RydWN0IHBpZCAqcGlkOwo+ICAKPiAtCS8qKgo+IC0JICogVGhlIEVMU1Agb25seSBhY2NlcHRz IHR3byBlbGVtZW50cyBhdCBhIHRpbWUsIHNvIHdlIHF1ZXVlCj4gLQkgKiBjb250ZXh0L3RhaWwg cGFpcnMgb24gYSBnaXZlbiBxdWV1ZSAocmluZy0+ZXhlY2xpc3RfcXVldWUpIHVudGlsIHRoZQo+ IC0JICogaGFyZHdhcmUgaXMgYXZhaWxhYmxlLiBUaGUgcXVldWUgc2VydmVzIGEgZG91YmxlIHB1 cnBvc2U6IHdlIGFsc28gdXNlCj4gLQkgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHRoZSB1cCB0byAy IGNvbnRleHRzIGN1cnJlbnRseSBpbiB0aGUgaGFyZHdhcmUKPiAtCSAqICh1c3VhbGx5IG9uZSBp biBleGVjdXRpb24gYW5kIHRoZSBvdGhlciBxdWV1ZWQgdXAgYnkgdGhlIEdQVSk6IFdlCj4gLQkg KiBvbmx5IHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHRo ZSBoYXJkd2FyZQo+IC0JICogaW5mb3JtcyB1cyB0aGF0IGFuIGVsZW1lbnQgaGFzIGJlZW4gY29t cGxldGVkLgo+IC0JICoKPiAtCSAqIEFsbCBhY2Nlc3NlcyB0byB0aGUgcXVldWUgYXJlIG1lZGlh dGVkIGJ5IGEgc3BpbmxvY2sKPiAtCSAqIChyaW5nLT5leGVjbGlzdF9sb2NrKS4KPiAtCSAqLwo+ IC0KPiAtCS8qKiBFeGVjbGlzdCBsaW5rIGluIHRoZSBzdWJtaXNzaW9uIHF1ZXVlLiovCj4gKwkv KiogTGluayBpbiB0aGUgZXhlY2xpc3Qgc3VibWlzc2lvbiBxdWV1ZSwgZ3VhcmRlZCBieSBleGVj bGlzdF9sb2NrLiAqLwo+ICAJc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9saW5rOwo+IC0KPiAt CS8qKiBFeGVjbGlzdHMgbm8uIG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiBzZW50IHRv IHRoZSBFTFNQICovCj4gLQlpbnQgZWxzcF9zdWJtaXR0ZWQ7Cj4gLQo+IC0JLyoqIEV4ZWNsaXN0 cyBjb250ZXh0IGhhcmR3YXJlIGlkLiAqLwo+IC0JdW5zaWduZWQgaW50IGN0eF9od19pZDsKPiAg fTsKPiAgCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGk5MTVfZmVuY2Vfb3BzOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gaW5kZXggMzA5YzVkOWIxYzU3Li41NmI1YWE4YTM1 YzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IEBAIC0xNTYsNiArMTU2LDExIEBA Cj4gICNkZWZpbmUgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRFCSgxIDw8IDQpCj4gICNkZWZpbmUg R0VOOF9DVFhfU1RBVFVTX0xJVEVfUkVTVE9SRQkoMSA8PCAxNSkKPiAgCj4gKyNkZWZpbmUgR0VO OF9DVFhfU1RBVFVTX0NPTVBMRVRFRF9NQVNLIFwKPiArCSAoR0VOOF9DVFhfU1RBVFVTX0FDVElW RV9JRExFIHwgXAo+ICsJICBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEIHwgXAo+ICsJICBHRU44 X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpCj4gKwo+ICAjZGVmaW5lIENUWF9MUklfSEVBREVS XzAJCTB4MDEKPiAgI2RlZmluZSBDVFhfQ09OVEVYVF9DT05UUk9MCQkweDAyCj4gICNkZWZpbmUg Q1RYX1JJTkdfSEVBRAkJCTB4MDQKPiBAQCAtMjYzLDEyICsyNjgsMTAgQEAgbG9naWNhbF9yaW5n X2luaXRfcGxhdGZvcm1faW52YXJpYW50cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkx NTsKPiAgCj4gLQlpZiAoSVNfR0VOOChkZXZfcHJpdikgfHwgSVNfR0VOOShkZXZfcHJpdikpCj4g LQkJZW5naW5lLT5pZGxlX2xpdGVfcmVzdG9yZV93YSA9IH4wOwo+IC0KPiAtCWVuZ2luZS0+ZGlz YWJsZV9saXRlX3Jlc3RvcmVfd2EgPSAoSVNfU0tMX1JFVklEKGRldl9wcml2LCAwLCBTS0xfUkVW SURfQjApIHx8Cj4gLQkJCQkJSVNfQlhUX1JFVklEKGRldl9wcml2LCAwLCBCWFRfUkVWSURfQTEp KSAmJgo+IC0JCQkJCShlbmdpbmUtPmlkID09IFZDUyB8fCBlbmdpbmUtPmlkID09IFZDUzIpOwo+ ICsJZW5naW5lLT5kaXNhYmxlX2xpdGVfcmVzdG9yZV93YSA9Cj4gKwkJKElTX1NLTF9SRVZJRChk ZXZfcHJpdiwgMCwgU0tMX1JFVklEX0IwKSB8fAo+ICsJCSBJU19CWFRfUkVWSUQoZGV2X3ByaXYs IDAsIEJYVF9SRVZJRF9BMSkpICYmCj4gKwkJKGVuZ2luZS0+aWQgPT0gVkNTIHx8IGVuZ2luZS0+ aWQgPT0gVkNTMik7CgpDYW5kaWRhdGUgZm9yIGFub3RoZXIgY2xlYW51cCBwYXRjaCBhZnRlciBh cyBib3RoIHJldmlkcyBzbWVsbHMgb2Jzb2xldGUuCgo+ICAKPiAgCWVuZ2luZS0+Y3R4X2Rlc2Nf dGVtcGxhdGUgPSBHRU44X0NUWF9WQUxJRDsKPiAgCWlmIChJU19HRU44KGRldl9wcml2KSkKPiBA QCAtMzI4LDM2ICszMzEsNiBAQCB1aW50NjRfdCBpbnRlbF9scl9jb250ZXh0X2Rlc2NyaXB0b3Io c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPiAgCXJldHVybiBjdHgtPmVuZ2luZVtlbmdp bmUtPmlkXS5scmNfZGVzYzsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZXhlY2xpc3RzX2Vsc3Bf d3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTAsCj4gLQkJCQkgc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycTEpCj4gLXsKPiAtCj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUgPSBycTAtPmVuZ2luZTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHJxMC0+aTkxNTsKPiAtCXVpbnQ2NF90IGRlc2NbMl07Cj4gLQo+IC0JaWYgKHJx MSkgewo+IC0JCWRlc2NbMV0gPSBpbnRlbF9scl9jb250ZXh0X2Rlc2NyaXB0b3IocnExLT5jdHgs IHJxMS0+ZW5naW5lKTsKPiAtCQlycTEtPmVsc3Bfc3VibWl0dGVkKys7Cj4gLQl9IGVsc2Ugewo+ IC0JCWRlc2NbMV0gPSAwOwo+IC0JfQo+IC0KPiAtCWRlc2NbMF0gPSBpbnRlbF9scl9jb250ZXh0 X2Rlc2NyaXB0b3IocnEwLT5jdHgsIHJxMC0+ZW5naW5lKTsKPiAtCXJxMC0+ZWxzcF9zdWJtaXR0 ZWQrKzsKPiAtCj4gLQkvKiBZb3UgbXVzdCBhbHdheXMgd3JpdGUgYm90aCBkZXNjcmlwdG9ycyBp biB0aGUgb3JkZXIgYmVsb3cuICovCj4gLQlJOTE1X1dSSVRFX0ZXKFJJTkdfRUxTUChlbmdpbmUp LCB1cHBlcl8zMl9iaXRzKGRlc2NbMV0pKTsKPiAtCUk5MTVfV1JJVEVfRlcoUklOR19FTFNQKGVu Z2luZSksIGxvd2VyXzMyX2JpdHMoZGVzY1sxXSkpOwo+IC0KPiAtCUk5MTVfV1JJVEVfRlcoUklO R19FTFNQKGVuZ2luZSksIHVwcGVyXzMyX2JpdHMoZGVzY1swXSkpOwo+IC0JLyogVGhlIGNvbnRl eHQgaXMgYXV0b21hdGljYWxseSBsb2FkZWQgYWZ0ZXIgdGhlIGZvbGxvd2luZyAqLwo+IC0JSTkx NV9XUklURV9GVyhSSU5HX0VMU1AoZW5naW5lKSwgbG93ZXJfMzJfYml0cyhkZXNjWzBdKSk7Cj4g LQo+IC0JLyogRUxTUCBpcyBhIHdvIHJlZ2lzdGVyLCB1c2UgYW5vdGhlciBuZWFyYnkgcmVnIGZv ciBwb3N0aW5nICovCj4gLQlQT1NUSU5HX1JFQURfRlcoUklOR19FWEVDTElTVF9TVEFUVVNfTE8o ZW5naW5lKSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkCj4gIGV4ZWNsaXN0c191cGRhdGVfY29u dGV4dF9wZHBzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgdTMyICpyZWdfc3RhdGUpCj4g IHsKPiBAQCAtMzY3LDEzICszNDAsMTIgQEAgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0X3BkcHMo c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCB1MzIgKnJlZ19zdGF0ZSkKPiAgCUFTU0lHTl9D VFhfUERQKHBwZ3R0LCByZWdfc3RhdGUsIDApOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBleGVj bGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiAr c3RhdGljIHU2NCBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X2dlbV9y ZXF1ZXN0ICpycSkKPiAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcnEt PmVuZ2luZTsKPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9ICZycS0+Y3R4LT5lbmdpbmVb cnEtPmVuZ2luZS0+aWRdOwo+ICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0ID0gcnEtPmN0 eC0+cHBndHQ7Cj4gLQl1aW50MzJfdCAqcmVnX3N0YXRlID0gcnEtPmN0eC0+ZW5naW5lW2VuZ2lu ZS0+aWRdLmxyY19yZWdfc3RhdGU7Cj4gIAo+IC0JcmVnX3N0YXRlW0NUWF9SSU5HX1RBSUwrMV0g PSBpbnRlbF9yaW5nX29mZnNldChycS0+cmluZywgcnEtPnRhaWwpOwo+ICsJY2UtPmxyY19yZWdf c3RhdGVbQ1RYX1JJTkdfVEFJTCsxXSA9IGludGVsX3Jpbmdfb2Zmc2V0KHJxLT5yaW5nLCBycS0+ dGFpbCk7Cj4gIAo+ICAJLyogVHJ1ZSAzMmIgUFBHVFQgd2l0aCBkeW5hbWljIHBhZ2UgYWxsb2Nh dGlvbjogdXBkYXRlIFBEUAo+ICAJICogcmVnaXN0ZXJzIGFuZCBwb2ludCB0aGUgdW5hbGxvY2F0 ZWQgUERQcyB0byBzY3JhdGNoIHBhZ2UuCj4gQEAgLTM4MSwzMiArMzUzLDE0IEBAIHN0YXRpYyB2 b2lkIGV4ZWNsaXN0c191cGRhdGVfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJxKQo+ICAJICogaW4gNDgtYml0IG1vZGUuCj4gIAkgKi8KPiAgCWlmIChwcGd0dCAmJiAhVVNF U19GVUxMXzQ4QklUX1BQR1RUKHBwZ3R0LT5iYXNlLmRldikpCj4gLQkJZXhlY2xpc3RzX3VwZGF0 ZV9jb250ZXh0X3BkcHMocHBndHQsIHJlZ19zdGF0ZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGV4ZWNsaXN0c19lbHNwX3N1Ym1pdF9jb250ZXh0cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJxMCwKPiAtCQkJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxMSkKPiAt ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gcnEwLT5pOTE1Owo+IC0J dW5zaWduZWQgaW50IGZ3X2RvbWFpbnMgPSBycTAtPmVuZ2luZS0+ZndfZG9tYWluczsKPiAtCj4g LQlleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQocnEwKTsKPiAtCj4gLQlpZiAocnExKQo+IC0JCWV4 ZWNsaXN0c191cGRhdGVfY29udGV4dChycTEpOwo+ICsJCWV4ZWNsaXN0c191cGRhdGVfY29udGV4 dF9wZHBzKHBwZ3R0LCBjZS0+bHJjX3JlZ19zdGF0ZSk7Cj4gIAo+IC0Jc3Bpbl9sb2NrX2lycSgm ZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0X19s b2NrZWQoZGV2X3ByaXYsIGZ3X2RvbWFpbnMpOwo+IC0KPiAtCWV4ZWNsaXN0c19lbHNwX3dyaXRl KHJxMCwgcnExKTsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dF9fbG9ja2VkKGRl dl9wcml2LCBmd19kb21haW5zKTsKPiAtCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrKTsKPiArCXJldHVybiBjZS0+bHJjX2Rlc2M7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxp bmUgdm9pZCBleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKAo+IC0JCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gLQkJdW5zaWduZWQgbG9uZyBzdGF0dXMpCj4gK3N0YXRp YyBpbmxpbmUgdm9pZAo+ICtleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcnEsCj4gKwkJCQl1bnNpZ25lZCBsb25nIHN0YXR1cykKPiAg ewo+ICAJLyoKPiAgCSAqIE9ubHkgdXNlZCB3aGVuIEdWVC1nIGlzIGVuYWJsZWQgbm93LiBXaGVu IEdWVC1nIGlzIGRpc2FibGVkLAo+IEBAIC00MTgsMTIyICszNzIsMTA0IEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKAo+ICAJYXRvbWljX25vdGlm aWVyX2NhbGxfY2hhaW4oJnJxLT5jdHgtPnN0YXR1c19ub3RpZmllciwgc3RhdHVzLCBycSk7Cj4g IH0KPiAgCj4gLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c191bnF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiArc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9wb3J0cyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcmVxMCA9IE5VTEwsICpyZXExID0gTlVMTDsKPiAtCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqY3Vyc29yLCAqdG1wOwo+IC0KPiAtCWFzc2VydF9zcGluX2xvY2tlZCgmZW5n aW5lLT5leGVjbGlzdF9sb2NrKTsKPiAtCj4gLQkvKgo+IC0JICogSWYgaXJxcyBhcmUgbm90IGFj dGl2ZSBnZW5lcmF0ZSBhIHdhcm5pbmcgYXMgYmF0Y2hlcyB0aGF0IGZpbmlzaAo+IC0JICogd2l0 aG91dCB0aGUgaXJxcyBtYXkgZ2V0IGxvc3QgYW5kIGEgR1BVIEhhbmcgbWF5IG9jY3VyLgo+IC0J ICovCj4gLQlXQVJOX09OKCFpbnRlbF9pcnFzX2VuYWJsZWQoZW5naW5lLT5pOTE1KSk7Cj4gLQo+ IC0JLyogVHJ5IHRvIHJlYWQgaW4gcGFpcnMgKi8KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShjdXJzb3IsIHRtcCwgJmVuZ2luZS0+ZXhlY2xpc3RfcXVldWUsCj4gLQkJCQkgZXhlY2xpc3Rf bGluaykgewo+IC0JCWlmICghcmVxMCkgewo+IC0JCQlyZXEwID0gY3Vyc29yOwo+IC0JCX0gZWxz ZSBpZiAocmVxMC0+Y3R4ID09IGN1cnNvci0+Y3R4KSB7Cj4gLQkJCS8qIFNhbWUgY3R4OiBpZ25v cmUgZmlyc3QgcmVxdWVzdCwgYXMgc2Vjb25kIHJlcXVlc3QKPiAtCQkJICogd2lsbCB1cGRhdGUg dGFpbCBwYXN0IGZpcnN0IHJlcXVlc3QncyB3b3JrbG9hZCAqLwo+IC0JCQljdXJzb3ItPmVsc3Bf c3VibWl0dGVkID0gcmVxMC0+ZWxzcF9zdWJtaXR0ZWQ7Cj4gLQkJCWxpc3RfZGVsKCZyZXEwLT5l eGVjbGlzdF9saW5rKTsKPiAtCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocmVxMCk7Cj4gLQkJCXJl cTAgPSBjdXJzb3I7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RS TV9JOTE1X0dWVCkpIHsKPiAtCQkJCS8qCj4gLQkJCQkgKiByZXEwIChhZnRlciBtZXJnZWQpIGN0 eCByZXF1aXJlcyBzaW5nbGUKPiAtCQkJCSAqIHN1Ym1pc3Npb24sIHN0b3AgcGlja2luZwo+IC0J CQkJICovCj4gLQkJCQlpZiAocmVxMC0+Y3R4LT5leGVjbGlzdHNfZm9yY2Vfc2luZ2xlX3N1Ym1p c3Npb24pCj4gLQkJCQkJYnJlYWs7Cj4gLQkJCQkvKgo+IC0JCQkJICogcmVxMCBjdHggZG9lc24n dCByZXF1aXJlIHNpbmdsZSBzdWJtaXNzaW9uLAo+IC0JCQkJICogYnV0IG5leHQgcmVxIGN0eCBy ZXF1aXJlcywgc3RvcCBwaWNraW5nCj4gLQkJCQkgKi8KPiAtCQkJCWlmIChjdXJzb3ItPmN0eC0+ ZXhlY2xpc3RzX2ZvcmNlX3NpbmdsZV9zdWJtaXNzaW9uKQo+IC0JCQkJCWJyZWFrOwo+IC0JCQl9 Cj4gLQkJCXJlcTEgPSBjdXJzb3I7Cj4gLQkJCVdBUk5fT04ocmVxMS0+ZWxzcF9zdWJtaXR0ZWQp Owo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKHVubGlrZWx5KCFyZXEwKSkK PiAtCQlyZXR1cm47Cj4gLQo+IC0JZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShyZXEw LCBJTlRFTF9DT05URVhUX1NDSEVEVUxFX0lOKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKPiArCXUzMiAqZWxzcCA9IGRldl9wcml2LT5yZWdz ICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19FTFNQKGVuZ2luZSkpOwo+ICsJdTY0IGRlc2Nb Ml07Cj4gIAo+IC0JaWYgKHJlcTEpCj4gLQkJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5n ZShyZXExLAo+ICsJaWYgKCFlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMF0uY291bnQpCj4gKwkJZXhl Y2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMF0ucmVx dWVzdCwKPiAgCQkJCQkJSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9JTik7Cj4gKwlkZXNjWzBdID0g ZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KGVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0 KTsKPiArCWVuZ2luZS0+cHJlZW1wdF93YSA9IGVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXS5jb3Vu dCsrOwo+ICAKPiAtCWlmIChyZXEwLT5lbHNwX3N1Ym1pdHRlZCAmIGVuZ2luZS0+aWRsZV9saXRl X3Jlc3RvcmVfd2EpIHsKPiAtCQkvKgo+IC0JCSAqIFdhSWRsZUxpdGVSZXN0b3JlOiBtYWtlIHN1 cmUgd2UgbmV2ZXIgY2F1c2UgYSBsaXRlIHJlc3RvcmUKPiAtCQkgKiB3aXRoIEhFQUQ9PVRBSUwu Cj4gLQkJICoKPiAtCQkgKiBBcHBseSB0aGUgd2EgTk9PUFMgdG8gcHJldmVudCByaW5nOkhFQUQg PT0gcmVxOlRBSUwgYXMgd2UKPiAtCQkgKiByZXN1Ym1pdCB0aGUgcmVxdWVzdC4gU2VlIGdlbjhf ZW1pdF9yZXF1ZXN0KCkgZm9yIHdoZXJlIHdlCj4gLQkJICogcHJlcGFyZSB0aGUgcGFkZGluZyBh ZnRlciB0aGUgZW5kIG9mIHRoZSByZXF1ZXN0Lgo+IC0JCSAqLwo+IC0JCXJlcTAtPnRhaWwgKz0g ODsKPiAtCQlyZXEwLT50YWlsICY9IHJlcTAtPnJpbmctPnNpemUgLSAxOwo+ICsJaWYgKGVuZ2lu ZS0+ZXhlY2xpc3RfcG9ydFsxXS5yZXF1ZXN0KSB7Cj4gKwkJR0VNX0JVR19PTihlbmdpbmUtPmV4 ZWNsaXN0X3BvcnRbMV0uY291bnQpOwo+ICsJCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFu Z2UoZW5naW5lLT5leGVjbGlzdF9wb3J0WzFdLnJlcXVlc3QsCj4gKwkJCQkJCUlOVEVMX0NPTlRF WFRfU0NIRURVTEVfSU4pOwo+ICsJCWRlc2NbMV0gPSBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQo ZW5naW5lLT5leGVjbGlzdF9wb3J0WzFdLnJlcXVlc3QpOwo+ICsJCWVuZ2luZS0+ZXhlY2xpc3Rf cG9ydFsxXS5jb3VudCA9IDE7Cj4gKwl9IGVsc2Ugewo+ICsJCWRlc2NbMV0gPSAwOwo+ICAJfQo+ ICAKPiAtCWV4ZWNsaXN0c19lbHNwX3N1Ym1pdF9jb250ZXh0cyhyZXEwLCByZXExKTsKPiArCS8q IFlvdSBtdXN0IGFsd2F5cyB3cml0ZSBib3RoIGRlc2NyaXB0b3JzIGluIHRoZSBvcmRlciBiZWxv dy4gKi8KPiArCXdyaXRlbCh1cHBlcl8zMl9iaXRzKGRlc2NbMV0pLCBlbHNwKTsKPiArCXdyaXRl bChsb3dlcl8zMl9iaXRzKGRlc2NbMV0pLCBlbHNwKTsKPiArCj4gKwl3cml0ZWwodXBwZXJfMzJf Yml0cyhkZXNjWzBdKSwgZWxzcCk7Cj4gKwkvKiBUaGUgY29udGV4dCBpcyBhdXRvbWF0aWNhbGx5 IGxvYWRlZCBhZnRlciB0aGUgZm9sbG93aW5nICovCj4gKwl3cml0ZWwobG93ZXJfMzJfYml0cyhk ZXNjWzBdKSwgZWxzcCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQKPiAtZXhlY2xp c3RzX2NoZWNrX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwg dTMyIGN0eF9pZCkKPiArc3RhdGljIGJvb2wgbWVyZ2VfY3R4KHN0cnVjdCBpOTE1X2dlbV9jb250 ZXh0ICpwcmV2LAo+ICsJCSAgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpuZXh0KQo+ICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmhlYWRfcmVxOwo+ICsJaWYgKHByZXYg IT0gbmV4dCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAo+IC0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZl bmdpbmUtPmV4ZWNsaXN0X2xvY2spOwo+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0dWVCkgJiYKPiArCSAgICBwcmV2LT5leGVjbGlzdHNfZm9yY2Vfc2luZ2xlX3N1Ym1pc3Npb24p Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICAKPiAtCWhlYWRfcmVxID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZlbmdpbmUtPmV4ZWNsaXN0X3F1ZXVlLAo+IC0JCQkJCSAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QsCj4gLQkJCQkJICAgIGV4ZWNsaXN0X2xpbmspOwo+IC0KPiAtCWlmIChX QVJOX09OKCFoZWFkX3JlcSB8fCAoaGVhZF9yZXEtPmN0eF9od19pZCAhPSBjdHhfaWQpKSkKPiAt ICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICAKPiAtCVdB Uk4oaGVhZF9yZXEtPmVsc3Bfc3VibWl0dGVkID09IDAsICJOZXZlciBzdWJtaXR0ZWQgaGVhZCBy ZXF1ZXN0XG4iKTsKPiArc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NvbnRleHRfdW5xdWV1ZShzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqY3Vyc29yLCAqbGFzdDsKPiArCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0g ZW5naW5lLT5leGVjbGlzdF9wb3J0Owo+ICsJYm9vbCBzdWJtaXQgPSBmYWxzZTsKPiArCj4gKwls YXN0ID0gcG9ydC0+cmVxdWVzdDsKPiArCWlmIChsYXN0KQo+ICsJCS8qIFdhSWRsZUxpdGVSZXN0 b3JlOmJkdyxza2wKPiArCQkgKiBBcHBseSB0aGUgd2EgTk9PUHMgdG8gcHJldmVudCByaW5nOkhF QUQgPT0gcmVxOlRBSUwKPiArCQkgKiBhcyB3ZSByZXN1Ym1pdCB0aGUgcmVxdWVzdC4gU2VlIGdl bjhfZW1pdF9yZXF1ZXN0KCkKPiArCQkgKiBmb3Igd2hlcmUgd2UgcHJlcGFyZSB0aGUgcGFkZGlu ZyBhZnRlciB0aGUgZW5kIG9mIHRoZQo+ICsJCSAqIHJlcXVlc3QuCj4gKwkJICovCj4gKwkJbGFz dC0+dGFpbCA9IGxhc3QtPndhX3RhaWw7Cj4gIAo+IC0JaWYgKC0taGVhZF9yZXEtPmVsc3Bfc3Vi bWl0dGVkID4gMCkKPiAtCQlyZXR1cm4gMDsKPiArCS8qIFRyeSB0byByZWFkIGluIHBhaXJzIGFu ZCBmaWxsIGJvdGggc3VibWlzc2lvbiBwb3J0cyAqLwo+ICsJc3Bpbl9sb2NrKCZlbmdpbmUtPmV4 ZWNsaXN0X2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXJzb3IsICZlbmdpbmUtPmV4 ZWNsaXN0X3F1ZXVlLCBleGVjbGlzdF9saW5rKSB7Cj4gKwkJaWYgKGxhc3QgJiYgIW1lcmdlX2N0 eChjdXJzb3ItPmN0eCwgbGFzdC0+Y3R4KSkgewo+ICsJCQlpZiAocG9ydCAhPSBlbmdpbmUtPmV4 ZWNsaXN0X3BvcnQpCj4gKwkJCQlicmVhazsKCkluIGhlcmUgeW91IHdpbGwgbWVyZ2UgY3R4IGFs c28gZm9yIHRoZSBzZWNvbmQgcG9ydD8KClRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBjb2Rl IHdhcyBjYXJlZnVsIHRvIG9ubHkgbWVyZ2UgZm9yCnRoZSBmaXJzdCBwb3J0L3JlcXVlc3QuCgo+ ICAKPiAtCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UoaGVhZF9yZXEsIElOVEVMX0NP TlRFWFRfU0NIRURVTEVfT1VUKTsKPiArCQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1 X0dWVCkgJiYKPiArCQkJICAgIGN1cnNvci0+Y3R4LT5leGVjbGlzdHNfZm9yY2Vfc2luZ2xlX3N1 Ym1pc3Npb24pCj4gKwkJCQlicmVhazsKPiAgCj4gLQlsaXN0X2RlbCgmaGVhZF9yZXEtPmV4ZWNs aXN0X2xpbmspOwo+IC0JaTkxNV9nZW1fcmVxdWVzdF9wdXQoaGVhZF9yZXEpOwo+ICsJCQlpOTE1 X2dlbV9yZXF1ZXN0X2Fzc2lnbigmcG9ydC0+cmVxdWVzdCwgbGFzdCk7Cj4gKwkJCXBvcnQrKzsK PiArCQl9Cj4gKwkJbGFzdCA9IGN1cnNvcjsKPiArCQlzdWJtaXQgPSB0cnVlOwo+ICsJfQo+ICsJ aWYgKHN1Ym1pdCkgewo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZwb3J0LT5yZXF1ZXN0 LCBsYXN0KTsKPiArCQllbmdpbmUtPmV4ZWNsaXN0X3F1ZXVlLm5leHQgPSAmY3Vyc29yLT5leGVj bGlzdF9saW5rOwo+ICsJCWN1cnNvci0+ZXhlY2xpc3RfbGluay5wcmV2ID0gJmVuZ2luZS0+ZXhl Y2xpc3RfcXVldWU7CgpXZSBrZWVwIHRoZSBjdXJzb3IgcG9pbnRpbmcgdG8gdGhlIHJlcXVlc3Qg dGhhdCB3aWxsIGJlIGluIHBvcnRbMF0ucmVxdWVzdD8KCndoaWxlICghbGlzdF9lbXB0eShlbmdp bmUtPmV4ZWNsaXN0X3F1ZXVlKSkgYW5kIHRoZW4gcmVtb3ZpbmcgZnJvbQp0aGUgbGlzdCB3b3Vs ZCBoYXZlIG1hZGUgdGhlIGZpbGwgbG9vcCBtb3JlIGNvbXBsZXg/Cgo+ICsJfQo+ICsJc3Bpbl91 bmxvY2soJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gIAo+IC0JcmV0dXJuIDE7Cj4gKwlpZiAo c3VibWl0KQo+ICsJCWV4ZWNsaXN0c19zdWJtaXRfcG9ydHMoZW5naW5lKTsKPiAgfQo+ICAKPiAt c3RhdGljIHUzMgo+IC1nZXRfY29udGV4dF9zdGF0dXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLCB1bnNpZ25lZCBpbnQgcmVhZF9wb2ludGVyLAo+IC0JCSAgIHUzMiAqY29udGV4dF9p ZCkKPiArc3RhdGljIGJvb2wgZXhlY2xpc3RzX2Vsc3BfaWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGVuZ2luZS0+aTkxNTsKPiAtCXUzMiBzdGF0dXM7Cj4gLQo+IC0JcmVhZF9wb2ludGVyICU9IEdF TjhfQ1NCX0VOVFJJRVM7Cj4gLQo+IC0Jc3RhdHVzID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ09OVEVY VF9TVEFUVVNfQlVGX0xPKGVuZ2luZSwgcmVhZF9wb2ludGVyKSk7Cj4gLQo+IC0JaWYgKHN0YXR1 cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSkKPiAtCQlyZXR1cm4gMDsKPiArCXJldHVy biAhZW5naW5lLT5leGVjbGlzdF9wb3J0WzBdLnJlcXVlc3Q7Cj4gK30KPiAgCj4gLQkqY29udGV4 dF9pZCA9IEk5MTVfUkVBRF9GVyhSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9ISShlbmdpbmUsCj4g LQkJCQkJCQkgICAgICByZWFkX3BvaW50ZXIpKTsKPiArc3RhdGljIGJvb2wgZXhlY2xpc3RzX2Vs c3BfcmVhZHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlpbnQgaWR4 ID0gIWVuZ2luZS0+ZGlzYWJsZV9saXRlX3Jlc3RvcmVfd2EgJiYgIWVuZ2luZS0+cHJlZW1wdF93 YTsKPiAgCj4gLQlyZXR1cm4gc3RhdHVzOwo+ICsJcmV0dXJuICFlbmdpbmUtPmV4ZWNsaXN0X3Bv cnRbaWR4XS5yZXF1ZXN0Owo+ICB9Cj4gIAo+ICAvKgo+IEBAIC01NDQsMTAwICs0ODAsNjMgQEAg c3RhdGljIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAg ewo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKilkYXRhOwo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5n aW5lLT5pOTE1Owo+IC0JdTMyIHN0YXR1c19wb2ludGVyOwo+IC0JdW5zaWduZWQgaW50IHJlYWRf cG9pbnRlciwgd3JpdGVfcG9pbnRlcjsKPiAtCXUzMiBjc2JbR0VOOF9DU0JfRU5UUklFU11bMl07 Cj4gLQl1bnNpZ25lZCBpbnQgY3NiX3JlYWQgPSAwLCBpOwo+IC0JdW5zaWduZWQgaW50IHN1Ym1p dF9jb250ZXh0cyA9IDA7Cj4gIAo+ICAJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3By aXYsIGVuZ2luZS0+ZndfZG9tYWlucyk7Cj4gIAo+IC0Jc3RhdHVzX3BvaW50ZXIgPSBJOTE1X1JF QURfRlcoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSk7Cj4gLQo+IC0JcmVhZF9wb2lu dGVyID0gZW5naW5lLT5uZXh0X2NvbnRleHRfc3RhdHVzX2J1ZmZlcjsKPiAtCXdyaXRlX3BvaW50 ZXIgPSBHRU44X0NTQl9XUklURV9QVFIoc3RhdHVzX3BvaW50ZXIpOwo+IC0JaWYgKHJlYWRfcG9p bnRlciA+IHdyaXRlX3BvaW50ZXIpCj4gLQkJd3JpdGVfcG9pbnRlciArPSBHRU44X0NTQl9FTlRS SUVTOwo+IC0KPiAtCXdoaWxlIChyZWFkX3BvaW50ZXIgPCB3cml0ZV9wb2ludGVyKSB7Cj4gLQkJ aWYgKFdBUk5fT05fT05DRShjc2JfcmVhZCA9PSBHRU44X0NTQl9FTlRSSUVTKSkKPiAtCQkJYnJl YWs7Cj4gLQkJY3NiW2NzYl9yZWFkXVswXSA9IGdldF9jb250ZXh0X3N0YXR1cyhlbmdpbmUsICsr cmVhZF9wb2ludGVyLAo+IC0JCQkJCQkgICAgICAmY3NiW2NzYl9yZWFkXVsxXSk7Cj4gLQkJY3Ni X3JlYWQrKzsKPiAtCX0KPiAtCj4gLQllbmdpbmUtPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVy ID0gd3JpdGVfcG9pbnRlciAlIEdFTjhfQ1NCX0VOVFJJRVM7Cj4gLQo+IC0JLyogVXBkYXRlIHRo ZSByZWFkIHBvaW50ZXIgdG8gdGhlIG9sZCB3cml0ZSBwb2ludGVyLiBNYW51YWwgcmluZ2J1ZmZl cgo+IC0JICogbWFuYWdlbWVudCBmdHcgPC9zYXJjYXNtPiAqLwo+IC0JSTkxNV9XUklURV9GVyhS SU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpLAo+IC0JCSAgICAgIF9NQVNLRURfRklFTEQo R0VOOF9DU0JfUkVBRF9QVFJfTUFTSywKPiAtCQkJCSAgICBlbmdpbmUtPm5leHRfY29udGV4dF9z dGF0dXNfYnVmZmVyIDw8IDgpKTsKPiAtCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChk ZXZfcHJpdiwgZW5naW5lLT5md19kb21haW5zKTsKPiAtCj4gLQlzcGluX2xvY2soJmVuZ2luZS0+ ZXhlY2xpc3RfbG9jayk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGNzYl9yZWFkOyBpKyspIHsK PiAtCQlpZiAodW5saWtlbHkoY3NiW2ldWzBdICYgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkp IHsKPiAtCQkJaWYgKGNzYltpXVswXSAmIEdFTjhfQ1RYX1NUQVRVU19MSVRFX1JFU1RPUkUpIHsK PiAtCQkJCWlmIChleGVjbGlzdHNfY2hlY2tfcmVtb3ZlX3JlcXVlc3QoZW5naW5lLCBjc2JbaV1b MV0pKQo+IC0JCQkJCVdBUk4oMSwgIkxpdGUgUmVzdG9yZWQgcmVxdWVzdCByZW1vdmVkIGZyb20g cXVldWVcbiIpOwo+IC0JCQl9IGVsc2UKPiAtCQkJCVdBUk4oMSwgIlByZWVtcHRpb24gd2l0aG91 dCBMaXRlIFJlc3RvcmVcbiIpOwo+ICsJaWYgKCFleGVjbGlzdHNfZWxzcF9pZGxlKGVuZ2luZSkp IHsKPiArCQl1MzIgKnJpbmdfbW1pbyA9Cj4gKwkJCWRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSk7Cj4gKwkJdTMyICpj c2JfbW1pbyA9Cj4gKwkJCWRldl9wcml2LT5yZWdzICsgaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19DT05URVhUX1NUQVRVU19CVUZfTE8oZW5naW5lLCAwKSk7Cj4gKwkJdW5zaWduZWQgcmluZywg aGVhZCwgdGFpbDsKPiArCj4gKwkJcmluZyA9IHJlYWRsKHJpbmdfbW1pbyk7Cj4gKwkJaGVhZCA9 IEdFTjhfQ1NCX1JFQURfUFRSKHJpbmcpOwo+ICsJCXRhaWwgPSBHRU44X0NTQl9XUklURV9QVFIo cmluZyk7Cj4gKwkJaWYgKHRhaWwgPCBoZWFkKQo+ICsJCQl0YWlsICs9IEdFTjhfQ1NCX0VOVFJJ RVM7Cj4gKwo+ICsJCXdoaWxlIChoZWFkIDwgdGFpbCkgewo+ICsJCQl1bnNpZ25lZCBpZHggPSAr K2hlYWQgJSBHRU44X0NTQl9FTlRSSUVTOwo+ICsJCQl1bnNpZ25lZCBzdGF0dXMgPSByZWFkbCgm Y3NiX21taW9bMippZHhdKTsKPiArCj4gKwkJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf Q09NUExFVEVEX01BU0spIHsKPiArCQkJCUdFTV9CVUdfT04oZW5naW5lLT5leGVjbGlzdF9wb3J0 WzBdLmNvdW50ID09IDApOwoKV291bGQgdGhpcyBiZSB0aGUgc2FmZXR5IHZhbHZlIGlmIHdlIGdv IG91dCBvZiBzeW5jIHZydCBzdWJtaXQgdnMgaGVhZD8KCj4gKwkJCQlpZiAoLS1lbmdpbmUtPmV4 ZWNsaXN0X3BvcnRbMF0uY291bnQgPT0gMCkgewo+ICsJCQkJCUdFTV9CVUdfT04oc3RhdHVzICYg R0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCk7Cj4gKwkJCQkJZXhlY2xpc3RzX2NvbnRleHRfc3Rh dHVzX2NoYW5nZShlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMF0ucmVxdWVzdCwKPiArCQkJCQkJCQkJ SU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQpOwo+ICsJCQkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0 KGVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXS5yZXF1ZXN0KTsKPiArCQkJCQllbmdpbmUtPmV4ZWNs aXN0X3BvcnRbMF0gPSBlbmdpbmUtPmV4ZWNsaXN0X3BvcnRbMV07CgpJbnRlbnRpb24gaGVyZSBp cyB0byBhbHdheXMgcmV0aXJlIHRocm91Z2ggcG9ydCB6ZXJvLCBhbmQgdGh1cyB0aGUKcmVmY291 bnRzIG1hdGNoZXMgdGhlIHN1Ym1pdHRlZCBvbmVzPwoKCj4gKwkJCQkJbWVtc2V0KCZlbmdpbmUt PmV4ZWNsaXN0X3BvcnRbMV0sIDAsCj4gKwkJCQkJICAgICAgIHNpemVvZihlbmdpbmUtPmV4ZWNs aXN0X3BvcnRbMV0pKTsKPiArCQkJCQllbmdpbmUtPnByZWVtcHRfd2EgPSBmYWxzZTsKPiArCQkJ CX0KPiArCQkJfQo+ICsJCQlHRU1fQlVHX09OKGVuZ2luZS0+ZXhlY2xpc3RfcG9ydFswXS5jb3Vu dCA9PSAwICYmCj4gKwkJCQkgICAhKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURM RSkpOwo+ICAJCX0KPiAgCj4gLQkJaWYgKGNzYltpXVswXSAmIChHRU44X0NUWF9TVEFUVVNfQUNU SVZFX0lETEUgfAo+IC0JCSAgICBHRU44X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpKQo+IC0J CQlzdWJtaXRfY29udGV4dHMgKz0KPiAtCQkJCWV4ZWNsaXN0c19jaGVja19yZW1vdmVfcmVxdWVz dChlbmdpbmUsIGNzYltpXVsxXSk7Cj4gKwkJd3JpdGVsKF9NQVNLRURfRklFTEQoR0VOOF9DU0Jf UkVBRF9QVFJfTUFTSywgR0VOOF9DU0JfV1JJVEVfUFRSKHJpbmcpIDw8IDgpLAo+ICsJCSAgICAg ICByaW5nX21taW8pOwo+ICAJfQo+ICAKPiAtCWlmIChzdWJtaXRfY29udGV4dHMpIHsKPiAtCQlp ZiAoIWVuZ2luZS0+ZGlzYWJsZV9saXRlX3Jlc3RvcmVfd2EgfHwKPiAtCQkgICAgKGNzYltpXVsw XSAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkpCj4gLQkJCWV4ZWNsaXN0c191bnF1ZXVl KGVuZ2luZSk7Cj4gLQl9Cj4gKwlpZiAoZXhlY2xpc3RzX2Vsc3BfcmVhZHkoZW5naW5lKSkKPiAr CQlleGVjbGlzdHNfY29udGV4dF91bnF1ZXVlKGVuZ2luZSk7Cj4gIAo+IC0Jc3Bpbl91bmxvY2so JmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gLQo+IC0JaWYgKHVubGlrZWx5KHN1Ym1pdF9jb250 ZXh0cyA+IDIpKQo+IC0JCURSTV9FUlJPUigiTW9yZSB0aGFuIHR3byBjb250ZXh0IGNvbXBsZXRl IGV2ZW50cz9cbiIpOwo+ICsJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIGVu Z2luZS0+ZndfZG9tYWlucyk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJt aXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gIHsKPiAg CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJlcXVlc3QtPmVuZ2luZTsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqY3Vyc29yOwo+IC0JaW50IG51bV9lbGVtZW50cyA9 IDA7Cj4gIAo+ICAJc3Bpbl9sb2NrX2JoKCZlbmdpbmUtPmV4ZWNsaXN0X2xvY2spOwo+ICAKPiAt CWxpc3RfZm9yX2VhY2hfZW50cnkoY3Vyc29yLCAmZW5naW5lLT5leGVjbGlzdF9xdWV1ZSwgZXhl Y2xpc3RfbGluaykKPiAtCQlpZiAoKytudW1fZWxlbWVudHMgPiAyKQo+IC0JCQlicmVhazsKPiAt Cj4gLQlpZiAobnVtX2VsZW1lbnRzID4gMikgewo+IC0JCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqdGFpbF9yZXE7Cj4gLQo+IC0JCXRhaWxfcmVxID0gbGlzdF9sYXN0X2VudHJ5KCZlbmdp bmUtPmV4ZWNsaXN0X3F1ZXVlLAo+IC0JCQkJCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCwKPiAtCQkJCQkgICBleGVjbGlzdF9saW5rKTsKPiAtCj4gLQkJaWYgKHJlcXVlc3QtPmN0eCA9 PSB0YWlsX3JlcS0+Y3R4KSB7Cj4gLQkJCVdBUk4odGFpbF9yZXEtPmVsc3Bfc3VibWl0dGVkICE9 IDAsCj4gLQkJCQkiTW9yZSB0aGFuIDIgYWxyZWFkeS1zdWJtaXR0ZWQgcmVxcyBxdWV1ZWRcbiIp Owo+IC0JCQlsaXN0X2RlbCgmdGFpbF9yZXEtPmV4ZWNsaXN0X2xpbmspOwo+IC0JCQlpOTE1X2dl bV9yZXF1ZXN0X3B1dCh0YWlsX3JlcSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWk5MTVfZ2VtX3Jl cXVlc3RfZ2V0KHJlcXVlc3QpOwo+ICAJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+ZXhlY2xpc3Rf bGluaywgJmVuZ2luZS0+ZXhlY2xpc3RfcXVldWUpOwo+IC0JcmVxdWVzdC0+Y3R4X2h3X2lkID0g cmVxdWVzdC0+Y3R4LT5od19pZDsKPiAtCWlmIChudW1fZWxlbWVudHMgPT0gMCkKPiAtCQlleGVj bGlzdHNfdW5xdWV1ZShlbmdpbmUpOwo+ICsKPiArCWlmIChleGVjbGlzdHNfZWxzcF9pZGxlKGVu Z2luZSkpCj4gKwkJdGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5pcnFfdGFza2xldCk7Cj4g IAo+ICAJc3Bpbl91bmxvY2tfYmgoJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7Cj4gIH0KPiBAQCAt NzMxLDYgKzYzMCw3IEBAIGludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlKHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPiAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09Q KTsKPiAgCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKPiAgCWludGVsX3JpbmdfYWR2 YW5jZShyaW5nKTsKPiArCXJlcXVlc3QtPndhX3RhaWwgPSByZXF1ZXN0LT5yaW5nLT50YWlsOwo+ ICAKPiAgCS8qIFdlIGtlZXAgdGhlIHByZXZpb3VzIGNvbnRleHQgYWxpdmUgdW50aWwgd2UgcmV0 aXJlIHRoZSBmb2xsb3dpbmcKPiAgCSAqIHJlcXVlc3QuIFRoaXMgZW5zdXJlcyB0aGF0IGFueSB0 aGUgY29udGV4dCBvYmplY3QgaXMgc3RpbGwgcGlubmVkCj4gQEAgLTc0MywyMyArNjQzLDYgQEAg aW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXF1ZXN0KQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXZvaWQgaW50ZWxfZXhlY2xpc3RzX2Nh bmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCAqdG1wOwo+IC0JTElTVF9IRUFEKGNhbmNl bF9saXN0KTsKPiAtCj4gLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmVuZ2luZS0+aTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCkpOwo+IC0KPiAtCXNwaW5fbG9ja19iaCgmZW5naW5lLT5leGVjbGlz dF9sb2NrKTsKPiAtCWxpc3RfcmVwbGFjZV9pbml0KCZlbmdpbmUtPmV4ZWNsaXN0X3F1ZXVlLCAm Y2FuY2VsX2xpc3QpOwo+IC0Jc3Bpbl91bmxvY2tfYmgoJmVuZ2luZS0+ZXhlY2xpc3RfbG9jayk7 Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmY2FuY2VsX2xpc3Qs IGV4ZWNsaXN0X2xpbmspIHsKPiAtCQlsaXN0X2RlbCgmcmVxLT5leGVjbGlzdF9saW5rKTsKPiAt CQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChyZXEpOwo+IC0JfQo+IC19Cj4gLQo+ICBzdGF0aWMgaW50 IGludGVsX2xyX2NvbnRleHRfcGluKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gIAkJ CQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIHsKPiBAQCAtMTI4NSw3ICsxMTY4 LDYgQEAgc3RhdGljIHZvaWQgbHJjX2luaXRfaHdzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgc3RhdGljIGludCBnZW44X2luaXRfY29tbW9uX3Jpbmcoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBlbmdpbmUtPmk5MTU7Cj4gLQl1bnNpZ25lZCBpbnQgbmV4dF9jb250ZXh0X3N0YXR1c19i dWZmZXJfaHc7Cj4gIAo+ICAJbHJjX2luaXRfaHdzKGVuZ2luZSk7Cj4gIAo+IEBAIC0xMjk2LDMy ICsxMTc4LDEyIEBAIHN0YXRpYyBpbnQgZ2VuOF9pbml0X2NvbW1vbl9yaW5nKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCUk5MTVfV1JJVEUoUklOR19NT0RFX0dFTjcoZW5naW5l KSwKPiAgCQkgICBfTUFTS0VEX0JJVF9ESVNBQkxFKEdGWF9SRVBMQVlfTU9ERSkgfAo+ICAJCSAg IF9NQVNLRURfQklUX0VOQUJMRShHRlhfUlVOX0xJU1RfRU5BQkxFKSk7Cj4gLQlQT1NUSU5HX1JF QUQoUklOR19NT0RFX0dFTjcoZW5naW5lKSk7Cj4gIAo+IC0JLyoKPiAtCSAqIEluc3RlYWQgb2Yg cmVzZXR0aW5nIHRoZSBDb250ZXh0IFN0YXR1cyBCdWZmZXIgKENTQikgcmVhZCBwb2ludGVyIHRv Cj4gLQkgKiB6ZXJvLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIHdyaXRlIHBvaW50ZXIgZnJvbSBoYXJk d2FyZSBhbmQgdXNlIGl0cwo+IC0JICogdmFsdWUgYmVjYXVzZSAidGhpcyByZWdpc3RlciBpcyBw b3dlciBjb250ZXh0IHNhdmUgcmVzdG9yZWQiLgo+IC0JICogRWZmZWN0aXZlbHksIHRoZXNlIHN0 YXRlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQ6Cj4gLQkgKgo+IC0JICogICAgICB8IFN1c3BlbmQtdG8t aWRsZSAoZnJlZXplKSB8IFN1c3BlbmQtdG8tUkFNIChtZW0pIHwKPiAtCSAqIEJEVyAgfCBDU0Ig cmVncyBub3QgcmVzZXQgICAgICAgfCBDU0IgcmVncyByZXNldCAgICAgICB8Cj4gLQkgKiBDSFQg IHwgQ1NCIHJlZ3Mgbm90IHJlc2V0ICAgICAgIHwgQ1NCIHJlZ3Mgbm90IHJlc2V0ICAgfAo+IC0J ICogU0tMICB8ICAgICAgICAgPyAgICAgICAgICAgICAgICB8ICAgICAgICAgPyAgICAgICAgICAg IHwKPiAtCSAqIEJYVCAgfCAgICAgICAgID8gICAgICAgICAgICAgICAgfCAgICAgICAgID8gICAg ICAgICAgICB8Cj4gLQkgKi8KPiAtCW5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVyX2h3ID0KPiAt CQlHRU44X0NTQl9XUklURV9QVFIoSTkxNV9SRUFEKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVu Z2luZSkpKTsKPiAtCj4gLQkvKgo+IC0JICogV2hlbiB0aGUgQ1NCIHJlZ2lzdGVycyBhcmUgcmVz ZXQgKGFsc28gYWZ0ZXIgcG93ZXItdXAgLyBncHUgcmVzZXQpLAo+IC0JICogQ1NCIHdyaXRlIHBv aW50ZXIgaXMgc2V0IHRvIGFsbCAxJ3MsIHdoaWNoIGlzIG5vdCB2YWxpZCwgdXNlICc1JyBpbgo+ IC0JICogdGhpcyBzcGVjaWFsIGNhc2UsIHNvIHRoZSBmaXJzdCBlbGVtZW50IHJlYWQgaXMgQ1NC WzBdLgo+IC0JICovCj4gLQlpZiAobmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXJfaHcgPT0gR0VO OF9DU0JfUFRSX01BU0spCj4gLQkJbmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXJfaHcgPSAoR0VO OF9DU0JfRU5UUklFUyAtIDEpOwo+ICsJSTkxNV9XUklURShSSU5HX0NPTlRFWFRfU1RBVFVTX1BU UihlbmdpbmUpLAo+ICsJCSAgIF9NQVNLRURfRklFTEQoR0VOOF9DU0JfUkVBRF9QVFJfTUFTSyB8 Cj4gKwkJCQkgR0VOOF9DU0JfV1JJVEVfUFRSX01BU0ssCj4gKwkJCQkgMCkpOwo+ICAKPiAtCWVu Z2luZS0+bmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXIgPSBuZXh0X2NvbnRleHRfc3RhdHVzX2J1 ZmZlcl9odzsKPiAgCURSTV9ERUJVR19EUklWRVIoIkV4ZWNsaXN0cyBlbmFibGVkIGZvciAlc1xu IiwgZW5naW5lLT5uYW1lKTsKPiAgCj4gIAlpbnRlbF9lbmdpbmVfaW5pdF9oYW5nY2hlY2soZW5n aW5lKTsKPiBAQCAtMTcwNiw3ICsxNTY4LDYgQEAgdm9pZCBpbnRlbF9sb2dpY2FsX3JpbmdfY2xl YW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAl9Cj4gIAlpbnRlbF9scl9j b250ZXh0X3VucGluKGRldl9wcml2LT5rZXJuZWxfY29udGV4dCwgZW5naW5lKTsKPiAgCj4gLQll bmdpbmUtPmlkbGVfbGl0ZV9yZXN0b3JlX3dhID0gMDsKPiAgCWVuZ2luZS0+ZGlzYWJsZV9saXRl X3Jlc3RvcmVfd2EgPSBmYWxzZTsKPiAgCWVuZ2luZS0+Y3R4X2Rlc2NfdGVtcGxhdGUgPSAwOwo+ ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaAo+IGluZGV4IGE1MmNmNTdkYmQ0MC4uNGQ3MDM0 NjUwMGMyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKPiBAQCAtOTcsNiArOTcsNCBA QCBpbnQgaW50ZWxfc2FuaXRpemVfZW5hYmxlX2V4ZWNsaXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4gIAkJCQkgICAgaW50IGVuYWJsZV9leGVjbGlzdHMpOwo+ICB2b2lk IGludGVsX2V4ZWNsaXN0c19lbmFibGVfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpOwo+ICAKPiAtdm9pZCBpbnRlbF9leGVjbGlzdHNfY2FuY2VsX3JlcXVlc3Rz KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gLQo+ICAjZW5kaWYgLyogX0lOVEVM X0xSQ19IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiBpbmRl eCA0M2U1NDVlNDQzNTIuLmVkOGE4NDgyYTdmYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmgKPiBAQCAtMjg4LDExICsyODgsMTQgQEAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyB7Cj4gIAkvKiBFeGVjbGlzdHMgKi8KPiAgCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBp cnFfdGFza2xldDsKPiAgCXNwaW5sb2NrX3QgZXhlY2xpc3RfbG9jazsgLyogdXNlZCBpbnNpZGUg dGFza2xldCwgdXNlIHNwaW5fbG9ja19iaCAqLwo+ICsJc3RydWN0IGV4ZWNsaXN0X3BvcnQgewo+ ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKPiArCQl1bnNpZ25lZCBp bnQgY291bnQ7Cj4gKwl9IGV4ZWNsaXN0X3BvcnRbMl07Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGV4 ZWNsaXN0X3F1ZXVlOwo+ICAJdW5zaWduZWQgaW50IGZ3X2RvbWFpbnM7Cj4gLQl1bnNpZ25lZCBp bnQgbmV4dF9jb250ZXh0X3N0YXR1c19idWZmZXI7Cj4gLQl1bnNpZ25lZCBpbnQgaWRsZV9saXRl X3Jlc3RvcmVfd2E7Cj4gIAlib29sIGRpc2FibGVfbGl0ZV9yZXN0b3JlX3dhOwo+ICsJYm9vbCBw cmVlbXB0X3dhOwoKVGhpcyBuZWVkcyB0byBiZSByZXNldCBhbHNvIGluIGxvZ2ljYWxfcmluZ19j bGVhbnVwKCkuCgpPdmVyYWxsIHRoaXMgcGF0Y2ggcmVhbGx5IG1ha2VzIHRoZSBzdWJtaXNzaW9u L3JldGlyZW1lbnQgbXVjaCBtb3JlCmNvbXBhY3QgYW5kIHNpbXBsZXIuIFRoZSBleGNlcHRpb24g YmVpbmcgdGhlIHVucXVldWluZyBwYXJ0IHdoaWNoCmlzIGRpZmZpY3VsdCBkdWUgdG8gdGhlIG1l cmdpbmcgbG9naWMuCgpTb21lIGJpa2VzY2hlZHMgSSBtYWRlIGR1cmluZyByZXZpZXcgY2FuIGJl IGZvdW5kIGluOgpodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL35taWt1L2RybS1pbnRlbC9j b21taXQvP2g9cmV2aWV3JmlkPTNjODA2YTlmNjY2NWRiM2EwOGY5NDkyMjQ1NjBiYjAzOWFmMWJl MWEKCi1NaWthCgo+ICAJdTMyIGN0eF9kZXNjX3RlbXBsYXRlOwo+ICAKPiAgCS8qKgo+IC0tIAo+ IDIuOC4xCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=