From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 31D9310E2B8 for ; Thu, 20 Apr 2023 12:48:39 +0000 (UTC) Message-ID: <3f91f56b-21f3-6664-25a9-73b2a6e84c52@intel.com> Date: Thu, 20 Apr 2023 14:48:33 +0200 MIME-Version: 1.0 Content-Language: en-US To: =?UTF-8?Q?Zbigniew_Kempczy=c5=84ski?= , igt-dev@lists.freedesktop.org References: <20230420063908.66568-1-zbigniew.kempczynski@intel.com> <20230420063908.66568-7-zbigniew.kempczynski@intel.com> From: "Manszewski, Christoph" In-Reply-To: <20230420063908.66568-7-zbigniew.kempczynski@intel.com> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Subject: Re: [igt-dev] [PATCH i-g-t v3 06/10] lib/intel_batchbuffer: Add Xe support in intel-bb List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: SGkgWmJpZ25pZXcsCgpPbiAyMC4wNC4yMDIzIDA4OjM5LCBaYmlnbmlldyBLZW1wY3p5xYRza2kg d3JvdGU6Cj4gSW50ZW50aW9uIG9mIGNyZWF0aW5nIGludGVsLWJiIHdhcyB0byByZXBsYWNlIGxp YmRybSBmb3IgaTkxNS4KPiBEdWUgdG8gbWFueSBjb2RlIHJlbGllcyBvbiBpdCAoa21zIGZvciBl eGFtcGxlKSBtb3N0IHJhdGlvbmFsIHdheQo+IGlzIHRvIGV4dGVuZCBhbmQgYWRkIFhlIHBhdGgg dG8gaXQuCj4gCj4gU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6Ymlnbmll dy5rZW1wY3p5bnNraUBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQmhhbnVwcmFrYXNoIE1v ZGVtIDxiaGFudXByYWthc2gubW9kZW1AaW50ZWwuY29tPgo+IC0tLQo+ICAgbGliL2dwdV9jbWRz LmMgICAgICAgICAgIHwgICAyICstCj4gICBsaWIvaW50ZWxfYXV4X3BndGFibGUuYyAgfCAgIDIg Ky0KPiAgIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jICB8IDQzMCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0KPiAgIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oICB8ICAyOCAr Ky0KPiAgIHRlc3RzL2k5MTUvZ2VtX2NhY2hpbmcuYyB8ICAgNCArLQo+ICAgdGVzdHMvaTkxNS9n ZW1fcHhwLmMgICAgIHwgICAyICstCj4gICA2IGZpbGVzIGNoYW5nZWQsIDM1NSBpbnNlcnRpb25z KCspLCAxMTMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9ncHVfY21kcy5jIGIv bGliL2dwdV9jbWRzLmMKPiBpbmRleCBjZWU4MTU1NWQ4Li5hZmIyNmQyOTkwIDEwMDY0NAo+IC0t LSBhL2xpYi9ncHVfY21kcy5jCj4gKysrIGIvbGliL2dwdV9jbWRzLmMKPiBAQCAtMjUxLDcgKzI1 MSw3IEBAIGdlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAo+ICAg ewo+ICAgCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0Owo+ICAgCXVpbnQzMl90ICpiaW5k aW5nX3RhYmxlOwo+IC0JdWludDMyX3QgZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGliYi0+ aTkxNSk7Cj4gKwl1aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoaWJiLT5mZCk7 Cj4gICAKPiAgIAlpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7Cj4gICAJYmluZGluZ190YWJs ZV9vZmZzZXQgPSBpbnRlbF9iYl9vZmZzZXQoaWJiKTsKPiBkaWZmIC0tZ2l0IGEvbGliL2ludGVs X2F1eF9wZ3RhYmxlLmMgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuYwo+IGluZGV4IDUyMDU2ODcw ODAuLjk0NmNhNjBiOTcgMTAwNjQ0Cj4gLS0tIGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmMKPiAr KysgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuYwo+IEBAIC00ODEsNyArNDgxLDcgQEAgaW50ZWxf YXV4X3BndGFibGVfY3JlYXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAo+ICAgCWludGVsX2JiX2Fk ZF9pbnRlbF9idWZfd2l0aF9hbGlnbm1lbnQoaWJiLCBwZ3QtPmJ1ZiwKPiAgIAkJCQkJICAgICAg cGd0LT5tYXhfYWxpZ24sIGZhbHNlKTsKPiAgIAo+IC0JcGd0X21hcChpYmItPmk5MTUsIHBndCk7 Cj4gKwlwZ3RfbWFwKGliYi0+ZmQsIHBndCk7Cj4gICAJcGd0X3BvcHVsYXRlX2VudHJpZXMocGd0 LCBidWZzLCBidWZfY291bnQpOwo+ICAgCXBndF91bm1hcChwZ3QpOwo+ICAgCj4gZGlmZiAtLWdp dCBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKPiBp bmRleCBhNGViNGMyYmJjLi40N2FiNTc5ZGFhIDEwMDY0NAo+IC0tLSBhL2xpYi9pbnRlbF9iYXRj aGJ1ZmZlci5jCj4gKysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKPiBAQCAtMjksNiArMjks OCBAQAo+ICAgI2luY2x1ZGUgPGdsaWIuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImk5MTUvZ2VtX2Ny ZWF0ZS5oIgo+ICsjaW5jbHVkZSAieGUveGVfaW9jdGwuaCIKPiArI2luY2x1ZGUgInhlL3hlX3F1 ZXJ5LmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKPiAgICNpbmNsdWRlICJp bnRlbF9idWZvcHMuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4gQEAgLTM4LDYg KzQwLDkgQEAKPiAgICNpbmNsdWRlICJ2ZWJveGNvcHkuaCIKPiAgICNpbmNsdWRlICJzd19zeW5j LmgiCj4gICAjaW5jbHVkZSAiZ3BncHVfZmlsbC5oIgo+ICsjaW5jbHVkZSAiaWd0X2F1eC5oIgo+ ICsjaW5jbHVkZSAiaWd0X3N5bmNvYmouaCIKPiArI2luY2x1ZGUgImk4MzBfcmVnLmgiCj4gICAj aW5jbHVkZSAiaHVjX2NvcHkuaCIKPiAgICNpbmNsdWRlICJpOTE1L2k5MTVfYmx0LmgiCj4gICAK PiBAQCAtODI4LDIxICs4MzMsMjIgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCBfX2ludGVsX2Ji X2dldF9vZmZzZXQoc3RydWN0IGludGVsX2JiICppYmIsCj4gICAKPiAgIC8qKgo+ICAgICogX19p bnRlbF9iYl9jcmVhdGU6Cj4gLSAqIEBpOTE1OiBkcm0gZmQKPiArICogQGZkOiBkcm0gZmQgLSBp OTE1IG9yIHhlCj4gICAgKiBAY3R4OiBjb250ZXh0IGlkCj4gLSAqIEBjZmc6IGludGVsX2N0eCBj b25maWd1cmF0aW9uLCBOVUxMIGZvciBkZWZhdWx0IGNvbnRleHQgb3IgbGVnYWN5IG1vZGUKPiAr ICogQGNmZzogZm9yIGk5MTUgaW50ZWxfY3R4IGNvbmZpZ3VyYXRpb24sIE5VTEwgZm9yIGRlZmF1 bHQgY29udGV4dCBvciBsZWdhY3kgbW9kZSwKPiArICogICAgICAgdW51c2VkIGZvciB4ZQo+ICAg ICogQHNpemU6IHNpemUgb2YgdGhlIGJhdGNoYnVmZmVyCj4gICAgKiBAZG9fcmVsb2NzOiB1c2Ug cmVsb2NhdGlvbnMgb3IgYWxsb2NhdG9yCj4gICAgKiBAYWxsb2NhdG9yX3R5cGU6IGFsbG9jYXRv ciB0eXBlLCBtdXN0IGJlIElOVEVMX0FMTE9DQVRPUl9OT05FIGZvciByZWxvY2F0aW9ucwo+ICAg ICoKPiAgICAqIGludGVsLWJiIGFzc3VtZXMgaXQgd2lsbCB3b3JrIGluIG9uZSBvZiB0d28gbW9k ZXMgLSB3aXRoIHJlbG9jYXRpb25zIG9yCj4gLSAqIHdpdGggdXNpbmcgYWxsb2NhdG9yIChjdXJy ZW50bHkgUkFORE9NIGFuZCBTSU1QTEUgYXJlIGltcGxlbWVudGVkKS4KPiArICogd2l0aCB1c2lu ZyBhbGxvY2F0b3IgKGN1cnJlbnRseSBSRUxPQyBhbmQgU0lNUExFIGFyZSBpbXBsZW1lbnRlZCku Cj4gICAgKiBTb21lIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIHRvIGRlc2NyaWJlIGhvdyB0aGV5 IG1haW50YWluIHRoZSBhZGRyZXNzZXMuCj4gICAgKgo+ICAgICogQmVmb3JlIGVudGVyaW5nIGlu dG8gZWFjaCBzY2VuYXJpb3MgZ2VuZXJpYyBydWxlIGlzIGludGVsLWJiIGtlZXBzIG9iamVjdHMK PiAgICAqIGFuZCB0aGVpciBvZmZzZXRzIGluIHRoZSBpbnRlcm5hbCBjYWNoZSBhbmQgcmV1c2Vz IGluIHN1YnNlcXVlbnQgZXhlY3MuCj4gICAgKgo+IC0gKiAxLiBpbnRlbC1iYiB3aXRoIHJlbG9j YXRpb25zCj4gKyAqIDEuIGludGVsLWJiIHdpdGggcmVsb2NhdGlvbnMgKGk5MTUgb25seSkKPiAg ICAqCj4gICAgKiBDcmVhdGluZyBuZXcgaW50ZWwtYmIgYWRkcyBoYW5kbGUgdG8gY2FjaGUgaW1w bGljaXRseSBhbmQgc2V0cyBpdHMgYWRkcmVzcwo+ICAgICogdG8gMC4gT2JqZWN0cyBhZGRlZCB0 byBpbnRlbC1iYiBsYXRlciBhbHNvIGhhdmUgYWRkcmVzcyAwIHNldCBmb3IgZmlyc3QgcnVuLgo+ IEBAIC04NTAsMTQgKzg1NiwxNSBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IF9faW50ZWxfYmJf Z2V0X29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKPiAgICAqIHdvcmtzIGluIHJlbG9jIG1v ZGUgYWRkcmVzc2VzIGFyZSBvbmx5IHN1Z2dlc3Rpb24gdG8gdGhlIGRyaXZlciBhbmQgd2UKPiAg ICAqIGNhbm5vdCBiZSBzdXJlIHRoZXkgd29uJ3QgY2hhbmdlIGF0IG5leHQgZXhlYy4KPiAgICAq Cj4gLSAqIDIuIHdpdGggYWxsb2NhdG9yCj4gKyAqIDIuIHdpdGggYWxsb2NhdG9yIChpOTE1IG9y IHhlKQo+ICAgICoKPiAgICAqIFRoaXMgbW9kZSBpcyB2YWxpZCBvbmx5IGZvciBwcGd0dC4gQWRk cmVzc2VzIGFyZSBhY3F1aXJlZCBmcm9tIGFsbG9jYXRvcgo+IC0gKiBhbmQgc29mdHBpbm5lZC4g aW50ZWwtYmIgY2FjaGUgbXVzdCBiZSB0aGVuIGNvaGVyZW50IHdpdGggYWxsb2NhdG9yCj4gLSAq IChzaW1wbGUgaXMgY29oZXJlbnQsIHJhbmRvbSBpcyBub3QgZHVlIHRvIGZhY3Qgd2UgZG9uJ3Qg a2VlcCBpdHMgc3RhdGUpLgo+ICsgKiBhbmQgc29mdHBpbm5lZCAoaTkxNSkgb3Igdm0tYmluZGVk ICh4ZSkuIGludGVsLWJiIGNhY2hlIG11c3QgYmUgdGhlbgo+ICsgKiBjb2hlcmVudCB3aXRoIGFs bG9jYXRvciAoc2ltcGxlIGlzIGNvaGVyZW50LCByZWxvYyBwYXJ0aWFsbHkgW2RvZXNuJ3QKPiAr ICogc3VwcG9ydCBhZGRyZXNzIHJlc2VydmF0aW9uXSkuCj4gICAgKiBXaGVuIHdlIGRvIGludGVs LWJiIHJlc2V0IHdpdGggcHVyZ2luZyBjYWNoZSBpdCBoYXMgdG8gcmVhY3F1aXJlIGFkZHJlc3Nl cwo+ICAgICogZnJvbSBhbGxvY2F0b3IgKGFsbG9jYXRvciBzaG91bGQgcmV0dXJuIHNhbWUgYWRk cmVzcyAtIHdoYXQgaXMgdHJ1ZSBmb3IKPiAtICogc2ltcGxlIGFsbG9jYXRvciBhbmQgZmFsc2Ug Zm9yIHJhbmRvbSBhcyBtZW50aW9uZWQgYmVmb3JlKS4KPiArICogc2ltcGxlIGFuZCByZWxvYyBh bGxvY2F0b3JzKS4KPiAgICAqCj4gICAgKiBJZiB3ZSBkbyByZXNldCB3aXRob3V0IHB1cmdpbmcg Y2FjaGVzIHdlIHVzZSBhZGRyZXNzZXMgZnJvbSBpbnRlbC1iYiBjYWNoZQo+ICAgICogZHVyaW5n IGV4ZWNidWYgb2JqZWN0cyBjb25zdHJ1Y3Rpb24uCj4gQEAgLTg3Myw3ICs4ODAsNyBAQCBzdGF0 aWMgaW5saW5lIHVpbnQ2NF90IF9faW50ZWxfYmJfZ2V0X29mZnNldChzdHJ1Y3QgaW50ZWxfYmIg KmliYiwKPiAgICAqIFBvaW50ZXIgdGhlIGludGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1cmUuCj4g ICAgKi8KPiAgIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfYmIgKgo+IC1fX2ludGVsX2JiX2NyZWF0ZShp bnQgaTkxNSwgdWludDMyX3QgY3R4LCBjb25zdCBpbnRlbF9jdHhfY2ZnX3QgKmNmZywKPiArX19p bnRlbF9iYl9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCBjdHgsIGNvbnN0IGludGVsX2N0eF9jZmdf dCAqY2ZnLAo+ICAgCQkgIHVpbnQzMl90IHNpemUsIGJvb2wgZG9fcmVsb2NzLAo+ICAgCQkgIHVp bnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCj4gICAJCSAgdWludDhfdCBhbGxvY2F0b3JfdHlw ZSwgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgc3RyYXRlZ3kpCj4gQEAgLTg4Myw0OCArODkwLDg2 IEBAIF9faW50ZWxfYmJfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsIGNvbnN0IGludGVs X2N0eF9jZmdfdCAqY2ZnLAo+ICAgCj4gICAJaWd0X2Fzc2VydChpYmIpOwo+ICAgCj4gLQlpYmIt PnVzZXNfZnVsbF9wcGd0dCA9IGdlbV91c2VzX2Z1bGxfcHBndHQoaTkxNSk7Cj4gLQlpYmItPmRl dmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChpOTE1KTsKPiArCWliYi0+ZGV2aWQgPSBpbnRlbF9n ZXRfZHJtX2RldmlkKGZkKTsKPiAgIAlpYmItPmdlbiA9IGludGVsX2dlbihpYmItPmRldmlkKTsK PiArCWliYi0+Y3R4ID0gY3R4Owo+ICsKPiArCWliYi0+ZmQgPSBmZDsKPiArCWliYi0+ZHJpdmVy ID0gaXNfaTkxNV9kZXZpY2UoZmQpID8gSU5URUxfRFJJVkVSX0k5MTUgOgo+ICsJCQkJCSAgIGlz X3hlX2RldmljZShmZCkgPyBJTlRFTF9EUklWRVJfWEUgOiAwOwo+ICsJaWd0X2Fzc2VydChpYmIt PmRyaXZlcik7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIElmIHdlIGRvbid0IGhhdmUgZnVsbCBwcGd0 dCBkcml2ZXIgY2FuIGNoYW5nZSBvdXIgYWRkcmVzc2VzCj4gICAJICogc28gYWxsb2NhdG9yIGlz IHVzZWxlc3MgaW4gdGhpcyBjYXNlLiBKdXN0IGVuZm9yY2UgcmVsb2NhdGlvbnMKPiAgIAkgKiBm b3Igc3VjaCBnZW5zIGFuZCBkb24ndCB1c2UgYWxsb2NhdG9yIGF0IGFsbC4KPiAgIAkgKi8KPiAt CWlmICghaWJiLT51c2VzX2Z1bGxfcHBndHQpCj4gLQkJZG9fcmVsb2NzID0gdHJ1ZTsKPiArCWlm IChpYmItPmRyaXZlciA9PSBJTlRFTF9EUklWRVJfSTkxNSkgewo+ICsJCWliYi0+dXNlc19mdWxs X3BwZ3R0ID0gZ2VtX3VzZXNfZnVsbF9wcGd0dChmZCk7Cj4gICAKPiAtCS8qCj4gLQkgKiBGb3Ig c29mdHBpbiBtb2RlIGFsbG9jYXRvciBoYXMgZnVsbCBjb250cm9sIG92ZXIgb2Zmc2V0cyBhbGxv Y2F0aW9uCj4gLQkgKiBzbyB3ZSB3YW50IGtlcm5lbCB0byBub3QgaW50ZXJmZXJlIHdpdGggdGhp cy4KPiAtCSAqLwo+IC0JaWYgKGRvX3JlbG9jcykKPiAtCQlpYmItPmFsbG93c19vYmpfYWxpZ25t ZW50ID0gZ2VtX2FsbG93c19vYmpfYWxpZ25tZW50KGk5MTUpOwo+ICsJCWlmICghaWJiLT51c2Vz X2Z1bGxfcHBndHQpCj4gKwkJCWRvX3JlbG9jcyA9IHRydWU7Cj4gICAKPiAtCS8qIFVzZSBzYWZl IHN0YXJ0IG9mZnNldCBpbnN0ZWFkIGFzc3VtaW5nIDB4MCBpcyBzYWZlICovCj4gLQlzdGFydCA9 IG1heF90KHVpbnQ2NF90LCBzdGFydCwgZ2VtX2RldGVjdF9zYWZlX3N0YXJ0X29mZnNldChpOTE1 KSk7CgpQcmV2aW91c2x5IHN0YXJ0IHdhcyBhZGp1c3RlZCBiZWZvcmUgY2FsbGluZyAnaW50ZWxf YWxsb2NhdG9yX29wZW5fZnVsbCcKCgo+ICsJCS8qCj4gKwkJICogRm9yIHNvZnRwaW4gbW9kZSBh bGxvY2F0b3IgaGFzIGZ1bGwgY29udHJvbCBvdmVyIG9mZnNldHMgYWxsb2NhdGlvbgo+ICsJCSAq IHNvIHdlIHdhbnQga2VybmVsIHRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzLgo+ICsJCSAqLwo+ ICsJCWlmIChkb19yZWxvY3MpIHsKPiArCQkJaWJiLT5hbGxvd3Nfb2JqX2FsaWdubWVudCA9IGdl bV9hbGxvd3Nfb2JqX2FsaWdubWVudChmZCk7Cj4gKwkJCWFsbG9jYXRvcl90eXBlID0gSU5URUxf QUxMT0NBVE9SX05PTkU7Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyogaWYgcmVsb2NzIGFyZSBzZXQg d2Ugd29uJ3QgdXNlIGFuIGFsbG9jYXRvciAqLwo+ICsJCQlpYmItPmFsbG9jYXRvcl9oYW5kbGUg PQo+ICsJCQkJaW50ZWxfYWxsb2NhdG9yX29wZW5fZnVsbChmZCwgY3R4LAo+ICsJCQkJCQkJICBz dGFydCwgZW5kLAo+ICsJCQkJCQkJICBhbGxvY2F0b3JfdHlwZSwKPiArCQkJCQkJCSAgc3RyYXRl Z3ksIDApOwo+ICsJCX0KPiArCj4gKwkJLyogVXNlIHNhZmUgc3RhcnQgb2Zmc2V0IGluc3RlYWQg YXNzdW1pbmcgMHgwIGlzIHNhZmUgKi8KPiArCQlzdGFydCA9IG1heF90KHVpbnQ2NF90LCBzdGFy dCwgZ2VtX2RldGVjdF9zYWZlX3N0YXJ0X29mZnNldChmZCkpOwoKbm93IGl0IGlzIGNhbGxlZCBh ZnRlci4gSSBzZWUgdGhhdCBpbnRlbF9hbG9jYXRvciBjaGVja3MgZm9yIHRoZSBzdGFydCAKdmFs dWUsIHRob3VnaCBJJ20gbm90IHN1cmUgaWYgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQuIEl0IGFs c28gbG9va3MgCmxpa2UgYSByZWZhY3RvciBvZiBpOTE1IHJlbGF0ZWQgY29kZS4KCgo+ICsKPiAr CQlpYmItPnZtX2lkID0gMDsKPiArCX0gZWxzZSB7Cj4gKwkJaWd0X2Fzc2VydCghZG9fcmVsb2Nz KTsKPiArCj4gKwkJaWYgKCFjdHgpCj4gKwkJCWN0eCA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hF X1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7Cj4gKwo+ICsJCWliYi0+dXNlc19mdWxsX3Bw Z3R0ID0gMTsKPiArCQlpYmItPmFsbG9jYXRvcl9oYW5kbGUgPQo+ICsJCQlpbnRlbF9hbGxvY2F0 b3Jfb3Blbl9mdWxsKGZkLCBjdHgsIHN0YXJ0LCBlbmQsCj4gKwkJCQkJCSAgYWxsb2NhdG9yX3R5 cGUsCj4gKwkJCQkJCSAgc3RyYXRlZ3ksCj4gKwkJCQkJCSAgeGVfZ2V0X2RlZmF1bHRfYWxpZ25t ZW50KGZkKSk7Cj4gKwkJaWJiLT52bV9pZCA9IGN0eDsKPiArCQlpYmItPmxhc3RfZW5naW5lID0g fjBVOwo+ICsJfQo+ICAgCj4gLQkvKiBpZiByZWxvY3MgYXJlIHNldCB3ZSB3b24ndCB1c2UgYW4g YWxsb2NhdG9yICovCj4gLQlpZiAoZG9fcmVsb2NzKQo+IC0JCWFsbG9jYXRvcl90eXBlID0gSU5U RUxfQUxMT0NBVE9SX05PTkU7Cj4gLQllbHNlCj4gLQkJaWJiLT5hbGxvY2F0b3JfaGFuZGxlID0g aW50ZWxfYWxsb2NhdG9yX29wZW5fZnVsbChpOTE1LCBjdHgsCj4gLQkJCQkJCQkJICBzdGFydCwg ZW5kLAo+IC0JCQkJCQkJCSAgYWxsb2NhdG9yX3R5cGUsCj4gLQkJCQkJCQkJICBzdHJhdGVneSwg MCk7Cj4gICAJaWJiLT5hbGxvY2F0b3JfdHlwZSA9IGFsbG9jYXRvcl90eXBlOwo+ICAgCWliYi0+ YWxsb2NhdG9yX3N0cmF0ZWd5ID0gc3RyYXRlZ3k7Cj4gICAJaWJiLT5hbGxvY2F0b3Jfc3RhcnQg PSBzdGFydDsKPiAgIAlpYmItPmFsbG9jYXRvcl9lbmQgPSBlbmQ7Cj4gICAKPiAtCWliYi0+aTkx NSA9IGk5MTU7Cj4gICAJaWJiLT5lbmZvcmNlX3JlbG9jcyA9IGRvX3JlbG9jczsKPiAtCWliYi0+ aGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCBzaXplKTsKPiArCWlndF9hc3NlcnQoaWJiLT5kcml2 ZXIgPT0gSU5URUxfRFJJVkVSX0k5MTUgfHwKPiArCQkgICAoaWJiLT5kcml2ZXIgPT0gSU5URUxf RFJJVkVSX1hFICYmICFkb19yZWxvY3MpKTsKClRoaXMgYXNzZXJ0IHNlZW1zIHJlZHVuZGFudC4g WW91IGFscmVhZHkgZW5zdXJlIHRoaXMgd2l0aDoKID4gKwlpYmItPmRyaXZlciA9IGlzX2k5MTVf ZGV2aWNlKGZkKSA/IElOVEVMX0RSSVZFUl9JOTE1IDoKID4gKwkJCQkJICAgaXNfeGVfZGV2aWNl KGZkKSA/IElOVEVMX0RSSVZFUl9YRSA6IDA7CiA+ICsJaWd0X2Fzc2VydChpYmItPmRyaXZlcik7 CgphbmQKCiA+ICsJaWYgKGliYi0+ZHJpdmVyID09IElOVEVMX0RSSVZFUl9JOTE1KSB7CiA+ICsJ CS4uLgogPiArCX0gZWxzZSB7CiA+ICsJCWlndF9hc3NlcnQoIWRvX3JlbG9jcyk7CiA+ICsJCS4u LgogPiArCX0KCgo+ICsKPiArCWlmIChpYmItPmRyaXZlciA9PSBJTlRFTF9EUklWRVJfSTkxNSkg ewo+ICsJCWliYi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZSk7Cj4gKwkJaWJiLT5hbGln bm1lbnQgPSBnZW1fZGV0ZWN0X3NhZmVfYWxpZ25tZW50KGZkKTsKPiArCQlpYmItPmd0dF9zaXpl ID0gZ2VtX2FwZXJ0dXJlX3NpemUoZmQpOwo+ICsJfSBlbHNlIHsKPiArCQlpYmItPmFsaWdubWVu dCA9IHhlX2dldF9kZWZhdWx0X2FsaWdubWVudChmZCk7Cj4gKwkJc2l6ZSA9IEFMSUdOKHNpemUs IGliYi0+YWxpZ25tZW50KTsKPiArCQlpYmItPmhhbmRsZSA9IHhlX2JvX2NyZWF0ZV9mbGFncyhm ZCwgMCwgc2l6ZSwKPiArCQkJCQkJIHhlX2hhc192cmFtKGZkKSA/Cj4gKwkJCQkJCSB2cmFtX21l bW9yeShmZCwgMCkgOgo+ICsJCQkJCQkgc3lzdGVtX21lbW9yeShmZCkpOwo+ICsJCWliYi0+Z3R0 X3NpemUgPSAxdWxsIDw8IHhlX3ZhX2JpdHMoZmQpOwo+ICsJfQo+ICsKPiAgIAlpYmItPnNpemUg PSBzaXplOwo+IC0JaWJiLT5hbGlnbm1lbnQgPSBnZW1fZGV0ZWN0X3NhZmVfYWxpZ25tZW50KGk5 MTUpOwo+IC0JaWJiLT5jdHggPSBjdHg7Cj4gLQlpYmItPnZtX2lkID0gMDsKPiAgIAlpYmItPmJh dGNoID0gY2FsbG9jKDEsIHNpemUpOwo+ICAgCWlndF9hc3NlcnQoaWJiLT5iYXRjaCk7Cj4gICAJ aWJiLT5wdHIgPSBpYmItPmJhdGNoOwo+IEBAIC05MzcsNyArOTgyLDYgQEAgX19pbnRlbF9iYl9j cmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgY29uc3QgaW50ZWxfY3R4X2NmZ190ICpjZmcs Cj4gICAJCW1lbWNweShpYmItPmNmZywgY2ZnLCBzaXplb2YoKmNmZykpOwo+ICAgCX0KPiAgIAo+ IC0JaWJiLT5ndHRfc2l6ZSA9IGdlbV9hcGVydHVyZV9zaXplKGk5MTUpOwo+ICAgCWlmICgoaWJi LT5ndHRfc2l6ZSAtIDEpID4+IDMyKQo+ICAgCQlpYmItPnN1cHBvcnRzXzQ4Yl9hZGRyZXNzID0g dHJ1ZTsKPiAgIAo+IEBAIC05NjEsMTMgKzEwMDUsMTMgQEAgX19pbnRlbF9iYl9jcmVhdGUoaW50 IGk5MTUsIHVpbnQzMl90IGN0eCwgY29uc3QgaW50ZWxfY3R4X2NmZ190ICpjZmcsCj4gICAKPiAg IC8qKgo+ICAgICogaW50ZWxfYmJfY3JlYXRlX2Z1bGw6Cj4gLSAqIEBpOTE1OiBkcm0gZmQKPiAr ICogQGZkOiBkcm0gZmQgLSBpOTE1IG9yIHhlCj4gICAgKiBAY3R4OiBjb250ZXh0Cj4gICAgKiBA Y2ZnOiBpbnRlbF9jdHggY29uZmlndXJhdGlvbiwgTlVMTCBmb3IgZGVmYXVsdCBjb250ZXh0IG9y IGxlZ2FjeSBtb2RlCj4gICAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmF0Y2hidWZmZXIKPiAgICAq IEBzdGFydDogYWxsb2NhdG9yIHZtIHN0YXJ0IGFkZHJlc3MKPiAgICAqIEBlbmQ6IGFsbG9jYXRv ciB2bSBzdGFydCBhZGRyZXNzCj4gLSAqIEBhbGxvY2F0b3JfdHlwZTogYWxsb2NhdG9yIHR5cGUs IFNJTVBMRSwgUkFORE9NLCAuLi4KPiArICogQGFsbG9jYXRvcl90eXBlOiBhbGxvY2F0b3IgdHlw ZSwgU0lNUExFLCBSRUxPQywgLi4uCj4gICAgKiBAc3RyYXRlZ3k6IGFsbG9jYXRpb24gc3RyYXRl Z3kKPiAgICAqCj4gICAgKiBDcmVhdGVzIGJiIHdpdGggY29udGV4dCBwYXNzZWQgaW4gQGN0eCwg c2l6ZSBpbiBAc2l6ZSBhbmQgYWxsb2NhdG9yIHR5cGUKPiBAQCAtOTgwLDE5ICsxMDI0LDE5IEBA IF9faW50ZWxfYmJfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBjdHgsIGNvbnN0IGludGVsX2N0 eF9jZmdfdCAqY2ZnLAo+ICAgICoKPiAgICAqIFBvaW50ZXIgdGhlIGludGVsX2JiLCBhc3NlcnRz IG9uIGZhaWx1cmUuCj4gICAgKi8KPiAtc3RydWN0IGludGVsX2JiICppbnRlbF9iYl9jcmVhdGVf ZnVsbChpbnQgaTkxNSwgdWludDMyX3QgY3R4LAo+ICtzdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2Ji X2NyZWF0ZV9mdWxsKGludCBmZCwgdWludDMyX3QgY3R4LAo+ICAgCQkJCSAgICAgIGNvbnN0IGlu dGVsX2N0eF9jZmdfdCAqY2ZnLCB1aW50MzJfdCBzaXplLAo+ICAgCQkJCSAgICAgIHVpbnQ2NF90 IHN0YXJ0LCB1aW50NjRfdCBlbmQsCj4gICAJCQkJICAgICAgdWludDhfdCBhbGxvY2F0b3JfdHlw ZSwKPiAgIAkJCQkgICAgICBlbnVtIGFsbG9jYXRvcl9zdHJhdGVneSBzdHJhdGVneSkKPiAgIHsK PiAtCXJldHVybiBfX2ludGVsX2JiX2NyZWF0ZShpOTE1LCBjdHgsIGNmZywgc2l6ZSwgZmFsc2Us IHN0YXJ0LCBlbmQsCj4gKwlyZXR1cm4gX19pbnRlbF9iYl9jcmVhdGUoZmQsIGN0eCwgY2ZnLCBz aXplLCBmYWxzZSwgc3RhcnQsIGVuZCwKPiAgIAkJCQkgYWxsb2NhdG9yX3R5cGUsIHN0cmF0ZWd5 KTsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gICAgKiBpbnRlbF9iYl9jcmVhdGVfd2l0aF9hbGxvY2F0 b3I6Cj4gLSAqIEBpOTE1OiBkcm0gZmQKPiArICogQGZkOiBkcm0gZmQgLSBpOTE1IG9yIHhlCj4g ICAgKiBAY3R4OiBjb250ZXh0Cj4gICAgKiBAY2ZnOiBpbnRlbF9jdHggY29uZmlndXJhdGlvbiwg TlVMTCBmb3IgZGVmYXVsdCBjb250ZXh0IG9yIGxlZ2FjeSBtb2RlCj4gICAgKiBAc2l6ZTogc2l6 ZSBvZiB0aGUgYmF0Y2hidWZmZXIKPiBAQCAtMTAwNiwxOCArMTA1MCwxOCBAQCBzdHJ1Y3QgaW50 ZWxfYmIgKmludGVsX2JiX2NyZWF0ZV9mdWxsKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4gICAg Kgo+ICAgICogUG9pbnRlciB0aGUgaW50ZWxfYmIsIGFzc2VydHMgb24gZmFpbHVyZS4KPiAgICAq Lwo+IC1zdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZV93aXRoX2FsbG9jYXRvcihpbnQg aTkxNSwgdWludDMyX3QgY3R4LAo+ICtzdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZV93 aXRoX2FsbG9jYXRvcihpbnQgZmQsIHVpbnQzMl90IGN0eCwKPiAgIAkJCQkJCWNvbnN0IGludGVs X2N0eF9jZmdfdCAqY2ZnLAo+ICAgCQkJCQkJdWludDMyX3Qgc2l6ZSwKPiAgIAkJCQkJCXVpbnQ4 X3QgYWxsb2NhdG9yX3R5cGUpCj4gICB7Cj4gLQlyZXR1cm4gX19pbnRlbF9iYl9jcmVhdGUoaTkx NSwgY3R4LCBjZmcsIHNpemUsIGZhbHNlLCAwLCAwLAo+ICsJcmV0dXJuIF9faW50ZWxfYmJfY3Jl YXRlKGZkLCBjdHgsIGNmZywgc2l6ZSwgZmFsc2UsIDAsIDAsCj4gICAJCQkJIGFsbG9jYXRvcl90 eXBlLCBBTExPQ19TVFJBVEVHWV9ISUdIX1RPX0xPVyk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJv b2wgYXV4X25lZWRzX3NvZnRwaW4oaW50IGk5MTUpCj4gK3N0YXRpYyBib29sIGF1eF9uZWVkc19z b2Z0cGluKGludCBmZCkKPiAgIHsKPiAtCXJldHVybiBpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9k ZXZpZChpOTE1KSkgPj0gMTI7Cj4gKwlyZXR1cm4gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2 aWQoZmQpKSA+PSAxMjsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGJvb2wgaGFzX2N0eF9jZmcoc3Ry dWN0IGludGVsX2JiICppYmIpCj4gQEAgLTEwMjcsNyArMTA3MSw3IEBAIHN0YXRpYyBib29sIGhh c19jdHhfY2ZnKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQo+ICAgCj4gICAvKioKPiAgICAqIGludGVs X2JiX2NyZWF0ZToKPiAtICogQGk5MTU6IGRybSBmZAo+ICsgKiBAZmQ6IGRybSBmZCAtIGk5MTUg b3IgeGUKPiAgICAqIEBzaXplOiBzaXplIG9mIHRoZSBiYXRjaGJ1ZmZlcgo+ICAgICoKPiAgICAq IENyZWF0ZXMgYmIgd2l0aCBkZWZhdWx0IGNvbnRleHQuCj4gQEAgLTEwNDUsMTkgKzEwODksMTkg QEAgc3RhdGljIGJvb2wgaGFzX2N0eF9jZmcoc3RydWN0IGludGVsX2JiICppYmIpCj4gICAgKiBj b25uZWN0aW9uIHRvIGl0IGluc2lkZSBpbnRlbF9iYiBpcyBub3QgdmFsaWQgYW55bW9yZS4KPiAg ICAqIFRyeWluZyB0byB1c2UgaXQgbGVhZHMgdG8gY2F0YXN0cm9maWMgZXJyb3JzLgo+ICAgICov Cj4gLXN0cnVjdCBpbnRlbF9iYiAqaW50ZWxfYmJfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBz aXplKQo+ICtzdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90 IHNpemUpCj4gICB7Cj4gLQlib29sIHJlbG9jcyA9IGdlbV9oYXNfcmVsb2NhdGlvbnMoaTkxNSk7 Cj4gKwlib29sIHJlbG9jcyA9IGlzX2k5MTVfZGV2aWNlKGZkKSAmJiBnZW1faGFzX3JlbG9jYXRp b25zKGZkKTsKPiAgIAo+IC0JcmV0dXJuIF9faW50ZWxfYmJfY3JlYXRlKGk5MTUsIDAsIE5VTEws IHNpemUsCj4gLQkJCQkgcmVsb2NzICYmICFhdXhfbmVlZHNfc29mdHBpbihpOTE1KSwgMCwgMCwK PiArCXJldHVybiBfX2ludGVsX2JiX2NyZWF0ZShmZCwgMCwgTlVMTCwgc2l6ZSwKPiArCQkJCSBy ZWxvY3MgJiYgIWF1eF9uZWVkc19zb2Z0cGluKGZkKSwgMCwgMCwKPiAgIAkJCQkgSU5URUxfQUxM T0NBVE9SX1NJTVBMRSwKPiAgIAkJCQkgQUxMT0NfU1RSQVRFR1lfSElHSF9UT19MT1cpOwo+ICAg fQo+ICAgCj4gICAvKioKPiAgICAqIGludGVsX2JiX2NyZWF0ZV93aXRoX2NvbnRleHQ6Cj4gLSAq IEBpOTE1OiBkcm0gZmQKPiArICogQGZkOiBkcm0gZmQgLSBpOTE1IG9yIHhlCj4gICAgKiBAY3R4 OiBjb250ZXh0IGlkCj4gICAgKiBAY2ZnOiBpbnRlbF9jdHggY29uZmlndXJhdGlvbiwgTlVMTCBm b3IgZGVmYXVsdCBjb250ZXh0IG9yIGxlZ2FjeSBtb2RlCj4gICAgKiBAc2l6ZTogc2l6ZSBvZiB0 aGUgYmF0Y2hidWZmZXIKPiBAQCAtMTA3MCwyMCArMTExNCwyMCBAQCBzdHJ1Y3QgaW50ZWxfYmIg KmludGVsX2JiX2NyZWF0ZShpbnQgaTkxNSwgdWludDMyX3Qgc2l6ZSkKPiAgICAqIFBvaW50ZXIg dGhlIGludGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1cmUuCj4gICAgKi8KPiAgIHN0cnVjdCBpbnRl bF9iYiAqCj4gLWludGVsX2JiX2NyZWF0ZV93aXRoX2NvbnRleHQoaW50IGk5MTUsIHVpbnQzMl90 IGN0eCwKPiAraW50ZWxfYmJfY3JlYXRlX3dpdGhfY29udGV4dChpbnQgZmQsIHVpbnQzMl90IGN0 eCwKPiAgIAkJCSAgICAgY29uc3QgaW50ZWxfY3R4X2NmZ190ICpjZmcsIHVpbnQzMl90IHNpemUp Cj4gICB7Cj4gLQlib29sIHJlbG9jcyA9IGdlbV9oYXNfcmVsb2NhdGlvbnMoaTkxNSk7Cj4gKwli b29sIHJlbG9jcyA9IGlzX2k5MTVfZGV2aWNlKGZkKSAmJiBnZW1faGFzX3JlbG9jYXRpb25zKGZk KTsKPiAgIAo+IC0JcmV0dXJuIF9faW50ZWxfYmJfY3JlYXRlKGk5MTUsIGN0eCwgY2ZnLCBzaXpl LAo+IC0JCQkJIHJlbG9jcyAmJiAhYXV4X25lZWRzX3NvZnRwaW4oaTkxNSksIDAsIDAsCj4gKwly ZXR1cm4gX19pbnRlbF9iYl9jcmVhdGUoZmQsIGN0eCwgY2ZnLCBzaXplLAo+ICsJCQkJIHJlbG9j cyAmJiAhYXV4X25lZWRzX3NvZnRwaW4oZmQpLCAwLCAwLAo+ICAgCQkJCSBJTlRFTF9BTExPQ0FU T1JfU0lNUExFLAo+ICAgCQkJCSBBTExPQ19TVFJBVEVHWV9ISUdIX1RPX0xPVyk7Cj4gICB9Cj4g ICAKPiAgIC8qKgo+ICAgICogaW50ZWxfYmJfY3JlYXRlX3dpdGhfcmVsb2NzOgo+IC0gKiBAaTkx NTogZHJtIGZkCj4gKyAqIEBmZDogZHJtIGZkIC0gaTkxNQo+ICAgICogQHNpemU6IHNpemUgb2Yg dGhlIGJhdGNoYnVmZmVyCj4gICAgKgo+ICAgICogQ3JlYXRlcyBiYiB3aGljaCB3aWxsIGRpc2Fi bGUgcGFzc2luZyBhZGRyZXNzZXMuCj4gQEAgLTEwOTMsMTcgKzExMzcsMTcgQEAgaW50ZWxfYmJf Y3JlYXRlX3dpdGhfY29udGV4dChpbnQgaTkxNSwgdWludDMyX3QgY3R4LAo+ICAgICoKPiAgICAq IFBvaW50ZXIgdGhlIGludGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1cmUuCj4gICAgKi8KPiAtc3Ry dWN0IGludGVsX2JiICppbnRlbF9iYl9jcmVhdGVfd2l0aF9yZWxvY3MoaW50IGk5MTUsIHVpbnQz Ml90IHNpemUpCj4gK3N0cnVjdCBpbnRlbF9iYiAqaW50ZWxfYmJfY3JlYXRlX3dpdGhfcmVsb2Nz KGludCBmZCwgdWludDMyX3Qgc2l6ZSkKPiAgIHsKPiAtCWlndF9yZXF1aXJlKGdlbV9oYXNfcmVs b2NhdGlvbnMoaTkxNSkpOwo+ICsJaWd0X3JlcXVpcmUoaXNfaTkxNV9kZXZpY2UoZmQpICYmIGdl bV9oYXNfcmVsb2NhdGlvbnMoZmQpKTsKPiAgIAo+IC0JcmV0dXJuIF9faW50ZWxfYmJfY3JlYXRl KGk5MTUsIDAsIE5VTEwsIHNpemUsIHRydWUsIDAsIDAsCj4gKwlyZXR1cm4gX19pbnRlbF9iYl9j cmVhdGUoZmQsIDAsIE5VTEwsIHNpemUsIHRydWUsIDAsIDAsCj4gICAJCQkJIElOVEVMX0FMTE9D QVRPUl9OT05FLCBBTExPQ19TVFJBVEVHWV9OT05FKTsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gICAg KiBpbnRlbF9iYl9jcmVhdGVfd2l0aF9yZWxvY3NfYW5kX2NvbnRleHQ6Cj4gLSAqIEBpOTE1OiBk cm0gZmQKPiArICogQGZkOiBkcm0gZmQgLSBpOTE1Cj4gICAgKiBAY3R4OiBjb250ZXh0Cj4gICAg KiBAY2ZnOiBpbnRlbF9jdHggY29uZmlndXJhdGlvbiwgTlVMTCBmb3IgZGVmYXVsdCBjb250ZXh0 IG9yIGxlZ2FjeSBtb2RlCj4gICAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmF0Y2hidWZmZXIKPiBA QCAtMTExNiwxOSArMTE2MCwxOSBAQCBzdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZV93 aXRoX3JlbG9jcyhpbnQgaTkxNSwgdWludDMyX3Qgc2l6ZSkKPiAgICAqIFBvaW50ZXIgdGhlIGlu dGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1cmUuCj4gICAgKi8KPiAgIHN0cnVjdCBpbnRlbF9iYiAq Cj4gLWludGVsX2JiX2NyZWF0ZV93aXRoX3JlbG9jc19hbmRfY29udGV4dChpbnQgaTkxNSwgdWlu dDMyX3QgY3R4LAo+ICtpbnRlbF9iYl9jcmVhdGVfd2l0aF9yZWxvY3NfYW5kX2NvbnRleHQoaW50 IGZkLCB1aW50MzJfdCBjdHgsCj4gICAJCQkJCWNvbnN0IGludGVsX2N0eF9jZmdfdCAqY2ZnLAo+ ICAgCQkJCQl1aW50MzJfdCBzaXplKQo+ICAgewo+IC0JaWd0X3JlcXVpcmUoZ2VtX2hhc19yZWxv Y2F0aW9ucyhpOTE1KSk7Cj4gKwlpZ3RfcmVxdWlyZShpc19pOTE1X2RldmljZShmZCkgJiYgZ2Vt X2hhc19yZWxvY2F0aW9ucyhmZCkpOwo+ICAgCj4gLQlyZXR1cm4gX19pbnRlbF9iYl9jcmVhdGUo aTkxNSwgY3R4LCBjZmcsIHNpemUsIHRydWUsIDAsIDAsCj4gKwlyZXR1cm4gX19pbnRlbF9iYl9j cmVhdGUoZmQsIGN0eCwgY2ZnLCBzaXplLCB0cnVlLCAwLCAwLAo+ICAgCQkJCSBJTlRFTF9BTExP Q0FUT1JfTk9ORSwgQUxMT0NfU1RSQVRFR1lfTk9ORSk7Cj4gICB9Cj4gICAKPiAgIC8qKgo+ICAg ICogaW50ZWxfYmJfY3JlYXRlX25vX3JlbG9jczoKPiAtICogQGk5MTU6IGRybSBmZAo+ICsgKiBA ZmQ6IGRybSBmZCAtIGk5MTUgb3IgeGUKPiAgICAqIEBzaXplOiBzaXplIG9mIHRoZSBiYXRjaGJ1 ZmZlcgo+ICAgICoKPiAgICAqIENyZWF0ZXMgYmIgd2l0aCBkaXNhYmxlZCByZWxvY2F0aW9ucy4K PiBAQCAtMTEzOCwxMSArMTE4MiwxMiBAQCBpbnRlbF9iYl9jcmVhdGVfd2l0aF9yZWxvY3NfYW5k X2NvbnRleHQoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwKPiAgICAqCj4gICAgKiBQb2ludGVyIHRo ZSBpbnRlbF9iYiwgYXNzZXJ0cyBvbiBmYWlsdXJlLgo+ICAgICovCj4gLXN0cnVjdCBpbnRlbF9i YiAqaW50ZWxfYmJfY3JlYXRlX25vX3JlbG9jcyhpbnQgaTkxNSwgdWludDMyX3Qgc2l6ZSkKPiAr c3RydWN0IGludGVsX2JiICppbnRlbF9iYl9jcmVhdGVfbm9fcmVsb2NzKGludCBmZCwgdWludDMy X3Qgc2l6ZSkKPiAgIHsKPiAtCWlndF9yZXF1aXJlKGdlbV91c2VzX2Z1bGxfcHBndHQoaTkxNSkp Owo+ICsJaWd0X3JlcXVpcmUoaXNfeGVfZGV2aWNlKGZkKSB8fAo+ICsJCSAgICAoaXNfaTkxNV9k ZXZpY2UoZmQpICYmIGdlbV91c2VzX2Z1bGxfcHBndHQoZmQpKSk7Cj4gICAKPiAtCXJldHVybiBf X2ludGVsX2JiX2NyZWF0ZShpOTE1LCAwLCBOVUxMLCBzaXplLCBmYWxzZSwgMCwgMCwKPiArCXJl dHVybiBfX2ludGVsX2JiX2NyZWF0ZShmZCwgMCwgTlVMTCwgc2l6ZSwgZmFsc2UsIDAsIDAsCj4g ICAJCQkJIElOVEVMX0FMTE9DQVRPUl9TSU1QTEUsCj4gICAJCQkJIEFMTE9DX1NUUkFURUdZX0hJ R0hfVE9fTE9XKTsKPiAgIH0KPiBAQCAtMTIxNywxNiArMTI2Miw4MCBAQCB2b2lkIGludGVsX2Ji X2Rlc3Ryb3koc3RydWN0IGludGVsX2JiICppYmIpCj4gICAJCWludGVsX2FsbG9jYXRvcl9mcmVl KGliYi0+YWxsb2NhdG9yX2hhbmRsZSwgaWJiLT5oYW5kbGUpOwo+ICAgCQlpbnRlbF9hbGxvY2F0 b3JfY2xvc2UoaWJiLT5hbGxvY2F0b3JfaGFuZGxlKTsKPiAgIAl9Cj4gLQlnZW1fY2xvc2UoaWJi LT5pOTE1LCBpYmItPmhhbmRsZSk7Cj4gKwlnZW1fY2xvc2UoaWJiLT5mZCwgaWJiLT5oYW5kbGUp Owo+ICAgCj4gICAJaWYgKGliYi0+ZmVuY2UgPj0gMCkKPiAgIAkJY2xvc2UoaWJiLT5mZW5jZSk7 Cj4gKwlpZiAoaWJiLT5lbmdpbmVfc3luY29iaikKPiArCQlzeW5jb2JqX2Rlc3Ryb3koaWJiLT5m ZCwgaWJiLT5lbmdpbmVfc3luY29iaik7Cj4gKwlpZiAoaWJiLT52bV9pZCAmJiAhaWJiLT5jdHgp Cj4gKwkJeGVfdm1fZGVzdHJveShpYmItPmZkLCBpYmItPnZtX2lkKTsKPiAgIAo+ICAgCWZyZWUo aWJiLT5iYXRjaCk7Cj4gICAJZnJlZShpYmItPmNmZyk7Cj4gICAJZnJlZShpYmIpOwo+ICAgfQo+ ICAgCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3AgKnhlX2FsbG9jX2JpbmRfb3Bz KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAo+ICsJCQkJCQkgICB1aW50MzJfdCBvcCwgdWludDMyX3Qg cmVnaW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqKm9iamVj dHMgPSBpYmItPm9iamVjdHM7Cj4gKwlzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3AgKmJpbmRfb3Bz LCAqb3BzOwo+ICsJYm9vbCBzZXRfb2JqID0gKG9wICYgMHhmZmZmKSA9PSBYRV9WTV9CSU5EX09Q X01BUDsKPiArCj4gKwliaW5kX29wcyA9IGNhbGxvYyhpYmItPm51bV9vYmplY3RzLCBzaXplb2Yo KmJpbmRfb3BzKSk7Cj4gKwlpZ3RfYXNzZXJ0KGJpbmRfb3BzKTsKPiArCj4gKwlpZ3RfZGVidWco ImJpbmRfb3BzOiAlc1xuIiwgc2V0X29iaiA/ICJNQVAiIDogIlVOTUFQIik7Cj4gKwlmb3IgKGlu dCBpID0gMDsgaSA8IGliYi0+bnVtX29iamVjdHM7IGkrKykgewo+ICsJCW9wcyA9ICZiaW5kX29w c1tpXTsKPiArCj4gKwkJaWYgKHNldF9vYmopCj4gKwkJCW9wcy0+b2JqID0gb2JqZWN0c1tpXS0+ aGFuZGxlOwo+ICsKPiArCQlvcHMtPm9wID0gb3A7Cj4gKwkJb3BzLT5vYmpfb2Zmc2V0ID0gMDsK PiArCQlvcHMtPmFkZHIgPSBvYmplY3RzW2ldLT5vZmZzZXQ7Cj4gKwkJb3BzLT5yYW5nZSA9IG9i amVjdHNbaV0tPnJzdmQxOwo+ICsJCW9wcy0+cmVnaW9uID0gcmVnaW9uOwo+ICsKPiArCQlpZ3Rf ZGVidWcoIiAgWyVkXTogaGFuZGxlOiAldSwgb2Zmc2V0OiAlbGx4LCBzaXplOiAlbGx4XG4iLAo+ ICsJCQkgIGksIG9wcy0+b2JqLCAobG9uZyBsb25nKW9wcy0+YWRkciwgKGxvbmcgbG9uZylvcHMt PnJhbmdlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gYmluZF9vcHM7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIF9fdW5iaW5kX3hlX29iamVjdHMoc3RydWN0IGludGVsX2JiICppYmIpCj4gK3sKPiAr CXN0cnVjdCBkcm1feGVfc3luYyBzeW5jc1syXSA9IHsKPiArCQl7IC5mbGFncyA9IERSTV9YRV9T WU5DX1NZTkNPQkogfSwKPiArCQl7IC5mbGFncyA9IERSTV9YRV9TWU5DX1NZTkNPQkogfCBEUk1f WEVfU1lOQ19TSUdOQUwsIH0sCj4gKwl9Owo+ICsJaW50IHJldDsKPiArCj4gKwlzeW5jc1swXS5o YW5kbGUgPSBpYmItPmVuZ2luZV9zeW5jb2JqOwo+ICsJc3luY3NbMV0uaGFuZGxlID0gc3luY29i al9jcmVhdGUoaWJiLT5mZCwgMCk7Cj4gKwo+ICsJaWYgKGliYi0+bnVtX29iamVjdHMgPiAxKSB7 Cj4gKwkJc3RydWN0IGRybV94ZV92bV9iaW5kX29wICpiaW5kX29wczsKPiArCQl1aW50MzJfdCBv cCA9IFhFX1ZNX0JJTkRfT1BfVU5NQVAgfCBYRV9WTV9CSU5EX0ZMQUdfQVNZTkM7Cj4gKwo+ICsJ CWJpbmRfb3BzID0geGVfYWxsb2NfYmluZF9vcHMoaWJiLCBvcCwgMCk7Cj4gKwkJeGVfdm1fYmlu ZF9hcnJheShpYmItPmZkLCBpYmItPnZtX2lkLCAwLCBiaW5kX29wcywKPiArCQkJCSBpYmItPm51 bV9vYmplY3RzLCBzeW5jcywgMik7Cj4gKwkJZnJlZShiaW5kX29wcyk7Cj4gKwl9IGVsc2Ugewo+ ICsJCXhlX3ZtX3VuYmluZF9hc3luYyhpYmItPmZkLCBpYmItPnZtX2lkLCAwLCAwLAo+ICsJCQkJ ICAgaWJiLT5iYXRjaF9vZmZzZXQsIGliYi0+c2l6ZSwgc3luY3MsIDIpOwo+ICsJfQo+ICsJcmV0 ID0gc3luY29ial93YWl0X2VycihpYmItPmZkLCAmc3luY3NbMV0uaGFuZGxlLCAxLCBJTlQ2NF9N QVgsIDApOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsJc3luY29ial9kZXN0cm95KGli Yi0+ZmQsIHN5bmNzWzFdLmhhbmRsZSk7Cj4gKwo+ICsJaWJiLT54ZV9ib3VuZCA9IGZhbHNlOwo+ ICt9Cj4gKwo+ICAgLyoKPiAgICAqIGludGVsX2JiX3Jlc2V0Ogo+ICAgICogQGliYjogcG9pbnRl ciB0byBpbnRlbF9iYgo+IEBAIC0xMjM4LDcgKzEzNDcsNiBAQCB2b2lkIGludGVsX2JiX2Rlc3Ry b3koc3RydWN0IGludGVsX2JiICppYmIpCj4gICAgKiBmcm9tIGludGVsLWJiIHRyYWNraW5nIGxp c3QuIFJlbW92aW5nIGludGVsX2J1ZnMgcmVsZWFzZXMgdGhlaXIgYWRkcmVzc2VzCj4gICAgKiBp biB0aGUgYWxsb2NhdG9yLgo+ICAgKi8KPiAtCj4gICB2b2lkIGludGVsX2JiX3Jlc2V0KHN0cnVj dCBpbnRlbF9iYiAqaWJiLCBib29sIHB1cmdlX29iamVjdHNfY2FjaGUpCj4gICB7Cj4gICAJdWlu dDMyX3QgaTsKPiBAQCAtMTI1OCw2ICsxMzY2LDkgQEAgdm9pZCBpbnRlbF9iYl9yZXNldChzdHJ1 Y3QgaW50ZWxfYmIgKmliYiwgYm9vbCBwdXJnZV9vYmplY3RzX2NhY2hlKQo+ICAgCWZvciAoaSA9 IDA7IGkgPCBpYmItPm51bV9vYmplY3RzOyBpKyspCj4gICAJCWliYi0+b2JqZWN0c1tpXS0+Zmxh Z3MgJj0gRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1M7Cj4gICAKPiArCWlmIChpc194 ZV9kZXZpY2UoaWJiLT5mZCkgJiYgaWJiLT54ZV9ib3VuZCkKPiArCQlfX3VuYmluZF94ZV9vYmpl Y3RzKGliYik7Cj4gKwo+ICAgCV9faW50ZWxfYmJfZGVzdHJveV9yZWxvY2F0aW9ucyhpYmIpOwo+ ICAgCV9faW50ZWxfYmJfZGVzdHJveV9vYmplY3RzKGliYik7Cj4gICAJX19yZWFsbG9jYXRlX29i amVjdHMoaWJiKTsKPiBAQCAtMTI3NywxMSArMTM4OCwxNiBAQCB2b2lkIGludGVsX2JiX3Jlc2V0 KHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBib29sIHB1cmdlX29iamVjdHNfY2FjaGUpCj4gICAJCWlu dGVsX2JiX3JlbW92ZV9vYmplY3QoaWJiLCBpYmItPmhhbmRsZSwgaWJiLT5iYXRjaF9vZmZzZXQs Cj4gICAJCQkJICAgICAgIGliYi0+c2l6ZSk7Cj4gICAKPiAtCWdlbV9jbG9zZShpYmItPmk5MTUs IGliYi0+aGFuZGxlKTsKPiAtCWliYi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShpYmItPmk5MTUsIGli Yi0+c2l6ZSk7Cj4gKwlnZW1fY2xvc2UoaWJiLT5mZCwgaWJiLT5oYW5kbGUpOwo+ICsJaWYgKGlz X2k5MTVfZGV2aWNlKGliYi0+ZmQpKQo+ICsJCWliYi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShpYmIt PmZkLCBpYmItPnNpemUpOwo+ICsJZWxzZQo+ICsJCWliYi0+aGFuZGxlID0geGVfYm9fY3JlYXRl X2ZsYWdzKGliYi0+ZmQsIDAsIGliYi0+c2l6ZSwKPiArCQkJCQkJIHZyYW1faWZfcG9zc2libGUo aWJiLT5mZCwgMCkpOwo+ICAgCj4gLQkvKiBLZWVwIGFkZHJlc3MgZm9yIGJiIGluIHJlbG9jIG1v ZGUgYW5kIFJBTkRPTSBhbGxvY2F0b3IgKi8KPiAtCWlmIChpYmItPmFsbG9jYXRvcl90eXBlID09 IElOVEVMX0FMTE9DQVRPUl9TSU1QTEUpCj4gKwkvKiBSZWFjcXVpcmUgb2Zmc2V0IGZvciBSRUxP QyBhbmQgU0lNUExFICovCj4gKwlpZiAoaWJiLT5hbGxvY2F0b3JfdHlwZSA9PSBJTlRFTF9BTExP Q0FUT1JfU0lNUExFIHx8Cj4gKwkgICAgaWJiLT5hbGxvY2F0b3JfdHlwZSA9PSBJTlRFTF9BTExP Q0FUT1JfUkVMT0MpCj4gICAJCWliYi0+YmF0Y2hfb2Zmc2V0ID0gX19pbnRlbF9iYl9nZXRfb2Zm c2V0KGliYiwKPiAgIAkJCQkJCQkgIGliYi0+aGFuZGxlLAo+ICAgCQkJCQkJCSAgaWJiLT5zaXpl LAo+IEBAIC0xMzA0LDEzICsxNDIwLDE5IEBAIGludCBpbnRlbF9iYl9zeW5jKHN0cnVjdCBpbnRl bF9iYiAqaWJiKQo+ICAgewo+ICAgCWludCByZXQ7Cj4gICAKPiAtCWlmIChpYmItPmZlbmNlIDwg MCkKPiArCWlmIChpYmItPmZlbmNlIDwgMCAmJiAhaWJiLT5lbmdpbmVfc3luY29iaikKPiAgIAkJ cmV0dXJuIDA7Cj4gICAKPiAtCXJldCA9IHN5bmNfZmVuY2Vfd2FpdChpYmItPmZlbmNlLCAtMSk7 Cj4gLQlpZiAocmV0ID09IDApIHsKPiAtCQljbG9zZShpYmItPmZlbmNlKTsKPiAtCQlpYmItPmZl bmNlID0gLTE7Cj4gKwlpZiAoaWJiLT5mZW5jZSA+PSAwKSB7Cj4gKwkJcmV0ID0gc3luY19mZW5j ZV93YWl0KGliYi0+ZmVuY2UsIC0xKTsKPiArCQlpZiAocmV0ID09IDApIHsKPiArCQkJY2xvc2Uo aWJiLT5mZW5jZSk7Cj4gKwkJCWliYi0+ZmVuY2UgPSAtMTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCWlndF9hc3NlcnRfbmVxKGliYi0+ZW5naW5lX3N5bmNvYmosIDApOwo+ICsJCXJldCA9IHN5 bmNvYmpfd2FpdF9lcnIoaWJiLT5mZCwgJmliYi0+ZW5naW5lX3N5bmNvYmosCj4gKwkJCQkgICAg ICAgMSwgSU5UNjRfTUFYLCAwKTsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4gcmV0Owo+IEBAIC0x MzI1LDcgKzE0NDcsNyBAQCBpbnQgaW50ZWxfYmJfc3luYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikK PiAgIHZvaWQgaW50ZWxfYmJfcHJpbnQoc3RydWN0IGludGVsX2JiICppYmIpCj4gICB7Cj4gICAJ aWd0X2luZm8oImRybSBmZDogJWQsIGdlbjogJWQsIGRldmlkOiAldSwgZGVidWc6ICVkXG4iLAo+ IC0JCSBpYmItPmk5MTUsIGliYi0+Z2VuLCBpYmItPmRldmlkLCBpYmItPmRlYnVnKTsKPiArCQkg aWJiLT5mZCwgaWJiLT5nZW4sIGliYi0+ZGV2aWQsIGliYi0+ZGVidWcpOwo+ICAgCWlndF9pbmZv KCJoYW5kbGU6ICV1LCBzaXplOiAldSwgYmF0Y2g6ICVwLCBwdHI6ICVwXG4iLAo+ICAgCQkgaWJi LT5oYW5kbGUsIGliYi0+c2l6ZSwgaWJiLT5iYXRjaCwgaWJiLT5wdHIpOwo+ICAgCWlndF9pbmZv KCJndHRfc2l6ZTogJSIgUFJJdTY0ICIsIHN1cHBvcnRzIDQ4Yml0OiAlZFxuIiwKPiBAQCAtMTM1 MCw3ICsxNDcyLDcgQEAgdm9pZCBpbnRlbF9iYl9kdW1wKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBj b25zdCBjaGFyICpmaWxlbmFtZSkKPiAgIAlGSUxFICpvdXQ7Cj4gICAJdm9pZCAqcHRyOwo+ICAg Cj4gLQlwdHIgPSBnZW1fbW1hcF9fZGV2aWNlX2NvaGVyZW50KGliYi0+aTkxNSwgaWJiLT5oYW5k bGUsIDAsIGliYi0+c2l6ZSwKPiArCXB0ciA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaWJi LT5mZCwgaWJiLT5oYW5kbGUsIDAsIGliYi0+c2l6ZSwKPiAgIAkJCQkJUFJPVF9SRUFEKTsKPiAg IAlvdXQgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7Cj4gICAJaWd0X2Fzc2VydChvdXQpOwo+IEBA IC0xNTAxLDcgKzE2MjMsNyBAQCBzdGF0aWMgdm9pZCBfX3JlbW92ZV9mcm9tX29iamVjdHMoc3Ry dWN0IGludGVsX2JiICppYmIsCj4gICB9Cj4gICAKPiAgIC8qKgo+IC0gKiBpbnRlbF9iYl9hZGRf b2JqZWN0Ogo+ICsgKiBfX2ludGVsX2JiX2FkZF9vYmplY3Q6Cj4gICAgKiBAaWJiOiBwb2ludGVy IHRvIGludGVsX2JiCj4gICAgKiBAaGFuZGxlOiB3aGljaCBoYW5kbGUgdG8gYWRkIHRvIG9iamVj dHMgYXJyYXkKPiAgICAqIEBzaXplOiBvYmplY3Qgc2l6ZQo+IEBAIC0xNTEzLDkgKzE2MzUsOSBA QCBzdGF0aWMgdm9pZCBfX3JlbW92ZV9mcm9tX29iamVjdHMoc3RydWN0IGludGVsX2JiICppYmIs Cj4gICAgKiBpbiB0aGUgb2JqZWN0IHRyZWUuIFdoZW4gb2JqZWN0IGlzIGEgcmVuZGVyIHRhcmdl dCBpdCBoYXMgdG8KPiAgICAqIGJlIG1hcmtlZCB3aXRoIEVYRUNfT0JKRUNUX1dSSVRFIGZsYWcu Cj4gICAgKi8KPiAtc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKgo+IC1pbnRlbF9i Yl9hZGRfb2JqZWN0KHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IHNpemUsCj4gLQkJICAgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3QgYWxpZ25tZW50LCBi b29sIHdyaXRlKQo+ICtzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKgo+ ICtfX2ludGVsX2JiX2FkZF9vYmplY3Qoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGhh bmRsZSwgdWludDY0X3Qgc2l6ZSwKPiArCQkgICAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90 IGFsaWdubWVudCwgYm9vbCB3cml0ZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiAqb2JqZWN0Owo+ICAgCj4gQEAgLTE1MjMsOCArMTY0NSwxMiBAQCBpbnRlbF9i Yl9hZGRfb2JqZWN0KHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IHNpemUsCj4gICAJCSAgIHx8IEFMSUdOKG9mZnNldCwgYWxpZ25tZW50KSA9PSBvZmZzZXQp Owo+ICAgCWlndF9hc3NlcnQoaXNfcG93ZXJfb2ZfdHdvKGFsaWdubWVudCkpOwo+ICAgCj4gKwlp ZiAoaWJiLT5kcml2ZXIgPT0gSU5URUxfRFJJVkVSX0k5MTUpCj4gKwkJYWxpZ25tZW50ID0gbWF4 X3QodWludDY0X3QsIGFsaWdubWVudCwgZ2VtX2RldGVjdF9zYWZlX2FsaWdubWVudChpYmItPmZk KSk7Cj4gKwllbHNlIGlmIChpYmItPmRyaXZlciA9PSBJTlRFTF9EUklWRVJfWEUpCj4gKwkJYWxp Z25tZW50ID0gbWF4X3QodWludDY0X3QsIGliYi0+YWxpZ25tZW50LCBhbGlnbm1lbnQpOwoKSSB0 aGluayB3ZSBzaG91bGQgYWx3YXlzIGVuc3VyZSB3ZSBoYXZlIG9uZSBvZiB0aGUgKG5vdyB0d28p IHBvc3NpYmxlIApkcml2ZXJzLiBJbiBvdGhlciBwbGFjZXMgb2YgdGhpcyBzZXJpZXMgeW91IHVz ZWQgImlmIGVsc2UiIGFuZCBhc3NlcnRzLiAKVXNpbmcgJ2lmIGVsc2UgaWYnIGFuZCBxdWlldGx5 IGRvaW5nIG5vdGhpbmcgaWYgd2UgZ2V0IGEgZGlmZmVyZW50IAp2YWx1ZSwgbG9va3MgYSBsaXR0 bGUgYml0IHVucHJlZGljYXRhYmxlLgoKCj4gKwo+ICAgCW9iamVjdCA9IF9fYWRkX3RvX2NhY2hl KGliYiwgaGFuZGxlKTsKPiAtCWFsaWdubWVudCA9IG1heF90KHVpbnQ2NF90LCBhbGlnbm1lbnQs IGdlbV9kZXRlY3Rfc2FmZV9hbGlnbm1lbnQoaWJiLT5pOTE1KSk7Cj4gICAJX19hZGRfdG9fb2Jq ZWN0cyhpYmIsIG9iamVjdCk7Cj4gICAKPiAgIAkvKgo+IEBAIC0xNTg0LDkgKzE3MTAsMjcgQEAg aW50ZWxfYmJfYWRkX29iamVjdChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBzaXplLAo+ICAgCWlmIChpYmItPmFsbG93c19vYmpfYWxpZ25tZW50KQo+ICAg CQlvYmplY3QtPmFsaWdubWVudCA9IGFsaWdubWVudDsKPiAgIAo+ICsJaWYgKGliYi0+ZHJpdmVy ID09IElOVEVMX0RSSVZFUl9YRSkgewo+ICsJCW9iamVjdC0+YWxpZ25tZW50ID0gYWxpZ25tZW50 Owo+ICsJCW9iamVjdC0+cnN2ZDEgPSBzaXplOwo+ICsJfQo+ICsKPiAgIAlyZXR1cm4gb2JqZWN0 Owo+ICAgfQo+ICAgCj4gK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICoKPiAraW50 ZWxfYmJfYWRkX29iamVjdChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgaGFuZGxlLCB1 aW50NjRfdCBzaXplLAo+ICsJCSAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGFsaWdubWVu dCwgYm9vbCB3cml0ZSkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIg Km9iaiA9IE5VTEw7Cj4gKwo+ICsJb2JqID0gX19pbnRlbF9iYl9hZGRfb2JqZWN0KGliYiwgaGFu ZGxlLCBzaXplLCBvZmZzZXQsCj4gKwkJCQkgICAgYWxpZ25tZW50LCB3cml0ZSk7Cj4gKwlpZ3Rf YXNzZXJ0KG9iaik7Cj4gKwo+ICsJcmV0dXJuIG9iajsKPiArfQo+ICsKPiAgIGJvb2wgaW50ZWxf YmJfcmVtb3ZlX29iamVjdChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgaGFuZGxlLAo+ ICAgCQkJICAgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKPiAgIHsKPiBAQCAtMTk5 OSw3ICsyMTQzLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfYmJfZHVtcF9leGVjYnVmKHN0cnVjdCBp bnRlbF9iYiAqaWJiLAo+ICAgCXVpbnQ2NF90IGFkZHJlc3M7Cj4gICAKPiAgIAlpZ3RfZGVidWco ImV4ZWNidWYgW3BpZDogJWxkLCBmZDogJWQsIGN0eDogJXVdXG4iLAo+IC0JCSAgKGxvbmcpIGdl dHBpZCgpLCBpYmItPmk5MTUsIGliYi0+Y3R4KTsKPiArCQkgIChsb25nKSBnZXRwaWQoKSwgaWJi LT5mZCwgaWJiLT5jdHgpOwo+ICAgCWlndF9kZWJ1ZygiZXhlY2J1ZiBiYXRjaCBsZW46ICV1LCBz dGFydCBvZmZzZXQ6IDB4JXgsICIKPiAgIAkJICAiRFIxOiAweCV4LCBEUjQ6IDB4JXgsICIKPiAg IAkJICAibnVtIGNsaXA6ICV1LCBjbGlwcHRyOiAweCVsbHgsICIKPiBAQCAtMjEzNSw2ICsyMjc5 LDgzIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9vZmZzZXRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAo+ ICAgfQo+ICAgCj4gICAjZGVmaW5lIExJTkVMRU4gNzYKPiArCj4gK3N0YXRpYyBpbnQKPiArX194 ZV9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRfb2Zmc2V0LAo+ICsJ ICAgICB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKQoKTml0OiBmdW5jdGlvbiBuYW1lIGFuZCBw YXJhbWV0ZXIgbGlzdCBmaXRzIGluIDEwMCBjaGFyYWN0ZXJzIDopCgoKPiArewo+ICsJdWludDMy X3QgZW5naW5lID0gZmxhZ3MgJiAoSTkxNV9FWEVDX0JTRF9NQVNLIHwgSTkxNV9FWEVDX1JJTkdf TUFTSyk7Cj4gKwl1aW50MzJfdCBlbmdpbmVfaWQ7Cj4gKwlzdHJ1Y3QgZHJtX3hlX3N5bmMgc3lu Y3NbMl0gPSB7Cj4gKwkJeyAuZmxhZ3MgPSBEUk1fWEVfU1lOQ19TWU5DT0JKIHwgRFJNX1hFX1NZ TkNfU0lHTkFMLCB9LAo+ICsJCXsgLmZsYWdzID0gRFJNX1hFX1NZTkNfU1lOQ09CSiB8IERSTV9Y RV9TWU5DX1NJR05BTCwgfSwKPiArCX07Cj4gKwlzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3AgKmJp bmRfb3BzOwo+ICsJdm9pZCAqbWFwOwo+ICsKPiArCWlndF9hc3NlcnRfZXEoaWJiLT5udW1fcmVs b2NzLCAwKTsKPiArCWlndF9hc3NlcnRfZXEoaWJiLT54ZV9ib3VuZCwgZmFsc2UpOwo+ICsKPiAr CWlmIChpYmItPmxhc3RfZW5naW5lICE9IGVuZ2luZSkgewo+ICsJCXN0cnVjdCBkcm1feGVfZW5n aW5lX2NsYXNzX2luc3RhbmNlIGluc3QgPSB7IH07Cj4gKwo+ICsJCWluc3QuZW5naW5lX2luc3Rh bmNlID0KPiArCQkJKGZsYWdzICYgSTkxNV9FWEVDX0JTRF9NQVNLKSA+PiBJOTE1X0VYRUNfQlNE X1NISUZUOwo+ICsKPiArCQlzd2l0Y2ggKGZsYWdzICYgSTkxNV9FWEVDX1JJTkdfTUFTSykgewo+ ICsJCWNhc2UgSTkxNV9FWEVDX0RFRkFVTFQ6Cj4gKwkJY2FzZSBJOTE1X0VYRUNfQkxUOgo+ICsJ CQlpbnN0LmVuZ2luZV9jbGFzcyA9IERSTV9YRV9FTkdJTkVfQ0xBU1NfQ09QWTsKPiArCQkJYnJl YWs7Cj4gKwkJY2FzZSBJOTE1X0VYRUNfQlNEOgo+ICsJCQlpbnN0LmVuZ2luZV9jbGFzcyA9IERS TV9YRV9FTkdJTkVfQ0xBU1NfVklERU9fREVDT0RFOwo+ICsJCQlicmVhazsKPiArCQljYXNlIEk5 MTVfRVhFQ19SRU5ERVI6Cj4gKwkJCWluc3QuZW5naW5lX2NsYXNzID0gRFJNX1hFX0VOR0lORV9D TEFTU19SRU5ERVI7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgSTkxNV9FWEVDX1ZFQk9YOgo+ICsJ CQlpbnN0LmVuZ2luZV9jbGFzcyA9IERSTV9YRV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRTsK PiArCQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJaWd0X2Fzc2VydChmYWxzZSk7CgpNYXli ZSB3ZSBjb3VsZCB1c2UgaWd0X2Fzc2VydF9mIGFuZCBwcmludCBzb21lIG1lc3NhZ2UuCgpMZ3Rt IHNvIGZhciwgaG93ZXZlciBJIHN0aWxsIGhhdmUgc29tZSBob21ld29yayB0byBkby4KCkNocmlz dG9waAoKCj4gKwkJfQo+ICsJCWlndF9kZWJ1ZygiUnVuIG9uICVzXG4iLCB4ZV9lbmdpbmVfY2xh c3Nfc3RyaW5nKGluc3QuZW5naW5lX2NsYXNzKSk7Cj4gKwo+ICsJCWliYi0+ZW5naW5lX2lkID0g ZW5naW5lX2lkID0KPiArCQkJeGVfZW5naW5lX2NyZWF0ZShpYmItPmZkLCBpYmItPnZtX2lkLCAm aW5zdCwgMCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWVuZ2luZV9pZCA9IGliYi0+ZW5naW5lX2lkOwo+ ICsJfQo+ICsJaWJiLT5sYXN0X2VuZ2luZSA9IGVuZ2luZTsKPiArCj4gKwltYXAgPSB4ZV9ib19t YXAoaWJiLT5mZCwgaWJiLT5oYW5kbGUsIGliYi0+c2l6ZSk7Cj4gKwltZW1jcHkobWFwLCBpYmIt PmJhdGNoLCBpYmItPnNpemUpOwo+ICsJZ2VtX211bm1hcChtYXAsIGliYi0+c2l6ZSk7Cj4gKwo+ ICsJc3luY3NbMF0uaGFuZGxlID0gc3luY29ial9jcmVhdGUoaWJiLT5mZCwgMCk7Cj4gKwlpZiAo aWJiLT5udW1fb2JqZWN0cyA+IDEpIHsKPiArCQliaW5kX29wcyA9IHhlX2FsbG9jX2JpbmRfb3Bz KGliYiwgWEVfVk1fQklORF9PUF9NQVAgfCBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMsIDApOwo+ICsJ CXhlX3ZtX2JpbmRfYXJyYXkoaWJiLT5mZCwgaWJiLT52bV9pZCwgMCwgYmluZF9vcHMsCj4gKwkJ CQkgaWJiLT5udW1fb2JqZWN0cywgc3luY3MsIDEpOwo+ICsJCWliYi0+eGVfYm91bmQgPSB0cnVl Owo+ICsJCWZyZWUoYmluZF9vcHMpOwo+ICsJfSBlbHNlIHsKPiArCQl4ZV92bV9iaW5kX2FzeW5j KGliYi0+ZmQsIGliYi0+dm1faWQsIDAsIGliYi0+aGFuZGxlLCAwLAo+ICsJCQkJIGliYi0+YmF0 Y2hfb2Zmc2V0LCBpYmItPnNpemUsIHN5bmNzLCAxKTsKPiArCX0KPiArCj4gKwlzeW5jc1swXS5m bGFncyAmPSB+RFJNX1hFX1NZTkNfU0lHTkFMOwo+ICsJaWJiLT5lbmdpbmVfc3luY29iaiA9IHN5 bmNvYmpfY3JlYXRlKGliYi0+ZmQsIDApOwo+ICsJc3luY3NbMV0uaGFuZGxlID0gaWJiLT5lbmdp bmVfc3luY29iajsKPiArCj4gKwl4ZV9leGVjX3N5bmMoaWJiLT5mZCwgZW5naW5lX2lkLCBpYmIt PmJhdGNoX29mZnNldCwgc3luY3MsIDIpOwo+ICsKPiArCWlmIChzeW5jKQo+ICsJCWludGVsX2Ji X3N5bmMoaWJiKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgIC8qCj4gICAgKiBfX2lu dGVsX2JiX2V4ZWM6Cj4gICAgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCj4gQEAgLTIxNjAs NyArMjM4MSw3IEBAIGludCBfX2ludGVsX2JiX2V4ZWMoc3RydWN0IGludGVsX2JiICppYmIsIHVp bnQzMl90IGVuZF9vZmZzZXQsCj4gICAJaWJiLT5vYmplY3RzWzBdLT5oYW5kbGUgPSBpYmItPmhh bmRsZTsKPiAgIAlpYmItPm9iamVjdHNbMF0tPm9mZnNldCA9IGliYi0+YmF0Y2hfb2Zmc2V0Owo+ ICAgCj4gLQlnZW1fd3JpdGUoaWJiLT5pOTE1LCBpYmItPmhhbmRsZSwgMCwgaWJiLT5iYXRjaCwg aWJiLT5zaXplKTsKPiArCWdlbV93cml0ZShpYmItPmZkLCBpYmItPmhhbmRsZSwgMCwgaWJiLT5i YXRjaCwgaWJiLT5zaXplKTsKPiAgIAo+ICAgCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4 ZWNidWYpKTsKPiAgIAlvYmplY3RzID0gY3JlYXRlX29iamVjdHNfYXJyYXkoaWJiKTsKPiBAQCAt MjE3MywxMyArMjM5NCwxMCBAQCBpbnQgX19pbnRlbF9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAq aWJiLCB1aW50MzJfdCBlbmRfb2Zmc2V0LAo+ICAgCQlleGVjYnVmLmZsYWdzICY9IH5JOTE1X0VY RUNfTk9fUkVMT0M7Cj4gICAJZXhlY2J1Zi5yc3ZkMiA9IDA7Cj4gICAKPiAtCWlmIChpYmItPmR1 bXBfYmFzZTY0KQo+IC0JCWludGVsX2JiX2R1bXBfYmFzZTY0KGliYiwgTElORUxFTik7Cj4gLQo+ ICAgCS8qIEZvciBkZWJ1Z2dpbmcgb24gQ0ksIHJlbW92ZSBpbiBmaW5hbCBzZXJpZXMgKi8KClBT IEkga25vdyB0aGlzIGlzIG5vdCBwYXJ0IG9mIHRoaXMgcGF0Y2ggYnV0IGl0IGxlZnQgYSBzbWls ZSBvbiBteSBmYWNlIDopCgoKPiAgIAlpbnRlbF9iYl9kdW1wX2V4ZWNidWYoaWJiLCAmZXhlY2J1 Zik7Cj4gICAKPiAtCXJldCA9IF9fZ2VtX2V4ZWNidWZfd3IoaWJiLT5pOTE1LCAmZXhlY2J1Zik7 Cj4gKwlyZXQgPSBfX2dlbV9leGVjYnVmX3dyKGliYi0+ZmQsICZleGVjYnVmKTsKPiAgIAlpZiAo cmV0KSB7Cj4gICAJCWludGVsX2JiX2R1bXBfZXhlY2J1ZihpYmIsICZleGVjYnVmKTsKPiAgIAkJ ZnJlZShvYmplY3RzKTsKPiBAQCAtMjIzMCw3ICsyNDQ4LDEzIEBAIGludCBfX2ludGVsX2JiX2V4 ZWMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGVuZF9vZmZzZXQsCj4gICB2b2lkIGlu dGVsX2JiX2V4ZWMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGVuZF9vZmZzZXQsCj4g ICAJCSAgIHVpbnQ2NF90IGZsYWdzLCBib29sIHN5bmMpCj4gICB7Cj4gLQlpZ3RfYXNzZXJ0X2Vx KF9faW50ZWxfYmJfZXhlYyhpYmIsIGVuZF9vZmZzZXQsIGZsYWdzLCBzeW5jKSwgMCk7Cj4gKwlp ZiAoaWJiLT5kdW1wX2Jhc2U2NCkKPiArCQlpbnRlbF9iYl9kdW1wX2Jhc2U2NChpYmIsIExJTkVM RU4pOwo+ICsKPiArCWlmIChpYmItPmRyaXZlciA9PSBJTlRFTF9EUklWRVJfSTkxNSkKPiArCQlp Z3RfYXNzZXJ0X2VxKF9faW50ZWxfYmJfZXhlYyhpYmIsIGVuZF9vZmZzZXQsIGZsYWdzLCBzeW5j KSwgMCk7Cj4gKwllbHNlCj4gKwkJaWd0X2Fzc2VydF9lcShfX3hlX2JiX2V4ZWMoaWJiLCBlbmRf b2Zmc2V0LCBmbGFncywgc3luYyksIDApOwo+ICAgfQo+ICAgCj4gICAvKioKPiBAQCAtMjQwOSwx MyArMjYzMywxMyBAQCB1aW50MzJfdCBpbnRlbF9iYl9jb3B5X2RhdGEoc3RydWN0IGludGVsX2Ji ICppYmIsCj4gICAgKi8KPiAgIHZvaWQgaW50ZWxfYmJfYmxpdF9zdGFydChzdHJ1Y3QgaW50ZWxf YmIgKmliYiwgdWludDMyX3QgZmxhZ3MpCj4gICB7Cj4gLQlpZiAoYmx0X2hhc194eV9zcmNfY29w eShpYmItPmk5MTUpKQo+ICsJaWYgKGJsdF9oYXNfeHlfc3JjX2NvcHkoaWJiLT5mZCkpCj4gICAJ CWludGVsX2JiX291dChpYmIsIFhZX1NSQ19DT1BZX0JMVF9DTUQgfAo+ICAgCQkJICAgICBYWV9T UkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEgfAo+ICAgCQkJICAgICBYWV9TUkNfQ09QWV9CTFRfV1JJ VEVfUkdCIHwKPiAgIAkJCSAgICAgZmxhZ3MgfAo+ICAgCQkJICAgICAoNiArIDIgKiAoaWJiLT5n ZW4gPj0gOCkpKTsKPiAtCWVsc2UgaWYgKGJsdF9oYXNfZmFzdF9jb3B5KGliYi0+aTkxNSkpCj4g KwllbHNlIGlmIChibHRfaGFzX2Zhc3RfY29weShpYmItPmZkKSkKPiAgIAkJaW50ZWxfYmJfb3V0 KGliYiwgWFlfRkFTVF9DT1BZX0JMVCB8IGZsYWdzKTsKPiAgIAllbHNlCj4gICAJCWlndF9hc3Nl cnRfZigwLCAiTm8gc3VwcG9ydGVkIGJsaXQgY29tbWFuZCBmb3VuZFxuIik7Cj4gQEAgLTI0NTYs OSArMjY4MCw5IEBAIHZvaWQgaW50ZWxfYmJfZW1pdF9ibHRfY29weShzdHJ1Y3QgaW50ZWxfYmIg KmliYiwKPiAgIAo+ICAgCWlmIChnZW4gPj0gNCAmJiBzcmMtPnRpbGluZyAhPSBJOTE1X1RJTElO R19OT05FKSB7Cj4gICAJCXNyY19waXRjaCAvPSA0Owo+IC0JCWlmIChibHRfaGFzX3h5X3NyY19j b3B5KGliYi0+aTkxNSkpCj4gKwkJaWYgKGJsdF9oYXNfeHlfc3JjX2NvcHkoaWJiLT5mZCkpCj4g ICAJCQljbWRfYml0cyB8PSBYWV9TUkNfQ09QWV9CTFRfU1JDX1RJTEVEOwo+IC0JCWVsc2UgaWYg KGJsdF9oYXNfZmFzdF9jb3B5KGliYi0+aTkxNSkpCj4gKwkJZWxzZSBpZiAoYmx0X2hhc19mYXN0 X2NvcHkoaWJiLT5mZCkpCj4gICAJCQljbWRfYml0cyB8PSBmYXN0X2NvcHlfZHdvcmQwKHNyYy0+ dGlsaW5nLCBkc3QtPnRpbGluZyk7Cj4gICAJCWVsc2UKPiAgIAkJCWlndF9hc3NlcnRfZigwLCAi Tm8gc3VwcG9ydGVkIGJsaXQgY29tbWFuZCBmb3VuZFxuIik7Cj4gQEAgLTI0NjYsNyArMjY5MCw3 IEBAIHZvaWQgaW50ZWxfYmJfZW1pdF9ibHRfY29weShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKPiAg IAo+ICAgCWlmIChnZW4gPj0gNCAmJiBkc3QtPnRpbGluZyAhPSBJOTE1X1RJTElOR19OT05FKSB7 Cj4gICAJCWRzdF9waXRjaCAvPSA0Owo+IC0JCWlmIChibHRfaGFzX3h5X3NyY19jb3B5KGliYi0+ aTkxNSkpCj4gKwkJaWYgKGJsdF9oYXNfeHlfc3JjX2NvcHkoaWJiLT5mZCkpCj4gICAJCQljbWRf Yml0cyB8PSBYWV9TUkNfQ09QWV9CTFRfRFNUX1RJTEVEOwo+ICAgCQllbHNlCj4gICAJCQljbWRf Yml0cyB8PSBmYXN0X2NvcHlfZHdvcmQwKHNyYy0+dGlsaW5nLCBkc3QtPnRpbGluZyk7Cj4gQEAg LTI0ODAsNyArMjcwNCw3IEBAIHZvaWQgaW50ZWxfYmJfZW1pdF9ibHRfY29weShzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKPiAgIAlDSEVDS19SQU5HRShzcmNfcGl0Y2gpOyBDSEVDS19SQU5HRShkc3Rf cGl0Y2gpOwo+ICAgCj4gICAJYnIxM19iaXRzID0gMDsKPiAtCWlmIChibHRfaGFzX3h5X3NyY19j b3B5KGliYi0+aTkxNSkpIHsKPiArCWlmIChibHRfaGFzX3h5X3NyY19jb3B5KGliYi0+ZmQpKSB7 Cj4gICAJCXN3aXRjaCAoYnBwKSB7Cj4gICAJCWNhc2UgODoKPiAgIAkJCWJyZWFrOwo+IEBAIC0y NDk2LDcgKzI3MjAsNyBAQCB2b2lkIGludGVsX2JiX2VtaXRfYmx0X2NvcHkoc3RydWN0IGludGVs X2JiICppYmIsCj4gICAJCQlpZ3RfZmFpbChJR1RfRVhJVF9GQUlMVVJFKTsKPiAgIAkJfQo+ICAg CX0gZWxzZSB7Cj4gLQkJYnIxM19iaXRzID0gZmFzdF9jb3B5X2R3b3JkMShpYmItPmk5MTUsIHNy Yy0+dGlsaW5nLCBkc3QtPnRpbGluZywgYnBwKTsKPiArCQlicjEzX2JpdHMgPSBmYXN0X2NvcHlf ZHdvcmQxKGliYi0+ZmQsIHNyYy0+dGlsaW5nLCBkc3QtPnRpbGluZywgYnBwKTsKPiAgIAl9Cj4g ICAKPiAgIAlpZiAoKHNyYy0+dGlsaW5nIHwgZHN0LT50aWxpbmcpID49IEk5MTVfVElMSU5HX1kp IHsKPiBAQCAtMjYyOCwxNCArMjg1MiwyMCBAQCB2b2lkIGludGVsX2JiX3RyYWNrKGJvb2wgZG9f dHJhY2tpbmcpCj4gICAKPiAgIHN0YXRpYyB2b2lkIF9faW50ZWxfYmJfcmVpbml0X2FsbG9jKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQo+ICAgewo+ICsJdWludDY0X3QgYWxpZ25tZW50ID0gMDsKPiAr Cj4gICAJaWYgKGliYi0+YWxsb2NhdG9yX3R5cGUgPT0gSU5URUxfQUxMT0NBVE9SX05PTkUpCj4g ICAJCXJldHVybjsKPiAgIAo+IC0JaWJiLT5hbGxvY2F0b3JfaGFuZGxlID0gaW50ZWxfYWxsb2Nh dG9yX29wZW5fZnVsbChpYmItPmk5MTUsIGliYi0+Y3R4LAo+ICsJaWYgKGliYi0+ZHJpdmVyID09 IElOVEVMX0RSSVZFUl9YRSkKPiArCQlhbGlnbm1lbnQgPSB4ZV9nZXRfZGVmYXVsdF9hbGlnbm1l bnQoaWJiLT5mZCk7Cj4gKwo+ICsJaWJiLT5hbGxvY2F0b3JfaGFuZGxlID0gaW50ZWxfYWxsb2Nh dG9yX29wZW5fZnVsbChpYmItPmZkLCBpYmItPmN0eCwKPiAgIAkJCQkJCQkgIGliYi0+YWxsb2Nh dG9yX3N0YXJ0LCBpYmItPmFsbG9jYXRvcl9lbmQsCj4gICAJCQkJCQkJICBpYmItPmFsbG9jYXRv cl90eXBlLAo+ICAgCQkJCQkJCSAgaWJiLT5hbGxvY2F0b3Jfc3RyYXRlZ3ksCj4gLQkJCQkJCQkg IDApOwo+ICsJCQkJCQkJICBhbGlnbm1lbnQpOwo+ICsKPiAgIAlpbnRlbF9iYl9yZXNldChpYmIs IHRydWUpOwo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5o IGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgKPiBpbmRleCAxMGU0MTI2NjA2Li5lMjU2NmQ4MjIz IDEwMDY0NAo+IC0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCj4gKysrIGIvbGliL2ludGVs X2JhdGNoYnVmZmVyLmgKPiBAQCAtMjM1LDYgKzIzNSwxMSBAQCBzdHJ1Y3QgaWd0X3B4cCB7Cj4g ICAJdWludDMyX3QgYXBwaWQ7Cj4gICB9Owo+ICAgCj4gK2VudW0gaW50ZWxfZHJpdmVyIHsKPiAr CUlOVEVMX0RSSVZFUl9JOTE1ID0gMSwKPiArCUlOVEVMX0RSSVZFUl9YRSwKPiArfTsKPiArCj4g ICAvKgo+ICAgICogQmF0Y2hidWZmZXIgd2l0aG91dCBsaWJkcm0gZGVwZW5kZW5jeQo+ICAgICov Cj4gQEAgLTI0Niw3ICsyNTEsOSBAQCBzdHJ1Y3QgaW50ZWxfYmIgewo+ICAgCXVpbnQ4X3QgYWxs b2NhdG9yX3R5cGU7Cj4gICAJZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kgYWxsb2NhdG9yX3N0cmF0 ZWd5Owo+ICAgCj4gLQlpbnQgaTkxNTsKPiArCWVudW0gaW50ZWxfZHJpdmVyIGRyaXZlcjsKPiAr CWludCBmZDsKPiArCj4gICAJdW5zaWduZWQgaW50IGdlbjsKPiAgIAlib29sIGRlYnVnOwo+ICAg CWJvb2wgZHVtcF9iYXNlNjQ7Cj4gQEAgLTI2OCw2ICsyNzUsMTEgQEAgc3RydWN0IGludGVsX2Ji IHsKPiAgIAl1aW50MzJfdCBjdHg7Cj4gICAJdWludDMyX3Qgdm1faWQ7Cj4gICAKPiArCWJvb2wg eGVfYm91bmQ7Cj4gKwl1aW50MzJfdCBlbmdpbmVfc3luY29iajsKPiArCXVpbnQzMl90IGVuZ2lu ZV9pZDsKPiArCXVpbnQzMl90IGxhc3RfZW5naW5lOwo+ICsKPiAgIAkvKiBDb250ZXh0IGNvbmZp Z3VyYXRpb24gKi8KPiAgIAlpbnRlbF9jdHhfY2ZnX3QgKmNmZzsKPiAgIAo+IEBAIC0yOTksMjEg KzMxMSwyMSBAQCBzdHJ1Y3QgaW50ZWxfYmIgewo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGludGVs X2JiICoKPiAtaW50ZWxfYmJfY3JlYXRlX2Z1bGwoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwgY29u c3QgaW50ZWxfY3R4X2NmZ190ICpjZmcsCj4gK2ludGVsX2JiX2NyZWF0ZV9mdWxsKGludCBmZCwg dWludDMyX3QgY3R4LCBjb25zdCBpbnRlbF9jdHhfY2ZnX3QgKmNmZywKPiAgIAkJICAgICB1aW50 MzJfdCBzaXplLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAo+ICAgCQkgICAgIHVpbnQ4 X3QgYWxsb2NhdG9yX3R5cGUsIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKPiAg IHN0cnVjdCBpbnRlbF9iYiAqCj4gLWludGVsX2JiX2NyZWF0ZV93aXRoX2FsbG9jYXRvcihpbnQg aTkxNSwgdWludDMyX3QgY3R4LCBjb25zdCBpbnRlbF9jdHhfY2ZnX3QgKmNmZywKPiAraW50ZWxf YmJfY3JlYXRlX3dpdGhfYWxsb2NhdG9yKGludCBmZCwgdWludDMyX3QgY3R4LCBjb25zdCBpbnRl bF9jdHhfY2ZnX3QgKmNmZywKPiAgIAkJCSAgICAgICB1aW50MzJfdCBzaXplLCB1aW50OF90IGFs bG9jYXRvcl90eXBlKTsKPiAtc3RydWN0IGludGVsX2JiICppbnRlbF9iYl9jcmVhdGUoaW50IGk5 MTUsIHVpbnQzMl90IHNpemUpOwo+ICtzdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZShp bnQgZmQsIHVpbnQzMl90IHNpemUpOwo+ICAgc3RydWN0IGludGVsX2JiICoKPiAtaW50ZWxfYmJf Y3JlYXRlX3dpdGhfY29udGV4dChpbnQgaTkxNSwgdWludDMyX3QgY3R4LCBjb25zdCBpbnRlbF9j dHhfY2ZnX3QgKmNmZywKPiAraW50ZWxfYmJfY3JlYXRlX3dpdGhfY29udGV4dChpbnQgZmQsIHVp bnQzMl90IGN0eCwgY29uc3QgaW50ZWxfY3R4X2NmZ190ICpjZmcsCj4gICAJCQkgICAgIHVpbnQz Ml90IHNpemUpOwo+IC1zdHJ1Y3QgaW50ZWxfYmIgKmludGVsX2JiX2NyZWF0ZV93aXRoX3JlbG9j cyhpbnQgaTkxNSwgdWludDMyX3Qgc2l6ZSk7Cj4gK3N0cnVjdCBpbnRlbF9iYiAqaW50ZWxfYmJf Y3JlYXRlX3dpdGhfcmVsb2NzKGludCBmZCwgdWludDMyX3Qgc2l6ZSk7Cj4gICBzdHJ1Y3QgaW50 ZWxfYmIgKgo+IC1pbnRlbF9iYl9jcmVhdGVfd2l0aF9yZWxvY3NfYW5kX2NvbnRleHQoaW50IGk5 MTUsIHVpbnQzMl90IGN0eCwKPiAraW50ZWxfYmJfY3JlYXRlX3dpdGhfcmVsb2NzX2FuZF9jb250 ZXh0KGludCBmZCwgdWludDMyX3QgY3R4LAo+ICAgCQkJCQljb25zdCBpbnRlbF9jdHhfY2ZnX3Qg KmNmZywgdWludDMyX3Qgc2l6ZSk7Cj4gLXN0cnVjdCBpbnRlbF9iYiAqaW50ZWxfYmJfY3JlYXRl X25vX3JlbG9jcyhpbnQgaTkxNSwgdWludDMyX3Qgc2l6ZSk7Cj4gK3N0cnVjdCBpbnRlbF9iYiAq aW50ZWxfYmJfY3JlYXRlX25vX3JlbG9jcyhpbnQgZmQsIHVpbnQzMl90IHNpemUpOwo+ICAgdm9p ZCBpbnRlbF9iYl9kZXN0cm95KHN0cnVjdCBpbnRlbF9iYiAqaWJiKTsKPiAgIAo+ICAgLyogbWFr ZSBpdCBzYWZlIHRvIHVzZSBpbnRlbF9hbGxvY2F0b3IgYWZ0ZXIgZmFpbGVkIHRlc3QgKi8KPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fY2FjaGluZy5jIGIvdGVzdHMvaTkxNS9nZW1fY2Fj aGluZy5jCj4gaW5kZXggYjZlY2Q4MzQ2Yy4uNmU5NDRmMGFjYiAxMDA2NDQKPiAtLS0gYS90ZXN0 cy9pOTE1L2dlbV9jYWNoaW5nLmMKPiArKysgYi90ZXN0cy9pOTE1L2dlbV9jYWNoaW5nLmMKPiBA QCAtODMsNyArODMsNyBAQCBjb3B5X2JvKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBzdHJ1Y3QgaW50 ZWxfYnVmICpzcmMsIHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKPiAgIAlpbnRlbF9iYl9hZGRfaW50 ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7Cj4gICAJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIs IGRzdCwgdHJ1ZSk7Cj4gICAKPiAtCWlmIChibHRfaGFzX3h5X3NyY19jb3B5KGliYi0+aTkxNSkp IHsKPiArCWlmIChibHRfaGFzX3h5X3NyY19jb3B5KGliYi0+ZmQpKSB7Cj4gICAJCWludGVsX2Ji X291dChpYmIsCj4gICAJCQkgICAgIFhZX1NSQ19DT1BZX0JMVF9DTUQgfAo+ICAgCQkJICAgICBY WV9TUkNfQ09QWV9CTFRfV1JJVEVfQUxQSEEgfAo+IEBAIC05Myw3ICs5Myw3IEBAIGNvcHlfYm8o c3RydWN0IGludGVsX2JiICppYmIsIHN0cnVjdCBpbnRlbF9idWYgKnNyYywgc3RydWN0IGludGVs X2J1ZiAqZHN0KQo+ICAgCQlpbnRlbF9iYl9vdXQoaWJiLCAoMyA8PCAyNCkgfCAvKiAzMiBiaXRz ICovCj4gICAJCQkgICAgICgweGNjIDw8IDE2KSB8IC8qIGNvcHkgUk9QICovCj4gICAJCQkgICAg IDQwOTYpOwo+IC0JfSBlbHNlIGlmIChibHRfaGFzX2Zhc3RfY29weShpYmItPmk5MTUpKSB7Cj4g Kwl9IGVsc2UgaWYgKGJsdF9oYXNfZmFzdF9jb3B5KGliYi0+ZmQpKSB7Cj4gICAJCWludGVsX2Ji X291dChpYmIsIFhZX0ZBU1RfQ09QWV9CTFQpOwo+ICAgCQlpbnRlbF9iYl9vdXQoaWJiLCBYWV9G QVNUX0NPUFlfQ09MT1JfREVQVEhfMzIgfCA0MDk2KTsKPiAgIAl9IGVsc2Ugewo+IGRpZmYgLS1n aXQgYS90ZXN0cy9pOTE1L2dlbV9weHAuYyBiL3Rlc3RzL2k5MTUvZ2VtX3B4cC5jCj4gaW5kZXgg YWY2NTdkMGUxYi4uMmYyN2FiZDU4MiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9pOTE1L2dlbV9weHAu Ywo+ICsrKyBiL3Rlc3RzL2k5MTUvZ2VtX3B4cC5jCj4gQEAgLTgwOSw3ICs4MDksNyBAQCBzdGF0 aWMgaW50IGdlbV9leGVjYnVmX2ZsdXNoX3N0b3JlX2R3KGludCBpOTE1LCBzdHJ1Y3QgaW50ZWxf YmIgKmliYiwgdWludDMyX3QgYwo+ICAgCXJldCA9IF9faW50ZWxfYmJfZXhlYyhpYmIsIGludGVs X2JiX29mZnNldChpYmIpLAo+ICAgCQkJCSAgSTkxNV9FWEVDX1JFTkRFUiB8IEk5MTVfRVhFQ19O T19SRUxPQywgZmFsc2UpOwo+ICAgCWlmIChyZXQgPT0gMCkgewo+IC0JCWdlbV9zeW5jKGliYi0+ aTkxNSwgZmVuY2UtPmhhbmRsZSk7Cj4gKwkJZ2VtX3N5bmMoaWJiLT5mZCwgZmVuY2UtPmhhbmRs ZSk7Cj4gICAJCWFzc2VydF9waXBlY3RsX3N0b3JlZHdfZG9uZShpOTE1LCBmZW5jZS0+aGFuZGxl KTsKPiAgIAl9Cj4gICAJcmV0dXJuIHJldDsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkludGVsIFRlY2hub2xvZ3kg UG9sYW5kIHNwLiB6IG8uby4KdWwuIFNsb3dhY2tpZWdvIDE3MyB8IDgwLTI5OCBHZGFuc2sgfCBT YWQgUmVqb25vd3kgR2RhbnNrIFBvbG5vYyB8IFZJSSBXeWR6aWFsIEdvc3BvZGFyY3p5IEtyYWpv d2VnbyBSZWplc3RydSBTYWRvd2VnbyAtIEtSUyAxMDE4ODIgfCBOSVAgOTU3LTA3LTUyLTMxNiB8 IEthcGl0YWwgemFrbGFkb3d5IDIwMC4wMDAgUExOLgpTcG9sa2Egb3N3aWFkY3phLCB6ZSBwb3Np YWRhIHN0YXR1cyBkdXplZ28gcHJ6ZWRzaWViaW9yY3kgdyByb3p1bWllbml1IHVzdGF3eSB6IGRu aWEgOCBtYXJjYSAyMDEzIHIuIG8gcHJ6ZWNpd2R6aWFsYW5pdSBuYWRtaWVybnltIG9wb3puaWVu aW9tIHcgdHJhbnNha2NqYWNoIGhhbmRsb3d5Y2guCgpUYSB3aWFkb21vc2Mgd3JheiB6IHphbGFj em5pa2FtaSBqZXN0IHByemV6bmFjem9uYSBkbGEgb2tyZXNsb25lZ28gYWRyZXNhdGEgaSBtb3pl IHphd2llcmFjIGluZm9ybWFjamUgcG91Zm5lLiBXIHJhemllIHByenlwYWRrb3dlZ28gb3Ryenlt YW5pYSB0ZWogd2lhZG9tb3NjaSwgcHJvc2lteSBvIHBvd2lhZG9taWVuaWUgbmFkYXdjeSBvcmF6 IHRyd2FsZSBqZWogdXN1bmllY2llOyBqYWtpZWtvbHdpZWsgcHJ6ZWdsYWRhbmllIGx1YiByb3pw b3dzemVjaG5pYW5pZSBqZXN0IHphYnJvbmlvbmUuClRoaXMgZS1tYWlsIGFuZCBhbnkgYXR0YWNo bWVudHMgbWF5IGNvbnRhaW4gY29uZmlkZW50aWFsIG1hdGVyaWFsIGZvciB0aGUgc29sZSB1c2Ug b2YgdGhlIGludGVuZGVkIHJlY2lwaWVudChzKS4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVk IHJlY2lwaWVudCwgcGxlYXNlIGNvbnRhY3QgdGhlIHNlbmRlciBhbmQgZGVsZXRlIGFsbCBjb3Bp ZXM7IGFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uIGJ5IG90aGVycyBpcyBzdHJpY3RseSBwcm9o aWJpdGVkLgo=