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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2678FC7618B for ; Sat, 18 Mar 2023 15:37:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229891AbjCRPhx (ORCPT ); Sat, 18 Mar 2023 11:37:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55326 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229516AbjCRPhw (ORCPT ); Sat, 18 Mar 2023 11:37:52 -0400 X-Greylist: delayed 1313 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Sat, 18 Mar 2023 08:37:44 PDT Received: from out-42.mta1.migadu.com (out-42.mta1.migadu.com [95.215.58.42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B87462F069 for ; Sat, 18 Mar 2023 08:37:44 -0700 (PDT) Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1679153862; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C/PbSdg3O0dwbhMTPBRQ/WZZW/97xFJwz9ZtPt8lM4U=; b=p6xocW/e643NRjEvPRd8DhmhQE456k3gcwLX3mHjnGnFvZ5VuP1GOg1WqrkIIMjJbPhq8n j09lJNa85AGVMdghWpaBSAD6DZcdo80rqhVjo73sqQs4HoRtQhkM7ZkmRaXSxh4qLie6ln sJ3jz5kXhepXQSqJp0Z5rqEOiXO3j7o= Subject: Re: [RFC PATCH v1] usb/phy add sprd ums512 usbphy X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Cixi Geng To: Baolin Wang , gregkh@linuxfoundation.org, orsonzhai@gmail.com, zhang.lyra@gmail.com, arnd@arndb.de, tony@atomide.com, felipe.balbi@linux.intel.com, paul@crapouillou.net, linus.walleij@linaro.org, cixi.geng1@unisoc.com, gengcixi@gmail.com Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Date: Sat, 18 Mar 2023 23:37:28 +0800 In-Reply-To: <01d7b3c7-1514-5d8c-fc88-11b3d806496f@linux.alibaba.com> References: <20230312171438.177952-1-cixi.geng@linux.dev> <01d7b3c7-1514-5d8c-fc88-11b3d806496f@linux.alibaba.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org T24gTW9uLCAyMDIzLTAzLTEzIGF0IDE3OjExICswODAwLCBCYW9saW4gV2FuZyB3cm90ZToKPiAK PiAKPiBPbiAzLzEzLzIwMjMgMToxNCBBTSwgQ2l4aSBHZW5nIHdyb3RlOgo+ID4gRnJvbTogQ2l4 aSBHZW5nIDxjaXhpLmdlbmcxQHVuaXNvYy5jb20+Cj4gPiAKPiA+IFRoaXMgZHJpdmVyIGlzIHN1 cHBvcnQgVVNCMiBwaHkgZm9yIFNwcmVhZHRydW0gVU1TNTEyIFNPQydzLAo+ID4gCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBDaXhpIEdlbmcgPGNpeGkuZ2VuZzFAdW5pc29jLmNvbT4KPiA+IC0tLQo+ID4g wqAgZHJpdmVycy91c2IvcGh5L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTAgKwo+ ID4gwqAgZHJpdmVycy91c2IvcGh5L01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEg Kwo+ID4gwqAgZHJpdmVycy91c2IvcGh5L3BoeS1zcHJkLXVtczUxMi5jIHwgNTExCj4gPiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+IMKgIGRyaXZlcnMvdXNiL3BoeS9waHktc3By ZC11bXM1MTIuaCB8wqAgMzkgKysrCj4gPiDCoCA0IGZpbGVzIGNoYW5nZWQsIDU2MSBpbnNlcnRp b25zKCspCj4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvcGh5L3BoeS1zcHJk LXVtczUxMi5jCj4gPiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvcGh5L3BoeS1z cHJkLXVtczUxMi5oCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvS2NvbmZp ZyBiL2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnCj4gPiBpbmRleCA1ZjYyOWQ3Y2FkNjQuLmZhNTU2 NGU2ZjNhMyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdXNiL3BoeS9LY29uZmlnCj4gPiArKysg Yi9kcml2ZXJzL3VzYi9waHkvS2NvbmZpZwo+ID4gQEAgLTE1OCw2ICsxNTgsMTYgQEAgY29uZmln IFVTQl9URUdSQV9QSFkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoCBUaGlzIGRyaXZlciBwcm92aWRl cyBQSFkgc3VwcG9ydCBmb3IgdGhlIFVTQiBjb250cm9sbGVycwo+ID4gZm91bmQKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoCBvbiBOVklESUEgVGVncmEgU29DJ3MuCj4gPiDCoCAKPiA+ICtjb25maWcg VVNCX1NQUkRfVU1TNTEyX1BIWQo+ID4gK8KgwqDCoMKgwqDCoMKgdHJpc3RhdGUgIlNwcmVhZHRy dW0gdW1zNTEyIFVTQjIgUEhZIERyaXZlciIKPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24g QVJDSF9TUFJEIHx8IENPTVBJTEVfVEVTVAo+ID4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IFVTQl9Q SFkKPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBFWFRDT05fVVNCX0dQSU8KPiA+ICvCoMKgwqDC oMKgwqDCoGhlbHAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQg dGhlIFNQUkQgdW1zNTEyIFVTQjIgUEhZIHRoYXQgaXMKPiA+IHBhcnQgb2YgU09DLgo+ID4gK8Kg wqDCoMKgwqDCoMKgwqAgVGhpcyBkcml2ZXIgdGFrZXMgY2FyZSBvZiBhbGwgdGhlIFBIWSBmdW5j dGlvbmFsaXR5LAo+ID4gbm9ybWFsbHkgcGFpcmVkIHdpdGgKPiA+ICvCoMKgwqDCoMKgwqDCoMKg IERlc2lnbldhcmUgVVNCMjAgKERSRCkgQ29udHJvbGxlci4KPiA+ICsKPiA+IMKgIGNvbmZpZyBV U0JfVUxQSQo+ID4gwqDCoMKgwqDCoMKgwqDCoGJvb2wgIkdlbmVyaWMgVUxQSSBUcmFuc2NlaXZl ciBEcml2ZXIiCj4gPiDCoMKgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBBUk0gfHwgQVJNNjQgfHwg Q09NUElMRV9URVNUCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcGh5L01ha2VmaWxlIGIv ZHJpdmVycy91c2IvcGh5L01ha2VmaWxlCj4gPiBpbmRleCBlNWQ2MTliNGQ4ZjYuLmNlNDVlZTBm MTJhOCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdXNiL3BoeS9NYWtlZmlsZQo+ID4gKysrIGIv ZHJpdmVycy91c2IvcGh5L01ha2VmaWxlCj4gPiBAQCAtMjIsNCArMjIsNSBAQCBvYmotJChDT05G SUdfVVNCX01WX09URynCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKz0gcGh5LW12LQo+ID4g dXNiLm8KPiA+IMKgIG9iai0kKENPTkZJR19VU0JfTVhTX1BIWSnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCs9IHBoeS1teHMtdXNiLm8KPiA+IMKgIG9iai0kKENPTkZJR19VU0JfVUxQSSnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArPSBwaHktdWxwaS5v Cj4gPiDCoCBvYmotJChDT05GSUdfVVNCX1VMUElfVklFV1BPUlQpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKz0gcGh5LXVscGktCj4gPiB2aWV3cG9ydC5vCj4gPiArb2JqLSQoQ09ORklH X1VTQl9TUFJEX1VNUzUxMl9QSFkpwqDCoMKgwqDCoMKgKz0gcGh5LXNwcmQtdW1zNTEyLm8KPiA+ IMKgIG9iai0kKENPTkZJR19LRVlTVE9ORV9VU0JfUEhZKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKz0gcGh5LWtleXN0b25lLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9w aHkvcGh5LXNwcmQtdW1zNTEyLmMKPiA+IGIvZHJpdmVycy91c2IvcGh5L3BoeS1zcHJkLXVtczUx Mi5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wMjVm NDVlOGQ1MDkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHkt c3ByZC11bXM1MTIuYwo+ID4gQEAgLTAsMCArMSw1MTEgQEAKPiA+ICsvLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMAo+ID4gKy8qCj4gPiArICogRHJpdmVyIGZvciBVbmlzb2MgVVNC IFBIWSBkcml2ZXIKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMyBVbmlzb2MgSW5j Lgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv c2xhYi5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L3VzYi9waHkuaD4KPiA+ICsjaW5jbHVkZSA8dWFwaS9saW51eC91c2IvY2hhcmdlci5oPgo+ ID4gKwo+ID4gKyNpbmNsdWRlICJwaHktc3ByZC11bXM1MTIuaCIKPiA+ICsKPiA+ICtzdHJ1Y3Qg c3ByZF9oc3BoeSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCpkZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdXNiX3BoecKgwqDCoMKg wqDCoMKgwqDCoMKgcGh5Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ3VsYXRvcsKgwqDC oMKgwqDCoMKgwqAqdmRkOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ21hcMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqaHNwaHlfZ2xiOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ21h cMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqYW5hX2cyOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IHJlZ21hcMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcG1pYzsKPiA+ICvCoMKgwqDCoMKgwqDCoHUz MsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZkZF92b2w7Cj4gPiAr wqDCoMKgwqDCoMKgwqBhdG9taWNfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVz ZXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBhdG9taWNfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW5pdGVkOwo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpc19ob3N0Owo+ID4gK307Cj4gPiArCj4gPiArI2RlZmluZSBU VU5FSFNBTVBfMl82TUHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgzIDw8IDI1KQo+ ID4gKyNkZWZpbmUgVEZSRUdSRVNfVFVORV9WQUxVRcKgwqDCoMKgKDB4MTQgPDwgMTkpCj4gPiAr I2RlZmluZSBTQzI3MzBfQ0hBUkdFX1NUQVRVU8KgwqDCoDB4MWI5Ywo+ID4gKyNkZWZpbmUgQklU X0NIR19ERVRfRE9ORcKgwqDCoMKgwqDCoMKgQklUKDExKQo+ID4gKyNkZWZpbmUgQklUX1NEUF9J TlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykKPiA+ICsjZGVmaW5lIEJJVF9EQ1BfSU5U wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDYpCj4gPiArI2RlZmluZSBCSVRfQ0RQX0lOVMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg1KQo+ID4gKwo+ID4gK3N0YXRpYyBlbnVtIHVzYl9j aGFyZ2VyX3R5cGUgc2MyN3h4X2NoYXJnZXJfZGV0ZWN0KHN0cnVjdCByZWdtYXAKPiA+ICpyZWdt YXApCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSB1c2JfY2hhcmdlcl90eXBlIHR5cGU7 Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgc3RhdHVzID0gMCwgdmFsOwo+ID4gK8KgwqDCoMKgwqDC oMKgaW50IHJldCwgY250ID0gMTA7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBkbyB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3JlYWQocmVnbWFwLCBT QzI3MzBfQ0hBUkdFX1NUQVRVUywKPiA+ICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChyZXQpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBVTktOT1dOX1RZUEU7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKHZhbCAmIEJJVF9DSEdfREVUX0RPTkUpIHsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdHVzID0gdmFsICYg KEJJVF9DRFBfSU5UIHwgQklUX0RDUF9JTlQgfAo+ID4gQklUX1NEUF9JTlQpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbXNsZWVwKDIwMCk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9IHdoaWxlICgtLWNu dCA+IDApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChzdGF0dXMpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoGNhc2UgQklUX0NEUF9JTlQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdHlwZSA9IENEUF9UWVBFOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGJyZWFrOwo+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBCSVRfRENQX0lOVDoKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0eXBlID0gRENQX1RZUEU7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIEJJVF9T RFBfSU5UOgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHR5cGUgPSBTRFBfVFlQ RTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiA+ICvCoMKgwqDC oMKgwqDCoGRlZmF1bHQ6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHlwZSA9 IFVOS05PV05fVFlQRTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHJldHVybiB0eXBlOwo+ID4gK30KPiAKPiBQbGVhc2UgZG8gbm90IGFkZCBkdXBsaWNhdGUg Y29kZSwgYW5kIHVzZSB0aGUgCj4gc3ByZF9wbWljX2RldGVjdF9jaGFyZ2VyX3R5cGUoKSBpbnN0 ZWFkLCB3aGljaCBoYWQgYmVlbiBleHBvcnRlZCBpbgo+IHRoZSAKPiBtYWlubGluZS4Kb2ssIEkg d2lsbCByZW1vdmUgdGhpcyBuZXh0ICBwYXRjaHNldC4KPiAKPiA+ICsKPiA+ICtzdGF0aWMgaW5s aW5lIHZvaWQgc3ByZF9oc3BoeV9lbmFibGUoc3RydWN0IHNwcmRfaHNwaHkgKnNwcmRfcGh5KQo+ ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWcsIG1zazsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoC8qIGVuYWJsZSB1c2IgbW9kdWxlICovCj4gPiArwqDCoMKgwqDCoMKgwqByZWcgPSBt c2sgPSAoTUFTS19BT05fQVBCX09UR19VVE1JX0VCIHwKPiA+IE1BU0tfQU9OX0FQQl9BTkFfRUIp Owo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0ZV9iaXRzKHNwcmRfcGh5LT5oc3BoeV9n bGIsCj4gPiBSRUdfQU9OX0FQQl9BUEJfRUIxLCBtc2ssIHJlZyk7Cj4gPiArwqDCoMKgwqDCoMKg wqByZWcgPSBtc2sgPSBNQVNLX0FPTl9BUEJfQ0dNX09UR19SRUZfRU4gfAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1BU0tfQU9OX0FQQl9DR01fRFBIWV9SRUZfRU47Cj4gPiAr wqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmhzcGh5X2dsYiwKPiA+ IFJFR19BT05fQVBCX0NHTV9SRUcxLCBtc2ssIHJlZyk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbmxpbmUgdm9pZCBzcHJkX2hzcGh5X3Bvd2VyX2Rvd24oc3RydWN0IHNwcmRfaHNwaHkKPiA+ ICpzcHJkX3BoeSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnLCBtc2s7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqAvKiB1c2IgcG93ZXIgZG93biAqLwo+ID4gK8KgwqDCoMKgwqDC oMKgcmVnID0gbXNrID0gKE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX1BTX1BE X0wgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1BU0tfQU5MR19QSFlfRzJf QU5BTE9HX1VTQjIwX1VTQjIwX1BTX1BEX1MpOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX3Vw ZGF0ZV9iaXRzKHNwcmRfcGh5LT5hbmFfZzIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgUkVHX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9CQVRURVJfUExMLCBtc2ss Cj4gPiByZWcpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgc3ByZF9oc3Bo eV9yZXNldF9jb3JlKHN0cnVjdCBzcHJkX2hzcGh5Cj4gPiAqc3ByZF9waHkpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgdTMyIHJlZywgbXNrOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyog UmVzZXQgUEhZICovCj4gPiArwqDCoMKgwqDCoMKgwqByZWcgPSBtc2sgPSBNQVNLX0FPTl9BUEJf T1RHX1BIWV9TT0ZUX1JTVCB8Cj4gPiBNQVNLX0FPTl9BUEJfT1RHX1VUTUlfU09GVF9SU1Q7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmhzcGh5 X2dsYiwKPiA+IFJFR19BT05fQVBCX0FQQl9SU1QxLCBtc2ssIHJlZyk7Cj4gPiArwqDCoMKgwqDC oMKgwqAvKiBVU0IgUEhZIHJlc2V0IG5lZWQgdG8gZGVsYXkgMjBtc34zMG1zICovCj4gPiArwqDC oMKgwqDCoMKgwqB1c2xlZXBfcmFuZ2UoMjAwMDAsIDMwMDAwKTsKPiA+ICvCoMKgwqDCoMKgwqDC oHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+aHNwaHlfZ2xiLAo+ID4gUkVHX0FPTl9BUEJf QVBCX1JTVDEsIG1zaywgMCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc3ByZF9ob3N0 cGh5X3NldChzdHJ1Y3QgdXNiX3BoeSAqdV9waHksIGludCBvbikKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgc3ByZF9oc3BoeSAqc3ByZF9waHkgPSBjb250YWluZXJfb2YodV9waHks IHN0cnVjdAo+ID4gc3ByZF9oc3BoeSwgcGh5KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWcs IG1zazsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKG9uKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrID0g TUFTS19BT05fQVBCX1VTQjJfUEhZX0lERElHOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldCB8PSByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmhzcGh5X2dsYiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUkVHX0FPTl9B UEJfT1RHX1BIWV9DVFJMLCBtc2ssIDApOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1zayA9Cj4gPiBNQVNLX0FOTEdfUEhZX0cyX0RCR19TRUxfQU5BTE9HX1VTQjIw X1VTQjIwX0RNUFVMTERPV04gfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBNQVNLX0FOTEdfUEhZX0cyX0RCR19TRUxfQU5BTE9HX1VTQjIwX1VTQjIw Cj4gPiBfRFBQVUxMRE9XTjsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg fD0gcmVnbWFwX3VwZGF0ZV9iaXRzKHNwcmRfcGh5LT5hbmFfZzIsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFJFR19BTkxHX1BIWV9HMl9BTkFMT0df VVNCMjBfUkVHX1NFTF9DRkdfMCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbXNrLCBtc2spOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1zayA9Cj4gPiBNQVNLX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9E TVBVTExET1dOIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgTUFTS19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfRFBQVUxMRAo+ID4gT1dO Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCB8PSByZWdtYXBfdXBkYXRl X2JpdHMoc3ByZF9waHktPmFuYV9nMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgUkVHX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9VVE1J X0NUTAo+ID4gMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbXNrLCBtc2spOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJlZyA9IDB4MjAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zayA9IE1B U0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX1JFU0VSVkVEOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCB8PSByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHkt PmFuYV9nMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgUkVHX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9VVE1JX0NUTAo+ID4gMSwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrLCByZWcp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwcmRfcGh5LT5pc19ob3N0ID0g dHJ1ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVnID0gbXNrID0gTUFTS19BT05fQVBCX1VTQjJfUEhZX0lERElHOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCB8PSByZWdtYXBfdXBkYXRlX2JpdHMo c3ByZF9waHktPmhzcGh5X2dsYiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgUkVHX0FPTl9BUEJfT1RHX1BIWV9DVFJMLCBtc2ssIHJlZyk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrID0KPiA+IE1BU0tfQU5MR19Q SFlfRzJfREJHX1NFTF9BTkFMT0dfVVNCMjBfVVNCMjBfRE1QVUxMRE9XTiB8Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE1BU0tfQU5MR19QSFlfRzJf REJHX1NFTF9BTkFMT0dfVVNCMjBfVVNCMjAKPiA+IF9EUFBVTExET1dOOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCB8PSByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHkt PmFuYV9nMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgUkVHX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9SRUdfU0VMX0NGR18wLAo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2ssIG1zayk7Cj4gPiAr Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrID0KPiA+IE1BU0tfQU5MR19Q SFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX0RNUFVMTERPV04gfAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNQVNLX0FOTEdfUEhZX0cyX0FOQUxPR19V U0IyMF9VU0IyMF9EUFBVTExECj4gPiBPV047Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0IHw9IHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+YW5hX2cyLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBSRUdfQU5MR19QSFlf RzJfQU5BTE9HX1VTQjIwX1VTQjIwX1VUTUlfQ1RMCj4gPiAyLAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2ssIDApOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zayA9IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VT QjIwX1VTQjIwX1JFU0VSVkVEOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCB8PSByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmFuYV9nMiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUkVHX0FOTEdfUEhZX0cyX0FOQUxP R19VU0IyMF9VU0IyMF9VVE1JX0NUTAo+ID4gMSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrLCAwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzcHJkX3BoeS0+aXNfaG9zdCA9IGZhbHNlOwo+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IGludCBzcHJkX2hzcGh5X2luaXQoc3RydWN0IHVzYl9waHkgKnVfcGh5KQo+ID4gK3sKPiA+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBzcHJkX2hzcGh5ICpzcHJkX3BoeSA9IGNvbnRhaW5lcl9vZih1 X3BoeSwgc3RydWN0Cj4gPiBzcHJkX2hzcGh5LCBwaHkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMy IHJlZywgbXNrOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChhdG9taWNfcmVhZCgmc3ByZF9waHktPmluaXRlZCkpIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHVfcGh5LT5kZXYsICIlcyBpcyBhbHJlYWR5 IGluaXRlZCFcbiIsCj4gPiBfX2Z1bmNfXyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqAvKiBUdXJuIE9uIFZERCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVndWxhdG9yX3NldF92 b2x0YWdlKHNwcmRfcGh5LT52ZGQsIHNwcmRfcGh5LT52ZGRfdm9sLAo+ID4gc3ByZF9waHktPnZk ZF92b2wpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZWd1bGF0b3JfaXNfZW5hYmxlZChzcHJk X3BoeS0+dmRkKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IHJl Z3VsYXRvcl9lbmFibGUoc3ByZF9waHktPnZkZCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKHJldCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHNwcmRfaHNwaHlfZW5hYmxlKHNwcmRfcGh5KTsKPiA+ICvCoMKgwqDCoMKg wqDCoHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+YW5hX2cyLAo+ID4gUkVHX0FOTEdfUEhZ X0cyX0FOQUxPR19VU0IyMF9VU0IyMF9JU09fU1csCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNQVNLX0FOTEdfUEhZX0cy X0FOQUxPR19VU0IyMF9VU0IyMAo+ID4gX0lTT19TV19FTiwgMCk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqAvKiB1c2IgcGh5IHBvd2VyICovCj4gPiArwqDCoMKgwqDCoMKgwqBtc2sgPSAoTUFT S19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfUFNfUERfTCB8Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgTUFTS19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBf UFNfUERfUyk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHkt PmFuYV9nMiwKPiA+IFJFR19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfQkFUVEVSX1BM TCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNr LCAwKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIHVzYiB2YnVzIHZhbGlkICovCj4gPiAr wqDCoMKgwqDCoMKgwqByZWcgPSBtc2sgPSBNQVNLX0FPTl9BUEJfT1RHX1ZCVVNfVkFMSURfUEhZ UkVHOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0ZV9iaXRzKHNwcmRfcGh5LT5oc3Bo eV9nbGIsCj4gPiBSRUdfQU9OX0FQQl9PVEdfUEhZX1RFU1QsIG1zaywgcmVnKTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJlZyA9IG1zayA9IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIw X1VTQjIwX1ZCVVNWTERFWFQ7Cj4gPiArwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRlX2JpdHMo c3ByZF9waHktPmFuYV9nMiwKPiA+IFJFR19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBf VVRNSV9DVEwxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtc2ssIHJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBmb3IgU1BSRCBwaHkg dXRtaV93aWR0aCBzZWwgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHJlZyA9IG1zayA9IE1BU0tfQU9O X0FQQl9VVE1JX1dJRFRIX1NFTDsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlZ21hcF91cGRhdGVfYml0 cyhzcHJkX3BoeS0+aHNwaHlfZ2xiLAo+ID4gUkVHX0FPTl9BUEJfT1RHX1BIWV9DVFJMLCBtc2ss IHJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZWcgPSBtc2sgPQo+ID4gTUFTS19BTkxH X1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfREFUQUJVUzE2Xzg7Cj4gPiArwqDCoMKgwqDCoMKg wqByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmFuYV9nMiwKPiA+IFJFR19BTkxHX1BIWV9H Ml9BTkFMT0dfVVNCMjBfVVNCMjBfVVRNSV9DVEwxLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2ssIHJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqByZWcgPSBUVU5FSFNBTVBfMl82TUE7Cj4gPiArwqDCoMKgwqDCoMKgwqBtc2sgPSBNQVNL X0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9UVU5FSFNBTVA7Cj4gPiArwqDCoMKgwqDC oMKgwqByZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmFuYV9nMiwKPiA+IFJFR19BTkxHX1BI WV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfVFJJTU1JTkcsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zaywgcmVnKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoHJlZyA9IFRGUkVHUkVTX1RVTkVfVkFMVUU7Cj4gPiArwqDCoMKgwqDCoMKgwqBtc2sg PSBNQVNLX0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9URlJFR1JFUzsKPiA+ICvCoMKg wqDCoMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+YW5hX2cyLAo+ID4gUkVHX0FO TEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9UUklNTUlORywKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNrLCByZWcpOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKCFhdG9taWNfcmVhZCgmc3ByZF9waHktPnJlc2V0KSkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNwcmRfaHNwaHlfcmVzZXRfY29yZShzcHJkX3Bo eSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXRvbWljX3NldCgmc3ByZF9w aHktPnJlc2V0LCAxKTsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGF0b21pY19zZXQoJnNwcmRfcGh5LT5pbml0ZWQsIDEpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHNwcmRfaHNwaHlf c2h1dGRvd24oc3RydWN0IHVzYl9waHkgKnVfcGh5KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBzcHJkX2hzcGh5ICpzcHJkX3BoeSA9IGNvbnRhaW5lcl9vZih1X3BoeSwgc3RydWN0 Cj4gPiBzcHJkX2hzcGh5LCBwaHkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHJlZywgbXNrOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFhdG9taWNfcmVhZCgmc3ByZF9waHktPmluaXRl ZCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZGJnKHNwcmRfcGh5 LT5kZXYsICIlcyBpcyBhbHJlYWR5IHNodXQgZG93blxuIiwKPiA+IF9fZnVuY19fKTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gPiArwqDCoMKgwqDCoMKgwqB9 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiB1c2IgdmJ1cyAqLwo+ID4gK8KgwqDCoMKgwqDC oMKgbXNrID0gTUFTS19BT05fQVBCX09UR19WQlVTX1ZBTElEX1BIWVJFRzsKPiA+ICvCoMKgwqDC oMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+aHNwaHlfZ2xiLAo+ID4gUkVHX0FP Tl9BUEJfT1RHX1BIWV9URVNULCBtc2ssIDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgbXNrID0gTUFT S19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfVkJVU1ZMREVYVDsKPiA+ICvCoMKgwqDC oMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+YW5hX2cyLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoFJFR19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBf VVRNSV9DVEwxLCBtc2ssCj4gPiAwKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwcmRfaHNw aHlfcG93ZXJfZG93bihzcHJkX3BoeSk7Cj4gPiArwqDCoMKgwqDCoMKgwqByZWdtYXBfdXBkYXRl X2JpdHMoc3ByZF9waHktPmFuYV9nMiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBSRUdfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX0lTT19TVywKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2ssIHJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqAvKiB1c2IgY2dtIHJlZiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgbXNrID0gTUFTS19BT05fQVBC X0NHTV9PVEdfUkVGX0VOIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNQVNL X0FPTl9BUEJfQ0dNX0RQSFlfUkVGX0VOOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0 ZV9iaXRzKHNwcmRfcGh5LT5oc3BoeV9nbGIsCj4gPiBSRUdfQU9OX0FQQl9DR01fUkVHMSwgbXNr LCAwKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChz cHJkX3BoeS0+dmRkKSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWd1bGF0 b3JfZGlzYWJsZShzcHJkX3BoeS0+dmRkKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGF0b21p Y19zZXQoJnNwcmRfcGh5LT5pbml0ZWQsIDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgYXRvbWljX3Nl dCgmc3ByZF9waHktPnJlc2V0LCAwKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHNzaXplX3Qg dmRkX3ZvbHRhZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2 aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgKmJ1ZikKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3Qgc3ByZF9oc3BoeSAqc3ByZF9waHkgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghc3ByZF9waHkpCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3ByZF9waHktPnZkZF92b2wpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCB2ZGRfdm9sdGFnZV9zdG9yZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKPiA+ICt7Cj4gPiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgc3ByZF9oc3BoeSAqc3ByZF9waHkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiB2b2w7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoIXNwcmRfcGh5KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGtzdHJ0b3VpbnQoYnVmLCAxNiwg JnZvbCkgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlO VkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZvbCA8IDEyMDAwMDAgfHwgdm9sID4g Mzc1MDAwMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2 LCAiSW52YWxpZCB2b2x0YWdlIHZhbHVlICVkXG4iLCB2b2wpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4g K8KgwqDCoMKgwqDCoMKgc3ByZF9waHktPnZkZF92b2wgPSB2b2w7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqByZXR1cm4gc2l6ZTsKPiA+ICt9Cj4gPiArc3RhdGljIERFVklDRV9BVFRSX1JXKHZk ZF92b2x0YWdlKTsKPiAKPiBXaHkgYWRkIHZvbHRhZ2Ugc2V0dGluZyBpbnRlcmZhY2UgaW4gYSB1 c2IgcGh5IGRyaXZlcj8gc2hvdWxkIG1vdmUgdG8KPiByZWd1bGF0b3IgZHJpdmVyPwo+IAo+ID4g Kwo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp1c2JfaHNwaHlfYXR0cnNbXSA9IHsKPiA+ ICvCoMKgwqDCoMKgwqDCoCZkZXZfYXR0cl92ZGRfdm9sdGFnZS5hdHRyLAo+ID4gK8KgwqDCoMKg wqDCoMKgTlVMTAo+ID4gK307Cj4gPiArQVRUUklCVVRFX0dST1VQUyh1c2JfaHNwaHkpOwo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgc3ByZF9oc3BoeV92YnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgKm5iLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkK PiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdXNiX3BoeSAqdV9waHkgPSBjb250YWlu ZXJfb2YobmIsIHN0cnVjdCB1c2JfcGh5LAo+ID4gdmJ1c19uYik7Cj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3Qgc3ByZF9oc3BoeSAqc3ByZF9waHkgPSBjb250YWluZXJfb2YodV9waHksIHN0cnVj dAo+ID4gc3ByZF9oc3BoeSwgcGh5KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWcsIG1zazsK PiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChzcHJkX3BoeS0+aXNfaG9zdCB8fCB1X3BoeS0+ bGFzdF9ldmVudCA9PSBVU0JfRVZFTlRfSUQpCj4gPiB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZGV2X2luZm8oc3ByZF9waHktPmRldiwgIlVTQiBQSFkgaXMgaG9zdCBtb2Rl XG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChldmVudCkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHVzYiB2YnVzIHZhbGlkICovCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnID0gbXNrID0gTUFTS19BT05fQVBCX09U R19WQlVTX1ZBTElEX1BIWVJFRzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZWdtYXBfdXBkYXRlX2JpdHMoc3ByZF9waHktPmhzcGh5X2dsYiwKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUkVHX0FPTl9BUEJfT1RHX1BIWV9URVNU LCBtc2ssIHJlZyk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVn ID0gbXNrID0KPiA+IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX1ZCVVNWTERF WFQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnbWFwX3VwZGF0ZV9iaXRz KHNwcmRfcGh5LT5hbmFfZzIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFJFR19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfVVRNSV9DVEwK PiA+IDEsIG1zaywgcmVnKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1c2Jf cGh5X3NldF9jaGFyZ2VyX3N0YXRlKHVfcGh5LAo+ID4gVVNCX0NIQVJHRVJfUFJFU0VOVCk7Cj4g PiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIHVzYiB2YnVzIGludmFsaWQgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBtc2sgPSBNQVNLX0FPTl9BUEJfT1RHX1ZCVVNfVkFMSURfUEhZUkVHOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+aHNw aHlfZ2xiLAo+ID4gUkVHX0FPTl9BUEJfT1RHX1BIWV9URVNULAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtc2ssIDApOwo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG1zayA9Cj4gPiBNQVNLX0FOTEdfUEhZX0cyX0FOQUxPR19VU0Iy MF9VU0IyMF9WQlVTVkxERVhUOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl Z21hcF91cGRhdGVfYml0cyhzcHJkX3BoeS0+YW5hX2cyLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBSRUdfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIw X1VTQjIwX1VUTUlfQ1RMCj4gPiAxLCBtc2ssIDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHVzYl9waHlfc2V0X2NoYXJnZXJfc3RhdGUodV9waHksCj4gPiBVU0JfQ0hBUkdF Ul9BQlNFTlQpOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBlbnVtIHVzYl9jaGFyZ2VyX3R5cGUg c3ByZF9oc3BoeV9jaGFyZ2VyX2RldGVjdChzdHJ1Y3QKPiA+IHVzYl9waHkgKnVfcGh5KQo+ID4g K3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBzcHJkX2hzcGh5ICpzcHJkX3BoeSA9IGNvbnRh aW5lcl9vZih1X3BoeSwgc3RydWN0Cj4gPiBzcHJkX2hzcGh5LCBwaHkpOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIHNjMjd4eF9jaGFyZ2VyX2RldGVjdChzcHJkX3BoeS0+cG1pYyk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc3ByZF9oc3BoeV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZp Y2Vfbm9kZSAqcmVnbWFwX25wOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcmVnbWFwX3BkZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3ByZF9oc3BoeSAq c3ByZF9waHk7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCB1c2Jfb3RnICpvdGc7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBzcHJkX3BoeSA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqc3ByZF9waHkpLAo+ID4gR0ZQX0tFUk5FTCk7Cj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoIXNwcmRfcGh5KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX25wID0g b2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKPiA+ICJzcHJkLHNjMjd4eC1zeXNj b24iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVnbWFwX25wKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZ2V0IHN5c2NvbiBu b2RlXG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RF VjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJlZ21hcF9w ZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShyZWdtYXBfbnApOwo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKCFyZWdtYXBfcGRldikgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGdldCBzeXNjb24gcGxhdGZvcm0KPiA+IGRldmljZVxu Iik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gLUVOT0RFVjsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGRldmljZV9ub2RlX2VycjsKPiA+ ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwcmRfcGh5LT5wbWlj ID0gZGV2X2dldF9yZWdtYXAocmVnbWFwX3BkZXYtPmRldi5wYXJlbnQsCj4gPiBOVUxMKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmICghc3ByZF9waHktPnBtaWMpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgInVuYWJsZSB0byBnZXQgcG1pYyByZWdtYXAg ZGV2aWNlXG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSAtRU5P REVWOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcGxhdGZvcm1fZGV2 aWNlX2VycjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgInNwcmQsdmRkLQo+ID4gdm9s dGFnZSIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzcHJkX3BoeS0+dmRkX3ZvbCk7Cj4gCj4gV2hlcmUgaXMg dGhlIERUIGJpbmRpbmcgc2VjcmlwdGlvbj8KPiAKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQg PCAwKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJ1 bmFibGUgdG8gcmVhZCBzc3BoeSB2ZGQgdm9sdGFnZVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZ290byBwbGF0Zm9ybV9kZXZpY2VfZXJyOwo+ID4gK8KgwqDCoMKgwqDC oMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3ByZF9waHktPnZkZCA9IGRldm1fcmVndWxh dG9yX2dldChkZXYsICJ2ZGQiKTsKPiAKPiBkaXR0by4KPiBQbGVhc2UgYWRkIHRoZSBEVCBiaW5k aW5nIGZpcnN0bHkuCm5leHQgcGF0Y2hzZXQgSSB3aWlsIGFkZCB0aGUgYmluZGluZ3MgZmlsZS4K PiAKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoc3ByZF9waHktPnZkZCkpIHsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgInVuYWJsZSB0byBnZXQg c3NwaHkgdmRkIHN1cHBseVxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0ID0gUFRSX0VSUihzcHJkX3BoeS0+dmRkKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIHBsYXRmb3JtX2RldmljZV9lcnI7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3ByZF9w aHktPnZkZCwgc3ByZF9waHktCj4gPiA+dmRkX3ZvbCwgc3ByZF9waHktPnZkZF92b2wpOwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZXJyKGRldiwgImZhaWwgdG8gc2V0IHNzcGh5IHZkZCB2b2x0YWdlIGF0Cj4g PiAlZG1WXG4iLCBzcHJkX3BoeS0+dmRkX3ZvbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ290byBwbGF0Zm9ybV9kZXZpY2VfZXJyOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgb3RnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNp emVvZigqb3RnKSwgR0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIW90Zykgewo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FTk9NRU07Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBwbGF0Zm9ybV9kZXZpY2VfZXJyOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3ByZF9waHktPmFuYV9n MiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LQo+ID4gPm9mX25vZGUsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgInNwcmQsc3lzY29uLWFuYWcyIik7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNf RVJSKHNwcmRfcGh5LT5hbmFfZzIpKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycigmcGRldi0+ZGV2LCAiYXAgVVNCIGFuYWcyIHN5c2Nvbgo+ID4gZmFpbGVkIVxu Iik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihzcHJk X3BoeS0+YW5hX2cyKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHBs YXRmb3JtX2RldmljZV9lcnI7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBzcHJkX3BoeS0+aHNwaHlfZ2xiID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhh bmRsZShkZXYtCj4gPiA+b2Zfbm9kZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAic3ByZCxzeXNjb24tZW5hYmxlIik7 Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKHNwcmRfcGh5LT5oc3BoeV9nbGIpKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2LCAiYXAg VVNCIGFvbiBhcGIgc3lzY29uCj4gPiBmYWlsZWQhXG4iKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKHNwcmRfcGh5LT5oc3BoeV9nbGIpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcGxhdGZvcm1fZGV2aWNlX2VycjsKPiA+ ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwcmRfaHNwaHlfZW5h YmxlKHNwcmRfcGh5KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHNwcmRfaHNwaHlfcG93ZXJf ZG93bihzcHJkX3BoeSk7Cj4gCj4gV2h5IGRvaW5nIHRoaXM/IHBsZWFzZSBhZGQgY29tbWVudHMg dG8gZXhwbGFpbiB0aGVzZSBzdHJhbmdlIGhhcmR3YXJlCj4gb3BlcmF0aW9uLgp0aGUgdHdvIGFj dGlvbnMgc2VlbXMgcmVkdW5kYW50LCBpdCBzaG91bGQgaW4gc3ByZF9oc3BoeV9pbml0LiBJIG5l ZWQKdG8gdGVzdCBvbiB0aGUgU29jLiBpZiBub3QgZWZmZWN0LCBJIHdpaWwgcmVtb3ZlIGl0Lgo+ IAo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgc3ByZF9waHktPnBoeS5kZXYgPSBkZXY7Cj4gPiAr wqDCoMKgwqDCoMKgwqBzcHJkX3BoeS0+cGh5LmxhYmVsID0gInNwcmQtaHNwaHkiOwo+ID4gK8Kg wqDCoMKgwqDCoMKgc3ByZF9waHktPnBoeS5vdGcgPSBvdGc7Cj4gPiArwqDCoMKgwqDCoMKgwqBz cHJkX3BoeS0+cGh5LmluaXQgPSBzcHJkX2hzcGh5X2luaXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBz cHJkX3BoeS0+cGh5LnNodXRkb3duID0gc3ByZF9oc3BoeV9zaHV0ZG93bjsKPiA+ICvCoMKgwqDC oMKgwqDCoHNwcmRfcGh5LT5waHkuc2V0X3ZidXMgPSBzcHJkX2hvc3RwaHlfc2V0Owo+ID4gK8Kg wqDCoMKgwqDCoMKgc3ByZF9waHktPnBoeS50eXBlID0gVVNCX1BIWV9UWVBFX1VTQjI7Cj4gPiAr wqDCoMKgwqDCoMKgwqBzcHJkX3BoeS0+cGh5LnZidXNfbmIubm90aWZpZXJfY2FsbCA9Cj4gPiBz cHJkX2hzcGh5X3ZidXNfbm90aWZ5Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3ByZF9waHktPnBoeS5j aGFyZ2VyX2RldGVjdCA9IHNwcmRfaHNwaHlfY2hhcmdlcl9kZXRlY3Q7Cj4gPiArwqDCoMKgwqDC oMKgwqBvdGctPnVzYl9waHkgPSAmc3ByZF9waHktPnBoeTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHNwcmRfcGh5KTsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoHJldCA9IHVzYl9hZGRfcGh5X2Rldigmc3ByZF9waHktPnBoeSk7Cj4gPiArwqDC oMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihkZXYsICJmYWlsIHRvIGFkZCBwaHlcbiIpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGdvdG8gcGxhdGZvcm1fZGV2aWNlX2VycjsKPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cHMoJmRl di0+a29iaiwgdXNiX2hzcGh5X2dyb3Vwcyk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl93YXJuKGRldiwgImZhaWxlZCB0 byBjcmVhdGUgdXNiIGhzcGh5Cj4gPiBhdHRyaWJ1dGVzXG4iKTsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChleHRjb25fZ2V0X3N0YXRlKHNwcmRfcGh5LT5waHkuZWRldiwgRVhUQ09OX1VT QikgPiAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVzYl9waHlfc2V0X2No YXJnZXJfc3RhdGUoJnNwcmRfcGh5LT5waHksCj4gPiBVU0JfQ0hBUkdFUl9QUkVTRU5UKTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRldl9pbmZvKGRldiwgInNwcmQgdXNiIHBoeSBwcm9iZSBv ayAhXG4iKTsKPiAKPiBQbGVhc2UgcmVtb3ZlIHRoZXNlIHVzZWxlc3MgcHJpbnRpbmcuCj4gCj4g PiArCj4gPiArcGxhdGZvcm1fZGV2aWNlX2VycjoKPiA+ICtkZXZpY2Vfbm9kZV9lcnI6Cj4gCj4g MiBzYW1lIGxldmVsIGxhYmVsPwo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgb2Zfbm9kZV9wdXQocmVn bWFwX25wKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgc3ByZF9oc3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3ByZF9oc3BoeSAqc3By ZF9waHkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoHN5c2ZzX3JlbW92ZV9ncm91cHMoJnBkZXYtPmRldi5rb2JqLCB1c2JfaHNwaHlfZ3JvdXBz KTsKPiA+ICvCoMKgwqDCoMKgwqDCoHVzYl9yZW1vdmVfcGh5KCZzcHJkX3BoeS0+cGh5KTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChzcHJkX3BoeS0+dmRkKSkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWd1bGF0b3JfZGlzYWJsZShzcHJk X3BoeS0+dmRkKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzcHJkX2hzcGh5X21hdGNo W10gPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqB7IC5jb21wYXRpYmxlID0gInNwcmQsdW1zNTEyLXBo eSJ9LAo+ID4gK8KgwqDCoMKgwqDCoMKge30sCj4gPiArfTsKPiA+ICsKPiA+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBzcHJkX2hzcGh5X21hdGNoKTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBzcHJkX2hzcGh5X2RyaXZlciA9IHsKPiA+ICvCoMKgwqDCoMKgwqDC oC5wcm9iZSA9IHNwcmRfaHNwaHlfcHJvYmUsCj4gPiArwqDCoMKgwqDCoMKgwqAucmVtb3ZlID0g c3ByZF9oc3BoeV9yZW1vdmUsCj4gPiArwqDCoMKgwqDCoMKgwqAuZHJpdmVyID0gewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gInNwcmQtaHNwaHkiLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IHNwcmRfaHNwaHlf bWF0Y2gsCj4gPiArwqDCoMKgwqDCoMKgwqB9LAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGlu dCBfX2luaXQgc3ByZF9oc3BoeV9kcml2ZXJfaW5pdCh2b2lkKQo+ID4gK3sKPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwcmRfaHNwaHlfZHJpdmVy KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgX19leGl0IHNwcmRfaHNwaHlfZHJpdmVy X2V4aXQodm9pZCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBwbGF0Zm9ybV9kcml2ZXJfdW5y ZWdpc3Rlcigmc3ByZF9oc3BoeV9kcml2ZXIpOwo+ID4gK30KPiA+ICsKPiA+ICtsYXRlX2luaXRj YWxsKHNwcmRfaHNwaHlfZHJpdmVyX2luaXQpOwo+ID4gK21vZHVsZV9leGl0KHNwcmRfaHNwaHlf ZHJpdmVyX2V4aXQpOwo+ID4gKwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiVU5JU09DIFVTQiBQ SFkgZHJpdmVyIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL3BoeS9waHktc3ByZC11bXM1MTIuaAo+ID4gYi9kcml2ZXJzL3VzYi9waHkv cGh5LXNwcmQtdW1zNTEyLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAw MDAwMDAwMDAuLjkwM2RhMDU3M2VhZQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVy cy91c2IvcGh5L3BoeS1zcHJkLXVtczUxMi5oCj4gPiBAQCAtMCwwICsxLDM5IEBACj4gPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArIE9SIE1JVCAqLwo+ID4gKy8qCj4gPiAr ICogU3ByZWFkdHJ1bSBVTVM1MTIgU09DIFVTQiByZWdpc3RlcnMgZmlsZQo+ID4gKyAqCj4gPiAr ICogQ29weXJpZ2h0IEMgMjAyMiwgU3ByZWFkdHJ1bSBDb21tdW5pY2F0aW9ucyBJbmMuCj4gPiAr ICovCj4gPiArCj4gPiArI2RlZmluZQo+ID4gTUFTS19BTkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBf VVNCMjBfREFUQUJVUzE2XzjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Cj4gPiDCoMKgwqDCoDB4MTAwMDAwMDAKPiA+ICsjZGVmaW5lCj4gPiBNQVNLX0FOTEdfUEhZX0cy X0FOQUxPR19VU0IyMF9VU0IyMF9ETVBVTExET1dOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4OAo+ID4gKyNkZWZpbmUKPiA+IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIw X1VTQjIwX0RQUFVMTERPV07CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxMAo+ ID4gKyNkZWZpbmUKPiA+IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX0lTT19T V19FTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MQo+ID4gKyNkZWZpbmUK PiA+IE1BU0tfQU5MR19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX1BTX1BEX0zCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg4Cj4gPiArI2RlZmluZQo+ID4gTUFTS19B TkxHX1BIWV9HMl9BTkFMT0dfVVNCMjBfVVNCMjBfUFNfUERfU8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDEwCj4gPiArI2RlZmluZQo+ID4gTUFTS19BTkxHX1BIWV9H Ml9BTkFMT0dfVVNCMjBfVVNCMjBfUkVTRVJWRUTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDB4ZmYKPiA+IGZmCj4gPiArI2RlZmluZQo+ID4gTUFTS19BTkxHX1BIWV9HMl9B TkFMT0dfVVNCMjBfVVNCMjBfVEZSRUdSRVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MWYKPiA+IDgwMDAwCj4gPiArI2RlZmluZQo+ID4gTUFTS19BTkxHX1BIWV9HMl9B TkFMT0dfVVNCMjBfVVNCMjBfVFVORUhTQU1QwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHg2MAo+ID4gMDAwMDAKPiA+ICsjZGVmaW5lCj4gPiBNQVNLX0FOTEdfUEhZX0cyX0FO QUxPR19VU0IyMF9VU0IyMF9WQlVTVkxERVhUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDB4MTAKPiA+IDAwMAo+ID4gKyNkZWZpbmUKPiA+IE1BU0tfQU5MR19QSFlfRzJfREJHX1NF TF9BTkFMT0dfVVNCMjBfVVNCMjBfRE1QVUxMRE9XTsKgwqDCoMKgwqDCoMKgwqDCoDB4Mgo+ID4g KyNkZWZpbmUKPiA+IE1BU0tfQU5MR19QSFlfRzJfREJHX1NFTF9BTkFMT0dfVVNCMjBfVVNCMjBf RFBQVUxMRE9XTsKgwqDCoMKgwqDCoMKgwqDCoDB4NAo+ID4gKyNkZWZpbmUKPiA+IE1BU0tfQU9O X0FQQl9BTkFfRULCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxMAo+ID4gMDAKPiA+ ICsjZGVmaW5lCj4gPiBNQVNLX0FPTl9BUEJfQ0dNX0RQSFlfUkVGX0VOwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 NDAKPiA+IDAKPiA+ICsjZGVmaW5lCj4gPiBNQVNLX0FPTl9BUEJfQ0dNX09UR19SRUZfRU7CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAweDEwCj4gPiAwMAo+ID4gKyNkZWZpbmUKPiA+IE1BU0tfQU9OX0FQQl9PVEdf UEhZX1NPRlRfUlNUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwCj4gPiAwCj4gPiArI2RlZmluZQo+ID4gTUFTS19B T05fQVBCX09UR19VVE1JX0VCwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxMAo+ID4gMAo+ID4gKyNk ZWZpbmUKPiA+IE1BU0tfQU9OX0FQQl9PVEdfVVRNSV9TT0ZUX1JTVMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MTAKPiA+ IDAKPiA+ICsjZGVmaW5lCj4gPiBNQVNLX0FPTl9BUEJfT1RHX1ZCVVNfVkFMSURfUEhZUkVHwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MTAKPiA+IDAwMDAwCj4gPiArI2RlZmluZQo+ID4gTUFTS19BT05fQVBCX1VTQjJfUEhZX0lERElH wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHg4Cj4gPiArI2RlZmluZQo+ID4gTUFTS19BT05fQVBCX1VUTUlfV0lE VEhfU0VMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg0MAo+ID4gMDAwMDAwCj4gPiArI2RlZmluZQo+ID4gUkVH X0FOTEdfUEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9CQVRURVJfUExMwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMAo+ID4gNWMKPiA+ICsjZGVmaW5lCj4gPiBSRUdfQU5M R19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX0lTT19TV8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMAo+ID4gNzAKPiA+ICsjZGVmaW5lCj4gPiBSRUdfQU5M R19QSFlfRzJfQU5BTE9HX1VTQjIwX1VTQjIwX1RSSU1NSU5HwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAKPiA+IDY0Cj4gPiArI2RlZmluZQo+ID4gUkVHX0FOTEdf UEhZX0cyX0FOQUxPR19VU0IyMF9VU0IyMF9VVE1JX0NUTDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MDAKPiA+IDU4Cj4gPiArI2RlZmluZQo+ID4gUkVHX0FOTEdfUEhZ X0cyX0FOQUxPR19VU0IyMF9VU0IyMF9VVE1JX0NUTDLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MDAKPiA+IDYwCj4gPiArI2RlZmluZQo+ID4gUkVHX0FOTEdfUEhZX0cy X0FOQUxPR19VU0IyMF9SRUdfU0VMX0NGR18wwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgwMAo+ID4gNzQKPiA+ICsjZGVmaW5lCj4gPiBSRUdfQU9OX0FQQl9BUEJf RUIxwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAKPiA+IDA0Cj4gPiArI2RlZmlu ZQo+ID4gUkVHX0FPTl9BUEJfQVBCX1JTVDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MDAKPiA+IDEwCj4gPiArI2RlZmluZQo+ID4gUkVHX0FPTl9BUEJfQ0dNX1JFRzHCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDB4MDEKPiA+IDM4Cj4gPiArI2RlZmluZQo+ID4gUkVHX0FPTl9B UEJfT1RHX1BIWV9DVFJMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMgo+ID4gMDgKPiA+ICsjZGVm aW5lCj4gPiBSRUdfQU9OX0FQQl9PVEdfUEhZX1RFU1TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAy Cj4gPiAwNAo+IAo+IE1vdmUgdGhlbSB0byB0aGUgZHJpdmVyIGZpbGUgYW5kIHBsZWFzZSByZW5h bWUgdGhlIHVnbHkgbWFjcm8gbmFtZXMsCj4gdG9vIAo+IGxvbmcgOigKPiAKPiBBbmQgd2h5IG5v dCBtb3ZlIHRoZSB1c2IgcGh5IGRyaXZlciB0byBiZSBhIGdlbmVyaWMgcGh5IGRyaXZlcj8gSQo+ IG1lYW4gCj4gbW92ZSBpdCB0byB0aGUgZHJpdmVycy9waHkuCkRvIHlvdSBtZWFuIGFsbCB0aGUg dXNiLXBoeSBuZWVkIG1vdmUgdG8gZHJpdmVyL3BoeT8gb3IganVzdCB0aGlzCmRyaXZlcj8KCg==