From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=59.120.207.196 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1792655821; b=OVcXRdJy5wNnX9FifBkRqsbvfHcOPW/oHws+pC15+LTmTzs4ihqyT23I6Y+cV6j3BP13 ppw5Ph44GZGzLYfFQgcKl1ojU09bpZWrVmIISVWppojLSei4XjwHtMv5ay/tn/TE/lksa PRPInDYN4d2kkhnhZ05qizIsspPedvbNfQLk70HLs5SPVI1dGUnzt+kbDoY1jLisYKwXq 2BjKM+UCFhGoffduiuZuwlMT65T+MFwlQFmqDUnrFc3bvBBLfaws1z5IAzOe/oiFvRKYQ po4EJanlhzaND89UFF/p6vmDSx9TGmz8Pu7lQqWorF1WA0c6gO82pVsJlSqMKM4OKhw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1792655821; h=DMARC-Filter:X-UUID:X-CID-P-RULE:X-CID-O-INFO:X-CID-META:X-CID-BVR: X-CID-BAS:X-CID-FACTOR:X-CID-RHF:X-UUID:Received:X-UUID:X-CID-P-RULE: X-CID-O-INFO:X-CID-META:X-CID-BVR:X-CID-BAS:X-CID-FACTOR:X-CID-RHF: X-UUID:Received:Received:Received:From:To:CC:Subject:Thread-Topic: Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language: Content-Language:X-MS-Has-Attach:X-MS-TNEF-Correlator: x-originating-ip:x-tm-as-product-ver:x-tm-as-result: x-tmase-matchedrid:x-tm-as-user-approved-sender: x-tm-as-user-blocked-sender:x-tmase-result:x-tmase-version: x-tm-snts-smtp:Content-Type:Content-Transfer-Encoding:MIME-Version; bh=IpA7eVAC8se/t92VR29Xsx1ualHMTXcvxjMWnfZU/yA=; b=3xSJ4s85ia9U48akZyRNzuEnzM/dpE1ptP7Jz2iHQmB7In3Tyx/L+4YH9NdhmzQKwl6+ Xu93VLjp/ktc6/KU/Ju9l3MZ6ApWlz0ZixNTClOAkwGAEyWxf69Ce6A95/ZwBBGBbhVLS uAADEVXS/40Q2/C7occYIU4GkgzmEVfsFNe8M9pznMDqqApr39JBEjXNqJOs0svptF2QE b+kXWWMeX/b0Ymv8DaK10cPtwL7sXJ3N49i1bi9cHDg47Omfc8FP/tZZ4gwlDiylMS4+N BAiX7GzbG9tBodJRdu2Ppuc7/+pvqvCvkBQtqlSZ40M2D2XoeRmquow3xJMLbCZPXNQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=compal.com; spf=pass smtp.mailfrom=compal.com; arc=none smtp.remote-ip=59.120.207.196 Received: from tpecef21.compal.com (exmail3.compal.com [59.120.207.196]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3829606A319; Thu, 22 Oct 2026 07:56:58 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org D3829606A319 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=compal.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=compal.com X-UUID: 219d8b9ccdee11f1b2470fb4f881575f-20261022 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.20,REQID:3247ff3f-4771-4855-b83c-8a53e95bb381,IP:0,U RL:25,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:25 X-CID-META: VersionHash:291e20b,CLOUDID:9e93ca88-9fec-46e5-bed3-bce0554eb87a,B ulkID:nil,BulkQuantity:0,SF:80|81|82|83|102|110|111|836|865|888|898,TC:-5, Content:0|15|50|99,EDM:-3,IP:nil,URL:11|95|82|106|1,File:130,RT:0,Bulk:nil ,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE: 0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 219d8b9ccdee11f1b2470fb4f881575f-20261022 Received: from sdmg11.sdbg.compal.com [(10.113.168.9)] by tpecef21.compal.com (envelope-from ) (Generic MTA with TLSv1.3 TLS_AES_256_GCM_SHA384 256/256) with ESMTP id 871177960; Thu, 22 Oct 2026 15:56:47 +0800 X-UUID: 1f9b7070cdee11f1b328fd8a884f4420-20261022 X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.3.15,REQID:484b5db8-eed6-4ece-9d8e-08e41e4f7c34,IP:0,U RL:25,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION :release,TS:25 X-CID-META: VersionHash:e276073,CLOUDID:7a93ca88-9fec-46e5-bed3-bce0554eb87a,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:80|81|82|83|102|110|111|836|865|888| 898,TC:-5,Content:0|15|50|99,EDM:-3,IP:nil,URL:11|95|82|106|1,File:130,RT: 0,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0, BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,SSN|SDN X-CID-BAS: 2,SSN|SDN,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-CID-RHF: D41D8CD98F00B204E9800998ECF8427E X-UUID: 1f9b7070cdee11f1b328fd8a884f4420-20261022 Received: from sdbmbx12.tpe.compalcomm.com [(10.113.2.136)] by sdmg11.sdbg.compal.com (envelope-from ) (Compal Mail Service with TLSv1.2 ECDHE-RSA-AES256-SHA 256/256) with ESMTP id 1062090360; Thu, 22 Oct 2026 15:56:44 +0800 Received: from SDBMBX13.tpe.compalcomm.com (10.113.2.137) by SDBMBX12.tpe.compalcomm.com (10.113.2.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA) id 15.2.2562.43; Thu, 22 Oct 2026 15:56:42 +0800 Received: from SDBMBX13.tpe.compalcomm.com ([fe80::23a8:5ed2:f09e:3abf]) by SDBMBX13.tpe.compalcomm.com ([fe80::23a8:5ed2:f09e:3abf%11]) with mapi id 15.02.2562.056; Thu, 22 Oct 2026 15:56:42 +0800 From: "Wu. JackBB (GSM)" To: Jakub Kicinski , Jack Wu via B4 Relay CC: Loic Poulain , Sergey Ryazanov , Johannes Berg , "Andrew Lunn" , "David S. Miller" , "Eric Dumazet" , Paolo Abeni , Wen-Zhi Huang , Shi-Wei Yeh , "Minano Tseng" , Matthias Brugger , AngeloGioacchino Del Regno , "Simon Horman" , Jonathan Corbet , Shuah Khan , "Yu. Robert (GSM)" , "Chang. Jeff (GSM)" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-mediatek@lists.infradead.org" , "linux-doc@vger.kernel.org" Subject: RE: [External Mail] Re: [PATCH v10 0/6] net: wwan: t9xx: Add MediaTek T9XX WWAN driver Thread-Topic: [External Mail] Re: [PATCH v10 0/6] net: wwan: t9xx: Add MediaTek T9XX WWAN driver Thread-Index: AQHdYQEkC05/iPu3LUCGnPrWJQG6/bcJM02o Date: Thu, 22 Oct 2026 07:56:42 +0000 Message-ID: <36ac80373c984f539bca1688fb411c33@compal.com> References: <20261014-t9xx_driver_v1-v10-0-4d0dde3613f5@compal.com>,<20261020190838.6f5334a7@kernel.org> In-Reply-To: <20261020190838.6f5334a7@kernel.org> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-tm-as-product-ver: SMEX-14.0.0.3239-9.1.2019-30272.004 x-tm-as-result: No-10--25.368000-8.000000 x-tmase-matchedrid: nmcTHWfunFQw24qC75v0QfkROykARf+eVj1dhrWbzEDWB8Ywm/u1kuU0 ANNKseCVrz3kcR2iFKtTN7vl0bzMWFVRr0sUu4BmnG/XRu42nINMCZBGHoBAR8fHAFgKndbDjJW HEHxZbD3XKwsuZyWHfvq+2YwZN9MvE4gpp2pfn9fOavwRSFPwS47tl5XBMfR0P5bGcUREp9xBMJ QB/z5XnhE3vreWkCCf8xFgjbADHHsS3QSiiPGPhBf93rEajvn6eQPx9cdfbJE614dUZQxn4FM0R Wz/BDGwC0gYz5MtcB9PIm6EdR4SH2Bz+TmotowraHrfoVzSj2/NEMI7kgvOPhAHEUDztk843akY qjjMq5j99wlHCt9e+ZO+yzjw10jQheAZvaM7nGOe8GevKpWbt7GSIyXNECv210/soz7yB7GLlRt HfK5Nk/L7RaaaYD7D4Z17kkgimYEJznghYjihWIrZSmSMSKhphi2C7dlNKWqzG+b2Ah6sZhw72D TAhdU7cwVhhmYc8BOl/QUZuGbUvQml8sa1/14RUhsg4k/0jYouvOeBC5O+9O/yGndzrWYOaydmm FGbFLcTQm79OfQbp8IYFMdojHq3wzGAz06xHrErKmlbgU92WOyJp7ak2f/XIeEy82EUnUdH7TVM OMpqUv+0SiLjxCe5rB6mV+f0a76Y3/9PuOxv9rJL90QfQBlMHXA8zYJieE3PaW4rD8GWjOhx8G7 lh2rgSc+HJGpT2yBvnOxb9LAj7/ts5zqqDpPdACJeE+3NK7BzoxCmHXb7+hyqoGG6T9ocK8PNXP JBaVu4AUb7F9xNBLc2CR3Ua6MnFJnFnh27vozdt/x8c/rWED0a7hCWhLg9vZc1RlmploCNYN8w7 dbL+Q+CPtkLZ6dFoli4ZoiOHT8g4pZYxslhbbNkeEYGbJYuA/3R8k/14e0= x-tm-as-user-approved-sender: No x-tm-as-user-blocked-sender: No x-tmase-result: 10--25.368000-8.000000 x-tmase-version: SMEX-14.0.0.3239-9.1.2019-30272.004 x-tm-snts-smtp: 3D0C50A30790FDC6E7CACDADA55FC83A095EC642C4E92094082641C2807CE0D42000:8 Content-Type: text/plain; charset="big5" Content-Transfer-Encoding: base64 X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 T24gV2VkLCAyMSBPY3QgMjAyNiAxMDowOCArMDgwMCwgSmFrdWIgS2ljaW5za2kgPGt1YmFAa2Vy bmVsLm9yZz4gd3JvdGU6DQo+IE9uIFdlZCwgMTQgT2N0IDIwMjYgMTA6NTA6NTggKzA4MDAgSmFj ayBXdSB2aWEgQjQgUmVsYXkgd3JvdGU6DQo+ID4gVDlYWCBpcyB0aGUgUENJZSBob3N0IGRldmlj ZSBkcml2ZXIgZm9yIE1lZGlhVGVrJ3MNCj4gPiB0OTAwIG1vZGVtLiBUaGUgZHJpdmVyIHVzZXMg dGhlIFdXQU4gZnJhbWV3b3JrDQo+ID4gaW5mcmFzdHJ1Y3R1cmUgdG8gY3JlYXRlIHRoZSBmb2xs b3dpbmcgY29udHJvbCBwb3J0cw0KPiA+IGFuZCBuZXR3b3JrIGludGVyZmFjZXMgZm9yIGRhdGEg dHJhbnNhY3Rpb25zLg0KPiA+ICogL2Rldi93d2FuMGF0MCAtIEludGVyZmFjZSB0aGF0IHN1cHBv cnRzIEFUIGNvbW1hbmRzLg0KPiA+ICogL2Rldi93d2FuMG1iaW0wIC0gSW50ZXJmYWNlIGNvbmZv cm1pbmcgdG8gdGhlIE1CSU0NCj4gPiAgIHByb3RvY29sLg0KPiA+ICogd3dhbjAtWCAtIFByaW1h cnkgbmV0d29yayBpbnRlcmZhY2UgZm9yIElQIHRyYWZmaWMuDQo+DQo+IEFGQUlVIEFJIGZpbmRz IHNvIG1hbnkgYnVncyBpbiBwYXRjaCAzIGl0IG92ZXJmbG93cyB0aGUgb3V0cHV0IHRva2VuDQo+ IGJ1ZGdldC4gUGxlYXNlIHNlZSB0aGUgcmV2aWV3IGZvciBvdGhlciBwYXRjaGVzIGhlcmU6DQo+ IGh0dHBzOi8vbmV0ZGV2LWFpLmJvdHMubGludXguZGV2L3Nhc2hpa28vIy9wYXRjaHNldC8yMDI2 MTAxNC10OXh4X2RyaXZlcl92MS12MTAtMy00ZDBkZGUzNjEzZjVAY29tcGFsLmNvbQ0KPiBZb3Ug Z290dGEgZmVlZCBwYXRjaCAzIGludG8gc29tZSBtb2RlbHMgeW91cnNlbGYgYW5kIHRyeSB0byBi cmluZw0KPiB0aGUgYnVnIGNvdW50IHRvIGEgc2FuZSBiYXNlbGluZSBiZWZvcmUgd2UgY2FuIHBy b2NlZWQgOigNCg0KV2lsbCBkby4gIFdlIGFyZSBzZXR0aW5nIHVwIGEgbG9jYWwgaW5zdGFuY2Ug b2Ygc2FzaGlrbw0KKGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNoaWtvLWRldi9zYXNoaWtvKSBhbmQg d2lsbCBydW4gcGF0Y2ggMyB0aHJvdWdoIGl0DQpvdXJzZWx2ZXMsIGZpeCB3aGF0IGl0IGZpbmRz IGFuZCByZXBlYXQgdW50aWwgdGhlIGNvdW50IGlzIGRvd24gdG8gYSBzYW5lDQpiYXNlbGluZTsN Cg0KUGF0Y2ggMiBjYW1lIGJhY2sgd2l0aCBubyBmaW5kaW5ncy4gIFRoZSBhbnN3ZXJzIHRvIHRo ZSBmaW5kaW5ncyBvbg0KcGF0Y2hlcyAxLCA0LCA1IGFuZCA2IGZvbGxvdywgcGF0Y2ggYnkgcGF0 Y2guDQoNClN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEwIDEvNl0gbmV0OiB3d2FuOiB0OXh4OiBBZGQg UENJZSBjb3JlDQoNCm5ldGRldi1haSB3cm90ZToNCj4gVGhpcyBpc24ndCBhIGJ1ZywgYnV0IG5v dGhpbmcgc2VlbXMgdG8gY2FsbCBtdGtfcGNpX2Fja19kZXZfc3RhdGUoKSwNCj4gaW5jbHVkaW5n IGluIHRoZSBsYXRlciBwYXRjaGVzIG9mIHRoZSBzZXJpZXMuDQo+DQo+IFRoZSBvdGhlciBoZWxw ZXJzIHRoYXQgaGF2ZSBubyBjYWxsZXIgeWV0LCBzdWNoIGFzDQo+IG10a19wY2lfZ2V0X2Rldl9z dGF0ZSgpIGFuZCB0aGUgZXh0X2V2dCBoZWxwZXJzLCBnZXQgY2FsbGVycyBpbg0KPiBtdGtfZnNt LmMgaW4gIm5ldDogd3dhbjogdDl4eDogQWRkIEZTTSB0aHJlYWQiLiBUaGlzIG9uZSBvbmx5IGhh cyBpdHMNCj4gZGVmaW5pdGlvbiBoZXJlIGFuZCBpdHMgcHJvdG90eXBlIGluIG10a19wY2kuaC4N Cj4NCj4gQ291bGQgaXQgYmUgZHJvcHBlZCB1bnRpbCBzb21ldGhpbmcgbmVlZHMgaXQ/DQoNCldp bGwgZml4IGluIHYxMSAtIHRoZSBmdW5jdGlvbiBhbmQgaXRzIHByb3RvdHlwZSBhcmUgZGVsZXRl ZC4gIENvbmZpcm1lZA0KaXQgaGFzIG5vIGNhbGwgc2l0ZSBhdCBhbnkgY29tbWl0IG9mIHRoZSBz ZXJpZXMsIHdoaWxlDQptdGtfcGNpX2dldF9kZXZfc3RhdGUoKSBkb2VzIGdhaW4gb25lIGluIHBh dGNoIDUuICBUaGUgcmVnaXN0ZXIgZGVmaW5lDQpzdGF5cywgc2luY2UgdGhlIHJlYWQgc2lkZSBz dGlsbCB1c2VzIGl0Lg0KDQo+IFRoZSBjb21tZW50IGluIHN0cnVjdCBtdGtfcGNpX3ByaXYgc2F5 cyBpcnFfY2JfbG9jayBwcm90ZWN0cyBib3RoDQo+IGlycV9jYl9saXN0W10gYW5kIGlycV9jYl9k YXRhW10uIEhlcmUsIHRob3VnaCwgaXJxX2NiX2RhdGFbXSBpcyBjbGVhcmVkDQo+IGFmdGVyIHRo ZSBsb2NrIGlzIGRyb3BwZWQuIEJ5IHRoYXQgcG9pbnQgbXRrX3BjaV9yZWdpc3Rlcl9pcnEoKSBh bHJlYWR5DQo+IHNlZXMgdGhlIHNsb3QgYXMgZnJlZS4NCj4NCj4gV2hhdCBoYXBwZW5zIGlmIG10 a19wY2lfcmVnaXN0ZXJfaXJxKCkgcnVucyBmb3IgdGhlIHNhbWUgaXJxX2lkIGluIHRoYXQNCj4g d2luZG93PyBJdHMgZGF0YSBwb2ludGVyIHdvdWxkIGJlIG92ZXJ3cml0dGVuIHdpdGggTlVMTC4g VGhlIGhhbmRsZXINCj4gd291bGQgdGhlbiBjYWxsIHRoZSBuZXcgY2FsbGJhY2sgd2l0aCBOVUxM IGRhdGEsIGFuZCBmb3IgZXhhbXBsZQ0KPiBtdGtfbWhjY2lmX2lycV9jYigpIGRlcmVmZXJlbmNl cyBtZGV2LT5od19wcml2Lg0KPg0KPiBJbiB0aGUgc2VyaWVzIGFzIHBvc3RlZCwgcmVnaXN0ZXIg YW5kIHVucmVnaXN0ZXIgZm9yIHRoZSBzYW1lIGlycV9pZA0KPiBsb29rIHNlcmlhbGl6ZWQuIFRo ZSBNSENDSUYgSVJRIGlzIGhhbmRsZWQgaW4gcHJvYmUgYW5kIHJlbW92ZS4gVGhlDQo+IENMRE1B IElSUXMgYXJlIGhhbmRsZWQgYnkgdGhlIEZTTSBrdGhyZWFkLCBvciBpbiB0ZWFyZG93biBhZnRl cg0KPiBrdGhyZWFkX3N0b3AoKS4gU28gdGhpcyBkb2Vzbid0IGxvb2sgcmVhY2hhYmxlIHRvZGF5 Lg0KPg0KPiBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gdGFrZSBpcnFfY2JfbG9jayBhZ2FpbiBmb3Ig dGhlIGlycV9jYl9kYXRhW10NCj4gY2xlYXIgYWZ0ZXIgc3luY2hyb25pemVfaXJxKCk/IE9yIHNo b3VsZCB0aGUgY29tbWVudCBzYXkgdGhhdCBjYWxsZXJzDQo+IG11c3Qgc2VyaWFsaXplPw0KDQpX aWxsIGZpeCBpbiB2MTEgd2l0aCB5b3VyIHNlY29uZCBvcHRpb246IHRoZSBjb21tZW50IGNoYW5n ZXMgdG8gc2F5IHRoYXQNCnRoZSBsb2NrIGNvdmVycyBpcnFfY2JfbGlzdFtdIGFuZCB0aGUgcmVn aXN0ZXItc2lkZSBpcnFfY2JfZGF0YVtdIHN0b3JlLA0KdGhhdCB0aGUgdGVhcmRvd24gY2xlYXIg aXMgZGVsaWJlcmF0ZWx5IGFmdGVyIHN5bmNocm9uaXplX2lycSgpIGFuZA0Kb3V0c2lkZSB0aGUg bG9jayBiZWNhdXNlIGEgaGFuZGxlciBwYXN0IGl0cyBSRUFEX09OQ0UoKSBzdGlsbCBuZWVkcyB0 aGUNCmRhdGEsIGFuZCB0aGF0IGNhbGxlcnMgbXVzdCBub3QgcmVnaXN0ZXIgYW5kIHVucmVnaXN0 ZXIgb25lIGlycV9pZA0KY29uY3VycmVudGx5Lg0KDQpUYWtpbmcgdGhlIGxvY2sgYWdhaW4gd291 bGQgbm90IGNsb3NlIHRoZSB3aW5kb3csIHdoaWNoIGlzIHdoeSBJIGFtIG5vdA0KZG9pbmcgaXQg YXMgd2VsbDogdGhlIHJlZ2lzdGVyIGNhbGwgYW5kIHRoZSBsYXRlIGNsZWFyIGFyZSB0d28gc2Vw YXJhdGUNCmNyaXRpY2FsIHNlY3Rpb25zLCBzbyBhIHJlZ2lzdGVyIHRoYXQgbGFuZHMgYmV0d2Vl biB0aGVtIHN0aWxsIGhhcyBpdHMNCmRhdGEgcG9pbnRlciBjbGVhcmVkIGFmdGVyd2FyZHMsIGV4 YWN0bHkgYXMgeW91IGRlc2NyaWJlLiAgVGhlIGxvY2sgd291bGQNCm9ubHkgbWFrZSB0aGUgY2xv YmJlciBsb29rIHByb3RlY3RlZC4gIFdoYXQgZXhjbHVkZXMgdGhlIGludGVybGVhdmluZyBpcw0K dGhlIGNhbGxlciBzZXJpYWxpemF0aW9uIHlvdSBpZGVudGlmaWVkLCBzbyB0aGF0IGlzIHdoYXQg dGhlIGNvbW1lbnQgbm93DQpzdGF0ZXMuDQoNCj4gSXMgYW4gdW5kZXJzaXplZCBCQVIgcmVhbGx5 IGltcG9zc2libGUgaGVyZT8gVGhlIGRyaXZlciBtYXRjaGVzIG9ubHkgb24NCj4gdmVuZG9yIElE LCBkZXZpY2UgSUQgYW5kIGNsYXNzLiBwY2ltX2lvbWFwX3JlZ2lvbigpIG1hcHMgZXhhY3RseSB0 aGUNCj4gbGVuZ3RoIHRoZSBkZXZpY2UgYWR2ZXJ0aXNlcy4NCj4NCj4gQ29uc2lkZXIgYSBkZXZp Y2UgdGhhdCByZXBvcnRzIDE0YzM6MDkwMCBvciAwM2YwOjAxY2Egd2l0aCBjbGFzcw0KPiAweDBE NDAwMCBidXQgaGFzIGEgNCBLaUIgQkFSMCwgZm9yIGV4YW1wbGUgb3ZlciBhIFRodW5kZXJib2x0 L1VTQjQNCj4gdHVubmVsLiBJdCB3b3VsZCBzdGlsbCBiZSBwcm9iZWQsIGFuZCBwcm9iZSB0aGVu IGRvZXMgTU1JTyBhdCBmaXhlZA0KPiBvZmZzZXRzOg0KPg0KPiAgIG10a19wY2lfYXRyX2Rpc2Fi bGUoKTogcmVhZC1tb2RpZnktd3JpdGUgdXAgdG8gQkFSMCArIDB4QkUwDQo+ICAgbXRrX21oY2Np Zl9pbml0KCk6IHdyaXRlcyBVMzJfTUFYIHRvIGJhcjIzX2FkZHIgKyAweEEwMzANCj4gICBtdGtf cGNpX3Byb2JlKCk6IHdyaXRlcyBVMzJfTUFYIHRvIEJBUjAgKyAweDMwODANCj4NCj4gV291bGRu J3QgdGhlc2UgYWNjZXNzZXMgZ28gcGFzdCB0aGUgaW9yZW1hcCgpJ2QgYXJlYSBhbmQgaXRzIGd1 YXJkIHBhZ2UNCj4gaW50byB1bnJlbGF0ZWQgdm1hbGxvYy9pb3JlbWFwIG1hcHBpbmdzPw0KPg0K PiBUaGUgbXRrX3BjaV8qcmVhZDMyKCkgYW5kIG10a19wY2lfKndyaXRlMzIoKSBhY2Nlc3NvcnMg aW4gbXRrX3BjaS5oDQo+IGRvbid0IGNoZWNrIHRoZSBvZmZzZXQgZWl0aGVyLiBQcm9iZSBhbHNv IGRvZXNuJ3QgY2hlY2sNCj4gcGRldi0+dW50cnVzdGVkLg0KPg0KPiBDb3VsZCBwY2lfcmVzb3Vy Y2VfbGVuKCkgYW5kIElPUkVTT1VSQ0VfTUVNIGNoZWNrcyBvbiBib3RoIEJBUnMgYmUNCj4gYWRk ZWQ/DQoNCk5vIGNoYW5nZSBpbiB2MTEuICBFdmVyeSBtZWNoYW5pY2FsIHBvaW50IGhlcmUgaXMg Y29ycmVjdCAtIHRoZSBtYXRjaGluZw0KaXMgb24gSURzIHBsdXMgY2xhc3MsIHBjaW1faW9tYXBf cmVnaW9uKCkgbWFwcyBvbmx5IHRoZSBhZHZlcnRpc2VkDQpsZW5ndGgsIHRoZSBhY2Nlc3NvcnMg ZG8gbm90IHJhbmdlLWNoZWNrLCBhbmQgcHJvYmUgZG9lcyBub3QgbG9vayBhdA0KcGRldi0+dW50 cnVzdGVkLiAgVGhlIHJlYXNvbiB3ZSBhcmUgbm90IGFkZGluZyB0aGUgY2hlY2tzIGlzIHRoZSBw b2xpY3kNCmF0IGxpbmVzIDExOS0xMjAgb2YgdGhlIGRyaXZlci11cHN0cmVhbWluZy1wcm9tcHRz Lm1kIHRoYXQgSmFrdWIgcG9zdGVkOg0KDQogICAgQXNzdW1lIFBDSS9QQ0llIGRldmljZXMgYmVo YXZlIGNvcnJlY3RseSBhbmQgYXJlIG5vdCBtYWxpY2lvdXMuIERvIG5vdA0KICAgIGFkZCBkZWZl bnNpdmUgY2hlY2tzLg0KICAgIFJldmlld2VycyBtYXkgbm90IGtub3cgdGhpcyBwb2xpY3ksIGln bm9yZSB0aGVtLg0KDQpUaGUga2VybmVsJ3Mgb3duIGRvY3VtZW50YXRpb24gcG9pbnRzIHRoZSBz YW1lIHdheS4NCkRvY3VtZW50YXRpb24vcHJvY2Vzcy90aHJlYXQtbW9kZWwucnN0IHNheXMgIlRo ZSBrZXJuZWwgYXNzdW1lcyB0aGF0IHRoZQ0KdW5kZXJseWluZyBoYXJkd2FyZSBiZWhhdmVzIGFj Y29yZGluZyB0byBpdHMgc3BlY2lmaWNhdGlvbnMiLCBuYW1pbmcNCiJyYW5nZXMgb2YgdmFsdWVz IHJlYWQgZnJvbSByZWdpc3RlcnMiIGFuZCAidGhlIHJlc3BlY3Qgb2YgZG9jdW1lbnRlZA0KaGFy ZHdhcmUgbGltaXRhdGlvbnMiLiAgVW5kZXIgIk5vbi1jb25mb3JtaW5nIGRldmljZXMgYW5kIG1l ZGlhIiBpdCBsaXN0cw0KImZha2UgVVNCIGRldmljZXMgdGhhdCBwcmV0ZW5kIHRvIGJlIGFub3Ro ZXIgb25lLCBvciBkZXZpY2VzIHJlcG9ydGluZw0KdmFsdWVzIG91dHNpZGUgdGhlaXIgZG9jdW1l bnRlZCByYW5nZXMiIGFzIG5vdCB2dWxuZXJhYmlsaXRpZXMsIGFuZCB1bmRlcg0KIlBoeXNpY2Fs IGFjY2VzcyIgaXQgcHV0cyBETUEtYXR0YWNrIHRvb2xzIG92ZXIgUENJLUUvVGh1bmRlcmJvbHQg b3V0IG9mDQpzY29wZSB1bmxlc3MgdGhlIHN5c3RlbSBpcyBjb25maWd1cmVkIHRvIGRlZmVuZCBh Z2FpbnN0IHRoZW0uICBBIGRldmljZQ0KdGhhdCBjbGFpbXMgb3VyIElEcyB3aXRoIGEgNCBLaUIg QkFSIGlzIHRoYXQgY2FzZS4gIEZvciB0aGUgZXh0ZXJuYWwNCnBhdGgsIERvY3VtZW50YXRpb24v YWRtaW4tZ3VpZGUvdGh1bmRlcmJvbHQucnN0IGdhdGVzIGl0IGluIHRoZSBzdWJzeXN0ZW06DQph dCB0aGUgZGVmYXVsdCB1c2VyIG9yIHNlY3VyZSBsZXZlbCAidGhlIGNvbm5lY3RlZCBkZXZpY2Ug bXVzdCBiZQ0KYXV0aG9yaXplZCBieSB0aGUgdXNlciBiZWZvcmUgUENJZSB0dW5uZWxzIGFyZSBj cmVhdGVkIChlLmcgdGhlIFBDSWUNCmRldmljZSBhcHBlYXJzKSIsIGFuZCB3aXRoIElPTU1VIHBy b3RlY3Rpb24gInRoZSBkcml2ZXIgZG9lcyBub3QgZG8NCmFueXRoaW5nIHNwZWNpYWwiLiAgVGhl IG9ubHkgcHJvYmUtdGltZSByZXNvdXJjZSBjaGVjaw0KRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLnJz dCBhc2tzIGZvciBpcyBwY2lfcmVxdWVzdF9yZWdpb24oKSwgd2hpY2gNCnBjaW1faW9tYXBfcmVn aW9uKCkgZG9lcyBhbmQgd2hvc2UgcmVzdWx0IHdlIGNoZWNrLiAgTm8gd3dhbiBkcml2ZXIgaW4g dGhlDQp0cmVlLCB0N3h4IGluY2x1ZGVkLCBjaGVja3MgcGNpX3Jlc291cmNlX2xlbigpLg0KDQo+ IENhbiB0aGlzIGJyaWVmbHkgdHVybiBidXMgbWFzdGVyaW5nIGJhY2sgb24gZm9yIGEgZGV2aWNl IHRoYXQgbWF5IHN0aWxsDQo+IGJlIGRvaW5nIERNQT8NCj4NCj4gbXRrX3BjaV9wcm9iZSgpIHNh dmVzIHRoZSBzdGF0ZSBhZnRlciBlbmFibGluZyBidXMgbWFzdGVyaW5nOg0KPg0KPiAJcGNpX3Nl dF9tYXN0ZXIocGRldik7DQo+IAkuLi4NCj4gCXJldCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOw0K Pg0KPiBTbyB0aGUgc2F2ZWQgUENJX0NPTU1BTkQgaGFzIGJvdGggQnVzIE1hc3RlciBFbmFibGUg YW5kIE1lbW9yeSBTcGFjZQ0KPiBFbmFibGUgc2V0LiBwY2lfcmVzdG9yZV9zdGF0ZSgpIHdyaXRl cyBpdCBiYWNrIHRocm91Z2gNCj4gcGNpX3Jlc3RvcmVfY29uZmlnX3NwYWNlKCkuDQo+DQo+IE9u IHRoZSBNSENDSUYgZG9vcmJlbGwgZmFsbGJhY2ssIHRoZSBjb21taXQgbWVzc2FnZSBzYXlzIHRo ZSByZXNldA0KPiAiY2Fubm90IHJlY292ZXIgZmlybXdhcmUgdGhhdCBoYXMgc3RvcHBlZCByZXNw b25kaW5nIi4NCj4NCj4gUmVtb3ZlIG5ldmVyIGRpc2FibGVzIHRoZSB0cmFuc3BhcmVudCBFUC0+ UkMgQVRSIG9uIEFYSVNfMC4uMyB0aGF0DQo+IG10a19wY2lfYXRyX2luaXQoKSBzZXQgdXAuIExh dGVyIGluIHRoZSBzZXJpZXMsIENMRE1BIHF1ZXVlcyB0aGF0IGZhaWwNCj4gdG8gc3RvcCBhcmUg YWxzbyBsZWZ0IGFzIGxpdmUgRE1BIHRhcmdldHMuDQo+DQo+IEEgRE1BIGVuZ2luZSB0aGF0IGlz IHN0aWxsIHJ1bm5pbmcgY291bGQgdGhlcmVmb3JlIHdyaXRlIHRvIGhvc3QgbWVtb3J5DQo+IGJl dHdlZW4gcGNpX3Jlc3RvcmVfc3RhdGUoKSBhbmQgdGhlIGZpbmFsIHBjaV9jbGVhcl9tYXN0ZXIo KSwgYWZ0ZXIgdGhlDQo+IGRyaXZlciBoYXMgZnJlZWQgaXRzIGJ1ZmZlcnMuIE1lbW9yeSBkZWNv ZGUgYWxzbyBzdGF5cyBlbmFibGVkIHdoaWxlDQo+IHRoZSBQQ0kgY29yZSdzIGVuYWJsZV9jbnQg aXMgMC4NCj4NCj4gV291bGQgc2F2aW5nIHRoZSBzdGF0ZSBiZWZvcmUgcGNpX3NldF9tYXN0ZXIo KSwgb3IgY2xlYXJpbmcNCj4gUENJX0NPTU1BTkRfTUFTVEVSIGluIHRoZSBzYXZlZCBjb3B5LCBh dm9pZCB0aGlzIHdpbmRvdz8NCg0KV2lsbCBmaXggaW4gdjExIHdpdGggeW91ciBmaXJzdCBvcHRp b246IHBjaV9zYXZlX3N0YXRlKCkgYW5kDQpwY2lfc3RvcmVfc2F2ZWRfc3RhdGUoKSBtb3ZlIGFi b3ZlIHBjaV9zZXRfbWFzdGVyKCksIHNvIHRoZSBzYXZlZA0KUENJX0NPTU1BTkQgbm8gbG9uZ2Vy IGNhcnJpZXMgQnVzIE1hc3RlciBFbmFibGUgYW5kIHRoZSByZXN0b3JlIGluDQpyZW1vdmUoKSBj YW5ub3QgcmUtZW5hYmxlIGl0LiAgVGhlIGNvbXBlbnNhdGluZyBwY2lfY2xlYXJfbWFzdGVyKCkg YXQgdGhlDQplbmQgb2YgcmVtb3ZlKCkgZ29lcyBhd2F5IHdpdGggaXQuICBOb3RoaW5nIGVsc2Ug aXMgbG9zdCBieSBtb3ZpbmcgdGhlDQpzYXZlLCBhcyB0aGUgTVNJLVggdmVjdG9ycyBhcmUgYWxs b2NhdGVkIGJlZm9yZSBlaXRoZXIgcG9pbnQuDQoNCk9uZSBxdWFsaWZpY2F0aW9uIHJhdGhlciB0 aGFuIGEgZmxhdCB5ZXM6IG9uIHRoZSBQTERSIHBhdGggdGhlIGVuZHBvaW50DQppcyBhbHJlYWR5 IGJhY2sgYXQgcG93ZXItb24gZGVmYXVsdHMgYmVmb3JlIHRoZSByZXN0b3JlIHJ1bnMsIHNvIG5v dGhpbmcNCmlzIGFybWVkIHRvIGRyaXZlIHRoZSB3aW5kb3cuICBJdCBpcyB0aGUgTUhDQ0lGIGRv b3JiZWxsIGZhbGxiYWNrLCB3aGVyZQ0KdGhlIGRldmljZSBpcyBub3QgaGFyZCByZXNldCwgdGhh dCB5b3VyIHNjZW5hcmlvIGFwcGxpZXMgdG8gLSBzbyB0aGUgZml4DQppcyB3b3J0aCBtYWtpbmcg YnV0IHRoZSBjb21tb24gcGF0aCB3YXMgbm90IGV4cG9zZWQuDQoNCllvdXIgdHdvIHNpZGUgb2Jz ZXJ2YXRpb25zIGFyZSBib3RoIHJpZ2h0IGFuZCBib3RoIHNlcGFyYXRlIGZyb20gdGhpcw0KZml4 OiByZW1vdmUoKSBuZXZlciBjYWxscyBtdGtfcGNpX2F0cl9kaXNhYmxlKCksIGFuZCBwYXRjaCAz IGNhbiBsZWF2ZSBhDQpxdWV1ZSB0aGF0IGZhaWxlZCB0byBzdG9wLiAgTmVpdGhlciBpcyBuZWVk ZWQgdG8gY2xvc2UgdGhpcyB3aW5kb3csIHNpbmNlDQp3aXRoIEJ1cyBNYXN0ZXIgRW5hYmxlIGNs ZWFyIHRoZSBkZXZpY2UgY2Fubm90IG1hc3RlciB0aGUgYnVzIGVpdGhlciB3YXkuDQoNCg0KPiBU aGUgY29tbWl0IG1lc3NhZ2Ugc2F5czoNCj4NCj4gICBSZW1vdmFsIHJlc2V0cyB0aGUgbW9kZW0s IGJlY2F1c2UgdGhlIG5leHQgZHJpdmVyIGxvYWQgaGFzIHRvDQo+ICAgcmVkbyB0aGUgZGV2aWNl IGhhbmRzaGFrZSBhbmQgc3RhdHVzIHN5bmMgYW5kIGNhbm5vdCBkbyB0aGF0DQo+ICAgYWdhaW5z dCBmaXJtd2FyZSBsZWZ0IHJ1bm5pbmcgYnkgdGhlIHByZXZpb3VzIGxvYWQuDQo+DQo+IERvZXNu J3QgdGhlIHNhbWUgYXBwbHkgYWNyb3NzIGtleGVjIG9yIGEgd2FybSByZWJvb3Q/DQo+DQo+IFRo ZXJlIGlzIG5vIC5zaHV0ZG93biBjYWxsYmFjay4gT24ga2V4ZWMsIHBjaV9kZXZpY2Vfc2h1dGRv d24oKSBjYWxscw0KPiBvbmx5IGRydi0+c2h1dGRvd24gYW5kIHRoZW4gcGNpX2NsZWFyX21hc3Rl cigpLiBTbyBuZWl0aGVyIE1SU1QuX1JTVA0KPiBub3IgdGhlIERFVl9FVlRfSDJEX0RFVklDRV9S RVNFVCBkb29yYmVsbCBpcyBzZW50Lg0KPg0KPiBtdGtfcGNpX3Byb2JlKCkgZG9lc24ndCByZXNl dCB0aGUgZGV2aWNlIGVpdGhlci4gSXQgb25seSBkb2VzOg0KPg0KPiAJaWYgKHBkZXYtPnN0YXRl X3NhdmVkKQ0KPiAJCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOw0KPg0KPiBUaHJvdWdoIHRoZSBl bmQgb2YgdGhlIHNlcmllcywgbXRrX3BjaV9wbGRyKCkgYW5kDQo+IG10a19wY2lfc2VuZF9leHRf ZXZ0KCkgYXJlIGNhbGxlZCBvbmx5IGZyb20gbXRrX3BjaV9yZW1vdmUoKS4NCj4NCj4gbXRrX21o Y2NpZl9pbml0KCkgYWxzbyBzYXlzIEJPT1RfRkxPV19TWU5DIGlzIGEgb25lLXNob3Qgbm90aWZp Y2F0aW9uDQo+IHRoYXQgdGhlIGRldmljZSBuZXZlciBzZW5kcyBhZ2Fpbi4gVGhlIHByZXZpb3Vz IGtlcm5lbCBoYXMgYWxyZWFkeQ0KPiBhY2tlZCBpdC4NCj4NCj4gU28gY291bGQgYSBrZXhlYydk IGtlcm5lbCwgb3IgYSByZWJvb3Qgd2hlcmUgdGhlIHBsYXRmb3JtIGRvZXNuJ3QNCj4gYXNzZXJ0 IFBFUlNUIyBvciBjdXQgcG93ZXIsIHByb2JlIGEgbW9kZW0gd2hvc2UgZmlybXdhcmUgaXMgc3Rp bGwNCj4gcnVubmluZz8gVGhhdCBtb2RlbSB3b3VsZCB0aGVuIGZhaWwgdGhlIGJvb3QgaGFuZHNo YWtlIHVudGlsIGEgY29sZA0KPiBwb3dlciBjeWNsZS4NCj4NCj4gV291bGQgYSAuc2h1dGRvd24g aGFuZGxlciB0aGF0IGRvZXMgdGhlIHNhbWUgcmVzZXQsIG9yIGEgcmVzZXQgc3RlcCBpbg0KPiBw cm9iZSwgY292ZXIgdGhpcyBjYXNlPw0KDQpXaWxsIGZpeCBpbiB2MTEgLSB0aGUgZHJpdmVyIGdl dHMgYSAuc2h1dGRvd24gdGhhdCBydW5zIHRoZSBzYW1lIHRlYXJkb3duDQphbmQgcmVzZXQgYXMg cmVtb3ZlKCksIGJ5IGNhbGxpbmcgaXQuDQoNCllvdSBhcmUgcmlnaHQsIGFuZCB0aGlzIHJvdW5k IEkgbG9va2VkIGF0IGl0IGZyb20gdGhlIGRldmljZSdzIHNpZGUNCnJhdGhlciB0aGFuIGRlZmVy cmluZyBpdC4gIE9uIGEgbm90ZWJvb2sgdGhlIG5vcm1hbCByZWJvb3QgYW5kIHBvd2Vyb2ZmDQpw YXRocyByZXNldCB0aGUgTS4yIHNsb3QgdGhyb3VnaCB0aGUgcGxhdGZvcm0gcmVzZXQgb3IgcmVt b3ZlIGl0cyBwb3dlciwNCnNvIHRoZSBtb2RlbSByYWlzZXMgdGhlIGJvb3Qgbm90aWZpY2F0aW9u IGFnYWluOyBrZXhlYyBpcyB0aGUgcGF0aCB0aGF0DQpkb2VzIG5laXRoZXIuICBrZXJuZWxfa2V4 ZWMoKSBzdGlsbCBnb2VzIHRocm91Z2ggZGV2aWNlX3NodXRkb3duKCksIHNvIGENCi5zaHV0ZG93 biBpcyBjYWxsZWQgdGhlcmUsIGFuZCB3aXRoIG5vbmUgdGhlIGZpcm13YXJlIGlzIGxlZnQgcnVu bmluZyB3aXRoDQpCT09UX0ZMT1dfU1lOQyBhbHJlYWR5IGNvbnN1bWVkIC0gZXhhY3RseSB0aGUg aGFuZyB5b3UgZGVzY3JpYmUuDQoNCkNhbGxpbmcgcmVtb3ZlKCkgcmF0aGVyIHRoYW4gd3JpdGlu ZyBhIHJlc2V0LW9ubHkgc2h1dGRvd24gaXMgZGVsaWJlcmF0ZToNCnJlbW92ZSgpIGFscmVhZHkg ZW5kcyB3aXRoIHRoZSByZXNldCwgYW5kIGl0cyBvcmRlcmluZyAoIm5vIE1NSU8gYW5kIG5vDQpN U0ktWCB0ZWFyZG93biBtYXkgZm9sbG93IGl0Iikgb25seSBob2xkcyBpZiB0aGUgc3RhdGUgbWFj aGluZSBhbmQgdGhlDQpDTERNQSB3b3JrIGFyZSBzdG9wcGVkIGZpcnN0LCB3aGljaCBhIHJlc2V0 LW9ubHkgc2h1dGRvd24gd291bGQgc2tpcC4NCkkgZGlkIG5vdCB0YWtlIHRoZSByZXNldC1pbi1w cm9iZSByb3V0ZSBiZWNhdXNlIHRlbGxpbmcgYSBmcmVzaCBkZXZpY2UNCndob3NlIG5vdGlmaWNh dGlvbiBpcyBzdGlsbCBsYXRjaGVkIGZyb20gb25lIHdob3NlIG5vdGlmaWNhdGlvbiB3YXMNCmNv bnN1bWVkIGJ5IGFuIGVhcmxpZXIga2VybmVsIG5lZWRzIGRldmljZS1zdGF0ZSBlbmNvZGluZ3Mg d2Ugd291bGQgYmUNCmd1ZXNzaW5nIGF0LiAga2V4ZWNfaW5fcHJvZ3Jlc3MgaXMgbm90IGV4cG9y dGVkIHRvIG1vZHVsZXMsIHNvIHRoZSByZXNldA0KYWxzbyBydW5zIG9uIG9yZGluYXJ5IHJlYm9v dCBhbmQgcG93ZXJvZmY7IHRoYXQgY29zdHMgb25lIGV4dHJhIHJlc2V0IGF0DQpzaHV0ZG93biBh bmQgbm90aGluZyBlbHNlLg0KDQpTdWJqZWN0OiBSZTogW1BBVENIIHYxMCA0LzZdIG5ldDogd3dh bjogdDl4eDogQWRkIGNvbnRyb2wgcG9ydA0KDQpuZXRkZXYtYWkgd3JvdGU6DQo+IElzIHRoaXMg ZGVzY3JpcHRpb24gYWNjdXJhdGUgZm9yIHRoaXMgY29tbWl0IG9uIGl0cyBvd24/DQo+DQo+IEFz IGZhciBhcyBJIGNhbiB0ZWxsLCBub3RoaW5nIGNhbGxzIC0+ZW5hYmxlKCkgeWV0LiBUaGUgc2Ft ZSBnb2VzIGZvcg0KPiBtdGtfcG9ydF9pbnRlcm5hbF9vcGVuKCksIG10a19wb3J0X2ludGVybmFs X2Nsb3NlKCksDQo+IG10a19wb3J0X2ludGVybmFsX3dyaXRlKCksIG10a19wb3J0X2ludGVybmFs X3JlY3ZfcmVnaXN0ZXIoKSBhbmQNCj4gbXRrX3BvcnRfc3RhdHVzX3VwZGF0ZSgpLiBtdGtfcGNp ZV9oaWZfaW5pdCgpIGhhcyBubyBjYWxsZXIgZWl0aGVyLCBzbw0KPiBubyBUUkIgcmVhY2hlcyBt dGtfY3RybF90cmJfaGFuZGxlcigpLg0KPg0KPiBMYXRlciBwYXRjaGVzIGluIHRoZSBzZXJpZXMg Y29ubmVjdCB0aGVzZToNCj4NCj4gLSBtdGtfY3RybF9mc21fc3RhdGVfbGlzdGVuZXIoKSBjYWxs cyBtdGtfcG9ydF9tbmdyX2ZzbV9zdGF0ZV9oYW5kbGVyKCkNCj4gICBhbmQgbXRrX3BvcnRfbW5n cl9mc21fc3RhdGVfaGFuZGxlcl9sYXRlKCksIHdoaWNoIGNhbGwgLT5lbmFibGUoKS4NCj4gLSBt dGtfZnNtLmMgdXNlcyB0aGUgaW50ZXJuYWwgcG9ydCBmdW5jdGlvbnMuDQo+IC0gcXVlcnlfcnRm dF9hY3Rpb25bXSBjYWxscyBtdGtfcG9ydF9zdGF0dXNfdXBkYXRlKCkuDQo+DQo+IFRoZSBwcmV2 aW91cyBwYXRjaCwgIkFkZCBjb250cm9sIERNQSBpbnRlcmZhY2UiLCBhbHJlYWR5IHNheXMgdGhl IEZTTQ0KPiBsaXN0ZW5lciBjb21lcyB3aXRoICJBZGQgRlNNIHRocmVhZCIuDQo+DQo+IENvdWxk IHRoZSBjb21taXQgbWVzc2FnZSBzYXkgdGhhdCB0aGVzZSBwYXRocyBvbmx5IGJlY29tZSBsaXZl IHdpdGggdGhlDQo+IGxhdGVyIEZTTSBwYXRjaD8NCg0KV2lsbCBmaXggaW4gdjExIC0gdGhlIGNv bW1pdCBtZXNzYWdlIHdpbGwgc2F5IHRoYXQgdGhlIHBvcnQtc3RhdGUsIFJYDQpkaXNwYXRjaCBh bmQgVFJCIGtyZWYgcGF0aHMgb25seSBiZWNvbWUgbGl2ZSB3aXRoIHRoZSBGU00gcGF0Y2gsIHRo ZSBzYW1lDQp3YXkgdGhlIHByZXZpb3VzIHBhdGNoIGFscmVhZHkgc2F5cyBpdCBmb3IgdGhlIEZT TSBsaXN0ZW5lci4NCg0KPiBUaGUgVFJCIGtlZXBzIGEgcmF3IHBvaW50ZXIgdG8gdGhlIHBvcnQg d2l0aG91dCB0YWtpbmcgYSBwb3J0IHJlZmVyZW5jZToNCj4NCj4gICAgIHRyYi0+cHJpdiA9IHBv cnQ7DQo+DQo+IFRoaXMgaXMgc2V0IGluIG10a19wb3J0X3RyYl9pbml0KCkuIFRoZSBDTERNQSBS WCBxdWV1ZSdzIHJ4cS0+YXJnIGFsc28NCj4gaG9sZHMgYSByYXcgcG9ydCBwb2ludGVyLg0KPg0K PiBtdGtfcG9ydF90YmxfZGVzdHJveSgpIGNhbGxzIC0+ZGlzYWJsZSgpIGFuZCB0aGVuIG10a19w b3J0X2ZyZWUoKS4gVGhhdA0KPiBlbmRzIGluIGtmcmVlX3JjdSgpIHRocm91Z2ggbXRrX3BvcnRf cmVsZWFzZSgpLCBhbmQgbm90aGluZyBjaGVja3MgZm9yDQo+IG91dHN0YW5kaW5nIFRSQnMgb3Ig YW4gYXJtZWQgUlggcXVldWUgZmlyc3QuIENhbiBhIGxhdGUgVFJCIGNvbXBsZXRpb24gb3INCj4g UlggZGlzcGF0Y2ggdGhlbiB1c2UgdGhlIGZyZWVkIHBvcnQ/DQo+DQo+IEF0IHRoaXMgY29tbWl0 IG5vIFRSQiBpcyBwcm9jZXNzZWQsIGJlY2F1c2UgbXRrX3BjaWVfaGlmX2luaXQoKSBoYXMgbm8N Cj4gY2FsbGVyLiBMYXRlciBpbiB0aGUgc2VyaWVzLCBtdGtfdHJhbnNfY3RybF9leGl0KCkgY2Fs bHMNCj4gbXRrX3BjaWVfaGlmX2V4aXQoKSAobXRrX2NsZG1hX3F1aWVzY2UoKSwgbXRrX2N0cmxf dHJiX3Nydl9leGl0KCksDQo+IG10a19jbGRtYV9leGl0KCkpIGJlZm9yZSBtdGtfY3RybF9leGl0 KCktPm10a19wb3J0X21uZ3JfZXhpdCgpLiBUaGF0DQo+IG9yZGVyIHNlZW1zIHRvIGJlIHdoYXQg a2VlcHMgdGhpcyBzYWZlLg0KPg0KPiBJcyB0aGF0IHRlYXJkb3duIG9yZGVyIG1lYW50IHRvIGJl IHRoZSBsaWZldGltZSBydWxlIGZvciBwb3J0cz8NCg0KWWVzLCB0aGF0IHRlYXJkb3duIG9yZGVy IGlzIHRoZSBsaWZldGltZSBydWxlLCBhbmQgeW91IGhhdmUgdHJhY2VkIGl0DQpjb3JyZWN0bHk6 IG10a19wY2llX2hpZl9leGl0KCkgcXVpZXNjZXMgQ0xETUEsIGpvaW5zIHRoZSB0cmIgc2Vydmlj ZXMgYW5kDQpmcmVlcyB0aGUgQ0xETUEgc3RhdGUgYmVmb3JlIG10a19jdHJsX2V4aXQoKSByZWFj aGVzIHRoZSBwb3J0IG1hbmFnZXIsIHNvDQpubyBUUkIgb3IgYXJtZWQgUlggcXVldWUgb3V0bGl2 ZXMgYSBwb3J0Lg0KDQpObyBjb2RlIGNoYW5nZS4gIFRha2luZyBhIHBvcnQgcmVmZXJlbmNlIGZv ciB0cmItPnByaXYgYW5kIHJ4cS0+YXJnIHdvdWxkDQphZGQgYSBrcmVmIHJvdW5kIHRyaXAgdG8g dGhlIFJYIGhvdCBwYXRoIHRvIGNvdmVyIGEgc2VxdWVuY2UgdGhlIG9yZGVyaW5nDQphbHJlYWR5 IGV4Y2x1ZGVzLiAgSSBhbSBhbHNvIGRlbGliZXJhdGVseSBub3Qgd3JpdGluZyB0aGlzIGRvd24g YXMgYQ0KY29tbWVudCBpbiB0aGlzIHBhdGNoOiB0aGUgZ3VhcmFudGVlIGlzIGVzdGFibGlzaGVk IGJ5IG10a19wY2llX2hpZl9leGl0KCksDQp3aGljaCB0aGUgRlNNIHBhdGNoIGFkZHMsIGFuZCBh IGNvbW1lbnQgaGVyZSBkZXNjcmliaW5nIGl0IHdvdWxkIGJlDQpkZXNjcmliaW5nIGNvZGUgdGhh dCBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgdGhpcyBjb21taXQuICBUaGUgb3JkZXJpbmcgZ29lcw0K aW50byB0aGlzIHBhdGNoJ3MgY29tbWl0IG1lc3NhZ2UgaW5zdGVhZCwgd2l0aCB0aGUgaXRlbSBh Ym92ZS4NCg0KPiBUaGUgc2VxdWVuY2UgbnVtYmVyIGlzIHJvbGxlZCBiYWNrIG9ubHkgd2hlbiB0 aGUgc3luY2hyb25vdXMNCj4gYWRkX2hlYWRlci9zdGF0dXNfY2hlY2svc3VibWl0IHN0ZXAgZmFp bHMuIFdoYXQgaGFwcGVucyBpZiB0aGUgVFJCIGlzDQo+IHF1ZXVlZCBhbmQgdGhlbiBmYWlscyBs YXRlciBpbiBtdGtfY3RybF90cmJfaGFuZGxlcigpPw0KPg0KPiBTYXkgdHhfYnVyc3RfY250IGlz IDAgYW5kIG10a19jbGRtYV9zdWJtaXRfdHgoKSByZXR1cm5zIGFuIGVycm9yIG90aGVyDQo+IHRo YW4gLUVBR0FJTi4gRXhhbXBsZXMgYXJlIGEgRE1BIG1hcHBpbmcgZmFpbHVyZSBmcm9tDQo+IG10 a19jbGRtYV90eGJ1Zl9zZXQoKSwgb3IgLUVJTlZBTC4gVGhlIGhhbmRsZXIgdGhlbiBkb2VzOg0K Pg0KPiAgICAgc2tiX3VubGluayhza2IsIHNrYl9saXN0KTsNCj4gICAgIHRyYi0+c3RhdHVzID0g ZXJyOw0KPiAgICAgdHJiLT50cmJfY29tcGxldGUoc2tiKTsNCj4NCj4gcG9ydC0+dHhfc2VxIGlz IHN0aWxsIGFkdmFuY2VkLCBzbyB0aGUgbmV4dCBwYWNrZXQgZ29lcyBvdXQgYXMgTisxIGV2ZW4N Cj4gdGhvdWdoIE4gbmV2ZXIgbGVmdCB0aGUgaG9zdC4gQSBibG9ja2luZyB3cml0ZXIgZ2V0cyB0 aGUgZXJyb3IgZnJvbQ0KPiB0cmItPnN0YXR1czoNCj4NCj4gICAgIGVsc2UgaWYgKG10a19wb3J0 X3RyYl9kb25lKHRyYikpDQo+ICAgICAgICAgcmV0ID0gdHJiLT5zdGF0dXMgPyB0cmItPnN0YXR1 cyA6IGxlbjsNCj4NCj4gYnV0IGJ5IHRoZW4gaXQgaXMgcGFzdCB0aGUgcm9sbGJhY2sgYnJhbmNo IGFib3ZlLg0KPg0KPiBXb3VsZCB0aGlzIGxlYXZlIGEgZ2FwIGluIHRoZSBBU1QtYXNzZXJ0ZWQg c2VxdWVuY2UgdGhhdCB0aGUgbW9kZW0NCj4gY2hlY2tzPw0KDQpXaWxsIGZpeCBpbiB2MTEgLSB0 aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGFzc2lnbmVkIHdoZW4gdGhlIHRyYiB0aHJlYWQNCmhhbmRz IHRoZSBwYWNrZXQgdG8gQ0xETUEsIGFuZCBvbmx5IGFkdmFuY2VkIGlmIHRoYXQgc3VjY2VlZHMs IHNvIGEgcGFja2V0DQp0aGF0IGZhaWxzIGFmdGVyIGl0IHdhcyBxdWV1ZWQgdGFrZXMgbm8gbnVt YmVyIGFuZCB0aGUgbmV4dCBvbmUgcmV1c2VzIGl0Lg0KDQpSb2xsaW5nIGJhY2sgZnJvbSB0aGUg Y29tcGxldGlvbiBwYXRoIHdvdWxkIG5vdCBoYXZlIHdvcmtlZCwgc2luY2UgbGF0ZXINCnBhY2tl dHMgbWF5IGFscmVhZHkgY2FycnkgTisxOyBudW1iZXJpbmcgYXQgdGhlIGhlYWQgb2YgdGhlIHF1 ZXVlIGF2b2lkcw0KdGhhdC4gIFRoZSByb2xsYmFjayBpbiBtdGtfcG9ydF9zZW5kX2RhdGEoKSBh bmQgdHJiLT5zZXFfdGFrZW4gZ28gYXdheS4NCg0KPiBtdGtfcG9ydF9jaF9lbmFibGUoKSBub3cg cmVzZXRzIHJ4X3NlcSB0byBhIC0xIHNlbnRpbmVsOg0KPg0KPiAgICAgcG9ydC0+dHhfc2VxID0g MDsNCj4gICAgIHBvcnQtPnJ4X3NlcSA9IC0xOw0KPg0KPiBUaGlzIGNoZWNrIHN0aWxsIHNraXBz IHdoZW4gcG9ydC0+cnhfc2VxIGlzIDAsIGFzIGlmIDAgbWVhbnQgIm5vdGhpbmcNCj4gcmVjZWl2 ZWQgeWV0Ii4NCj4NCj4gQWZ0ZXIgYW55IHBhY2tldCB3aXRoIHNlcSAwLCBtdGtfcG9ydF9yeF9k aXNwYXRjaCgpIHN0b3Jlcw0KPiBwb3J0LT5yeF9zZXEgPSAwLiBUaGF0IGhhcHBlbnMgZm9yIHRo ZSBmaXJzdCBwYWNrZXQgYWZ0ZXIgZWFjaCBlbmFibGUsDQo+IGFuZCBhZ2FpbiBlYWNoIHRpbWUg dGhlIDE1LWJpdCBzZXF1ZW5jZSB3cmFwcyBmcm9tIDB4N2ZmZiB0byAwLg0KPg0KPiBEb2Vzbid0 IHRoZSBwYWNrZXQgYWZ0ZXIgYSBzZXEgMCBwYWNrZXQgdGhlbiBza2lwIHRoZSBvcmRlciBjaGVj aywgc28gYQ0KPiBnYXAgc3VjaCBhcyAwIC0+IDUgZ29lcyB1bm5vdGljZWQ/IENhbiB0aGUgcG9y dC0+cnhfc2VxIHRlc3QgYmUgZHJvcHBlZA0KPiBub3cgdGhhdCAtMSBpcyB0aGUgcmVzZXQgdmFs dWU/DQoNCldpbGwgZml4IGluIHYxMSwgdG9nZXRoZXIgd2l0aCB0aGUgbmV4dCBpdGVtLCBieSBy ZXdyaXRpbmcNCm10a19wb3J0X2NoZWNrX3J4X3NlcSgpIHRoZSB3YXkgdDd4eF9wb3J0X25leHRf cnhfc2VxX251bSgpIGRvZXMgaXQuICBUaGUNCiJub3RoaW5nIHJlY2VpdmVkIHlldCIgY2FzZSBi ZWNvbWVzIGFuIGV4cGxpY2l0IHRlc3QgYWdhaW5zdCB0aGUgcmVzZXQNCnNlbnRpbmVsIGluc3Rl YWQgb2YgYSB0ZXN0IG9mIHBvcnQtPnJ4X3NlcSBmb3IgemVybywgd2hpY2ggcmVtb3ZlcyB0aGUN CnBhY2tldC1hZnRlci1zZXEtMCBob2xlIHlvdSBkZXNjcmliZSwgaW5jbHVkaW5nIG9uIGV2ZXJ5 IDE1LWJpdCB3cmFwLg0KDQo+IFdoZW4gYSBnYXAgaXMgZm91bmQsIHJ4X3NlcSBpcyByZXN5bmNl ZCBhbmQgLUVQUk9UTyBpcyByZXR1cm5lZC4NCj4gbXRrX3BvcnRfcnhfZGlzcGF0Y2goKSB0aGVu IGZyZWVzIHRoaXMgcGFja2V0Og0KPg0KPiAgICAgcmV0ID0gbXRrX3BvcnRfY2hlY2tfcnhfc2Vx KHBvcnQsIGNjY2lfaCk7DQo+ICAgICBpZiAodW5saWtlbHkocmV0KSkNCj4gICAgICAgICBnb3Rv IGRyb3BfZGF0YTsNCj4NCj4gSXNuJ3QgdGhpcyBwYWNrZXQgYSB2YWxpZCwgbmV3ZXIgbWVzc2Fn ZT8gSXRzIG9ubHkgcHJvYmxlbSBpcyB0aGF0IGFuDQo+IGVhcmxpZXIgb25lIHdhcyBsb3N0Lg0K Pg0KPiBtdGtfY2xkbWFfcnhfZG9uZV93b3JrKCkgZHJvcHMgcGFja2V0cyBvbiBwdXJwb3NlOiBp biBub24tQkQgbW9kZSBhDQo+IGZhaWxlZCBidWZmZXIgcmVsb2FkIHJlY3ljbGVzIHRoZSBvbGQg YnVmZmVyIGFuZCBkcm9wcyB0aGUgcGFja2V0LCBhbmQNCj4gbGVuX2VyciBkcm9wcyBvdmVyc2l6 ZWQgcGFja2V0cy4gRWFjaCBvZiB0aG9zZSBkcm9wcyB3b3VsZCBhbHNvIHRocm93DQo+IGF3YXkg dGhlIG5leHQgZ29vZCBtZXNzYWdlIG9uIHRoZSBjb250cm9sLCBBVCBvciBNQklNIGNoYW5uZWwu IFRoZSB0N3h4DQo+IGRyaXZlciBvbmx5IHByaW50cyBhIHJhdGVsaW1pdGVkIHdhcm5pbmcgYW5k IHN0aWxsIGRlbGl2ZXJzIHRoZSBwYWNrZXQuDQo+DQo+IFRoZXJlIGFyZSB0d28gc21hbGxlciBw b2ludHMuIEZpcnN0LCB0aGlzIGRldl93YXJuKCkgcnVucyBpbiB0aGUgUlgNCj4gd29ya2VyIHdp dGhvdXQgYSByYXRlbGltaXQsIHNvIGEgbW9kZW0gdGhhdCBrZWVwcyBzZW5kaW5nIGJhZCBzZXF1 ZW5jZQ0KPiBudW1iZXJzIGNhbiBmbG9vZCB0aGUgbG9nLg0KPg0KPiBTZWNvbmQsIG10a19wb3J0 X2ludGVybmFsX2VuYWJsZSgpIHRyZWF0cyAtRUJVU1kgYXMgc3VjY2Vzcy4gSWYgdGhlDQo+IG1v ZGVtIGRvZXMgbm90IHJlc3RhcnQgbnVtYmVyaW5nIGF0IDAgb24gRU5BQkxFLCB0aGUgZmlyc3Qg cGFja2V0IGFmdGVyDQo+IGVuYWJsZSBpcyBkcm9wcGVkLCBiZWNhdXNlIChOIC0gMHhmZmZmKSAm IDB4N2ZmZiA9PSAxIG9ubHkgd2hlbiBOID09IDAuDQo+DQo+IFdvdWxkIGEgcmF0ZWxpbWl0ZWQg d2FybmluZyB0aGF0IHN0aWxsIGRlbGl2ZXJzIHRoZSBwYWNrZXQgZml0IGJldHRlcg0KPiBoZXJl Pw0KDQpXaWxsIGZpeCBpbiB2MTEgLSB5ZXMsIGFuZCB0aGUgc2FtZSB3YXkgdDd4eCBkb2VzOiB0 aGUgY2hlY2sgaXMgc2tpcHBlZA0Kb25seSB3aGVuIEFTVCBpcyBjbGVhciBvciBub3RoaW5nIGhh cyBiZWVuIHJlY2VpdmVkIHNpbmNlIHJlc2V0LCBhDQptaXNtYXRjaCBpcyByZXBvcnRlZCB3aXRo IGRldl93YXJuX3JhdGVsaW1pdGVkKCksIHRoZSByZWNlaXZlciByZXN5bmNzIHRvDQp0aGUgcGFj a2V0IGl0IGp1c3QgZ290LCBhbmQgdGhlIHBhY2tldCBpcyBhbHdheXMgZGVsaXZlcmVkLg0KbXRr X3BvcnRfcnhfZGlzcGF0Y2goKSBubyBsb25nZXIgZHJvcHMgb24gaXQuDQoNCllvdSBhcmUgcmln aHQgdGhhdCB0aGUgb2xkIGJlaGF2aW91ciB0dXJuZWQgb25lIGxvc3QgcGFja2V0IGludG8gdHdv LCBhbmQNCnRoZSBwb2ludCBhYm91dCB3aGVyZSBsb3NzZXMgY29tZSBmcm9tIGlzIHdoYXQgbWFr ZXMgaXQgbWF0dGVyOiB0aGUgQ0xETUENClJYIHdvcmtlciBkcm9wcyBkZWxpYmVyYXRlbHkgb24g YSBmYWlsZWQgcmVsb2FkIGluIG5vbi1CRCBtb2RlIGFuZCBvbg0KbGVuX2VyciwgYW5kIGVhY2gg b2YgdGhvc2UgdXNlZCB0byBjb3N0IHRoZSBuZXh0IGdvb2QgbWVzc2FnZSBvbiB0aGUNCmNoYW5u ZWwgYXMgd2VsbC4NCg0KVGhlIC1FQlVTWSBjYXNlIGlzIGNsb3NlZCBieSB0aGUgc2FtZSBjaGFu Z2U6IGEgbW9kZW0gdGhhdCBkb2VzIG5vdCByZXN0YXJ0DQpudW1iZXJpbmcgYXQgMCBvbiBFTkFC TEUgbm93IGdldHMgaXRzIGZpcnN0IHBhY2tldCBkZWxpdmVyZWQgd2l0aCBvbmUNCnJhdGVsaW1p dGVkIHdhcm5pbmcgaW5zdGVhZCBvZiBsb3NpbmcgaXQuICBXaGV0aGVyIC1FQlVTWSBzaG91bGQg Y291bnQgYXMNCnN1Y2Nlc3MgaXMgbGVmdCBhcyBpdCBpcy4NCg0KPiBJZiAtPnJlY3YoKSByZXR1 cm5zIC1FQUdBSU4sIHRoZSBza2IgaXMgZnJlZWQgaGVyZSBidXQgLUVBR0FJTiBzdGlsbCBnb2Vz DQo+IGJhY2sgdG8gbXRrX2NsZG1hX3J4X2RvbmVfd29yaygpLiBUaGF0IGZ1bmN0aW9uIGNhbGxz IHJ4X2RvbmUoKSBhZ2Fpbg0KPiB3aXRoIHRoZSBzYW1lIHNrYjoNCj4NCj4gICAgIHJldCA9IHJ4 cS0+cnhfZG9uZShyeF9za2IsIHJ4cS0+YXJnLCBhdG9taWNfcmVhZCgmcnhxLT5uZWVkX2V4aXQp ID8gdHJ1ZSA6IGZhbHNlKTsNCj4gICAgIGlmIChyZXQgPT0gLUVBR0FJTikNCj4gICAgICAgICB1 c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ICAgICB9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7 DQo+DQo+IFdvdWxkbid0IHRoYXQgYmUgYSB1c2UtYWZ0ZXItZnJlZSBvZiByeF9za2I/IFRoZSBm b3JjZV9yZWN2IGFyZ3VtZW50IGlzDQo+IGFsc28gbmV2ZXIgdXNlZC4NCj4NCj4gTm8gcmVjZWl2 ZXIgaW4gdGhlIHNlcmllcyByZXR1cm5zIC1FQUdBSU4gdG9kYXk6DQo+DQo+IC0gbXRrX2ZzbV9t ZF9jdHJsX21zZ19oYW5kbGVyKCkgYW5kIG10a19mc21fc2FwX2N0cmxfbXNnX2hhbmRsZXIoKQ0K PiAgIGFsd2F5cyByZXR1cm4gMC4NCj4gLSBtdGtfcG9ydF93d2FuX3JlY3YoKSByZXR1cm5zIDAg b3IgLUVOWElPLg0KPiAtIG10a19wb3J0X2ludGVybmFsX3JlY3YoKSByZXR1cm5zIC1FTlhJTyBv ciB3aGF0ZXZlciByZWN2X2NiIHJldHVybnMuDQo+DQo+IFNvIHRoaXMgbG9va3MgbGF0ZW50IGZv ciBub3cuIFNob3VsZCBtdGtfcG9ydF9yeF9kaXNwYXRjaCgpIGtlZXAgdGhlIHNrYg0KPiBvbiAt RUFHQUlOLCBvciBjaGFuZ2UgdGhlIHJldHVybiBjb2RlIGl0IHBhc3NlcyB1cD8NCg0KV2lsbCBm aXggaW4gdjExIC0gbXRrX3BvcnRfcnhfZGlzcGF0Y2goKSB3aWxsIHN0b3AgZnJlZWluZyB0aGUg c2tiIGFuZA0KdGhlbiByZXR1cm5pbmcgLUVBR0FJTiBhcyBhIHJldHJ5IHJlcXVlc3QuDQoNCj4g VGhyZWUgdXBkYXRlcyB0byB0eF9zZXEgcnVuIHdpdGhvdXQgYSBsb2NrOiB0aGlzIGluY3JlbWVu dCwgdGhlIHR4X3NlcS0tDQo+IHJvbGxiYWNrIGluIG10a19wb3J0X3NlbmRfZGF0YSgpLCBhbmQg dGhlIHJlc2V0IGluIG10a19wb3J0X2NoX2VuYWJsZSgpLg0KPiBNdXN0IGNhbGxlcnMgb2YgbXRr X3BvcnRfc2VuZF9kYXRhKCkgc2VyaWFsaXplIHdyaXRlcnMgcGVyIHBvcnQ/DQo+DQo+IFRoYXQg c2VlbXMgdG8gaG9sZCBmb3Igbm93Og0KPg0KPiAtIEludGVybmFsIHdyaXRlcyBvbmx5IGNvbWUg ZnJvbSB0aGUgRlNNIGt0aHJlYWQuDQo+IC0gV1dBTiB3cml0ZXMgZ28gdGhyb3VnaCB3d2FuX3Bv cnRfb3BfdHgoKSB1bmRlciB0aGUgV1dBTiBjb3JlJ3MNCj4gICBvcHNfbG9jay4NCj4gLSBDb21w bGV0aW9ucyBuZXZlciB0b3VjaCB0eF9zZXEuDQo+IC0gbXRrX3BvcnRfY2hfZW5hYmxlKCkgcnVu cyBiZWZvcmUgdGhlIHBvcnQgaXMgb3BlbmVkLg0KPg0KPiBDb3VsZCB0aGlzIHJlcXVpcmVtZW50 IGJlIHdyaXR0ZW4gZG93biBuZWFyIG10a19wb3J0X3NlbmRfZGF0YSgpPw0KDQpXaWxsIGZpeCBp biB2MTEsIGJ1dCB0aGUgY29tbWVudCBzdGF0ZXMgYSBkaWZmZXJlbnQgcnVsZTogYWZ0ZXIgdGhl DQp0eF9zZXEgY2hhbmdlIGFib3ZlLCB3cml0ZXJzIG5vIGxvbmdlciB0b3VjaCB0eF9zZXEuICBJ dCBpcyBzdGFtcGVkIGFuZA0KYWR2YW5jZWQgb25seSBhdCBoYW5kLW9mZiBieSB0aGUgb25lIHRo cmVhZCBzZXJ2aW5nIHRoZSBwb3J0J3MgVFggcXVldWUsDQphbmQgdGhlIGNvbW1lbnQgb24gdHhf c2VxIHNheXMgc287IHRoZSByb2xsYmFjayBpcyBnb25lLg0KDQpZb3VyIHJlYXNvbmluZyBmb3Ig d2h5IHRoZSBvbGQgY29kZSB3YXMgc2FmZSBpcyBjb3JyZWN0Lg0KDQo+IG1zZy0+dmVyc2lvbiwg aGVhZF9wYXR0ZXJuLCB0YWlsX3BhdHRlcm4gYW5kIHBvcnRfY250IGFyZSBhbGwgcmVhZA0KPiBi ZWZvcmUgYW55dGhpbmcgY2hlY2tzIGRhdGFfbGVuID49IHNpemVvZigqbXNnKS4gQ2FuIGEgc2hv cnQNCj4gcG9ydC1lbnVtZXJhdGlvbiBtZXNzYWdlIGZyb20gdGhlIGRldmljZSBjYXVzZSBhbiBv dXQtb2YtYm91bmRzIHJlYWQgb2YNCj4gdXAgdG8gMTEgYnl0ZXMgaGVyZT8NCj4NCj4gQSBsYXRl ciBwYXRjaCBpbiB0aGlzIHNlcmllcyBhZGRzIHRoaXMgY2hlY2sgYmVmb3JlIHRoZSBoZWFkZXIg ZmllbGRzDQo+IGFyZSByZWFkOg0KPg0KPiAgICAgaWYgKGRhdGFfbGVuIDwgc2l6ZW9mKCptc2cp KQ0KPiAgICAgICAgIHJldHVybiAtRVBST1RPOw0KPg0KPiBUaGUgZnVuY3Rpb24gYWxzbyBoYXMg bm8gY2FsbGVyIGF0IHRoaXMgY29tbWl0LiBDb3VsZCB0aGF0IGNoZWNrIG1vdmUNCj4gaW50byB0 aGlzIHBhdGNoIGluc3RlYWQ/DQoNCldpbGwgZml4IGluIHYxMSAtIGEgZGF0YV9sZW4gPCBzaXpl b2YoKm1zZykgY2hlY2sgYmVmb3JlIHRoZSBoZWFkZXIgaXMgcmVhZCwNCmluIHRoaXMgcGF0Y2gu DQoNCj4gQnkgdGhpcyBwb2ludCBQT1JUX1NfRU5BQkxFIGlzIGFscmVhZHkgY2xlYXJlZC4gQSBm YWlsdXJlIGZyb20NCj4gbXRrX3BvcnRfY2hfZGlzYWJsZSgpIGlzIG9ubHkgbG9nZ2VkOyBpdCBj b3VsZCBiZSAtRU5PTUVNIGZyb20NCj4gX19kZXZfYWxsb2Nfc2tiKCksIC1FVElNRURPVVQgb3Ig LUVCVVNZLiBtdGtfcG9ydF90YmxfZGVzdHJveSgpIHRoZW4NCj4gZnJlZXMgdGhlIHBvcnQgYW55 d2F5Lg0KPg0KPiBJbiB0aGF0IGNhc2UsIGNhbiB0aGUgQ0xETUEgUlggcXVldWUgc3RpbGwgYmUg YXJtZWQsIHdpdGggcnhxLT5hcmcNCj4gcG9pbnRpbmcgYXQgdGhlIGZyZWVkIHBvcnQ/DQo+DQo+ IEF0IHRoaXMgY29tbWl0IG5vIHF1ZXVlIGNhbiBiZSBvcGVuZWQgYXQgYWxsLiBMYXRlciBpbiB0 aGUgc2VyaWVzIGFuDQo+IGFybWVkIHF1ZXVlIHNlZW1zIHRvIGJlIHRvcm4gZG93biBiZWZvcmUg dGhlIHBvcnQgaXMgZnJlZWQgb24gYm90aA0KPiBwYXRoczoNCj4NCj4gLSBPbiBGU01fU1RBVEVf T0ZGLCBtdGtfY3RybF9mc21fc3RhdGVfbGlzdGVuZXIoKSBkaXNhYmxlcyB0aGUgcG9ydHMNCj4g ICBhbmQgdGhlbiBjYWxscyBtdGtfcGNpZV9oaWZfZXhpdCgpIHdoaWxlIHRoZSBwb3J0cyBhcmUg c3RpbGwgYWxpdmUuDQo+IC0gT24gdW5iaW5kLCBtdGtfdHJhbnNfY3RybF9leGl0KCkgY2FsbHMg bXRrX3BjaWVfaGlmX2V4aXQoKSBiZWZvcmUNCj4gICBtdGtfY3RybF9leGl0KCkuDQo+DQo+IElz IHRoaXMgcGF0aCBtZWFudCB0byByZWx5IG9uIG10a19wY2llX2hpZl9leGl0KCk/DQoNClllcywg aXQgcmVsaWVzIG9uIG10a19wY2llX2hpZl9leGl0KCksIG9uIGJvdGggcGF0aHMsIGFuZCB5b3Vy IHRyYWNlIG9mDQp0aGVtIGlzIGNvcnJlY3QuDQoNCk5vIGNoYW5nZS4gIFRoZSByZXR1cm4gdmFs dWUgaXMgYWxyZWFkeSB0YWtlbiBhbmQgbG9nZ2VkLCB3aGljaCB3YXMgdGhlDQpjaGFuZ2UgZnJv bSBhbiBlYXJsaWVyIHJvdW5kOyBhY3Rpbmcgb24gaXQgaW5zdGVhZCB3b3VsZCBtZWFuIGFiYW5k b25pbmcNCnRlYXJkb3duIGFuZCBsZWF2aW5nIHRoZSBwb3J0IGFuZCBpdHMgcXVldWUgYWxpdmUg aW5kZWZpbml0ZWx5LCB3aGljaCBpcw0Kd29yc2UgdGhhbiBsb2dnaW5nLiAgQXMgd2l0aCB0aGUg cmF3IHBvaW50ZXIgcXVlc3Rpb24gYWJvdmUsIHRoZSBvcmRlcmluZw0KZ3VhcmFudGVlIGNvbWVz IGZyb20gdGhlIEZTTSBwYXRjaCwgc28gaXQgaXMgc3RhdGVkIGluIHRoaXMgcGF0Y2gncyBjb21t aXQNCm1lc3NhZ2UgcmF0aGVyIHRoYW4gYXMgYSBjb21tZW50IGRlc2NyaWJpbmcgY29kZSB0aGlz IGNvbW1pdCBkb2VzIG5vdCBoYXZlLg0KDQo+IFRoaXMgcmVhZHMgcHJpdi0+cmVjdl9jYiBhbmQg cHJpdi0+YXJnIHdpdGhvdXQgYSBsb2NrLg0KPiBtdGtfcG9ydF9pbnRlcm5hbF9yZWN2X3JlZ2lz dGVyKCkgc3RvcmVzIHRoZW0gd2l0aCBubyBvcmRlcmluZzoNCj4NCj4gICAgIHByaXYtPmFyZyA9 IGFyZzsNCj4gICAgIHByaXYtPnJlY3ZfY2IgPSBjYjsNCj4NCj4gbXRrX3BvcnRfY29tbW9uX2Ns b3NlKCkgY2xlYXJzIFBPUlRfU19PUEVOLCBidXQgaXQgZG9lcyBub3QgdW5yZWdpc3Rlcg0KPiB0 aGUgY2FsbGJhY2sgb3Igd2FpdCBmb3IgYW4gUlggY2FsbGJhY2sgYWxyZWFkeSBpbiBwcm9ncmVz cy4gQ291bGQgYQ0KPiBjbGllbnQgdGhhdCBmcmVlcyBhcmcgYWZ0ZXIgY2xvc2Ugc3RpbGwgYmUg Y2FsbGVkIGJhY2sgb24gZnJlZWQgbWVtb3J5Pw0KPiBDb3VsZCBpdCBzZWUgYSBjYiBhbmQgYXJn IHRoYXQgZG9uJ3QgbWF0Y2g/DQo+DQo+IEF0IHRoZSBlbmQgb2YgdGhlIHNlcmllcyB0aGUgb25s eSBpbnRlcm5hbCB1c2VyIGlzDQo+IG10a19mc21fY3RybF9jaF9zdGFydCgpLCBhbmQgaXQgYWx3 YXlzIHJlZ2lzdGVycyB0aGUgc2FtZSBoYW5kbGVyIHdpdGgNCj4gYXJnID0gZnNtLiBmc20gaXMg ZnJlZWQgaW4gbXRrX2ZzbV9leGl0KCksIGFmdGVyIG10a19wY2llX2hpZl9leGl0KCkgaGFzDQo+ IGRyYWluZWQgdGhlIENMRE1BIFJYIHdvcmtxdWV1ZSwgc28gdGhpcyBsb29rcyBsYXRlbnQuIFNo b3VsZCB0aGUgQVBJDQo+IHNwZWxsIG91dCB0aGVzZSBydWxlcywgb3IgZW5mb3JjZSB0aGVtLCBm b3IgZnV0dXJlIHVzZXJzPw0KDQpXaWxsIGZpeCBpbiB2MTEgLSB0aGUgY29udHJhY3Qgd2lsbCBi ZSBzcGVsbGVkIG91dCBhdA0KbXRrX3BvcnRfaW50ZXJuYWxfcmVjdl9yZWdpc3RlcigpOiB0aGUg Y2FsbGJhY2sgYW5kIGl0cyBhcmd1bWVudCBtdXN0IHN0YXkNCnZhbGlkIHVudGlsIHRoZSByZWNl aXZlIHBhdGggaGFzIGJlZW4gZHJhaW5lZCwgYW5kIGEgY2xpZW50IG11c3Qgbm90IGZyZWUNCnRo ZSBhcmd1bWVudCBvbiB0aGUgc3RyZW5ndGggb2YgY2xvc2UoKSBhbG9uZS4NCg0KPiBUaGUgUE9S VF9TX09QRU4gdGVzdCBhbmQgdGhlIHNldF9iaXQoKSBhcmUgc2VwYXJhdGUgc3RlcHMgd2l0aCBu byBsb2NrDQo+IGJldHdlZW4gdGhlbS4gVHdvIG90aGVyIGZ1bmN0aW9ucyBmb2xsb3cgdGhlIHNh bWUgcGF0dGVybjoNCj4NCj4gLSBtdGtfcG9ydF9pbnRlcm5hbF9jbG9zZSgpIHRlc3RzIFBPUlRf U19PUEVOLCB0aGVuIGNhbGxzDQo+ICAgbXRrX3BvcnRfY29tbW9uX2Nsb3NlKCkgYW5kIG10a19w b3J0X3B1dF9sb2NrZWQoKS4NCj4gLSBtdGtfcG9ydF9pbnRlcm5hbF9lbmFibGUoKSB0ZXN0cyBQ T1JUX1NfRU5BQkxFLCB0aGVuIGNhbGxzDQo+ICAgbXRrX3BvcnRfY2hfZW5hYmxlKCkuDQo+DQo+ IFdpdGggY29uY3VycmVudCBjYWxsZXJzLCBjb3VsZG4ndCBhIHBvcnQgYmUgb3BlbmVkIHR3aWNl LCBjbG9zZWQgdHdpY2UNCj4gKHR3byBrcmVmX3B1dCgpIGNhbGxzKSwgb3IgZW5hYmxlZCB0d2lj ZT8NCj4NCj4gTGF0ZXIgaW4gdGhlIHNlcmllcyB0aGUgY2FsbGVycyBzZWVtIHRvIGJlIHNlcmlh bGl6ZWQ6DQo+DQo+IC0gSW50ZXJuYWwgb3BlbiBhbmQgY2xvc2UgcnVuIG9ubHkgb24gdGhlIEZT TSBrdGhyZWFkLCBvciBhZnRlcg0KPiAgIGt0aHJlYWRfc3RvcCgpLg0KPiAtIEVuYWJsZSBhbmQg ZGlzYWJsZSBydW4gdW5kZXIgZnNtLT5ub3RpZmllcl9sb2NrIG9yIGR1cmluZyBzZXJpYWxpemVk DQo+ICAgdGVhcmRvd24uDQo+IC0gV1dBTiBvcGVuIGFuZCBjbG9zZSBhcmUgc2VyaWFsaXplZCBi eSB0aGUgV1dBTiBjb3JlJ3Mgb3BzX2xvY2sgYW5kIHRoZQ0KPiAgIGRyaXZlcidzIHdfbG9jay4N Cj4NCj4gV291bGQgdGVzdF9hbmRfc2V0X2JpdCgpIGJlIGEgc2ltcGxlIHdheSB0byBtYWtlIHRo aXMgaG9sZCBhbnl3YXk/DQoNCldpbGwgZml4IGluIHYxMSAtIHRlc3RfYW5kX3NldF9iaXQoKSBm b3Igb3BlbiBhbmQgZW5hYmxlLA0KdGVzdF9hbmRfY2xlYXJfYml0KCkgZm9yIGNsb3NlLg0KDQpT dWJqZWN0OiBSZTogW1BBVENIIHYxMCA1LzZdIG5ldDogd3dhbjogdDl4eDogQWRkIEZTTSB0aHJl YWQNCg0KbmV0ZGV2LWFpIHdyb3RlOg0KPiBXaGVuIHRoZSBkZXZpY2UgbWFya3MgYSBmZWF0dXJl IFJURlRfVFlQRV9NVVNUX1NVUFBPUlQgaW4gaXRzDQo+IGZlYXR1cmVfcXVlcnksIHRoaXMgY29w aWVzIHRoZSBkZXZpY2UncyB0eXBlL3ZlcnNpb24gYnl0ZSBiYWNrIHVuY2hhbmdlZA0KPiB3aXRo IGRhdGFfbGVuID0gMC4gTm90aGluZyBjaGVja3Mgd2hldGhlciB0aGlzIGRyaXZlciBpbXBsZW1l bnRzIHRoYXQNCj4gZmVhdHVyZSBJRCBvciB2ZXJzaW9uLg0KPg0KPiBDYW4gSFMzIHRlbGwgdGhl IGZpcm13YXJlIHRoYXQgdGhlIGhvc3Qgc3VwcG9ydHMgbWFuZGF0b3J5IGZlYXR1cmVzIGl0DQo+ IGhhcyBubyBoYW5kbGVyIGZvcj8NCj4NCj4gRm9yIGNvbXBhcmlzb24sIHQ3eHhfcHJlcGFyZV9k ZXZpY2VfcnRfZGF0YSgpIGluIHRoZSB0N3h4IGRyaXZlciBza2lwcw0KPiBNVVNUX0JFX1NVUFBP UlRFRCBmZWF0dXJlcyBpbnN0ZWFkIG9mIGFmZmlybWluZyB0aGVtLiBXaXRob3V0IHRoZQ0KPiBw cm90b2NvbCBzcGVjaWZpY2F0aW9uIGl0IGlzIGhhcmQgdG8gc2F5IHdoYXQgdGhlIGZpcm13YXJl IGRvZXMgd2l0aA0KPiB0aGlzIGFuc3dlciwgc28gdGhpcyBtYXkgYmUgaGFybWxlc3MuDQoNClRo aXMgaXNzdWUgaXMgcmVsYXRlZCB0byB0aGUgZmlybXdhcmUgYmVoYXZpb3Igb2YgdGhlIG1vZGVt Ow0Kd2UgYXJlIGN1cnJlbnRseSBpbnF1aXJpbmcgYWJvdXQgdGhpcyB3aXRoIE1USy4NCg0KPiBU aGlzIGNhbGxiYWNrIHJ1bnMgZnJvbSB0aGUgbWhjY2lmIHdvcmsgdW5kZXIgcHJpdi0+bWhjY2lm X2xvY2suIFRoZSBGU00NCj4ga3RocmVhZCBjaGFuZ2VzIHRoZSBzYW1lIGNoYW5uZWwgbWFza3Mg d2l0aG91dCB0aGF0IGxvY2ssIGluDQo+IG10a19mc21fZW50ZXJfb2ZmX3N0YXRlKCk6DQo+DQo+ IAltdGtfcGNpX21hc2tfZXh0X2V2dChtZGV2LCBERVZfRVZUX0QySF9CT09UX0ZMT1dfU1lOQyk7 DQo+IAlmb3IgKGhzX2lkID0gMDsgaHNfaWQgPCBIU19JRF9NQVg7IGhzX2lkKyspDQo+IAkJbXRr X3BjaV9tYXNrX2V4dF9ldnQobWRldiwgZnNtLT5oc19pbmZvW2hzX2lkXS5taGNjaWZfY2gpOw0K Pg0KPiBTdXBwb3NlIERFVl9STSBtYXNrcyB0aGVzZSB3aGlsZSB0aGlzIGhhbmRsZXIgaXMgcnVu bmluZy4gQ2FuIHRoZQ0KPiB1bmNvbmRpdGlvbmFsIHVubWFzayBhdCB0aGUgZXhpdCBsYWJlbCwg b3IgdGhlIEhTIGNoYW5uZWwgdW5tYXNrIGluDQo+IG10a19mc21faWRsZV9ldnRfaGFuZGxlcigp LCB1bmRvIHRoZSBPRkYgbWFza2luZz8NCj4NCj4gVGhlIGhzX2VyciBwYXRoIGluIG10a19mc21f c3RhcnR1cF9hY3QoKSBoYXMgYSByZWxhdGVkIHByb2JsZW06DQo+DQo+IGhzX2VycjoNCj4gCWZv ciAoaW50IGhzX2lkID0gMDsgaHNfaWQgPCBIU19JRF9NQVg7IGhzX2lkKyspDQo+IAkJbXRrX3Bj aV91bm1hc2tfZXh0X2V2dChtZGV2LCBmc20tPmhzX2luZm9baHNfaWRdLm1oY2NpZl9jaCk7DQo+ DQo+IFRoaXMgYWxzbyB1bm1hc2tzIHRoZSBvdGhlciBoYW5kc2hha2UncyBjaGFubmVsIHdoaWxl IGl0cyBIUzEgZXZlbnQgbWF5DQo+IHN0aWxsIGJlIHF1ZXVlZC4gVGhhdCBzZWVtcyB0byBicmVh ayB0aGUgImV4YWN0bHkgb25lIHNpZGUgb3ducyB0aGUNCj4gY2hhbm5lbCIgcnVsZSBkZXNjcmli ZWQgaW4gbXRrX2ZzbV9oczFfaGFuZGxlcigpLiBDb3VsZCBpdCBsZWFkIHRvIGENCj4gZHVwbGlj YXRlIEhTMSBldmVudCB0aGF0IHJlLXJ1bnMgdGhlIEJPT1RVUCBub3RpZmllcnMgYW5kIHNlbmRz IEhTMQ0KPiBhZ2Fpbj8NCj4NCj4gQWxzbywgZnNtLT5oc19kb25lX2ZsYWcgaXMgd3JpdHRlbiBi eSBtdGtfZnNtX2lkbGVfZXZ0X2hhbmRsZXIoKSBmcm9tDQo+IHRoZSBtaGNjaWYgd29yay4gVGhl IEZTTSB0aHJlYWQgcmVhZHMgaXQgdHdpY2Ugd2l0aCBwbGFpbiBhY2Nlc3Nlcy4NCg0KV2lsbCBm aXggaW4gdjExOiB0aGUgaHNfZXJyIHBhdGggd2lsbCB1bm1hc2sgb25seSB0aGUgaGFuZHNoYWtl IGNoYW5uZWxzDQp0aGF0IHN0YXJ0dXAgYWN0dWFsbHkgbWFza2VkIHJhdGhlciB0aGFuIGFsbCBv ZiB0aGVtLCBhbmQNCmZzbS0+aHNfZG9uZV9mbGFnIHdpbGwgYmUgcmVhZCBvbmNlIGludG8gYSBs b2NhbCBpbnN0ZWFkIG9mIHR3aWNlIHdpdGgNCnBsYWluIGFjY2Vzc2VzLg0KDQo+IElzIHRoaXMg Y29tbWVudCBhY2N1cmF0ZT8gVGhlIGNvbW1pdCBtZXNzYWdlIG1ha2VzIHRoZSBzYW1lIGNsYWlt Og0KPg0KPiAgICJkbWFfcG9vbF9kZXN0cm95KCkgcmVsZWFzZXMgdGhlIGJhY2tpbmcgcGFnZXMg ZXZlbiB3aGVuIGJsb2NrcyBhcmUNCj4gICBzdGlsbCBvdXRzdGFuZGluZyINCj4NCj4gbW0vZG1h cG9vbC5jOmRtYV9wb29sX2Rlc3Ryb3koKSBkb2VzIHRoaXMgd2hlbiBibG9ja3MgYXJlIHN0aWxs IGFjdGl2ZToNCj4NCj4gCWlmIChwb29sLT5ucl9hY3RpdmUpIHsNCj4gCQlkZXZfZXJyKHBvb2wt PmRldiwgIiVzICVzIGJ1c3lcbiIsIF9fZnVuY19fLCBwb29sLT5uYW1lKTsNCj4gCQlidXN5ID0g dHJ1ZTsNCj4gCX0NCj4NCj4gCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsICZw b29sLT5wYWdlX2xpc3QsIHBhZ2VfbGlzdCkgew0KPiAJCWlmICghYnVzeSkNCj4gCQkJZG1hX2Zy ZWVfY29oZXJlbnQocG9vbC0+ZGV2LCBwb29sLT5hbGxvY2F0aW9uLA0KPiAJCQkJCSAgcGFnZS0+ dmFkZHIsIHBhZ2UtPmRtYSk7DQo+DQo+IFNvIGEgYnVzeSBwb29sJ3MgY29oZXJlbnQgcGFnZXMg YXJlIG5ldmVyIHJldHVybmVkIHRvIHRoZSBhbGxvY2F0b3IuDQo+DQo+IFNraXBwaW5nIGRtYV9w b29sX2Rlc3Ryb3koKSB0aGVyZWZvcmUgcHJvdGVjdHMgbm90aGluZy4gSXQgbGVha3MgdGhlDQo+ IHN0cnVjdCBkbWFfcG9vbCBvYmplY3RzIGFuZCBsZWF2ZXMgdGhlbSBvbiBkZXYtPmRtYV9wb29s cywgd2hlcmUgdGhleQ0KPiBzdGF5IHZpc2libGUgaW4gdGhlIHBvb2xzIHN5c2ZzIGF0dHJpYnV0 ZSBhZnRlciB1bmJpbmQgYW5kIGFjcm9zcw0KPiByZWJpbmQuDQo+DQo+IENvdWxkIHRoZSBjb21t ZW50IGFuZCBjb21taXQgbWVzc2FnZSBiZSBjb3JyZWN0ZWQsIGFuZCBkbWFfcG9vbF9kZXN0cm95 KCkNCj4gYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseT8NCg0KV2lsbCBmaXggaW4gdjExOiBkbWFf cG9vbF9kZXN0cm95KCkgd2lsbCBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUNCnJp bmdfbGVha2VkIGJyYW5jaCBhcm91bmQgaXQgZ29lcyBhd2F5LCBhbG9uZyB3aXRoIHRoZSBjb21t ZW50IGFuZCB0aGUNCmNvbW1pdCBtZXNzYWdlIHBhcmFncmFwaCB0aGF0IGNsYWltZWQgdGhlIG9w cG9zaXRlLg0KDQo+IERvZXMgaXNfc3RvcHBpbmcgYWN0dWFsbHkga2VlcCB0aGUgcXVldWUgZnJv bSBiZWluZyByZXN0YXJ0ZWQgaGVyZT8NCj4NCj4gbXRrX2NsZG1hX3N0YXJ0X3hmZXIoKSwgZm9y IGFueSBxdWV1ZSBvbiB0aGlzIGRydl9pbmZvLCBjYWxscw0KPiBtdGtfY2xkbWFfaHdfcmVjb3Zl cnkoKSBiZWZvcmUgaXQgdGFrZXMgcmluZ19sb2NrIGFuZCBjaGVja3MNCj4gaXNfc3RvcHBpbmc6 DQo+DQo+IAlpZiAodW5saWtlbHkoIXZhbCkpIHsNCj4gCQlyZXQgPSBtdGtfY2xkbWFfaHdfcmVj b3ZlcnkoZHJ2X2luZm8sIHFubyk7DQo+IAkJLi4uDQo+IAl9DQo+IAlzcGluX2xvY2soJnR4cS0+ cmluZ19sb2NrKTsNCj4gCWlmICh1bmxpa2VseSh0eHEtPmlzX3N0b3BwaW5nKSkgew0KPg0KPiBt dGtfY2xkbWFfaHdfcmVjb3ZlcnkoKSBjYWxscyBtdGtfY2xkbWFfcmVhcm1fcXVldWVzKCkuIFN0 b3AgdGltZW91dHMgaW4NCj4gbXRrX2NsZG1hX2Nsb3NlKCkgLT4gbXRrX2NsZG1hX3R4cV9mcmVl KCkvbXRrX2NsZG1hX3J4cV9mcmVlKCkgY2FsbCBpdA0KPiB0b28uIG10a19jbGRtYV9yZWFybV9x dWV1ZXMoKSBsb29rcyBvbmx5IGF0IHR4X3N0YXJ0ZWQgYW5kIEhXTywgbmV2ZXIgYXQNCj4gaXNf c3RvcHBpbmc6DQo+DQo+IAlpZiAoUkVBRF9PTkNFKHR4cS0+dHhfc3RhcnRlZCkgJiYNCj4gCSAg ICAhKHJlcS0+Z3BkLT50eF9ncGQuZ3BkX2ZsYWdzICYgQ0xETUFfR1BEX0ZMQUdfSFdPKSkgew0K PiAJCS4uLg0KPiAJfSBlbHNlIHsNCj4gCQltdGtfY2xkbWFfc2V0dXBfc3RhcnRfYWRkcihkcnZf aW5mbywgRElSX1RYLCBpLA0KPiAJCQkJCSAgIHJlcS0+Z3BkX2RtYV9hZGRyKTsNCj4gCX0NCj4g CS4uLg0KPiAJaWYgKFJFQURfT05DRSh0eHEtPnR4X3N0YXJ0ZWQpKQ0KPiAJCW10a19jbGRtYV9z dGFydF9xdWV1ZShkcnZfaW5mbywgRElSX1RYLCBpKTsNCj4NCj4gU2F5IHRoZSB0cmIgdGhyZWFk IHJlYWNoZXMgdGhpcyBhZnRlciB0aGUgc3VjY2Vzc2Z1bCBzdG9wIGFib3ZlIGJ1dA0KPiBiZWZv cmUgdHhfc3RhcnRlZCBpcyBjbGVhcmVkLiBUaGUgZW5naW5lIGlzIHRoZW4gcmVzdGFydGVkIG9u IHRoaXMNCj4gcXVldWUuIG10a19jbGRtYV90eHFfZmx1c2goKSB0aGVuIGNsZWFycyBIV08sIGNh bGxzIGRtYV91bm1hcF9zaW5nbGUoKQ0KPiBvbiB0aGUgcGVuZGluZyBidWZmZXJzIGFuZCBjb21w bGV0ZXMgdGhlaXIgc2ticy4gQ2FuIHRoZSBkZXZpY2UgRE1BDQo+IGZyb20gdGhvc2UgdW5tYXBw ZWQgYnVmZmVycz8NCj4NCj4gSWYgdGhlIHN0b3AgYWJvdmUgZmFpbHMsIGlzX3N0b3BwaW5nIGFu ZCB0eF9zdGFydGVkIGJvdGggc3RheSBzZXQuIEENCj4gbGF0ZXIgcmVhcm0gd291bGQgdGhlbiBy ZXN0YXJ0IGEgcXVldWUgdGhhdCB0aGUgc3VibWl0IHBhdGgga2VlcHMNCj4gcmVqZWN0aW5nLg0K DQpXaWxsIGZpeCBpbiB2MTE6IG10a19jbGRtYV9yZWFybV9xdWV1ZXMoKSB3aWxsIHRlc3QgaXNf c3RvcHBpbmcgcGVyIHF1ZXVlDQphbmQgc2tpcCBhbnkgcXVldWUgdGhhdCBpcyBzdG9wcGluZywg c28gdGhlIGZsYWcgZ292ZXJucyByZWFybSBhcyB3ZWxsIGFzDQpzdWJtaXQuDQoNCllvdXIgcmVh ZGluZyBvZiB0aGUgb3JkZXIgaXMgcmlnaHQgLSBzdGFydF94ZmVyKCkgY2FsbHMgaHdfcmVjb3Zl cnkoKSwgYW5kDQp0aHJvdWdoIGl0IHJlYXJtX3F1ZXVlcygpLCBiZWZvcmUgaXQgdGFrZXMgcmlu Z19sb2NrIGFuZCB0ZXN0cw0KaXNfc3RvcHBpbmcsIGFuZCByZWFybV9xdWV1ZXMoKSBsb29rcyBv bmx5IGF0IHR4X3N0YXJ0ZWQgYW5kIEhXTy4gIFNvIHRoZQ0KZ3VhcmQgcnVucyBhZnRlciB0aGUg YWN0aW9uIGl0IGlzIG1lYW50IHRvIGd1YXJkLg0KDQo+IFRoaXMgcmVjb3ZlcnkgZGVwZW5kcyBv biBhIHNpbmdsZSByeF9kb25lX3dvcmsgcnVuIHJlYWNoaW5nIHRoZSByZXN0YXJ0Lg0KPiBtdGtf Y2xkbWFfcnhfZG9uZV93b3JrKCkgaGFzIGdvdG8gb3V0IGV4aXRzIGluc2lkZSBpdHMgR1BEIGxv b3A6DQo+IG10a19jbGRtYV9yZWxvYWRfcnhfc2tiKCkgZmFpbGluZyBvbiBhbiBlbXB0eSBzbG90 LCBhIEJELW1vZGUgcmVsb2FkDQo+IGZhaWx1cmUsIGFuZCBkbWFfbWFwcGluZ19lcnJvcigpIHdo ZW4gcmVjeWNsaW5nIHRoZSBidWZmZXIuIFRoZXNlIGV4aXRzDQo+IHNraXAgdGhlIG5lZWRfcmVz dGFydCBoYW5kbGluZzoNCj4NCj4gCWlmIChtdGtfY2xkbWFfcmVsb2FkX3J4X3NrYihtZGV2LCBy eHEsIHJlcSkpDQo+IAkJZ290byBvdXQ7DQoNCldpbGwgZml4LCBidXQgaW4gcGF0Y2ggMyByYXRo ZXIgdGhhbiBwYXRjaCA1OiB0aGUgaW4tbG9vcCBleGl0cyB3aWxsIGdvDQp0aHJvdWdoIHRoZSBu ZWVkX3Jlc3RhcnQgaGFuZGxpbmcgaW5zdGVhZCBvZiBwYXN0IGl0Lg0KDQpuZWVkX3Jlc3RhcnQg aXMgaW50cm9kdWNlZCBieSAibmV0OiB3d2FuOiB0OXh4OiBBZGQgY29udHJvbCBETUEgaW50ZXJm YWNlIiwNCmFuZCB0aGUgdGhyZWUgZXhpdHMgYW5kIHRoZSBwb3N0LWxvb3AgYmxvY2sgYXJlIGlk ZW50aWNhbCBpbiB0aGF0IGNvbW1pdA0KYW5kIGluIGJvdGggY29tbWl0cyBhZnRlciBpdCwgc28g dGhlIGRlZmVjdCBpcyBhbHJlYWR5IHRoZXJlIHdoZW4gdGhlDQpmdW5jdGlvbiBmaXJzdCBhcHBl YXJzIGFuZCBoYXMgdG8gYmUgZml4ZWQgYnkgYW1lbmRpbmcgdGhhdCBwYXRjaC4NCg0KPiBDYW4g Q0xETUEgd29yayBiZSBxdWV1ZWQgYWdhaW4gYWZ0ZXIgbXRrX2NsZG1hX3F1aWVzY2UoKSBoYXMg Zmx1c2hlZA0KPiBkcnZfaW5mby0+d3E/DQo+DQo+IFRoZSB0cmIgc2VydmljZSB0aHJlYWQga2Vl cHMgcnVubmluZyB1bnRpbCBtdGtfY3RybF90cmJfc3J2X2V4aXQoKSBzdG9wcw0KPiBpdCwgYW5k IGl0IGtlZXBzIGRyYWluaW5nIFRSQnMgdGhhdCBhcmUgYWxyZWFkeSBxdWV1ZWQuIFR3byBvZiB0 aG9zZQ0KPiBwYXRocyBjYWxsIHF1ZXVlX3dvcmsoZHJ2X2luZm8tPndxLCAmdHhxLT50eF9kb25l X3dvcmspIHRocm91Z2gNCj4gbXRrX2NsZG1hX3JlYXJtX3F1ZXVlcygpOg0KPg0KPiAgIG10a19j bGRtYV90eCgpLT5tdGtfY2xkbWFfc3RhcnRfeGZlcigpLT5tdGtfY2xkbWFfaHdfcmVjb3Zlcnko KQ0KPiAgICAgLT5tdGtfY2xkbWFfcmVhcm1fcXVldWVzKCkNCj4NCj4gICBtdGtfY2xkbWFfY2xv c2UoKS0+bXRrX2NsZG1hX3R4cV9mcmVlKCkgKHN0b3AgdGltZW91dCkNCj4gICAgIC0+bXRrX2Ns ZG1hX3JlYXJtX3F1ZXVlcygpDQo+DQo+IG10a19jbGRtYV9yZWFybV9xdWV1ZXMoKSBkb2VzIG5v dCBjaGVjayBkcnZfaW5mby0+cXVpZXNjZWQuIFRocm91Z2gNCj4gbXRrX2NsZG1hX2Rydl9pbml0 KCkgaXQgYWxzbyB3cml0ZXMgaW50X21hc2sgPSAwIGFnYWluLg0KPg0KPiBtdGtfY2xkbWFfdHhf ZG9uZV93b3JrKCkgbm93IGxvYWRzIHNydiBvbmNlIGF0IGVudHJ5LiBUaGVuDQo+IG10a19jdHJs X3RyYl9zcnZfZXhpdCgpIGRvZXM6DQo+DQo+IAlrdGhyZWFkX3N0b3Aoc3J2LT50cmJfdGhyZWFk KTsNCj4gCW10a19jdHJsX2Noc19mbHVzaChzcnYpOw0KPiAJLi4uDQo+IAlrZnJlZShzcnYpOw0K PiAJdHJhbnMtPnRyYl9zcnZbaV0gPSBOVUxMOw0KPg0KPiBBIHJlLXF1ZXVlZCB0eF9kb25lX3dv cmsgY2FuIGxvYWQgc3J2IGJlZm9yZSB0aGUgTlVMTCBzdG9yZSBhbmQgdGhlbiBydW46DQo+DQo+ IAlpZiAod2FzX3N0YXJ2ZWQgJiYgc3J2KQ0KPiAJCXdha2VfdXAoJnNydi0+dHJiX3dhaXRxKTsN Cj4NCj4gYWZ0ZXIga2ZyZWUoc3J2KS4gSXMgdGhhdCBhIHVzZS1hZnRlci1mcmVlPyBUaGUgd29y a3F1ZXVlIGlzIG9ubHkgZHJhaW5lZA0KPiBsYXRlciwgaW4gbXRrX2NsZG1hX2Rldl9leGl0KCku DQo+DQo+IFNlcGFyYXRlbHksIG10a19jbGRtYV9kcnZfcXVpZXNjZSgpIHVzZXMgZmx1c2hfd29y a3F1ZXVlKCkgcmF0aGVyIHRoYW4NCj4gZHJhaW5fd29ya3F1ZXVlKCkuIFdvdWxkIGFuIHJ4X2Rv bmVfd29yayBxdWV1ZWQgYnkgZXJyX3dvcmsgZHVyaW5nIHRoZQ0KPiBmbHVzaCBiZSBtaXNzZWQ/ DQo+DQo+IFRoZSBjb21taXQgbWVzc2FnZSBzYXlzICJvbmx5IHRoZW4gZG9lcyBpdCBqb2luIHRo ZSB0cmIgc2VydmljZSB0aHJlYWRzDQo+IGFuZCBsZXQgbXRrX2NsZG1hX2V4aXQoKSBmcmVlIHdo YXQgdGhleSBkZXJlZmVyZW5jZSIuIFdpdGggdGhlIHBhdGhzDQo+IGFib3ZlLCB0aGF0IGd1YXJh bnRlZSBkb2VzIG5vdCBzZWVtIHRvIGhvbGQuDQoNCldpbGwgZml4IGluIHYxMSwgYXQgdGhlIHBy b2R1Y2VyOiBtdGtfY2xkbWFfcmVhcm1fcXVldWVzKCkgd2lsbCBiYWlsIG91dA0Kd2hlbiB0aGUg ZGV2aWNlIGlzIHF1aWVzY2VkLCBhbmQgbXRrX2NsZG1hX2Rydl9xdWllc2NlKCkgd2lsbCB1c2UN CmRyYWluX3dvcmtxdWV1ZSgpIGluc3RlYWQgb2YgZmx1c2hfd29ya3F1ZXVlKCkuDQoNCkJvdGgg b2YgeW91ciBxdWVzdGlvbnMgYXJlIHllcy4gIFRoZSB3aW5kb3cgaXMgdGhhdCBxdWllc2NlIGZs dXNoZXMgdGhlDQp3b3JrcXVldWUgd2hpbGUgdGhlIHRyYiBzZXJ2aWNlIHRocmVhZCBpcyBzdGls bCBydW5uaW5nLCBzbyBhIFRSQiBpdCBkcmFpbnMNCmFmdGVyd2FyZHMgcmVhY2hlcyBzdGFydF94 ZmVyLCBod19yZWNvdmVyeSBhbmQgcmVhcm1fcXVldWVzLCB3aGljaCBxdWV1ZXMNCnR4X2RvbmVf d29yayB3aXRob3V0IGNvbnN1bHRpbmcgcXVpZXNjZWQ7IHRyYl9zcnZfZXhpdCgpIHRoZW4gZnJl ZXMgc3J2LA0KYW5kIHRoZSB3b3JrIHdha2VzIGEgcG9pbnRlciBpdCBzYW1wbGVkIHdoaWxlIGl0 IHdhcyBzdGlsbCBub24tTlVMTC4gIFRoZQ0KYCYmIHNydmAgdGVzdCBjYW5ub3QgaGVscCBmb3Ig dGhhdCByZWFzb24uICBBbmQgZmx1c2hfd29ya3F1ZXVlKCkgd2FpdHMNCm9ubHkgZm9yIHdvcmsg YWxyZWFkeSBxdWV1ZWQsIHNvIGVycl93b3JrIHF1ZXVlaW5nIHJ4X2RvbmVfd29yayBkdXJpbmcg dGhlDQpmbHVzaCBpcyBtaXNzZWQgLSBkcmFpbl93b3JrcXVldWUoKSBpcyB0aGUgcmlnaHQgY2Fs bCwgdGhvdWdoIG5vdA0Kc3VmZmljaWVudCBvbiBpdHMgb3duLCBzaW5jZSBub3RoaW5nIHN0b3Bz IHRoZSB0cmIgdGhyZWFkIHF1ZXVlaW5nIG1vcmUNCmFmdGVyd2FyZHMuICBIZW5jZSBib3RoIGhh bHZlcy4NCg0KU3ViamVjdDogUmU6IFtQQVRDSCB2MTAgNi82XSBuZXQ6IHd3YW46IHQ5eHg6IEFk ZCBBVCAmIE1CSU0gV1dBTiBwb3J0cw0KDQpuZXRkZXYtYWkgd3JvdGU6DQo+IENhbiBibG9ja2lu ZyB3cml0ZXMgZ3JvdyB0aGUgSElGIFRYIHNrYl9saXN0IHdpdGhvdXQgYm91bmQgaGVyZT8NCj4N Cj4gSW4gYmxvY2tpbmcgbW9kZSwgZm9yY2Vfc2VuZCBzdGFydHMgb3V0IHRydWUuIFRoYXQgbWVh bnMgZXZlbiB0aGUgZmlyc3QNCj4gcGFja2V0IHNraXBzIHRoZSBkZXB0aCBjaGVjayBpbiBtdGtf cGNpZV9oaWZfc3VibWl0X3NrYigpOg0KPg0KPiAJaWYgKG10a19xdWV1ZV9saXN0X2lzX2Z1bGwo dHJhbnMsIHF1ZSkgJiYgIWZvcmNlX3NlbmQpIHsNCj4gCQlyZXQgPSAtRUFHQUlOOw0KPiAJCWdv dG8gdW5sb2NrOw0KPiAJfQ0KPg0KPiBUaGlzIGRvZXNuJ3QgbWF0Y2ggdGhlIGNvbW1lbnQgYWJv dmUgTVRLX1BPUlRfTUFYX1RYX1BLVC4gSXQgYWxzbyBkb2Vzbid0DQo+IG1hdGNoIHRoZSBjb21t aXQgbWVzc2FnZSwgd2hpY2ggc2F5cyAiZXZlcnkgcGFja2V0IGFmdGVyIHRoZSBmaXJzdCBpcw0K PiBzdWJtaXR0ZWQgd2l0aCBmb3JjZV9zZW5kLCB3aGljaCBieXBhc3NlcyB0aGUgZGVwdGggY2hl Y2siLg0KPg0KPiBJbiBibG9ja2luZyBtb2RlLCB0aGUgb25seSB0aHJvdHRsZSBsZWZ0IGlzIHRo ZQ0KPiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgpIGluIG10a19wb3J0X3NlbmRf ZGF0YSgpLiBJZiBhIHNpZ25hbCBpcw0KPiBwZW5kaW5nLCBpdCByZXR1cm5zIC1FUkVTVEFSVFNZ UyByaWdodCBhd2F5LCBhbmQgdGhhdCBnZXRzIG1hcHBlZCB0bw0KPiAtRUlOVFIuDQo+DQo+IFRo ZSBsb29wIGFib3ZlIHRyZWF0cyAtRUlOVFIgYXMgYWNjZXB0ZWQgYW5kIGtlZXBzIGdvaW5nLiBT byBhbGwgdGhlDQo+IHJlbWFpbmluZyBwYWNrZXRzICh1cCB0byBNVEtfUE9SVF9NQVhfVFhfUEtU KSBhcmUgZm9yY2Utc3VibWl0dGVkIHdpdGhvdXQNCj4gd2FpdGluZywgYW5kIHRoZSB3cml0ZSBy ZXBvcnRzIHN1Y2Nlc3MuDQo+DQo+IEJsb2NraW5nIG1vZGUgbmV2ZXIgY2FsbHMgbXRrX3BvcnRf d3dhbl90eF9wYXVzZSgpLCBzbyB3d2FuX3dhaXRfdHgoKSBuZXZlcg0KPiBibG9ja3MgdGhlIG5l eHQgd3JpdGUoKSBlaXRoZXIuIEEgd3JpdGVyIHRoYXQga2VlcHMgZ2V0dGluZyBzaWduYWxzIGNv dWxkDQo+IGFkZCB1cCB0byAxNiBza2JzIG9mIGFib3V0IDMuNUsgZWFjaCBwZXIgd3JpdGUoKSBj YWxsLiBGb3IgZXhhbXBsZSwgYW5vdGhlcg0KPiB0aHJlYWQgY291bGQgY2FsbCB0Z2tpbGwoKSBp biBhIGxvb3AsIG9yIGEgZmFzdCBpdGltZXIgd2l0aCBhIGhhbmRsZXIgY291bGQNCj4gYmUgcnVu bmluZy4NCj4NCj4gV2hlbiBtdGtfY2xkbWFfc3VibWl0X3R4KCkgcmV0dXJucyAtRUFHQUlOIGZv ciBhIGZ1bGwgR1BEIHJpbmcsIHRoZSBUWA0KPiBkaXNwYXRjaCBpbiB0aGUgVFJCIHNlcnZpY2Ug bGVhdmVzIHRoZSBza2Igb24gc2tiX2xpc3QuIElmIHRoZSBtb2RlbSBkcmFpbnMNCj4gc2xvd2x5 IG9yIHN0YWxscywgZG9lcyBhbnl0aGluZyBzdG9wIHRoYXQgbGlzdCBmcm9tIGdyb3dpbmcgdW50 aWwgbWVtb3J5DQo+IHJ1bnMgb3V0PyBUaGVzZSBza2JzIGNvbWUgZnJvbSBfX2Rldl9hbGxvY19z a2IoR0ZQX0tFUk5FTCkgYW5kIGFyZSBub3QNCj4gY2hhcmdlZCB0byBhIG1lbWNnLg0KPg0KPiBO b24tYmxvY2tpbmcgd3JpdGVzIGxvb2sgYm91bmRlZCwgYmVjYXVzZSB0aGVpciBmaXJzdCBwYWNr ZXQgaXMgZGVwdGgNCj4gY2hlY2tlZC4NCj4NCj4gV291bGQgb25lIG9mIHRoZXNlIHdvcmsgaW5z dGVhZD8NCj4NCj4gLSBkZXB0aCBjaGVjayB0aGUgZmlyc3QgcGFja2V0IGluIGJsb2NraW5nIG1v ZGUgdG9vDQo+IC0gc3RvcCBzdWJtaXR0aW5nIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlIG9uY2Ug LUVJTlRSIGlzIHNlZW4NCj4gLSBhZGQgYSBoYXJkIGNhcCBpbiB0aGUgSElGIHRoYXQgYXBwbGll cyBldmVuIHdpdGggZm9yY2Vfc2VuZA0KDQpXaWxsIGZpeCBpbiB2MTEsIHdpdGggdGhlIGZpcnN0 IG9mIHRob3NlIHBsdXMgYSB3YWl0OiB0aGUgZmlyc3QgcGFja2V0IGdldHMNCmRlcHRoIGNoZWNr ZWQgYWdhaW4sIGFuZCBpbiBibG9ja2luZyBtb2RlIHRoZSB3cml0ZSB3YWl0cyBmb3IgSElGIHF1 ZXVlDQpzcGFjZSBiZWZvcmUgaXQgc3RhcnRzIHN1Ym1pdHRpbmcgaW5zdGVhZCBvZiBieXBhc3Np bmcgdGhlIGNoZWNrLiAgVGhlDQpjb21tZW50IGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgdGhlbiBt YXRjaCB0aGUgY29kZSBhcyB0aGV5IGFyZSB3cml0dGVuLg0KDQpUaGFua3MsDQpKYWNrDQoNCnB3 LWJvdDogY3I=