From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Icenowy Zheng To: Maxime Ripard In-Reply-To: <20170222200947.3ikrhvv76ymfu5tv@lukather> References: <20170222152310.3719-5-icenowy@aosc.xyz> <20170222200947.3ikrhvv76ymfu5tv@lukather> Subject: Re: [PATCH 4/8] drm/sun4i: add support for sun8i DE2 mixers and display engines MIME-Version: 1.0 Message-Id: <3557471487795322@web2j.yandex.ru> Date: Thu, 23 Feb 2017 04:28:42 +0800 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jean-Francois Moine , Jernej Skrabec , "devicetree@vger.kernel.org" , David Airlie , "linux-sunxi@googlegroups.com" , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Chen-Yu Tsai , Rob Herring , "linux-clk@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="utf-8" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+mturquette=baylibre.com@lists.infradead.org List-ID: CgoyMy4wMi4yMDE3LCAwNDowOSwgIk1heGltZSBSaXBhcmQiIDxtYXhpbWUucmlwYXJkQGZyZWUt ZWxlY3Ryb25zLmNvbT46Cj4gSGksCj4KPiBPbiBXZWQsIEZlYiAyMiwgMjAxNyBhdCAxMToyMzow NlBNICswODAwLCBJY2Vub3d5IFpoZW5nIHdyb3RlOgo+PiDCoEFsbHdpbm5lciBoYXZlIGEgbmV3 ICJEaXNwbGF5IEVuZ2luZSAyLjAiIGluIHRoZXJlIG5ldyBTb0NzLCB3aGljaCBjb21lcwo+PiDC oGluIGEgbmV3ICJEaXNwbGF5IEVuZ2luZSIgKG1peGVycyBpbnN0ZWFkIG9mIG9sZCBiYWNrZW5k cyBhbmQKPj4gwqBmcm9udGVuZHMpLgo+Pgo+PiDCoEFkZCBzdXBwb3J0IGZvciB0aGUgbWl4ZXIg b24gQWxsd2lubmVyIFYzcyBTb0M7IGl0J3MgdGhlIHNpbXBsZXN0IG9uZS4KPj4KPj4gwqBTaWdu ZWQtb2ZmLWJ5OiBJY2Vub3d5IFpoZW5nIDxpY2Vub3d5QGFvc2MueHl6Pgo+PiDCoC0tLQo+PiDC oMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tjb25maWcgfCA4ICsKPj4gwqDCoGRyaXZlcnMvZ3B1 L2RybS9zdW40aS9NYWtlZmlsZSB8IDEgKwo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1 bjRpX2NydGMuYyB8IDYgKy0KPj4gwqDCoGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYu YyB8IDM4ICsrKy0KPj4gwqDCoGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYuaCB8IDEg Kwo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMgfCA5MiArKysrKyst LQo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmggfCAxICsKPj4gwqDC oGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW44aV9taXhlci5jIHwgNDE3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhp X21peGVyLmggfCAxMzMgKysrKysrKysrKysrCj4+IMKgwqA5IGZpbGVzIGNoYW5nZWQsIDY3NCBp bnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKPj4gwqDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuOGlfbWl4ZXIuYwo+PiDCoMKgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW44aV9taXhlci5oCj4+Cj4+IMKgZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRp L0tjb25maWcKPj4gwqBpbmRleCBhNGIzNTdkYjg4NTYuLjhkZjQwMWZmZjE0NSAxMDA2NDQKPj4g wqAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZwo+PiDCoCsrKyBiL2RyaXZlcnMv Z3B1L2RybS9zdW40aS9LY29uZmlnCj4+IMKgQEAgLTEyLDMgKzEyLDExIEBAIGNvbmZpZyBEUk1f U1VONEkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlv dSBoYXZlIGFuIEFsbHdpbm5lciBTb0Mgd2l0aCBhCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oERpc3BsYXkgRW5naW5lLiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxs ZWQKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VuNGktZHJtLgo+PiDCoCsKPj4gwqArY29u ZmlnIERSTV9TVU40SV9ERTIKPj4gwqArIGJvb2wgIlN1cHBvcnQgRGlzcGxheSBFbmdpbmUgMi4w Igo+PiDCoCsgZGVwZW5kcyBvbiBEUk1fU1VONEkKPj4gwqArIGRlZmF1bHQgTUFDSF9TVU44SQo+ PiDCoCsgaGVscAo+PiDCoCsgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFuIEFsbHdp bm5lciBTb0Mgd2l0aCBhCj4+IMKgKyAiRGlzcGxheSBFbmdpbmUgMi4wIi4KPj4gwqBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3N1 bjRpL01ha2VmaWxlCj4+IMKgaW5kZXggZDYyNWE4MmE2ZTVmLi44OTBlNmU1MGRmZWUgMTAwNjQ0 Cj4+IMKgLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlCj4+IMKgKysrIGIvZHJp dmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlCj4+IMKgQEAgLTksNSArOSw2IEBAIHN1bjRpLXRj b24teSArPSBzdW40aV9kb3RjbG9jay5vCj4+Cj4+IMKgwqBvYmotJChDT05GSUdfRFJNX1NVTjRJ KSArPSBzdW40aS1kcm0ubyBzdW40aS10Y29uLm8KPj4gwqDCoG9iai0kKENPTkZJR19EUk1fU1VO NEkpICs9IHN1bjRpX2JhY2tlbmQubwo+PiDCoCtvYmotJChDT05GSUdfRFJNX1NVTjRJKSArPSBz dW44aV9taXhlci5vCj4+IMKgwqBvYmotJChDT05GSUdfRFJNX1NVTjRJKSArPSBzdW42aV9kcmMu bwo+PiDCoMKgb2JqLSQoQ09ORklHX0RSTV9TVU40SSkgKz0gc3VuNGlfdHYubwo+PiDCoGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jIGIvZHJpdmVycy9ncHUv ZHJtL3N1bjRpL3N1bjRpX2NydGMuYwo+PiDCoGluZGV4IDRhMTkyMjEwNTc0Zi4uNGQyMjI4NDU0 NzI2IDEwMDY0NAo+PiDCoC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9jcnRjLmMK Pj4gwqArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jCj4+IMKgQEAgLTI1 LDYgKzI1LDcgQEAKPj4gwqDCoCNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPj4KPj4gwqDC oCNpbmNsdWRlICJzdW40aV9iYWNrZW5kLmgiCj4+IMKgKyNpbmNsdWRlICJzdW44aV9taXhlci5o Igo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2NydGMuaCIKPj4gwqDCoCNpbmNsdWRlICJzdW40aV9k cnYuaCIKPj4gwqDCoCNpbmNsdWRlICJzdW40aV90Y29uLmgiCj4+IMKgQEAgLTU1LDcgKzU2LDEw IEBAIHN0YXRpYyB2b2lkIHN1bjRpX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVCVUdfRFJJVkVSKCJDb21taXR0 aW5nIHBsYW5lIGNoYW5nZXNcbiIpOwo+Pgo+PiDCoC0gc3VuNGlfYmFja2VuZF9jb21taXQoZHJ2 LT5iYWNrZW5kKTsKPj4gwqArIGlmIChkcnYtPmJhY2tlbmQpCj4+IMKgKyBzdW40aV9iYWNrZW5k X2NvbW1pdChkcnYtPmJhY2tlbmQpOwo+PiDCoCsgZWxzZSBpZiAoZHJ2LT5taXhlcikKPj4gwqAr IHN1bjhpX21peGVyX2NvbW1pdChkcnYtPm1peGVyKTsKPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoZXZlbnQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3J0 Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPj4gwqBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjRpX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2Rydi5jCj4+ IMKgaW5kZXggNGNlNjY1MzQ5ZjZiLi41OGFmMzhmNWU4MzMgMTAwNjQ0Cj4+IMKgLS0tIGEvZHJp dmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2Rydi5jCj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjRpX2Rydi5jCj4+IMKgQEAgLTIwLDEyICsyMCwxNyBAQAo+PiDCoMKgI2luY2x1 ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4+IMKgwqAjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ Pgo+PiDCoCsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+IMKgKwo+PiDCoMKgI2luY2x1 ZGUgInN1bjRpX2NydGMuaCIKPj4gwqDCoCNpbmNsdWRlICJzdW40aV9kcnYuaCIKPj4gwqDCoCNp bmNsdWRlICJzdW40aV9mcmFtZWJ1ZmZlci5oIgo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2xheWVy LmgiCj4+IMKgwqAjaW5jbHVkZSAic3VuNGlfdGNvbi5oIgo+Pgo+PiDCoCsjZGVmaW5lIERFX1ZF Ul9ERSAwCj4+IMKgKyNkZWZpbmUgREVfVkVSX0RFMiAxCj4+IMKgKwo+PiDCoMKgc3RhdGljIGlu dCBzdW40aV9kcnZfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25l ZCBpbnQgcGlwZSkKPj4gwqDCoHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3VuNGlf ZHJ2ICpkcnYgPSBkcm0tPmRldl9wcml2YXRlOwo+PiDCoEBAIC0xMTcsNyArMTIyLDkgQEAgc3Rh dGljIGludCBzdW40aV9kcnZfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+IMKgwqB7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqBzdHJ1Y3Qgc3VuNGlfZHJ2ICpkcnY7Cj4+IMKgLSBpbnQgcmV0Owo+PiDCoCsgaW50 IHJldCwgZGVfdmVyOwo+PiDCoCsKPj4gwqArIGRlX3ZlciA9IChpbnQpb2ZfZGV2aWNlX2dldF9t YXRjaF9kYXRhKGRldik7Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtID0gZHJtX2Rldl9h bGxvYygmc3VuNGlfZHJ2X2RyaXZlciwgZGV2KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo SVNfRVJSKGRybSkpCj4+IMKgQEAgLTE0MCw3ICsxNDcsMTAgQEAgc3RhdGljIGludCBzdW40aV9k cnZfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+Pgo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENyZWF0ZSBvdXIgbGF5ZXJzICovCj4+IMKgLSBkcnYt PmxheWVycyA9IHN1bjRpX2xheWVyc19pbml0KGRybSk7Cj4+IMKgKyBpZiAoZGVfdmVyID09IERF X1ZFUl9ERTIpCj4+IMKgKyBkcnYtPmxheWVycyA9IHN1bjhpX2xheWVyc19pbml0KGRybSk7Cj4+ IMKgKyBlbHNlCj4+IMKgKyBkcnYtPmxheWVycyA9IHN1bjRpX2xheWVyc19pbml0KGRybSk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkcnYtPmxheWVycykpIHsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihkcm0tPmRldiwgIkNvdWxkbid0 IGNyZWF0ZSB0aGUgcGxhbmVzXG4iKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0ID0gUFRSX0VSUihkcnYtPmxheWVycyk7Cj4+IMKgQEAgLTMyMywxMCArMzMzLDI2 IEBAIHN0YXRpYyBpbnQgc3VuNGlfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiDCoMKgfQo+Pgo+PiDCoMKgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg c3VuNGlfZHJ2X29mX3RhYmxlW10gPSB7Cj4+IMKgLSB7IC5jb21wYXRpYmxlID0gImFsbHdpbm5l cixzdW41aS1hMTMtZGlzcGxheS1lbmdpbmUiIH0sCj4+IMKgLSB7IC5jb21wYXRpYmxlID0gImFs bHdpbm5lcixzdW42aS1hMzEtZGlzcGxheS1lbmdpbmUiIH0sCj4+IMKgLSB7IC5jb21wYXRpYmxl ID0gImFsbHdpbm5lcixzdW42aS1hMzFzLWRpc3BsYXktZW5naW5lIiB9LAo+PiDCoC0geyAuY29t cGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGktYTMzLWRpc3BsYXktZW5naW5lIiB9LAo+PiDCoCsg ewo+PiDCoCsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1kaXNwbGF5LWVuZ2lu ZSIsCj4+IMKgKyAuZGF0YSA9ICh2b2lkICopREVfVkVSX0RFLAo+PiDCoCsgfSwKPj4gwqArIHsK Pj4gwqArIC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42aS1hMzEtZGlzcGxheS1lbmdpbmUi LAo+PiDCoCsgLmRhdGEgPSAodm9pZCAqKURFX1ZFUl9ERSwKPj4gwqArIH0sCj4+IMKgKyB7Cj4+ IMKgKyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxcy1kaXNwbGF5LWVuZ2luZSIs Cj4+IMKgKyAuZGF0YSA9ICh2b2lkICopREVfVkVSX0RFLAo+PiDCoCsgfSwKPj4gwqArIHsKPj4g wqArIC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW44aS1hMzMtZGlzcGxheS1lbmdpbmUiLAo+ PiDCoCsgLmRhdGEgPSAodm9pZCAqKURFX1ZFUl9ERSwKPj4gwqArIH0sCj4+IMKgKyB7Cj4+IMKg KyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGktdjNzLWRpc3BsYXktZW5naW5lIiwKPj4g wqArIC5kYXRhID0gKHZvaWQgKilERV9WRVJfREUyLAo+PiDCoCsgfSwKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqB7IH0KPj4gwqDCoH07Cj4+IMKgwqBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40 aV9kcnZfb2ZfdGFibGUpOwo+PiDCoGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkv c3VuNGlfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfZHJ2LmgKPj4gwqBpbmRl eCA1OTczNTNlYWI3MjguLmNmMWRhOTViODViZCAxMDA2NDQKPj4gwqAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vc3VuNGkvc3VuNGlfZHJ2LmgKPj4gwqArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkv c3VuNGlfZHJ2LmgKPj4gwqBAQCAtMTgsNiArMTgsNyBAQAo+Pgo+PiDCoMKgc3RydWN0IHN1bjRp X2RydiB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHN1bjRpX2JhY2tlbmQgKmJhY2tl bmQ7Cj4+IMKgKyBzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyOwo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBzdW40aV9jcnRjICpjcnRjOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBzdW40aV90Y29uICp0Y29uOwo+Pgo+PiDCoGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v c3VuNGkvc3VuNGlfbGF5ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sYXllci5j Cj4+IMKgaW5kZXggNWQ1M2M5NzdiY2E1Li42ZGNkYWMzOGFiNjkgMTAwNjQ0Cj4+IMKgLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMKPj4gwqArKysgYi9kcml2ZXJzL2dw dS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuYwo+PiDCoEBAIC0xNiw1MiArMTYsNjYgQEAKPj4gwqDC oCNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+Pgo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2JhY2tlbmQu aCIKPj4gwqArI2luY2x1ZGUgInN1bjhpX21peGVyLmgiCj4+IMKgwqAjaW5jbHVkZSAic3VuNGlf ZHJ2LmgiCj4+IMKgwqAjaW5jbHVkZSAic3VuNGlfbGF5ZXIuaCIKPj4KPj4gwqDCoHN0cnVjdCBz dW40aV9wbGFuZV9kZXNjIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVu dW0gZHJtX3BsYW5lX3R5cGUgdHlwZTsKPj4gwqArIC8qIFBpcGUgaXMgbm90IHVzZWQgaW4gc3Vu OGktbWl4ZXIgKi8KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHU4IHBpcGU7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50MzJfdCAqZm9y bWF0czsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IG5mb3Jt YXRzOwo+PiDCoMKgfTsKPj4KPj4gwqAtc3RhdGljIGludCBzdW40aV9iYWNrZW5kX2xheWVyX2F0 b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gwqArc3RhdGljIGludCBzdW40 aV9sYXllcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUp Cj4+IMKgwqB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+IMKgwqB9Cj4+Cj4+ IMKgLXN0YXRpYyB2b2lkIHN1bjRpX2JhY2tlbmRfbGF5ZXJfYXRvbWljX2Rpc2FibGUoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCj4+IMKgK3N0YXRpYyB2b2lkIHN1bjRpX2xheWVyX2F0b21pY19k aXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKPj4g wqDCoHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3VuNGlfbGF5ZXIgKmxheWVyID0g cGxhbmVfdG9fc3VuNGlfbGF5ZXIocGxhbmUpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBzdW40aV9kcnYgKmRydiA9IGxheWVyLT5kcnY7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IHN1bjRpX2JhY2tlbmQgKmJhY2tlbmQgPSBkcnYtPmJhY2tlbmQ7Cj4+IMKgKyBzdHJ1Y3Qg c3VuOGlfbWl4ZXIgKm1peGVyID0gZHJ2LT5taXhlcjsKPj4KPj4gwqAtIHN1bjRpX2JhY2tlbmRf bGF5ZXJfZW5hYmxlKGJhY2tlbmQsIGxheWVyLT5pZCwgZmFsc2UpOwo+PiDCoCsgaWYgKGJhY2tl bmQpCj4+IMKgKyBzdW40aV9iYWNrZW5kX2xheWVyX2VuYWJsZShiYWNrZW5kLCBsYXllci0+aWQs IGZhbHNlKTsKPj4gwqArIGVsc2UgaWYgKG1peGVyKQo+PiDCoCsgc3VuOGlfbWl4ZXJfbGF5ZXJf ZW5hYmxlKG1peGVyLCBsYXllci0+aWQsIGZhbHNlKTsKPj4gwqDCoH0KPgo+IEknbSBub3Qgc3Vy ZSBpdCBtYWtlcyBzZW5zZSB0byByZXVzZSB0aGF0IHBhcnQuIFlvdSBjYW4ganVzdCBjcmVhdGUg YQo+IG5ldyBwbGFuZSBkcml2ZXIgZW50aXJlbHkuCj4KPj4gwqAtc3RhdGljIHZvaWQgc3VuNGlf YmFja2VuZF9sYXllcl9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiDC oCtzdGF0aWMgdm9pZCBzdW40aV9sYXllcl9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4+IMKgwqB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHN1bjRpX2xheWVyICpsYXllciA9IHBsYW5lX3RvX3N1bjRpX2xheWVyKHBsYW5l KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3VuNGlfZHJ2ICpkcnYgPSBsYXllci0+ ZHJ2Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBzdW40aV9iYWNrZW5kICpiYWNrZW5k ID0gZHJ2LT5iYWNrZW5kOwo+PiDCoC0KPj4gwqAtIHN1bjRpX2JhY2tlbmRfdXBkYXRlX2xheWVy X2Nvb3JkKGJhY2tlbmQsIGxheWVyLT5pZCwgcGxhbmUpOwo+PiDCoC0gc3VuNGlfYmFja2VuZF91 cGRhdGVfbGF5ZXJfZm9ybWF0cyhiYWNrZW5kLCBsYXllci0+aWQsIHBsYW5lKTsKPj4gwqAtIHN1 bjRpX2JhY2tlbmRfdXBkYXRlX2xheWVyX2J1ZmZlcihiYWNrZW5kLCBsYXllci0+aWQsIHBsYW5l KTsKPj4gwqAtIHN1bjRpX2JhY2tlbmRfbGF5ZXJfZW5hYmxlKGJhY2tlbmQsIGxheWVyLT5pZCwg dHJ1ZSk7Cj4+IMKgKyBzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyID0gZHJ2LT5taXhlcjsKPj4g wqArCj4+IMKgKyBpZiAoYmFja2VuZCkgewo+PiDCoCsgc3VuNGlfYmFja2VuZF91cGRhdGVfbGF5 ZXJfY29vcmQoYmFja2VuZCwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKgKyBzdW40aV9iYWNrZW5k X3VwZGF0ZV9sYXllcl9mb3JtYXRzKGJhY2tlbmQsIGxheWVyLT5pZCwgcGxhbmUpOwo+PiDCoCsg c3VuNGlfYmFja2VuZF91cGRhdGVfbGF5ZXJfYnVmZmVyKGJhY2tlbmQsIGxheWVyLT5pZCwgcGxh bmUpOwo+PiDCoCsgc3VuNGlfYmFja2VuZF9sYXllcl9lbmFibGUoYmFja2VuZCwgbGF5ZXItPmlk LCB0cnVlKTsKPj4gwqArIH0gZWxzZSBpZiAobWl4ZXIpIHsKPj4gwqArIHN1bjhpX21peGVyX3Vw ZGF0ZV9sYXllcl9jb29yZChtaXhlciwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKgKyBzdW44aV9t aXhlcl91cGRhdGVfbGF5ZXJfZm9ybWF0cyhtaXhlciwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKg KyBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfYnVmZmVyKG1peGVyLCBsYXllci0+aWQsIHBsYW5l KTsKPj4gwqArIHN1bjhpX21peGVyX2xheWVyX2VuYWJsZShtaXhlciwgbGF5ZXItPmlkLCB0cnVl KTsKPj4gwqArIH0KPj4gwqDCoH0KPj4KPj4gwqAtc3RhdGljIHN0cnVjdCBkcm1fcGxhbmVfaGVs cGVyX2Z1bmNzIHN1bjRpX2JhY2tlbmRfbGF5ZXJfaGVscGVyX2Z1bmNzID0gewo+PiDCoC0gLmF0 b21pY19jaGVjayA9IHN1bjRpX2JhY2tlbmRfbGF5ZXJfYXRvbWljX2NoZWNrLAo+PiDCoC0gLmF0 b21pY19kaXNhYmxlID0gc3VuNGlfYmFja2VuZF9sYXllcl9hdG9taWNfZGlzYWJsZSwKPj4gwqAt IC5hdG9taWNfdXBkYXRlID0gc3VuNGlfYmFja2VuZF9sYXllcl9hdG9taWNfdXBkYXRlLAo+PiDC oCtzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mgc3VuNGlfbGF5ZXJfaGVscGVy X2Z1bmNzID0gewo+PiDCoCsgLmF0b21pY19jaGVjayA9IHN1bjRpX2xheWVyX2F0b21pY19jaGVj aywKPj4gwqArIC5hdG9taWNfZGlzYWJsZSA9IHN1bjRpX2xheWVyX2F0b21pY19kaXNhYmxlLAo+ PiDCoCsgLmF0b21pY191cGRhdGUgPSBzdW40aV9sYXllcl9hdG9taWNfdXBkYXRlLAo+PiDCoMKg fTsKPj4KPj4gwqAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mgc3VuNGlfYmFj a2VuZF9sYXllcl9mdW5jcyA9IHsKPj4gwqArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf ZnVuY3Mgc3VuNGlfbGF5ZXJfZnVuY3MgPSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgLmF0b21p Y19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAu ZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAo+PiDCoEBAIC04OCw2ICsxMDIsMTIgQEAgc3Rh dGljIGNvbnN0IHVpbnQzMl90IHN1bjRpX2JhY2tlbmRfbGF5ZXJfZm9ybWF0c19vdmVybGF5W10g PSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPj4gwqDCoH07 Cj4+Cj4+IMKgK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzdW44aV9taXhlcl9sYXllcl9mb3JtYXRz W10gPSB7Cj4+IMKgKyBEUk1fRk9STUFUX0FSR0I4ODg4LAo+PiDCoCsgRFJNX0ZPUk1BVF9SR0I4 ODgsCj4+IMKgKyBEUk1fRk9STUFUX1hSR0I4ODg4LAo+PiDCoCt9Owo+PiDCoCsKPj4gwqDCoHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuNGlfcGxhbmVfZGVzYyBzdW40aV9iYWNrZW5kX3BsYW5lc1td ID0gewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLnR5cGUgPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZLAo+PiDCoEBAIC0xMDMs NiArMTIzLDE5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuNGlfcGxhbmVfZGVzYyBzdW40aV9i YWNrZW5kX3BsYW5lc1tdID0gewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoH0sCj4+IMKgwqB9Owo+ Pgo+PiDCoCtzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjRpX3BsYW5lX2Rlc2Mgc3VuOGlfbWl4ZXJf cGxhbmVzW10gPSB7Cj4+IMKgKyB7Cj4+IMKgKyAudHlwZSA9IERSTV9QTEFORV9UWVBFX1BSSU1B UlksCj4+IMKgKyAuZm9ybWF0cyA9IHN1bjhpX21peGVyX2xheWVyX2Zvcm1hdHMsCj4+IMKgKyAu bmZvcm1hdHMgPSBBUlJBWV9TSVpFKHN1bjhpX21peGVyX2xheWVyX2Zvcm1hdHMpLAo+PiDCoCsg fSwKPj4gwqArIHsKPj4gwqArIC50eXBlID0gRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSwKPj4gwqAr IC5mb3JtYXRzID0gc3VuOGlfbWl4ZXJfbGF5ZXJfZm9ybWF0cywKPj4gwqArIC5uZm9ybWF0cyA9 IEFSUkFZX1NJWkUoc3VuOGlfbWl4ZXJfbGF5ZXJfZm9ybWF0cyksCj4+IMKgKyB9LAo+PiDCoCt9 Owo+PiDCoCsKPj4gwqDCoHN0YXRpYyBzdHJ1Y3Qgc3VuNGlfbGF5ZXIgKnN1bjRpX2xheWVyX2lu aXRfb25lKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qgc3VuNGlfcGxhbmVfZGVzYyAqcGxhbmUp Cj4+IMKgwqB7Cj4+IMKgQEAgLTExNSw3ICsxNDgsNyBAQCBzdGF0aWMgc3RydWN0IHN1bjRpX2xh eWVyICpzdW40aV9sYXllcl9pbml0X29uZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK Pj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQo ZHJtLCAmbGF5ZXItPnBsYW5lLCBCSVQoMCksCj4+IMKgLSAmc3VuNGlfYmFja2VuZF9sYXllcl9m dW5jcywKPj4gwqArICZzdW40aV9sYXllcl9mdW5jcywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHBsYW5lLT5mb3JtYXRzLCBwbGFuZS0+bmZvcm1hdHMsCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwbGFuZS0+dHlwZSwgTlVMTCk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJl dCkgewo+PiDCoEBAIC0xMjQsNyArMTU3LDcgQEAgc3RhdGljIHN0cnVjdCBzdW40aV9sYXllciAq c3VuNGlfbGF5ZXJfaW5pdF9vbmUoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3BsYW5lX2hlbHBlcl9h ZGQoJmxheWVyLT5wbGFuZSwKPj4gwqAtICZzdW40aV9iYWNrZW5kX2xheWVyX2hlbHBlcl9mdW5j cyk7Cj4+IMKgKyAmc3VuNGlfbGF5ZXJfaGVscGVyX2Z1bmNzKTsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqBsYXllci0+ZHJ2ID0gZHJ2Owo+Pgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwbGFu ZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+PiDCoEBAIC0xODcsMyArMjIwLDMw IEBAIHN0cnVjdCBzdW40aV9sYXllciAqKnN1bjRpX2xheWVyc19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGxheWVyczsKPj4gwqDC oH0KPj4gwqArCj4+IMKgK3N0cnVjdCBzdW40aV9sYXllciAqKnN1bjhpX2xheWVyc19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4KPiBBbmQgc3RvcmUgdGhpcyAoYW5kIHN1bjRpX2xheWVy c19pbml0KSBpbiBhbiBzdHJ1Y3R1cmUgaG9sZGluZyB0aGUKPiBmdW5jdGlvbiBwb2ludGVycyBm b3IgdGhvc2UuCgpIb3cgc2hvdWxkIEkgZG8gaXQ/CklmIEkgY3JlYXRlIGEgb3BzIHN0cnVjdCwg d2hlcmUgc2hvdWxkIEkgcmVmZXJlbmNlIGl0PwoKPgo+PiDCoCt7Cj4+IMKgKyBzdHJ1Y3Qgc3Vu NGlfbGF5ZXIgKipsYXllcnM7Cj4+IMKgKyBpbnQgaTsKPj4gwqArCj4+IMKgKyBsYXllcnMgPSBk ZXZtX2tjYWxsb2MoZHJtLT5kZXYsIEFSUkFZX1NJWkUoc3VuOGlfbWl4ZXJfcGxhbmVzKSwKPj4g wqArIHNpemVvZigqKmxheWVycyksIEdGUF9LRVJORUwpOwo+PiDCoCsgaWYgKCFsYXllcnMpCj4+ IMKgKyByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gwqArCj4+IMKgKyBmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShzdW44aV9taXhlcl9wbGFuZXMpOyBpKyspIHsKPj4gwqArIGNvbnN0IHN0 cnVjdCBzdW40aV9wbGFuZV9kZXNjICpwbGFuZSA9ICZzdW44aV9taXhlcl9wbGFuZXNbaV07Cj4+ IMKgKyBzdHJ1Y3Qgc3VuNGlfbGF5ZXIgKmxheWVyID0gbGF5ZXJzW2ldOwo+PiDCoCsKPj4gwqAr IGxheWVyID0gc3VuNGlfbGF5ZXJfaW5pdF9vbmUoZHJtLCBwbGFuZSk7Cj4+IMKgKyBpZiAoSVNf RVJSKGxheWVyKSkgewo+PiDCoCsgZGV2X2Vycihkcm0tPmRldiwgIkNvdWxkbid0IGluaXRpYWxp emUgJXMgcGxhbmVcbiIsCj4+IMKgKyBpID8gIm92ZXJsYXkiIDogInByaW1hcnkiKTsKPj4gwqAr IHJldHVybiBFUlJfQ0FTVChsYXllcik7Cj4+IMKgKyB9Owo+PiDCoCsKPj4gwqArIGxheWVyLT5p ZCA9IGk7Cj4+IMKgKyB9Owo+PiDCoCsKPj4gwqArIHJldHVybiBsYXllcnM7Cj4+IMKgK30KPj4g wqBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmggYi9kcml2 ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuaAo+PiDCoGluZGV4IGEyZjY1ZDdhM2Y0ZS4u ZjdiOWU1ZGFlYTUwIDEwMDY0NAo+PiDCoC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40 aV9sYXllci5oCj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmgK Pj4gwqBAQCAtMjYsNSArMjYsNiBAQCBwbGFuZV90b19zdW40aV9sYXllcihzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSkKPj4gwqDCoH0KPj4KPj4gwqDCoHN0cnVjdCBzdW40aV9sYXllciAqKnN1bjRp X2xheWVyc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+PiDCoCtzdHJ1Y3Qgc3VuNGlf bGF5ZXIgKipzdW44aV9sYXllcnNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPj4KPj4g wqDCoCNlbmRpZiAvKiBfU1VONElfTEFZRVJfSF8gKi8KPj4gwqBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3Vu OGlfbWl4ZXIuYwo+PiDCoG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IMKgaW5kZXggMDAwMDAwMDAw MDAwLi45NDI3YjU3MjQwZDMKPj4gwqAtLS0gL2Rldi9udWxsCj4+IMKgKysrIGIvZHJpdmVycy9n cHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmMKPj4gwqBAQCAtMCwwICsxLDQxNyBAQAo+PiDCoCsv Kgo+PiDCoCsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8aWNlbm93eUBhb3Nj Lnh5ej4KPj4gwqArICoKPj4gwqArICogQmFzZWQgb24gc3VuNGlfYmFja2VuZC5jLCB3aGljaCBp czoKPj4gwqArICogQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgRWxlY3Ryb25zCj4+IMKgKyAqIENv cHlyaWdodCAoQykgMjAxNSBOZXh0VGhpbmcgQ28KPj4gwqArICoKPj4gwqArICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiDC oCsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcwo+PiDCoCsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+PiDCoCsgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gwqArICovCj4+IMKgKwo+PiDCoCsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPj4gwqArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o Pgo+PiDCoCsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4+IMKgKyNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+Cj4+IMKgKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4K Pj4gwqArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPj4gwqArI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4+IMKgKwo+PiDCoCsjaW5jbHVkZSA8bGludXgvY29t cG9uZW50Lmg+Cj4+IMKgKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+PiDCoCsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4+IMKgKwo+PiDCoCsjaW5jbHVkZSAic3VuOGlfbWl4ZXIuaCIK Pj4gwqArI2luY2x1ZGUgInN1bjRpX2Rydi5oIgo+PiDCoCsKPj4gwqArI2RlZmluZSBTVU44SV9E UkFNX09GRlNFVCAweDQwMDAwMDAwCj4KPiBQSFlTX09GRlNFVD8KCkFueSBuYW1lIGlzIE9LLgoK KFAuUy4gdGhpcyBzZWVtcyBhbHNvIG5lZWRlZCBmb3Igc29tZSBERTFzKQoKPgo+PiDCoCsKPj4g wqArI2lmIGRlZmluZWQgQ09ORklHX0RSTV9TVU40SV9ERTIKPgo+IFRoYXQgaWZkZWYgc2hvdWxk IGJlIGluIHRoZSBoZWFkZXIKClNvIHRoZSBmaWxlIG9ubHkgY29tcGlsZSBpZiB0aGlzIG9wdGlv biBpcyBlbmFibGVkPwoKQW5kIGlmIHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkLCBpbmxpbmVkIG51 bGwgc3R1YnMgc2hvdWxkIGJlCm1hZGUgaW4gaGVhZGVyPwoKPgo+PiDCoCt2b2lkIHN1bjhpX21p eGVyX2NvbW1pdChzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyKQo+PiDCoCt7Cj4+IMKgKyBEUk1f REVCVUdfRFJJVkVSKCJDb21taXR0aW5nIGNoYW5nZXNcbiIpOwo+PiDCoCsKPj4gwqArIHJlZ21h cF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfR0xPQkFMX0RCVUZGLAo+PiDCoCsgU1VO OElfTUlYRVJfR0xPQkFMX0RCVUZGX0VOQUJMRSk7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJP TChzdW44aV9taXhlcl9jb21taXQpOwo+Cj4gQ29tbWl0IGNvdWxkIGJlIG9uZSBvZiB0aGVzZSBv cHMgdG9vLgo+Cj4+IMKgK3ZvaWQgc3VuOGlfbWl4ZXJfbGF5ZXJfZW5hYmxlKHN0cnVjdCBzdW44 aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIGJvb2wgZW5hYmxlKQo+PiDCoCt7Cj4+ IMKgKyB1MzIgdmFsOwo+PiDCoCsgLyogQ3VycmVudGx5IHRoZSBmaXJzdCBVSSBjaGFubmVsIGlz IHVzZWQgKi8KPj4gwqArIGludCBjaGFuID0gbWl4ZXItPmNmZy0+dmlfbnVtOwo+PiDCoCsKPj4g wqArIERSTV9ERUJVR19EUklWRVIoIkVuYWJsaW5nIGxheWVyICVkIGluIGNoYW5uZWwgJWRcbiIs IGxheWVyLCBjaGFuKTsKPj4gwqArCj4+IMKgKyBpZiAoZW5hYmxlKQo+PiDCoCsgdmFsID0gU1VO OElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0VOOwo+PiDCoCsgZWxzZQo+PiDCoCsgdmFsID0g MDsKPgo+IFNvIHlvdSBvbmx5IHN1cHBvcnQgdGhlIFVJIGNoYW5uZWw/Cj4KPiBXaHkgZG8geW91 IGV4cG9zZSBzZXZlcmFsIHBsYW5lcyB0aGVuPwoKQ3VycmVudGx5IEkgZGlkbid0IGZpbmQgYW55 IHdheSB0byBlbmFibGUgbW9yZSB0aGFuIG9uZSBjaGFubmVsCmF0IHRoZSBzYW1lIHRpbWUsIHNv IG9ubHkgdGhlIGZpcnN0IFVJIGNoYW5uZWwgaXMgdXNlZC4KCkFmdGVyIG1vcmUga25vd2xlZGdl cyBhcmUgZ2FpbmVkIGZvciBERTIgbWl4ZXJzIHdlIGNhbiBpbXBsZW1lbnQKbW9yZSBmdW5jdGlv bnMgKGZvciBleGFtcGxlLCBKZXJuZWpzayBoYXZlIGFscmVhZHkgZGlzY292ZXJlZCBob3cKdG8g ZG8gY29sb3Igc3BhY2UgY29ycmVsYXRpb24gaW4gREUyIGZvciBUVkUpLgoKPgo+PiDCoCsKPj4g wqArIHJlZ21hcF91cGRhdGVfYml0cyhtaXhlci0+cmVncywKPj4gwqArIFNVTjhJX01JWEVSX0NI QU5fVUlfTEFZRVJfQVRUUihjaGFuLCBsYXllciksCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJ X0xBWUVSX0FUVFJfRU4sIHZhbCk7Cj4+IMKgKwo+PiDCoCsgLyogU2V0IHRoZSBhbHBoYSBjb25m aWd1cmF0aW9uICovCj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4ZXItPnJlZ3MsCj4+IMKg KyBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFIoY2hhbiwgbGF5ZXIpLAo+PiDCoCsgU1VO OElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhBX01PREVfTUFTSywKPj4gwqArIFNVTjhJ X01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9BTFBIQV9NT0RFX0RFRik7Cj4+IMKgKyByZWdtYXBf dXBkYXRlX2JpdHMobWl4ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVS X0FUVFIoY2hhbiwgbGF5ZXIpLAo+PiDCoCsgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRS X0FMUEhBX01BU0ssCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFJfQUxQSEFf REVGKTsKPgo+IFRoaXMgc2hvdWxkIGJlIGluIGEgcHJvcGVydHkKCldoYXQgcHJvcGVydHk/Cgo+ Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJPTChzdW44aV9taXhlcl9sYXllcl9lbmFibGUpOwo+ PiDCoCsKPj4gwqArc3RhdGljIGludCBzdW44aV9taXhlcl9kcm1fZm9ybWF0X3RvX2xheWVyKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiDCoCsgdTMyIGZvcm1hdCwgdTMyICptb2RlKQo+PiDC oCt7Cj4+IMKgKyBpZiAoKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpICYm Cj4+IMKgKyAoZm9ybWF0ID09IERSTV9GT1JNQVRfQVJHQjg4ODgpKQo+PiDCoCsgZm9ybWF0ID0g RFJNX0ZPUk1BVF9YUkdCODg4ODsKPgo+IERvIHlvdSBhY3R1YWxseSBoYXZlIHRoYXQgaXNzdWUu CgpZZXMsIGl0IHJlYWxseSBkbywgYXQgbGVhc3Qgc2NyZWVuIGdvIGJsYWNrIHdoZW4gSSBzZXQg dGhpcyB0byBBUkdCODg4OCBpbgpVLUJvb3QuIChVLUJvb3QgaXMgYSBnb29kIGV4cGVyaWVtZW50 IGFyZWEgOy0pICkKCj4KPj4gwqArIHN3aXRjaCAoZm9ybWF0KSB7Cj4+IMKgKyBjYXNlIERSTV9G T1JNQVRfQVJHQjg4ODg6Cj4+IMKgKyAqbW9kZSA9IFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJf QVRUUl9GQkZNVF9BUkdCODg4ODsKPj4gwqArIGJyZWFrOwo+PiDCoCsKPj4gwqArIGNhc2UgRFJN X0ZPUk1BVF9YUkdCODg4ODoKPj4gwqArICptb2RlID0gU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlF Ul9BVFRSX0ZCRk1UX1hSR0I4ODg4Owo+PiDCoCsgYnJlYWs7Cj4+IMKgKwo+PiDCoCsgY2FzZSBE Uk1fRk9STUFUX1JHQjg4ODoKPj4gwqArICptb2RlID0gU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlF Ul9BVFRSX0ZCRk1UX1JHQjg4ODsKPj4gwqArIGJyZWFrOwo+PiDCoCsKPj4gwqArIGRlZmF1bHQ6 Cj4+IMKgKyByZXR1cm4gLUVJTlZBTDsKPj4gwqArIH0KPj4gwqArCj4+IMKgKyByZXR1cm4gMDsK Pj4gwqArfQo+PiDCoCsKPj4gwqAraW50IHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZChz dHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUg PSBwbGFuZS0+c3RhdGU7Cj4+IMKgKyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRl LT5mYjsKPj4gwqArIC8qIEN1cnJlbnRseSB0aGUgZmlyc3QgVUkgY2hhbm5lbCBpcyB1c2VkICov Cj4+IMKgKyBpbnQgY2hhbiA9IG1peGVyLT5jZmctPnZpX251bTsKPj4gwqArIGludCBpOwo+PiDC oCsKPj4gwqArIERSTV9ERUJVR19EUklWRVIoIlVwZGF0aW5nIGxheWVyICVkXG4iLCBsYXllcik7 Cj4+IMKgKwo+PiDCoCsgaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkp IHsKPj4gwqArIERSTV9ERUJVR19EUklWRVIoIlByaW1hcnkgbGF5ZXIsIHVwZGF0aW5nIGdsb2Jh bCBzaXplIFc6ICV1IEg6ICV1XG4iLAo+PiDCoCsgc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNf aCk7Cj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0dMT0JBTF9T SVpFLAo+PiDCoCsgU1VOOElfTUlYRVJfU0laRShzdGF0ZS0+Y3J0Y193LAo+PiDCoCsgc3RhdGUt PmNydGNfaCkpOwo+PiDCoCsgRFJNX0RFQlVHX0RSSVZFUigiVXBkYXRpbmcgYmxlbmRlciBzaXpl XG4iKTsKPj4gwqArIGZvciAoaSA9IDA7IGkgPCBTVU44SV9NSVhFUl9NQVhfQ0hBTl9DT1VOVDsg aSsrKQo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVyLT5yZWdzLAo+PiDCoCsgU1VOOElfTUlYRVJf QkxFTkRfQVRUUl9JTlNJWkUoaSksCj4+IMKgKyBTVU44SV9NSVhFUl9TSVpFKHN0YXRlLT5jcnRj X3csCj4+IMKgKyBzdGF0ZS0+Y3J0Y19oKSk7Cj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJl Z3MsIFNVTjhJX01JWEVSX0JMRU5EX09VVFNJWkUsCj4+IMKgKyBTVU44SV9NSVhFUl9TSVpFKHN0 YXRlLT5jcnRjX3csCj4+IMKgKyBzdGF0ZS0+Y3J0Y19oKSk7Cj4+IMKgKyBEUk1fREVCVUdfRFJJ VkVSKCJVcGRhdGluZyBjaGFubmVsIHNpemVcbiIpOwo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVy LT5yZWdzLCBTVU44SV9NSVhFUl9DSEFOX1VJX09WTF9TSVpFKGNoYW4pLAo+PiDCoCsgU1VOOElf TUlYRVJfU0laRShzdGF0ZS0+Y3J0Y193LAo+PiDCoCsgc3RhdGUtPmNydGNfaCkpOwo+PiDCoCsg fQo+PiDCoCsKPj4gwqArIC8qIFNldCB0aGUgbGluZSB3aWR0aCAqLwo+PiDCoCsgRFJNX0RFQlVH X0RSSVZFUigiTGF5ZXIgbGluZSB3aWR0aDogJWQgYnl0ZXNcbiIsIGZiLT5waXRjaGVzWzBdKTsK Pj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlF Ul9QSVRDSChjaGFuLCBsYXllciksCj4+IMKgKyBmYi0+cGl0Y2hlc1swXSk7Cj4+IMKgKwo+PiDC oCsgLyogU2V0IGhlaWdodCBhbmQgd2lkdGggKi8KPj4gwqArIERSTV9ERUJVR19EUklWRVIoIkxh eWVyIHNpemUgVzogJXUgSDogJXVcbiIsCj4+IMKgKyBzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0 Y19oKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQ0hBTl9V SV9MQVlFUl9TSVpFKGNoYW4sIGxheWVyKSwKPj4gwqArIFNVTjhJX01JWEVSX1NJWkUoc3RhdGUt PmNydGNfdywgc3RhdGUtPmNydGNfaCkpOwo+PiDCoCsKPj4gwqArIC8qIFNldCBiYXNlIGNvb3Jk aW5hdGVzICovCj4+IMKgKyBEUk1fREVCVUdfRFJJVkVSKCJMYXllciBjb29yZGluYXRlcyBYOiAl ZCBZOiAlZFxuIiwKPj4gwqArIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3kpOwo+PiDCoCsg cmVnbWFwX3dyaXRlKG1peGVyLT5yZWdzLCBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0NPT1JE KGNoYW4sIGxheWVyKSwKPj4gwqArIFNVTjhJX01JWEVSX0NPT1JEKHN0YXRlLT5jcnRjX3gsIHN0 YXRlLT5jcnRjX3kpKTsKPj4gwqArCj4+IMKgKyByZXR1cm4gMDsKPj4gwqArfQo+PiDCoCtFWFBP UlRfU1lNQk9MKHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZCk7Cj4+IMKgKwo+PiDCoCtp bnQgc3VuOGlfbWl4ZXJfdXBkYXRlX2xheWVyX2Zvcm1hdHMoc3RydWN0IHN1bjhpX21peGVyICpt aXhlciwKPj4gwqArIGludCBsYXllciwgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4+IMKgK3sK Pj4gwqArIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOwo+PiDC oCsgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7Cj4+IMKgKyBib29sIGlu dGVybGFjZWQgPSBmYWxzZTsKPj4gwqArIHUzMiB2YWw7Cj4+IMKgKyAvKiBDdXJyZW50bHkgdGhl IGZpcnN0IFVJIGNoYW5uZWwgaXMgdXNlZCAqLwo+PiDCoCsgaW50IGNoYW4gPSBtaXhlci0+Y2Zn LT52aV9udW07Cj4+IMKgKyBpbnQgcmV0Owo+PiDCoCsKPj4gwqArIGlmIChwbGFuZS0+c3RhdGUt PmNydGMpCj4+IMKgKyBpbnRlcmxhY2VkID0gcGxhbmUtPnN0YXRlLT5jcnRjLT5zdGF0ZS0+YWRq dXN0ZWRfbW9kZS5mbGFncwo+PiDCoCsgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKPj4gwqAr Cj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5E X09VVENUTCwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX09VVENUTF9JTlRFUkxBQ0VELAo+PiDC oCsgaW50ZXJsYWNlZCA/Cj4+IMKgKyBTVU44SV9NSVhFUl9CTEVORF9PVVRDVExfSU5URVJMQUNF RCA6IDApOwo+PiDCoCsKPj4gwqArIERSTV9ERUJVR19EUklWRVIoIlN3aXRjaGluZyBkaXNwbGF5 IG1peGVyIGludGVybGFjZWQgbW9kZSAlc1xuIiwKPj4gwqArIGludGVybGFjZWQgPyAib24iIDog Im9mZiIpOwo+PiDCoCsKPj4gwqArIHJldCA9IHN1bjhpX21peGVyX2RybV9mb3JtYXRfdG9fbGF5 ZXIocGxhbmUsIGZiLT5mb3JtYXQtPmZvcm1hdCwKPj4gwqArICZ2YWwpOwo+PiDCoCsgaWYgKHJl dCkgewo+PiDCoCsgRFJNX0RFQlVHX0RSSVZFUigiSW52YWxpZCBmb3JtYXRcbiIpOwo+PiDCoCsg cmV0dXJuIHJldDsKPj4gwqArIH0KPj4gwqArCj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4 ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFIoY2hhbiwgbGF5 ZXIpLAo+PiDCoCsgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX01BU0ssIHZh bCk7Cj4+IMKgKwo+PiDCoCsgcmV0dXJuIDA7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJPTChz dW44aV9taXhlcl91cGRhdGVfbGF5ZXJfZm9ybWF0cyk7Cj4+IMKgKwo+PiDCoCtpbnQgc3VuOGlf bWl4ZXJfdXBkYXRlX2xheWVyX2J1ZmZlcihzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDC oCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4+IMKgKyBzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKPj4gwqArIHN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmdlbTsKPj4gwqArIGRtYV9hZGRyX3QgcGFkZHI7Cj4+IMKgKyB1aW50MzJfdCBw YWRkcl91MzI7Cj4+IMKgKyAvKiBDdXJyZW50bHkgdGhlIGZpcnN0IFVJIGNoYW5uZWwgaXMgdXNl ZCAqLwo+PiDCoCsgaW50IGNoYW4gPSBtaXhlci0+Y2ZnLT52aV9udW07Cj4+IMKgKyBpbnQgYnBw Owo+PiDCoCsKPj4gwqArIC8qIEdldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVy IGluIG1lbW9yeSAqLwo+PiDCoCsgZ2VtID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7 Cj4+IMKgKwo+PiDCoCsgRFJNX0RFQlVHX0RSSVZFUigiVXNpbmcgR0VNIEAgJXBhZFxuIiwgJmdl bS0+cGFkZHIpOwo+PiDCoCsKPj4gwqArIC8qIENvbXB1dGUgdGhlIHN0YXJ0IG9mIHRoZSBkaXNw bGF5ZWQgbWVtb3J5ICovCj4+IMKgKyBicHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4+IMKgKyBw YWRkciA9IGdlbS0+cGFkZHIgKyBmYi0+b2Zmc2V0c1swXTsKPj4gwqArIHBhZGRyICs9IChzdGF0 ZS0+c3JjX3ggPj4gMTYpICogYnBwOwo+PiDCoCsgcGFkZHIgKz0gKHN0YXRlLT5zcmNfeSA+PiAx NikgKiBmYi0+cGl0Y2hlc1swXTsKPj4gwqArIHBhZGRyIC09IFNVTjhJX0RSQU1fT0ZGU0VUOwo+ PiDCoCsKPj4gwqArIERSTV9ERUJVR19EUklWRVIoIlNldHRpbmcgYnVmZmVyIGFkZHJlc3MgdG8g JXBhZFxuIiwgJnBhZGRyKTsKPj4gwqArCj4+IMKgKyBwYWRkcl91MzIgPSAodWludDMyX3QpIHBh ZGRyOwo+PiDCoCsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywKPj4gwqArIFNVTjhJ X01JWEVSX0NIQU5fVUlfTEFZRVJfVE9QX0xBRERSKGNoYW4sIGxheWVyKSwKPj4gwqArIHBhZGRy X3UzMik7Cj4+IMKgKwo+PiDCoCsgcmV0dXJuIDA7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJP TChzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfYnVmZmVyKTsKPj4gwqArCj4+IMKgK3N0YXRpYyBz dHJ1Y3QgcmVnbWFwX2NvbmZpZyBzdW44aV9taXhlcl9yZWdtYXBfY29uZmlnID0gewo+PiDCoCsg LnJlZ19iaXRzID0gMzIsCj4+IMKgKyAudmFsX2JpdHMgPSAzMiwKPj4gwqArIC5yZWdfc3RyaWRl ID0gNCwKPj4gwqArIC5tYXhfcmVnaXN0ZXIgPSAweGJmZmMsIC8qIGd1ZXNzZWQgKi8KPj4gwqAr fTsKPj4gwqArCj4+IMKgK3N0YXRpYyBpbnQgc3VuOGlfbWl4ZXJfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPj4gwqArIHZvaWQgKmRhdGEpCj4+IMKgK3sK Pj4gwqArIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGV2KTsKPj4gwqArIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOwo+PiDCoCsgc3RydWN0 IHN1bjRpX2RydiAqZHJ2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPj4gwqArIHN0cnVjdCBzdW44aV9t aXhlciAqbWl4ZXI7Cj4+IMKgKyBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPj4gwqArIHZvaWQgX19p b21lbSAqcmVnczsKPj4gwqArIGludCBpLCByZXQ7Cj4+IMKgKwo+PiDCoCsgbWl4ZXIgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKm1peGVyKSwgR0ZQX0tFUk5FTCk7Cj4+IMKgKyBpZiAoIW1p eGVyKQo+PiDCoCsgcmV0dXJuIC1FTk9NRU07Cj4+IMKgKyBkZXZfc2V0X2RydmRhdGEoZGV2LCBt aXhlcik7Cj4+IMKgKyBkcnYtPm1peGVyID0gbWl4ZXI7Cj4+IMKgKwo+PiDCoCsgbWl4ZXItPmNm ZyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+PiDCoCsgaWYgKCFtaXhlci0+Y2Zn KQo+PiDCoCsgcmV0dXJuIC1FSU5WQUw7Cj4+IMKgKwo+PiDCoCsgcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPj4gwqArIHJlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+PiDCoCsgaWYgKElTX0VSUihyZWdzKSkKPj4gwqAr IHJldHVybiBQVFJfRVJSKHJlZ3MpOwo+PiDCoCsKPj4gwqArIG1peGVyLT5yZWdzID0gZGV2bV9y ZWdtYXBfaW5pdF9tbWlvKGRldiwgcmVncywKPj4gwqArICZzdW44aV9taXhlcl9yZWdtYXBfY29u ZmlnKTsKPj4gwqArIGlmIChJU19FUlIobWl4ZXItPnJlZ3MpKSB7Cj4+IMKgKyBkZXZfZXJyKGRl diwgIkNvdWxkbid0IGNyZWF0ZSB0aGUgbWl4ZXIgcmVnbWFwXG4iKTsKPj4gwqArIHJldHVybiBQ VFJfRVJSKG1peGVyLT5yZWdzKTsKPj4gwqArIH0KPj4gwqArCj4+IMKgKyBtaXhlci0+cmVzZXQg PSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgTlVMTCk7Cj4+IMKgKyBpZiAoSVNfRVJSKG1p eGVyLT5yZXNldCkpIHsKPj4gwqArIGRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IG91ciByZXNl dCBsaW5lXG4iKTsKPj4gwqArIHJldHVybiBQVFJfRVJSKG1peGVyLT5yZXNldCk7Cj4+IMKgKyB9 Cj4+IMKgKwo+PiDCoCsgcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChtaXhlci0+cmVzZXQp Owo+PiDCoCsgaWYgKHJldCkgewo+PiDCoCsgZGV2X2VycihkZXYsICJDb3VsZG4ndCBkZWFzc2Vy dCBvdXIgcmVzZXQgbGluZVxuIik7Cj4+IMKgKyByZXR1cm4gcmV0Owo+PiDCoCsgfQo+PiDCoCsK Pj4gwqArIG1peGVyLT5idXNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImJ1cyIpOwo+PiDCoCsg aWYgKElTX0VSUihtaXhlci0+YnVzX2NsaykpIHsKPj4gwqArIGRldl9lcnIoZGV2LCAiQ291bGRu J3QgZ2V0IHRoZSBtaXhlciBidXMgY2xvY2tcbiIpOwo+PiDCoCsgcmV0ID0gUFRSX0VSUihtaXhl ci0+YnVzX2Nsayk7Cj4+IMKgKyBnb3RvIGVycl9hc3NlcnRfcmVzZXQ7Cj4+IMKgKyB9Cj4+IMKg KyBjbGtfcHJlcGFyZV9lbmFibGUobWl4ZXItPmJ1c19jbGspOwo+PiDCoCsKPj4gwqArIG1peGVy LT5tb2RfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1vZCIpOwo+PiDCoCsgaWYgKElTX0VSUiht aXhlci0+bW9kX2NsaykpIHsKPj4gwqArIGRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHRoZSBt aXhlciBtb2R1bGUgY2xvY2tcbiIpOwo+PiDCoCsgcmV0ID0gUFRSX0VSUihtaXhlci0+bW9kX2Ns ayk7Cj4+IMKgKyBnb3RvIGVycl9kaXNhYmxlX2J1c19jbGs7Cj4+IMKgKyB9Cj4+IMKgKyBjbGtf cHJlcGFyZV9lbmFibGUobWl4ZXItPm1vZF9jbGspOwo+Cj4gU3VwcG9ydGluZyBydW50aW1lX3Bt IHdvdWxkIGJlIGJldHRlci4KCkJ1dCBJIHRoaW5rIGl0J3MgYXQgbGVhc3Qgbm90IHN1cHBvcnQg eWV0IGZvciBERTEgYmFja2VuZC4uLgoKPgo+PiDCoCsgLyogUmVzZXQgdGhlIHJlZ2lzdGVycyAq Lwo+PiDCoCsgZm9yIChpID0gMHgwOyBpIDwgMHgyMDAwMDsgaSArPSA0KQo+PiDCoCsgcmVnbWFw X3dyaXRlKG1peGVyLT5yZWdzLCBpLCAwKTsKPgo+IERvIHlvdSBzdGlsbCBuZWVkIHRvIHJlc2V0 IGl0PyBJc24ndCB0aGUgcmVzZXQgbGluZSBlbm91Z2g/CgpOb3BlLCBzb21lIHN0cmFuZ2UgZGF0 YSBsaWVzIGluIHRoZSBERTIgc3BhY2UuCgpIZXJlJ3MgYSByZWcgZHVtcCBvZiBhIHJ1bm5pbmcg REUyICdzIGNoYW5uZWwgMiBvbiBWM3M6Cj0+IG1kIDAxMTA0MDAwCjAxMTA0MDAwOiBmZjAwMDQw MyAwMTBmMDFkZiAwMDAwMDAwMCAwMDAwMDc4MCAgICAuLi4uLi4uLi4uLi4uLi4uCjAxMTA0MDEw OiAwM2Y4MDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAgICAuLi4uLi4uLi4uLi4uLi4u CjAxMTA0MDIwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAgICAuLi4uLi4u Li4uLi4uLi4uCjAxMTA0MDMwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAg ICAuLi4uLi4uLi4uLi4uLi4uCjAxMTA0MDQwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAw MDAwMDAwMCAgICAuLi4uLi4uLi4uLi4uLi4uCjAxMTA0MDUwOiAwMDAwMDAwMCAwMDAwMDAwMCAw MDAwMDAwMCAwMDAwMDAwMCAgICAuLi4uLi4uLi4uLi4uLi4uCjAxMTA0MDYwOiAwMDAwMDAwMCAw MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAgICAuLi4uLi4uLi4uLi4uLi4uCjAxMTA0MDcwOiAw MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAgICAuLi4uLi4uLi4uLi4uLi4uCjAx MTA0MDgwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMTBmMDFkZiBiYmU0ZDNiMCAgICAuLi4uLi4uLi4u Li4uLi4uCjAxMTA0MDkwOiA1NGRhYWY5OCAxMzgzNTkyNyBhMTQ3OWI1OCA4Mzk2YjhhZCAgICAu Li5UJ1kuLlguRy4uLi4uCjAxMTA0MGEwOiAwN2QwMmVkZSBhMzlhMThkYSA4N2Q4OGFiYSBhMmQy M2NmNiAgICAuLi4uLi4uLi4uLi4uPC4uCjAxMTA0MGIwOiBlOGJmYThmNyAyYzhkMmI3YyBmOGJi ZWIzZSA5ODAxM2I3NSAgICAuLi4ufCsuLD4uLi51Oy4uCjAxMTA0MGMwOiA3YzE4NmY0OCA0ZGRj ZGJkZSBiNjU4Y2FmOCA3NmI3NzBkNiAgICBIby58Li4uTS4uWC4ucC52CjAxMTA0MGQwOiBiOWE2 MjBlZiBmZTIxNWNjMSBlZGQ2YzRiMyBjNWY3YTY2YyAgICAuIC4uLlwhLi4uLi5sLi4uCjAxMTA0 MGUwOiAwZDFmZjZkMyA5NTZjYTllOCA3ZjUxZjgwYSBhZDlhMTg0YSAgICAuLi4uLi5sLi4uUS5K Li4uCjAxMTA0MGYwOiBmZjIzZTQyOCA3NzJkOGQxNCBmNGMwMzA3NyA4YmY0OTVjYSAgICAoLiMu Li4td3cwLi4uLi4uCgooUC5TLiBvbmx5IGZpcnN0IDB4ODggYnl0ZXMgYXJlIHVzZWQgaW4gYSBV SSBjaGFubmVsLCBzbyB0aGUgZm9sbG93aW5nIGlzCm5vdCByZXNldGVkIGJ5IFUtQm9vdCBERTIg ZHJpdmVyIGFuZCBpcyBrZXB0IHRoZSBvcmlnaW5hbCBhZnRlciByZXNldCBsaW5lCmRlYXNzZXJ0 aW5nKQoKPgo+PiDCoCsgLyogRW5hYmxlIHRoZSBtaXhlciAqLwo+PiDCoCsgcmVnbWFwX3dyaXRl KG1peGVyLT5yZWdzLCBTVU44SV9NSVhFUl9HTE9CQUxfQ1RMLAo+PiDCoCsgU1VOOElfTUlYRVJf R0xPQkFMX0NUTF9SVF9FTik7Cj4+IMKgKwo+PiDCoCsgLyogSW5pdGlhbGl6ZSBibGVuZGVyICov Cj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5EX0ZDT0xP Ul9DVEwsCj4+IMKgKyBTVU44SV9NSVhFUl9CTEVORF9GQ09MT1JfQ1RMX0RFRik7Cj4+IMKgKyBy ZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5EX1BSRU1VTFRJUExZLAo+ PiDCoCsgU1VOOElfTUlYRVJfQkxFTkRfUFJFTVVMVElQTFlfREVGKTsKPj4gwqArIHJlZ21hcF93 cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxFTkRfQktDT0xPUiwKPj4gwqArIFNVTjhJ X01JWEVSX0JMRU5EX0JLQ09MT1JfREVGKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVn cywgU1VOOElfTUlYRVJfQkxFTkRfTU9ERSgwKSwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX01P REVfREVGKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxF TkRfTU9ERSgxKSwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX01PREVfREVGKTsKPj4gwqArIHJl Z21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxFTkRfQ0tfQ1RMLAo+PiDCoCsg U1VOOElfTUlYRVJfQkxFTkRfQ0tfQ1RMX0RFRik7Cj4+IMKgKwo+PiDCoCsgZm9yIChpID0gMDsg aSA8IFNVTjhJX01JWEVSX01BWF9DSEFOX0NPVU5UOyBpKyspCj4+IMKgKyByZWdtYXBfd3JpdGUo bWl4ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhFUl9CTEVORF9BVFRSX0ZDT0xPUihpKSwKPj4g wqArIFNVTjhJX01JWEVSX0JMRU5EX0FUVFJfRkNPTE9SX0RFRik7Cj4+IMKgKwo+PiDCoCsgLyog U2VsZWN0IHRoZSBmaXJzdCBVSSBjaGFubmVsICovCj4+IMKgKyBEUk1fREVCVUdfRFJJVkVSKCJT ZWxlY3RpbmcgY2hhbm5lbCAlZCAoZmlyc3QgVUkgY2hhbm5lbClcbiIsCj4+IMKgKyBtaXhlci0+ Y2ZnLT52aV9udW0pOwo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVyLT5yZWdzLCBTVU44SV9NSVhF Ul9CTEVORF9ST1VURSwKPj4gwqArIG1peGVyLT5jZmctPnZpX251bSk7Cj4+IMKgKwo+PiDCoCsg cmV0dXJuIDA7Cj4+IMKgKwo+PiDCoCsgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1peGVyLT5tb2Rf Y2xrKTsKPj4gwqArZXJyX2Rpc2FibGVfYnVzX2NsazoKPj4gwqArIGNsa19kaXNhYmxlX3VucHJl cGFyZShtaXhlci0+YnVzX2Nsayk7Cj4+IMKgK2Vycl9hc3NlcnRfcmVzZXQ6Cj4+IMKgKyByZXNl dF9jb250cm9sX2Fzc2VydChtaXhlci0+cmVzZXQpOwo+PiDCoCsgcmV0dXJuIHJldDsKPj4gwqAr fQo+PiDCoCsKPj4gwqArc3RhdGljIHZvaWQgc3VuOGlfbWl4ZXJfdW5iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+PiDCoCsgdm9pZCAqZGF0YSkKPj4gwqAr ewo+PiDCoCsgc3RydWN0IHN1bjhpX21peGVyICptaXhlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+PiDCoCsKPj4gwqArIGNsa19kaXNhYmxlX3VucHJlcGFyZShtaXhlci0+bW9kX2Nsayk7Cj4+ IMKgKyBjbGtfZGlzYWJsZV91bnByZXBhcmUobWl4ZXItPmJ1c19jbGspOwo+PiDCoCsgcmVzZXRf Y29udHJvbF9hc3NlcnQobWl4ZXItPnJlc2V0KTsKPj4gwqArfQo+PiDCoCsKPj4gwqArc3RhdGlj IGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHN1bjhpX21peGVyX29wcyA9IHsKPj4gwqArIC5i aW5kID0gc3VuOGlfbWl4ZXJfYmluZCwKPj4gwqArIC51bmJpbmQgPSBzdW44aV9taXhlcl91bmJp bmQsCj4+IMKgK307Cj4+IMKgKwo+PiDCoCtzdGF0aWMgaW50IHN1bjhpX21peGVyX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgK3sKPj4gwqArIHJldHVybiBjb21wb25l bnRfYWRkKCZwZGV2LT5kZXYsICZzdW44aV9taXhlcl9vcHMpOwo+PiDCoCt9Cj4+IMKgKwo+PiDC oCtzdGF0aWMgaW50IHN1bjhpX21peGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiDCoCt7Cj4+IMKgKyBjb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZzdW44aV9taXhl cl9vcHMpOwo+PiDCoCsKPj4gwqArIHJldHVybiAwOwo+PiDCoCt9Cj4+IMKgKwo+PiDCoCtzdGF0 aWMgY29uc3Qgc3RydWN0IHN1bjhpX21peGVyX2NmZyBzdW44aV92M3NfbWl4ZXJfY2ZnID0gewo+ PiDCoCsgLnZpX251bSA9IDIsCj4+IMKgKyAudWlfbnVtID0gMSwKPj4gwqArfTsKPj4gwqArCj4+ IMKgK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjhpX21peGVyX29mX3RhYmxl W10gPSB7Cj4+IMKgKyB7Cj4+IMKgKyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuOGktdjNz LWRlMi1taXhlciIsCj4+IMKgKyAuZGF0YSA9ICZzdW44aV92M3NfbWl4ZXJfY2ZnCj4+IMKgKyB9 LAo+PiDCoCsgeyB9Cj4+IMKgK307Cj4+IMKgK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bjhp X21peGVyX29mX3RhYmxlKTsKPj4gwqArCj4+IMKgK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIHN1bjhpX21peGVyX3BsYXRmb3JtX2RyaXZlciA9IHsKPj4gwqArIC5wcm9iZSA9IHN1bjhp X21peGVyX3Byb2JlLAo+PiDCoCsgLnJlbW92ZSA9IHN1bjhpX21peGVyX3JlbW92ZSwKPj4gwqAr IC5kcml2ZXIgPSB7Cj4+IMKgKyAubmFtZSA9ICJzdW44aS1taXhlciIsCj4+IMKgKyAub2ZfbWF0 Y2hfdGFibGUgPSBzdW44aV9taXhlcl9vZl90YWJsZSwKPj4gwqArIH0sCj4+IMKgK307Cj4+IMKg K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuOGlfbWl4ZXJfcGxhdGZvcm1fZHJpdmVyKTsKPj4g wqArCj4+IMKgK01PRFVMRV9BVVRIT1IoIkljZW5vd3kgWmhlbmcgPGljZW5vd3lAYW9zYy54eXo+ Iik7Cj4+IMKgK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIERFMiBNaXhlciBkcml2ZXIi KTsKPj4gwqArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+PiDCoCsjZWxzZSAvKiBEUk1fU1VONElf REUyICovCj4+IMKgK3ZvaWQgc3VuOGlfbWl4ZXJfY29tbWl0KHN0cnVjdCBzdW44aV9taXhlciAq bWl4ZXIpCj4+IMKgK3sKPj4gwqArfQo+PiDCoCsKPj4gwqArdm9pZCBzdW44aV9taXhlcl9sYXll cl9lbmFibGUoc3RydWN0IHN1bjhpX21peGVyICptaXhlciwKPj4gwqArIGludCBsYXllciwgYm9v bCBlbmFibGUpCj4+IMKgK3sKPj4gwqArfQo+PiDCoCsKPj4gwqAraW50IHN1bjhpX21peGVyX3Vw ZGF0ZV9sYXllcl9jb29yZChzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxh eWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgcmV0dXJuIC1FTk9F TlQ7Cj4+IMKgK30KPj4gwqArCj4+IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfZm9y bWF0cyhzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgcmV0dXJuIC1FTk9FTlQ7Cj4+IMKgK30K Pj4gwqArCj4+IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfYnVmZmVyKHN0cnVjdCBz dW44aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lKQo+PiDCoCt7Cj4+IMKgKyByZXR1cm4gLUVOT0VOVDsKPj4gwqArfQo+PiDCoCsjZW5kaWYg LyogQ09ORklHX0RSTV9TVU40SV9ERTIgKi8KPj4gwqBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3N1bjRpL3N1bjhpX21peGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuOGlfbWl4 ZXIuaAo+PiDCoG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IMKgaW5kZXggMDAwMDAwMDAwMDAwLi4w YmMxMzRiM2JjOTgKPj4gwqAtLS0gL2Rldi9udWxsCj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjhpX21peGVyLmgKPj4gwqBAQCAtMCwwICsxLDEzMyBAQAo+PiDCoCsvKgo+PiDC oCsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8aWNlbm93eUBhb3NjLnh5ej4K Pj4gwqArICoKPj4gwqArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiDCoCsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwo+PiDCoCsgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+PiDC oCsgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K Pj4gwqArICovCj4+IMKgKwo+PiDCoCsjaWZuZGVmIF9TVU44SV9NSVhFUl9IXwo+PiDCoCsjZGVm aW5lIF9TVU44SV9NSVhFUl9IXwo+PiDCoCsKPj4gwqArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ PiDCoCsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+IMKgKyNpbmNsdWRlIDxsaW51eC9yZXNl dC5oPgo+PiDCoCsKPj4gwqArI2luY2x1ZGUgInN1bjRpX2xheWVyLmgiCj4+IMKgKwo+PiDCoCsj ZGVmaW5lIFNVTjhJX01JWEVSX01BWF9DSEFOX0NPVU5UIDQKPj4gwqArCj4+IMKgKyNkZWZpbmUg U1VOOElfTUlYRVJfU0laRSh3LCBoKSAoKChoKSAtIDEpIDw8IDE2IHwgKCh3KSAtIDEpKQo+PiDC oCsjZGVmaW5lIFNVTjhJX01JWEVSX0NPT1JEKHgsIHkpICgoeSkgPDwgMTYgfCAoeCkpCj4+IMKg Kwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9DVEwgMHgwCj4+IMKgKyNkZWZpbmUg U1VOOElfTUlYRVJfR0xPQkFMX1NUQVRVUyAweDQKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9H TE9CQUxfREJVRkYgMHg4Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR0xPQkFMX1NJWkUgMHhj Cj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9DVExfUlRfRU4gMHgxCj4+ IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9EQlVGRl9FTkFCTEUgMHgxCj4+ IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX0ZDT0xPUl9DVEwgMHgxMDAwCj4+ IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQVRUUl9GQ09MT1IoeCkgKDB4MTAwNCArIDB4 MTAgKiAoeCkgKyAweDApCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQVRUUl9JTlNJ WkUoeCkgKDB4MTAwNCArIDB4MTAgKiAoeCkgKyAweDQpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfQkxFTkRfQVRUUl9PRkZTRVQoeCkgKDB4MTAwNCArIDB4MTAgKiAoeCkgKyAweDgpCj4+IMKg KyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfUk9VVEUgMHgxMDgwCj4+IMKgKyNkZWZpbmUgU1VO OElfTUlYRVJfQkxFTkRfUFJFTVVMVElQTFkgMHgxMDg0Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfQkxFTkRfQktDT0xPUiAweDEwODgKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9P VVRTSVpFIDB4MTA4Ywo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX01PREUoeCkgKDB4 MTA5MCArIDB4MDQgKiAoeCkpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQ0tfQ1RM IDB4MTBiMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX0NLX0NGRyAweDEwYjQKPj4g wqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9DS19NQVgoeCkgKDB4MTBjMCArIDB4MDQgKiAo eCkpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQ0tfTUlOKHgpICgweDEwZTAgKyAw eDA0ICogKHgpKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX09VVENUTCAweDEwZmMK Pj4gwqArCj4+IMKgKy8qIFRoZSBmb2xsb3dpbmcgbnVtYmVycyBhcmUgc29tZSBzdGlsbCB1bmtu b3duIG1hZ2ljIG51bWJlcnMgKi8KPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9BVFRS X0ZDT0xPUl9ERUYgMHhmZjAwMDAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX0ZD T0xPUl9DVExfREVGIDB4MDAwMDAxMDEKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9Q UkVNVUxUSVBMWV9ERUYgMHgwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQktDT0xP Ul9ERUYgMHhmZjAwMDAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX01PREVfREVG IDB4MDMwMTAzMDEKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9DS19DVExfREVGIDB4 MAo+PiDCoCsKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9PVVRDVExfSU5URVJMQUNF RCBCSVQoMSkKPj4gwqArCj4+IMKgKy8qCj4+IMKgKyAqIFZJIGNoYW5uZWxzIGFyZSBub3QgdXNl ZCBub3csIGJ1dCB0aGUgc3VwcG9ydCBvZiB0aGVtIG1heSBiZSBpbnRyb2R1Y2VkIGluCj4+IMKg KyAqIHRoZSBmdXR1cmUuCj4+IMKgKyAqLwo+PiDCoCsKPj4gwqArI2RlZmluZSBTVU44SV9NSVhF Ul9DSEFOX1VJX0xBWUVSX0FUVFIoY2gsIGxheWVyKSBcCj4+IMKgKyAoMHgyMDAwICsgMHgxMDAw ICogKGNoKSArIDB4MjAgKiAobGF5ZXIpICsgMHgwKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVS X0NIQU5fVUlfTEFZRVJfU0laRShjaCwgbGF5ZXIpIFwKPj4gwqArICgweDIwMDAgKyAweDEwMDAg KiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDQpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf Q0hBTl9VSV9MQVlFUl9DT09SRChjaCwgbGF5ZXIpIFwKPj4gwqArICgweDIwMDAgKyAweDEwMDAg KiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf Q0hBTl9VSV9MQVlFUl9QSVRDSChjaCwgbGF5ZXIpIFwKPj4gwqArICgweDIwMDAgKyAweDEwMDAg KiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweGMpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf Q0hBTl9VSV9MQVlFUl9UT1BfTEFERFIoY2gsIGxheWVyKSBcCj4+IMKgKyAoMHgyMDAwICsgMHgx MDAwICogKGNoKSArIDB4MjAgKiAobGF5ZXIpICsgMHgxMCkKPj4gwqArI2RlZmluZSBTVU44SV9N SVhFUl9DSEFOX1VJX0xBWUVSX0JPVF9MQUREUihjaCwgbGF5ZXIpIFwKPj4gwqArICgweDIwMDAg KyAweDEwMDAgKiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDE0KQo+PiDCoCsjZGVmaW5lIFNV TjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfRkNPTE9SKGNoLCBsYXllcikgXAo+PiDCoCsgKDB4MjAw MCArIDB4MTAwMCAqIChjaCkgKyAweDIwICogKGxheWVyKSArIDB4MTgpCj4+IMKgKyNkZWZpbmUg U1VOOElfTUlYRVJfQ0hBTl9VSV9UT1BfSEFERFIoY2gpICgweDIwMDAgKyAweDEwMDAgKiAoY2gp ICsgMHg4MCkKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9DSEFOX1VJX0JPVF9IQUREUihjaCkg KDB4MjAwMCArIDB4MTAwMCAqIChjaCkgKyAweDg0KQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVS X0NIQU5fVUlfT1ZMX1NJWkUoY2gpICgweDIwMDAgKyAweDEwMDAgKiAoY2gpICsgMHg4OCkKPj4g wqArCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0VOIEJJVCgw KQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9BTFBIQV9NT0RF X01BU0sgR0VOTUFTSygyLCAxKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZ RVJfQVRUUl9GQkZNVF9NQVNLIEdFTk1BU0soMTEsIDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhBX01BU0sgR0VOTUFTSygzMSwgMjQpCj4+IMKgKyNk ZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhBX01PREVfREVGICgxIDw8 IDEpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX0FS R0I4ODg4ICgwIDw8IDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9B VFRSX0ZCRk1UX1hSR0I4ODg4ICg0IDw8IDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hB Tl9VSV9MQVlFUl9BVFRSX0ZCRk1UX1JHQjg4OCAoOCA8PCA4KQo+PiDCoCsjZGVmaW5lIFNVTjhJ X01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9BTFBIQV9ERUYgKDB4ZmYgPDwgMjQpCj4+IMKgKwo+ PiDCoCsvKgo+PiDCoCsgKiBUaGVzZSBzdW4tZW5naW5lcyBhcmUgc3RpbGwgdW5rbm93biBub3cs IHRoZSBFTiByZWdpc3RlcnMgYXJlIGhlcmUgb25seSB0bwo+PiDCoCsgKiBiZSB1c2VkIHRvIGRp c2FibGUgdGhlc2Ugc3ViLWVuZ2luZXMuCj4+IMKgKyAqLwo+PiDCoCsjZGVmaW5lIFNVTjhJX01J WEVSX1ZTVV9FTiAweDIwMDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR1NVMV9FTiAweDMw MDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR1NVMl9FTiAweDQwMDAwCj4+IMKgKyNkZWZp bmUgU1VOOElfTUlYRVJfR1NVM19FTiAweDUwMDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf RkNFX0VOIDB4YTAwMDAKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CV1NfRU4gMHhhMjAwMAo+ PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0xUSV9FTiAweGE0MDAwCj4+IMKgKyNkZWZpbmUgU1VO OElfTUlYRVJfUEVBS19FTiAweGE2MDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQVNFX0VO IDB4YTgwMDAKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9GQ0NfRU4gMHhhYTAwMAo+PiDCoCsj ZGVmaW5lIFNVTjhJX01JWEVSX0RDU0NfRU4gMHhiMDAwMAo+PiDCoCsKPj4gwqArc3RydWN0IHN1 bjhpX21peGVyX2NmZyB7Cj4+IMKgKyBpbnQgdmlfbnVtOwo+PiDCoCsgaW50IHVpX251bTsKPj4g wqArfTsKPj4gwqArCj4+IMKgK3N0cnVjdCBzdW44aV9taXhlciB7Cj4+IMKgKyBzdHJ1Y3QgcmVn bWFwICpyZWdzOwo+PiDCoCsKPj4gwqArIGNvbnN0IHN0cnVjdCBzdW44aV9taXhlcl9jZmcgKmNm ZzsKPj4gwqArCj4+IMKgKyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7Cj4+IMKgKwo+PiDC oCsgc3RydWN0IGNsayAqYnVzX2NsazsKPj4gwqArIHN0cnVjdCBjbGsgKm1vZF9jbGs7Cj4+IMKg K307Cj4+IMKgKwo+PiDCoCt2b2lkIHN1bjhpX21peGVyX2NvbW1pdChzdHJ1Y3Qgc3VuOGlfbWl4 ZXIgKm1peGVyKTsKPj4gwqArCj4+IMKgK3ZvaWQgc3VuOGlfbWl4ZXJfbGF5ZXJfZW5hYmxlKHN0 cnVjdCBzdW44aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIGJvb2wgZW5hYmxlKTsK Pj4gwqAraW50IHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZChzdHJ1Y3Qgc3VuOGlfbWl4 ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4+ IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfZm9ybWF0cyhzdHJ1Y3Qgc3VuOGlfbWl4 ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7Cj4+ IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfYnVmZmVyKHN0cnVjdCBzdW44aV9taXhl ciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKPj4g wqArI2VuZGlmIC8qIF9TVU44SV9NSVhFUl9IXyAqLwo+PiDCoC0tCj4+IMKgMi4xMS4xCj4KPiBU aGFua3MsCj4gTWF4aW1lCj4KPiAtLQo+IE1heGltZSBSaXBhcmQsIEZyZWUgRWxlY3Ryb25zCj4g RW1iZWRkZWQgTGludXggYW5kIEtlcm5lbCBlbmdpbmVlcmluZwo+IGh0dHA6Ly9mcmVlLWVsZWN0 cm9ucy5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK