From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ACF1CC2D0DB for ; Tue, 28 Jan 2020 21:55:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 84830207FD for ; Tue, 28 Jan 2020 21:55:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 84830207FD Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0788289C05; Tue, 28 Jan 2020 21:55:29 +0000 (UTC) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id E815689BAC for ; Tue, 28 Jan 2020 21:55:26 +0000 (UTC) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Jan 2020 13:55:26 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,375,1574150400"; d="scan'208";a="217758312" Received: from dceraolo-linux.fm.intel.com (HELO [10.1.27.145]) ([10.1.27.145]) by orsmga007.jf.intel.com with ESMTP; 28 Jan 2020 13:55:24 -0800 To: Chris Wilson , intel-gfx@lists.freedesktop.org References: <20200128204318.4182039-1-chris@chris-wilson.co.uk> <20200128204318.4182039-5-chris@chris-wilson.co.uk> From: Daniele Ceraolo Spurio Message-ID: <0f1a8ffd-e146-95a5-0c65-c48d77bc12ef@intel.com> Date: Tue, 28 Jan 2020 13:55:02 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20200128204318.4182039-5-chris@chris-wilson.co.uk> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 5/5] drm/i915/gt: Split logical ring context manipulation into intel_lrc.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiAxLzI4LzIwIDEyOjQzIFBNLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4gRXh0cmFjdCB0aGUg Y29yZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGxvZ2lj YWwKPiByaW5nIGNvbnRleHQgdG8gaW50ZWxfbHJjLmMuIFRoaXMgd2lsbCBiZSBzaGFyZWQgYnkg YWxsIHN1Ym1pc3Npb24KPiBiYWNrZW5kcyB0aGF0IHV0aWxpc2UgbG9naWNhbCByaW5nIGNvbnRl eHRzLgo+IAoKSSBzdGlsbCBkb24ndCB1bmRlcnN0YW5kIHdoeSB5b3UgZG9uJ3Qgd2FudCB0byBw dXQgdGhlIGxyYyBhbmQgcmluZyAKb2JqZWN0IGNyZWF0aW9uIGFuZCBpbml0aWFsIHNldHVwIChw b3B1bGF0ZV9scl9jb250ZXh0KSBzb21ld2hlcmUgCmNvbW1vbi4gSSBzZWUgbm8gd2F5IHdlIGNv dWxkIGRvIHRoYXQgZGlmZmVyZW50bHkgZm9yIEd1QyBzdWJtaXNzaW9uLCAKc2luY2UgdGhlIEhX IG9idmlvdXNseSByZXF1aXJlcyB0aGUgc2FtZSBvYmplY3RzIGFuZCBJTU8gaXQgbWFrZXMgc2Vu c2UgCnRvIGtlZXAgdGhlIHNhbWUgaW5pdGlhbGl6YXRpb24gZmxvdywgc28gd2UnZCBoYXZlIHRv IGNvcHkgdGhhdCBsb2dpYyAKYW5kIG1haW50YWluIDIgaWRlbnRpY2FsIGNvcGllcyBvZiBpdC4g VGhlIHJlZHpvbmUgaXMgdGhlIG9ubHkgdGhpbmcgCnRoYXQgaXMgbm90IGh3LWVuZm9yY2VkLCBi dXQgSSBiZWxpZXZlIGl0IG1ha2VzIHNlbnNlIHRvIGtlZXAgdGhhdCBvbiAKdGhlIEd1QyBzaWRl IGFzIHdlbGwgdG8gY2F0Y2ggcG9zc2libGUgaXNzdWVzLiBPciBhbSBJIG1pc3Npbmcgc29tZXRo aW5nPwoKQXBhcnQgZnJvbSB0aGUgb2JqZWN0cywgSSBzZWUgZXZlcnl0aGluZyBlbHNlIHRoYXQg SSd2ZSByZS11c2VkIGluIG15IApsYXRlc3QgUkZDIHdpdGggdGhlIEd1QyBzdWJtaXNzaW9uIGZ1 bmN0aW9ucyBpcyBiZWluZyBtb3ZlZCB0byBjb21tb24gCnBsYWNlcyBzbyB0aGlzIHJlLW9yZyBz aG91bGQgbWFrZSB0aGluZ3MgY2xlYW5lciBmb3IgdGhhdC4KCkRhbmllbGUKCj4gU2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IERhbmll bGUgQ2VyYW9sbyBTcHVyaW8gPGRhbmllbGUuY2VyYW9sb3NwdXJpb0BpbnRlbC5jb20+Cj4gQ2M6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAzICsKPiAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMgICB8ICAgIDEgKwo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYyAgICAgIHwgIDM0MCArKysr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oICAgICAgfCAgIDI3 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9wb29sLmMgICB8ICAg IDEgKwo+ICAgLi4uL2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV93b3JrYXJvdW5kX2JiLmMgIHwg IDMzNSArKysrCj4gICAuLi4vZHJtL2k5MTUvZ3QvaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24u YyAgfCAxNTUyICstLS0tLS0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9scmMuYyAgICAgICAgICAgfCAgODMwICsrKysrKysrKwo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfbHJjLmggICAgICAgICAgIHwgICAzMiArLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMgIHwgIDQ5OCArLS0tLS0KPiAgIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jICAgICAgICB8ICA1NDQgKysrKysrCj4g ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfYWRzLmMgICAgfCAgICAxICsK PiAgIC4uLi9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyB8ICAgMzYg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYyAgICAgICB8ICAg IDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jICAgICAgICAgIHwg ICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgICAg fCAgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jICAgICAgICAgICAg ICB8ICAgIDEgKwo+ICAgMTcgZmlsZXMgY2hhbmdlZCwgMjE3OCBpbnNlcnRpb25zKCspLCAyMDI2 IGRlbGV0aW9ucygtKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2dlbjhfZW5naW5lX2NzLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3dvcmthcm91bmRfYmIuYwo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDU4YjBlODZjNzFmNy4uNWY0NTM3OWY1YmExIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtNzgsNiArNzgsNyBAQCBndC15ICs9IFwKPiAg IAlndC9kZWJ1Z2ZzX2d0Lm8gXAo+ICAgCWd0L2RlYnVnZnNfZ3RfcG0ubyBcCj4gICAJZ3QvZ2Vu Nl9wcGd0dC5vIFwKPiArCWd0L2dlbjhfZW5naW5lX2NzLm8gXAo+ICAgCWd0L2dlbjhfcHBndHQu byBcCj4gICAJZ3QvaW50ZWxfYnJlYWRjcnVtYnMubyBcCj4gICAJZ3QvaW50ZWxfY29udGV4dC5v IFwKPiBAQCAtODYsNiArODcsNyBAQCBndC15ICs9IFwKPiAgIAlndC9pbnRlbF9lbmdpbmVfcG0u byBcCj4gICAJZ3QvaW50ZWxfZW5naW5lX3Bvb2wubyBcCj4gICAJZ3QvaW50ZWxfZW5naW5lX3Vz ZXIubyBcCj4gKwlndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5vIFwKPiAgIAlndC9pbnRl bF9leGVjbGlzdHNfc3VibWlzc2lvbi5vIFwKPiAgIAlndC9pbnRlbF9nZ3R0Lm8gXAo+ICAgCWd0 L2ludGVsX2d0Lm8gXAo+IEBAIC05NSw2ICs5Nyw3IEBAIGd0LXkgKz0gXAo+ICAgCWd0L2ludGVs X2d0X3JlcXVlc3RzLm8gXAo+ICAgCWd0L2ludGVsX2d0dC5vIFwKPiAgIAlndC9pbnRlbF9sbGMu byBcCj4gKwlndC9pbnRlbF9scmMubyBcCj4gICAJZ3QvaW50ZWxfbW9jcy5vIFwKPiAgIAlndC9p bnRlbF9wcGd0dC5vIFwKPiAgIAlndC9pbnRlbF9yYzYubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jCj4gaW5kZXggZGExYmE4ZmVlZWRjLi5mMjJhMmRi ODc1OGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2Nv bnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9jb250ZXh0 LmMKPiBAQCAtNzQsNiArNzQsNyBAQAo+ICAgI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV9oZWFy dGJlYXQuaCIKPiAgICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmVfcG0uaCIKPiAgICNpbmNsdWRl ICJndC9pbnRlbF9lbmdpbmVfdXNlci5oIgo+ICsjaW5jbHVkZSAiZ3QvaW50ZWxfbHJjLmgiCj4g ICAjaW5jbHVkZSAiZ3QvaW50ZWxfbHJjX3JlZy5oIgo+ICAgI2luY2x1ZGUgImd0L2ludGVsX3Jp bmcuaCIKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW44X2Vu Z2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVfY3MuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44NmE4YjMyODYyMWQKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuOF9lbmdpbmVf Y3MuYwo+IEBAIC0wLDAgKzEsMzQwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiZ2VuOF9lbmdpbmVfY3MuaCIKPiArI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9ncHVfY29tbWFuZHMuaCIKPiArI2luY2x1ZGUgImludGVs X3JpbmcuaCIKPiArI2luY2x1ZGUgImludGVsX2xyYy5oIgo+ICsKPiAraW50IGdlbjhfZW1pdF9m bHVzaF94Y3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyIG1vZGUpCj4gK3sKPiAr CXUzMiBjbWQsICpjczsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNCk7 Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJY21k ID0gTUlfRkxVU0hfRFcgKyAxOwo+ICsKPiArCS8qIFdlIGFsd2F5cyByZXF1aXJlIGEgY29tbWFu ZCBiYXJyaWVyIHNvIHRoYXQgc3Vic2VxdWVudAo+ICsJICogY29tbWFuZHMsIHN1Y2ggYXMgYnJl YWRjcnVtYiBpbnRlcnJ1cHRzLCBhcmUgc3RyaWN0bHkgb3JkZXJlZAo+ICsJICogd3J0IHRoZSBj b250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUgYmVpbmcgZmx1c2hlZCB0byBtZW1vcnkKPiArCSAq IChhbmQgdGh1cyBiZWluZyBjb2hlcmVudCBmcm9tIHRoZSBDUFUpLgo+ICsJICovCj4gKwljbWQg fD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfCBNSV9GTFVTSF9EV19PUF9TVE9SRURXOwo+ICsK PiArCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Cj4gKwkJY21kIHw9IE1JX0lOVkFMSURB VEVfVExCOwo+ICsJCWlmIChyZXF1ZXN0LT5lbmdpbmUtPmNsYXNzID09IFZJREVPX0RFQ09ERV9D TEFTUykKPiArCQkJY21kIHw9IE1JX0lOVkFMSURBVEVfQlNEOwo+ICsJfQo+ICsKPiArCSpjcysr ID0gY21kOwo+ICsJKmNzKysgPSBMUkNfUFBIV1NQX1NDUkFUQ0hfQUREUjsKPiArCSpjcysrID0g MDsgLyogdXBwZXIgYWRkciAqLwo+ICsJKmNzKysgPSAwOyAvKiB2YWx1ZSAqLwo+ICsJaW50ZWxf cmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr aW50IGdlbjhfZW1pdF9mbHVzaF9yY3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMy IG1vZGUpCj4gK3sKPiArCXUzMiAqY3MsIGZsYWdzID0gMDsKPiArCj4gKwlmbGFncyB8PSBQSVBF X0NPTlRST0xfQ1NfU1RBTEw7Cj4gKwo+ICsJaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7Cj4gKwkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gKwkJZmxh Z3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNI X0VOQUJMRTsKPiArCX0KPiArCj4gKwlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ICsJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05T VF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNI RV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiArCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKPiArCX0KPiArCj4gKwljcyA9 IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQly ZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNz LCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwo+ICsKPiArCWludGVsX3JpbmdfYWR2 YW5jZShyZXF1ZXN0LCBjcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBnZW45 X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKQo+ ICt7Cj4gKwlib29sIHZmX2ZsdXNoX3dhID0gZmFsc2UsIGRjX2ZsdXNoX3dhID0gZmFsc2U7Cj4g Kwl1MzIgKmNzLCBmbGFncyA9IDA7Cj4gKwlpbnQgbGVuID0gNjsKPiArCj4gKwlmbGFncyB8PSBQ SVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gKwo+ICsJaWYgKG1vZGUgJiBFTUlUX0ZMVVNIKSB7Cj4g KwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gKwkJ ZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RFUFRIX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9IFBJ UEVfQ09OVFJPTF9EQ19GTFVTSF9FTkFCTEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZM VVNIX0VOQUJMRTsKPiArCX0KPiArCj4gKwlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9D T05TVF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9D QUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiAr CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKPiArCj4gKwkJLyoKPiAr CQkgKiBPbiBHRU45OiBiZWZvcmUgVkZfQ0FDSEVfSU5WQUxJREFURSB3ZSBuZWVkIHRvIGVtaXQg YSBOVUxMCj4gKwkJICogcGlwZSBjb250cm9sLgo+ICsJCSAqLwo+ICsJCXZmX2ZsdXNoX3dhID0g dHJ1ZTsKPiArCQlsZW4gKz0gNjsKPiArCj4gKwkJLyogV2FGb3JHQU1IYW5nOmtibCAqLwo+ICsJ CWlmIChJU19LQkxfUkVWSUQocmVxdWVzdC0+aTkxNSwgMCwgS0JMX1JFVklEX0IwKSkgewo+ICsJ CQlkY19mbHVzaF93YSA9IHRydWU7Cj4gKwkJCWxlbiArPSAxMjsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJlcXVlc3QsIGxlbik7Cj4gKwlpZiAoSVNfRVJSKGNz KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJaWYgKHZmX2ZsdXNoX3dhKQo+ICsJ CWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgMCwgMCk7Cj4gKwo+ICsJaWYgKGRjX2Zs dXNoX3dhKQo+ICsJCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgUElQRV9DT05UUk9M X0RDX0ZMVVNIX0VOQUJMRSwKPiArCQkJCQkgICAgMCk7Cj4gKwo+ICsJY3MgPSBnZW44X2VtaXRf cGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwo+ICsKPiAr CWlmIChkY19mbHVzaF93YSkKPiArCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIFBJ UEVfQ09OVFJPTF9DU19TVEFMTCwgMCk7Cj4gKwo+ICsJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVl c3QsIGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGdlbjExX2VtaXRfZmx1 c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKQo+ICt7Cj4gKwlp ZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKPiArCQl1MzIgKmNzOwo+ICsJCXUzMiBmbGFncyA9IDA7 Cj4gKwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKPiArCj4gKwkJZmxhZ3Mg fD0gUElQRV9DT05UUk9MX1RJTEVfQ0FDSEVfRkxVU0g7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1JFTkRFUl9UQVJHRVRfQ0FDSEVfRkxVU0g7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X0RFUFRIX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9EQ19GTFVTSF9F TkFCTEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0ZMVVNIX0VOQUJMRTsKPiArCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NU T1JFX0RBVEFfSU5ERVg7Cj4gKwo+ICsJCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2 KTsKPiArCQlpZiAoSVNfRVJSKGNzKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiAr CQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1NDUkFU Q0hfQUREUik7Cj4gKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiArCX0KPiAr Cj4gKwlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ICsJCXUzMiAqY3M7Cj4gKwkJdTMy IGZsYWdzID0gMDsKPiArCj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+ICsK PiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09NTUFORF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJ CWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9UTEJfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfSU5TVFJVQ1RJT05fQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfVEVYVFVSRV9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9WRl9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DT05T VF9DQUNIRV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVEFURV9DQUNI RV9JTlZBTElEQVRFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklURTsKPiArCQlm bGFncyB8PSBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWDsKPiArCj4gKwkJY3MgPSBpbnRl bF9yaW5nX2JlZ2luKHJlcXVlc3QsIDYpOwo+ICsJCWlmIChJU19FUlIoY3MpKQo+ICsJCQlyZXR1 cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywg ZmxhZ3MsIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKPiArCQlpbnRlbF9yaW5nX2FkdmFuY2Uo cmVxdWVzdCwgY3MpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dTMyIHByZXBhcnNlcl9kaXNhYmxlKGJvb2wgc3RhdGUpCj4gK3sKPiArCXJldHVybiBNSV9BUkJf Q0hFQ0sgfCAxIDw8IDggfCBzdGF0ZTsKPiArfQo+ICsKPiAraW50IGdlbjEyX2VtaXRfZmx1c2hf cmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKQo+ICt7Cj4gKwlpZiAo bW9kZSAmIEVNSVRfRkxVU0gpIHsKPiArCQl1MzIgZmxhZ3MgPSAwOwo+ICsJCXUzMiAqY3M7Cj4g Kwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9USUxFX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwo+ICsJCWZsYWdzIHw9 IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKPiArCQkvKiBXYV8xNDA5NjAwOTA3OnRn bCAqLwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTDsKPiArCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOwo+ICsJCWZsYWdzIHw9IFBJUEVfQ09OVFJP TF9GTFVTSF9FTkFCTEU7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0hEQ19QSVBFTElORV9G TFVTSDsKPiArCj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7Cj4g KwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+ICsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfQ1NfU1RBTEw7Cj4gKwo+ICsJCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0 LCA2KTsKPiArCQlpZiAoSVNfRVJSKGNzKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsK PiArCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1ND UkFUQ0hfQUREUik7Cj4gKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiArCX0K PiArCj4gKwlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+ICsJCXUzMiBmbGFncyA9IDA7 Cj4gKwkJdTMyICpjczsKPiArCj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTU1BTkRfQ0FD SEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURBVEU7 Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURBVEU7 Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsKPiAr CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRS T0xfTDNfUk9fQ0FDSEVfSU5WQUxJREFURTsKPiArCj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X1NUT1JFX0RBVEFfSU5ERVg7Cj4gKwkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+ ICsKPiArCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gKwo+ICsJCWNzID0gaW50 ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA4KTsKPiArCQlpZiAoSVNfRVJSKGNzKSkKPiArCQkJcmV0 dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCQkvKgo+ICsJCSAqIFByZXZlbnQgdGhlIHByZS1wYXJz ZXIgZnJvbSBza2lwcGluZyBwYXN0IHRoZSBUTEIKPiArCQkgKiBpbnZhbGlkYXRlIGFuZCBsb2Fk aW5nIGEgc3RhbGUgcGFnZSBmb3IgdGhlIGJhdGNoCj4gKwkJICogYnVmZmVyIC8gcmVxdWVzdCBw YXlsb2FkLgo+ICsJCSAqLwo+ICsJCSpjcysrID0gcHJlcGFyc2VyX2Rpc2FibGUodHJ1ZSk7Cj4g Kwo+ICsJCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19QUEhXU1Bf U0NSQVRDSF9BRERSKTsKPiArCj4gKwkJKmNzKysgPSBwcmVwYXJzZXJfZGlzYWJsZShmYWxzZSk7 Cj4gKwkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiArCj4gKwkJLyoKPiArCQkg KiBXYV8xNjA0NTQ0ODg5OnRnbAo+ICsJCSAqLwo+ICsJCWlmIChJU19UR0xfUkVWSUQocmVxdWVz dC0+aTkxNSwgVEdMX1JFVklEX0EwLCBUR0xfUkVWSURfQTApKSB7Cj4gKwkJCWZsYWdzID0gMDsK PiArCQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+ICsJCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfSERDX1BJUEVMSU5FX0ZMVVNIOwo+ICsKPiArCQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1NUT1JFX0RBVEFfSU5ERVg7Cj4gKwkJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19XUklU RTsKPiArCj4gKwkJCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKPiArCQkJaWYg KElTX0VSUihjcykpCj4gKwkJCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJCQljcyA9IGdl bjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLAo+ICsJCQkJCQkgICAgTFJDX1BQSFdTUF9T Q1JBVENIX0FERFIpOwo+ICsJCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwo+ICsJ CX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGdlbjhfZW1pdF9iYl9z dGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkgICAgICAgdTY0IG9mZnNldCwgdTMy IGxlbiwKPiArCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4gKwl1MzIg KmNzOwo+ICsKPiArCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7Cj4gKwlpZiAoSVNfRVJS KGNzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJKmNzKysgPSBNSV9BUkJfT05f T0ZGIHwgTUlfQVJCX0VOQUJMRTsKPiArCj4gKwkqY3MrKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFS VF9HRU44IHwKPiArCQkoZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSA/IDAgOiBCSVQoOCkp Owo+ICsJKmNzKysgPSBsb3dlcl8zMl9iaXRzKG9mZnNldCk7Cj4gKwkqY3MrKyA9IHVwcGVyXzMy X2JpdHMob2Zmc2V0KTsKPiArCj4gKwkqY3MrKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElT QUJMRTsKPiArCSpjcysrID0gTUlfTk9PUDsKPiArCj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocnEs IGNzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGdlbjhfZW1pdF9iYl9zdGFy dF9ub2FyYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCQkJICAgICB1NjQgb2Zmc2V0LCB1 MzIgbGVuLAo+ICsJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKPiArewo+ICsJdTMy ICpjczsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+ICsJaWYgKElTX0VS UihjcykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ICsKPiArCS8qCj4gKwkgKiBXYURpc2Fi bGVDdHhSZXN0b3JlQXJiaXRyYXRpb246YmR3LGNodgo+ICsJICoKPiArCSAqIFdlIGRvbid0IG5l ZWQgdG8gcGVyZm9ybSBNSV9BUkJfRU5BQkxFIGFzIG9mdGVuIGFzIHdlIGRvIChpbgo+ICsJICog cGFydGljdWxhciBhbGwgdGhlIGdlbiB0aGF0IGRvIG5vdCBuZWVkIHRoZSB3L2EgYXQgYWxsISks IGlmIHdlCj4gKwkgKiB0b29rIGNhcmUgdG8gbWFrZSBzdXJlIHRoYXQgb24gZXZlcnkgc3dpdGNo IGludG8gdGhpcyBjb250ZXh0Cj4gKwkgKiAoYm90aCBvcmRpbmFyeSBhbmQgZm9yIHByZWVtcHRp b24pIHRoYXQgYXJiaXRyYXJ0aW9uIHdhcyBlbmFibGVkCj4gKwkgKiB3ZSB3b3VsZCBiZSBmaW5l LiAgSG93ZXZlciwgZm9yIGdlbjggdGhlcmUgaXMgYW5vdGhlciB3L2EgdGhhdAo+ICsJICogcmVx dWlyZXMgdXMgdG8gbm90IHByZWVtcHQgaW5zaWRlIEdQR1BVIGV4ZWN1dGlvbiwgc28gd2Uga2Vl cAo+ICsJICogYXJiaXRyYXRpb24gZGlzYWJsZWQgZm9yIGdlbjggYmF0Y2hlcy4gQXJiaXRyYXRp b24gd2lsbCBiZQo+ICsJICogcmUtZW5hYmxlZCBiZWZvcmUgd2UgY2xvc2UgdGhlIHJlcXVlc3QK PiArCSAqIChlbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iKS4KPiArCSAqLwo+ICsJKmNzKysg PSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7Cj4gKwo+ICsJLyogRklYTUUoQkRXKyk6 IEFkZHJlc3Mgc3BhY2UgYW5kIHNlY3VyaXR5IHNlbGVjdG9ycy4gKi8KPiArCSpjcysrID0gTUlf QkFUQ0hfQlVGRkVSX1NUQVJUX0dFTjggfAo+ICsJCShmbGFncyAmIEk5MTVfRElTUEFUQ0hfU0VD VVJFID8gMCA6IEJJVCg4KSk7Cj4gKwkqY3MrKyA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0KTsKPiAr CSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOwo+ICsKPiArCWludGVsX3JpbmdfYWR2YW5j ZShycSwgY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2dlbjhfZW5naW5lX2NzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9nZW44X2VuZ2luZV9jcy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLmViY2E0M2E1ZTMzYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9nZW44X2VuZ2luZV9jcy5oCj4gQEAgLTAsMCArMSwyNyBAQAo+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE0 IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX0dFTjhfRU5HSU5FX0NT X0hfXwo+ICsjZGVmaW5lIF9fR0VOOF9FTkdJTkVfQ1NfSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPiArCj4gK3N0cnVjdCBpOTE1X3JlcXVlc3Q7Cj4gKwo+ICtpbnQgZ2VuOF9l bWl0X2ZsdXNoX3hjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgbW9kZSk7Cj4g Kwo+ICtpbnQgZ2VuOF9lbWl0X2ZsdXNoX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 LCB1MzIgbW9kZSk7Cj4gK2ludCBnZW45X2VtaXRfZmx1c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsKPiAraW50IGdlbjExX2VtaXRfZmx1c2hfcmNzKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsKPiAraW50IGdlbjEyX2VtaXRfZmx1 c2hfcmNzKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIHUzMiBtb2RlKTsKPiArCj4gK2lu dCBnZW44X2VtaXRfYmJfc3RhcnQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gKwkJICAgICAg IHU2NCBvZmZzZXQsIHUzMiBsZW4sCj4gKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFn cyk7Cj4gK2ludCBnZW44X2VtaXRfYmJfc3RhcnRfbm9hcmIoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsCj4gKwkJCSAgICAgdTY0IG9mZnNldCwgdTMyIGxlbiwKPiArCQkJICAgICBjb25zdCB1bnNp Z25lZCBpbnQgZmxhZ3MpOwo+ICsKPiArI2VuZGlmIC8qIF9fR0VOOF9FTkdJTkVfQ1NfSF9fICov Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9wb29s LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfcG9vbC5jCj4gaW5kZXgg Mzk3MTg2ODE4MzA1Li42MjU3ZjJiMTdkMzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZW5naW5lX3Bvb2wuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZV9wb29sLmMKPiBAQCAtOSw2ICs5LDcgQEAKPiAgICNpbmNsdWRlICJp OTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImludGVsX2VuZ2luZV9wbS5oIgo+ICAgI2luY2x1ZGUg ImludGVsX2VuZ2luZV9wb29sLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9scmMuaCIKPiAgIAo+ICAg c3RhdGljIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnRvX2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5n aW5lX3Bvb2wgKnBvb2wpCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZV93b3JrYXJvdW5kX2JiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLjI3YjNlZmFiMTEyOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfd29ya2Fyb3VuZF9iYi5jCj4gQEAg LTAsMCArMSwzMzUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiArCj4gKyNp bmNsdWRlICJpOTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9yZWcuaCIKPiArI2luY2x1ZGUg ImludGVsX2VuZ2luZS5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfZ3B1X2NvbW1hbmRzLmgiCj4gKyNp bmNsdWRlICJpbnRlbF9ndC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfbHJjLmgiCj4gKwo+ICsvKgo+ ICsgKiBJbiB0aGlzIFdBIHdlIG5lZWQgdG8gc2V0IEdFTjhfTDNTUUNSRUc0WzIxOjIxXSBhbmQg cmVzZXQgaXQgYWZ0ZXIKPiArICogUElQRV9DT05UUk9MIGluc3RydWN0aW9uLiBUaGlzIGlzIHJl cXVpcmVkIGZvciB0aGUgZmx1c2ggdG8gaGFwcGVuIGNvcnJlY3RseQo+ICsgKiBidXQgdGhlcmUg aXMgYSBzbGlnaHQgY29tcGxpY2F0aW9uIGFzIHRoaXMgaXMgYXBwbGllZCBpbiBXQSBiYXRjaCB3 aGVyZSB0aGUKPiArICogdmFsdWVzIGFyZSBvbmx5IGluaXRpYWxpemVkIG9uY2Ugc28gd2UgY2Fu bm90IHRha2UgcmVnaXN0ZXIgdmFsdWUgYXQgdGhlCj4gKyAqIGJlZ2lubmluZyBhbmQgcmV1c2Ug aXQgZnVydGhlcjsgaGVuY2Ugd2Ugc2F2ZSBpdHMgdmFsdWUgdG8gbWVtb3J5LCB1cGxvYWQgYQo+ ICsgKiBjb25zdGFudCB2YWx1ZSB3aXRoIGJpdDIxIHNldCBhbmQgdGhlbiB3ZSByZXN0b3JlIGl0 IGJhY2sgd2l0aCB0aGUgc2F2ZWQgdmFsdWUuCj4gKyAqIFRvIHNpbXBsaWZ5IHRoZSBXQSwgYSBj b25zdGFudCB2YWx1ZSBpcyBmb3JtZWQgYnkgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUKPiArICog b2YgdGhpcyByZWdpc3Rlci4gVGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGJlY2F1c2Ugd2Ug YXJlIG9ubHkgbW9kaWZ5aW5nCj4gKyAqIGl0IGZvciBhIHNob3J0IHBlcmlvZCBhbmQgdGhpcyBi YXRjaCBpbiBub24tcHJlbXB0aWJsZS4gV2UgY2FuIG9mY291cnNlCj4gKyAqIHVzZSBhZGRpdGlv bmFsIGluc3RydWN0aW9ucyB0aGF0IHJlYWQgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGUgcmVnaXN0 ZXIKPiArICogYXQgdGhhdCB0aW1lIGFuZCBzZXQgb3VyIGJpdCBvZiBpbnRlcmVzdCBidXQgaXQg bWFrZXMgdGhlIFdBIGNvbXBsaWNhdGVkLgo+ICsgKgo+ICsgKiBUaGlzIFdBIGlzIGFsc28gcmVx dWlyZWQgZm9yIEdlbjkgc28gZXh0cmFjdGluZyBhcyBhIGZ1bmN0aW9uIGF2b2lkcwo+ICsgKiBj b2RlIGR1cGxpY2F0aW9uLgo+ICsgKi8KPiArc3RhdGljIHUzMiAqCj4gK2dlbjhfZW1pdF9mbHVz aF9jb2hlcmVudGwzX3dhKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRj aCkKPiArewo+ICsJLyogTkIgbm8gb25lIGVsc2UgaXMgYWxsb3dlZCB0byBzY3JpYmJsZSBvdmVy IHNjcmF0Y2ggKyAyNTYhICovCj4gKwkqYmF0Y2grKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9H RU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwo+ICsJKmJhdGNoKysgPSBpOTE1X21taW9fcmVn X29mZnNldChHRU44X0wzU1FDUkVHNCk7Cj4gKwkqYmF0Y2grKyA9IGludGVsX2d0X3NjcmF0Y2hf b2Zmc2V0KGVuZ2luZS0+Z3QsCj4gKwkJCQkJICAgSU5URUxfR1RfU0NSQVRDSF9GSUVMRF9DT0hF UkVOVEwzX1dBKTsKPiArCSpiYXRjaCsrID0gMDsKPiArCj4gKwkqYmF0Y2grKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NKDEpOwo+ICsJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44 X0wzU1FDUkVHNCk7Cj4gKwkqYmF0Y2grKyA9IDB4NDA0MDAwMDAgfCBHRU44X0xRU0NfRkxVU0hf Q09IRVJFTlRfTElORVM7Cj4gKwo+ICsJYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJh dGNoLAo+ICsJCQkJICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Cj4gKwkJCQkgICAgICAg UElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJMRSwKPiArCQkJCSAgICAgICAwKTsKPiArCj4gKwkq YmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9TUk1fTFJNX0dMT0JBTF9H VFQ7Cj4gKwkqYmF0Y2grKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfTDNTUUNSRUc0KTsK PiArCSpiYXRjaCsrID0gaW50ZWxfZ3Rfc2NyYXRjaF9vZmZzZXQoZW5naW5lLT5ndCwKPiArCQkJ CQkgICBJTlRFTF9HVF9TQ1JBVENIX0ZJRUxEX0NPSEVSRU5UTDNfV0EpOwo+ICsJKmJhdGNoKysg PSAwOwo+ICsKPiArCXJldHVybiBiYXRjaDsKPiArfQo+ICsKPiArLyoKPiArICogVHlwaWNhbGx5 IHdlIG9ubHkgaGF2ZSBvbmUgaW5kaXJlY3RfY3R4IGFuZCBwZXJfY3R4IGJhdGNoIGJ1ZmZlciB3 aGljaCBhcmUKPiArICogaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgc2hhcmVkIGFj cm9zcyBhbGwgY29udGV4dHMgYnV0IHRoaXMgZmllbGQKPiArICogaGVscHMgdXMgdG8gaGF2ZSBt dWx0aXBsZSBiYXRjaGVzIGF0IGRpZmZlcmVudCBvZmZzZXRzIGFuZCBzZWxlY3QgdGhlbSBiYXNl ZAo+ICsgKiBvbiBhIGNyaXRlcmlhLiBBdCB0aGUgbW9tZW50IHRoaXMgYmF0Y2ggYWx3YXlzIHN0 YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UKPiArICogYW5kIGF0IHRoaXMgcG9pbnQg d2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSB3YV9jdHggYmF0Y2ggYnVmZmVycy4KPiArICoKPiArICog VGhlIG51bWJlciBvZiBXQSBhcHBsaWVkIGFyZSBub3Qga25vd24gYXQgdGhlIGJlZ2lubmluZzsg d2UgdXNlIHRoaXMgZmllbGQKPiArICogdG8gcmV0dXJuIHRoZSBubyBvZiBEV09SRFMgd3JpdHRl bi4KPiArICoKPiArICogSXQgaXMgdG8gYmUgbm90ZWQgdGhhdCB0aGlzIGJhdGNoIGRvZXMgbm90 IGNvbnRhaW4gTUlfQkFUQ0hfQlVGRkVSX0VORAo+ICsgKiBzbyBpdCBhZGRzIE5PT1BzIGFzIHBh ZGRpbmcgdG8gbWFrZSBpdCBjYWNoZWxpbmUgYWxpZ25lZC4KPiArICogTUlfQkFUQ0hfQlVGRkVS X0VORCB3aWxsIGJlIGFkZGVkIHRvIHBlcmN0eCBiYXRjaCBhbmQgYm90aCBvZiB0aGVtIHRvZ2V0 aGVyCj4gKyAqIG1ha2VzIGEgY29tcGxldGUgYmF0Y2ggYnVmZmVyLgo+ICsgKi8KPiArc3RhdGlj IHUzMiAqZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyICpiYXRjaCkKPiArewo+ICsJLyogV2FEaXNhYmxlQ3R4UmVzdG9yZUFyYml0cmF0 aW9uOmJkdyxjaHYgKi8KPiArCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNB QkxFOwo+ICsKPiArCS8qIFdhRmx1c2hDb2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRj aDpiZHcgKi8KPiArCWlmIChJU19CUk9BRFdFTEwoZW5naW5lLT5pOTE1KSkKPiArCQliYXRjaCA9 IGdlbjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKGVuZ2luZSwgYmF0Y2gpOwo+ICsKPiArCS8q IFdhQ2xlYXJTbG1TcGFjZUF0Q29udGV4dFN3aXRjaDpiZHcsY2h2ICovCj4gKwkvKiBBY3R1YWwg c2NyYXRjaCBsb2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCj4gKwliYXRjaCA9IGdl bjhfZW1pdF9waXBlX2NvbnRyb2woYmF0Y2gsCj4gKwkJCQkgICAgICAgUElQRV9DT05UUk9MX0ZM VVNIX0wzIHwKPiArCQkJCSAgICAgICBQSVBFX0NPTlRST0xfU1RPUkVfREFUQV9JTkRFWCB8Cj4g KwkJCQkgICAgICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKPiArCQkJCSAgICAgICBQSVBFX0NP TlRST0xfUVdfV1JJVEUsCj4gKwkJCQkgICAgICAgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwo+ ICsKPiArCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFCTEU7Cj4gKwo+ICsJ LyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KPiArCXdoaWxlICgodW5zaWduZWQgbG9uZyli YXRjaCAlIENBQ0hFTElORV9CWVRFUykKPiArCQkqYmF0Y2grKyA9IE1JX05PT1A7Cj4gKwo+ICsJ LyoKPiArCSAqIE1JX0JBVENIX0JVRkZFUl9FTkQgaXMgbm90IHJlcXVpcmVkIGluIEluZGlyZWN0 IGN0eCBCQiBiZWNhdXNlCj4gKwkgKiBleGVjdXRpb24gZGVwZW5kcyBvbiB0aGUgbGVuZ3RoIHNw ZWNpZmllZCBpbiB0ZXJtcyBvZiBjYWNoZSBsaW5lcwo+ICsJICogaW4gdGhlIHJlZ2lzdGVyIENU WF9SQ1NfSU5ESVJFQ1RfQ1RYCj4gKwkgKi8KPiArCj4gKwlyZXR1cm4gYmF0Y2g7Cj4gK30KPiAr Cj4gK3N0cnVjdCBscmkgewo+ICsJaTkxNV9yZWdfdCByZWc7Cj4gKwl1MzIgdmFsdWU7Cj4gK307 Cj4gKwo+ICtzdGF0aWMgdTMyICplbWl0X2xyaSh1MzIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgbHJp ICpscmksIHVuc2lnbmVkIGludCBjb3VudCkKPiArewo+ICsJR0VNX0JVR19PTighY291bnQgfHwg Y291bnQgPiA2Myk7Cj4gKwo+ICsJKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3Vu dCk7Cj4gKwlkbyB7Cj4gKwkJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChscmktPnJl Zyk7Cj4gKwkJKmJhdGNoKysgPSBscmktPnZhbHVlOwo+ICsJfSB3aGlsZSAobHJpKyssIC0tY291 bnQpOwo+ICsJKmJhdGNoKysgPSBNSV9OT09QOwo+ICsKPiArCXJldHVybiBiYXRjaDsKPiArfQo+ ICsKPiArc3RhdGljIHUzMiAqZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVj dCBscmkgbHJpW10gPSB7Cj4gKwkJLyogV2FEaXNhYmxlR2F0aGVyQXRTZXRTaGFkZXJDb21tb25T bGljZTpza2wsYnh0LGtibCxnbGsgKi8KPiArCQl7Cj4gKwkJCUNPTU1PTl9TTElDRV9DSElDS0VO MiwKPiArCQkJX19NQVNLRURfRklFTEQoR0VOOV9ESVNBQkxFX0dBVEhFUl9BVF9TRVRfU0hBREVS X0NPTU1PTl9TTElDRSwKPiArCQkJCSAgICAgICAwKSwKPiArCQl9LAo+ICsKPiArCQkvKiBCU3Bl YzogMTEzOTEgKi8KPiArCQl7Cj4gKwkJCUZGX1NMSUNFX0NISUNLRU4sCj4gKwkJCV9fTUFTS0VE X0ZJRUxEKEZGX1NMSUNFX0NISUNLRU5fQ0xfUFJPVk9LSU5HX1ZFUlRFWF9GSVgsCj4gKwkJCQkg ICAgICAgRkZfU0xJQ0VfQ0hJQ0tFTl9DTF9QUk9WT0tJTkdfVkVSVEVYX0ZJWCksCj4gKwkJfSwK PiArCj4gKwkJLyogQlNwZWM6IDExMjk5ICovCj4gKwkJewo+ICsJCQlfM0RfQ0hJQ0tFTjMsCj4g KwkJCV9fTUFTS0VEX0ZJRUxEKF8zRF9DSElDS0VOX1NGX1BST1ZPS0lOR19WRVJURVhfRklYLAo+ ICsJCQkJICAgICAgIF8zRF9DSElDS0VOX1NGX1BST1ZPS0lOR19WRVJURVhfRklYKSwKPiArCQl9 Cj4gKwl9Owo+ICsKPiArCSpiYXRjaCsrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9ESVNBQkxF Owo+ICsKPiArCS8qIFdhRmx1c2hDb2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRjaDpz a2wsYnh0LGdsayAqLwo+ICsJYmF0Y2ggPSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShl bmdpbmUsIGJhdGNoKTsKPiArCj4gKwkvKiBXYUNsZWFyU2xtU3BhY2VBdENvbnRleHRTd2l0Y2g6 c2tsLGJ4dCxrYmwsZ2xrLGNmbCAqLwo+ICsJYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9s KGJhdGNoLAo+ICsJCQkJICAgICAgIFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Cj4gKwkJCQkgICAg ICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVggfAo+ICsJCQkJICAgICAgIFBJUEVfQ09O VFJPTF9DU19TVEFMTCB8Cj4gKwkJCQkgICAgICAgUElQRV9DT05UUk9MX1FXX1dSSVRFLAo+ICsJ CQkJICAgICAgIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKPiArCj4gKwliYXRjaCA9IGVtaXRf bHJpKGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJpKSk7Cj4gKwo+ICsJLyogV2FNZWRpYVBvb2xT dGF0ZUNtZEluV0FCQjpieHQsZ2xrICovCj4gKwlpZiAoSEFTX1BPT0xFRF9FVShlbmdpbmUtPmk5 MTUpKSB7Cj4gKwkJLyoKPiArCQkgKiBFVSBwb29sIGNvbmZpZ3VyYXRpb24gaXMgc2V0dXAgYWxv bmcgd2l0aCBnb2xkZW4gY29udGV4dAo+ICsJCSAqIGR1cmluZyBjb250ZXh0IGluaXRpYWxpemF0 aW9uLiBUaGlzIHZhbHVlIGRlcGVuZHMgb24KPiArCQkgKiBkZXZpY2UgdHlwZSAoMng2IG9yIDN4 NikgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYmFzZWQKPiArCQkgKiBvbiB3aGljaCBzdWJzbGlj ZSBpcyBkaXNhYmxlZCBlc3BlY2lhbGx5IGZvciAyeDYKPiArCQkgKiBkZXZpY2VzLCBob3dldmVy IGl0IGlzIHNhZmUgdG8gbG9hZCBkZWZhdWx0Cj4gKwkJICogY29uZmlndXJhdGlvbiBvZiAzeDYg ZGV2aWNlIGluc3RlYWQgb2YgbWFza2luZyBvZmYKPiArCQkgKiBjb3JyZXNwb25kaW5nIGJpdHMg YmVjYXVzZSBIVyBpZ25vcmVzIGJpdHMgb2YgYSBkaXNhYmxlZAo+ICsJCSAqIHN1YnNsaWNlIGFu ZCBkcm9wcyBkb3duIHRvIGFwcHJvcHJpYXRlIGNvbmZpZy4gUGxlYXNlCj4gKwkJICogc2VlIHJl bmRlcl9zdGF0ZV9zZXR1cCgpIGluIGk5MTVfZ2VtX3JlbmRlcl9zdGF0ZS5jIGZvcgo+ICsJCSAq IHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLCB0byBhdm9pZCBkdXBsaWNhdGlvbiB0aGV5IGFyZQo+ ICsJCSAqIG5vdCBzaG93biBoZXJlIGFnYWluLgo+ICsJCSAqLwo+ICsJCSpiYXRjaCsrID0gR0VO OV9NRURJQV9QT09MX1NUQVRFOwo+ICsJCSpiYXRjaCsrID0gR0VOOV9NRURJQV9QT09MX0VOQUJM RTsKPiArCQkqYmF0Y2grKyA9IDB4MDA3NzcwMDA7Cj4gKwkJKmJhdGNoKysgPSAwOwo+ICsJCSpi YXRjaCsrID0gMDsKPiArCQkqYmF0Y2grKyA9IDA7Cj4gKwl9Cj4gKwo+ICsJKmJhdGNoKysgPSBN SV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKPiArCj4gKwkvKiBQYWQgdG8gZW5kIG9mIGNh Y2hlbGluZSAqLwo+ICsJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWJhdGNoICUgQ0FDSEVMSU5FX0JZ VEVTKQo+ICsJCSpiYXRjaCsrID0gTUlfTk9PUDsKPiArCj4gKwlyZXR1cm4gYmF0Y2g7Cj4gK30K PiArCj4gK3N0YXRpYyB1MzIgKgo+ICtnZW4xMF9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKPiArewo+ICsJaW50IGk7Cj4gKwo+ ICsJLyoKPiArCSAqIFdhUGlwZUNvbnRyb2xCZWZvcmUzRFN0YXRlU2FtcGxlUGF0dGVybjogY25s Cj4gKwkgKgo+ICsJICogRW5zdXJlIHRoZSBlbmdpbmUgaXMgaWRsZSBwcmlvciB0byBwcm9ncmFt bWluZyBhCj4gKwkgKiAzRFNUQVRFX1NBTVBMRV9QQVRURVJOIGR1cmluZyBhIGNvbnRleHQgcmVz dG9yZS4KPiArCSAqLwo+ICsJYmF0Y2ggPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGJhdGNoLAo+ ICsJCQkJICAgICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCwKPiArCQkJCSAgICAgICAwKTsKPiAr CS8qCj4gKwkgKiBXYVBpcGVDb250cm9sQmVmb3JlM0RTdGF0ZVNhbXBsZVBhdHRlcm4gc2F5cyB3 ZSBuZWVkIDQgZHdvcmRzIGZvcgo+ICsJICogdGhlIFBJUEVfQ09OVFJPTCBmb2xsb3dlZCBieSAx MiBkd29yZHMgb2YgMHgwLCBzbyAxNiBkd29yZHMgaW4KPiArCSAqIHRvdGFsLiBIb3dldmVyLCBh IFBJUEVfQ09OVFJPTCBpcyA2IGR3b3JkcyBsb25nLCBub3QgNCwgd2hpY2ggaXMKPiArCSAqIGNv bmZ1c2luZy4gU2luY2UgZ2VuOF9lbWl0X3BpcGVfY29udHJvbCgpIGFscmVhZHkgYWR2YW5jZXMg dGhlCj4gKwkgKiBiYXRjaCBieSA2IGR3b3Jkcywgd2UgYWR2YW5jZSB0aGUgb3RoZXIgMTAgaGVy ZSwgY29tcGxldGluZyBhCj4gKwkgKiBjYWNoZWxpbmUuIEl0J3Mgbm90IGNsZWFyIGlmIHRoZSB3 b3JrYXJvdW5kIHJlcXVpcmVzIHRoaXMgcGFkZGluZwo+ICsJICogYmVmb3JlIG90aGVyIGNvbW1h bmRzLCBvciBpZiBpdCdzIGp1c3QgdGhlIHJlZ3VsYXIgcGFkZGluZyB3ZSB3b3VsZAo+ICsJICog YWxyZWFkeSBoYXZlIGZvciB0aGUgd29ya2Fyb3VuZCBiYiwgc28gbGVhdmUgaXQgaGVyZSBmb3Ig bm93Lgo+ICsJICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKPiArCQkqYmF0Y2grKyA9 IE1JX05PT1A7Cj4gKwo+ICsJLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8KPiArCXdoaWxl ICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykKPiArCQkqYmF0Y2grKyA9 IE1JX05PT1A7Cj4gKwo+ICsJcmV0dXJuIGJhdGNoOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIENUWF9X QV9CQl9PQkpfU0laRSAoUEFHRV9TSVpFKQo+ICsKPiArc3RhdGljIGludCBscmNfc2V0dXBfd2Ff Y3R4KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJaW50IGVy cjsKPiArCj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGVuZ2luZS0+aTkx NSwgQ1RYX1dBX0JCX09CSl9TSVpFKTsKPiArCWlmIChJU19FUlIob2JqKSkKPiArCQlyZXR1cm4g UFRSX0VSUihvYmopOwo+ICsKPiArCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgJmVuZ2lu ZS0+Z3QtPmdndHQtPnZtLCBOVUxMKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCWVyciA9 IFBUUl9FUlIodm1hKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwllcnIgPSBpOTE1X3Zt YV9waW4odm1hLCAwLCAwLCBQSU5fR0xPQkFMIHwgUElOX0hJR0gpOwo+ICsJaWYgKGVycikKPiAr CQlnb3RvIGVycjsKPiArCj4gKwllbmdpbmUtPndhX2N0eC52bWEgPSB2bWE7Cj4gKwlyZXR1cm4g MDsKPiArCj4gK2VycjoKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiArCXJldHVybiBl cnI7Cj4gK30KPiArCj4gK3R5cGVkZWYgdTMyICooKndhX2JiX2Z1bmNfdCkoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKTsKPiArCj4gK2ludCBpbnRlbF9lbmdpbmVf aW5pdF93b3JrYXJvdW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ ICsJc3RydWN0IGk5MTVfY3R4X3dvcmthcm91bmRzICp3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7 Cj4gKwlzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2JiWzJdID0geyAmd2FfY3R4LT5pbmRpcmVj dF9jdHgsCj4gKwkJCQkJICAgICZ3YV9jdHgtPnBlcl9jdHggfTsKPiArCXdhX2JiX2Z1bmNfdCB3 YV9iYl9mblsyXTsKPiArCXN0cnVjdCBwYWdlICpwYWdlOwo+ICsJdm9pZCAqYmF0Y2gsICpiYXRj aF9wdHI7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGVuZ2lu ZS0+Y2xhc3MgIT0gUkVOREVSX0NMQVNTKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXN3aXRjaCAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPiArCWNhc2UgMTI6Cj4gKwljYXNlIDExOgo+ICsJ CXJldHVybiAwOwo+ICsJY2FzZSAxMDoKPiArCQl3YV9iYl9mblswXSA9IGdlbjEwX2luaXRfaW5k aXJlY3RjdHhfYmI7Cj4gKwkJd2FfYmJfZm5bMV0gPSBOVUxMOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSA5Ogo+ICsJCXdhX2JiX2ZuWzBdID0gZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiOwo+ICsJCXdh X2JiX2ZuWzFdID0gTlVMTDsKPiArCQlicmVhazsKPiArCWNhc2UgODoKPiArCQl3YV9iYl9mblsw XSA9IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYjsKPiArCQl3YV9iYl9mblsxXSA9IE5VTEw7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSk7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbHJjX3NldHVwX3dh X2N0eChlbmdpbmUpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERUJVR19EUklWRVIoIkZhaWxl ZCB0byBzZXR1cCBjb250ZXh0IFdBIHBhZ2U6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcGFnZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZGlydHlfcGFnZSh3YV9j dHgtPnZtYS0+b2JqLCAwKTsKPiArCWJhdGNoID0gYmF0Y2hfcHRyID0ga21hcF9hdG9taWMocGFn ZSk7Cj4gKwo+ICsJLyoKPiArCSAqIEVtaXQgdGhlIHR3byB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZl cnMsIHJlY29yZGluZyB0aGUgb2Zmc2V0IGZyb20gdGhlCj4gKwkgKiBzdGFydCBvZiB0aGUgd29y a2Fyb3VuZCBiYXRjaCBidWZmZXIgb2JqZWN0IGZvciBlYWNoIGFuZCB0aGVpcgo+ICsJICogcmVz cGVjdGl2ZSBzaXplcy4KPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Ff YmJfZm4pOyBpKyspIHsKPiArCQl3YV9iYltpXS0+b2Zmc2V0ID0gYmF0Y2hfcHRyIC0gYmF0Y2g7 Cj4gKwkJaWYgKEdFTV9ERUJVR19XQVJOX09OKCFJU19BTElHTkVEKHdhX2JiW2ldLT5vZmZzZXQs Cj4gKwkJCQkJCSAgQ0FDSEVMSU5FX0JZVEVTKSkpIHsKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiAr CQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWlmICh3YV9iYl9mbltpXSkKPiArCQkJYmF0Y2hfcHRyID0g d2FfYmJfZm5baV0oZW5naW5lLCBiYXRjaF9wdHIpOwo+ICsJCXdhX2JiW2ldLT5zaXplID0gYmF0 Y2hfcHRyIC0gKGJhdGNoICsgd2FfYmJbaV0tPm9mZnNldCk7Cj4gKwl9Cj4gKwo+ICsJR0VNX0JV R19PTihiYXRjaF9wdHIgLSBiYXRjaCA+IENUWF9XQV9CQl9PQkpfU0laRSk7Cj4gKwo+ICsJa3Vu bWFwX2F0b21pYyhiYXRjaCk7Cj4gKwlpZiAocmV0KQo+ICsJCWludGVsX2VuZ2luZV9maW5pX3dv cmthcm91bmRfYmIoZW5naW5lKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lk IGludGVsX2VuZ2luZV9maW5pX3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICt7Cj4gKwlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZW5naW5lLT53YV9j dHgudm1hLCAwKTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb24uYwo+IGluZGV4IGFhNjc1NjFmZWU1My4uYTJhYTZjNWNm YmI4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2V4ZWNsaXN0 c19zdWJtaXNzaW9uLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9leGVj bGlzdHNfc3VibWlzc2lvbi5jCj4gQEAgLTEsMTQ3ICsxLDE5IEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBNSVQKPiAgIC8qCj4gICAgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+IC0gKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAtICoKPiAtICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gLSAqIFNvZnR3YXJlLgo+IC0gKgo+IC0gKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAtICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gLSAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiAtICogSU4gVEhFIFNPRlRXQVJFLgo+IC0gKgo+IC0gKiBBdXRob3Jz Ogo+IC0gKiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gLSAqICAgIE1pY2hl bCBUaGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Cj4gLSAqICAgIFRob21hcyBEYW5p ZWwgPHRob21hcy5kYW5pZWxAaW50ZWwuY29tPgo+IC0gKiAgICBPc2NhciBNYXRlbyA8b3NjYXIu bWF0ZW9AaW50ZWwuY29tPgo+IC0gKgo+ICAgICovCj4gICAKPiAtLyoqCj4gLSAqIERPQzogTG9n aWNhbCBSaW5ncywgTG9naWNhbCBSaW5nIENvbnRleHRzIGFuZCBFeGVjbGlzdHMKPiAtICoKPiAt ICogTW90aXZhdGlvbjoKPiAtICogR0VOOCBicmluZ3MgYW4gZXhwYW5zaW9uIG9mIHRoZSBIVyBj b250ZXh0czogIkxvZ2ljYWwgUmluZyBDb250ZXh0cyIuCj4gLSAqIFRoZXNlIGV4cGFuZGVkIGNv bnRleHRzIGVuYWJsZSBhIG51bWJlciBvZiBuZXcgYWJpbGl0aWVzLCBlc3BlY2lhbGx5Cj4gLSAq ICJFeGVjbGlzdHMiIChhbHNvIGltcGxlbWVudGVkIGluIHRoaXMgZmlsZSkuCj4gLSAqCj4gLSAq IE9uZSBvZiB0aGUgbWFpbiBkaWZmZXJlbmNlcyB3aXRoIHRoZSBsZWdhY3kgSFcgY29udGV4dHMg aXMgdGhhdCBsb2dpY2FsCj4gLSAqIHJpbmcgY29udGV4dHMgaW5jb3Jwb3JhdGUgbWFueSBtb3Jl IHRoaW5ncyB0byB0aGUgY29udGV4dCdzIHN0YXRlLCBsaWtlCj4gLSAqIFBEUHMgb3IgcmluZ2J1 ZmZlciBjb250cm9sIHJlZ2lzdGVyczoKPiAtICoKPiAtICogVGhlIHJlYXNvbiB3aHkgUERQcyBh cmUgaW5jbHVkZWQgaW4gdGhlIGNvbnRleHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBhcwo+IC0gKiBQ UEdUVHMgKHBlci1wcm9jZXNzIEdUVHMpIGFyZSBhY3R1YWxseSBwZXItY29udGV4dCwgaGF2aW5n IHRoZSBQRFBzCj4gLSAqIGNvbnRhaW5lZCB0aGVyZSBtZWFuIHlvdSBkb24ndCBuZWVkIHRvIGRv IGEgcHBndHQtPnN3aXRjaF9tbSB5b3Vyc2VsZiwKPiAtICogaW5zdGVhZCwgdGhlIEdQVSB3aWxs IGRvIGl0IGZvciB5b3Ugb24gdGhlIGNvbnRleHQgc3dpdGNoLgo+IC0gKgo+IC0gKiBCdXQsIHdo YXQgYWJvdXQgdGhlIHJpbmdidWZmZXIgY29udHJvbCByZWdpc3RlcnMgKGhlYWQsIHRhaWwsIGV0 Yy4uKT8KPiAtICogc2hvdWxkbid0IHdlIGp1c3QgbmVlZCBhIHNldCBvZiB0aG9zZSBwZXIgZW5n aW5lIGNvbW1hbmQgc3RyZWFtZXI/IFRoaXMgaXMKPiAtICogd2hlcmUgdGhlIG5hbWUgIkxvZ2lj YWwgUmluZ3MiIHN0YXJ0cyB0byBtYWtlIHNlbnNlOiBieSB2aXJ0dWFsaXppbmcgdGhlCj4gLSAq IHJpbmdzLCB0aGUgZW5naW5lIGNzIHNoaWZ0cyB0byBhIG5ldyAicmluZyBidWZmZXIiIHdpdGgg ZXZlcnkgY29udGV4dAo+IC0gKiBzd2l0Y2guIFdoZW4geW91IHdhbnQgdG8gc3VibWl0IGEgd29y a2xvYWQgdG8gdGhlIEdQVSB5b3U6IEEpIGNob29zZSB5b3VyCj4gLSAqIGNvbnRleHQsIEIpIGZp bmQgaXRzIGFwcHJvcHJpYXRlIHZpcnR1YWxpemVkIHJpbmcsIEMpIHdyaXRlIGNvbW1hbmRzIHRv IGl0Cj4gLSAqIGFuZCB0aGVuLCBmaW5hbGx5LCBEKSB0ZWxsIHRoZSBHUFUgdG8gc3dpdGNoIHRv IHRoYXQgY29udGV4dC4KPiAtICoKPiAtICogSW5zdGVhZCBvZiB0aGUgbGVnYWN5IE1JX1NFVF9D T05URVhULCB0aGUgd2F5IHlvdSB0ZWxsIHRoZSBHUFUgdG8gc3dpdGNoCj4gLSAqIHRvIGEgY29u dGV4dHMgaXMgdmlhIGEgY29udGV4dCBleGVjdXRpb24gbGlzdCwgZXJnbyAiRXhlY2xpc3RzIi4K PiAtICoKPiAtICogTFJDIGltcGxlbWVudGF0aW9uOgo+IC0gKiBSZWdhcmRpbmcgdGhlIGNyZWF0 aW9uIG9mIGNvbnRleHRzLCB3ZSBoYXZlOgo+IC0gKgo+IC0gKiAtIE9uZSBnbG9iYWwgZGVmYXVs dCBjb250ZXh0Lgo+IC0gKiAtIE9uZSBsb2NhbCBkZWZhdWx0IGNvbnRleHQgZm9yIGVhY2ggb3Bl bmVkIGZkLgo+IC0gKiAtIE9uZSBsb2NhbCBleHRyYSBjb250ZXh0IGZvciBlYWNoIGNvbnRleHQg Y3JlYXRlIGlvY3RsIGNhbGwuCj4gLSAqCj4gLSAqIE5vdyB0aGF0IHJpbmdidWZmZXJzIGJlbG9u ZyBwZXItY29udGV4dCAoYW5kIG5vdCBwZXItZW5naW5lLCBsaWtlIGJlZm9yZSkKPiAtICogYW5k IHRoYXQgY29udGV4dHMgYXJlIHVuaXF1ZWx5IHRpZWQgdG8gYSBnaXZlbiBlbmdpbmUgKGFuZCBu b3QgcmV1c2FibGUsCj4gLSAqIGxpa2UgYmVmb3JlKSB3ZSBuZWVkOgo+IC0gKgo+IC0gKiAtIE9u ZSByaW5nYnVmZmVyIHBlci1lbmdpbmUgaW5zaWRlIGVhY2ggY29udGV4dC4KPiAtICogLSBPbmUg YmFja2luZyBvYmplY3QgcGVyLWVuZ2luZSBpbnNpZGUgZWFjaCBjb250ZXh0Lgo+IC0gKgo+IC0g KiBUaGUgZ2xvYmFsIGRlZmF1bHQgY29udGV4dCBzdGFydHMgaXRzIGxpZmUgd2l0aCB0aGVzZSBu ZXcgb2JqZWN0cyBmdWxseQo+IC0gKiBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZC4gVGhlIGxvY2Fs IGRlZmF1bHQgY29udGV4dCBmb3IgZWFjaCBvcGVuZWQgZmQgaXMKPiAtICogbW9yZSBjb21wbGV4 LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgYXQgY3JlYXRpb24gdGltZSB3aGljaCBlbmdpbmUgaXMg Z29pbmcKPiAtICogdG8gdXNlIHRoZW0uIFRvIGhhbmRsZSB0aGlzLCB3ZSBoYXZlIGltcGxlbWVu dGVkIGEgZGVmZXJyZWQgY3JlYXRpb24gb2YgTFIKPiAtICogY29udGV4dHM6Cj4gLSAqCj4gLSAq IFRoZSBsb2NhbCBjb250ZXh0IHN0YXJ0cyBpdHMgbGlmZSBhcyBhIGhvbGxvdyBvciBibGFuayBo b2xkZXIsIHRoYXQgb25seQo+IC0gKiBnZXRzIHBvcHVsYXRlZCBmb3IgYSBnaXZlbiBlbmdpbmUg b25jZSB3ZSByZWNlaXZlIGFuIGV4ZWNidWZmZXIuIElmIGxhdGVyCj4gLSAqIG9uIHdlIHJlY2Vp dmUgYW5vdGhlciBleGVjYnVmZmVyIGlvY3RsIGZvciB0aGUgc2FtZSBjb250ZXh0IGJ1dCBhIGRp ZmZlcmVudAo+IC0gKiBlbmdpbmUsIHdlIGFsbG9jYXRlL3BvcHVsYXRlIGEgbmV3IHJpbmdidWZm ZXIgYW5kIGNvbnRleHQgYmFja2luZyBvYmplY3QgYW5kCj4gLSAqIHNvIG9uLgo+IC0gKgo+IC0g KiBGaW5hbGx5LCByZWdhcmRpbmcgbG9jYWwgY29udGV4dHMgY3JlYXRlZCB1c2luZyB0aGUgaW9j dGwgY2FsbDogYXMgdGhleSBhcmUKPiAtICogb25seSBhbGxvd2VkIHdpdGggdGhlIHJlbmRlciBy aW5nLCB3ZSBjYW4gYWxsb2NhdGUgJiBwb3B1bGF0ZSB0aGVtIHJpZ2h0Cj4gLSAqIGF3YXkgKG5v IG5lZWQgdG8gZGVmZXIgYW55dGhpbmcsIGF0IGxlYXN0IGZvciBub3cpLgo+IC0gKgo+IC0gKiBF eGVjbGlzdHMgaW1wbGVtZW50YXRpb246Cj4gLSAqIEV4ZWNsaXN0cyBhcmUgdGhlIG5ldyBtZXRo b2QgYnkgd2hpY2gsIG9uIGdlbjgrIGhhcmR3YXJlLCB3b3JrbG9hZHMgYXJlCj4gLSAqIHN1Ym1p dHRlZCBmb3IgZXhlY3V0aW9uIChhcyBvcHBvc2VkIHRvIHRoZSBsZWdhY3ksIHJpbmdidWZmZXIt YmFzZWQsIG1ldGhvZCkuCj4gLSAqIFRoaXMgbWV0aG9kIHdvcmtzIGFzIGZvbGxvd3M6Cj4gLSAq Cj4gLSAqIFdoZW4gYSByZXF1ZXN0IGlzIGNvbW1pdHRlZCwgaXRzIGNvbW1hbmRzICh0aGUgQkIg c3RhcnQgYW5kIGFueSBsZWFkaW5nIG9yCj4gLSAqIHRyYWlsaW5nIGNvbW1hbmRzLCBsaWtlIHRo ZSBzZXFubyBicmVhZGNydW1icykgYXJlIHBsYWNlZCBpbiB0aGUgcmluZ2J1ZmZlcgo+IC0gKiBm b3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuIFRoZSB0YWlsIHBvaW50ZXIgaW4gdGhlIGhhcmR3 YXJlIGNvbnRleHQgaXMgbm90Cj4gLSAqIHVwZGF0ZWQgYXQgdGhpcyB0aW1lLCBidXQgaW5zdGVh ZCwga2VwdCBieSB0aGUgZHJpdmVyIGluIHRoZSByaW5nYnVmZmVyCj4gLSAqIHN0cnVjdHVyZS4g QSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoaXMgcmVxdWVzdCBpcyBhZGRlZCB0byBhIHJlcXVl c3QgcXVldWUKPiAtICogZm9yIHRoZSBhcHByb3ByaWF0ZSBlbmdpbmU6IHRoaXMgc3RydWN0dXJl IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgY29udGV4dCdzCj4gLSAqIHRhaWwgYWZ0ZXIgdGhlIHJl cXVlc3Qgd2FzIHdyaXR0ZW4gdG8gdGhlIHJpbmcgYnVmZmVyIGFuZCBhIHBvaW50ZXIgdG8gdGhl Cj4gLSAqIGNvbnRleHQgaXRzZWxmLgo+IC0gKgo+IC0gKiBJZiB0aGUgZW5naW5lJ3MgcmVxdWVz dCBxdWV1ZSB3YXMgZW1wdHkgYmVmb3JlIHRoZSByZXF1ZXN0IHdhcyBhZGRlZCwgdGhlCj4gLSAq IHF1ZXVlIGlzIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxs IGJlIHByb2Nlc3NlZCBkdXJpbmcKPiAtICogYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQuIElu IGFueSBjYXNlLCBlbGVtZW50cyBvbiB0aGUgcXVldWUgd2lsbCBnZXQgc2VudAo+IC0gKiAoaW4g cGFpcnMpIHRvIHRoZSBHUFUncyBFeGVjTGlzdHMgU3VibWl0IFBvcnQgKEVMU1AsIGZvciBzaG9y dCkgd2l0aCBhCj4gLSAqIGdsb2JhbGx5IHVuaXF1ZSAyMC1iaXRzIHN1Ym1pc3Npb24gSUQuCj4g LSAqCj4gLSAqIFdoZW4gZXhlY3V0aW9uIG9mIGEgcmVxdWVzdCBjb21wbGV0ZXMsIHRoZSBHUFUg dXBkYXRlcyB0aGUgY29udGV4dCBzdGF0dXMKPiAtICogYnVmZmVyIHdpdGggYSBjb250ZXh0IGNv bXBsZXRlIGV2ZW50IGFuZCBnZW5lcmF0ZXMgYSBjb250ZXh0IHN3aXRjaCBpbnRlcnJ1cHQuCj4g LSAqIER1cmluZyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCB0aGUgZHJpdmVyIGV4YW1pbmVzIHRo ZSBldmVudHMgaW4gdGhlIGJ1ZmZlcjoKPiAtICogZm9yIGVhY2ggY29udGV4dCBjb21wbGV0ZSBl dmVudCwgaWYgdGhlIGFubm91bmNlZCBJRCBtYXRjaGVzIHRoYXQgb24gdGhlIGhlYWQKPiAtICog b2YgdGhlIHJlcXVlc3QgcXVldWUsIHRoZW4gdGhhdCByZXF1ZXN0IGlzIHJldGlyZWQgYW5kIHJl bW92ZWQgZnJvbSB0aGUgcXVldWUuCj4gLSAqCj4gLSAqIEFmdGVyIHByb2Nlc3NpbmcsIGlmIGFu eSByZXF1ZXN0cyB3ZXJlIHJldGlyZWQgYW5kIHRoZSBxdWV1ZSBpcyBub3QgZW1wdHkKPiAtICog dGhlbiBhIG5ldyBleGVjdXRpb24gbGlzdCBjYW4gYmUgc3VibWl0dGVkLiBUaGUgdHdvIHJlcXVl c3RzIGF0IHRoZSBmcm9udCBvZgo+IC0gKiB0aGUgcXVldWUgYXJlIG5leHQgdG8gYmUgc3VibWl0 dGVkIGJ1dCBzaW5jZSBhIGNvbnRleHQgbWF5IG5vdCBvY2N1ciB0d2ljZSBpbgo+IC0gKiBhbiBl eGVjdXRpb24gbGlzdCwgaWYgc3Vic2VxdWVudCByZXF1ZXN0cyBoYXZlIHRoZSBzYW1lIElEIGFz IHRoZSBmaXJzdCB0aGVuCj4gLSAqIHRoZSB0d28gcmVxdWVzdHMgbXVzdCBiZSBjb21iaW5lZC4g VGhpcyBpcyBkb25lIHNpbXBseSBieSBkaXNjYXJkaW5nIHJlcXVlc3RzCj4gLSAqIGF0IHRoZSBo ZWFkIG9mIHRoZSBxdWV1ZSB1bnRpbCBlaXRoZXIgb25seSBvbmUgcmVxdWVzdHMgaXMgbGVmdCAo aW4gd2hpY2ggY2FzZQo+IC0gKiB3ZSB1c2UgYSBOVUxMIHNlY29uZCBjb250ZXh0KSBvciB0aGUg Zmlyc3QgdHdvIHJlcXVlc3RzIGhhdmUgdW5pcXVlIElEcy4KPiAtICoKPiAtICogQnkgYWx3YXlz IGV4ZWN1dGluZyB0aGUgZmlyc3QgdHdvIHJlcXVlc3RzIGluIHRoZSBxdWV1ZSB0aGUgZHJpdmVy IGVuc3VyZXMKPiAtICogdGhhdCB0aGUgR1BVIGlzIGtlcHQgYXMgYnVzeSBhcyBwb3NzaWJsZS4g SW4gdGhlIGNhc2Ugd2hlcmUgYSBzaW5nbGUgY29udGV4dAo+IC0gKiBjb21wbGV0ZXMgYnV0IGEg c2Vjb25kIGNvbnRleHQgaXMgc3RpbGwgZXhlY3V0aW5nLCB0aGUgcmVxdWVzdCBmb3IgdGhpcyBz ZWNvbmQKPiAtICogY29udGV4dCB3aWxsIGJlIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVu IHdlIHJlbW92ZSB0aGUgZmlyc3Qgb25lLiBUaGlzCj4gLSAqIHJlcXVlc3Qgd2lsbCB0aGVuIGJl IHJlc3VibWl0dGVkIGFsb25nIHdpdGggYSBuZXcgcmVxdWVzdCBmb3IgYSBkaWZmZXJlbnQgY29u dGV4dCwKPiAtICogd2hpY2ggd2lsbCBjYXVzZSB0aGUgaGFyZHdhcmUgdG8gY29udGludWUgZXhl Y3V0aW5nIHRoZSBzZWNvbmQgcmVxdWVzdCBhbmQgcXVldWUKPiAtICogdGhlIG5ldyByZXF1ZXN0 ICh0aGUgR1BVIGRldGVjdHMgdGhlIGNvbmRpdGlvbiBvZiBhIGNvbnRleHQgZ2V0dGluZyBwcmVl bXB0ZWQKPiAtICogd2l0aCB0aGUgc2FtZSBjb250ZXh0IGFuZCBvcHRpbWl6ZXMgdGhlIGNvbnRl eHQgc3dpdGNoIGZsb3cgYnkgbm90IGRvaW5nCj4gLSAqIHByZWVtcHRpb24sIGJ1dCBqdXN0IHNh bXBsaW5nIHRoZSBuZXcgdGFpbCBwb2ludGVyKS4KPiAtICoKPiAtICovCj4gICAjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+Cj4gICAKPiArI2luY2x1ZGUgImdlbjhfZW5naW5lX2NzLmgiCj4g ICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAtI2luY2x1ZGUgImk5MTVfcGVyZi5oIgo+ICAgI2lu Y2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAtI2luY2x1ZGUgImk5MTVfdmdwdS5oIgo+ICAgI2luY2x1 ZGUgImludGVsX2NvbnRleHQuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfcG0uaCIKPiAg ICNpbmNsdWRlICJpbnRlbF9ndC5oIgo+ICAgI2luY2x1ZGUgImludGVsX2d0X3BtLmgiCj4gICAj aW5jbHVkZSAiaW50ZWxfZ3RfcmVxdWVzdHMuaCIKPiArI2luY2x1ZGUgImludGVsX2xyYy5oIgo+ ICAgI2luY2x1ZGUgImludGVsX2xyY19yZWcuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9tb2NzLmgi Cj4gICAjaW5jbHVkZSAiaW50ZWxfcmVzZXQuaCIKPiBAQCAtMjMwLDE1ICsxMDIsNiBAQCBzdGF0 aWMgc3RydWN0IHZpcnR1YWxfZW5naW5lICp0b192aXJ0dWFsX2VuZ2luZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCj4gICBzdGF0aWMgaW50IF9fZXhlY2xpc3RzX2NvbnRleHRfYWxs b2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJCSAgICAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKTsKPiAgIAo+IC1zdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdf c3RhdGUodTMyICpyZWdfc3RhdGUsCj4gLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSwKPiAtCQkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+IC0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywKPiAtCQkJCSAgICAg Ym9vbCBjbG9zZSk7Cj4gLXN0YXRpYyB2b2lkCj4gLV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3Rh dGUoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+IC0JCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gLQo+ICAgc3RhdGljIHZvaWQgbWFya19laW8o c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4gICAJaWYgKGk5MTVfcmVxdWVzdF9jb21w bGV0ZWQocnEpKQo+IEBAIC00MzEsNTI3ICsyOTQsNiBAQCBhc3NlcnRfcHJpb3JpdHlfcXVldWUo Y29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldiwKPiAgIAlyZXR1cm4gcnFfcHJpbyhwcmV2 KSA+PSBycV9wcmlvKG5leHQpOwo+ICAgfQo+ICAgCj4gLS8qCj4gLSAqIFRoZSBjb250ZXh0IGRl c2NyaXB0b3IgZW5jb2RlcyB2YXJpb3VzIGF0dHJpYnV0ZXMgb2YgYSBjb250ZXh0LAo+IC0gKiBp bmNsdWRpbmcgaXRzIEdUVCBhZGRyZXNzIGFuZCBzb21lIGZsYWdzLiBCZWNhdXNlIGl0J3MgZmFp cmx5Cj4gLSAqIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUsIHdlJ2xsIGp1c3QgZG8gaXQgb25jZSBh bmQgY2FjaGUgdGhlIHJlc3VsdCwKPiAtICogd2hpY2ggcmVtYWlucyB2YWxpZCB1bnRpbCB0aGUg Y29udGV4dCBpcyB1bnBpbm5lZC4KPiAtICoKPiAtICogVGhpcyBpcyB3aGF0IGEgZGVzY3JpcHRv ciBsb29rcyBsaWtlLCBmcm9tIExTQiB0byBNU0I6Ogo+IC0gKgo+IC0gKiAgICAgIGJpdHMgIDAt MTE6ICAgIGZsYWdzLCBHRU44X0NUWF8qIChjYWNoZWQgaW4gY3R4LT5kZXNjX3RlbXBsYXRlKQo+ IC0gKiAgICAgIGJpdHMgMTItMzE6ICAgIExSQ0EsIEdUVCBhZGRyZXNzIG9mICh0aGUgSFdTUCBv ZikgdGhpcyBjb250ZXh0Cj4gLSAqICAgICAgYml0cyAzMi01MjogICAgY3R4IElELCBhIGdsb2Jh bGx5IHVuaXF1ZSB0YWcgKGhpZ2hlc3QgYml0IHVzZWQgYnkgR3VDKQo+IC0gKiAgICAgIGJpdHMg NTMtNTQ6ICAgIG1ieiwgcmVzZXJ2ZWQgZm9yIHVzZSBieSBoYXJkd2FyZQo+IC0gKiAgICAgIGJp dHMgNTUtNjM6ICAgIGdyb3VwIElELCBjdXJyZW50bHkgdW51c2VkIGFuZCBzZXQgdG8gMAo+IC0g Kgo+IC0gKiBTdGFydGluZyBmcm9tIEdlbjExLCB0aGUgdXBwZXIgZHdvcmQgb2YgdGhlIGRlc2Ny aXB0b3IgaGFzIGEgbmV3IGZvcm1hdDoKPiAtICoKPiAtICogICAgICBiaXRzIDMyLTM2OiAgICBy ZXNlcnZlZAo+IC0gKiAgICAgIGJpdHMgMzctNDc6ICAgIFNXIGNvbnRleHQgSUQKPiAtICogICAg ICBiaXRzIDQ4OjUzOiAgICBlbmdpbmUgaW5zdGFuY2UKPiAtICogICAgICBiaXQgNTQ6ICAgICAg ICBtYnosIHJlc2VydmVkIGZvciB1c2UgYnkgaGFyZHdhcmUKPiAtICogICAgICBiaXRzIDU1LTYw OiAgICBTVyBjb3VudGVyCj4gLSAqICAgICAgYml0cyA2MS02MzogICAgZW5naW5lIGNsYXNzCj4g LSAqCj4gLSAqIGVuZ2luZSBpbmZvLCBTVyBjb250ZXh0IElEIGFuZCBTVyBjb3VudGVyIG5lZWQg dG8gZm9ybSBhIHVuaXF1ZSBudW1iZXIKPiAtICogKENvbnRleHQgSUQpIHBlciBscmMuCj4gLSAq Lwo+IC1zdGF0aWMgdTY0Cj4gLWxyY19kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQl1NjQgZGVzYzsKPiAt Cj4gLQlkZXNjID0gSU5URUxfTEVHQUNZXzMyQl9DT05URVhUOwo+IC0JaWYgKGk5MTVfdm1faXNf NGx2bChjZS0+dm0pKQo+IC0JCWRlc2MgPSBJTlRFTF9MRUdBQ1lfNjRCX0NPTlRFWFQ7Cj4gLQlk ZXNjIDw8PSBHRU44X0NUWF9BRERSRVNTSU5HX01PREVfU0hJRlQ7Cj4gLQo+IC0JZGVzYyB8PSBH RU44X0NUWF9WQUxJRCB8IEdFTjhfQ1RYX1BSSVZJTEVHRTsKPiAtCWlmIChJU19HRU4oZW5naW5l LT5pOTE1LCA4KSkKPiAtCQlkZXNjIHw9IEdFTjhfQ1RYX0wzTExDX0NPSEVSRU5UOwo+IC0KPiAt CWRlc2MgfD0gaTkxNV9nZ3R0X29mZnNldChjZS0+c3RhdGUpOyAvKiBiaXRzIDEyLTMxICovCj4g LQkvKgo+IC0JICogVGhlIGZvbGxvd2luZyAzMmJpdHMgYXJlIGNvcGllZCBpbnRvIHRoZSBPQSBy ZXBvcnRzIChkd29yZCAyKS4KPiAtCSAqIENvbnNpZGVyIHVwZGF0aW5nIG9hX2dldF9yZW5kZXJf Y3R4X2lkIGluIGk5MTVfcGVyZi5jIHdoZW4gY2hhbmdpbmcKPiAtCSAqIGFueXRoaW5nIGJlbG93 Lgo+IC0JICovCj4gLQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpIHsKPiAtCQlk ZXNjIHw9ICh1NjQpZW5naW5lLT5pbnN0YW5jZSA8PCBHRU4xMV9FTkdJTkVfSU5TVEFOQ0VfU0hJ RlQ7Cj4gLQkJCQkJCQkJLyogYml0cyA0OC01MyAqLwo+IC0KPiAtCQlkZXNjIHw9ICh1NjQpZW5n aW5lLT5jbGFzcyA8PCBHRU4xMV9FTkdJTkVfQ0xBU1NfU0hJRlQ7Cj4gLQkJCQkJCQkJLyogYml0 cyA2MS02MyAqLwo+IC0JfQo+IC0KPiAtCXJldHVybiBkZXNjOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludCBkd29yZF9pbl9wYWdlKHZvaWQgKmFkZHIpCj4gLXsKPiAtCXJl dHVybiBvZmZzZXRfaW5fcGFnZShhZGRyKSAvIHNpemVvZih1MzIpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBzZXRfb2Zmc2V0cyh1MzIgKnJlZ3MsCj4gLQkJCWNvbnN0IHU4ICpkYXRhLAo+IC0J CQljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCWJvb2wgY2xlYXIp Cj4gLSNkZWZpbmUgTk9QKHgpIChCSVQoNykgfCAoeCkpCj4gLSNkZWZpbmUgTFJJKGNvdW50LCBm bGFncykgKChmbGFncykgPDwgNiB8IChjb3VudCkgfCBCVUlMRF9CVUdfT05fWkVSTyhjb3VudCA+ PSBCSVQoNikpKQo+IC0jZGVmaW5lIFBPU1RFRCBCSVQoMCkKPiAtI2RlZmluZSBSRUcoeCkgKCgo eCkgPj4gMikgfCBCVUlMRF9CVUdfT05fWkVSTyh4ID49IDB4MjAwKSkKPiAtI2RlZmluZSBSRUcx Nih4KSBcCj4gLQkoKCh4KSA+PiA5KSB8IEJJVCg3KSB8IEJVSUxEX0JVR19PTl9aRVJPKHggPj0g MHgxMDAwMCkpLCBcCj4gLQkoKCh4KSA+PiAyKSAmIDB4N2YpCj4gLSNkZWZpbmUgRU5EKHgpIDAs ICh4KQo+IC17Cj4gLQljb25zdCB1MzIgYmFzZSA9IGVuZ2luZS0+bW1pb19iYXNlOwo+IC0KPiAt CXdoaWxlICgqZGF0YSkgewo+IC0JCXU4IGNvdW50LCBmbGFnczsKPiAtCj4gLQkJaWYgKCpkYXRh ICYgQklUKDcpKSB7IC8qIHNraXAgKi8KPiAtCQkJY291bnQgPSAqZGF0YSsrICYgfkJJVCg3KTsK PiAtCQkJaWYgKGNsZWFyKQo+IC0JCQkJbWVtc2V0MzIocmVncywgTUlfTk9PUCwgY291bnQpOwo+ IC0JCQlyZWdzICs9IGNvdW50Owo+IC0JCQljb250aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCWNvdW50 ID0gKmRhdGEgJiAweDNmOwo+IC0JCWZsYWdzID0gKmRhdGEgPj4gNjsKPiAtCQlkYXRhKys7Cj4g LQo+IC0JCSpyZWdzID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oY291bnQpOwo+IC0JCWlmIChmbGFn cyAmIFBPU1RFRCkKPiAtCQkJKnJlZ3MgfD0gTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPiAtCQlpZiAo SU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gLQkJCSpyZWdzIHw9IE1JX0xSSV9DU19N TUlPOwo+IC0JCXJlZ3MrKzsKPiAtCj4gLQkJR0VNX0JVR19PTighY291bnQpOwo+IC0JCWRvIHsK PiAtCQkJdTMyIG9mZnNldCA9IDA7Cj4gLQkJCXU4IHY7Cj4gLQo+IC0JCQlkbyB7Cj4gLQkJCQl2 ID0gKmRhdGErKzsKPiAtCQkJCW9mZnNldCA8PD0gNzsKPiAtCQkJCW9mZnNldCB8PSB2ICYgfkJJ VCg3KTsKPiAtCQkJfSB3aGlsZSAodiAmIEJJVCg3KSk7Cj4gLQo+IC0JCQlyZWdzWzBdID0gYmFz ZSArIChvZmZzZXQgPDwgMik7Cj4gLQkJCWlmIChjbGVhcikKPiAtCQkJCXJlZ3NbMV0gPSAwOwo+ IC0JCQlyZWdzICs9IDI7Cj4gLQkJfSB3aGlsZSAoLS1jb3VudCk7Cj4gLQl9Cj4gLQo+IC0JaWYg KGNsZWFyKSB7Cj4gLQkJdTggY291bnQgPSAqKytkYXRhOwo+IC0KPiAtCQkvKiBDbGVhciBwYXN0 IHRoZSB0YWlsIGZvciBIVyBhY2Nlc3MgKi8KPiAtCQlHRU1fQlVHX09OKGR3b3JkX2luX3BhZ2Uo cmVncykgPiBjb3VudCk7Cj4gLQkJbWVtc2V0MzIocmVncywgTUlfTk9PUCwgY291bnQgLSBkd29y ZF9pbl9wYWdlKHJlZ3MpKTsKPiAtCj4gLQkJLyogQ2xvc2UgdGhlIGJhdGNoOyB1c2VkIG1haW5s eSBieSBsaXZlX2xyY19sYXlvdXQoKSAqLwo+IC0JCSpyZWdzID0gTUlfQkFUQ0hfQlVGRkVSX0VO RDsKPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTApCj4gLQkJCSpyZWdzIHw9 IEJJVCgwKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHU4IGdlbjhfeGNzX29mZnNl dHNbXSA9IHsKPiAtCU5PUCgxKSwKPiAtCUxSSSgxMSwgMCksCj4gLQlSRUcxNigweDI0NCksCj4g LQlSRUcoMHgwMzQpLAo+IC0JUkVHKDB4MDMwKSwKPiAtCVJFRygweDAzOCksCj4gLQlSRUcoMHgw M2MpLAo+IC0JUkVHKDB4MTY4KSwKPiAtCVJFRygweDE0MCksCj4gLQlSRUcoMHgxMTApLAo+IC0J UkVHKDB4MTFjKSwKPiAtCVJFRygweDExNCksCj4gLQlSRUcoMHgxMTgpLAo+IC0KPiAtCU5PUCg5 KSwKPiAtCUxSSSg5LCAwKSwKPiAtCVJFRzE2KDB4M2E4KSwKPiAtCVJFRzE2KDB4MjhjKSwKPiAt CVJFRzE2KDB4Mjg4KSwKPiAtCVJFRzE2KDB4Mjg0KSwKPiAtCVJFRzE2KDB4MjgwKSwKPiAtCVJF RzE2KDB4MjdjKSwKPiAtCVJFRzE2KDB4Mjc4KSwKPiAtCVJFRzE2KDB4Mjc0KSwKPiAtCVJFRzE2 KDB4MjcwKSwKPiAtCj4gLQlOT1AoMTMpLAo+IC0JTFJJKDIsIDApLAo+IC0JUkVHMTYoMHgyMDAp LAo+IC0JUkVHKDB4MDI4KSwKPiAtCj4gLQlFTkQoODApCj4gLX07Cj4gLQo+IC1zdGF0aWMgY29u c3QgdTggZ2VuOV94Y3Nfb2Zmc2V0c1tdID0gewo+IC0JTk9QKDEpLAo+IC0JTFJJKDE0LCBQT1NU RUQpLAo+IC0JUkVHMTYoMHgyNDQpLAo+IC0JUkVHKDB4MDM0KSwKPiAtCVJFRygweDAzMCksCj4g LQlSRUcoMHgwMzgpLAo+IC0JUkVHKDB4MDNjKSwKPiAtCVJFRygweDE2OCksCj4gLQlSRUcoMHgx NDApLAo+IC0JUkVHKDB4MTEwKSwKPiAtCVJFRygweDExYyksCj4gLQlSRUcoMHgxMTQpLAo+IC0J UkVHKDB4MTE4KSwKPiAtCVJFRygweDFjMCksCj4gLQlSRUcoMHgxYzQpLAo+IC0JUkVHKDB4MWM4 KSwKPiAtCj4gLQlOT1AoMyksCj4gLQlMUkkoOSwgUE9TVEVEKSwKPiAtCVJFRzE2KDB4M2E4KSwK PiAtCVJFRzE2KDB4MjhjKSwKPiAtCVJFRzE2KDB4Mjg4KSwKPiAtCVJFRzE2KDB4Mjg0KSwKPiAt CVJFRzE2KDB4MjgwKSwKPiAtCVJFRzE2KDB4MjdjKSwKPiAtCVJFRzE2KDB4Mjc4KSwKPiAtCVJF RzE2KDB4Mjc0KSwKPiAtCVJFRzE2KDB4MjcwKSwKPiAtCj4gLQlOT1AoMTMpLAo+IC0JTFJJKDEs IFBPU1RFRCksCj4gLQlSRUcxNigweDIwMCksCj4gLQo+IC0JTk9QKDEzKSwKPiAtCUxSSSg0NCwg UE9TVEVEKSwKPiAtCVJFRygweDAyOCksCj4gLQlSRUcoMHgwOWMpLAo+IC0JUkVHKDB4MGMwKSwK PiAtCVJFRygweDE3OCksCj4gLQlSRUcoMHgxN2MpLAo+IC0JUkVHMTYoMHgzNTgpLAo+IC0JUkVH KDB4MTcwKSwKPiAtCVJFRygweDE1MCksCj4gLQlSRUcoMHgxNTQpLAo+IC0JUkVHKDB4MTU4KSwK PiAtCVJFRzE2KDB4NDFjKSwKPiAtCVJFRzE2KDB4NjAwKSwKPiAtCVJFRzE2KDB4NjA0KSwKPiAt CVJFRzE2KDB4NjA4KSwKPiAtCVJFRzE2KDB4NjBjKSwKPiAtCVJFRzE2KDB4NjEwKSwKPiAtCVJF RzE2KDB4NjE0KSwKPiAtCVJFRzE2KDB4NjE4KSwKPiAtCVJFRzE2KDB4NjFjKSwKPiAtCVJFRzE2 KDB4NjIwKSwKPiAtCVJFRzE2KDB4NjI0KSwKPiAtCVJFRzE2KDB4NjI4KSwKPiAtCVJFRzE2KDB4 NjJjKSwKPiAtCVJFRzE2KDB4NjMwKSwKPiAtCVJFRzE2KDB4NjM0KSwKPiAtCVJFRzE2KDB4NjM4 KSwKPiAtCVJFRzE2KDB4NjNjKSwKPiAtCVJFRzE2KDB4NjQwKSwKPiAtCVJFRzE2KDB4NjQ0KSwK PiAtCVJFRzE2KDB4NjQ4KSwKPiAtCVJFRzE2KDB4NjRjKSwKPiAtCVJFRzE2KDB4NjUwKSwKPiAt CVJFRzE2KDB4NjU0KSwKPiAtCVJFRzE2KDB4NjU4KSwKPiAtCVJFRzE2KDB4NjVjKSwKPiAtCVJF RzE2KDB4NjYwKSwKPiAtCVJFRzE2KDB4NjY0KSwKPiAtCVJFRzE2KDB4NjY4KSwKPiAtCVJFRzE2 KDB4NjZjKSwKPiAtCVJFRzE2KDB4NjcwKSwKPiAtCVJFRzE2KDB4Njc0KSwKPiAtCVJFRzE2KDB4 Njc4KSwKPiAtCVJFRzE2KDB4NjdjKSwKPiAtCVJFRygweDA2OCksCj4gLQo+IC0JRU5EKDE3NikK PiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCB1OCBnZW4xMl94Y3Nfb2Zmc2V0c1tdID0gewo+IC0J Tk9QKDEpLAo+IC0JTFJJKDEzLCBQT1NURUQpLAo+IC0JUkVHMTYoMHgyNDQpLAo+IC0JUkVHKDB4 MDM0KSwKPiAtCVJFRygweDAzMCksCj4gLQlSRUcoMHgwMzgpLAo+IC0JUkVHKDB4MDNjKSwKPiAt CVJFRygweDE2OCksCj4gLQlSRUcoMHgxNDApLAo+IC0JUkVHKDB4MTEwKSwKPiAtCVJFRygweDFj MCksCj4gLQlSRUcoMHgxYzQpLAo+IC0JUkVHKDB4MWM4KSwKPiAtCVJFRygweDE4MCksCj4gLQlS RUcxNigweDJiNCksCj4gLQo+IC0JTk9QKDUpLAo+IC0JTFJJKDksIFBPU1RFRCksCj4gLQlSRUcx NigweDNhOCksCj4gLQlSRUcxNigweDI4YyksCj4gLQlSRUcxNigweDI4OCksCj4gLQlSRUcxNigw eDI4NCksCj4gLQlSRUcxNigweDI4MCksCj4gLQlSRUcxNigweDI3YyksCj4gLQlSRUcxNigweDI3 OCksCj4gLQlSRUcxNigweDI3NCksCj4gLQlSRUcxNigweDI3MCksCj4gLQo+IC0JRU5EKDgwKQo+ IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHU4IGdlbjhfcmNzX29mZnNldHNbXSA9IHsKPiAtCU5P UCgxKSwKPiAtCUxSSSgxNCwgUE9TVEVEKSwKPiAtCVJFRzE2KDB4MjQ0KSwKPiAtCVJFRygweDAz NCksCj4gLQlSRUcoMHgwMzApLAo+IC0JUkVHKDB4MDM4KSwKPiAtCVJFRygweDAzYyksCj4gLQlS RUcoMHgxNjgpLAo+IC0JUkVHKDB4MTQwKSwKPiAtCVJFRygweDExMCksCj4gLQlSRUcoMHgxMWMp LAo+IC0JUkVHKDB4MTE0KSwKPiAtCVJFRygweDExOCksCj4gLQlSRUcoMHgxYzApLAo+IC0JUkVH KDB4MWM0KSwKPiAtCVJFRygweDFjOCksCj4gLQo+IC0JTk9QKDMpLAo+IC0JTFJJKDksIFBPU1RF RCksCj4gLQlSRUcxNigweDNhOCksCj4gLQlSRUcxNigweDI4YyksCj4gLQlSRUcxNigweDI4OCks Cj4gLQlSRUcxNigweDI4NCksCj4gLQlSRUcxNigweDI4MCksCj4gLQlSRUcxNigweDI3YyksCj4g LQlSRUcxNigweDI3OCksCj4gLQlSRUcxNigweDI3NCksCj4gLQlSRUcxNigweDI3MCksCj4gLQo+ IC0JTk9QKDEzKSwKPiAtCUxSSSgxLCAwKSwKPiAtCVJFRygweDBjOCksCj4gLQo+IC0JRU5EKDgw KQo+IC19Owo+IC0KPiAtc3RhdGljIGNvbnN0IHU4IGdlbjlfcmNzX29mZnNldHNbXSA9IHsKPiAt CU5PUCgxKSwKPiAtCUxSSSgxNCwgUE9TVEVEKSwKPiAtCVJFRzE2KDB4MjQ0KSwKPiAtCVJFRygw eDM0KSwKPiAtCVJFRygweDMwKSwKPiAtCVJFRygweDM4KSwKPiAtCVJFRygweDNjKSwKPiAtCVJF RygweDE2OCksCj4gLQlSRUcoMHgxNDApLAo+IC0JUkVHKDB4MTEwKSwKPiAtCVJFRygweDExYyks Cj4gLQlSRUcoMHgxMTQpLAo+IC0JUkVHKDB4MTE4KSwKPiAtCVJFRygweDFjMCksCj4gLQlSRUco MHgxYzQpLAo+IC0JUkVHKDB4MWM4KSwKPiAtCj4gLQlOT1AoMyksCj4gLQlMUkkoOSwgUE9TVEVE KSwKPiAtCVJFRzE2KDB4M2E4KSwKPiAtCVJFRzE2KDB4MjhjKSwKPiAtCVJFRzE2KDB4Mjg4KSwK PiAtCVJFRzE2KDB4Mjg0KSwKPiAtCVJFRzE2KDB4MjgwKSwKPiAtCVJFRzE2KDB4MjdjKSwKPiAt CVJFRzE2KDB4Mjc4KSwKPiAtCVJFRzE2KDB4Mjc0KSwKPiAtCVJFRzE2KDB4MjcwKSwKPiAtCj4g LQlOT1AoMTMpLAo+IC0JTFJJKDEsIDApLAo+IC0JUkVHKDB4YzgpLAo+IC0KPiAtCU5PUCgxMyks Cj4gLQlMUkkoNDQsIFBPU1RFRCksCj4gLQlSRUcoMHgyOCksCj4gLQlSRUcoMHg5YyksCj4gLQlS RUcoMHhjMCksCj4gLQlSRUcoMHgxNzgpLAo+IC0JUkVHKDB4MTdjKSwKPiAtCVJFRzE2KDB4MzU4 KSwKPiAtCVJFRygweDE3MCksCj4gLQlSRUcoMHgxNTApLAo+IC0JUkVHKDB4MTU0KSwKPiAtCVJF RygweDE1OCksCj4gLQlSRUcxNigweDQxYyksCj4gLQlSRUcxNigweDYwMCksCj4gLQlSRUcxNigw eDYwNCksCj4gLQlSRUcxNigweDYwOCksCj4gLQlSRUcxNigweDYwYyksCj4gLQlSRUcxNigweDYx MCksCj4gLQlSRUcxNigweDYxNCksCj4gLQlSRUcxNigweDYxOCksCj4gLQlSRUcxNigweDYxYyks Cj4gLQlSRUcxNigweDYyMCksCj4gLQlSRUcxNigweDYyNCksCj4gLQlSRUcxNigweDYyOCksCj4g LQlSRUcxNigweDYyYyksCj4gLQlSRUcxNigweDYzMCksCj4gLQlSRUcxNigweDYzNCksCj4gLQlS RUcxNigweDYzOCksCj4gLQlSRUcxNigweDYzYyksCj4gLQlSRUcxNigweDY0MCksCj4gLQlSRUcx NigweDY0NCksCj4gLQlSRUcxNigweDY0OCksCj4gLQlSRUcxNigweDY0YyksCj4gLQlSRUcxNigw eDY1MCksCj4gLQlSRUcxNigweDY1NCksCj4gLQlSRUcxNigweDY1OCksCj4gLQlSRUcxNigweDY1 YyksCj4gLQlSRUcxNigweDY2MCksCj4gLQlSRUcxNigweDY2NCksCj4gLQlSRUcxNigweDY2OCks Cj4gLQlSRUcxNigweDY2YyksCj4gLQlSRUcxNigweDY3MCksCj4gLQlSRUcxNigweDY3NCksCj4g LQlSRUcxNigweDY3OCksCj4gLQlSRUcxNigweDY3YyksCj4gLQlSRUcoMHg2OCksCj4gLQo+IC0J RU5EKDE3NikKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCB1OCBnZW4xMV9yY3Nfb2Zmc2V0c1td ID0gewo+IC0JTk9QKDEpLAo+IC0JTFJJKDE1LCBQT1NURUQpLAo+IC0JUkVHMTYoMHgyNDQpLAo+ IC0JUkVHKDB4MDM0KSwKPiAtCVJFRygweDAzMCksCj4gLQlSRUcoMHgwMzgpLAo+IC0JUkVHKDB4 MDNjKSwKPiAtCVJFRygweDE2OCksCj4gLQlSRUcoMHgxNDApLAo+IC0JUkVHKDB4MTEwKSwKPiAt CVJFRygweDExYyksCj4gLQlSRUcoMHgxMTQpLAo+IC0JUkVHKDB4MTE4KSwKPiAtCVJFRygweDFj MCksCj4gLQlSRUcoMHgxYzQpLAo+IC0JUkVHKDB4MWM4KSwKPiAtCVJFRygweDE4MCksCj4gLQo+ IC0JTk9QKDEpLAo+IC0JTFJJKDksIFBPU1RFRCksCj4gLQlSRUcxNigweDNhOCksCj4gLQlSRUcx NigweDI4YyksCj4gLQlSRUcxNigweDI4OCksCj4gLQlSRUcxNigweDI4NCksCj4gLQlSRUcxNigw eDI4MCksCj4gLQlSRUcxNigweDI3YyksCj4gLQlSRUcxNigweDI3OCksCj4gLQlSRUcxNigweDI3 NCksCj4gLQlSRUcxNigweDI3MCksCj4gLQo+IC0JTFJJKDEsIFBPU1RFRCksCj4gLQlSRUcoMHgx YjApLAo+IC0KPiAtCU5PUCgxMCksCj4gLQlMUkkoMSwgMCksCj4gLQlSRUcoMHgwYzgpLAo+IC0K PiAtCUVORCg4MCkKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCB1OCBnZW4xMl9yY3Nfb2Zmc2V0 c1tdID0gewo+IC0JTk9QKDEpLAo+IC0JTFJJKDEzLCBQT1NURUQpLAo+IC0JUkVHMTYoMHgyNDQp LAo+IC0JUkVHKDB4MDM0KSwKPiAtCVJFRygweDAzMCksCj4gLQlSRUcoMHgwMzgpLAo+IC0JUkVH KDB4MDNjKSwKPiAtCVJFRygweDE2OCksCj4gLQlSRUcoMHgxNDApLAo+IC0JUkVHKDB4MTEwKSwK PiAtCVJFRygweDFjMCksCj4gLQlSRUcoMHgxYzQpLAo+IC0JUkVHKDB4MWM4KSwKPiAtCVJFRygw eDE4MCksCj4gLQlSRUcxNigweDJiNCksCj4gLQo+IC0JTk9QKDUpLAo+IC0JTFJJKDksIFBPU1RF RCksCj4gLQlSRUcxNigweDNhOCksCj4gLQlSRUcxNigweDI4YyksCj4gLQlSRUcxNigweDI4OCks Cj4gLQlSRUcxNigweDI4NCksCj4gLQlSRUcxNigweDI4MCksCj4gLQlSRUcxNigweDI3YyksCj4g LQlSRUcxNigweDI3OCksCj4gLQlSRUcxNigweDI3NCksCj4gLQlSRUcxNigweDI3MCksCj4gLQo+ IC0JTFJJKDMsIFBPU1RFRCksCj4gLQlSRUcoMHgxYjApLAo+IC0JUkVHMTYoMHg1YTgpLAo+IC0J UkVHMTYoMHg1YWMpLAo+IC0KPiAtCU5PUCg2KSwKPiAtCUxSSSgxLCAwKSwKPiAtCVJFRygweDBj OCksCj4gLQo+IC0JRU5EKDgwKQo+IC19Owo+IC0KPiAtI3VuZGVmIEVORAo+IC0jdW5kZWYgUkVH MTYKPiAtI3VuZGVmIFJFRwo+IC0jdW5kZWYgTFJJCj4gLSN1bmRlZiBOT1AKPiAtCj4gLXN0YXRp YyBjb25zdCB1OCAqcmVnX29mZnNldHMoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+IC17Cj4gLQkvKgo+IC0JICogVGhlIGdlbjEyKyBsaXN0cyBvbmx5IGhhdmUgdGhlIHJl Z2lzdGVycyB3ZSBwcm9ncmFtIGluIHRoZSBiYXNpYwo+IC0JICogZGVmYXVsdCBzdGF0ZS4gV2Ug cmVseSBvbiB0aGUgY29udGV4dCBpbWFnZSB1c2luZyByZWxhdGl2ZQo+IC0JICogYWRkcmVzc2lu ZyB0byBhdXRvbWF0aWMgZml4dXAgdGhlIHJlZ2lzdGVyIHN0YXRlIGJldHdlZW4gdGhlCj4gLQkg KiBwaHlzaWNhbCBlbmdpbmVzIGZvciB2aXJ0dWFsIGVuZ2luZS4KPiAtCSAqLwo+IC0JR0VNX0JV R19PTihJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMiAmJgo+IC0JCSAgICFpbnRlbF9lbmdp bmVfaGFzX3JlbGF0aXZlX21taW8oZW5naW5lKSk7Cj4gLQo+IC0JaWYgKGVuZ2luZS0+Y2xhc3Mg PT0gUkVOREVSX0NMQVNTKSB7Cj4gLQkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEy KQo+IC0JCQlyZXR1cm4gZ2VuMTJfcmNzX29mZnNldHM7Cj4gLQkJZWxzZSBpZiAoSU5URUxfR0VO KGVuZ2luZS0+aTkxNSkgPj0gMTEpCj4gLQkJCXJldHVybiBnZW4xMV9yY3Nfb2Zmc2V0czsKPiAt CQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQo+IC0JCQlyZXR1cm4gZ2Vu OV9yY3Nfb2Zmc2V0czsKPiAtCQllbHNlCj4gLQkJCXJldHVybiBnZW44X3Jjc19vZmZzZXRzOwo+ IC0JfSBlbHNlIHsKPiAtCQlpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gLQkJ CXJldHVybiBnZW4xMl94Y3Nfb2Zmc2V0czsKPiAtCQllbHNlIGlmIChJTlRFTF9HRU4oZW5naW5l LT5pOTE1KSA+PSA5KQo+IC0JCQlyZXR1cm4gZ2VuOV94Y3Nfb2Zmc2V0czsKPiAtCQllbHNlCj4g LQkJCXJldHVybiBnZW44X3hjc19vZmZzZXRzOwo+IC0JfQo+IC19Cj4gLQo+ICAgc3RhdGljIHN0 cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICAgX191bndpbmRfaW5jb21wbGV0ZV9yZXF1ZXN0cyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gQEAgLTEwOTIsMTggKzQzNCw2IEBA IHN0YXRpYyB2b2lkIGludGVsX2VuZ2luZV9jb250ZXh0X291dChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gICAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+c3Rh dHMubG9jaywgZmxhZ3MpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgbHJjX3JpbmdfbWlfbW9k ZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCWlmIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiAtCQlyZXR1cm4gMHg2MDsKPiAtCWVsc2UgaWYg KElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDkpCj4gLQkJcmV0dXJuIDB4NTQ7Cj4gLQllbHNl IGlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRFUl9DTEFTUykKPiAtCQlyZXR1cm4gMHg1ODsKPiAt CWVsc2UKPiAtCQlyZXR1cm4gLTE7Cj4gLX0KPiAtCj4gICBzdGF0aWMgdm9pZAo+ICAgZXhlY2xp c3RzX2NoZWNrX2NvbnRleHQoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJ Y29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IEBAIC0xMTMyLDcgKzQ2Miw3 IEBAIGV4ZWNsaXN0c19jaGVja19jb250ZXh0KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj ZSwKPiAgIAkJdmFsaWQgPSBmYWxzZTsKPiAgIAl9Cj4gICAKPiAtCXggPSBscmNfcmluZ19taV9t b2RlKGVuZ2luZSk7Cj4gKwl4ID0gaW50ZWxfbHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpOwo+ICAg CWlmICh4ICE9IC0xICYmIHJlZ3NbeCArIDFdICYgKHJlZ3NbeCArIDFdID4+IDE2KSAmIFNUT1Bf UklORykgewo+ICAgCQlwcl9lcnIoIiVzOiBjb250ZXh0IHN1Ym1pdHRlZCB3aXRoIFNUT1BfUklO RyBbJTA4eF0gaW4gUklOR19NSV9NT0RFXG4iLAo+ICAgCQkgICAgICAgZW5naW5lLT5uYW1lLCBy ZWdzW3ggKyAxXSk7Cj4gQEAgLTExNTQsNyArNDg0LDcgQEAgc3RhdGljIHZvaWQgcmVzdG9yZV9k ZWZhdWx0X3N0YXRlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJICAgICAgIGVuZ2lu ZS0+cGlubmVkX2RlZmF1bHRfc3RhdGUgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUsCj4gICAJ CSAgICAgICBlbmdpbmUtPmNvbnRleHRfc2l6ZSAtIFBBR0VfU0laRSk7Cj4gICAKPiAtCWV4ZWNs aXN0c19pbml0X3JlZ19zdGF0ZShyZWdzLCBjZSwgZW5naW5lLCBjZS0+cmluZywgZmFsc2UpOwo+ ICsJaW50ZWxfbHJjX2luaXRfcmVnX3N0YXRlKHJlZ3MsIGNlLCBlbmdpbmUsIGNlLT5yaW5nLCBm YWxzZSk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHJlc2V0X2FjdGl2ZShzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycSwKPiBAQCAtMTE5MSw3ICs1MjEsNyBAQCBzdGF0aWMgdm9pZCByZXNldF9h Y3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4gICAKPiAgIAkvKiBTY3J1YiB0aGUgY29u dGV4dCBpbWFnZSB0byBwcmV2ZW50IHJlcGxheWluZyB0aGUgcHJldmlvdXMgYmF0Y2ggKi8KPiAg IAlyZXN0b3JlX2RlZmF1bHRfc3RhdGUoY2UsIGVuZ2luZSk7Cj4gLQlfX2V4ZWNsaXN0c191cGRh dGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwo+ICsJaW50ZWxfbHJjX3VwZGF0ZV9yZWdfc3RhdGUo Y2UsIGVuZ2luZSk7Cj4gICAKPiAgIAkvKiBXZSd2ZSBzd2l0Y2hlZCBhd2F5LCBzbyB0aGlzIHNo b3VsZCBiZSBhIG5vLW9wLCBidXQgaW50ZW50IG1hdHRlcnMgKi8KPiAgIAljZS0+bHJjX2Rlc2Mg fD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsKPiBAQCAtMTU1MCw3ICs4ODAsNyBAQCBzdGF0aWMg Ym9vbCBjYW5fbWVyZ2VfcnEoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcHJldiwKPiAgIHN0 YXRpYyB2b2lkIHZpcnR1YWxfdXBkYXRlX3JlZ2lzdGVyX29mZnNldHModTMyICpyZWdzLAo+ICAg CQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+IC0Jc2V0X29m ZnNldHMocmVncywgcmVnX29mZnNldHMoZW5naW5lKSwgZW5naW5lLCBmYWxzZSk7Cj4gKwlpbnRl bF9scmNfc2V0X3JlZ19vZmZzZXRzKHJlZ3MsIGVuZ2luZSk7Cj4gICB9Cj4gICAKPiAgIHN0YXRp YyBib29sIHZpcnR1YWxfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlLAo+ IEBAIC0yODkxLDI5ICsyMjIxLDYgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2NvbnRleHRfdW5w aW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICAgCWk5MTVfZ2VtX29iamVjdF91bnBpbl9t YXAoY2UtPnN0YXRlLT5vYmopOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLV9fZXhlY2xp c3RzX3VwZGF0ZV9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+IC0J CQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAtewo+IC0Jc3Ry dWN0IGludGVsX3JpbmcgKnJpbmcgPSBjZS0+cmluZzsKPiAtCXUzMiAqcmVncyA9IGNlLT5scmNf cmVnX3N0YXRlOwo+IC0KPiAtCUdFTV9CVUdfT04oIWludGVsX3Jpbmdfb2Zmc2V0X3ZhbGlkKHJp bmcsIHJpbmctPmhlYWQpKTsKPiAtCUdFTV9CVUdfT04oIWludGVsX3Jpbmdfb2Zmc2V0X3ZhbGlk KHJpbmcsIHJpbmctPnRhaWwpKTsKPiAtCj4gLQlyZWdzW0NUWF9SSU5HX1NUQVJUXSA9IGk5MTVf Z2d0dF9vZmZzZXQocmluZy0+dm1hKTsKPiAtCXJlZ3NbQ1RYX1JJTkdfSEVBRF0gPSByaW5nLT5o ZWFkOwo+IC0JcmVnc1tDVFhfUklOR19UQUlMXSA9IHJpbmctPnRhaWw7Cj4gLQo+IC0JLyogUlBD UyAqLwo+IC0JaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKSB7Cj4gLQkJcmVnc1tD VFhfUl9QV1JfQ0xLX1NUQVRFXSA9Cj4gLQkJCWludGVsX3NzZXVfbWFrZV9ycGNzKGVuZ2luZS0+ aTkxNSwgJmNlLT5zc2V1KTsKPiAtCj4gLQkJaTkxNV9vYV9pbml0X3JlZ19zdGF0ZShjZSwgZW5n aW5lKTsKPiAtCX0KPiAtfQo+IC0KPiAgIHN0YXRpYyBpbnQKPiAgIF9fZXhlY2xpc3RzX2NvbnRl eHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiBAQCAtMjkyOSw5ICsyMjM2LDExIEBAIF9fZXhlY2xpc3RzX2NvbnRl eHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAlpZiAoSVNfRVJSKHZhZGRyKSkK PiAgIAkJcmV0dXJuIFBUUl9FUlIodmFkZHIpOwo+ICAgCj4gLQljZS0+bHJjX2Rlc2MgPSBscmNf ZGVzY3JpcHRvcihjZSwgZW5naW5lKSB8IENUWF9ERVNDX0ZPUkNFX1JFU1RPUkU7Cj4gKwljZS0+ bHJjX2Rlc2MgPQo+ICsJCWludGVsX2xyY19kZXNjcmlwdG9yKGNlLCBlbmdpbmUpIHwgQ1RYX0RF U0NfRk9SQ0VfUkVTVE9SRTsKPiArCj4gICAJY2UtPmxyY19yZWdfc3RhdGUgPSB2YWRkciArIExS Q19TVEFURV9QTiAqIFBBR0VfU0laRTsKPiAtCV9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUo Y2UsIGVuZ2luZSk7Cj4gKwlpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsK PiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBAIC0yOTcwLDkgKzIyNzksOSBAQCBzdGF0aWMg dm9pZCBleGVjbGlzdHNfY29udGV4dF9yZXNldChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4g ICAJaW50ZWxfcmluZ19yZXNldChjZS0+cmluZywgY2UtPnJpbmctPmVtaXQpOwo+ICAgCj4gICAJ LyogU2NydWIgYXdheSB0aGUgZ2FyYmFnZSAqLwo+IC0JZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRl KGNlLT5scmNfcmVnX3N0YXRlLAo+ICsJaW50ZWxfbHJjX2luaXRfcmVnX3N0YXRlKGNlLT5scmNf cmVnX3N0YXRlLAo+ICAgCQkJCSBjZSwgY2UtPmVuZ2luZSwgY2UtPnJpbmcsIHRydWUpOwo+IC0J X19leGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgY2UtPmVuZ2luZSk7Cj4gKwlpbnRlbF9s cmNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgY2UtPmVuZ2luZSk7Cj4gICAKPiAgIAljZS0+bHJjX2Rl c2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsKPiAgIH0KPiBAQCAtMzA1MiwzMzAgKzIzNjEs NiBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtLyoKPiAtICogSW4gdGhp cyBXQSB3ZSBuZWVkIHRvIHNldCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5kIHJlc2V0IGl0IGFm dGVyCj4gLSAqIFBJUEVfQ09OVFJPTCBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZXF1aXJlZCBmb3Ig dGhlIGZsdXNoIHRvIGhhcHBlbiBjb3JyZWN0bHkKPiAtICogYnV0IHRoZXJlIGlzIGEgc2xpZ2h0 IGNvbXBsaWNhdGlvbiBhcyB0aGlzIGlzIGFwcGxpZWQgaW4gV0EgYmF0Y2ggd2hlcmUgdGhlCj4g LSAqIHZhbHVlcyBhcmUgb25seSBpbml0aWFsaXplZCBvbmNlIHNvIHdlIGNhbm5vdCB0YWtlIHJl Z2lzdGVyIHZhbHVlIGF0IHRoZQo+IC0gKiBiZWdpbm5pbmcgYW5kIHJldXNlIGl0IGZ1cnRoZXI7 IGhlbmNlIHdlIHNhdmUgaXRzIHZhbHVlIHRvIG1lbW9yeSwgdXBsb2FkIGEKPiAtICogY29uc3Rh bnQgdmFsdWUgd2l0aCBiaXQyMSBzZXQgYW5kIHRoZW4gd2UgcmVzdG9yZSBpdCBiYWNrIHdpdGgg dGhlIHNhdmVkIHZhbHVlLgo+IC0gKiBUbyBzaW1wbGlmeSB0aGUgV0EsIGEgY29uc3RhbnQgdmFs dWUgaXMgZm9ybWVkIGJ5IHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlCj4gLSAqIG9mIHRoaXMgcmVn aXN0ZXIuIFRoaXMgc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBiZWNhdXNlIHdlIGFyZSBvbmx5IG1v ZGlmeWluZwo+IC0gKiBpdCBmb3IgYSBzaG9ydCBwZXJpb2QgYW5kIHRoaXMgYmF0Y2ggaW4gbm9u LXByZW1wdGlibGUuIFdlIGNhbiBvZmNvdXJzZQo+IC0gKiB1c2UgYWRkaXRpb25hbCBpbnN0cnVj dGlvbnMgdGhhdCByZWFkIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyCj4gLSAqIGF0 IHRoYXQgdGltZSBhbmQgc2V0IG91ciBiaXQgb2YgaW50ZXJlc3QgYnV0IGl0IG1ha2VzIHRoZSBX QSBjb21wbGljYXRlZC4KPiAtICoKPiAtICogVGhpcyBXQSBpcyBhbHNvIHJlcXVpcmVkIGZvciBH ZW45IHNvIGV4dHJhY3RpbmcgYXMgYSBmdW5jdGlvbiBhdm9pZHMKPiAtICogY29kZSBkdXBsaWNh dGlvbi4KPiAtICovCj4gLXN0YXRpYyB1MzIgKgo+IC1nZW44X2VtaXRfZmx1c2hfY29oZXJlbnRs M193YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCj4gLXsKPiAt CS8qIE5CIG5vIG9uZSBlbHNlIGlzIGFsbG93ZWQgdG8gc2NyaWJibGUgb3ZlciBzY3JhdGNoICsg MjU2ISAqLwo+IC0JKmJhdGNoKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8IE1JX1NS TV9MUk1fR0xPQkFMX0dUVDsKPiAtCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VO OF9MM1NRQ1JFRzQpOwo+IC0JKmJhdGNoKysgPSBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChlbmdp bmUtPmd0LAo+IC0JCQkJCSAgIElOVEVMX0dUX1NDUkFUQ0hfRklFTERfQ09IRVJFTlRMM19XQSk7 Cj4gLQkqYmF0Y2grKyA9IDA7Cj4gLQo+IC0JKmJhdGNoKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lN TSgxKTsKPiAtCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9MM1NRQ1JFRzQp Owo+IC0JKmJhdGNoKysgPSAweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJ TkVTOwo+IC0KPiAtCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKPiAtCQkJ CSAgICAgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfAo+IC0JCQkJICAgICAgIFBJUEVfQ09OVFJP TF9EQ19GTFVTSF9FTkFCTEUsCj4gLQkJCQkgICAgICAgMCk7Cj4gLQo+IC0JKmJhdGNoKysgPSBN SV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOwo+IC0JKmJh dGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7Cj4gLQkqYmF0Y2gr KyA9IGludGVsX2d0X3NjcmF0Y2hfb2Zmc2V0KGVuZ2luZS0+Z3QsCj4gLQkJCQkJICAgSU5URUxf R1RfU0NSQVRDSF9GSUVMRF9DT0hFUkVOVEwzX1dBKTsKPiAtCSpiYXRjaCsrID0gMDsKPiAtCj4g LQlyZXR1cm4gYmF0Y2g7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFR5cGljYWxseSB3ZSBvbmx5IGhh dmUgb25lIGluZGlyZWN0X2N0eCBhbmQgcGVyX2N0eCBiYXRjaCBidWZmZXIgd2hpY2ggYXJlCj4g LSAqIGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHNoYXJlZCBhY3Jvc3MgYWxsIGNv bnRleHRzIGJ1dCB0aGlzIGZpZWxkCj4gLSAqIGhlbHBzIHVzIHRvIGhhdmUgbXVsdGlwbGUgYmF0 Y2hlcyBhdCBkaWZmZXJlbnQgb2Zmc2V0cyBhbmQgc2VsZWN0IHRoZW0gYmFzZWQKPiAtICogb24g YSBjcml0ZXJpYS4gQXQgdGhlIG1vbWVudCB0aGlzIGJhdGNoIGFsd2F5cyBzdGFydCBhdCB0aGUg YmVnaW5uaW5nIG9mIHRoZSBwYWdlCj4gLSAqIGFuZCBhdCB0aGlzIHBvaW50IHdlIGRvbid0IGhh dmUgbXVsdGlwbGUgd2FfY3R4IGJhdGNoIGJ1ZmZlcnMuCj4gLSAqCj4gLSAqIFRoZSBudW1iZXIg b2YgV0EgYXBwbGllZCBhcmUgbm90IGtub3duIGF0IHRoZSBiZWdpbm5pbmc7IHdlIHVzZSB0aGlz IGZpZWxkCj4gLSAqIHRvIHJldHVybiB0aGUgbm8gb2YgRFdPUkRTIHdyaXR0ZW4uCj4gLSAqCj4g LSAqIEl0IGlzIHRvIGJlIG5vdGVkIHRoYXQgdGhpcyBiYXRjaCBkb2VzIG5vdCBjb250YWluIE1J X0JBVENIX0JVRkZFUl9FTkQKPiAtICogc28gaXQgYWRkcyBOT09QcyBhcyBwYWRkaW5nIHRvIG1h a2UgaXQgY2FjaGVsaW5lIGFsaWduZWQuCj4gLSAqIE1JX0JBVENIX0JVRkZFUl9FTkQgd2lsbCBi ZSBhZGRlZCB0byBwZXJjdHggYmF0Y2ggYW5kIGJvdGggb2YgdGhlbSB0b2dldGhlcgo+IC0gKiBt YWtlcyBhIGNvbXBsZXRlIGJhdGNoIGJ1ZmZlci4KPiAtICovCj4gLXN0YXRpYyB1MzIgKmdlbjhf aW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAq YmF0Y2gpCj4gLXsKPiAtCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpiZHcsY2h2 ICovCj4gLQkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKPiAtCj4g LQkvKiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hlTGluZXNBdENvbnRleHRTd2l0Y2g6YmR3ICovCj4g LQlpZiAoSVNfQlJPQURXRUxMKGVuZ2luZS0+aTkxNSkpCj4gLQkJYmF0Y2ggPSBnZW44X2VtaXRf Zmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoKTsKPiAtCj4gLQkvKiBXYUNsZWFyU2xt U3BhY2VBdENvbnRleHRTd2l0Y2g6YmR3LGNodiAqLwo+IC0JLyogQWN0dWFsIHNjcmF0Y2ggbG9j YXRpb24gaXMgYXQgMTI4IGJ5dGVzIG9mZnNldCAqLwo+IC0JYmF0Y2ggPSBnZW44X2VtaXRfcGlw ZV9jb250cm9sKGJhdGNoLAo+IC0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9GTFVTSF9MMyB8Cj4g LQkJCQkgICAgICAgUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVggfAo+IC0JCQkJICAgICAg IFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8Cj4gLQkJCQkgICAgICAgUElQRV9DT05UUk9MX1FXX1dS SVRFLAo+IC0JCQkJICAgICAgIExSQ19QUEhXU1BfU0NSQVRDSF9BRERSKTsKPiAtCj4gLQkqYmF0 Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRU5BQkxFOwo+IC0KPiAtCS8qIFBhZCB0byBl bmQgb2YgY2FjaGVsaW5lICovCj4gLQl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNI RUxJTkVfQllURVMpCj4gLQkJKmJhdGNoKysgPSBNSV9OT09QOwo+IC0KPiAtCS8qCj4gLQkgKiBN SV9CQVRDSF9CVUZGRVJfRU5EIGlzIG5vdCByZXF1aXJlZCBpbiBJbmRpcmVjdCBjdHggQkIgYmVj YXVzZQo+IC0JICogZXhlY3V0aW9uIGRlcGVuZHMgb24gdGhlIGxlbmd0aCBzcGVjaWZpZWQgaW4g dGVybXMgb2YgY2FjaGUgbGluZXMKPiAtCSAqIGluIHRoZSByZWdpc3RlciBDVFhfUkNTX0lORElS RUNUX0NUWAo+IC0JICovCj4gLQo+IC0JcmV0dXJuIGJhdGNoOwo+IC19Cj4gLQo+IC1zdHJ1Y3Qg bHJpIHsKPiAtCWk5MTVfcmVnX3QgcmVnOwo+IC0JdTMyIHZhbHVlOwo+IC19Owo+IC0KPiAtc3Rh dGljIHUzMiAqZW1pdF9scmkodTMyICpiYXRjaCwgY29uc3Qgc3RydWN0IGxyaSAqbHJpLCB1bnNp Z25lZCBpbnQgY291bnQpCj4gLXsKPiAtCUdFTV9CVUdfT04oIWNvdW50IHx8IGNvdW50ID4gNjMp Owo+IC0KPiAtCSpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oY291bnQpOwo+IC0JZG8g ewo+IC0JCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQobHJpLT5yZWcpOwo+IC0JCSpi YXRjaCsrID0gbHJpLT52YWx1ZTsKPiAtCX0gd2hpbGUgKGxyaSsrLCAtLWNvdW50KTsKPiAtCSpi YXRjaCsrID0gTUlfTk9PUDsKPiAtCj4gLQlyZXR1cm4gYmF0Y2g7Cj4gLX0KPiAtCj4gLXN0YXRp YyB1MzIgKmdlbjlfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiAqYmF0Y2gpCj4gLXsKPiAtCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbHJpIGxyaVtd ID0gewo+IC0JCS8qIFdhRGlzYWJsZUdhdGhlckF0U2V0U2hhZGVyQ29tbW9uU2xpY2U6c2tsLGJ4 dCxrYmwsZ2xrICovCj4gLQkJewo+IC0JCQlDT01NT05fU0xJQ0VfQ0hJQ0tFTjIsCj4gLQkJCV9f TUFTS0VEX0ZJRUxEKEdFTjlfRElTQUJMRV9HQVRIRVJfQVRfU0VUX1NIQURFUl9DT01NT05fU0xJ Q0UsCj4gLQkJCQkgICAgICAgMCksCj4gLQkJfSwKPiAtCj4gLQkJLyogQlNwZWM6IDExMzkxICov Cj4gLQkJewo+IC0JCQlGRl9TTElDRV9DSElDS0VOLAo+IC0JCQlfX01BU0tFRF9GSUVMRChGRl9T TElDRV9DSElDS0VOX0NMX1BST1ZPS0lOR19WRVJURVhfRklYLAo+IC0JCQkJICAgICAgIEZGX1NM SUNFX0NISUNLRU5fQ0xfUFJPVk9LSU5HX1ZFUlRFWF9GSVgpLAo+IC0JCX0sCj4gLQo+IC0JCS8q IEJTcGVjOiAxMTI5OSAqLwo+IC0JCXsKPiAtCQkJXzNEX0NISUNLRU4zLAo+IC0JCQlfX01BU0tF RF9GSUVMRChfM0RfQ0hJQ0tFTl9TRl9QUk9WT0tJTkdfVkVSVEVYX0ZJWCwKPiAtCQkJCSAgICAg ICBfM0RfQ0hJQ0tFTl9TRl9QUk9WT0tJTkdfVkVSVEVYX0ZJWCksCj4gLQkJfQo+IC0JfTsKPiAt Cj4gLQkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJfRElTQUJMRTsKPiAtCj4gLQkv KiBXYUZsdXNoQ29oZXJlbnRMM0NhY2hlTGluZXNBdENvbnRleHRTd2l0Y2g6c2tsLGJ4dCxnbGsg Ki8KPiAtCWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRj aCk7Cj4gLQo+IC0JLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOnNrbCxieHQsa2Js LGdsayxjZmwgKi8KPiAtCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKPiAt CQkJCSAgICAgICBQSVBFX0NPTlRST0xfRkxVU0hfTDMgfAo+IC0JCQkJICAgICAgIFBJUEVfQ09O VFJPTF9TVE9SRV9EQVRBX0lOREVYIHwKPiAtCQkJCSAgICAgICBQSVBFX0NPTlRST0xfQ1NfU1RB TEwgfAo+IC0JCQkJICAgICAgIFBJUEVfQ09OVFJPTF9RV19XUklURSwKPiAtCQkJCSAgICAgICBM UkNfUFBIV1NQX1NDUkFUQ0hfQUREUik7Cj4gLQo+IC0JYmF0Y2ggPSBlbWl0X2xyaShiYXRjaCwg bHJpLCBBUlJBWV9TSVpFKGxyaSkpOwo+IC0KPiAtCS8qIFdhTWVkaWFQb29sU3RhdGVDbWRJbldB QkI6Ynh0LGdsayAqLwo+IC0JaWYgKEhBU19QT09MRURfRVUoZW5naW5lLT5pOTE1KSkgewo+IC0J CS8qCj4gLQkJICogRVUgcG9vbCBjb25maWd1cmF0aW9uIGlzIHNldHVwIGFsb25nIHdpdGggZ29s ZGVuIGNvbnRleHQKPiAtCQkgKiBkdXJpbmcgY29udGV4dCBpbml0aWFsaXphdGlvbi4gVGhpcyB2 YWx1ZSBkZXBlbmRzIG9uCj4gLQkJICogZGV2aWNlIHR5cGUgKDJ4NiBvciAzeDYpIGFuZCBuZWVk cyB0byBiZSB1cGRhdGVkIGJhc2VkCj4gLQkJICogb24gd2hpY2ggc3Vic2xpY2UgaXMgZGlzYWJs ZWQgZXNwZWNpYWxseSBmb3IgMng2Cj4gLQkJICogZGV2aWNlcywgaG93ZXZlciBpdCBpcyBzYWZl IHRvIGxvYWQgZGVmYXVsdAo+IC0JCSAqIGNvbmZpZ3VyYXRpb24gb2YgM3g2IGRldmljZSBpbnN0 ZWFkIG9mIG1hc2tpbmcgb2ZmCj4gLQkJICogY29ycmVzcG9uZGluZyBiaXRzIGJlY2F1c2UgSFcg aWdub3JlcyBiaXRzIG9mIGEgZGlzYWJsZWQKPiAtCQkgKiBzdWJzbGljZSBhbmQgZHJvcHMgZG93 biB0byBhcHByb3ByaWF0ZSBjb25maWcuIFBsZWFzZQo+IC0JCSAqIHNlZSByZW5kZXJfc3RhdGVf c2V0dXAoKSBpbiBpOTE1X2dlbV9yZW5kZXJfc3RhdGUuYyBmb3IKPiAtCQkgKiBwb3NzaWJsZSBj b25maWd1cmF0aW9ucywgdG8gYXZvaWQgZHVwbGljYXRpb24gdGhleSBhcmUKPiAtCQkgKiBub3Qg c2hvd24gaGVyZSBhZ2Fpbi4KPiAtCQkgKi8KPiAtCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9P TF9TVEFURTsKPiAtCQkqYmF0Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9FTkFCTEU7Cj4gLQkJKmJh dGNoKysgPSAweDAwNzc3MDAwOwo+IC0JCSpiYXRjaCsrID0gMDsKPiAtCQkqYmF0Y2grKyA9IDA7 Cj4gLQkJKmJhdGNoKysgPSAwOwo+IC0JfQo+IC0KPiAtCSpiYXRjaCsrID0gTUlfQVJCX09OX09G RiB8IE1JX0FSQl9FTkFCTEU7Cj4gLQo+IC0JLyogUGFkIHRvIGVuZCBvZiBjYWNoZWxpbmUgKi8K PiAtCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRjaCAlIENBQ0hFTElORV9CWVRFUykKPiAtCQkq YmF0Y2grKyA9IE1JX05PT1A7Cj4gLQo+IC0JcmV0dXJuIGJhdGNoOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdTMyICoKPiAtZ2VuMTBfaW5pdF9pbmRpcmVjdGN0eF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCS8qCj4gLQkg KiBXYVBpcGVDb250cm9sQmVmb3JlM0RTdGF0ZVNhbXBsZVBhdHRlcm46IGNubAo+IC0JICoKPiAt CSAqIEVuc3VyZSB0aGUgZW5naW5lIGlzIGlkbGUgcHJpb3IgdG8gcHJvZ3JhbW1pbmcgYQo+IC0J ICogM0RTVEFURV9TQU1QTEVfUEFUVEVSTiBkdXJpbmcgYSBjb250ZXh0IHJlc3RvcmUuCj4gLQkg Ki8KPiAtCWJhdGNoID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChiYXRjaCwKPiAtCQkJCSAgICAg ICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwsCj4gLQkJCQkgICAgICAgMCk7Cj4gLQkvKgo+IC0JICog V2FQaXBlQ29udHJvbEJlZm9yZTNEU3RhdGVTYW1wbGVQYXR0ZXJuIHNheXMgd2UgbmVlZCA0IGR3 b3JkcyBmb3IKPiAtCSAqIHRoZSBQSVBFX0NPTlRST0wgZm9sbG93ZWQgYnkgMTIgZHdvcmRzIG9m IDB4MCwgc28gMTYgZHdvcmRzIGluCj4gLQkgKiB0b3RhbC4gSG93ZXZlciwgYSBQSVBFX0NPTlRS T0wgaXMgNiBkd29yZHMgbG9uZywgbm90IDQsIHdoaWNoIGlzCj4gLQkgKiBjb25mdXNpbmcuIFNp bmNlIGdlbjhfZW1pdF9waXBlX2NvbnRyb2woKSBhbHJlYWR5IGFkdmFuY2VzIHRoZQo+IC0JICog YmF0Y2ggYnkgNiBkd29yZHMsIHdlIGFkdmFuY2UgdGhlIG90aGVyIDEwIGhlcmUsIGNvbXBsZXRp bmcgYQo+IC0JICogY2FjaGVsaW5lLiBJdCdzIG5vdCBjbGVhciBpZiB0aGUgd29ya2Fyb3VuZCBy ZXF1aXJlcyB0aGlzIHBhZGRpbmcKPiAtCSAqIGJlZm9yZSBvdGhlciBjb21tYW5kcywgb3IgaWYg aXQncyBqdXN0IHRoZSByZWd1bGFyIHBhZGRpbmcgd2Ugd291bGQKPiAtCSAqIGFscmVhZHkgaGF2 ZSBmb3IgdGhlIHdvcmthcm91bmQgYmIsIHNvIGxlYXZlIGl0IGhlcmUgZm9yIG5vdy4KPiAtCSAq Lwo+IC0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCj4gLQkJKmJhdGNoKysgPSBNSV9OT09QOwo+ IC0KPiAtCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5lICovCj4gLQl3aGlsZSAoKHVuc2lnbmVk IGxvbmcpYmF0Y2ggJSBDQUNIRUxJTkVfQllURVMpCj4gLQkJKmJhdGNoKysgPSBNSV9OT09QOwo+ IC0KPiAtCXJldHVybiBiYXRjaDsKPiAtfQo+IC0KPiAtI2RlZmluZSBDVFhfV0FfQkJfT0JKX1NJ WkUgKFBBR0VfU0laRSkKPiAtCj4gLXN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0eChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmo7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAtCWludCBlcnI7Cj4gLQo+IC0J b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zaG1lbShlbmdpbmUtPmk5MTUsIENUWF9XQV9C Ql9PQkpfU0laRSk7Cj4gLQlpZiAoSVNfRVJSKG9iaikpCj4gLQkJcmV0dXJuIFBUUl9FUlIob2Jq KTsKPiAtCj4gLQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZlbmdpbmUtPmd0LT5nZ3R0 LT52bSwgTlVMTCk7Cj4gLQlpZiAoSVNfRVJSKHZtYSkpIHsKPiAtCQllcnIgPSBQVFJfRVJSKHZt YSk7Cj4gLQkJZ290byBlcnI7Cj4gLQl9Cj4gLQo+IC0JZXJyID0gaTkxNV92bWFfcGluKHZtYSwg MCwgMCwgUElOX0dMT0JBTCB8IFBJTl9ISUdIKTsKPiAtCWlmIChlcnIpCj4gLQkJZ290byBlcnI7 Cj4gLQo+IC0JZW5naW5lLT53YV9jdHgudm1hID0gdm1hOwo+IC0JcmV0dXJuIDA7Cj4gLQo+IC1l cnI6Cj4gLQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBscmNfZGVzdHJveV93YV9jdHgoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+IC17Cj4gLQlpOTE1X3ZtYV91bnBpbl9hbmRfcmVsZWFzZSgmZW5naW5lLT53 YV9jdHgudm1hLCAwKTsKPiAtfQo+IC0KPiAtdHlwZWRlZiB1MzIgKigqd2FfYmJfZnVuY190KShz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpOwo+IC0KPiAtc3RhdGlj IGludCBpbnRlbF9pbml0X3dvcmthcm91bmRfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+IC17Cj4gLQlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fyb3VuZHMgKndhX2N0eCA9ICZlbmdp bmUtPndhX2N0eDsKPiAtCXN0cnVjdCBpOTE1X3dhX2N0eF9iYiAqd2FfYmJbMl0gPSB7ICZ3YV9j dHgtPmluZGlyZWN0X2N0eCwKPiAtCQkJCQkgICAgJndhX2N0eC0+cGVyX2N0eCB9Owo+IC0Jd2Ff YmJfZnVuY190IHdhX2JiX2ZuWzJdOwo+IC0Jc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQl2b2lkICpi YXRjaCwgKmJhdGNoX3B0cjsKPiAtCXVuc2lnbmVkIGludCBpOwo+IC0JaW50IHJldDsKPiAtCj4g LQlpZiAoZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+ IC0Jc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+IC0JY2FzZSAxMjoKPiAtCWNh c2UgMTE6Cj4gLQkJcmV0dXJuIDA7Cj4gLQljYXNlIDEwOgo+IC0JCXdhX2JiX2ZuWzBdID0gZ2Vu MTBfaW5pdF9pbmRpcmVjdGN0eF9iYjsKPiAtCQl3YV9iYl9mblsxXSA9IE5VTEw7Cj4gLQkJYnJl YWs7Cj4gLQljYXNlIDk6Cj4gLQkJd2FfYmJfZm5bMF0gPSBnZW45X2luaXRfaW5kaXJlY3RjdHhf YmI7Cj4gLQkJd2FfYmJfZm5bMV0gPSBOVUxMOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSA4Ogo+IC0J CXdhX2JiX2ZuWzBdID0gZ2VuOF9pbml0X2luZGlyZWN0Y3R4X2JiOwo+IC0JCXdhX2JiX2ZuWzFd ID0gTlVMTDsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJTUlTU0lOR19DQVNFKElOVEVM X0dFTihlbmdpbmUtPmk5MTUpKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBs cmNfc2V0dXBfd2FfY3R4KGVuZ2luZSk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJRFJNX0RFQlVHX0RS SVZFUigiRmFpbGVkIHRvIHNldHVwIGNvbnRleHQgV0EgcGFnZTogJWRcbiIsIHJldCk7Cj4gLQkJ cmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0 eV9wYWdlKHdhX2N0eC0+dm1hLT5vYmosIDApOwo+IC0JYmF0Y2ggPSBiYXRjaF9wdHIgPSBrbWFw X2F0b21pYyhwYWdlKTsKPiAtCj4gLQkvKgo+IC0JICogRW1pdCB0aGUgdHdvIHdvcmthcm91bmQg YmF0Y2ggYnVmZmVycywgcmVjb3JkaW5nIHRoZSBvZmZzZXQgZnJvbSB0aGUKPiAtCSAqIHN0YXJ0 IG9mIHRoZSB3b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlciBvYmplY3QgZm9yIGVhY2ggYW5kIHRoZWly Cj4gLQkgKiByZXNwZWN0aXZlIHNpemVzLgo+IC0JICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRSh3YV9iYl9mbik7IGkrKykgewo+IC0JCXdhX2JiW2ldLT5vZmZzZXQgPSBiYXRjaF9w dHIgLSBiYXRjaDsKPiAtCQlpZiAoR0VNX0RFQlVHX1dBUk5fT04oIUlTX0FMSUdORUQod2FfYmJb aV0tPm9mZnNldCwKPiAtCQkJCQkJICBDQUNIRUxJTkVfQllURVMpKSkgewo+IC0JCQlyZXQgPSAt RUlOVkFMOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQkJaWYgKHdhX2JiX2ZuW2ldKQo+IC0JCQli YXRjaF9wdHIgPSB3YV9iYl9mbltpXShlbmdpbmUsIGJhdGNoX3B0cik7Cj4gLQkJd2FfYmJbaV0t PnNpemUgPSBiYXRjaF9wdHIgLSAoYmF0Y2ggKyB3YV9iYltpXS0+b2Zmc2V0KTsKPiAtCX0KPiAt Cj4gLQlCVUdfT04oYmF0Y2hfcHRyIC0gYmF0Y2ggPiBDVFhfV0FfQkJfT0JKX1NJWkUpOwo+IC0K PiAtCWt1bm1hcF9hdG9taWMoYmF0Y2gpOwo+IC0JaWYgKHJldCkKPiAtCQlscmNfZGVzdHJveV93 YV9jdHgoZW5naW5lKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICAgc3RhdGljIHZv aWQgZW5hYmxlX2Vycm9yX2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cj4gICB7Cj4gICAJdTMyIHN0YXR1czsKPiBAQCAtMzUyNCwyNSArMjUwOSw2IEBAIHN0YXRpYyB2 b2lkIHJlc2V0X2NzYl9wb2ludGVycyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g ICAJCQkgICAgICAgJmV4ZWNsaXN0cy0+Y3NiX3N0YXR1c1tyZXNldF92YWx1ZV0pOwo+ICAgfQo+ ICAgCj4gLXN0YXRpYyB2b2lkIF9fcmVzZXRfc3RvcF9yaW5nKHUzMiAqcmVncywgY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlpbnQgeDsKPiAtCj4gLQl4ID0g bHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpOwo+IC0JaWYgKHggIT0gLTEpIHsKPiAtCQlyZWdzW3gg KyAxXSAmPSB+U1RPUF9SSU5HOwo+IC0JCXJlZ3NbeCArIDFdIHw9IFNUT1BfUklORyA8PCAxNjsK PiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX19leGVjbGlzdHNfcmVzZXRfcmVnX3N0YXRl KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAtCQkJCQljb25zdCBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXUzMiAqcmVncyA9IGNlLT5scmNfcmVnX3N0 YXRlOwo+IC0KPiAtCV9fcmVzZXRfc3RvcF9yaW5nKHJlZ3MsIGVuZ2luZSk7Cj4gLX0KPiAtCj4g ICBzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIGJvb2wgc3RhbGxlZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNs aXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiBAQCAtMzYzMCw4 ICsyNTk2LDggQEAgc3RhdGljIHZvaWQgX19leGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCj4gICAJRU5HSU5FX1RSQUNFKGVuZ2luZSwg InJlcGxheSB7aGVhZDolMDR4LCB0YWlsOiUwNHh9XG4iLAo+ICAgCQkgICAgIGNlLT5yaW5nLT5o ZWFkLCBjZS0+cmluZy0+dGFpbCk7Cj4gICAJaW50ZWxfcmluZ191cGRhdGVfc3BhY2UoY2UtPnJp bmcpOwo+IC0JX19leGVjbGlzdHNfcmVzZXRfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwo+IC0JX19l eGVjbGlzdHNfdXBkYXRlX3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKPiArCWludGVsX2xyY19yZXNl dF9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7Cj4gKwlpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShj ZSwgZW5naW5lKTsKPiAgIAljZS0+bHJjX2Rlc2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsg LyogcGFyYW5vaWQ6IEdQVSB3YXMgcmVzZXQhICovCj4gICAKPiAgIHVud2luZDoKPiBAQCAtMzc2 MCw2NyArMjcyNiw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldF9maW5pc2goc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCQkgICAgIGF0b21pY19yZWFkKCZleGVjbGlz dHMtPnRhc2tsZXQuY291bnQpKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGdlbjhfZW1pdF9i Yl9zdGFydF9ub2FyYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAtCQkJCSAgICB1NjQgb2Zm c2V0LCB1MzIgbGVuLAo+IC0JCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKPiAtewo+ IC0JdTMyICpjczsKPiAtCj4gLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQpOwo+IC0JaWYg KElTX0VSUihjcykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+IC0KPiAtCS8qCj4gLQkgKiBX YURpc2FibGVDdHhSZXN0b3JlQXJiaXRyYXRpb246YmR3LGNodgo+IC0JICoKPiAtCSAqIFdlIGRv bid0IG5lZWQgdG8gcGVyZm9ybSBNSV9BUkJfRU5BQkxFIGFzIG9mdGVuIGFzIHdlIGRvIChpbgo+ IC0JICogcGFydGljdWxhciBhbGwgdGhlIGdlbiB0aGF0IGRvIG5vdCBuZWVkIHRoZSB3L2EgYXQg YWxsISksIGlmIHdlCj4gLQkgKiB0b29rIGNhcmUgdG8gbWFrZSBzdXJlIHRoYXQgb24gZXZlcnkg c3dpdGNoIGludG8gdGhpcyBjb250ZXh0Cj4gLQkgKiAoYm90aCBvcmRpbmFyeSBhbmQgZm9yIHBy ZWVtcHRpb24pIHRoYXQgYXJiaXRyYXJ0aW9uIHdhcyBlbmFibGVkCj4gLQkgKiB3ZSB3b3VsZCBi ZSBmaW5lLiAgSG93ZXZlciwgZm9yIGdlbjggdGhlcmUgaXMgYW5vdGhlciB3L2EgdGhhdAo+IC0J ICogcmVxdWlyZXMgdXMgdG8gbm90IHByZWVtcHQgaW5zaWRlIEdQR1BVIGV4ZWN1dGlvbiwgc28g d2Uga2VlcAo+IC0JICogYXJiaXRyYXRpb24gZGlzYWJsZWQgZm9yIGdlbjggYmF0Y2hlcy4gQXJi aXRyYXRpb24gd2lsbCBiZQo+IC0JICogcmUtZW5hYmxlZCBiZWZvcmUgd2UgY2xvc2UgdGhlIHJl cXVlc3QKPiAtCSAqIChlbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iKS4KPiAtCSAqLwo+IC0J KmNzKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0RJU0FCTEU7Cj4gLQo+IC0JLyogRklYTUUo QkRXKyk6IEFkZHJlc3Mgc3BhY2UgYW5kIHNlY3VyaXR5IHNlbGVjdG9ycy4gKi8KPiAtCSpjcysr ID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUX0dFTjggfAo+IC0JCShmbGFncyAmIEk5MTVfRElTUEFU Q0hfU0VDVVJFID8gMCA6IEJJVCg4KSk7Cj4gLQkqY3MrKyA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0 KTsKPiAtCSpjcysrID0gdXBwZXJfMzJfYml0cyhvZmZzZXQpOwo+IC0KPiAtCWludGVsX3Jpbmdf YWR2YW5jZShycSwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IGdlbjhfZW1pdF9iYl9zdGFydChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiAtCQkJICAgICAg dTY0IG9mZnNldCwgdTMyIGxlbiwKPiAtCQkJICAgICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdz KQo+IC17Cj4gLQl1MzIgKmNzOwo+IC0KPiAtCWNzID0gaW50ZWxfcmluZ19iZWdpbihycSwgNik7 Cj4gLQlpZiAoSVNfRVJSKGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JKmNz KysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKPiAtCj4gLQkqY3MrKyA9IE1JX0JB VENIX0JVRkZFUl9TVEFSVF9HRU44IHwKPiAtCQkoZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VS RSA/IDAgOiBCSVQoOCkpOwo+IC0JKmNzKysgPSBsb3dlcl8zMl9iaXRzKG9mZnNldCk7Cj4gLQkq Y3MrKyA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKPiAtCj4gLQkqY3MrKyA9IE1JX0FSQl9PTl9P RkYgfCBNSV9BUkJfRElTQUJMRTsKPiAtCSpjcysrID0gTUlfTk9PUDsKPiAtCj4gLQlpbnRlbF9y aW5nX2FkdmFuY2UocnEsIGNzKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgIHN0YXRp YyB2b2lkIGdlbjhfbG9naWNhbF9yaW5nX2VuYWJsZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAgewo+ICAgCUVOR0lORV9XUklURShlbmdpbmUsIFJJTkdfSU1SLAo+IEBA IC0zODMzLDI0OSArMjczOCw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfbG9naWNhbF9yaW5nX2Rpc2Fi bGVfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlFTkdJTkVfV1JJVEUo ZW5naW5lLCBSSU5HX0lNUiwgfmVuZ2luZS0+aXJxX2tlZXBfbWFzayk7Cj4gICB9Cj4gICAKPiAt c3RhdGljIGludCBnZW44X2VtaXRfZmx1c2goc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwg dTMyIG1vZGUpCj4gLXsKPiAtCXUzMiBjbWQsICpjczsKPiAtCj4gLQljcyA9IGludGVsX3Jpbmdf YmVnaW4ocmVxdWVzdCwgNCk7Cj4gLQlpZiAoSVNfRVJSKGNzKSkKPiAtCQlyZXR1cm4gUFRSX0VS Uihjcyk7Cj4gLQo+IC0JY21kID0gTUlfRkxVU0hfRFcgKyAxOwo+IC0KPiAtCS8qIFdlIGFsd2F5 cyByZXF1aXJlIGEgY29tbWFuZCBiYXJyaWVyIHNvIHRoYXQgc3Vic2VxdWVudAo+IC0JICogY29t bWFuZHMsIHN1Y2ggYXMgYnJlYWRjcnVtYiBpbnRlcnJ1cHRzLCBhcmUgc3RyaWN0bHkgb3JkZXJl ZAo+IC0JICogd3J0IHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgY2FjaGUgYmVpbmcgZmx1c2hl ZCB0byBtZW1vcnkKPiAtCSAqIChhbmQgdGh1cyBiZWluZyBjb2hlcmVudCBmcm9tIHRoZSBDUFUp Lgo+IC0JICovCj4gLQljbWQgfD0gTUlfRkxVU0hfRFdfU1RPUkVfSU5ERVggfCBNSV9GTFVTSF9E V19PUF9TVE9SRURXOwo+IC0KPiAtCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Cj4gLQkJ Y21kIHw9IE1JX0lOVkFMSURBVEVfVExCOwo+IC0JCWlmIChyZXF1ZXN0LT5lbmdpbmUtPmNsYXNz ID09IFZJREVPX0RFQ09ERV9DTEFTUykKPiAtCQkJY21kIHw9IE1JX0lOVkFMSURBVEVfQlNEOwo+ IC0JfQo+IC0KPiAtCSpjcysrID0gY21kOwo+IC0JKmNzKysgPSBMUkNfUFBIV1NQX1NDUkFUQ0hf QUREUjsKPiAtCSpjcysrID0gMDsgLyogdXBwZXIgYWRkciAqLwo+IC0JKmNzKysgPSAwOyAvKiB2 YWx1ZSAqLwo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiAtCj4gLQlyZXR1 cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBnZW44X2VtaXRfZmx1c2hfcmVuZGVyKHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gLQkJCQkgIHUzMiBtb2RlKQo+IC17Cj4gLQlib29s IHZmX2ZsdXNoX3dhID0gZmFsc2UsIGRjX2ZsdXNoX3dhID0gZmFsc2U7Cj4gLQl1MzIgKmNzLCBm bGFncyA9IDA7Cj4gLQlpbnQgbGVuOwo+IC0KPiAtCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19T VEFMTDsKPiAtCj4gLQlpZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKPiAtCQlmbGFncyB8PSBQSVBF X0NPTlRST0xfUkVOREVSX1RBUkdFVF9DQUNIRV9GTFVTSDsKPiAtCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfREVQVEhfQ0FDSEVfRkxVU0g7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0RDX0ZM VVNIX0VOQUJMRTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRkxVU0hfRU5BQkxFOwo+IC0J fQo+IC0KPiAtCWlmIChtb2RlICYgRU1JVF9JTlZBTElEQVRFKSB7Cj4gLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX1RMQl9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9JTlNU UlVDVElPTl9DQUNIRV9JTlZBTElEQVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9URVhU VVJFX0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1ZGX0NBQ0hF X0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTlNUX0NBQ0hFX0lOVkFM SURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUQVRFX0NBQ0hFX0lOVkFMSURBVEU7 Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVf Q09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOwo+IC0KPiAtCQkvKgo+IC0JCSAqIE9uIEdFTjk6IGJl Zm9yZSBWRl9DQUNIRV9JTlZBTElEQVRFIHdlIG5lZWQgdG8gZW1pdCBhIE5VTEwKPiAtCQkgKiBw aXBlIGNvbnRyb2wuCj4gLQkJICovCj4gLQkJaWYgKElTX0dFTihyZXF1ZXN0LT5pOTE1LCA5KSkK PiAtCQkJdmZfZmx1c2hfd2EgPSB0cnVlOwo+IC0KPiAtCQkvKiBXYUZvckdBTUhhbmc6a2JsICov Cj4gLQkJaWYgKElTX0tCTF9SRVZJRChyZXF1ZXN0LT5pOTE1LCAwLCBLQkxfUkVWSURfQjApKQo+ IC0JCQlkY19mbHVzaF93YSA9IHRydWU7Cj4gLQl9Cj4gLQo+IC0JbGVuID0gNjsKPiAtCj4gLQlp ZiAodmZfZmx1c2hfd2EpCj4gLQkJbGVuICs9IDY7Cj4gLQo+IC0JaWYgKGRjX2ZsdXNoX3dhKQo+ IC0JCWxlbiArPSAxMjsKPiAtCj4gLQljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgbGVu KTsKPiAtCWlmIChJU19FUlIoY3MpKQo+IC0JCXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQlp ZiAodmZfZmx1c2hfd2EpCj4gLQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250cm9sKGNzLCAwLCAw KTsKPiAtCj4gLQlpZiAoZGNfZmx1c2hfd2EpCj4gLQkJY3MgPSBnZW44X2VtaXRfcGlwZV9jb250 cm9sKGNzLCBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFLAo+IC0JCQkJCSAgICAwKTsKPiAt Cj4gLQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQX1ND UkFUQ0hfQUREUik7Cj4gLQo+IC0JaWYgKGRjX2ZsdXNoX3dhKQo+IC0JCWNzID0gZ2VuOF9lbWl0 X3BpcGVfY29udHJvbChjcywgUElQRV9DT05UUk9MX0NTX1NUQUxMLCAwKTsKPiAtCj4gLQlpbnRl bF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW50IGdlbjExX2VtaXRfZmx1c2hfcmVuZGVyKHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QsCj4gLQkJCQkgICB1MzIgbW9kZSkKPiAtewo+IC0JaWYgKG1vZGUgJiBFTUlUX0ZM VVNIKSB7Cj4gLQkJdTMyICpjczsKPiAtCQl1MzIgZmxhZ3MgPSAwOwo+IC0KPiAtCQlmbGFncyB8 PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gLQo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9U SUxFX0NBQ0hFX0ZMVVNIOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VU X0NBQ0hFX0ZMVVNIOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVT SDsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOwo+IC0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9GTFVTSF9FTkFCTEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9M X1FXX1dSSVRFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9TVE9SRV9EQVRBX0lOREVYOwo+ IC0KPiAtCQljcyA9IGludGVsX3JpbmdfYmVnaW4ocmVxdWVzdCwgNik7Cj4gLQkJaWYgKElTX0VS UihjcykpCj4gLQkJCXJldHVybiBQVFJfRVJSKGNzKTsKPiAtCj4gLQkJY3MgPSBnZW44X2VtaXRf cGlwZV9jb250cm9sKGNzLCBmbGFncywgTFJDX1BQSFdTUF9TQ1JBVENIX0FERFIpOwo+IC0JCWlu dGVsX3JpbmdfYWR2YW5jZShyZXF1ZXN0LCBjcyk7Cj4gLQl9Cj4gLQo+IC0JaWYgKG1vZGUgJiBF TUlUX0lOVkFMSURBVEUpIHsKPiAtCQl1MzIgKmNzOwo+IC0JCXUzMiBmbGFncyA9IDA7Cj4gLQo+ IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9DU19TVEFMTDsKPiAtCj4gLQkJZmxhZ3MgfD0gUElQ RV9DT05UUk9MX0NPTU1BTkRfQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfVExCX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNU SU9OX0NBQ0hFX0lOVkFMSURBVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVf Q0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5W QUxJREFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFU RTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKPiAt CQlmbGFncyB8PSBQSVBFX0NPTlRST0xfUVdfV1JJVEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1NUT1JFX0RBVEFfSU5ERVg7Cj4gLQo+IC0JCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1 ZXN0LCA2KTsKPiAtCQlpZiAoSVNfRVJSKGNzKSkKPiAtCQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ IC0KPiAtCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQ X1NDUkFUQ0hfQUREUik7Cj4gLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiAt CX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHUzMiBwcmVwYXJzZXJfZGlz YWJsZShib29sIHN0YXRlKQo+IC17Cj4gLQlyZXR1cm4gTUlfQVJCX0NIRUNLIHwgMSA8PCA4IHwg c3RhdGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgZ2VuMTJfZW1pdF9mbHVzaF9yZW5kZXIoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwKPiAtCQkJCSAgIHUzMiBtb2RlKQo+IC17Cj4gLQlp ZiAobW9kZSAmIEVNSVRfRkxVU0gpIHsKPiAtCQl1MzIgZmxhZ3MgPSAwOwo+IC0JCXUzMiAqY3M7 Cj4gLQo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9USUxFX0NBQ0hFX0ZMVVNIOwo+IC0JCWZs YWdzIHw9IFBJUEVfQ09OVFJPTF9SRU5ERVJfVEFSR0VUX0NBQ0hFX0ZMVVNIOwo+IC0JCWZsYWdz IHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9DQUNIRV9GTFVTSDsKPiAtCQkvKiBXYV8xNDA5NjAwOTA3 OnRnbCAqLwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9ERVBUSF9TVEFMTDsKPiAtCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFOwo+IC0JCWZsYWdzIHw9IFBJUEVfQ09O VFJPTF9GTFVTSF9FTkFCTEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0hEQ19QSVBFTElO RV9GTFVTSDsKPiAtCj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7 Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRFOwo+IC0KPiAtCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gLQo+IC0JCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1 ZXN0LCA2KTsKPiAtCQlpZiAoSVNfRVJSKGNzKSkKPiAtCQkJcmV0dXJuIFBUUl9FUlIoY3MpOwo+ IC0KPiAtCQljcyA9IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLCBMUkNfUFBIV1NQ X1NDUkFUQ0hfQUREUik7Cj4gLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiAt CX0KPiAtCj4gLQlpZiAobW9kZSAmIEVNSVRfSU5WQUxJREFURSkgewo+IC0JCXUzMiBmbGFncyA9 IDA7Cj4gLQkJdTMyICpjczsKPiAtCj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NPTU1BTkRf Q0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVExCX0lOVkFMSURB VEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0lOU1RSVUNUSU9OX0NBQ0hFX0lOVkFMSURB VEU7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1RFWFRVUkVfQ0FDSEVfSU5WQUxJREFURTsK PiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfVkZfQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFn cyB8PSBQSVBFX0NPTlRST0xfQ09OU1RfQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfU1RBVEVfQ0FDSEVfSU5WQUxJREFURTsKPiAtCQlmbGFncyB8PSBQSVBFX0NP TlRST0xfTDNfUk9fQ0FDSEVfSU5WQUxJREFURTsKPiAtCj4gLQkJZmxhZ3MgfD0gUElQRV9DT05U Uk9MX1NUT1JFX0RBVEFfSU5ERVg7Cj4gLQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX1FXX1dSSVRF Owo+IC0KPiAtCQlmbGFncyB8PSBQSVBFX0NPTlRST0xfQ1NfU1RBTEw7Cj4gLQo+IC0JCWNzID0g aW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA4KTsKPiAtCQlpZiAoSVNfRVJSKGNzKSkKPiAtCQkJ cmV0dXJuIFBUUl9FUlIoY3MpOwo+IC0KPiAtCQkvKgo+IC0JCSAqIFByZXZlbnQgdGhlIHByZS1w YXJzZXIgZnJvbSBza2lwcGluZyBwYXN0IHRoZSBUTEIKPiAtCQkgKiBpbnZhbGlkYXRlIGFuZCBs b2FkaW5nIGEgc3RhbGUgcGFnZSBmb3IgdGhlIGJhdGNoCj4gLQkJICogYnVmZmVyIC8gcmVxdWVz dCBwYXlsb2FkLgo+IC0JCSAqLwo+IC0JCSpjcysrID0gcHJlcGFyc2VyX2Rpc2FibGUodHJ1ZSk7 Cj4gLQo+IC0JCWNzID0gZ2VuOF9lbWl0X3BpcGVfY29udHJvbChjcywgZmxhZ3MsIExSQ19QUEhX U1BfU0NSQVRDSF9BRERSKTsKPiAtCj4gLQkJKmNzKysgPSBwcmVwYXJzZXJfZGlzYWJsZShmYWxz ZSk7Cj4gLQkJaW50ZWxfcmluZ19hZHZhbmNlKHJlcXVlc3QsIGNzKTsKPiAtCj4gLQkJLyoKPiAt CQkgKiBXYV8xNjA0NTQ0ODg5OnRnbAo+IC0JCSAqLwo+IC0JCWlmIChJU19UR0xfUkVWSUQocmVx dWVzdC0+aTkxNSwgVEdMX1JFVklEX0EwLCBUR0xfUkVWSURfQTApKSB7Cj4gLQkJCWZsYWdzID0g MDsKPiAtCQkJZmxhZ3MgfD0gUElQRV9DT05UUk9MX0NTX1NUQUxMOwo+IC0JCQlmbGFncyB8PSBQ SVBFX0NPTlRST0xfSERDX1BJUEVMSU5FX0ZMVVNIOwo+IC0KPiAtCQkJZmxhZ3MgfD0gUElQRV9D T05UUk9MX1NUT1JFX0RBVEFfSU5ERVg7Cj4gLQkJCWZsYWdzIHw9IFBJUEVfQ09OVFJPTF9RV19X UklURTsKPiAtCj4gLQkJCWNzID0gaW50ZWxfcmluZ19iZWdpbihyZXF1ZXN0LCA2KTsKPiAtCQkJ aWYgKElTX0VSUihjcykpCj4gLQkJCQlyZXR1cm4gUFRSX0VSUihjcyk7Cj4gLQo+IC0JCQljcyA9 IGdlbjhfZW1pdF9waXBlX2NvbnRyb2woY3MsIGZsYWdzLAo+IC0JCQkJCQkgICAgTFJDX1BQSFdT UF9TQ1JBVENIX0FERFIpOwo+IC0JCQlpbnRlbF9yaW5nX2FkdmFuY2UocmVxdWVzdCwgY3MpOwo+ IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgIC8qCj4gICAgKiBSZXNl cnZlIHNwYWNlIGZvciAyIE5PT1BzIGF0IHRoZSBlbmQgb2YgZWFjaCByZXF1ZXN0IHRvIGJlCj4g ICAgKiB1c2VkIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm90IGJlaW5nIGFsbG93ZWQgdG8gZG8gbGl0 ZQo+IEBAIC00MjkxLDExICsyOTUzLDEwIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZWxlYXNl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlleGVjbGlzdHNfc2h1dGRvd24o ZW5naW5lKTsKPiAgIAo+ICAgCWludGVsX2VuZ2luZV9jbGVhbnVwX2NvbW1vbihlbmdpbmUpOwo+ IC0JbHJjX2Rlc3Ryb3lfd2FfY3R4KGVuZ2luZSk7Cj4gKwlpbnRlbF9lbmdpbmVfZmluaV93b3Jr YXJvdW5kX2JiKGVuZ2luZSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQKPiAtbG9naWNhbF9y aW5nX2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArc3Rh dGljIHZvaWQgZXhlY2xpc3RzX2RlZmF1bHRfdmZ1bmNzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiAgIHsKPiAgIAkvKiBEZWZhdWx0IHZmdW5jcyB3aGljaCBjYW4gYmUgb3ZlcnJp ZGVuIGJ5IGVhY2ggZW5naW5lLiAqLwo+ICAgCj4gQEAgLTQzMDQsNyArMjk2NSw3IEBAIGxvZ2lj YWxfcmluZ19kZWZhdWx0X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4g ICAJZW5naW5lLT5jb3BzID0gJmV4ZWNsaXN0c19jb250ZXh0X29wczsKPiAgIAllbmdpbmUtPnJl cXVlc3RfYWxsb2MgPSBleGVjbGlzdHNfcmVxdWVzdF9hbGxvYzsKPiAgIAo+IC0JZW5naW5lLT5l bWl0X2ZsdXNoID0gZ2VuOF9lbWl0X2ZsdXNoOwo+ICsJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2Vu OF9lbWl0X2ZsdXNoX3hjczsKPiAgIAllbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iID0gZ2Vu OF9lbWl0X2luaXRfYnJlYWRjcnVtYjsKPiAgIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1i ID0gZ2VuOF9lbWl0X2ZpbmlfYnJlYWRjcnVtYjsKPiAgIAlpZiAoSU5URUxfR0VOKGVuZ2luZS0+ aTkxNSkgPj0gMTIpCj4gQEAgLTQzMjUsOCArMjk4Niw3IEBAIGxvZ2ljYWxfcmluZ19kZWZhdWx0 X3ZmdW5jcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJfQo+ICAgfQo+ICAg Cj4gLXN0YXRpYyBpbmxpbmUgdm9pZAo+IC1sb2dpY2FsX3JpbmdfZGVmYXVsdF9pcnFzKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArc3RhdGljIGlubGluZSB2b2lkIGV4ZWNsaXN0 c19kZWZhdWx0X2lycXMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgewo+ICAg CXVuc2lnbmVkIGludCBzaGlmdCA9IDA7Cj4gICAKPiBAQCAtNDM1MiwxNSArMzAxMiwxOSBAQCBz dGF0aWMgdm9pZCByY3Nfc3VibWlzc2lvbl9vdmVycmlkZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gICB7Cj4gICAJc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgewo+ ICAgCWNhc2UgMTI6Cj4gLQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF9y ZW5kZXI7Cj4gKwkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2VuMTJfZW1pdF9mbHVzaF9yY3M7Cj4g ICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIgPSBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRj cnVtYl9yY3M7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgMTE6Cj4gLQkJZW5naW5lLT5lbWl0X2Zs dXNoID0gZ2VuMTFfZW1pdF9mbHVzaF9yZW5kZXI7Cj4gKwkJZW5naW5lLT5lbWl0X2ZsdXNoID0g Z2VuMTFfZW1pdF9mbHVzaF9yY3M7Cj4gICAJCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIg PSBnZW4xMV9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3M7Cj4gICAJCWJyZWFrOwo+ICsJY2FzZSA5 Ogo+ICsJCWVuZ2luZS0+ZW1pdF9mbHVzaCA9IGdlbjlfZW1pdF9mbHVzaF9yY3M7Cj4gKwkJZW5n aW5lLT5lbWl0X2ZpbmlfYnJlYWRjcnVtYiA9IGdlbjhfZW1pdF9maW5pX2JyZWFkY3J1bWJfcmNz Owo+ICsJCWJyZWFrOwo+ICAgCWRlZmF1bHQ6Cj4gLQkJZW5naW5lLT5lbWl0X2ZsdXNoID0gZ2Vu OF9lbWl0X2ZsdXNoX3JlbmRlcjsKPiArCQllbmdpbmUtPmVtaXRfZmx1c2ggPSBnZW44X2VtaXRf Zmx1c2hfcmNzOwo+ICAgCQllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iID0gZ2VuOF9lbWl0 X2ZpbmlfYnJlYWRjcnVtYl9yY3M7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiBAQCAtNDM3OCwxMyAr MzA0MiwxMyBAQCBpbnQgaW50ZWxfZXhlY2xpc3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAgCXRpbWVyX3NldHVwKCZlbmdpbmUtPmV4ZWNsaXN0 cy50aW1lciwgZXhlY2xpc3RzX3RpbWVzbGljZSwgMCk7Cj4gICAJdGltZXJfc2V0dXAoJmVuZ2lu ZS0+ZXhlY2xpc3RzLnByZWVtcHQsIGV4ZWNsaXN0c19wcmVlbXB0LCAwKTsKPiAgIAo+IC0JbG9n aWNhbF9yaW5nX2RlZmF1bHRfdmZ1bmNzKGVuZ2luZSk7Cj4gLQlsb2dpY2FsX3JpbmdfZGVmYXVs dF9pcnFzKGVuZ2luZSk7Cj4gKwlleGVjbGlzdHNfZGVmYXVsdF92ZnVuY3MoZW5naW5lKTsKPiAr CWV4ZWNsaXN0c19kZWZhdWx0X2lycXMoZW5naW5lKTsKPiAgIAo+ICAgCWlmIChlbmdpbmUtPmNs YXNzID09IFJFTkRFUl9DTEFTUykKPiAgIAkJcmNzX3N1Ym1pc3Npb25fb3ZlcnJpZGUoZW5naW5l KTsKPiAgIAo+IC0JaWYgKGludGVsX2luaXRfd29ya2Fyb3VuZF9iYihlbmdpbmUpKQo+ICsJaWYg KGludGVsX2VuZ2luZV9pbml0X3dvcmthcm91bmRfYmIoZW5naW5lKSkKPiAgIAkJLyoKPiAgIAkJ ICogV2UgY29udGludWUgZXZlbiBpZiB3ZSBmYWlsIHRvIGluaXRpYWxpemUgV0EgYmF0Y2gKPiAg IAkJICogYmVjYXVzZSB3ZSBvbmx5IGV4cGVjdCByYXJlIGdsaXRjaGVzIGJ1dCBub3RoaW5nCj4g QEAgLTQ0MjEsMTM3ICszMDg1LDYgQEAgaW50IGludGVsX2V4ZWNsaXN0c19zdWJtaXNzaW9uX3Nl dHVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlyZXR1cm4gMDsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgdTMyIGludGVsX2xyX2luZGlyZWN0X2N0eF9vZmZzZXQoY29uc3Qgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQl1MzIgaW5kaXJlY3RfY3R4X29m ZnNldDsKPiAtCj4gLQlzd2l0Y2ggKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKSB7Cj4gLQlkZWZh dWx0Ogo+IC0JCU1JU1NJTkdfQ0FTRShJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSk7Cj4gLQkJLyog ZmFsbCB0aHJvdWdoICovCj4gLQljYXNlIDEyOgo+IC0JCWluZGlyZWN0X2N0eF9vZmZzZXQgPQo+ IC0JCQlHRU4xMl9DVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKPiAtCQlicmVh azsKPiAtCWNhc2UgMTE6Cj4gLQkJaW5kaXJlY3RfY3R4X29mZnNldCA9Cj4gLQkJCUdFTjExX0NU WF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF9ERUZBVUxUOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAx MDoKPiAtCQlpbmRpcmVjdF9jdHhfb2Zmc2V0ID0KPiAtCQkJR0VOMTBfQ1RYX1JDU19JTkRJUkVD VF9DVFhfT0ZGU0VUX0RFRkFVTFQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDk6Cj4gLQkJaW5kaXJl Y3RfY3R4X29mZnNldCA9Cj4gLQkJCUdFTjlfQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RF RkFVTFQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIDg6Cj4gLQkJaW5kaXJlY3RfY3R4X29mZnNldCA9 Cj4gLQkJCUdFTjhfQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7Cj4gLQkJYnJl YWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGluZGlyZWN0X2N0eF9vZmZzZXQ7Cj4gLX0KPiAtCj4g LQo+IC1zdGF0aWMgdm9pZCBpbml0X2NvbW1vbl9yZWdfc3RhdGUodTMyICogY29uc3QgcmVncywK PiAtCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJICBj b25zdCBzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZywKPiAtCQkJCSAgYm9vbCBpbmhpYml0KQo+IC17 Cj4gLQl1MzIgY3RsOwo+IC0KPiAtCWN0bCA9IF9NQVNLRURfQklUX0VOQUJMRShDVFhfQ1RSTF9J TkhJQklUX1NZTl9DVFhfU1dJVENIKTsKPiAtCWN0bCB8PSBfTUFTS0VEX0JJVF9ESVNBQkxFKENU WF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUKTsKPiAtCWlmIChpbmhpYml0KQo+IC0J CWN0bCB8PSBDVFhfQ1RSTF9FTkdJTkVfQ1RYX1JFU1RPUkVfSU5ISUJJVDsKPiAtCWlmIChJTlRF TF9HRU4oZW5naW5lLT5pOTE1KSA8IDExKQo+IC0JCWN0bCB8PSBfTUFTS0VEX0JJVF9ESVNBQkxF KENUWF9DVFJMX0VOR0lORV9DVFhfU0FWRV9JTkhJQklUIHwKPiAtCQkJCQkgICBDVFhfQ1RSTF9S U19DVFhfRU5BQkxFKTsKPiAtCXJlZ3NbQ1RYX0NPTlRFWFRfQ09OVFJPTF0gPSBjdGw7Cj4gLQo+ IC0JcmVnc1tDVFhfUklOR19DVExdID0gUklOR19DVExfU0laRShyaW5nLT5zaXplKSB8IFJJTkdf VkFMSUQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGluaXRfd2FfYmJfcmVnX3N0YXRlKHUzMiAq IGNvbnN0IHJlZ3MsCj4gLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+IC0JCQkJIHUzMiBwb3NfYmJfcGVyX2N0eCkKPiAtewo+IC0JY29uc3Qgc3RydWN0IGk5MTVf Y3R4X3dvcmthcm91bmRzICogY29uc3Qgd2FfY3R4ID0gJmVuZ2luZS0+d2FfY3R4Owo+IC0KPiAt CWlmICh3YV9jdHgtPnBlcl9jdHguc2l6ZSkgewo+IC0JCWNvbnN0IHUzMiBnZ3R0X29mZnNldCA9 IGk5MTVfZ2d0dF9vZmZzZXQod2FfY3R4LT52bWEpOwo+IC0KPiAtCQlyZWdzW3Bvc19iYl9wZXJf Y3R4XSA9Cj4gLQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+cGVyX2N0eC5vZmZzZXQpIHwgMHgw MTsKPiAtCX0KPiAtCj4gLQlpZiAod2FfY3R4LT5pbmRpcmVjdF9jdHguc2l6ZSkgewo+IC0JCWNv bnN0IHUzMiBnZ3R0X29mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQod2FfY3R4LT52bWEpOwo+IC0K PiAtCQlyZWdzW3Bvc19iYl9wZXJfY3R4ICsgMl0gPQo+IC0JCQkoZ2d0dF9vZmZzZXQgKyB3YV9j dHgtPmluZGlyZWN0X2N0eC5vZmZzZXQpIHwKPiAtCQkJKHdhX2N0eC0+aW5kaXJlY3RfY3R4LnNp emUgLyBDQUNIRUxJTkVfQllURVMpOwo+IC0KPiAtCQlyZWdzW3Bvc19iYl9wZXJfY3R4ICsgNF0g PQo+IC0JCQlpbnRlbF9scl9pbmRpcmVjdF9jdHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKPiAtCX0K PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaW5pdF9wcGd0dF9yZWdfc3RhdGUodTMyICpyZWdzLCBj b25zdCBzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQpCj4gLXsKPiAtCWlmIChpOTE1X3ZtX2lzXzRs dmwoJnBwZ3R0LT52bSkpIHsKPiAtCQkvKiA2NGIgUFBHVFQgKDQ4Yml0IGNhbm9uaWNhbCkKPiAt CQkgKiBQRFAwX0RFU0NSSVBUT1IgY29udGFpbnMgdGhlIGJhc2UgYWRkcmVzcyB0byBQTUw0IGFu ZAo+IC0JCSAqIG90aGVyIFBEUCBEZXNjcmlwdG9ycyBhcmUgaWdub3JlZC4KPiAtCQkgKi8KPiAt CQlBU1NJR05fQ1RYX1BNTDQocHBndHQsIHJlZ3MpOwo+IC0JfSBlbHNlIHsKPiAtCQlBU1NJR05f Q1RYX1BEUChwcGd0dCwgcmVncywgMyk7Cj4gLQkJQVNTSUdOX0NUWF9QRFAocHBndHQsIHJlZ3Ms IDIpOwo+IC0JCUFTU0lHTl9DVFhfUERQKHBwZ3R0LCByZWdzLCAxKTsKPiAtCQlBU1NJR05fQ1RY X1BEUChwcGd0dCwgcmVncywgMCk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgaTkx NV9wcGd0dCAqdm1fYWxpYXMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gLXsKPiAt CWlmIChpOTE1X2lzX2dndHQodm0pKQo+IC0JCXJldHVybiBpOTE1X3ZtX3RvX2dndHQodm0pLT5h bGlhczsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gaTkxNV92bV90b19wcGd0dCh2bSk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIGV4ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ3MsCj4gLQkJ CQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAtCQkJCSAgICAgY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkJICAgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfcmluZyAqcmluZywKPiAtCQkJCSAgICAgYm9vbCBpbmhpYml0KQo+IC17Cj4gLQkvKgo+ IC0JICogQSBjb250ZXh0IGlzIGFjdHVhbGx5IGEgYmlnIGJhdGNoIGJ1ZmZlciB3aXRoIHNldmVy YWwKPiAtCSAqIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmRzIGZvbGxvd2VkIGJ5IChyZWcs IHZhbHVlKSBwYWlycy4gVGhlCj4gLQkgKiB2YWx1ZXMgd2UgYXJlIHNldHRpbmcgaGVyZSBhcmUg b25seSBmb3IgdGhlIGZpcnN0IGNvbnRleHQgcmVzdG9yZToKPiAtCSAqIG9uIGEgc3Vic2VxdWVu dCBzYXZlLCB0aGUgR1BVIHdpbGwgcmVjcmVhdGUgdGhpcyBiYXRjaGJ1ZmZlciB3aXRoIG5ldwo+ IC0JICogdmFsdWVzIChpbmNsdWRpbmcgYWxsIHRoZSBtaXNzaW5nIE1JX0xPQURfUkVHSVNURVJf SU1NIGNvbW1hbmRzIHRoYXQKPiAtCSAqIHdlIGFyZSBub3QgaW5pdGlhbGl6aW5nIGhlcmUpLgo+ IC0JICoKPiAtCSAqIE11c3Qga2VlcCBjb25zaXN0ZW50IHdpdGggdmlydHVhbF91cGRhdGVfcmVn aXN0ZXJfb2Zmc2V0cygpLgo+IC0JICovCj4gLQlzZXRfb2Zmc2V0cyhyZWdzLCByZWdfb2Zmc2V0 cyhlbmdpbmUpLCBlbmdpbmUsIGluaGliaXQpOwo+IC0KPiAtCWluaXRfY29tbW9uX3JlZ19zdGF0 ZShyZWdzLCBlbmdpbmUsIHJpbmcsIGluaGliaXQpOwo+IC0JaW5pdF9wcGd0dF9yZWdfc3RhdGUo cmVncywgdm1fYWxpYXMoY2UtPnZtKSk7Cj4gLQo+IC0JaW5pdF93YV9iYl9yZWdfc3RhdGUocmVn cywgZW5naW5lLAo+IC0JCQkgICAgIElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyID8KPiAt CQkJICAgICBHRU4xMl9DVFhfQkJfUEVSX0NUWF9QVFIgOgo+IC0JCQkgICAgIENUWF9CQl9QRVJf Q1RYX1BUUik7Cj4gLQo+IC0JX19yZXNldF9zdG9wX3JpbmcocmVncywgZW5naW5lKTsKPiAtfQo+ IC0KPiAgIHN0YXRpYyBpbnQKPiAgIHBvcHVsYXRlX2xyX2NvbnRleHQoc3RydWN0IGludGVsX2Nv bnRleHQgKmNlLAo+ICAgCQkgICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9vYmos Cj4gQEAgLTQ1ODksNyArMzEyMiw3IEBAIHBvcHVsYXRlX2xyX2NvbnRleHQoc3RydWN0IGludGVs X2NvbnRleHQgKmNlLAo+ICAgCj4gICAJLyogVGhlIHNlY29uZCBwYWdlIG9mIHRoZSBjb250ZXh0 IG9iamVjdCBjb250YWlucyBzb21lIGZpZWxkcyB3aGljaCBtdXN0Cj4gICAJICogYmUgc2V0IHVw IHByaW9yIHRvIHRoZSBmaXJzdCBleGVjdXRpb24uICovCj4gLQlleGVjbGlzdHNfaW5pdF9yZWdf c3RhdGUodmFkZHIgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUsCj4gKwlpbnRlbF9scmNfaW5p dF9yZWdfc3RhdGUodmFkZHIgKyBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUsCj4gICAJCQkJIGNl LCBlbmdpbmUsIHJpbmcsIGluaGliaXQpOwo+ICAgCj4gICAJcmV0ID0gMDsKPiBAQCAtNTI1Nywz MSArMzc5MCw2IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3Nob3dfcmVxdWVzdHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2lu ZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKPiAgIH0KPiAgIAo+IC12b2lkIGludGVsX2xyX2NvbnRl eHRfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICAgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAo+IC0JCQkgICAgdTMyIGhlYWQsCj4gLQkJCSAgICBib29sIHNj cnViKQo+IC17Cj4gLQlHRU1fQlVHX09OKCFpbnRlbF9jb250ZXh0X2lzX3Bpbm5lZChjZSkpOwo+ IC0KPiAtCS8qCj4gLQkgKiBXZSB3YW50IGEgc2ltcGxlIGNvbnRleHQgKyByaW5nIHRvIGV4ZWN1 dGUgdGhlIGJyZWFkY3J1bWIgdXBkYXRlLgo+IC0JICogV2UgY2Fubm90IHJlbHkgb24gdGhlIGNv bnRleHQgYmVpbmcgaW50YWN0IGFjcm9zcyB0aGUgR1BVIGhhbmcsCj4gLQkgKiBzbyBjbGVhciBp dCBhbmQgcmVidWlsZCBqdXN0IHdoYXQgd2UgbmVlZCBmb3IgdGhlIGJyZWFkY3J1bWIuCj4gLQkg KiBBbGwgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhpcyBjb250ZXh0IHdpbGwgYmUgemFwcGVkLCBh bmQgYW55Cj4gLQkgKiBmdXR1cmUgcmVxdWVzdCB3aWxsIGJlIGFmdGVyIHVzZXJzcGFjZSBoYXMg aGFkIHRoZSBvcHBvcnR1bml0eQo+IC0JICogdG8gcmVjcmVhdGUgaXRzIG93biBzdGF0ZS4KPiAt CSAqLwo+IC0JaWYgKHNjcnViKQo+IC0JCXJlc3RvcmVfZGVmYXVsdF9zdGF0ZShjZSwgZW5naW5l KTsKPiAtCj4gLQkvKiBSZXJ1biB0aGUgcmVxdWVzdDsgaXRzIHBheWxvYWQgaGFzIGJlZW4gbmV1 dGVyZWQgKGlmIGd1aWx0eSkuICovCj4gLQljZS0+cmluZy0+aGVhZCA9IGhlYWQ7Cj4gLQlpbnRl bF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7Cj4gLQo+IC0JX19leGVjbGlzdHNfdXBkYXRl X3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKPiAtfQo+IC0KPiAgIGJvb2wKPiAgIGludGVsX2VuZ2lu ZV9pbl9leGVjbGlzdHNfc3VibWlzc2lvbl9tb2RlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mYTEyZDcxYTE5OWUKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiBA QCAtMCwwICsxLDgzMCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4gKyAqLwo+ICsKPiAr LyoqCj4gKyAqIERPQzogTG9naWNhbCBSaW5ncywgTG9naWNhbCBSaW5nIENvbnRleHRzIGFuZCBF eGVjbGlzdHMKPiArICoKPiArICogTW90aXZhdGlvbjoKPiArICogR0VOOCBicmluZ3MgYW4gZXhw YW5zaW9uIG9mIHRoZSBIVyBjb250ZXh0czogIkxvZ2ljYWwgUmluZyBDb250ZXh0cyIuCj4gKyAq IFRoZXNlIGV4cGFuZGVkIGNvbnRleHRzIGVuYWJsZSBhIG51bWJlciBvZiBuZXcgYWJpbGl0aWVz LCBlc3BlY2lhbGx5Cj4gKyAqICJFeGVjbGlzdHMiIChhbHNvIGltcGxlbWVudGVkIGluIHRoaXMg ZmlsZSkuCj4gKyAqCj4gKyAqIE9uZSBvZiB0aGUgbWFpbiBkaWZmZXJlbmNlcyB3aXRoIHRoZSBs ZWdhY3kgSFcgY29udGV4dHMgaXMgdGhhdCBsb2dpY2FsCj4gKyAqIHJpbmcgY29udGV4dHMgaW5j b3Jwb3JhdGUgbWFueSBtb3JlIHRoaW5ncyB0byB0aGUgY29udGV4dCdzIHN0YXRlLCBsaWtlCj4g KyAqIFBEUHMgb3IgcmluZ2J1ZmZlciBjb250cm9sIHJlZ2lzdGVyczoKPiArICoKPiArICogVGhl IHJlYXNvbiB3aHkgUERQcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNvbnRleHQgaXMgc3RyYWlnaHRm b3J3YXJkOiBhcwo+ICsgKiBQUEdUVHMgKHBlci1wcm9jZXNzIEdUVHMpIGFyZSBhY3R1YWxseSBw ZXItY29udGV4dCwgaGF2aW5nIHRoZSBQRFBzCj4gKyAqIGNvbnRhaW5lZCB0aGVyZSBtZWFuIHlv dSBkb24ndCBuZWVkIHRvIGRvIGEgcHBndHQtPnN3aXRjaF9tbSB5b3Vyc2VsZiwKPiArICogaW5z dGVhZCwgdGhlIEdQVSB3aWxsIGRvIGl0IGZvciB5b3Ugb24gdGhlIGNvbnRleHQgc3dpdGNoLgo+ ICsgKgo+ICsgKiBCdXQsIHdoYXQgYWJvdXQgdGhlIHJpbmdidWZmZXIgY29udHJvbCByZWdpc3Rl cnMgKGhlYWQsIHRhaWwsIGV0Yy4uKT8KPiArICogc2hvdWxkbid0IHdlIGp1c3QgbmVlZCBhIHNl dCBvZiB0aG9zZSBwZXIgZW5naW5lIGNvbW1hbmQgc3RyZWFtZXI/IFRoaXMgaXMKPiArICogd2hl cmUgdGhlIG5hbWUgIkxvZ2ljYWwgUmluZ3MiIHN0YXJ0cyB0byBtYWtlIHNlbnNlOiBieSB2aXJ0 dWFsaXppbmcgdGhlCj4gKyAqIHJpbmdzLCB0aGUgZW5naW5lIGNzIHNoaWZ0cyB0byBhIG5ldyAi cmluZyBidWZmZXIiIHdpdGggZXZlcnkgY29udGV4dAo+ICsgKiBzd2l0Y2guIFdoZW4geW91IHdh bnQgdG8gc3VibWl0IGEgd29ya2xvYWQgdG8gdGhlIEdQVSB5b3U6IEEpIGNob29zZSB5b3VyCj4g KyAqIGNvbnRleHQsIEIpIGZpbmQgaXRzIGFwcHJvcHJpYXRlIHZpcnR1YWxpemVkIHJpbmcsIEMp IHdyaXRlIGNvbW1hbmRzIHRvIGl0Cj4gKyAqIGFuZCB0aGVuLCBmaW5hbGx5LCBEKSB0ZWxsIHRo ZSBHUFUgdG8gc3dpdGNoIHRvIHRoYXQgY29udGV4dC4KPiArICoKPiArICogSW5zdGVhZCBvZiB0 aGUgbGVnYWN5IE1JX1NFVF9DT05URVhULCB0aGUgd2F5IHlvdSB0ZWxsIHRoZSBHUFUgdG8gc3dp dGNoCj4gKyAqIHRvIGEgY29udGV4dHMgaXMgdmlhIGEgY29udGV4dCBleGVjdXRpb24gbGlzdCwg ZXJnbyAiRXhlY2xpc3RzIi4KPiArICoKPiArICogTFJDIGltcGxlbWVudGF0aW9uOgo+ICsgKiBS ZWdhcmRpbmcgdGhlIGNyZWF0aW9uIG9mIGNvbnRleHRzLCB3ZSBoYXZlOgo+ICsgKgo+ICsgKiAt IE9uZSBnbG9iYWwgZGVmYXVsdCBjb250ZXh0Lgo+ICsgKiAtIE9uZSBsb2NhbCBkZWZhdWx0IGNv bnRleHQgZm9yIGVhY2ggb3BlbmVkIGZkLgo+ICsgKiAtIE9uZSBsb2NhbCBleHRyYSBjb250ZXh0 IGZvciBlYWNoIGNvbnRleHQgY3JlYXRlIGlvY3RsIGNhbGwuCj4gKyAqCj4gKyAqIE5vdyB0aGF0 IHJpbmdidWZmZXJzIGJlbG9uZyBwZXItY29udGV4dCAoYW5kIG5vdCBwZXItZW5naW5lLCBsaWtl IGJlZm9yZSkKPiArICogYW5kIHRoYXQgY29udGV4dHMgYXJlIHVuaXF1ZWx5IHRpZWQgdG8gYSBn aXZlbiBlbmdpbmUgKGFuZCBub3QgcmV1c2FibGUsCj4gKyAqIGxpa2UgYmVmb3JlKSB3ZSBuZWVk Ogo+ICsgKgo+ICsgKiAtIE9uZSByaW5nYnVmZmVyIHBlci1lbmdpbmUgaW5zaWRlIGVhY2ggY29u dGV4dC4KPiArICogLSBPbmUgYmFja2luZyBvYmplY3QgcGVyLWVuZ2luZSBpbnNpZGUgZWFjaCBj b250ZXh0Lgo+ICsgKgo+ICsgKiBUaGUgZ2xvYmFsIGRlZmF1bHQgY29udGV4dCBzdGFydHMgaXRz IGxpZmUgd2l0aCB0aGVzZSBuZXcgb2JqZWN0cyBmdWxseQo+ICsgKiBhbGxvY2F0ZWQgYW5kIHBv cHVsYXRlZC4gVGhlIGxvY2FsIGRlZmF1bHQgY29udGV4dCBmb3IgZWFjaCBvcGVuZWQgZmQgaXMK PiArICogbW9yZSBjb21wbGV4LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgYXQgY3JlYXRpb24gdGlt ZSB3aGljaCBlbmdpbmUgaXMgZ29pbmcKPiArICogdG8gdXNlIHRoZW0uIFRvIGhhbmRsZSB0aGlz LCB3ZSBoYXZlIGltcGxlbWVudGVkIGEgZGVmZXJyZWQgY3JlYXRpb24gb2YgTFIKPiArICogY29u dGV4dHM6Cj4gKyAqCj4gKyAqIFRoZSBsb2NhbCBjb250ZXh0IHN0YXJ0cyBpdHMgbGlmZSBhcyBh IGhvbGxvdyBvciBibGFuayBob2xkZXIsIHRoYXQgb25seQo+ICsgKiBnZXRzIHBvcHVsYXRlZCBm b3IgYSBnaXZlbiBlbmdpbmUgb25jZSB3ZSByZWNlaXZlIGFuIGV4ZWNidWZmZXIuIElmIGxhdGVy Cj4gKyAqIG9uIHdlIHJlY2VpdmUgYW5vdGhlciBleGVjYnVmZmVyIGlvY3RsIGZvciB0aGUgc2Ft ZSBjb250ZXh0IGJ1dCBhIGRpZmZlcmVudAo+ICsgKiBlbmdpbmUsIHdlIGFsbG9jYXRlL3BvcHVs YXRlIGEgbmV3IHJpbmdidWZmZXIgYW5kIGNvbnRleHQgYmFja2luZyBvYmplY3QgYW5kCj4gKyAq IHNvIG9uLgo+ICsgKgo+ICsgKiBGaW5hbGx5LCByZWdhcmRpbmcgbG9jYWwgY29udGV4dHMgY3Jl YXRlZCB1c2luZyB0aGUgaW9jdGwgY2FsbDogYXMgdGhleSBhcmUKPiArICogb25seSBhbGxvd2Vk IHdpdGggdGhlIHJlbmRlciByaW5nLCB3ZSBjYW4gYWxsb2NhdGUgJiBwb3B1bGF0ZSB0aGVtIHJp Z2h0Cj4gKyAqIGF3YXkgKG5vIG5lZWQgdG8gZGVmZXIgYW55dGhpbmcsIGF0IGxlYXN0IGZvciBu b3cpLgo+ICsgKgo+ICsgKiBFeGVjbGlzdHMgaW1wbGVtZW50YXRpb246Cj4gKyAqIEV4ZWNsaXN0 cyBhcmUgdGhlIG5ldyBtZXRob2QgYnkgd2hpY2gsIG9uIGdlbjgrIGhhcmR3YXJlLCB3b3JrbG9h ZHMgYXJlCj4gKyAqIHN1Ym1pdHRlZCBmb3IgZXhlY3V0aW9uIChhcyBvcHBvc2VkIHRvIHRoZSBs ZWdhY3ksIHJpbmdidWZmZXItYmFzZWQsIG1ldGhvZCkuCj4gKyAqIFRoaXMgbWV0aG9kIHdvcmtz IGFzIGZvbGxvd3M6Cj4gKyAqCj4gKyAqIFdoZW4gYSByZXF1ZXN0IGlzIGNvbW1pdHRlZCwgaXRz IGNvbW1hbmRzICh0aGUgQkIgc3RhcnQgYW5kIGFueSBsZWFkaW5nIG9yCj4gKyAqIHRyYWlsaW5n IGNvbW1hbmRzLCBsaWtlIHRoZSBzZXFubyBicmVhZGNydW1icykgYXJlIHBsYWNlZCBpbiB0aGUg cmluZ2J1ZmZlcgo+ICsgKiBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuIFRoZSB0YWlsIHBv aW50ZXIgaW4gdGhlIGhhcmR3YXJlIGNvbnRleHQgaXMgbm90Cj4gKyAqIHVwZGF0ZWQgYXQgdGhp cyB0aW1lLCBidXQgaW5zdGVhZCwga2VwdCBieSB0aGUgZHJpdmVyIGluIHRoZSByaW5nYnVmZmVy Cj4gKyAqIHN0cnVjdHVyZS4gQSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoaXMgcmVxdWVzdCBp cyBhZGRlZCB0byBhIHJlcXVlc3QgcXVldWUKPiArICogZm9yIHRoZSBhcHByb3ByaWF0ZSBlbmdp bmU6IHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgY29udGV4dCdzCj4gKyAq IHRhaWwgYWZ0ZXIgdGhlIHJlcXVlc3Qgd2FzIHdyaXR0ZW4gdG8gdGhlIHJpbmcgYnVmZmVyIGFu ZCBhIHBvaW50ZXIgdG8gdGhlCj4gKyAqIGNvbnRleHQgaXRzZWxmLgo+ICsgKgo+ICsgKiBJZiB0 aGUgZW5naW5lJ3MgcmVxdWVzdCBxdWV1ZSB3YXMgZW1wdHkgYmVmb3JlIHRoZSByZXF1ZXN0IHdh cyBhZGRlZCwgdGhlCj4gKyAqIHF1ZXVlIGlzIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4gT3RoZXJ3 aXNlIHRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBkdXJpbmcKPiArICogYSBjb250ZXh0IHN3 aXRjaCBpbnRlcnJ1cHQuIEluIGFueSBjYXNlLCBlbGVtZW50cyBvbiB0aGUgcXVldWUgd2lsbCBn ZXQgc2VudAo+ICsgKiAoaW4gcGFpcnMpIHRvIHRoZSBHUFUncyBFeGVjTGlzdHMgU3VibWl0IFBv cnQgKEVMU1AsIGZvciBzaG9ydCkgd2l0aCBhCj4gKyAqIGdsb2JhbGx5IHVuaXF1ZSAyMC1iaXRz IHN1Ym1pc3Npb24gSUQuCj4gKyAqCj4gKyAqIFdoZW4gZXhlY3V0aW9uIG9mIGEgcmVxdWVzdCBj b21wbGV0ZXMsIHRoZSBHUFUgdXBkYXRlcyB0aGUgY29udGV4dCBzdGF0dXMKPiArICogYnVmZmVy IHdpdGggYSBjb250ZXh0IGNvbXBsZXRlIGV2ZW50IGFuZCBnZW5lcmF0ZXMgYSBjb250ZXh0IHN3 aXRjaAo+ICsgKiBpbnRlcnJ1cHQuIER1cmluZyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCB0aGUg ZHJpdmVyIGV4YW1pbmVzIHRoZSBldmVudHMgaW4KPiArICogdGhlIGJ1ZmZlcjogZm9yIGVhY2gg Y29udGV4dCBjb21wbGV0ZSBldmVudCwgaWYgdGhlIGFubm91bmNlZCBJRCBtYXRjaGVzCj4gKyAq IHRoYXQgb24gdGhlIGhlYWQgb2YgdGhlIHJlcXVlc3QgcXVldWUsIHRoZW4gdGhhdCByZXF1ZXN0 IGlzIHJldGlyZWQgYW5kCj4gKyAqIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCj4gKyAqCj4gKyAq IEFmdGVyIHByb2Nlc3NpbmcsIGlmIGFueSByZXF1ZXN0cyB3ZXJlIHJldGlyZWQgYW5kIHRoZSBx dWV1ZSBpcyBub3QgZW1wdHkKPiArICogdGhlbiBhIG5ldyBleGVjdXRpb24gbGlzdCBjYW4gYmUg c3VibWl0dGVkLiBUaGUgdHdvIHJlcXVlc3RzIGF0IHRoZSBmcm9udCBvZgo+ICsgKiB0aGUgcXVl dWUgYXJlIG5leHQgdG8gYmUgc3VibWl0dGVkIGJ1dCBzaW5jZSBhIGNvbnRleHQgbWF5IG5vdCBv Y2N1ciB0d2ljZQo+ICsgKiBpbiBhbiBleGVjdXRpb24gbGlzdCwgaWYgc3Vic2VxdWVudCByZXF1 ZXN0cyBoYXZlIHRoZSBzYW1lIElEIGFzIHRoZSBmaXJzdAo+ICsgKiB0aGVuIHRoZSB0d28gcmVx dWVzdHMgbXVzdCBiZSBjb21iaW5lZC4gVGhpcyBpcyBkb25lIHNpbXBseSBieSBkaXNjYXJkaW5n Cj4gKyAqIHJlcXVlc3RzIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB1bnRpbCBlaXRoZXIgb25s eSBvbmUgcmVxdWVzdHMgaXMgbGVmdAo+ICsgKiAoaW4gd2hpY2ggY2FzZSB3ZSB1c2UgYSBOVUxM IHNlY29uZCBjb250ZXh0KSBvciB0aGUgZmlyc3QgdHdvIHJlcXVlc3RzIGhhdmUKPiArICogdW5p cXVlIElEcy4KPiArICoKPiArICogQnkgYWx3YXlzIGV4ZWN1dGluZyB0aGUgZmlyc3QgdHdvIHJl cXVlc3RzIGluIHRoZSBxdWV1ZSB0aGUgZHJpdmVyIGVuc3VyZXMKPiArICogdGhhdCB0aGUgR1BV IGlzIGtlcHQgYXMgYnVzeSBhcyBwb3NzaWJsZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBzaW5nbGUg Y29udGV4dAo+ICsgKiBjb21wbGV0ZXMgYnV0IGEgc2Vjb25kIGNvbnRleHQgaXMgc3RpbGwgZXhl Y3V0aW5nLCB0aGUgcmVxdWVzdCBmb3IgdGhpcwo+ICsgKiBzZWNvbmQgY29udGV4dCB3aWxsIGJl IGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSB3aGVuIHdlIHJlbW92ZSB0aGUgZmlyc3QKPiArICog b25lLiBUaGlzIHJlcXVlc3Qgd2lsbCB0aGVuIGJlIHJlc3VibWl0dGVkIGFsb25nIHdpdGggYSBu ZXcgcmVxdWVzdCBmb3IgYQo+ICsgKiBkaWZmZXJlbnQgY29udGV4dCwgd2hpY2ggd2lsbCBjYXVz ZSB0aGUgaGFyZHdhcmUgdG8gY29udGludWUgZXhlY3V0aW5nIHRoZQo+ICsgKiBzZWNvbmQgcmVx dWVzdCBhbmQgcXVldWUgdGhlIG5ldyByZXF1ZXN0ICh0aGUgR1BVIGRldGVjdHMgdGhlIGNvbmRp dGlvbiBvZiBhCj4gKyAqIGNvbnRleHQgZ2V0dGluZyBwcmVlbXB0ZWQgd2l0aCB0aGUgc2FtZSBj b250ZXh0IGFuZCBvcHRpbWl6ZXMgdGhlIGNvbnRleHQKPiArICogc3dpdGNoIGZsb3cgYnkgbm90 IGRvaW5nIHByZWVtcHRpb24sIGJ1dCBqdXN0IHNhbXBsaW5nIHRoZSBuZXcgdGFpbCBwb2ludGVy KS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW0uaD4KPiArCj4gKyNpbmNsdWRlICJp OTE1X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9wZXJmLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9j b250ZXh0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9lbmdpbmUuaCIKPiArI2luY2x1ZGUgImludGVs X2xyYy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfbHJjX3JlZy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxf cmluZy5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfc3NldS5oIgo+ICsKPiArc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQgZHdvcmRfaW5fcGFnZSh2b2lkICphZGRyKQo+ICt7Cj4gKwlyZXR1cm4gb2Zm c2V0X2luX3BhZ2UoYWRkcikgLyBzaXplb2YodTMyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg c2V0X29mZnNldHModTMyICpyZWdzLAo+ICsJCQljb25zdCB1OCAqZGF0YSwKPiArCQkJY29uc3Qg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQlib29sIGNsZWFyKQo+ICsjZGVm aW5lIE5PUCh4KSAoQklUKDcpIHwgKHgpKQo+ICsjZGVmaW5lIExSSShjb3VudCwgZmxhZ3MpICgo ZmxhZ3MpIDw8IDYgfCAoY291bnQpIHwgQlVJTERfQlVHX09OX1pFUk8oY291bnQgPj0gQklUKDYp KSkKPiArI2RlZmluZSBQT1NURUQgQklUKDApCj4gKyNkZWZpbmUgUkVHKHgpICgoKHgpID4+IDIp IHwgQlVJTERfQlVHX09OX1pFUk8oeCA+PSAweDIwMCkpCj4gKyNkZWZpbmUgUkVHMTYoeCkgXAo+ ICsJKCgoeCkgPj4gOSkgfCBCSVQoNykgfCBCVUlMRF9CVUdfT05fWkVSTyh4ID49IDB4MTAwMDAp KSwgXAo+ICsJKCgoeCkgPj4gMikgJiAweDdmKQo+ICsjZGVmaW5lIEVORCh4KSAwLCAoeCkKPiAr ewo+ICsJY29uc3QgdTMyIGJhc2UgPSBlbmdpbmUtPm1taW9fYmFzZTsKPiArCj4gKwl3aGlsZSAo KmRhdGEpIHsKPiArCQl1OCBjb3VudCwgZmxhZ3M7Cj4gKwo+ICsJCWlmICgqZGF0YSAmIEJJVCg3 KSkgeyAvKiBza2lwICovCj4gKwkJCWNvdW50ID0gKmRhdGErKyAmIH5CSVQoNyk7Cj4gKwkJCWlm IChjbGVhcikKPiArCQkJCW1lbXNldDMyKHJlZ3MsIE1JX05PT1AsIGNvdW50KTsKPiArCQkJcmVn cyArPSBjb3VudDsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQljb3VudCA9ICpkYXRh ICYgMHgzZjsKPiArCQlmbGFncyA9ICpkYXRhID4+IDY7Cj4gKwkJZGF0YSsrOwo+ICsKPiArCQkq cmVncyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKGNvdW50KTsKPiArCQlpZiAoZmxhZ3MgJiBQT1NU RUQpCj4gKwkJCSpyZWdzIHw9IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4gKwkJaWYgKElOVEVMX0dF TihlbmdpbmUtPmk5MTUpID49IDExKQo+ICsJCQkqcmVncyB8PSBNSV9MUklfQ1NfTU1JTzsKPiAr CQlyZWdzKys7Cj4gKwo+ICsJCUdFTV9CVUdfT04oIWNvdW50KTsKPiArCQlkbyB7Cj4gKwkJCXUz MiBvZmZzZXQgPSAwOwo+ICsJCQl1OCB2Owo+ICsKPiArCQkJZG8gewo+ICsJCQkJdiA9ICpkYXRh Kys7Cj4gKwkJCQlvZmZzZXQgPDw9IDc7Cj4gKwkJCQlvZmZzZXQgfD0gdiAmIH5CSVQoNyk7Cj4g KwkJCX0gd2hpbGUgKHYgJiBCSVQoNykpOwo+ICsKPiArCQkJcmVnc1swXSA9IGJhc2UgKyAob2Zm c2V0IDw8IDIpOwo+ICsJCQlpZiAoY2xlYXIpCj4gKwkJCQlyZWdzWzFdID0gMDsKPiArCQkJcmVn cyArPSAyOwo+ICsJCX0gd2hpbGUgKC0tY291bnQpOwo+ICsJfQo+ICsKPiArCWlmIChjbGVhcikg ewo+ICsJCXU4IGNvdW50ID0gKisrZGF0YTsKPiArCj4gKwkJLyogQ2xlYXIgcGFzdCB0aGUgdGFp bCBmb3IgSFcgYWNjZXNzICovCj4gKwkJR0VNX0JVR19PTihkd29yZF9pbl9wYWdlKHJlZ3MpID4g Y291bnQpOwo+ICsJCW1lbXNldDMyKHJlZ3MsIE1JX05PT1AsIGNvdW50IC0gZHdvcmRfaW5fcGFn ZShyZWdzKSk7Cj4gKwo+ICsJCS8qIENsb3NlIHRoZSBiYXRjaDsgdXNlZCBtYWlubHkgYnkgbGl2 ZV9scmNfbGF5b3V0KCkgKi8KPiArCQkqcmVncyA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJ aWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEwKQo+ICsJCQkqcmVncyB8PSBCSVQoMCk7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCB1OCBnZW44X3hjc19vZmZzZXRzW10gPSB7 Cj4gKwlOT1AoMSksCj4gKwlMUkkoMTEsIDApLAo+ICsJUkVHMTYoMHgyNDQpLAo+ICsJUkVHKDB4 MDM0KSwKPiArCVJFRygweDAzMCksCj4gKwlSRUcoMHgwMzgpLAo+ICsJUkVHKDB4MDNjKSwKPiAr CVJFRygweDE2OCksCj4gKwlSRUcoMHgxNDApLAo+ICsJUkVHKDB4MTEwKSwKPiArCVJFRygweDEx YyksCj4gKwlSRUcoMHgxMTQpLAo+ICsJUkVHKDB4MTE4KSwKPiArCj4gKwlOT1AoOSksCj4gKwlM UkkoOSwgMCksCj4gKwlSRUcxNigweDNhOCksCj4gKwlSRUcxNigweDI4YyksCj4gKwlSRUcxNigw eDI4OCksCj4gKwlSRUcxNigweDI4NCksCj4gKwlSRUcxNigweDI4MCksCj4gKwlSRUcxNigweDI3 YyksCj4gKwlSRUcxNigweDI3OCksCj4gKwlSRUcxNigweDI3NCksCj4gKwlSRUcxNigweDI3MCks Cj4gKwo+ICsJTk9QKDEzKSwKPiArCUxSSSgyLCAwKSwKPiArCVJFRzE2KDB4MjAwKSwKPiArCVJF RygweDAyOCksCj4gKwo+ICsJRU5EKDgwKQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHU4IGdl bjlfeGNzX29mZnNldHNbXSA9IHsKPiArCU5PUCgxKSwKPiArCUxSSSgxNCwgUE9TVEVEKSwKPiAr CVJFRzE2KDB4MjQ0KSwKPiArCVJFRygweDAzNCksCj4gKwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4 MDM4KSwKPiArCVJFRygweDAzYyksCj4gKwlSRUcoMHgxNjgpLAo+ICsJUkVHKDB4MTQwKSwKPiAr CVJFRygweDExMCksCj4gKwlSRUcoMHgxMWMpLAo+ICsJUkVHKDB4MTE0KSwKPiArCVJFRygweDEx OCksCj4gKwlSRUcoMHgxYzApLAo+ICsJUkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwo+ ICsJTk9QKDMpLAo+ICsJTFJJKDksIFBPU1RFRCksCj4gKwlSRUcxNigweDNhOCksCj4gKwlSRUcx NigweDI4YyksCj4gKwlSRUcxNigweDI4OCksCj4gKwlSRUcxNigweDI4NCksCj4gKwlSRUcxNigw eDI4MCksCj4gKwlSRUcxNigweDI3YyksCj4gKwlSRUcxNigweDI3OCksCj4gKwlSRUcxNigweDI3 NCksCj4gKwlSRUcxNigweDI3MCksCj4gKwo+ICsJTk9QKDEzKSwKPiArCUxSSSgxLCBQT1NURUQp LAo+ICsJUkVHMTYoMHgyMDApLAo+ICsKPiArCU5PUCgxMyksCj4gKwlMUkkoNDQsIFBPU1RFRCks Cj4gKwlSRUcoMHgwMjgpLAo+ICsJUkVHKDB4MDljKSwKPiArCVJFRygweDBjMCksCj4gKwlSRUco MHgxNzgpLAo+ICsJUkVHKDB4MTdjKSwKPiArCVJFRzE2KDB4MzU4KSwKPiArCVJFRygweDE3MCks Cj4gKwlSRUcoMHgxNTApLAo+ICsJUkVHKDB4MTU0KSwKPiArCVJFRygweDE1OCksCj4gKwlSRUcx NigweDQxYyksCj4gKwlSRUcxNigweDYwMCksCj4gKwlSRUcxNigweDYwNCksCj4gKwlSRUcxNigw eDYwOCksCj4gKwlSRUcxNigweDYwYyksCj4gKwlSRUcxNigweDYxMCksCj4gKwlSRUcxNigweDYx NCksCj4gKwlSRUcxNigweDYxOCksCj4gKwlSRUcxNigweDYxYyksCj4gKwlSRUcxNigweDYyMCks Cj4gKwlSRUcxNigweDYyNCksCj4gKwlSRUcxNigweDYyOCksCj4gKwlSRUcxNigweDYyYyksCj4g KwlSRUcxNigweDYzMCksCj4gKwlSRUcxNigweDYzNCksCj4gKwlSRUcxNigweDYzOCksCj4gKwlS RUcxNigweDYzYyksCj4gKwlSRUcxNigweDY0MCksCj4gKwlSRUcxNigweDY0NCksCj4gKwlSRUcx NigweDY0OCksCj4gKwlSRUcxNigweDY0YyksCj4gKwlSRUcxNigweDY1MCksCj4gKwlSRUcxNigw eDY1NCksCj4gKwlSRUcxNigweDY1OCksCj4gKwlSRUcxNigweDY1YyksCj4gKwlSRUcxNigweDY2 MCksCj4gKwlSRUcxNigweDY2NCksCj4gKwlSRUcxNigweDY2OCksCj4gKwlSRUcxNigweDY2Yyks Cj4gKwlSRUcxNigweDY3MCksCj4gKwlSRUcxNigweDY3NCksCj4gKwlSRUcxNigweDY3OCksCj4g KwlSRUcxNigweDY3YyksCj4gKwlSRUcoMHgwNjgpLAo+ICsKPiArCUVORCgxNzYpCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3QgdTggZ2VuMTJfeGNzX29mZnNldHNbXSA9IHsKPiArCU5PUCgxKSwK PiArCUxSSSgxMywgUE9TVEVEKSwKPiArCVJFRzE2KDB4MjQ0KSwKPiArCVJFRygweDAzNCksCj4g KwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4MDM4KSwKPiArCVJFRygweDAzYyksCj4gKwlSRUcoMHgx NjgpLAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCksCj4gKwlSRUcoMHgxYzApLAo+ICsJ UkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwlSRUcoMHgxODApLAo+ICsJUkVHMTYoMHgy YjQpLAo+ICsKPiArCU5PUCg1KSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJUkVHMTYoMHgzYTgp LAo+ICsJUkVHMTYoMHgyOGMpLAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVHMTYoMHgyODQpLAo+ ICsJUkVHMTYoMHgyODApLAo+ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYoMHgyNzgpLAo+ICsJ UkVHMTYoMHgyNzQpLAo+ICsJUkVHMTYoMHgyNzApLAo+ICsKPiArCUVORCg4MCkKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCB1OCBnZW44X3Jjc19vZmZzZXRzW10gPSB7Cj4gKwlOT1AoMSksCj4g KwlMUkkoMTQsIFBPU1RFRCksCj4gKwlSRUcxNigweDI0NCksCj4gKwlSRUcoMHgwMzQpLAo+ICsJ UkVHKDB4MDMwKSwKPiArCVJFRygweDAzOCksCj4gKwlSRUcoMHgwM2MpLAo+ICsJUkVHKDB4MTY4 KSwKPiArCVJFRygweDE0MCksCj4gKwlSRUcoMHgxMTApLAo+ICsJUkVHKDB4MTFjKSwKPiArCVJF RygweDExNCksCj4gKwlSRUcoMHgxMTgpLAo+ICsJUkVHKDB4MWMwKSwKPiArCVJFRygweDFjNCks Cj4gKwlSRUcoMHgxYzgpLAo+ICsKPiArCU5PUCgzKSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJ UkVHMTYoMHgzYTgpLAo+ICsJUkVHMTYoMHgyOGMpLAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVH MTYoMHgyODQpLAo+ICsJUkVHMTYoMHgyODApLAo+ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYo MHgyNzgpLAo+ICsJUkVHMTYoMHgyNzQpLAo+ICsJUkVHMTYoMHgyNzApLAo+ICsKPiArCU5PUCgx MyksCj4gKwlMUkkoMSwgMCksCj4gKwlSRUcoMHgwYzgpLAo+ICsKPiArCUVORCg4MCkKPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCB1OCBnZW45X3Jjc19vZmZzZXRzW10gPSB7Cj4gKwlOT1AoMSks Cj4gKwlMUkkoMTQsIFBPU1RFRCksCj4gKwlSRUcxNigweDI0NCksCj4gKwlSRUcoMHgzNCksCj4g KwlSRUcoMHgzMCksCj4gKwlSRUcoMHgzOCksCj4gKwlSRUcoMHgzYyksCj4gKwlSRUcoMHgxNjgp LAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCksCj4gKwlSRUcoMHgxMWMpLAo+ICsJUkVH KDB4MTE0KSwKPiArCVJFRygweDExOCksCj4gKwlSRUcoMHgxYzApLAo+ICsJUkVHKDB4MWM0KSwK PiArCVJFRygweDFjOCksCj4gKwo+ICsJTk9QKDMpLAo+ICsJTFJJKDksIFBPU1RFRCksCj4gKwlS RUcxNigweDNhOCksCj4gKwlSRUcxNigweDI4YyksCj4gKwlSRUcxNigweDI4OCksCj4gKwlSRUcx NigweDI4NCksCj4gKwlSRUcxNigweDI4MCksCj4gKwlSRUcxNigweDI3YyksCj4gKwlSRUcxNigw eDI3OCksCj4gKwlSRUcxNigweDI3NCksCj4gKwlSRUcxNigweDI3MCksCj4gKwo+ICsJTk9QKDEz KSwKPiArCUxSSSgxLCAwKSwKPiArCVJFRygweGM4KSwKPiArCj4gKwlOT1AoMTMpLAo+ICsJTFJJ KDQ0LCBQT1NURUQpLAo+ICsJUkVHKDB4MjgpLAo+ICsJUkVHKDB4OWMpLAo+ICsJUkVHKDB4YzAp LAo+ICsJUkVHKDB4MTc4KSwKPiArCVJFRygweDE3YyksCj4gKwlSRUcxNigweDM1OCksCj4gKwlS RUcoMHgxNzApLAo+ICsJUkVHKDB4MTUwKSwKPiArCVJFRygweDE1NCksCj4gKwlSRUcoMHgxNTgp LAo+ICsJUkVHMTYoMHg0MWMpLAo+ICsJUkVHMTYoMHg2MDApLAo+ICsJUkVHMTYoMHg2MDQpLAo+ ICsJUkVHMTYoMHg2MDgpLAo+ICsJUkVHMTYoMHg2MGMpLAo+ICsJUkVHMTYoMHg2MTApLAo+ICsJ UkVHMTYoMHg2MTQpLAo+ICsJUkVHMTYoMHg2MTgpLAo+ICsJUkVHMTYoMHg2MWMpLAo+ICsJUkVH MTYoMHg2MjApLAo+ICsJUkVHMTYoMHg2MjQpLAo+ICsJUkVHMTYoMHg2MjgpLAo+ICsJUkVHMTYo MHg2MmMpLAo+ICsJUkVHMTYoMHg2MzApLAo+ICsJUkVHMTYoMHg2MzQpLAo+ICsJUkVHMTYoMHg2 MzgpLAo+ICsJUkVHMTYoMHg2M2MpLAo+ICsJUkVHMTYoMHg2NDApLAo+ICsJUkVHMTYoMHg2NDQp LAo+ICsJUkVHMTYoMHg2NDgpLAo+ICsJUkVHMTYoMHg2NGMpLAo+ICsJUkVHMTYoMHg2NTApLAo+ ICsJUkVHMTYoMHg2NTQpLAo+ICsJUkVHMTYoMHg2NTgpLAo+ICsJUkVHMTYoMHg2NWMpLAo+ICsJ UkVHMTYoMHg2NjApLAo+ICsJUkVHMTYoMHg2NjQpLAo+ICsJUkVHMTYoMHg2NjgpLAo+ICsJUkVH MTYoMHg2NmMpLAo+ICsJUkVHMTYoMHg2NzApLAo+ICsJUkVHMTYoMHg2NzQpLAo+ICsJUkVHMTYo MHg2NzgpLAo+ICsJUkVHMTYoMHg2N2MpLAo+ICsJUkVHKDB4NjgpLAo+ICsKPiArCUVORCgxNzYp Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdTggZ2VuMTFfcmNzX29mZnNldHNbXSA9IHsKPiAr CU5PUCgxKSwKPiArCUxSSSgxNSwgUE9TVEVEKSwKPiArCVJFRzE2KDB4MjQ0KSwKPiArCVJFRygw eDAzNCksCj4gKwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4MDM4KSwKPiArCVJFRygweDAzYyksCj4g KwlSRUcoMHgxNjgpLAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCksCj4gKwlSRUcoMHgx MWMpLAo+ICsJUkVHKDB4MTE0KSwKPiArCVJFRygweDExOCksCj4gKwlSRUcoMHgxYzApLAo+ICsJ UkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwlSRUcoMHgxODApLAo+ICsKPiArCU5PUCgx KSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJUkVHMTYoMHgzYTgpLAo+ICsJUkVHMTYoMHgyOGMp LAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVHMTYoMHgyODQpLAo+ICsJUkVHMTYoMHgyODApLAo+ ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYoMHgyNzgpLAo+ICsJUkVHMTYoMHgyNzQpLAo+ICsJ UkVHMTYoMHgyNzApLAo+ICsKPiArCUxSSSgxLCBQT1NURUQpLAo+ICsJUkVHKDB4MWIwKSwKPiAr Cj4gKwlOT1AoMTApLAo+ICsJTFJJKDEsIDApLAo+ICsJUkVHKDB4MGM4KSwKPiArCj4gKwlFTkQo ODApCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdTggZ2VuMTJfcmNzX29mZnNldHNbXSA9IHsK PiArCU5PUCgxKSwKPiArCUxSSSgxMywgUE9TVEVEKSwKPiArCVJFRzE2KDB4MjQ0KSwKPiArCVJF RygweDAzNCksCj4gKwlSRUcoMHgwMzApLAo+ICsJUkVHKDB4MDM4KSwKPiArCVJFRygweDAzYyks Cj4gKwlSRUcoMHgxNjgpLAo+ICsJUkVHKDB4MTQwKSwKPiArCVJFRygweDExMCksCj4gKwlSRUco MHgxYzApLAo+ICsJUkVHKDB4MWM0KSwKPiArCVJFRygweDFjOCksCj4gKwlSRUcoMHgxODApLAo+ ICsJUkVHMTYoMHgyYjQpLAo+ICsKPiArCU5PUCg1KSwKPiArCUxSSSg5LCBQT1NURUQpLAo+ICsJ UkVHMTYoMHgzYTgpLAo+ICsJUkVHMTYoMHgyOGMpLAo+ICsJUkVHMTYoMHgyODgpLAo+ICsJUkVH MTYoMHgyODQpLAo+ICsJUkVHMTYoMHgyODApLAo+ICsJUkVHMTYoMHgyN2MpLAo+ICsJUkVHMTYo MHgyNzgpLAo+ICsJUkVHMTYoMHgyNzQpLAo+ICsJUkVHMTYoMHgyNzApLAo+ICsKPiArCUxSSSgz LCBQT1NURUQpLAo+ICsJUkVHKDB4MWIwKSwKPiArCVJFRzE2KDB4NWE4KSwKPiArCVJFRzE2KDB4 NWFjKSwKPiArCj4gKwlOT1AoNiksCj4gKwlMUkkoMSwgMCksCj4gKwlSRUcoMHgwYzgpLAo+ICsK PiArCUVORCg4MCkKPiArfTsKPiArCj4gKyN1bmRlZiBFTkQKPiArI3VuZGVmIFJFRzE2Cj4gKyN1 bmRlZiBSRUcKPiArI3VuZGVmIExSSQo+ICsjdW5kZWYgTk9QCj4gKwo+ICtzdGF0aWMgY29uc3Qg dTggKnJlZ19vZmZzZXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAr ewo+ICsJLyoKPiArCSAqIFRoZSBnZW4xMisgbGlzdHMgb25seSBoYXZlIHRoZSByZWdpc3RlcnMg d2UgcHJvZ3JhbSBpbiB0aGUgYmFzaWMKPiArCSAqIGRlZmF1bHQgc3RhdGUuIFdlIHJlbHkgb24g dGhlIGNvbnRleHQgaW1hZ2UgdXNpbmcgcmVsYXRpdmUKPiArCSAqIGFkZHJlc3NpbmcgdG8gYXV0 b21hdGljIGZpeHVwIHRoZSByZWdpc3RlciBzdGF0ZSBiZXR3ZWVuIHRoZQo+ICsJICogcGh5c2lj YWwgZW5naW5lcyBmb3IgdmlydHVhbCBlbmdpbmUuCj4gKwkgKi8KPiArCUdFTV9CVUdfT04oSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIgJiYKPiArCQkgICAhaW50ZWxfZW5naW5lX2hhc19y ZWxhdGl2ZV9tbWlvKGVuZ2luZSkpOwo+ICsKPiArCWlmIChlbmdpbmUtPmNsYXNzID09IFJFTkRF Ul9DTEFTUykgewo+ICsJCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSAxMikKPiArCQkJ cmV0dXJuIGdlbjEyX3Jjc19vZmZzZXRzOwo+ICsJCWVsc2UgaWYgKElOVEVMX0dFTihlbmdpbmUt Pmk5MTUpID49IDExKQo+ICsJCQlyZXR1cm4gZ2VuMTFfcmNzX29mZnNldHM7Cj4gKwkJZWxzZSBp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gOSkKPiArCQkJcmV0dXJuIGdlbjlfcmNzX29m ZnNldHM7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gZ2VuOF9yY3Nfb2Zmc2V0czsKPiArCX0gZWxz ZSB7Cj4gKwkJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID49IDEyKQo+ICsJCQlyZXR1cm4g Z2VuMTJfeGNzX29mZnNldHM7Cj4gKwkJZWxzZSBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkg Pj0gOSkKPiArCQkJcmV0dXJuIGdlbjlfeGNzX29mZnNldHM7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1 cm4gZ2VuOF94Y3Nfb2Zmc2V0czsKPiArCX0KPiArfQo+ICsKPiAraW50IGludGVsX2xyY19yaW5n X21pX21vZGUoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlp ZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIpCj4gKwkJcmV0dXJuIDB4NjA7Cj4gKwll bHNlIGlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA+PSA5KQo+ICsJCXJldHVybiAweDU0Owo+ ICsJZWxzZSBpZiAoZW5naW5lLT5jbGFzcyA9PSBSRU5ERVJfQ0xBU1MpCj4gKwkJcmV0dXJuIDB4 NTg7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX3Jl c2V0X3N0b3BfcmluZyh1MzIgKnJlZ3MsIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiArewo+ICsJaW50IHg7Cj4gKwo+ICsJeCA9IGludGVsX2xyY19yaW5nX21pX21vZGUo ZW5naW5lKTsKPiArCWlmICh4ICE9IC0xKSB7Cj4gKwkJcmVnc1t4ICsgMV0gJj0gflNUT1BfUklO RzsKPiArCQlyZWdzW3ggKyAxXSB8PSBTVE9QX1JJTkcgPDwgMTY7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGluaXRfY29tbW9uX3JlZ19zdGF0ZSh1MzIgKiBjb25zdCByZWdzLAo+ICsJ CQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgIGNvbnN0 IHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nLAo+ICsJCQkJICBib29sIGluaGliaXQpCj4gK3sKPiAr CXUzMiBjdGw7Cj4gKwo+ICsJY3RsID0gX01BU0tFRF9CSVRfRU5BQkxFKENUWF9DVFJMX0lOSElC SVRfU1lOX0NUWF9TV0lUQ0gpOwo+ICsJY3RsIHw9IF9NQVNLRURfQklUX0RJU0FCTEUoQ1RYX0NU UkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpOwo+ICsJaWYgKGluaGliaXQpCj4gKwkJY3Rs IHw9IENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUOwo+ICsJaWYgKElOVEVMX0dF TihlbmdpbmUtPmk5MTUpIDwgMTEpCj4gKwkJY3RsIHw9IF9NQVNLRURfQklUX0RJU0FCTEUoQ1RY X0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQgfAo+ICsJCQkJCSAgIENUWF9DVFJMX1JTX0NU WF9FTkFCTEUpOwo+ICsJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MXSA9IGN0bDsKPiArCj4gKwly ZWdzW0NUWF9SSU5HX0NUTF0gPSBSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJ RDsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBscmNfaW5kaXJlY3RfY3R4X29mZnNldChjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gK3sKPiArCXUzMiBpbmRpcmVjdF9jdHhf b2Zmc2V0Owo+ICsKPiArCXN3aXRjaCAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkpIHsKPiArCWRl ZmF1bHQ6Cj4gKwkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpKTsKPiArCQkv KiBmYWxsIHRocm91Z2ggKi8KPiArCWNhc2UgMTI6Cj4gKwkJaW5kaXJlY3RfY3R4X29mZnNldCA9 Cj4gKwkJCUdFTjEyX0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVF9ERUZBVUxUOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSAxMToKPiArCQlpbmRpcmVjdF9jdHhfb2Zmc2V0ID0KPiArCQkJR0VOMTFf Q1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VUX0RFRkFVTFQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IDEwOgo+ICsJCWluZGlyZWN0X2N0eF9vZmZzZXQgPQo+ICsJCQlHRU4xMF9DVFhfUkNTX0lORElS RUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKPiArCQlicmVhazsKPiArCWNhc2UgOToKPiArCQlpbmRp cmVjdF9jdHhfb2Zmc2V0ID0KPiArCQkJR0VOOV9DVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRf REVGQVVMVDsKPiArCQlicmVhazsKPiArCWNhc2UgODoKPiArCQlpbmRpcmVjdF9jdHhfb2Zmc2V0 ID0KPiArCQkJR0VOOF9DVFhfUkNTX0lORElSRUNUX0NUWF9PRkZTRVRfREVGQVVMVDsKPiArCQli cmVhazsKPiArCX0KPiArCj4gKwlyZXR1cm4gaW5kaXJlY3RfY3R4X29mZnNldDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaW5pdF93YV9iYl9yZWdfc3RhdGUodTMyICogY29uc3QgcmVncywKPiAr CQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gKwkJCQkgdTMyIHBv c19iYl9wZXJfY3R4KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fyb3VuZHMg KiBjb25zdCB3YV9jdHggPSAmZW5naW5lLT53YV9jdHg7Cj4gKwo+ICsJaWYgKHdhX2N0eC0+cGVy X2N0eC5zaXplKSB7Cj4gKwkJY29uc3QgdTMyIGdndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNl dCh3YV9jdHgtPnZtYSk7Cj4gKwo+ICsJCXJlZ3NbcG9zX2JiX3Blcl9jdHhdID0KPiArCQkJKGdn dHRfb2Zmc2V0ICsgd2FfY3R4LT5wZXJfY3R4Lm9mZnNldCkgfCAweDAxOwo+ICsJfQo+ICsKPiAr CWlmICh3YV9jdHgtPmluZGlyZWN0X2N0eC5zaXplKSB7Cj4gKwkJY29uc3QgdTMyIGdndHRfb2Zm c2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7Cj4gKwo+ICsJCXJlZ3NbcG9zX2Ji X3Blcl9jdHggKyAyXSA9Cj4gKwkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+aW5kaXJlY3RfY3R4 Lm9mZnNldCkgfAo+ICsJCQkod2FfY3R4LT5pbmRpcmVjdF9jdHguc2l6ZSAvIENBQ0hFTElORV9C WVRFUyk7Cj4gKwo+ICsJCXJlZ3NbcG9zX2JiX3Blcl9jdHggKyA0XSA9IGxyY19pbmRpcmVjdF9j dHhfb2Zmc2V0KGVuZ2luZSkgPDwgNjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5p dF9wcGd0dF9yZWdfc3RhdGUodTMyICpyZWdzLCBjb25zdCBzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBn dHQpCj4gK3sKPiArCWlmIChpOTE1X3ZtX2lzXzRsdmwoJnBwZ3R0LT52bSkpIHsKPiArCQkvKiA2 NGIgUFBHVFQgKDQ4Yml0IGNhbm9uaWNhbCkKPiArCQkgKiBQRFAwX0RFU0NSSVBUT1IgY29udGFp bnMgdGhlIGJhc2UgYWRkcmVzcyB0byBQTUw0IGFuZAo+ICsJCSAqIG90aGVyIFBEUCBEZXNjcmlw dG9ycyBhcmUgaWdub3JlZC4KPiArCQkgKi8KPiArCQlBU1NJR05fQ1RYX1BNTDQocHBndHQsIHJl Z3MpOwo+ICsJfSBlbHNlIHsKPiArCQlBU1NJR05fQ1RYX1BEUChwcGd0dCwgcmVncywgMyk7Cj4g KwkJQVNTSUdOX0NUWF9QRFAocHBndHQsIHJlZ3MsIDIpOwo+ICsJCUFTU0lHTl9DVFhfUERQKHBw Z3R0LCByZWdzLCAxKTsKPiArCQlBU1NJR05fQ1RYX1BEUChwcGd0dCwgcmVncywgMCk7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wcGd0dCAqdm1fYWxpYXMoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gK3sKPiArCWlmIChpOTE1X2lzX2dndHQodm0pKQo+ICsJ CXJldHVybiBpOTE1X3ZtX3RvX2dndHQodm0pLT5hbGlhczsKPiArCWVsc2UKPiArCQlyZXR1cm4g aTkxNV92bV90b19wcGd0dCh2bSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfbHJjX2luaXRfcmVn X3N0YXRlKHUzMiAqcmVncywKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQg KmNlLAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4g KwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9yaW5nICpyaW5nLAo+ICsJCQkgICAgICBib29s IGluaGliaXQpCj4gK3sKPiArCS8qCj4gKwkgKiBBIGNvbnRleHQgaXMgYWN0dWFsbHkgYSBiaWcg YmF0Y2ggYnVmZmVyIHdpdGggc2V2ZXJhbAo+ICsJICogTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29t bWFuZHMgZm9sbG93ZWQgYnkgKHJlZywgdmFsdWUpIHBhaXJzLiBUaGUKPiArCSAqIHZhbHVlcyB3 ZSBhcmUgc2V0dGluZyBoZXJlIGFyZSBvbmx5IGZvciB0aGUgZmlyc3QgY29udGV4dCByZXN0b3Jl Ogo+ICsJICogb24gYSBzdWJzZXF1ZW50IHNhdmUsIHRoZSBHUFUgd2lsbCByZWNyZWF0ZSB0aGlz IGJhdGNoYnVmZmVyIHdpdGggbmV3Cj4gKwkgKiB2YWx1ZXMgKGluY2x1ZGluZyBhbGwgdGhlIG1p c3NpbmcgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZHMgdGhhdAo+ICsJICogd2UgYXJlIG5v dCBpbml0aWFsaXppbmcgaGVyZSkuCj4gKwkgKi8KPiArCXNldF9vZmZzZXRzKHJlZ3MsIHJlZ19v ZmZzZXRzKGVuZ2luZSksIGVuZ2luZSwgaW5oaWJpdCk7Cj4gKwo+ICsJaW5pdF9jb21tb25fcmVn X3N0YXRlKHJlZ3MsIGVuZ2luZSwgcmluZywgaW5oaWJpdCk7Cj4gKwlpbml0X3BwZ3R0X3JlZ19z dGF0ZShyZWdzLCB2bV9hbGlhcyhjZS0+dm0pKTsKPiArCj4gKwlpbml0X3dhX2JiX3JlZ19zdGF0 ZShyZWdzLCBlbmdpbmUsCj4gKwkJCSAgICAgSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPj0gMTIg Pwo+ICsJCQkgICAgIEdFTjEyX0NUWF9CQl9QRVJfQ1RYX1BUUiA6Cj4gKwkJCSAgICAgQ1RYX0JC X1BFUl9DVFhfUFRSKTsKPiArCj4gKwlfX3Jlc2V0X3N0b3BfcmluZyhyZWdzLCBlbmdpbmUpOwo+ ICt9Cj4gKwo+ICt2b2lkIGludGVsX2xyY191cGRhdGVfcmVnX3N0YXRlKGNvbnN0IHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZSwKPiArCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBjZS0+cmluZzsK PiArCXUzMiAqcmVncyA9IGNlLT5scmNfcmVnX3N0YXRlOwo+ICsKPiArCUdFTV9CVUdfT04oIWlu dGVsX3Jpbmdfb2Zmc2V0X3ZhbGlkKHJpbmcsIHJpbmctPmhlYWQpKTsKPiArCUdFTV9CVUdfT04o IWludGVsX3Jpbmdfb2Zmc2V0X3ZhbGlkKHJpbmcsIHJpbmctPnRhaWwpKTsKPiArCj4gKwlyZWdz W0NUWF9SSU5HX1NUQVJUXSA9IGk5MTVfZ2d0dF9vZmZzZXQocmluZy0+dm1hKTsKPiArCXJlZ3Nb Q1RYX1JJTkdfSEVBRF0gPSByaW5nLT5oZWFkOwo+ICsJcmVnc1tDVFhfUklOR19UQUlMXSA9IHJp bmctPnRhaWw7Cj4gKwo+ICsJLyogUlBDUyAqLwo+ICsJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVO REVSX0NMQVNTKSB7Cj4gKwkJcmVnc1tDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9Cj4gKwkJCWludGVs X3NzZXVfbWFrZV9ycGNzKGVuZ2luZS0+aTkxNSwgJmNlLT5zc2V1KTsKPiArCj4gKwkJaTkxNV9v YV9pbml0X3JlZ19zdGF0ZShjZSwgZW5naW5lKTsKPiArCX0KPiArfQo+ICsKPiArdm9pZCBpbnRl bF9scmNfcmVzZXRfcmVnX3N0YXRlKGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAr CQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJ dTMyICpyZWdzID0gY2UtPmxyY19yZWdfc3RhdGU7Cj4gKwo+ICsJX19yZXNldF9zdG9wX3Jpbmco cmVncywgZW5naW5lKTsKPiArfQo+ICsKPiArdm9pZCBpbnRlbF9scmNfc2V0X3JlZ19vZmZzZXRz KHUzMiAqcmVncywgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzZXRf b2Zmc2V0cyhyZWdzLCByZWdfb2Zmc2V0cyhlbmdpbmUpLCBlbmdpbmUsIGZhbHNlKTsKPiArfQo+ ICsKPiArLyoKPiArICogVGhlIGNvbnRleHQgZGVzY3JpcHRvciBlbmNvZGVzIHZhcmlvdXMgYXR0 cmlidXRlcyBvZiBhIGNvbnRleHQsCj4gKyAqIGluY2x1ZGluZyBpdHMgR1RUIGFkZHJlc3MgYW5k IHNvbWUgZmxhZ3MuIEJlY2F1c2UgaXQncyBmYWlybHkKPiArICogZXhwZW5zaXZlIHRvIGNhbGN1 bGF0ZSwgd2UnbGwganVzdCBkbyBpdCBvbmNlIGFuZCBjYWNoZSB0aGUgcmVzdWx0LAo+ICsgKiB3 aGljaCByZW1haW5zIHZhbGlkIHVudGlsIHRoZSBjb250ZXh0IGlzIHVucGlubmVkLgo+ICsgKgo+ ICsgKiBUaGlzIGlzIHdoYXQgYSBkZXNjcmlwdG9yIGxvb2tzIGxpa2UsIGZyb20gTFNCIHRvIE1T Qjo6Cj4gKyAqCj4gKyAqICAgICAgYml0cyAgMC0xMTogICAgZmxhZ3MsIEdFTjhfQ1RYXyogKGNh Y2hlZCBpbiBjdHgtPmRlc2NfdGVtcGxhdGUpCj4gKyAqICAgICAgYml0cyAxMi0zMTogICAgTFJD QSwgR1RUIGFkZHJlc3Mgb2YgKHRoZSBIV1NQIG9mKSB0aGlzIGNvbnRleHQKPiArICogICAgICBi aXRzIDMyLTUyOiAgICBjdHggSUQsIGEgZ2xvYmFsbHkgdW5pcXVlIHRhZyAoaGlnaGVzdCBiaXQg dXNlZCBieSBHdUMpCj4gKyAqICAgICAgYml0cyA1My01NDogICAgbWJ6LCByZXNlcnZlZCBmb3Ig dXNlIGJ5IGhhcmR3YXJlCj4gKyAqICAgICAgYml0cyA1NS02MzogICAgZ3JvdXAgSUQsIGN1cnJl bnRseSB1bnVzZWQgYW5kIHNldCB0byAwCj4gKyAqCj4gKyAqIFN0YXJ0aW5nIGZyb20gR2VuMTEs IHRoZSB1cHBlciBkd29yZCBvZiB0aGUgZGVzY3JpcHRvciBoYXMgYSBuZXcgZm9ybWF0Ogo+ICsg Kgo+ICsgKiAgICAgIGJpdHMgMzItMzY6ICAgIHJlc2VydmVkCj4gKyAqICAgICAgYml0cyAzNy00 NzogICAgU1cgY29udGV4dCBJRAo+ICsgKiAgICAgIGJpdHMgNDg6NTM6ICAgIGVuZ2luZSBpbnN0 YW5jZQo+ICsgKiAgICAgIGJpdCA1NDogICAgICAgIG1ieiwgcmVzZXJ2ZWQgZm9yIHVzZSBieSBo YXJkd2FyZQo+ICsgKiAgICAgIGJpdHMgNTUtNjA6ICAgIFNXIGNvdW50ZXIKPiArICogICAgICBi aXRzIDYxLTYzOiAgICBlbmdpbmUgY2xhc3MKPiArICoKPiArICogZW5naW5lIGluZm8sIFNXIGNv bnRleHQgSUQgYW5kIFNXIGNvdW50ZXIgbmVlZCB0byBmb3JtIGEgdW5pcXVlIG51bWJlcgo+ICsg KiAoQ29udGV4dCBJRCkgcGVyIGxyYy4KPiArICovCj4gK3U2NCBpbnRlbF9scmNfZGVzY3JpcHRv cihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gKwkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gK3sKPiArCXU2NCBkZXNjOwo+ICsKPiArCWRlc2MgPSBJTlRFTF9MRUdBQ1lf MzJCX0NPTlRFWFQ7Cj4gKwlpZiAoaTkxNV92bV9pc180bHZsKGNlLT52bSkpCj4gKwkJZGVzYyA9 IElOVEVMX0xFR0FDWV82NEJfQ09OVEVYVDsKPiArCWRlc2MgPDw9IEdFTjhfQ1RYX0FERFJFU1NJ TkdfTU9ERV9TSElGVDsKPiArCj4gKwlkZXNjIHw9IEdFTjhfQ1RYX1ZBTElEIHwgR0VOOF9DVFhf UFJJVklMRUdFOwo+ICsJaWYgKElTX0dFTihlbmdpbmUtPmk5MTUsIDgpKQo+ICsJCWRlc2MgfD0g R0VOOF9DVFhfTDNMTENfQ09IRVJFTlQ7Cj4gKwo+ICsJZGVzYyB8PSBpOTE1X2dndHRfb2Zmc2V0 KGNlLT5zdGF0ZSk7IC8qIGJpdHMgMTItMzEgKi8KPiArCS8qCj4gKwkgKiBUaGUgZm9sbG93aW5n IDMyYml0cyBhcmUgY29waWVkIGludG8gdGhlIE9BIHJlcG9ydHMgKGR3b3JkIDIpLgo+ICsJICog Q29uc2lkZXIgdXBkYXRpbmcgb2FfZ2V0X3JlbmRlcl9jdHhfaWQgaW4gaTkxNV9wZXJmLmMgd2hl biBjaGFuZ2luZwo+ICsJICogYW55dGhpbmcgYmVsb3cuCj4gKwkgKi8KPiArCWlmIChJTlRFTF9H RU4oZW5naW5lLT5pOTE1KSA+PSAxMSkgewo+ICsJCWRlc2MgfD0gKHU2NCllbmdpbmUtPmluc3Rh bmNlIDw8IEdFTjExX0VOR0lORV9JTlNUQU5DRV9TSElGVDsKPiArCQkJCQkJCQkvKiBiaXRzIDQ4 LTUzICovCj4gKwo+ICsJCWRlc2MgfD0gKHU2NCllbmdpbmUtPmNsYXNzIDw8IEdFTjExX0VOR0lO RV9DTEFTU19TSElGVDsKPiArCQkJCQkJCQkvKiBiaXRzIDYxLTYzICovCj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIGRlc2M7Cj4gK30KPiArCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9T RUxGVEVTVCkKPiArI2luY2x1ZGUgInNlbGZ0ZXN0X2xyYy5jIgo+ICsjZW5kaWYKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9scmMuaAo+IGluZGV4IGRmYmMyMTRlMTRmNS4uZTYxNzE5NmM4MDJh IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5oCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmgKPiBAQCAtMzMsNiArMzMsNyBA QCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dDsKPiAgIHN0cnVjdCBpOTE1X3JlcXVlc3Q7Cj4gICBz dHJ1Y3QgaW50ZWxfY29udGV4dDsKPiAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3M7Cj4gK3N0cnVj dCBpbnRlbF9yaW5nOwo+ICAgCj4gICAvKiBFeGVjbGlzdHMgcmVncyAqLwo+ICAgI2RlZmluZSBS SU5HX0VMU1AoYmFzZSkJCQkJX01NSU8oKGJhc2UpICsgMHgyMzApCj4gQEAgLTUwLDEyICs1MSwx MyBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzOwo+ICAgCj4gICAjZGVmaW5lCSAgRUxfQ1RSTF9M T0FECQkJCSgxIDw8IDApCj4gICAKPiAtLyogVGhlIGRvY3Mgc3BlY2lmeSB0aGF0IHRoZSB3cml0 ZSBwb2ludGVyIHdyYXBzIGFyb3VuZCBhZnRlciA1aCwgIkFmdGVyIHN0YXR1cwo+ICsvKgo+ICsg KiBUaGUgZG9jcyBzcGVjaWZ5IHRoYXQgdGhlIHdyaXRlIHBvaW50ZXIgd3JhcHMgYXJvdW5kIGFm dGVyIDVoLCAiQWZ0ZXIgc3RhdHVzCj4gICAgKiBpcyB3cml0dGVuIG91dCB0byB0aGUgbGFzdCBh dmFpbGFibGUgc3RhdHVzIFFXIGF0IG9mZnNldCA1aCwgdGhpcyBwb2ludGVyCj4gICAgKiB3cmFw cyB0byAwLiIKPiAgICAqCj4gICAgKiBUaGVyZWZvcmUsIG9uZSBtdXN0IGluZmVyIHRoYW4gZXZl biB0aG91Z2ggdGhlcmUgYXJlIDMgYml0cyBhdmFpbGFibGUsIDYgYW5kCj4gLSAqIDcgYXBwZWFy IHRvIGJlICogcmVzZXJ2ZWQuCj4gKyAqIDcgYXBwZWFyIHRvIGJlIHJlc2VydmVkLgo+ICAgICov Cj4gICAjZGVmaW5lIEdFTjhfQ1NCX0VOVFJJRVMgNgo+ICAgI2RlZmluZSBHRU44X0NTQl9QVFJf TUFTSyAweDcKPiBAQCAtOTUsMTIgKzk3LDI1IEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlz c2lvbl9zZXR1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgI2RlZmluZSBM UkNfUFBIV1NQX1NDUkFUQ0gJCTB4MzQKPiAgICNkZWZpbmUgTFJDX1BQSFdTUF9TQ1JBVENIX0FE RFIJCShMUkNfUFBIV1NQX1NDUkFUQ0ggKiBzaXplb2YodTMyKSkKPiAgIAo+IC12b2lkIGludGVs X2V4ZWNsaXN0c19zZXRfZGVmYXVsdF9zdWJtaXNzaW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSk7Cj4gK2ludCBpbnRlbF9scmNfcmluZ19taV9tb2RlKGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gKwo+ICt2b2lkIGludGVsX2xyY19zZXRfcmVnX29mZnNl dHModTMyICpyZWdzLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICsKPiArdm9p ZCBpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdfc3RhdGUsCj4gKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcmlu ZyAqcmluZywKPiArCQkJICAgICAgYm9vbCBpbmhpYml0KTsKPiAgIAo+IC12b2lkIGludGVsX2xy X2NvbnRleHRfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+IC0JCQkgICAg c3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+IC0JCQkgICAgdTMyIGhlYWQsCj4gLQkJCSAgICBi b29sIHNjcnViKTsKPiArdm9pZCBpbnRlbF9scmNfdXBkYXRlX3JlZ19zdGF0ZShjb25zdCBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpOwo+ICt2b2lkIGludGVsX2xyY19yZXNldF9yZWdfc3RhdGUoY29uc3Qgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKTsKPiArCj4gK3U2NCBpbnRlbF9scmNfZGVzY3JpcHRvcihzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UsCj4gKwkJCSBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ ICsKPiArdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgCj4gICB2b2lkIGludGVsX2V4ZWNsaXN0c19z aG93X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkgICBz dHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCj4gQEAgLTEyNyw0ICsxNDIsNyBAQCBpbnRlbF92aXJ0dWFs X2VuZ2luZV9nZXRfc2libGluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gICBi b29sCj4gICBpbnRlbF9lbmdpbmVfaW5fZXhlY2xpc3RzX3N1Ym1pc3Npb25fbW9kZShjb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgCj4gK2ludCBpbnRlbF9lbmdpbmVf aW5pdF93b3JrYXJvdW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3Zv aWQgaW50ZWxfZW5naW5lX2Zpbmlfd29ya2Fyb3VuZF9iYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpOwo+ICsKPiAgICNlbmRpZiAvKiBfSU5URUxfTFJDX0hfICovCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2V4ZWNsaXN0cy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZXhlY2xpc3RzLmMKPiBpbmRleCA1ZTA0ZWNiNjFk Y2MuLmVhYzJiN2YwOTA4MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9z ZWxmdGVzdF9leGVjbGlzdHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2V4ZWNsaXN0cy5jCj4gQEAgLTYsOSArNiwxMCBAQAo+ICAgCj4gICAjaW5jbHVkZSA8bGlu dXgvcHJpbWVfbnVtYmVycy5oPgo+ICAgCj4gLSNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcG0uaCIK PiAgICNpbmNsdWRlICJndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0LmgiCj4gKyNpbmNsdWRlICJn dC9pbnRlbF9lbmdpbmVfcG0uaCIKPiAgICNpbmNsdWRlICJndC9pbnRlbF9yZXNldC5oIgo+ICsj aW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9zZWxmdGVz dC5oIgo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5oIgo+IEBAIC0yMDEsNyAr MjAyLDcgQEAgc3RhdGljIGludCBsaXZlX3VubGl0ZV9yZXN0b3JlKHN0cnVjdCBpbnRlbF9ndCAq Z3QsIGludCBwcmlvKQo+ICAgCQl9Cj4gICAJCUdFTV9CVUdfT04oIWNlWzFdLT5yaW5nLT5zaXpl KTsKPiAgIAkJaW50ZWxfcmluZ19yZXNldChjZVsxXS0+cmluZywgY2VbMV0tPnJpbmctPnNpemUg LyAyKTsKPiAtCQlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlWzFdLCBlbmdpbmUpOwo+ ICsJCWludGVsX2xyY191cGRhdGVfcmVnX3N0YXRlKGNlWzFdLCBlbmdpbmUpOwo+ICAgCj4gICAJ CXJxWzBdID0gaWd0X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJnNwaW4sIGNlWzBdLCBNSV9BUkJf Q0hFQ0spOwo+ICAgCQlpZiAoSVNfRVJSKHJxWzBdKSkgewo+IEBAIC0zNzQxLDQ5NiArMzc0Miwz IEBAIGludCBpbnRlbF9leGVjbGlzdHNfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCj4gICAKPiAgIAlyZXR1cm4gaW50ZWxfZ3RfbGl2ZV9zdWJ0ZXN0cyh0ZXN0 cywgJmk5MTUtPmd0KTsKPiAgIH0KPiAtCj4gLXN0YXRpYyB2b2lkIGhleGR1bXAoY29uc3Qgdm9p ZCAqYnVmLCBzaXplX3QgbGVuKQo+IC17Cj4gLQljb25zdCBzaXplX3Qgcm93c2l6ZSA9IDggKiBz aXplb2YodTMyKTsKPiAtCWNvbnN0IHZvaWQgKnByZXYgPSBOVUxMOwo+IC0JYm9vbCBza2lwID0g ZmFsc2U7Cj4gLQlzaXplX3QgcG9zOwo+IC0KPiAtCWZvciAocG9zID0gMDsgcG9zIDwgbGVuOyBw b3MgKz0gcm93c2l6ZSkgewo+IC0JCWNoYXIgbGluZVsxMjhdOwo+IC0KPiAtCQlpZiAocHJldiAm JiAhbWVtY21wKHByZXYsIGJ1ZiArIHBvcywgcm93c2l6ZSkpIHsKPiAtCQkJaWYgKCFza2lwKSB7 Cj4gLQkJCQlwcl9pbmZvKCIqXG4iKTsKPiAtCQkJCXNraXAgPSB0cnVlOwo+IC0JCQl9Cj4gLQkJ CWNvbnRpbnVlOwo+IC0JCX0KPiAtCj4gLQkJV0FSTl9PTl9PTkNFKGhleF9kdW1wX3RvX2J1ZmZl cihidWYgKyBwb3MsIGxlbiAtIHBvcywKPiAtCQkJCQkJcm93c2l6ZSwgc2l6ZW9mKHUzMiksCj4g LQkJCQkJCWxpbmUsIHNpemVvZihsaW5lKSwKPiAtCQkJCQkJZmFsc2UpID49IHNpemVvZihsaW5l KSk7Cj4gLQkJcHJfaW5mbygiWyUwNHp4XSAlc1xuIiwgcG9zLCBsaW5lKTsKPiAtCj4gLQkJcHJl diA9IGJ1ZiArIHBvczsKPiAtCQlza2lwID0gZmFsc2U7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgbGl2ZV9scmNfbGF5b3V0KHZvaWQgKmFyZykKPiAtewo+IC0Jc3RydWN0IGludGVsX2d0 ICpndCA9IGFyZzsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWVudW0g aW50ZWxfZW5naW5lX2lkIGlkOwo+IC0JdTMyICpscmM7Cj4gLQlpbnQgZXJyOwo+IC0KPiAtCS8q Cj4gLQkgKiBDaGVjayB0aGUgcmVnaXN0ZXJzIG9mZnNldHMgd2UgdXNlIHRvIGNyZWF0ZSB0aGUg aW5pdGlhbCByZWcgc3RhdGUKPiAtCSAqIG1hdGNoIHRoZSBsYXlvdXQgc2F2ZWQgYnkgSFcuCj4g LQkgKi8KPiAtCj4gLQlscmMgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7Cj4gLQlp ZiAoIWxyYykKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQllcnIgPSAwOwo+IC0JZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZ3QsIGlkKSB7Cj4gLQkJdTMyICpodzsKPiAtCQlpbnQgZHc7Cj4g LQo+IC0JCWlmICghZW5naW5lLT5kZWZhdWx0X3N0YXRlKQo+IC0JCQljb250aW51ZTsKPiAtCj4g LQkJaHcgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChlbmdpbmUtPmRlZmF1bHRfc3RhdGUsCj4g LQkJCQkJICAgICBJOTE1X01BUF9XQik7Cj4gLQkJaWYgKElTX0VSUihodykpIHsKPiAtCQkJZXJy ID0gUFRSX0VSUihodyk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCQlodyArPSBMUkNfU1RBVEVf UE4gKiBQQUdFX1NJWkUgLyBzaXplb2YoKmh3KTsKPiAtCj4gLQkJZXhlY2xpc3RzX2luaXRfcmVn X3N0YXRlKG1lbXNldChscmMsIFBPSVNPTl9JTlVTRSwgUEFHRV9TSVpFKSwKPiAtCQkJCQkgZW5n aW5lLT5rZXJuZWxfY29udGV4dCwKPiAtCQkJCQkgZW5naW5lLAo+IC0JCQkJCSBlbmdpbmUtPmtl cm5lbF9jb250ZXh0LT5yaW5nLAo+IC0JCQkJCSB0cnVlKTsKPiAtCj4gLQkJZHcgPSAwOwo+IC0J CWRvIHsKPiAtCQkJdTMyIGxyaSA9IGh3W2R3XTsKPiAtCj4gLQkJCWlmIChscmkgPT0gMCkgewo+ IC0JCQkJZHcrKzsKPiAtCQkJCWNvbnRpbnVlOwo+IC0JCQl9Cj4gLQo+IC0JCQlpZiAobHJjW2R3 XSA9PSAwKSB7Cj4gLQkJCQlwcl9kZWJ1ZygiJXM6IHNraXBwZWQgaW5zdHJ1Y3Rpb24gJXggYXQg ZHdvcmQgJWRcbiIsCj4gLQkJCQkJIGVuZ2luZS0+bmFtZSwgbHJpLCBkdyk7Cj4gLQkJCQlkdysr Owo+IC0JCQkJY29udGludWU7Cj4gLQkJCX0KPiAtCj4gLQkJCWlmICgobHJpICYgR0VOTUFTSygz MSwgMjMpKSAhPSBNSV9JTlNUUigweDIyLCAwKSkgewo+IC0JCQkJcHJfZXJyKCIlczogRXhwZWN0 ZWQgTFJJIGNvbW1hbmQgYXQgZHdvcmQgJWQsIGZvdW5kICUwOHhcbiIsCj4gLQkJCQkgICAgICAg ZW5naW5lLT5uYW1lLCBkdywgbHJpKTsKPiAtCQkJCWVyciA9IC1FSU5WQUw7Cj4gLQkJCQlicmVh azsKPiAtCQkJfQo+IC0KPiAtCQkJaWYgKGxyY1tkd10gIT0gbHJpKSB7Cj4gLQkJCQlwcl9lcnIo IiVzOiBMUkkgY29tbWFuZCBtaXNtYXRjaCBhdCBkd29yZCAlZCwgZXhwZWN0ZWQgJTA4eCBmb3Vu ZCAlMDh4XG4iLAo+IC0JCQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZHcsIGxyaSwgbHJjW2R3XSk7 Cj4gLQkJCQllcnIgPSAtRUlOVkFMOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCj4gLQkJCWxy aSAmPSAweDdmOwo+IC0JCQlscmkrKzsKPiAtCQkJZHcrKzsKPiAtCj4gLQkJCXdoaWxlIChscmkp IHsKPiAtCQkJCWlmIChod1tkd10gIT0gbHJjW2R3XSkgewo+IC0JCQkJCXByX2VycigiJXM6IERp ZmZlcmVudCByZWdpc3RlcnMgZm91bmQgYXQgZHdvcmQgJWQsIGV4cGVjdGVkICV4LCBmb3VuZCAl eFxuIiwKPiAtCQkJCQkgICAgICAgZW5naW5lLT5uYW1lLCBkdywgaHdbZHddLCBscmNbZHddKTsK PiAtCQkJCQllcnIgPSAtRUlOVkFMOwo+IC0JCQkJCWJyZWFrOwo+IC0JCQkJfQo+IC0KPiAtCQkJ CS8qCj4gLQkJCQkgKiBTa2lwIG92ZXIgdGhlIGFjdHVhbCByZWdpc3RlciB2YWx1ZSBhcyB3ZQo+ IC0JCQkJICogZXhwZWN0IHRoYXQgdG8gZGlmZmVyLgo+IC0JCQkJICovCj4gLQkJCQlkdyArPSAy Owo+IC0JCQkJbHJpIC09IDI7Cj4gLQkJCX0KPiAtCQl9IHdoaWxlICgobHJjW2R3XSAmIH5CSVQo MCkpICE9IE1JX0JBVENIX0JVRkZFUl9FTkQpOwo+IC0KPiAtCQlpZiAoZXJyKSB7Cj4gLQkJCXBy X2luZm8oIiVzOiBIVyByZWdpc3RlciBpbWFnZTpcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQkJCWhl eGR1bXAoaHcsIFBBR0VfU0laRSk7Cj4gLQo+IC0JCQlwcl9pbmZvKCIlczogU1cgcmVnaXN0ZXIg aW1hZ2U6XG4iLCBlbmdpbmUtPm5hbWUpOwo+IC0JCQloZXhkdW1wKGxyYywgUEFHRV9TSVpFKTsK PiAtCQl9Cj4gLQo+IC0JCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZW5naW5lLT5kZWZhdWx0 X3N0YXRlKTsKPiAtCQlpZiAoZXJyKQo+IC0JCQlicmVhazsKPiAtCX0KPiAtCj4gLQlrZnJlZShs cmMpOwo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBmaW5kX29mZnNldChj b25zdCB1MzIgKmxyaSwgdTMyIG9mZnNldCkKPiAtewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCj4gLQkJaWYgKGxyaVtpXSA9 PSBvZmZzZXQpCj4gLQkJCXJldHVybiBpOwo+IC0KPiAtCXJldHVybiAtMTsKPiAtfQo+IC0KPiAt c3RhdGljIGludCBsaXZlX2xyY19maXhlZCh2b2lkICphcmcpCj4gLXsKPiAtCXN0cnVjdCBpbnRl bF9ndCAqZ3QgPSBhcmc7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQll bnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCWludCBlcnIgPSAwOwo+IC0KPiAtCS8qCj4gLQkg KiBDaGVjayB0aGUgYXNzdW1lZCByZWdpc3RlciBvZmZzZXRzIG1hdGNoIHRoZSBhY3R1YWwgbG9j YXRpb25zIGluCj4gLQkgKiB0aGUgY29udGV4dCBpbWFnZS4KPiAtCSAqLwo+IC0KPiAtCWZvcl9l YWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkgewo+IC0JCWNvbnN0IHN0cnVjdCB7Cj4gLQkJCXUz MiByZWc7Cj4gLQkJCXUzMiBvZmZzZXQ7Cj4gLQkJCWNvbnN0IGNoYXIgKm5hbWU7Cj4gLQkJfSB0 YmxbXSA9IHsKPiAtCQkJewo+IC0JCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19TVEFSVChl bmdpbmUtPm1taW9fYmFzZSkpLAo+IC0JCQkJQ1RYX1JJTkdfU1RBUlQgLSAxLAo+IC0JCQkJIlJJ TkdfU1RBUlQiCj4gLQkJCX0sCj4gLQkJCXsKPiAtCQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJ TkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSksCj4gLQkJCQlDVFhfUklOR19DVEwgLSAxLAo+IC0J CQkJIlJJTkdfQ1RMIgo+IC0JCQl9LAo+IC0JCQl7Cj4gLQkJCQlpOTE1X21taW9fcmVnX29mZnNl dChSSU5HX0hFQUQoZW5naW5lLT5tbWlvX2Jhc2UpKSwKPiAtCQkJCUNUWF9SSU5HX0hFQUQgLSAx LAo+IC0JCQkJIlJJTkdfSEVBRCIKPiAtCQkJfSwKPiAtCQkJewo+IC0JCQkJaTkxNV9tbWlvX3Jl Z19vZmZzZXQoUklOR19UQUlMKGVuZ2luZS0+bW1pb19iYXNlKSksCj4gLQkJCQlDVFhfUklOR19U QUlMIC0gMSwKPiAtCQkJCSJSSU5HX1RBSUwiCj4gLQkJCX0sCj4gLQkJCXsKPiAtCQkJCWk5MTVf bW1pb19yZWdfb2Zmc2V0KFJJTkdfTUlfTU9ERShlbmdpbmUtPm1taW9fYmFzZSkpLAo+IC0JCQkJ bHJjX3JpbmdfbWlfbW9kZShlbmdpbmUpLAo+IC0JCQkJIlJJTkdfTUlfTU9ERSIKPiAtCQkJfSwK PiAtCQkJewo+IC0JCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19CQlNUQVRFKGVuZ2luZS0+ bW1pb19iYXNlKSksCj4gLQkJCQlDVFhfQkJfU1RBVEUgLSAxLAo+IC0JCQkJIkJCX1NUQVRFIgo+ IC0JCQl9LAo+IC0JCQl7IH0sCj4gLQkJfSwgKnQ7Cj4gLQkJdTMyICpodzsKPiAtCj4gLQkJaWYg KCFlbmdpbmUtPmRlZmF1bHRfc3RhdGUpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlodyA9IGk5 MTVfZ2VtX29iamVjdF9waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSwKPiAtCQkJCQkgICAg IEk5MTVfTUFQX1dCKTsKPiAtCQlpZiAoSVNfRVJSKGh3KSkgewo+IC0JCQllcnIgPSBQVFJfRVJS KGh3KTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0JCWh3ICs9IExSQ19TVEFURV9QTiAqIFBBR0Vf U0laRSAvIHNpemVvZigqaHcpOwo+IC0KPiAtCQlmb3IgKHQgPSB0Ymw7IHQtPm5hbWU7IHQrKykg ewo+IC0JCQlpbnQgZHcgPSBmaW5kX29mZnNldChodywgdC0+cmVnKTsKPiAtCj4gLQkJCWlmIChk dyAhPSB0LT5vZmZzZXQpIHsKPiAtCQkJCXByX2VycigiJXM6IE9mZnNldCBmb3IgJXMgWzB4JXhd IG1pc21hdGNoLCBmb3VuZCAleCwgZXhwZWN0ZWQgJXhcbiIsCj4gLQkJCQkgICAgICAgZW5naW5l LT5uYW1lLAo+IC0JCQkJICAgICAgIHQtPm5hbWUsCj4gLQkJCQkgICAgICAgdC0+cmVnLAo+IC0J CQkJICAgICAgIGR3LAo+IC0JCQkJICAgICAgIHQtPm9mZnNldCk7Cj4gLQkJCQllcnIgPSAtRUlO VkFMOwo+IC0JCQl9Cj4gLQkJfQo+IC0KPiAtCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGVu Z2luZS0+ZGVmYXVsdF9zdGF0ZSk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBfX2xpdmVfbHJjX3N0YXRlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKPiAtCQkJICAgIHN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaCkKPiAtewo+IC0Jc3RydWN0 IGludGVsX2NvbnRleHQgKmNlOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQllbnVt IHsKPiAtCQlSSU5HX1NUQVJUX0lEWCA9IDAsCj4gLQkJUklOR19UQUlMX0lEWCwKPiAtCQlNQVhf SURYCj4gLQl9Owo+IC0JdTMyIGV4cGVjdGVkW01BWF9JRFhdOwo+IC0JdTMyICpjczsKPiAtCWlu dCBlcnI7Cj4gLQlpbnQgbjsKPiAtCj4gLQljZSA9IGludGVsX2NvbnRleHRfY3JlYXRlKGVuZ2lu ZSk7Cj4gLQlpZiAoSVNfRVJSKGNlKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihjZSk7Cj4gLQo+IC0J ZXJyID0gaW50ZWxfY29udGV4dF9waW4oY2UpOwo+IC0JaWYgKGVycikKPiAtCQlnb3RvIGVycl9w dXQ7Cj4gLQo+IC0JcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRlKGNlKTsKPiAtCWlmIChJU19FUlIo cnEpKSB7Cj4gLQkJZXJyID0gUFRSX0VSUihycSk7Cj4gLQkJZ290byBlcnJfdW5waW47Cj4gLQl9 Cj4gLQo+IC0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogTUFYX0lEWCk7Cj4gLQlpZiAo SVNfRVJSKGNzKSkgewo+IC0JCWVyciA9IFBUUl9FUlIoY3MpOwo+IC0JCWk5MTVfcmVxdWVzdF9h ZGQocnEpOwo+IC0JCWdvdG8gZXJyX3VucGluOwo+IC0JfQo+IC0KPiAtCSpjcysrID0gTUlfU1RP UkVfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9VU0VfR0dUVDsKPiAtCSpjcysrID0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoUklOR19TVEFSVChlbmdpbmUtPm1taW9fYmFzZSkpOwo+IC0JKmNzKysgPSBp OTE1X2dndHRfb2Zmc2V0KHNjcmF0Y2gpICsgUklOR19TVEFSVF9JRFggKiBzaXplb2YodTMyKTsK PiAtCSpjcysrID0gMDsKPiAtCj4gLQlleHBlY3RlZFtSSU5HX1NUQVJUX0lEWF0gPSBpOTE1X2dn dHRfb2Zmc2V0KGNlLT5yaW5nLT52bWEpOwo+IC0KPiAtCSpjcysrID0gTUlfU1RPUkVfUkVHSVNU RVJfTUVNX0dFTjggfCBNSV9VU0VfR0dUVDsKPiAtCSpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoUklOR19UQUlMKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gLQkqY3MrKyA9IGk5MTVfZ2d0dF9v ZmZzZXQoc2NyYXRjaCkgKyBSSU5HX1RBSUxfSURYICogc2l6ZW9mKHUzMik7Cj4gLQkqY3MrKyA9 IDA7Cj4gLQo+IC0JaTkxNV9yZXF1ZXN0X2dldChycSk7Cj4gLQlpOTE1X3JlcXVlc3RfYWRkKHJx KTsKPiAtCj4gLQlpbnRlbF9lbmdpbmVfZmx1c2hfc3VibWlzc2lvbihlbmdpbmUpOwo+IC0JZXhw ZWN0ZWRbUklOR19UQUlMX0lEWF0gPSBjZS0+cmluZy0+dGFpbDsKPiAtCj4gLQlpZiAoaTkxNV9y ZXF1ZXN0X3dhaXQocnEsIDAsIEhaIC8gNSkgPCAwKSB7Cj4gLQkJZXJyID0gLUVUSU1FOwo+IC0J CWdvdG8gZXJyX3JxOwo+IC0JfQo+IC0KPiAtCWNzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAo c2NyYXRjaC0+b2JqLCBJOTE1X01BUF9XQik7Cj4gLQlpZiAoSVNfRVJSKGNzKSkgewo+IC0JCWVy ciA9IFBUUl9FUlIoY3MpOwo+IC0JCWdvdG8gZXJyX3JxOwo+IC0JfQo+IC0KPiAtCWZvciAobiA9 IDA7IG4gPCBNQVhfSURYOyBuKyspIHsKPiAtCQlpZiAoY3Nbbl0gIT0gZXhwZWN0ZWRbbl0pIHsK PiAtCQkJcHJfZXJyKCIlczogU3RvcmVkIHJlZ2lzdGVyWyVkXSB2YWx1ZVsweCV4XSBkaWQgbm90 IG1hdGNoIGV4cGVjdGVkWzB4JXhdXG4iLAo+IC0JCQkgICAgICAgZW5naW5lLT5uYW1lLCBuLCBj c1tuXSwgZXhwZWN0ZWRbbl0pOwo+IC0JCQllcnIgPSAtRUlOVkFMOwo+IC0JCQlicmVhazsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChzY3JhdGNoLT5vYmop Owo+IC0KPiAtZXJyX3JxOgo+IC0JaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gLWVycl91bnBpbjoK PiAtCWludGVsX2NvbnRleHRfdW5waW4oY2UpOwo+IC1lcnJfcHV0Ogo+IC0JaW50ZWxfY29udGV4 dF9wdXQoY2UpOwo+IC0JcmV0dXJuIGVycjsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBsaXZlX2xy Y19zdGF0ZSh2b2lkICphcmcpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7Cj4g LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gLQlzdHJ1Y3QgaTkxNV92bWEgKnNj cmF0Y2g7Cj4gLQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiAtCWludCBlcnIgPSAwOwo+IC0K PiAtCS8qCj4gLQkgKiBDaGVjayB0aGUgbGl2ZSByZWdpc3RlciBzdGF0ZSBtYXRjaGVzIHdoYXQg d2UgZXhwZWN0IGZvciB0aGlzCj4gLQkgKiBpbnRlbF9jb250ZXh0Lgo+IC0JICovCj4gLQo+IC0J c2NyYXRjaCA9IGNyZWF0ZV9zY3JhdGNoKGd0KTsKPiAtCWlmIChJU19FUlIoc2NyYXRjaCkpCj4g LQkJcmV0dXJuIFBUUl9FUlIoc2NyYXRjaCk7Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZ3QsIGlkKSB7Cj4gLQkJZXJyID0gX19saXZlX2xyY19zdGF0ZShlbmdpbmUsIHNjcmF0Y2gp Owo+IC0JCWlmIChlcnIpCj4gLQkJCWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmIChpZ3RfZmx1c2hf dGVzdChndC0+aTkxNSkpCj4gLQkJZXJyID0gLUVJTzsKPiAtCj4gLQlpOTE1X3ZtYV91bnBpbl9h bmRfcmVsZWFzZSgmc2NyYXRjaCwgMCk7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IGdwcl9tYWtlX2RpcnR5KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAt ewo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQl1MzIgKmNzOwo+IC0JaW50IG47Cj4g LQo+IC0JcnEgPSBpbnRlbF9lbmdpbmVfY3JlYXRlX2tlcm5lbF9yZXF1ZXN0KGVuZ2luZSk7Cj4g LQlpZiAoSVNfRVJSKHJxKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihycSk7Cj4gLQo+IC0JY3MgPSBp bnRlbF9yaW5nX2JlZ2luKHJxLCAyICogTlVNX0dQUl9EVyArIDIpOwo+IC0JaWYgKElTX0VSUihj cykpIHsKPiAtCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsKPiAtCQlyZXR1cm4gUFRSX0VSUihjcyk7 Cj4gLQl9Cj4gLQo+IC0JKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShOVU1fR1BSX0RXKTsK PiAtCWZvciAobiA9IDA7IG4gPCBOVU1fR1BSX0RXOyBuKyspIHsKPiAtCQkqY3MrKyA9IENTX0dQ UihlbmdpbmUsIG4pOwo+IC0JCSpjcysrID0gU1RBQ0tfTUFHSUM7Cj4gLQl9Cj4gLQkqY3MrKyA9 IE1JX05PT1A7Cj4gLQo+IC0JaW50ZWxfcmluZ19hZHZhbmNlKHJxLCBjcyk7Cj4gLQlpOTE1X3Jl cXVlc3RfYWRkKHJxKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBf X2xpdmVfZ3ByX2NsZWFyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJICAg IHN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaCkKPiAtewo+IC0Jc3RydWN0IGludGVsX2NvbnRleHQg KmNlOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gLQl1MzIgKmNzOwo+IC0JaW50IGVy cjsKPiAtCWludCBuOwo+IC0KPiAtCWlmIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSA8IDkgJiYg ZW5naW5lLT5jbGFzcyAhPSBSRU5ERVJfQ0xBU1MpCj4gLQkJcmV0dXJuIDA7IC8qIEdQUiBvbmx5 IG9uIHJjczAgZm9yIGdlbjggKi8KPiAtCj4gLQllcnIgPSBncHJfbWFrZV9kaXJ0eShlbmdpbmUp Owo+IC0JaWYgKGVycikKPiAtCQlyZXR1cm4gZXJyOwo+IC0KPiAtCWNlID0gaW50ZWxfY29udGV4 dF9jcmVhdGUoZW5naW5lKTsKPiAtCWlmIChJU19FUlIoY2UpKQo+IC0JCXJldHVybiBQVFJfRVJS KGNlKTsKPiAtCj4gLQlycSA9IGludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3QoY2UpOwo+IC0J aWYgKElTX0VSUihycSkpIHsKPiAtCQllcnIgPSBQVFJfRVJSKHJxKTsKPiAtCQlnb3RvIGVycl9w dXQ7Cj4gLQl9Cj4gLQo+IC0JY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHJxLCA0ICogTlVNX0dQUl9E Vyk7Cj4gLQlpZiAoSVNfRVJSKGNzKSkgewo+IC0JCWVyciA9IFBUUl9FUlIoY3MpOwo+IC0JCWk5 MTVfcmVxdWVzdF9hZGQocnEpOwo+IC0JCWdvdG8gZXJyX3B1dDsKPiAtCX0KPiAtCj4gLQlmb3Ig KG4gPSAwOyBuIDwgTlVNX0dQUl9EVzsgbisrKSB7Cj4gLQkJKmNzKysgPSBNSV9TVE9SRV9SRUdJ U1RFUl9NRU1fR0VOOCB8IE1JX1VTRV9HR1RUOwo+IC0JCSpjcysrID0gQ1NfR1BSKGVuZ2luZSwg bik7Cj4gLQkJKmNzKysgPSBpOTE1X2dndHRfb2Zmc2V0KHNjcmF0Y2gpICsgbiAqIHNpemVvZih1 MzIpOwo+IC0JCSpjcysrID0gMDsKPiAtCX0KPiAtCj4gLQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsK PiAtCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+IC0KPiAtCWlmIChpOTE1X3JlcXVlc3Rfd2FpdChy cSwgMCwgSFogLyA1KSA8IDApIHsKPiAtCQllcnIgPSAtRVRJTUU7Cj4gLQkJZ290byBlcnJfcnE7 Cj4gLQl9Cj4gLQo+IC0JY3MgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChzY3JhdGNoLT5vYmos IEk5MTVfTUFQX1dCKTsKPiAtCWlmIChJU19FUlIoY3MpKSB7Cj4gLQkJZXJyID0gUFRSX0VSUihj cyk7Cj4gLQkJZ290byBlcnJfcnE7Cj4gLQl9Cj4gLQo+IC0JZm9yIChuID0gMDsgbiA8IE5VTV9H UFJfRFc7IG4rKykgewo+IC0JCWlmIChjc1tuXSkgewo+IC0JCQlwcl9lcnIoIiVzOiBHUFJbJWRd LiVzIHdhcyBub3QgemVybywgZm91bmQgMHglMDh4IVxuIiwKPiAtCQkJICAgICAgIGVuZ2luZS0+ bmFtZSwKPiAtCQkJICAgICAgIG4gLyAyLCBuICYgMSA/ICJ1ZHciIDogImxkdyIsCj4gLQkJCSAg ICAgICBjc1tuXSk7Cj4gLQkJCWVyciA9IC1FSU5WQUw7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAt CX0KPiAtCj4gLQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHNjcmF0Y2gtPm9iaik7Cj4gLQo+ IC1lcnJfcnE6Cj4gLQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAtZXJyX3B1dDoKPiAtCWludGVs X2NvbnRleHRfcHV0KGNlKTsKPiAtCXJldHVybiBlcnI7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQg bGl2ZV9ncHJfY2xlYXIodm9pZCAqYXJnKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0g YXJnOwo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0Jc3RydWN0IGk5MTVf dm1hICpzY3JhdGNoOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gLQlpbnQgZXJyID0g MDsKPiAtCj4gLQkvKgo+IC0JICogQ2hlY2sgdGhhdCBHUFIgcmVnaXN0ZXJzIGFyZSBjbGVhcmVk IGluIG5ldyBjb250ZXh0cyBhcyB3ZSBuZWVkCj4gLQkgKiB0byBhdm9pZCBsZWFraW5nIGFueSBp bmZvcm1hdGlvbiBmcm9tIHByZXZpb3VzIGNvbnRleHRzLgo+IC0JICovCj4gLQo+IC0Jc2NyYXRj aCA9IGNyZWF0ZV9zY3JhdGNoKGd0KTsKPiAtCWlmIChJU19FUlIoc2NyYXRjaCkpCj4gLQkJcmV0 dXJuIFBUUl9FUlIoc2NyYXRjaCk7Cj4gLQo+IC0JZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZ3Qs IGlkKSB7Cj4gLQkJZXJyID0gX19saXZlX2dwcl9jbGVhcihlbmdpbmUsIHNjcmF0Y2gpOwo+IC0J CWlmIChlcnIpCj4gLQkJCWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmIChpZ3RfZmx1c2hfdGVzdChn dC0+aTkxNSkpCj4gLQkJZXJyID0gLUVJTzsKPiAtCj4gLQlpOTE1X3ZtYV91bnBpbl9hbmRfcmVs ZWFzZSgmc2NyYXRjaCwgMCk7Cj4gLQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC1pbnQgaW50ZWxf bHJjX2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+IC17Cj4g LQlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewo+IC0JCVNVQlRF U1QobGl2ZV9scmNfbGF5b3V0KSwKPiAtCQlTVUJURVNUKGxpdmVfbHJjX2ZpeGVkKSwKPiAtCQlT VUJURVNUKGxpdmVfbHJjX3N0YXRlKSwKPiAtCQlTVUJURVNUKGxpdmVfZ3ByX2NsZWFyKSwKPiAt CX07Cj4gLQo+IC0JaWYgKCFIQVNfTE9HSUNBTF9SSU5HX0NPTlRFWFRTKGk5MTUpKQo+IC0JCXJl dHVybiAwOwo+IC0KPiAtCXJldHVybiBpbnRlbF9ndF9saXZlX3N1YnRlc3RzKHRlc3RzLCAmaTkx NS0+Z3QpOwo+IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0 ZXN0X2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDM2N2YyODZkYjE2Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5j Cj4gQEAgLTAsMCArMSw1NDQgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9wcmltZV9udW1iZXJzLmg+Cj4gKwo+ICsjaW5jbHVkZSAiZ3Qv aW50ZWxfZW5naW5lX2hlYXJ0YmVhdC5oIgo+ICsjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3Bt LmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9yZXNldC5oIgo+ICsjaW5jbHVkZSAiZ3QvaW50ZWxf cmluZy5oIgo+ICsKPiArI2luY2x1ZGUgImk5MTVfc2VsZnRlc3QuaCIKPiArI2luY2x1ZGUgInNl bGZ0ZXN0cy9pOTE1X3JhbmRvbS5oIgo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2lndF9mbHVzaF90 ZXN0LmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X2xpdmVfdGVzdC5oIgo+ICsjaW5jbHVk ZSAic2VsZnRlc3RzL2lndF9zcGlubmVyLmgiCj4gKyNpbmNsdWRlICJzZWxmdGVzdHMvbGliX3N3 X2ZlbmNlLmgiCj4gKwo+ICsjaW5jbHVkZSAiZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmgi Cj4gKyNpbmNsdWRlICJnZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5oIgo+ICsKPiArI2RlZmlu ZSBDU19HUFIoZW5naW5lLCBuKSAoKGVuZ2luZSktPm1taW9fYmFzZSArIDB4NjAwICsgKG4pICog NCkKPiArI2RlZmluZSBOVU1fR1BSX0RXICgxNiAqIDIpIC8qIGVhY2ggR1BSIGlzIDIgZHdvcmRz ICovCj4gKwo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpjcmVhdGVfc2NyYXRjaChzdHJ1Y3Qg aW50ZWxfZ3QgKmd0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoZ3QtPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAo SVNfRVJSKG9iaikpCj4gKwkJcmV0dXJuIEVSUl9DQVNUKG9iaik7Cj4gKwo+ICsJaTkxNV9nZW1f b2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NBQ0hJTkdfQ0FDSEVEKTsKPiAr Cj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZndC0+Z2d0dC0+dm0sIE5VTEwpOwo+ ICsJaWYgKElTX0VSUih2bWEpKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJ CXJldHVybiB2bWE7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwg UElOX0dMT0JBTCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmop Owo+ICsJCXJldHVybiBFUlJfUFRSKGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHZtYTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgaGV4ZHVtcChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4p Cj4gK3sKPiArCWNvbnN0IHNpemVfdCByb3dzaXplID0gOCAqIHNpemVvZih1MzIpOwo+ICsJY29u c3Qgdm9pZCAqcHJldiA9IE5VTEw7Cj4gKwlib29sIHNraXAgPSBmYWxzZTsKPiArCXNpemVfdCBw b3M7Cj4gKwo+ICsJZm9yIChwb3MgPSAwOyBwb3MgPCBsZW47IHBvcyArPSByb3dzaXplKSB7Cj4g KwkJY2hhciBsaW5lWzEyOF07Cj4gKwo+ICsJCWlmIChwcmV2ICYmICFtZW1jbXAocHJldiwgYnVm ICsgcG9zLCByb3dzaXplKSkgewo+ICsJCQlpZiAoIXNraXApIHsKPiArCQkJCXByX2luZm8oIipc biIpOwo+ICsJCQkJc2tpcCA9IHRydWU7Cj4gKwkJCX0KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsKPiArCQlXQVJOX09OX09OQ0UoaGV4X2R1bXBfdG9fYnVmZmVyKGJ1ZiArIHBvcywgbGVuIC0g cG9zLAo+ICsJCQkJCQlyb3dzaXplLCBzaXplb2YodTMyKSwKPiArCQkJCQkJbGluZSwgc2l6ZW9m KGxpbmUpLAo+ICsJCQkJCQlmYWxzZSkgPj0gc2l6ZW9mKGxpbmUpKTsKPiArCQlwcl9pbmZvKCJb JTA0enhdICVzXG4iLCBwb3MsIGxpbmUpOwo+ICsKPiArCQlwcmV2ID0gYnVmICsgcG9zOwo+ICsJ CXNraXAgPSBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBsaXZlX2xyY19sYXlv dXQodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gYXJnOwo+ICsJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 Cj4gKwl1MzIgKmxyYzsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNrIHRoZSBy ZWdpc3RlcnMgb2Zmc2V0cyB3ZSB1c2UgdG8gY3JlYXRlIHRoZSBpbml0aWFsIHJlZyBzdGF0ZQo+ ICsJICogbWF0Y2ggdGhlIGxheW91dCBzYXZlZCBieSBIVy4KPiArCSAqLwo+ICsKPiArCWxyYyA9 IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbHJjKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCWVyciA9IDA7Cj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBn dCwgaWQpIHsKPiArCQl1MzIgKmh3Owo+ICsJCWludCBkdzsKPiArCj4gKwkJaWYgKCFlbmdpbmUt PmRlZmF1bHRfc3RhdGUpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlodyA9IGk5MTVfZ2VtX29i amVjdF9waW5fbWFwKGVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSwKPiArCQkJCQkgICAgIEk5MTVfTUFQ X1dCKTsKPiArCQlpZiAoSVNfRVJSKGh3KSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKGh3KTsKPiAr CQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWh3ICs9IExSQ19TVEFURV9QTiAqIFBBR0VfU0laRSAvIHNp emVvZigqaHcpOwo+ICsKPiArCQlpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUobWVtc2V0KGxyYywg UE9JU09OX0lOVVNFLCBQQUdFX1NJWkUpLAo+ICsJCQkJCSBlbmdpbmUtPmtlcm5lbF9jb250ZXh0 LAo+ICsJCQkJCSBlbmdpbmUsCj4gKwkJCQkJIGVuZ2luZS0+a2VybmVsX2NvbnRleHQtPnJpbmcs Cj4gKwkJCQkJIHRydWUpOwo+ICsKPiArCQlkdyA9IDA7Cj4gKwkJZG8gewo+ICsJCQl1MzIgbHJp ID0gaHdbZHddOwo+ICsKPiArCQkJaWYgKGxyaSA9PSAwKSB7Cj4gKwkJCQlkdysrOwo+ICsJCQkJ Y29udGludWU7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChscmNbZHddID09IDApIHsKPiArCQkJCXBy X2RlYnVnKCIlczogc2tpcHBlZCBpbnN0cnVjdGlvbiAleCBhdCBkd29yZCAlZFxuIiwKPiArCQkJ CQkgZW5naW5lLT5uYW1lLCBscmksIGR3KTsKPiArCQkJCWR3Kys7Cj4gKwkJCQljb250aW51ZTsK PiArCQkJfQo+ICsKPiArCQkJaWYgKChscmkgJiBHRU5NQVNLKDMxLCAyMykpICE9IE1JX0lOU1RS KDB4MjIsIDApKSB7Cj4gKwkJCQlwcl9lcnIoIiVzOiBFeHBlY3RlZCBMUkkgY29tbWFuZCBhdCBk d29yZCAlZCwgZm91bmQgJTA4eFxuIiwKPiArCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsIGR3LCBs cmkpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwo+ICsJ CQlpZiAobHJjW2R3XSAhPSBscmkpIHsKPiArCQkJCXByX2VycigiJXM6IExSSSBjb21tYW5kIG1p c21hdGNoIGF0IGR3b3JkICVkLCBleHBlY3RlZCAlMDh4IGZvdW5kICUwOHhcbiIsCj4gKwkJCQkg ICAgICAgZW5naW5lLT5uYW1lLCBkdywgbHJpLCBscmNbZHddKTsKPiArCQkJCWVyciA9IC1FSU5W QUw7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsKPiArCQkJbHJpICY9IDB4N2Y7Cj4gKwkJCWxy aSsrOwo+ICsJCQlkdysrOwo+ICsKPiArCQkJd2hpbGUgKGxyaSkgewo+ICsJCQkJaWYgKGh3W2R3 XSAhPSBscmNbZHddKSB7Cj4gKwkJCQkJcHJfZXJyKCIlczogRGlmZmVyZW50IHJlZ2lzdGVycyBm b3VuZCBhdCBkd29yZCAlZCwgZXhwZWN0ZWQgJXgsIGZvdW5kICV4XG4iLAo+ICsJCQkJCSAgICAg ICBlbmdpbmUtPm5hbWUsIGR3LCBod1tkd10sIGxyY1tkd10pOwo+ICsJCQkJCWVyciA9IC1FSU5W QUw7Cj4gKwkJCQkJYnJlYWs7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJLyoKPiArCQkJCSAqIFNraXAg b3ZlciB0aGUgYWN0dWFsIHJlZ2lzdGVyIHZhbHVlIGFzIHdlCj4gKwkJCQkgKiBleHBlY3QgdGhh dCB0byBkaWZmZXIuCj4gKwkJCQkgKi8KPiArCQkJCWR3ICs9IDI7Cj4gKwkJCQlscmkgLT0gMjsK PiArCQkJfQo+ICsJCX0gd2hpbGUgKChscmNbZHddICYgfkJJVCgwKSkgIT0gTUlfQkFUQ0hfQlVG RkVSX0VORCk7Cj4gKwo+ICsJCWlmIChlcnIpIHsKPiArCQkJcHJfaW5mbygiJXM6IEhXIHJlZ2lz dGVyIGltYWdlOlxuIiwgZW5naW5lLT5uYW1lKTsKPiArCQkJaGV4ZHVtcChodywgUEFHRV9TSVpF KTsKPiArCj4gKwkJCXByX2luZm8oIiVzOiBTVyByZWdpc3RlciBpbWFnZTpcbiIsIGVuZ2luZS0+ bmFtZSk7Cj4gKwkJCWhleGR1bXAobHJjLCBQQUdFX1NJWkUpOwo+ICsJCX0KPiArCj4gKwkJaTkx NV9nZW1fb2JqZWN0X3VucGluX21hcChlbmdpbmUtPmRlZmF1bHRfc3RhdGUpOwo+ICsJCWlmIChl cnIpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWtmcmVlKGxyYyk7Cj4gKwlyZXR1cm4gZXJy Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbmRfb2Zmc2V0KGNvbnN0IHUzMiAqbHJpLCB1MzIg b2Zmc2V0KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpF IC8gc2l6ZW9mKHUzMik7IGkrKykKPiArCQlpZiAobHJpW2ldID09IG9mZnNldCkKPiArCQkJcmV0 dXJuIGk7Cj4gKwo+ICsJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpdmVfbHJj X2ZpeGVkKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9IGFyZzsKPiAr CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lk IGlkOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIENoZWNrIHRoZSBhc3N1bWVk IHJlZ2lzdGVyIG9mZnNldHMgbWF0Y2ggdGhlIGFjdHVhbCBsb2NhdGlvbnMgaW4KPiArCSAqIHRo ZSBjb250ZXh0IGltYWdlLgo+ICsJICovCj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwg Z3QsIGlkKSB7Cj4gKwkJY29uc3Qgc3RydWN0IHsKPiArCQkJdTMyIHJlZzsKPiArCQkJdTMyIG9m ZnNldDsKPiArCQkJY29uc3QgY2hhciAqbmFtZTsKPiArCQl9IHRibFtdID0gewo+ICsJCQl7Cj4g KwkJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1NUQVJUKGVuZ2luZS0+bW1pb19iYXNlKSks Cj4gKwkJCQlDVFhfUklOR19TVEFSVCAtIDEsCj4gKwkJCQkiUklOR19TVEFSVCIKPiArCQkJfSwK PiArCQkJewo+ICsJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DVEwoZW5naW5lLT5tbWlv X2Jhc2UpKSwKPiArCQkJCUNUWF9SSU5HX0NUTCAtIDEsCj4gKwkJCQkiUklOR19DVEwiCj4gKwkJ CX0sCj4gKwkJCXsKPiArCQkJCWk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfSEVBRChlbmdpbmUt Pm1taW9fYmFzZSkpLAo+ICsJCQkJQ1RYX1JJTkdfSEVBRCAtIDEsCj4gKwkJCQkiUklOR19IRUFE Igo+ICsJCQl9LAo+ICsJCQl7Cj4gKwkJCQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1RBSUwo ZW5naW5lLT5tbWlvX2Jhc2UpKSwKPiArCQkJCUNUWF9SSU5HX1RBSUwgLSAxLAo+ICsJCQkJIlJJ TkdfVEFJTCIKPiArCQkJfSwKPiArCQkJewo+ICsJCQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklO R19NSV9NT0RFKGVuZ2luZS0+bW1pb19iYXNlKSksCj4gKwkJCQlpbnRlbF9scmNfcmluZ19taV9t b2RlKGVuZ2luZSksCj4gKwkJCQkiUklOR19NSV9NT0RFIgo+ICsJCQl9LAo+ICsJCQl7Cj4gKwkJ CQlpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0JCU1RBVEUoZW5naW5lLT5tbWlvX2Jhc2UpKSwK PiArCQkJCUNUWF9CQl9TVEFURSAtIDEsCj4gKwkJCQkiQkJfU1RBVEUiCj4gKwkJCX0sCj4gKwkJ CXsgfSwKPiArCQl9LCAqdDsKPiArCQl1MzIgKmh3Owo+ICsKPiArCQlpZiAoIWVuZ2luZS0+ZGVm YXVsdF9zdGF0ZSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWh3ID0gaTkxNV9nZW1fb2JqZWN0 X3Bpbl9tYXAoZW5naW5lLT5kZWZhdWx0X3N0YXRlLAo+ICsJCQkJCSAgICAgSTkxNV9NQVBfV0Ip Owo+ICsJCWlmIChJU19FUlIoaHcpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIoaHcpOwo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwkJaHcgKz0gTFJDX1NUQVRFX1BOICogUEFHRV9TSVpFIC8gc2l6ZW9m KCpodyk7Cj4gKwo+ICsJCWZvciAodCA9IHRibDsgdC0+bmFtZTsgdCsrKSB7Cj4gKwkJCWludCBk dyA9IGZpbmRfb2Zmc2V0KGh3LCB0LT5yZWcpOwo+ICsKPiArCQkJaWYgKGR3ICE9IHQtPm9mZnNl dCkgewo+ICsJCQkJcHJfZXJyKCIlczogT2Zmc2V0IGZvciAlcyBbMHgleF0gbWlzbWF0Y2gsIGZv dW5kICV4LCBleHBlY3RlZCAleFxuIiwKPiArCQkJCSAgICAgICBlbmdpbmUtPm5hbWUsCj4gKwkJ CQkgICAgICAgdC0+bmFtZSwKPiArCQkJCSAgICAgICB0LT5yZWcsCj4gKwkJCQkgICAgICAgZHcs Cj4gKwkJCQkgICAgICAgdC0+b2Zmc2V0KTsKPiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCX0K PiArCQl9Cj4gKwo+ICsJCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoZW5naW5lLT5kZWZhdWx0 X3N0YXRlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IF9fbGl2ZV9scmNfc3RhdGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkg ICAgc3RydWN0IGk5MTVfdm1hICpzY3JhdGNoKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2U7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCWVudW0gewo+ICsJCVJJTkdf U1RBUlRfSURYID0gMCwKPiArCQlSSU5HX1RBSUxfSURYLAo+ICsJCU1BWF9JRFgKPiArCX07Cj4g Kwl1MzIgZXhwZWN0ZWRbTUFYX0lEWF07Cj4gKwl1MzIgKmNzOwo+ICsJaW50IGVycjsKPiArCWlu dCBuOwo+ICsKPiArCWNlID0gaW50ZWxfY29udGV4dF9jcmVhdGUoZW5naW5lKTsKPiArCWlmIChJ U19FUlIoY2UpKQo+ICsJCXJldHVybiBQVFJfRVJSKGNlKTsKPiArCj4gKwllcnIgPSBpbnRlbF9j b250ZXh0X3BpbihjZSk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyX3B1dDsKPiArCj4gKwly cSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoY2UpOwo+ICsJaWYgKElTX0VSUihycSkpIHsKPiArCQll cnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIGVycl91bnBpbjsKPiArCX0KPiArCj4gKwljcyA9 IGludGVsX3JpbmdfYmVnaW4ocnEsIDQgKiBNQVhfSURYKTsKPiArCWlmIChJU19FUlIoY3MpKSB7 Cj4gKwkJZXJyID0gUFRSX0VSUihjcyk7Cj4gKwkJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4gKwkJ Z290byBlcnJfdW5waW47Cj4gKwl9Cj4gKwo+ICsJKmNzKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9N RU1fR0VOOCB8IE1JX1VTRV9HR1RUOwo+ICsJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChS SU5HX1NUQVJUKGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4gKwkqY3MrKyA9IGk5MTVfZ2d0dF9vZmZz ZXQoc2NyYXRjaCkgKyBSSU5HX1NUQVJUX0lEWCAqIHNpemVvZih1MzIpOwo+ICsJKmNzKysgPSAw Owo+ICsKPiArCWV4cGVjdGVkW1JJTkdfU1RBUlRfSURYXSA9IGk5MTVfZ2d0dF9vZmZzZXQoY2Ut PnJpbmctPnZtYSk7Cj4gKwo+ICsJKmNzKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU1fR0VOOCB8 IE1JX1VTRV9HR1RUOwo+ICsJKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX1RBSUwo ZW5naW5lLT5tbWlvX2Jhc2UpKTsKPiArCSpjcysrID0gaTkxNV9nZ3R0X29mZnNldChzY3JhdGNo KSArIFJJTkdfVEFJTF9JRFggKiBzaXplb2YodTMyKTsKPiArCSpjcysrID0gMDsKPiArCj4gKwlp OTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICsKPiArCWlu dGVsX2VuZ2luZV9mbHVzaF9zdWJtaXNzaW9uKGVuZ2luZSk7Cj4gKwlleHBlY3RlZFtSSU5HX1RB SUxfSURYXSA9IGNlLT5yaW5nLT50YWlsOwo+ICsKPiArCWlmIChpOTE1X3JlcXVlc3Rfd2FpdChy cSwgMCwgSFogLyA1KSA8IDApIHsKPiArCQllcnIgPSAtRVRJTUU7Cj4gKwkJZ290byBlcnJfcnE7 Cj4gKwl9Cj4gKwo+ICsJY3MgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChzY3JhdGNoLT5vYmos IEk5MTVfTUFQX1dCKTsKPiArCWlmIChJU19FUlIoY3MpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihj cyk7Cj4gKwkJZ290byBlcnJfcnE7Cj4gKwl9Cj4gKwo+ICsJZm9yIChuID0gMDsgbiA8IE1BWF9J RFg7IG4rKykgewo+ICsJCWlmIChjc1tuXSAhPSBleHBlY3RlZFtuXSkgewo+ICsJCQlwcl9lcnIo IiVzOiBTdG9yZWQgcmVnaXN0ZXJbJWRdIHZhbHVlWzB4JXhdIGRpZCBub3QgbWF0Y2ggZXhwZWN0 ZWRbMHgleF1cbiIsCj4gKwkJCSAgICAgICBlbmdpbmUtPm5hbWUsIG4sIGNzW25dLCBleHBlY3Rl ZFtuXSk7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHNjcmF0Y2gtPm9iaik7Cj4gKwo+ICtlcnJf cnE6Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiArZXJyX3VucGluOgo+ICsJaW50ZWxfY29u dGV4dF91bnBpbihjZSk7Cj4gK2Vycl9wdXQ6Cj4gKwlpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4g KwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpdmVfbHJjX3N0YXRlKHZvaWQg KmFyZykKPiArewo+ICsJc3RydWN0IGludGVsX2d0ICpndCA9IGFyZzsKPiArCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqc2NyYXRjaDsKPiArCWVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJLyoKPiArCSAq IENoZWNrIHRoZSBsaXZlIHJlZ2lzdGVyIHN0YXRlIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgZm9y IHRoaXMKPiArCSAqIGludGVsX2NvbnRleHQuCj4gKwkgKi8KPiArCj4gKwlzY3JhdGNoID0gY3Jl YXRlX3NjcmF0Y2goZ3QpOwo+ICsJaWYgKElTX0VSUihzY3JhdGNoKSkKPiArCQlyZXR1cm4gUFRS X0VSUihzY3JhdGNoKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwgaWQpIHsK PiArCQllcnIgPSBfX2xpdmVfbHJjX3N0YXRlKGVuZ2luZSwgc2NyYXRjaCk7Cj4gKwkJaWYgKGVy cikKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlndF9mbHVzaF90ZXN0KGd0LT5pOTE1 KSkKPiArCQllcnIgPSAtRUlPOwo+ICsKPiArCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZz Y3JhdGNoLCAwKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3ByX21h a2VfZGlydHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycTsKPiArCXUzMiAqY3M7Cj4gKwlpbnQgbjsKPiArCj4gKwlycSA9IGlu dGVsX2VuZ2luZV9jcmVhdGVfa2VybmVsX3JlcXVlc3QoZW5naW5lKTsKPiArCWlmIChJU19FUlIo cnEpKQo+ICsJCXJldHVybiBQVFJfRVJSKHJxKTsKPiArCj4gKwljcyA9IGludGVsX3JpbmdfYmVn aW4ocnEsIDIgKiBOVU1fR1BSX0RXICsgMik7Cj4gKwlpZiAoSVNfRVJSKGNzKSkgewo+ICsJCWk5 MTVfcmVxdWVzdF9hZGQocnEpOwo+ICsJCXJldHVybiBQVFJfRVJSKGNzKTsKPiArCX0KPiArCj4g KwkqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKE5VTV9HUFJfRFcpOwo+ICsJZm9yIChuID0g MDsgbiA8IE5VTV9HUFJfRFc7IG4rKykgewo+ICsJCSpjcysrID0gQ1NfR1BSKGVuZ2luZSwgbik7 Cj4gKwkJKmNzKysgPSBTVEFDS19NQUdJQzsKPiArCX0KPiArCSpjcysrID0gTUlfTk9PUDsKPiAr Cj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNzKTsKPiArCWk5MTVfcmVxdWVzdF9hZGQocnEp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbGl2ZV9ncHJfY2xl YXIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkgICAgc3RydWN0IGk5MTVf dm1hICpzY3JhdGNoKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4gKwlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCXUzMiAqY3M7Cj4gKwlpbnQgZXJyOwo+ICsJaW50IG47 Cj4gKwo+ICsJaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgOSAmJiBlbmdpbmUtPmNsYXNz ICE9IFJFTkRFUl9DTEFTUykKPiArCQlyZXR1cm4gMDsgLyogR1BSIG9ubHkgb24gcmNzMCBmb3Ig Z2VuOCAqLwo+ICsKPiArCWVyciA9IGdwcl9tYWtlX2RpcnR5KGVuZ2luZSk7Cj4gKwlpZiAoZXJy KQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJY2UgPSBpbnRlbF9jb250ZXh0X2NyZWF0ZShlbmdp bmUpOwo+ICsJaWYgKElTX0VSUihjZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoY2UpOwo+ICsKPiAr CXJxID0gaW50ZWxfY29udGV4dF9jcmVhdGVfcmVxdWVzdChjZSk7Cj4gKwlpZiAoSVNfRVJSKHJx KSkgewo+ICsJCWVyciA9IFBUUl9FUlIocnEpOwo+ICsJCWdvdG8gZXJyX3B1dDsKPiArCX0KPiAr Cj4gKwljcyA9IGludGVsX3JpbmdfYmVnaW4ocnEsIDQgKiBOVU1fR1BSX0RXKTsKPiArCWlmIChJ U19FUlIoY3MpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihjcyk7Cj4gKwkJaTkxNV9yZXF1ZXN0X2Fk ZChycSk7Cj4gKwkJZ290byBlcnJfcHV0Owo+ICsJfQo+ICsKPiArCWZvciAobiA9IDA7IG4gPCBO VU1fR1BSX0RXOyBuKyspIHsKPiArCQkqY3MrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44 IHwgTUlfVVNFX0dHVFQ7Cj4gKwkJKmNzKysgPSBDU19HUFIoZW5naW5lLCBuKTsKPiArCQkqY3Mr KyA9IGk5MTVfZ2d0dF9vZmZzZXQoc2NyYXRjaCkgKyBuICogc2l6ZW9mKHUzMik7Cj4gKwkJKmNz KysgPSAwOwo+ICsJfQo+ICsKPiArCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJaTkxNV9yZXF1 ZXN0X2FkZChycSk7Cj4gKwo+ICsJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAvIDUp IDwgMCkgewo+ICsJCWVyciA9IC1FVElNRTsKPiArCQlnb3RvIGVycl9ycTsKPiArCX0KPiArCj4g KwljcyA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHNjcmF0Y2gtPm9iaiwgSTkxNV9NQVBfV0Ip Owo+ICsJaWYgKElTX0VSUihjcykpIHsKPiArCQllcnIgPSBQVFJfRVJSKGNzKTsKPiArCQlnb3Rv IGVycl9ycTsKPiArCX0KPiArCj4gKwlmb3IgKG4gPSAwOyBuIDwgTlVNX0dQUl9EVzsgbisrKSB7 Cj4gKwkJaWYgKGNzW25dKSB7Cj4gKwkJCXByX2VycigiJXM6IEdQUlslZF0uJXMgd2FzIG5vdCB6 ZXJvLCBmb3VuZCAweCUwOHghXG4iLAo+ICsJCQkgICAgICAgZW5naW5lLT5uYW1lLAo+ICsJCQkg ICAgICAgbiAvIDIsIG4gJiAxID8gInVkdyIgOiAibGR3IiwKPiArCQkJICAgICAgIGNzW25dKTsK PiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWk5 MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoc2NyYXRjaC0+b2JqKTsKPiArCj4gK2Vycl9ycToKPiAr CWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICtlcnJfcHV0Ogo+ICsJaW50ZWxfY29udGV4dF9wdXQo Y2UpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBsaXZlX2dwcl9jbGVh cih2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3QgPSBhcmc7Cj4gKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnNjcmF0Y2g7 Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCS8q Cj4gKwkgKiBDaGVjayB0aGF0IEdQUiByZWdpc3RlcnMgYXJlIGNsZWFyZWQgaW4gbmV3IGNvbnRl eHRzIGFzIHdlIG5lZWQKPiArCSAqIHRvIGF2b2lkIGxlYWtpbmcgYW55IGluZm9ybWF0aW9uIGZy b20gcHJldmlvdXMgY29udGV4dHMuCj4gKwkgKi8KPiArCj4gKwlzY3JhdGNoID0gY3JlYXRlX3Nj cmF0Y2goZ3QpOwo+ICsJaWYgKElTX0VSUihzY3JhdGNoKSkKPiArCQlyZXR1cm4gUFRSX0VSUihz Y3JhdGNoKTsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwgaWQpIHsKPiArCQll cnIgPSBfX2xpdmVfZ3ByX2NsZWFyKGVuZ2luZSwgc2NyYXRjaCk7Cj4gKwkJaWYgKGVycikKPiAr CQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlndF9mbHVzaF90ZXN0KGd0LT5pOTE1KSkKPiAr CQllcnIgPSAtRUlPOwo+ICsKPiArCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZzY3JhdGNo LCAwKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK2ludCBpbnRlbF9scmNfbGl2ZV9zZWxm dGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0YXRpYyBjb25z dCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChsaXZlX2xyY19s YXlvdXQpLAo+ICsJCVNVQlRFU1QobGl2ZV9scmNfZml4ZWQpLAo+ICsJCVNVQlRFU1QobGl2ZV9s cmNfc3RhdGUpLAo+ICsJCVNVQlRFU1QobGl2ZV9ncHJfY2xlYXIpLAo+ICsJfTsKPiArCj4gKwlp ZiAoIUhBU19MT0dJQ0FMX1JJTkdfQ09OVEVYVFMoaTkxNSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJcmV0dXJuIGludGVsX2d0X2xpdmVfc3VidGVzdHModGVzdHMsICZpOTE1LT5ndCk7Cj4gK30K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5jCj4gaW5kZXggMTAx NzI4MDA2YWU5Li44MDljZDEwZGM3MzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX2Fkcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv dWMvaW50ZWxfZ3VjX2Fkcy5jCj4gQEAgLTQsNiArNCw3IEBACj4gICAgKi8KPiAgIAo+ICAgI2lu Y2x1ZGUgImd0L2ludGVsX2d0LmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9scmMuaCIKPiAgICNp bmNsdWRlICJpbnRlbF9ndWNfYWRzLmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfdWMuaCIKPiAgICNp bmNsdWRlICJpOTE1X2Rydi5oIgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMv aW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+IGluZGV4IDllNDIzMjRmZGVjZC4uYjdiNGZiYzU3MzRl IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJt aXNzaW9uLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3Vi bWlzc2lvbi5jCj4gQEAgLTEwLDYgKzEwLDcgQEAKPiAgICNpbmNsdWRlICJndC9pbnRlbF9lbmdp bmVfcG0uaCIKPiAgICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgo+ICAgI2luY2x1ZGUgImd0L2lu dGVsX2d0X3BtLmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9scmMuaCIKPiAgICNpbmNsdWRlICJn dC9pbnRlbF9scmNfcmVnLmgiCj4gICAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgo+ICAgCj4g QEAgLTQwMSw2ICs0MDIsMzkgQEAgY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3RydWN0IGludGVsX2Vu Z2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCj4gICAJCW1lbXNldChleGVjbGlzdHMt PmluZmxpZ2h0LCAwLCBzaXplb2YoZXhlY2xpc3RzLT5pbmZsaWdodCkpOwo+ICAgfQo+ICAgCj4g K3N0YXRpYyB2b2lkIGNvbnRleHRfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LAo+ICsJCQkgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiArCQkJICB1MzIgaGVhZCwKPiAr CQkJICBib29sIHNjcnViKQo+ICt7Cj4gKwlHRU1fQlVHX09OKCFpbnRlbF9jb250ZXh0X2lzX3Bp bm5lZChjZSkpOwo+ICsKPiArCS8qCj4gKwkgKiBXZSB3YW50IGEgc2ltcGxlIGNvbnRleHQgKyBy aW5nIHRvIGV4ZWN1dGUgdGhlIGJyZWFkY3J1bWIgdXBkYXRlLgo+ICsJICogV2UgY2Fubm90IHJl bHkgb24gdGhlIGNvbnRleHQgYmVpbmcgaW50YWN0IGFjcm9zcyB0aGUgR1BVIGhhbmcsCj4gKwkg KiBzbyBjbGVhciBpdCBhbmQgcmVidWlsZCBqdXN0IHdoYXQgd2UgbmVlZCBmb3IgdGhlIGJyZWFk Y3J1bWIuCj4gKwkgKiBBbGwgcGVuZGluZyByZXF1ZXN0cyBmb3IgdGhpcyBjb250ZXh0IHdpbGwg YmUgemFwcGVkLCBhbmQgYW55Cj4gKwkgKiBmdXR1cmUgcmVxdWVzdCB3aWxsIGJlIGFmdGVyIHVz ZXJzcGFjZSBoYXMgaGFkIHRoZSBvcHBvcnR1bml0eQo+ICsJICogdG8gcmVjcmVhdGUgaXRzIG93 biBzdGF0ZS4KPiArCSAqLwo+ICsJaWYgKHNjcnViKSB7Cj4gKwkJdTMyICpyZWdzID0gY2UtPmxy Y19yZWdfc3RhdGU7Cj4gKwo+ICsJCWlmIChlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0YXRlKQo+ ICsJCQltZW1jcHkocmVncywgLyogc2tpcCByZXN0b3JpbmcgdGhlIHZhbmlsbGEgUFBIV1NQICov Cj4gKwkJCSAgICAgICBlbmdpbmUtPnBpbm5lZF9kZWZhdWx0X3N0YXRlICsgTFJDX1NUQVRFX1BO ICogUEFHRV9TSVpFLAo+ICsJCQkgICAgICAgZW5naW5lLT5jb250ZXh0X3NpemUgLSBQQUdFX1NJ WkUpOwo+ICsKPiArCQlpbnRlbF9scmNfaW5pdF9yZWdfc3RhdGUocmVncywgY2UsIGVuZ2luZSwg Y2UtPnJpbmcsIGZhbHNlKTsKPiArCX0KPiArCj4gKwkvKiBSZXJ1biB0aGUgcmVxdWVzdDsgaXRz IHBheWxvYWQgaGFzIGJlZW4gbmV1dGVyZWQgKGlmIGd1aWx0eSkuICovCj4gKwljZS0+cmluZy0+ aGVhZCA9IGhlYWQ7Cj4gKwlpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7Cj4gKwo+ ICsJaW50ZWxfbHJjX3VwZGF0ZV9yZWdfc3RhdGUoY2UsIGVuZ2luZSk7Cj4gK30KPiArCj4gICBz dGF0aWMgdm9pZCBndWNfcmVzZXRfcmV3aW5kKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgYm9vbCBzdGFsbGVkKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3Rz ICogY29uc3QgZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+IEBAIC00MjAsNyArNDU0 LDcgQEAgc3RhdGljIHZvaWQgZ3VjX3Jlc2V0X3Jld2luZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKPiAgIAkJc3RhbGxlZCA9IGZhbHNlOwo+ICAgCj4gICAJ X19pOTE1X3JlcXVlc3RfcmVzZXQocnEsIHN0YWxsZWQpOwo+IC0JaW50ZWxfbHJfY29udGV4dF9y ZXNldChlbmdpbmUsIHJxLT5jb250ZXh0LCBycS0+aGVhZCwgc3RhbGxlZCk7Cj4gKwljb250ZXh0 X3Jlc2V0KGVuZ2luZSwgcnEtPmNvbnRleHQsIHJxLT5oZWFkLCBzdGFsbGVkKTsKPiAgIAo+ICAg b3V0X3VubG9jazoKPiAgIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5s b2NrLCBmbGFncyk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tbWlv X2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+IGlu ZGV4IGFhZjE1OTE2ZDI5YS4uMzM0ZGNmYTJkMzJmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9tbWlvX2NvbnRleHQuYwo+IEBAIC0zNSw2ICszNSw3IEBACj4gICAKPiAgICNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImd0L2ludGVsX2NvbnRleHQuaCIKPiArI2luY2x1 ZGUgImd0L2ludGVsX2xyYy5oIgo+ICAgI2luY2x1ZGUgImd0L2ludGVsX3JpbmcuaCIKPiAgICNp bmNsdWRlICJndnQuaCIKPiAgICNpbmNsdWRlICJ0cmFjZS5oIgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvc2NoZWR1bGVyLmMKPiBpbmRleCA2ODVkMWUwNGE1ZmYuLjM3OGEzOWFlZmI2MCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPiBAQCAtMzcsNiArMzcsNyBAQAo+ICAg Cj4gICAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX3BtLmgiCj4gICAjaW5jbHVkZSAiZ3QvaW50ZWxf Y29udGV4dC5oIgo+ICsjaW5jbHVkZSAiZ3QvaW50ZWxfbHJjLmgiCj4gICAjaW5jbHVkZSAiZ3Qv aW50ZWxfcmluZy5oIgo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiBpbmRleCBhOGEwOGM2MzI3OGUuLjc2OTNkMzdhNmQwZSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC03Nyw3ICs3Nyw2IEBACj4gICAjaW5jbHVkZSAiZ2Vt L2k5MTVfZ2VtX3Nocmlua2VyLmgiCj4gICAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX3N0b2xlbi5o Igo+ICAgCj4gLSNpbmNsdWRlICJndC9pbnRlbF9scmMuaCIKPiAgICNpbmNsdWRlICJndC9pbnRl bF9lbmdpbmUuaCIKPiAgICNpbmNsdWRlICJndC9pbnRlbF9ndF90eXBlcy5oIgo+ICAgI2luY2x1 ZGUgImd0L2ludGVsX3dvcmthcm91bmRzLmgiCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBp bmRleCA1MzVhMTI1MjBkYmEuLmU4Y2Y5ZjJiMjJjYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3BlcmYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cGVyZi5jCj4gQEAgLTE5OSw2ICsxOTksNyBAQAo+ICAgI2luY2x1ZGUgImd0L2ludGVsX2VuZ2lu ZV9wbS5oIgo+ICAgI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV91c2VyLmgiCj4gICAjaW5jbHVk ZSAiZ3QvaW50ZWxfZ3QuaCIKPiArI2luY2x1ZGUgImd0L2ludGVsX2xyYy5oIgo+ICAgI2luY2x1 ZGUgImd0L2ludGVsX2xyY19yZWcuaCIKPiAgICNpbmNsdWRlICJndC9pbnRlbF9yaW5nLmgiCj4g ICAKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==