From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: Re: [PATCH i-g-t 2/3] lib: Add ALSA library with dedicated helpers Date: Mon, 21 Aug 2017 18:11:03 +0300 Message-ID: <1503328263.1171.9.camel@linux.intel.com> References: <20170817160557.14238-1-paul.kocialkowski@linux.intel.com> <20170817160557.14238-2-paul.kocialkowski@linux.intel.com> <1503073200.3702.6.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB1146E265 for ; Mon, 21 Aug 2017 15:11:07 +0000 (UTC) In-Reply-To: <1503073200.3702.6.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SGksCgpPbiBGcmksIDIwMTctMDgtMTggYXQgMTI6MjAgLTA0MDAsIEx5dWRlIFBhdWwgd3JvdGU6 Cj4gQW5kIHR3byBtb3JlIHNtYWxsIGNoYW5nZXMKPiAKPiBPbiBUaHUsIDIwMTctMDgtMTcgYXQg MTk6MDUgKzAzMDAsIFBhdWwgS29jaWFsa293c2tpIHdyb3RlOgo+ID4gVGhpcyBpbnRyb2R1Y2Vz IGFuIEFMU0EgbGlicmFyeSwgd2l0aCBkZWRpY2F0ZWQgaGVscGVycyBmb3IgaGFuZGxpbmcKPiA+ IHBsYXliYWNrIGFuZCBjYXB0dXJlLiBJdCBoYW5kbGVzIEFMU0EgZGV2aWNlIGlkZW50aWZpY2F0 aW9uIGFuZAo+ID4gY29uZmlndXJhdGlvbiBhcyB3ZWxsIGFzIGEgcnVuIGxvb3Agd2l0aCBjYWxs YmFjayBtZWNoYW5pc21zIGZvcgo+ID4gZmVlZGluZwo+ID4gb3V0cHV0IGRhdGEgYW5kIGhhbmRs aW5nIGlucHV0IGRhdGEuCj4gPiAKPiA+IFRoaXMgbGlicmFyeSBwYXZlcyB0aGUgd2F5IGZvciB0 ZXN0aW5nIGF1ZGlvIGdvaW5nIHRocm91Z2ggZGlzcGxheQo+ID4gY29ubmVjdG9ycywgc3VjaCBh cyBIRE1JLgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5r b2NpYWxrb3dza2lAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgY29uZmlndXJlLmFjICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwo+ID4gIC4uLi9pbnRl bC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3MueG1sICAgICAgIHwgICAxICsKPiA+ICBs aWIvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyAr Cj4gPiAgbGliL2lndC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwo+ID4gIGxpYi9pZ3RfYWxzYS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgNjI0Cj4gPiArKysrKysrKysrKysrKysrKysrKysKPiA+ICBsaWIvaWd0X2Fsc2Eu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2MCArKwo+ID4gIDYgZmls ZXMgY2hhbmdlZCwgNjk2IGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9hbHNhLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9hbHNhLmgKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwo+ID4gaW5kZXggNTBh YTg2YjUuLmU2NjI3M2E0IDEwMDY0NAo+ID4gLS0tIGEvY29uZmlndXJlLmFjCj4gPiArKysgYi9j b25maWd1cmUuYWMKPiA+IEBAIC0yMTksNiArMjE5LDkgQEAgaWYgdGVzdCAieCRlbmFibGVfY2hh bWVsaXVtIiA9IHh5ZXM7IHRoZW4KPiA+ICAJQUNfREVGSU5FKEhBVkVfQ0hBTUVMSVVNLCAxLCBb RW5hYmxlIENoYW1lbGl1bSBzdXBwb3J0XSkKPiA+ICBmaQo+ID4gIAo+ID4gK1BLR19DSEVDS19N T0RVTEVTKEFMU0EsIFthbHNhXSwgW2Fsc2E9eWVzXSwgW2Fsc2E9bm9dKQo+ID4gK0FNX0NPTkRJ VElPTkFMKEhBVkVfQUxTQSwgW3Rlc3QgIngkYWxzYSIgPSB4eWVzXSkKPiA+ICsKPiA+ICAjIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+ID4gLS0tCj4gPiAtLS0tLS0tLS0tLQo+ID4gICMJCQlDb25maWd1cmF0aW9uIG9wdGlv bnMKPiA+ICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gLS0tCj4gPiAtLS0tLS0tLS0tLQo+ID4gZGlmZiAtLWdpdCBh L2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9jcy54bWwK PiA+IGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2Nz LnhtbAo+ID4gaW5kZXggYzc3MTU5Y2YuLjBjMzRlNGE1IDEwMDY0NAo+ID4gLS0tIGEvZG9jcy9y ZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnhtbAo+ID4gKysr IGIvZG9jcy9yZWZlcmVuY2UvaW50ZWwtZ3B1LXRvb2xzL2ludGVsLWdwdS10b29scy1kb2NzLnht bAo+ID4gQEAgLTE2LDYgKzE2LDcgQEAKPiA+ICAgIDxjaGFwdGVyPgo+ID4gICAgICA8dGl0bGU+ QVBJIFJlZmVyZW5jZTwvdGl0bGU+Cj4gPiAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9kcm10 ZXN0LnhtbCIvPgo+ID4gKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2Fsc2EueG1sIi8+ Cj4gPiAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfYXVkaW8ueG1sIi8+Cj4gPiAgICAg IDx4aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfYXV4LnhtbCIvPgo+ID4gICAgICA8eGk6aW5jbHVk ZSBocmVmPSJ4bWwvaWd0X2NoYW1lbGl1bS54bWwiLz4KPiA+IGRpZmYgLS1naXQgYS9saWIvTWFr ZWZpbGUuYW0gYi9saWIvTWFrZWZpbGUuYW0KPiA+IGluZGV4IDVlYTA4MzE0Li4zZmYxNGY2NiAx MDA2NDQKPiA+IC0tLSBhL2xpYi9NYWtlZmlsZS5hbQo+ID4gKysrIGIvbGliL01ha2VmaWxlLmFt Cj4gPiBAQCAtMzgsNiArMzgsMTMgQEAgbGliX3NvdXJjZV9saXN0ICs9CQlcCj4gPiAgCSQoTlVM TCkKPiA+ICBlbmRpZgo+ID4gIAo+ID4gK2lmIEhBVkVfQUxTQQo+ID4gK2xpYl9zb3VyY2VfbGlz dCArPQkJXAo+ID4gKwlpZ3RfYWxzYS5jCQlcCj4gPiArCWlndF9hbHNhLmgJCVwKPiA+ICsJJChO VUxMKQo+ID4gK2VuZGlmCj4gPiArCj4gPiAgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikK PiA+ICBBTV9DRkxBR1MgPSBcCj4gPiAgCSAgICAkKENXQVJORkxBR1MpIFwKPiA+IGRpZmYgLS1n aXQgYS9saWIvaWd0LmggYi9saWIvaWd0LmgKPiA+IGluZGV4IGE3NWQyZGI3Li5lYmY5MjM0OSAx MDA2NDQKPiA+IC0tLSBhL2xpYi9pZ3QuaAo+ID4gKysrIGIvbGliL2lndC5oCj4gPiBAQCAtMzUs NiArMzUsNyBAQAo+ID4gICNpbmNsdWRlICJpZ3RfZHVtbXlsb2FkLmgiCj4gPiAgI2luY2x1ZGUg ImlndF9mYi5oIgo+ID4gICNpbmNsdWRlICJpZ3RfZnJhbWUuaCIKPiA+ICsjaW5jbHVkZSAiaWd0 X2Fsc2EuaCIKPiA+ICAjaW5jbHVkZSAiaWd0X2F1ZGlvLmgiCj4gPiAgI2luY2x1ZGUgImlndF9n dC5oIgo+ID4gICNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9h bHNhLmMgYi9saWIvaWd0X2Fsc2EuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4 IDAwMDAwMDAwLi5kOGJkMDg3Mwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGliL2lndF9h bHNhLmMKPiA+IEBAIC0wLDAgKzEsNjI0IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkg MjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+IG9idGFpbmluZyBh Cj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZQo+ID4gIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiA+IGxpbWl0YXRp b24KPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwKPiA+IHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvCj4gPiB3aG9tCj4gPiB0 aGUKPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZwo+ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcKPiA+IHRo ZSBuZXh0Cj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB UlJBTlRZIE9GIEFOWSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNIQU5UQUJJ TElUWSwKPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8KPiA+IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTCj4g PiBPUiBPVEhFUgo+ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ID4gQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+IE9U SEVSIERFQUxJTkdTCj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICogQXV0 aG9yczoKPiA+ICsgKiAgUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGxpbnV4 LmludGVsLmNvbT4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gPiAr Cj4gPiArI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgImln dC5oIgo+ID4gKwo+ID4gKyNkZWZpbmUgSEFORExFU19NQVgJOAo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIFNFQ1RJT046aWd0X2Fsc2EKPiA+ICsgKiBAc2hvcnRfZGVzY3JpcHRpb246IExpYnJhcnkg d2l0aCBBTFNBIGhlbHBlcnMKPiA+ICsgKiBAdGl0bGU6IEFMU0EKPiA+ICsgKiBAaW5jbHVkZTog aWd0X2Fsc2EuaAo+ID4gKyAqCj4gPiArICogVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGhlbHBlcnMg Zm9yIEFMU0EgcGxheWJhY2sgYW5kIGNhcHR1cmUuCj4gPiArICovCj4gPiArCj4gPiArc3RydWN0 IGFsc2Egewo+ID4gKwlzbmRfcGNtX3QgKm91dHB1dF9oYW5kbGVzW0hBTkRMRVNfTUFYXTsKPiA+ ICsJaW50IG91dHB1dF9oYW5kbGVzX2NvdW50Owo+ID4gKwlpbnQgb3V0cHV0X3NhbXBsaW5nX3Jh dGU7Cj4gPiArCWludCBvdXRwdXRfY2hhbm5lbHM7Cj4gPiArCj4gPiArCWludCAoKm91dHB1dF9j YWxsYmFjaykodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50Cj4gPiBzYW1wbGVzKTsKPiA+ ICsJdm9pZCAqb3V0cHV0X2NhbGxiYWNrX2RhdGE7Cj4gPiArCWludCBvdXRwdXRfc2FtcGxlc190 cmlnZ2VyOwo+ID4gKwo+ID4gKwlzbmRfcGNtX3QgKmlucHV0X2hhbmRsZTsKPiA+ICsJaW50IGlu cHV0X3NhbXBsaW5nX3JhdGU7Cj4gPiArCWludCBpbnB1dF9jaGFubmVsczsKPiA+ICsKPiA+ICsJ aW50ICgqaW5wdXRfY2FsbGJhY2spKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIsIGludAo+ID4g c2FtcGxlcyk7Cj4gPiArCXZvaWQgKmlucHV0X2NhbGxiYWNrX2RhdGE7Cj4gPiArCWludCBpbnB1 dF9zYW1wbGVzX3RyaWdnZXI7Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhbHNhX2Vy cm9yX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0Cj4gPiBjaGFyICpm dW5jdGlvbiwKPiA+ICsJCQkgICAgICAgaW50IGVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pCj4g PiArewo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJaWd0X2RlYnVnKCJbQUxTQV0gJXM6ICVzXG4iLCBm dW5jdGlvbiwKPiA+IHNuZF9zdHJlcnJvcihlcnIpKTsKPiA+ICt9Cj4gCj4gV291bGQgYmUgYSBn b29kIGlkZWEgdG8gYWRkIGFuIF9fYXR0cmlidXRlX18oKHByaW50ZikpIGhlcmUKCldlbGwsIHRo YXQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrIGZvciB0aGUgQUxTQSBsaWJy YXJ5LCBzbwp0aGVyZSB3b24ndCBldmVyIGJlIGNvZGUgb3V0c2lkZSBvZiB0aGUgQUxTQSBsaWJy YXJ5IHRoYXQgbWFrZXMgY2FsbHMgdG8KaXQuIFRodXMsIG5vIGNhbGwgdG8gdGhlIGZ1bmN0aW9u IHdpbGwgYmUgYnVpbHQsIHdoaWNoIHJlbmRlcnMgdGhlCmF0dHJpYnV0ZSB1c2VsZXNzLgoKPiA+ ICsKPiA+ICsvKioKPiA+ICsgKiBhbHNhX2luaXQ6Cj4gPiArICogQWxsb2NhdGUgYW5kIGluaXRp YWxpemUgYW4gYWxzYSBzdHJ1Y3R1cmUgYW5kIGNvbmZpZ3VyZSB0aGUKPiA+IGVycm9yCj4gPiBo YW5kbGVyLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczogQSBuZXdseS1hbGxvY2F0ZWQgYWxzYSBz dHJ1Y3R1cmUKPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgYWxzYSAqYWxzYV9pbml0KHZvaWQpCj4gPiAr ewo+ID4gKwlzdHJ1Y3QgYWxzYSAqYWxzYTsKPiA+ICsKPiA+ICsJYWxzYSA9IG1hbGxvYyhzaXpl b2Yoc3RydWN0IGFsc2EpKTsKPiA+ICsJbWVtc2V0KGFsc2EsIDAsIHNpemVvZihzdHJ1Y3QgYWxz YSkpOwo+ID4gKwo+ID4gKwkvKiBSZWRpcmVjdCBlcnJvcnMgdG8gaWd0X2RlYnVnIGluc3RlYWQg b2Ygc3RkZXJyLiAqLwo+ID4gKwlzbmRfbGliX2Vycm9yX3NldF9oYW5kbGVyKGFsc2FfZXJyb3Jf aGFuZGxlcik7Cj4gPiArCj4gPiArCXJldHVybiBhbHNhOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgY2hhciAqYWxzYV9yZXNvbHZlX2luZGVudGlmaWVyKGNvbnN0IGNoYXIgKmRldmljZV9uYW1l LCBpbnQKPiA+IHNraXApCj4gPiArewo+ID4gKwlzbmRfY3RsX2NhcmRfaW5mb190ICpjYXJkX2lu Zm87Cj4gPiArCXNuZF9wY21faW5mb190ICpwY21faW5mbzsKPiA+ICsJc25kX2N0bF90ICpoYW5k bGUgPSBOVUxMOwo+ID4gKwljb25zdCBjaGFyICpwY21fbmFtZTsKPiA+ICsJY2hhciAqaWRlbnRp ZmllciA9IE5VTEw7Cj4gPiArCWNoYXIgbmFtZVszMl07Cj4gPiArCWludCBjYXJkOwo+ID4gKwlp bnQgZGV2Owo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlzbmRfY3RsX2NhcmRfaW5mb19hbGxv Y2EoJmNhcmRfaW5mbyk7Cj4gPiArCXNuZF9wY21faW5mb19hbGxvY2EoJnBjbV9pbmZvKTsKPiA+ ICsKPiA+ICsJY2FyZCA9IC0xOwo+IAo+IEp1c3Qgc2V0IGNhcmQgPSAtMSBhdCBpdCdzIGRlY2xh cmF0aW9uCgpTdXJlIHRoaW5nIQoKPiA+ICsKPiA+ICsJLyogRmlyc3QgdHJ5IHRvIG9wZW4gdGhl IGRldmljZSBhcy1pcy4gKi8KPiA+ICsJaWYgKCFza2lwKSB7Cj4gPiArCQlyZXQgPSBzbmRfY3Rs X29wZW4oJmhhbmRsZSwgZGV2aWNlX25hbWUsIDApOwo+ID4gKwkJaWYgKCFyZXQpIHsKPiA+ICsJ CQlpZGVudGlmaWVyID0gc3RyZHVwKGRldmljZV9uYW1lKTsKPiA+ICsJCQlnb3RvIHJlc29sdmVk Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWRvIHsKPiA+ICsJCXJldCA9IHNuZF9jYXJk X25leHQoJmNhcmQpOwo+ID4gKwkJaWYgKHJldCA8IDAgfHwgY2FyZCA8IDApCj4gPiArCQkJYnJl YWs7Cj4gPiArCj4gPiArCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJodzolZCIsIGNh cmQpOwo+ID4gKwo+ID4gKwkJcmV0ID0gc25kX2N0bF9vcGVuKCZoYW5kbGUsIG5hbWUsIDApOwo+ ID4gKwkJaWYgKHJldCA8IDApCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlyZXQgPSBz bmRfY3RsX2NhcmRfaW5mbyhoYW5kbGUsIGNhcmRfaW5mbyk7Cj4gPiArCQlpZiAocmV0IDwgMCkg ewo+ID4gKwkJCXNuZF9jdGxfY2xvc2UoaGFuZGxlKTsKPiA+ICsJCQloYW5kbGUgPSBOVUxMOwo+ ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZGV2ID0gLTE7Cj4gPiArCj4g PiArCQlkbyB7Cj4gPiArCQkJcmV0ID0gc25kX2N0bF9wY21fbmV4dF9kZXZpY2UoaGFuZGxlLAo+ ID4gJmRldik7Cj4gPiArCQkJaWYgKHJldCA8IDAgfHwgZGV2IDwgMCkKPiA+ICsJCQkJYnJlYWs7 Cj4gPiArCj4gPiArCQkJc25kX3BjbV9pbmZvX3NldF9kZXZpY2UocGNtX2luZm8sIGRldik7Cj4g PiArCQkJc25kX3BjbV9pbmZvX3NldF9zdWJkZXZpY2UocGNtX2luZm8sIDApOwo+ID4gKwo+ID4g KwkJCXJldCA9IHNuZF9jdGxfcGNtX2luZm8oaGFuZGxlLCBwY21faW5mbyk7Cj4gPiArCQkJaWYg KHJldCA8IDApCj4gPiArCQkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJCXBjbV9uYW1lID0gc25k X3BjbV9pbmZvX2dldF9uYW1lKHBjbV9pbmZvKTsKPiA+ICsJCQlpZiAoIXBjbV9uYW1lKQo+ID4g KwkJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCQlyZXQgPSBzdHJuY21wKGRldmljZV9uYW1lLCBw Y21fbmFtZSwKPiA+ICsJCQkJICAgICAgc3RybGVuKGRldmljZV9uYW1lKSk7Cj4gPiArCj4gPiAr CQkJaWYgKHJldCA9PSAwKSB7Cj4gPiArCQkJCWlmIChza2lwID4gMCkgewo+ID4gKwkJCQkJc2tp cC0tOwo+ID4gKwkJCQkJY29udGludWU7Cj4gPiArCQkJCX0KPiA+ICsKPiA+ICsJCQkJc25wcmlu dGYobmFtZSwgc2l6ZW9mKG5hbWUpLAo+ID4gImh3OiVkLCVkIiwgY2FyZCwKPiA+ICsJCQkJCSBk ZXYpOwo+ID4gKwo+ID4gKwkJCQlpZGVudGlmaWVyID0gc3RyZHVwKG5hbWUpOwo+ID4gKwkJCQln b3RvIHJlc29sdmVkOwo+ID4gKwkJCX0KPiA+ICsJCX0gd2hpbGUgKGRldiA+PSAwKTsKPiA+ICsK PiA+ICsJCXNuZF9jdGxfY2xvc2UoaGFuZGxlKTsKPiA+ICsJCWhhbmRsZSA9IE5VTEw7Cj4gPiAr CX0gd2hpbGUgKGNhcmQgPj0gMCk7Cj4gPiArCj4gPiArcmVzb2x2ZWQ6Cj4gPiArCWlmIChoYW5k bGUpCj4gPiArCQlzbmRfY3RsX2Nsb3NlKGhhbmRsZSk7Cj4gPiArCj4gPiArCXJldHVybiBpZGVu dGlmaWVyOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBhbHNhX29wZW5fb3V0cHV0Ogo+ ID4gKyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCj4gPiArICogQGRldmljZV9u YW1lOiBUaGUgbmFtZSBwcmVmaXggb2YgdGhlIG91dHB1dCBkZXZpY2UocykgdG8gb3Blbgo+ID4g KyAqCj4gPiArICogT3BlbiBBTFNBIG91dHB1dCBkZXZpY2VzIHdob3NlIG5hbWUgcHJlZml4ZXMg bWF0Y2ggdGhlIHByb3ZpZGVkCj4gPiBuYW1lIHByZWZpeC4KPiA+ICsgKgo+ID4gKyAqIFJldHVy bnM6IEFuIGludGVnZXIgZXF1YWwgdG8gemVybyBmb3Igc3VjY2VzcyBhbmQgbmVnYXRpdmUgZm9y Cj4gPiBmYWlsdXJlCj4gPiArICovCj4gPiAraW50IGFsc2Ffb3Blbl9vdXRwdXQoc3RydWN0IGFs c2EgKmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKQo+ID4gK3sKPiA+ICsJc25kX3BjbV90 ICpoYW5kbGU7Cj4gPiArCWNoYXIgKmlkZW50aWZpZXI7Cj4gPiArCWludCBza2lwOwo+ID4gKwlp bnQgaW5kZXg7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCXNraXAgPSBhbHNhLT5vdXRwdXRf aGFuZGxlc19jb3VudDsKPiA+ICsJaW5kZXggPSBhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudDsK PiA+ICsKPiA+ICsJd2hpbGUgKGluZGV4IDwgSEFORExFU19NQVgpIHsKPiA+ICsJCWlkZW50aWZp ZXIgPSBhbHNhX3Jlc29sdmVfaW5kZW50aWZpZXIoZGV2aWNlX25hbWUsCj4gPiBza2lwKyspOwo+ ID4gKwkJaWYgKCFpZGVudGlmaWVyKQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJcmV0ID0g c25kX3BjbV9vcGVuKCZoYW5kbGUsIGlkZW50aWZpZXIsCj4gPiBTTkRfUENNX1NUUkVBTV9QTEFZ QkFDSywKPiA+ICsJCQkJICAgU05EX1BDTV9OT05CTE9DSyk7Cj4gPiArCQlpZiAocmV0IDwgMCkg ewo+ID4gKwkJCWZyZWUoaWRlbnRpZmllcik7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4g PiArCj4gPiArCQlpZ3RfZGVidWcoIk9wZW5lZCBvdXRwdXQgJXNcbiIsIGlkZW50aWZpZXIpOwo+ ID4gKwo+ID4gKwkJYWxzYS0+b3V0cHV0X2hhbmRsZXNbaW5kZXgrK10gPSBoYW5kbGU7Cj4gPiAr CQlmcmVlKGlkZW50aWZpZXIpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmIChpbmRleCA9PSAwKQo+ ID4gKwkJcmV0dXJuIC0xOwo+ID4gKwo+ID4gKwlhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudCA9 IGluZGV4Owo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiAr ICogYWxzYV9vcGVuX2lucHV0Ogo+ID4gKyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0 dXJlCj4gPiArICogQGRldmljZV9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZGV2aWNlIHRv IG9wZW4KPiA+ICsgKgo+ID4gKyAqIE9wZW4gdGhlIEFMU0EgaW5wdXQgZGV2aWNlIHdob3NlIG5h bWUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgbmFtZQo+ID4gcHJlZml4Lgo+ID4gKyAqCj4gPiArICog UmV0dXJuczogQW4gaW50ZWdlciBlcXVhbCB0byB6ZXJvIGZvciBzdWNjZXNzIGFuZCBuZWdhdGl2 ZSBmb3IKPiA+IGZhaWx1cmUKPiA+ICsgKi8KPiA+ICtpbnQgYWxzYV9vcGVuX2lucHV0KHN0cnVj dCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSkKPiA+ICt7Cj4gPiArCXNuZF9w Y21fdCAqaGFuZGxlOwo+ID4gKwljaGFyICppZGVudGlmaWVyOwo+ID4gKwlpbnQgcmV0Owo+ID4g Kwo+ID4gKwlpZGVudGlmaWVyID0gYWxzYV9yZXNvbHZlX2luZGVudGlmaWVyKGRldmljZV9uYW1l LCAwKTsKPiA+ICsKPiA+ICsJcmV0ID0gc25kX3BjbV9vcGVuKCZoYW5kbGUsIGRldmljZV9uYW1l LAo+ID4gU05EX1BDTV9TVFJFQU1fQ0FQVFVSRSwKPiA+ICsJCQkgICBTTkRfUENNX05PTkJMT0NL KTsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlnb3RvIGNvbXBsZXRlOwo+ID4gKwo+ID4gKwlp Z3RfZGVidWcoIk9wZW5lZCBpbnB1dCAlc1xuIiwgaWRlbnRpZmllcik7Cj4gPiArCj4gPiArCWFs c2EtPmlucHV0X2hhbmRsZSA9IGhhbmRsZTsKPiA+ICsKPiA+ICsJcmV0ID0gMDsKPiA+ICsKPiA+ ICtjb21wbGV0ZToKPiA+ICsJZnJlZShpZGVudGlmaWVyKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJl dDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogYWxzYV9jbG9zZV9vdXRwdXQ6Cj4gPiAr ICogQGFsc2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiA+ICsgKgo+ID4gKyAqIENsb3Nl IGFsbCB0aGUgb3BlbiBBTFNBIG91dHB1dHMuCj4gPiArICovCj4gPiArdm9pZCBhbHNhX2Nsb3Nl X291dHB1dChzdHJ1Y3QgYWxzYSAqYWxzYSkKPiA+ICt7Cj4gPiArCXNuZF9wY21fdCAqaGFuZGxl Owo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IGFsc2EtPm91dHB1dF9o YW5kbGVzX2NvdW50OyBpKyspIHsKPiA+ICsJCWhhbmRsZSA9IGFsc2EtPm91dHB1dF9oYW5kbGVz W2ldOwo+ID4gKwkJaWYgKCFoYW5kbGUpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiArCQlz bmRfcGNtX2Nsb3NlKGhhbmRsZSk7Cj4gPiArCQlhbHNhLT5vdXRwdXRfaGFuZGxlc1tpXSA9IE5V TEw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJYWxzYS0+b3V0cHV0X2hhbmRsZXNfY291bnQgPSAwOwo+ ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBhbHNhX2Nsb3NlX291dHB1dDoKPiA+ICsgKiBA YWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQo+ID4gKyAqCj4gPiArICogQ2xvc2UgdGhl IG9wZW4gQUxTQSBpbnB1dC4KPiA+ICsgKi8KPiA+ICt2b2lkIGFsc2FfY2xvc2VfaW5wdXQoc3Ry dWN0IGFsc2EgKmFsc2EpCj4gPiArewo+ID4gKwlzbmRfcGNtX3QgKmhhbmRsZSA9IGFsc2EtPmlu cHV0X2hhbmRsZTsKPiA+ICsJaWYgKCFoYW5kbGUpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiAr CXNuZF9wY21fY2xvc2UoaGFuZGxlKTsKPiA+ICsJYWxzYS0+aW5wdXRfaGFuZGxlID0gTlVMTDsK PiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgYWxzYV90ZXN0X2NvbmZpZ3VyYXRpb24oc25k X3BjbV90ICpoYW5kbGUsIGludAo+ID4gY2hhbm5lbHMsCj4gPiArCQkJICAgICBpbnQgc2FtcGxp bmdfcmF0ZSkKPiA+ICt7Cj4gPiArCXNuZF9wY21faHdfcGFyYW1zX3QgKnBhcmFtczsKPiA+ICsJ aW50IHJldDsKPiA+ICsKPiA+ICsJc25kX3BjbV9od19wYXJhbXNfYWxsb2NhKCZwYXJhbXMpOwo+ ID4gKwo+ID4gKwlyZXQgPSBzbmRfcGNtX2h3X3BhcmFtc19hbnkoaGFuZGxlLCBwYXJhbXMpOwo+ ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsJcmV0ID0g c25kX3BjbV9od19wYXJhbXNfdGVzdF9yYXRlKGhhbmRsZSwgcGFyYW1zLAo+ID4gc2FtcGxpbmdf cmF0ZSwgMCk7Cj4gPiArCWlmIChyZXQgPCAwKQo+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gKwo+ ID4gKwlyZXQgPSBzbmRfcGNtX2h3X3BhcmFtc190ZXN0X2NoYW5uZWxzKGhhbmRsZSwgcGFyYW1z LAo+ID4gY2hhbm5lbHMpOwo+ID4gKwlpZiAocmV0IDwgMCkKPiA+ICsJCXJldHVybiBmYWxzZTsK PiA+ICsKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGFs c2FfdGVzdF9vdXRwdXRfY29uZmlndXJhdGlvbjoKPiA+ICsgKiBAYWxzYTogVGhlIHRhcmdldCBh bHNhIHN0cnVjdHVyZQo+ID4gKyAqIEBjaGFubmVsczogVGhlIG51bWJlciBvZiBjaGFubmVscyB0 byB0ZXN0Cj4gPiArICogQHNhbXBsaW5nX3JhdGU6IFRoZSBzYW1wbGluZyByYXRlIHRvIHRlc3QK PiA+ICsgKgo+ID4gKyAqIFRlc3QgdGhlIG91dHB1dCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBi eSBAY2hhbm5lbHMgYW5kCj4gPiBAc2FtcGxpbmdfcmF0ZQo+ID4gKyAqIGZvciB0aGUgb3V0cHV0 IGRldmljZXMuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3 aGV0aGVyIHRoZSB0ZXN0IHN1Y2NlZWRlZAo+ID4gKyAqLwo+ID4gK2Jvb2wgYWxzYV90ZXN0X291 dHB1dF9jb25maWd1cmF0aW9uKHN0cnVjdCBhbHNhICphbHNhLCBpbnQKPiA+IGNoYW5uZWxzLAo+ ID4gKwkJCSAgCSAgICBpbnQgc2FtcGxpbmdfcmF0ZSkKPiA+ICt7Cj4gPiArCXNuZF9wY21fdCAq aGFuZGxlOwo+ID4gKwlib29sIHJldDsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKSB7Cj4gPiArCQloYW5kbGUg PSBhbHNhLT5vdXRwdXRfaGFuZGxlc1tpXTsKPiA+ICsKPiA+ICsJCXJldCA9IGFsc2FfdGVzdF9j b25maWd1cmF0aW9uKGhhbmRsZSwgY2hhbm5lbHMsCj4gPiBzYW1wbGluZ19yYXRlKTsKPiA+ICsJ CWlmICghcmV0KQo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gdHJ1ZTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogYWxzYV90ZXN0X2lucHV0X2Nv bmZpZ3VyYXRpb246Cj4gPiArICogQGFsc2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiA+ ICsgKiBAY2hhbm5lbHM6IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gdGVzdAo+ID4gKyAqIEBz YW1wbGluZ19yYXRlOiBUaGUgc2FtcGxpbmcgcmF0ZSB0byB0ZXN0Cj4gPiArICoKPiA+ICsgKiBU ZXN0IHRoZSBpbnB1dCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSBAY2hhbm5lbHMgYW5kCj4g PiBAc2FtcGxpbmdfcmF0ZQo+ID4gKyAqIGZvciB0aGUgaW5wdXQgZGV2aWNlLgo+ID4gKyAqCj4g PiArICogUmV0dXJuczogQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGVzdCBzdWNj ZWVkZWQKPiA+ICsgKi8KPiA+ICtib29sIGFsc2FfdGVzdF9pbnB1dF9jb25maWd1cmF0aW9uKHN0 cnVjdCBhbHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gPiArCQkJICAJICAgaW50IHNhbXBsaW5n X3JhdGUpCj4gPiArewo+ID4gKwlyZXR1cm4gYWxzYV90ZXN0X2NvbmZpZ3VyYXRpb24oYWxzYS0+ aW5wdXRfaGFuZGxlLAo+ID4gY2hhbm5lbHMsCj4gPiArCQkJCSAgICAgICBzYW1wbGluZ19yYXRl KTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogYWxzYV9jb25maWd1cmVfb3V0cHV0Ogo+ ID4gKyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCj4gPiArICogQGNoYW5uZWxz OiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHRlc3QKPiA+ICsgKiBAc2FtcGxpbmdfcmF0ZTog VGhlIHNhbXBsaW5nIHJhdGUgdG8gdGVzdAo+ID4gKyAqCj4gPiArICogQ29uZmlndXJlIHRoZSBv dXRwdXQgZGV2aWNlcyB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieQo+ID4gQGNo YW5uZWxzCj4gPiArICogYW5kIEBzYW1wbGluZ19yYXRlLgo+ID4gKyAqLwo+ID4gK3ZvaWQgYWxz YV9jb25maWd1cmVfb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gPiAr CQkJICAgaW50IHNhbXBsaW5nX3JhdGUpCj4gPiArewo+ID4gKwlzbmRfcGNtX3QgKmhhbmRsZTsK PiA+ICsJaW50IHJldDsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBh bHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKSB7Cj4gPiArCQloYW5kbGUgPSBhbHNhLT5v dXRwdXRfaGFuZGxlc1tpXTsKPiA+ICsKPiA+ICsJCXJldCA9IHNuZF9wY21fc2V0X3BhcmFtcyho YW5kbGUsCj4gPiBTTkRfUENNX0ZPUk1BVF9TMTZfTEUsCj4gPiArCQkJCQkgU05EX1BDTV9BQ0NF U1NfUldfSU5URVJMRUEKPiA+IFYKPiA+IEVELAo+ID4gKwkJCQkJIGNoYW5uZWxzLCBzYW1wbGlu Z19yYXRlLAo+ID4gMCwKPiA+IDApOwo+ID4gKwkJaWd0X2Fzc2VydChyZXQgPj0gMCk7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJYWxzYS0+b3V0cHV0X2NoYW5uZWxzID0gY2hhbm5lbHM7Cj4gPiArCWFs c2EtPm91dHB1dF9zYW1wbGluZ19yYXRlID0gc2FtcGxpbmdfcmF0ZTsKPiA+ICt9Cj4gPiArCj4g PiArLyoqCj4gPiArICogYWxzYV9jb25maWd1cmVfaW5wdXQ6Cj4gPiArICogQGFsc2E6IFRoZSB0 YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiA+ICsgKiBAY2hhbm5lbHM6IFRoZSBudW1iZXIgb2YgY2hh bm5lbHMgdG8gdGVzdAo+ID4gKyAqIEBzYW1wbGluZ19yYXRlOiBUaGUgc2FtcGxpbmcgcmF0ZSB0 byB0ZXN0Cj4gPiArICoKPiA+ICsgKiBDb25maWd1cmUgdGhlIGlucHV0IGRldmljZSB3aXRoIHRo ZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieQo+ID4gQGNoYW5uZWxzCj4gPiArICogYW5kIEBz YW1wbGluZ19yYXRlLgo+ID4gKyAqLwo+ID4gK3ZvaWQgYWxzYV9jb25maWd1cmVfaW5wdXQoc3Ry dWN0IGFsc2EgKmFsc2EsIGludCBjaGFubmVscywKPiA+ICsJCQkgIGludCBzYW1wbGluZ19yYXRl KQo+ID4gK3sKPiA+ICsJc25kX3BjbV90ICpoYW5kbGU7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4g PiArCWhhbmRsZSA9IGFsc2EtPmlucHV0X2hhbmRsZTsKPiA+ICsKPiA+ICsJcmV0ID0gc25kX3Bj bV9zZXRfcGFyYW1zKGhhbmRsZSwgU05EX1BDTV9GT1JNQVRfUzE2X0xFLAo+ID4gKwkJCQkgU05E X1BDTV9BQ0NFU1NfUldfSU5URVJMRUFWRUQsCj4gPiBjaGFubmVscywKPiA+ICsJCQkJIHNhbXBs aW5nX3JhdGUsIDAsIDApOwo+ID4gKwlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPiA+ICsKPiA+ICsJ YWxzYS0+aW5wdXRfY2hhbm5lbHMgPSBjaGFubmVsczsKPiA+ICsJYWxzYS0+aW5wdXRfc2FtcGxp bmdfcmF0ZSA9IHNhbXBsaW5nX3JhdGU7Cj4gPiArCj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4g KyAqIGFsc2FfcmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrOgo+ID4gKyAqIEBhbHNhOiBUaGUgdGFy Z2V0IGFsc2Egc3RydWN0dXJlCj4gPiArICogQGNhbGxiYWNrOiBUaGUgY2FsbGJhY2sgZnVuY3Rp b24gdG8gY2FsbCB0byBmaWxsIG91dHB1dCBkYXRhCj4gPiArICogQGNhbGxiYWNrX2RhdGE6IFRo ZSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sKPiA+IGZ1bmN0aW9uCj4gPiAr ICogQHNhbXBsZXNfdHJpZ2dlcjogVGhlIHJlcXVpcmVkIG51bWJlciBvZiBzYW1wbGVzIHRvIHRy aWdnZXIgdGhlCj4gPiBjYWxsYmFjawo+ID4gKyAqCj4gPiArICogUmVnaXN0ZXIgYSBjYWxsYmFj ayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gZmlsbCBvdXRwdXQgZGF0YQo+ID4gZHVyaW5nIGEg cnVuLgo+ID4gKyAqIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBAc2FtcGxlc190cmlnZ2Vy IHNhbXBsZXMgYXJlCj4gPiByZXF1aXJlZC4KPiA+ICsgKgo+ID4gKyAqIFRoZSBjYWxsYmFjayBz aG91bGQgcmV0dXJuIGFuIGludGVnZXIgZXF1YWwgdG8gemVybyBmb3Igc3VjY2Vzcwo+ID4gYW5k IG5lZ2F0aXZlCj4gPiArICogZm9yIGZhaWx1cmUuCj4gPiArICovCj4gPiArdm9pZCBhbHNhX3Jl Z2lzdGVyX291dHB1dF9jYWxsYmFjayhzdHJ1Y3QgYWxzYSAqYWxzYSwKPiA+ICsJCQkJICAgaW50 ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEsCj4gPiBzaG9ydAo+ID4gKmJ1ZmZlciwgaW50IHNhbXBs ZXMpLAo+ID4gKwkJCQkgICB2b2lkICpjYWxsYmFja19kYXRhLCBpbnQKPiA+IHNhbXBsZXNfdHJp Z2dlcikKPiA+ICt7Cj4gPiArCWFsc2EtPm91dHB1dF9jYWxsYmFjayA9IGNhbGxiYWNrOwo+ID4g KwlhbHNhLT5vdXRwdXRfY2FsbGJhY2tfZGF0YSA9IGNhbGxiYWNrX2RhdGE7Cj4gPiArCWFsc2Et Pm91dHB1dF9zYW1wbGVzX3RyaWdnZXIgPSBzYW1wbGVzX3RyaWdnZXI7Cj4gPiArfQo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIGFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2s6Cj4gPiArICogQGFs c2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiA+ICsgKiBAY2FsbGJhY2s6IFRoZSBjYWxs YmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaW5wdXQgZGF0YSBpcwo+ID4gYXZhaWxhYmxlCj4g PiArICogQGNhbGxiYWNrX2RhdGE6IFRoZSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY2Fs bGJhY2sKPiA+IGZ1bmN0aW9uCj4gPiArICogQHNhbXBsZXNfdHJpZ2dlcjogVGhlIHJlcXVpcmVk IG51bWJlciBvZiBzYW1wbGVzIHRvIHRyaWdnZXIgdGhlCj4gPiBjYWxsYmFjawo+ID4gKyAqCj4g PiArICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBpbnB1 dCBkYXRhIGlzCj4gPiBhdmFpbGFibGUgZHVyaW5nCj4gPiArICogYSBydW4uIFRoZSBjYWxsYmFj ayBpcyBjYWxsZWQgd2hlbiBAc2FtcGxlc190cmlnZ2VyIHNhbXBsZXMgYXJlCj4gPiBhdmFpbGFi bGUuCj4gPiArICoKPiA+ICsgKiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2Vy IGVxdWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MsCj4gPiBuZWdhdGl2ZSBmb3IKPiA+ICsgKiBmYWls dXJlIGFuZCBwb3NpdGl2ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBydW4gc2hvdWxkIHN0b3AuCj4g PiArICovCj4gPiArdm9pZCBhbHNhX3JlZ2lzdGVyX2lucHV0X2NhbGxiYWNrKHN0cnVjdCBhbHNh ICphbHNhLAo+ID4gKwkJCQkgIGludCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhLCBzaG9ydAo+ID4g KmJ1ZmZlciwgaW50IHNhbXBsZXMpLAo+ID4gKwkJCQkgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGlu dAo+ID4gc2FtcGxlc190cmlnZ2VyKQo+ID4gK3sKPiA+ICsJYWxzYS0+aW5wdXRfY2FsbGJhY2sg PSBjYWxsYmFjazsKPiA+ICsJYWxzYS0+aW5wdXRfY2FsbGJhY2tfZGF0YSA9IGNhbGxiYWNrX2Rh dGE7Cj4gPiArCWFsc2EtPmlucHV0X3NhbXBsZXNfdHJpZ2dlciA9IHNhbXBsZXNfdHJpZ2dlcjsK PiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogYWxzYV9ydW46Cj4gPiArICogQGFsc2E6IFRo ZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiA+ICsgKiBAZHVyYXRpb25fbXM6IFRoZSBtYXhpbXVt IGR1cmF0aW9uIG9mIHRoZSBydW4gaW4gbWlsbGlzZWNvbmRzCj4gPiArICoKPiA+ICsgKiBSdW4g QUxTQSBwbGF5YmFjayBhbmQgY2FwdHVyZSBvbiB0aGUgaW5wdXQgYW5kIG91dHB1dCBkZXZpY2Vz Cj4gPiBmb3IKPiA+IGF0Cj4gPiArICogbW9zdCBAZHVyYXRpb25fbXMgbWlsbGlzZWNvbmRzLCBj YWxsaW5nIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrcwo+ID4gd2hlbiBuZWVkZWQuCj4gPiArICoK PiA+ICsgKiBSZXR1cm5zOiBBbiBpbnRlZ2VyIGVxdWFsIHRvIHplcm8gZm9yIHN1Y2Nlc3MsIHBv c2l0aXZlIGZvciBhCj4gPiBzdG9wIGNhdXNlZAo+ID4gKyAqIGJ5IHRoZSBpbnB1dCBjYWxsYmFj ayBhbmQgbmVnYXRpdmUgZm9yIGZhaWx1cmUKPiA+ICsgKi8KPiA+ICtpbnQgYWxzYV9ydW4oc3Ry dWN0IGFsc2EgKmFsc2EsIGludCBkdXJhdGlvbl9tcykKPiA+ICt7Cj4gPiArCXNuZF9wY21fdCAq aGFuZGxlOwo+ID4gKwlzaG9ydCAqb3V0cHV0X2J1ZmZlciA9IE5VTEw7Cj4gPiArCXNob3J0ICpp bnB1dF9idWZmZXIgPSBOVUxMOwo+ID4gKwlpbnQgb3V0cHV0X2xpbWl0Owo+ID4gKwlpbnQgb3V0 cHV0X3RvdGFsID0gMDsKPiA+ICsJaW50IG91dHB1dF9jb3VudHNbYWxzYS0+b3V0cHV0X2hhbmRs ZXNfY291bnRdOwo+ID4gKwlib29sIG91dHB1dF9yZWFkeSA9IGZhbHNlOwo+ID4gKwlpbnQgb3V0 cHV0X2NoYW5uZWxzOwo+ID4gKwlpbnQgb3V0cHV0X3RyaWdnZXI7Cj4gPiArCWludCBpbnB1dF9s aW1pdDsKPiA+ICsJaW50IGlucHV0X3RvdGFsID0gMDsKPiA+ICsJaW50IGlucHV0X2NvdW50ID0g MDsKPiA+ICsJaW50IGlucHV0X2NoYW5uZWxzOwo+ID4gKwlpbnQgaW5wdXRfdHJpZ2dlcjsKPiA+ ICsJYm9vbCByZWFjaGVkOwo+ID4gKwlpbnQgaW5kZXg7Cj4gPiArCWludCBjb3VudDsKPiA+ICsJ aW50IGF2YWlsOwo+ID4gKwlpbnQgaTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJb3V0cHV0 X2xpbWl0ID0gYWxzYS0+b3V0cHV0X3NhbXBsaW5nX3JhdGUgKiBkdXJhdGlvbl9tcyAvCj4gPiAx MDAwOwo+ID4gKwlvdXRwdXRfY2hhbm5lbHMgPSBhbHNhLT5vdXRwdXRfY2hhbm5lbHM7Cj4gPiAr CW91dHB1dF90cmlnZ2VyID0gYWxzYS0+b3V0cHV0X3NhbXBsZXNfdHJpZ2dlcjsKPiA+ICsJb3V0 cHV0X2J1ZmZlciA9IG1hbGxvYyhzaXplb2Yoc2hvcnQpICogb3V0cHV0X2NoYW5uZWxzICoKPiA+ ICsJCQkgICAgICAgb3V0cHV0X3RyaWdnZXIpOwo+ID4gKwo+ID4gKwlpZiAoYWxzYS0+aW5wdXRf Y2FsbGJhY2spIHsKPiA+ICsJCWlucHV0X2xpbWl0ID0gYWxzYS0+aW5wdXRfc2FtcGxpbmdfcmF0 ZSAqCj4gPiBkdXJhdGlvbl9tcyAvIDEwMDA7Cj4gPiArCQlpbnB1dF90cmlnZ2VyID0gYWxzYS0+ aW5wdXRfc2FtcGxlc190cmlnZ2VyOwo+ID4gKwkJaW5wdXRfY2hhbm5lbHMgPSBhbHNhLT5pbnB1 dF9jaGFubmVsczsKPiA+ICsJCWlucHV0X2J1ZmZlciA9IG1hbGxvYyhzaXplb2Yoc2hvcnQpICoK PiA+IGlucHV0X2NoYW5uZWxzCj4gPiAqCj4gPiArCQkJCSAgICAgIGlucHV0X3RyaWdnZXIpOwo+ ID4gKwl9Cj4gPiArCj4gPiArCWRvIHsKPiA+ICsJCXJlYWNoZWQgPSB0cnVlOwo+ID4gKwo+ID4g KwkJaWYgKG91dHB1dF90b3RhbCA8IG91dHB1dF9saW1pdCkgewo+ID4gKwkJCXJlYWNoZWQgPSBm YWxzZTsKPiA+ICsKPiA+ICsJCQlpZiAoIW91dHB1dF9yZWFkeSkgewo+ID4gKwkJCQlvdXRwdXRf cmVhZHkgPSB0cnVlOwo+ID4gKwo+ID4gKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWxzYS0KPiA+ID4g b3V0cHV0X2hhbmRsZXNfY291bnQ7IGkrKykKPiA+IAo+ID4gKwkJCQkJb3V0cHV0X2NvdW50c1tp XSA9IDA7Cj4gPiArCj4gPiArCQkJCXJldCA9IGFsc2EtPm91dHB1dF9jYWxsYmFjayhhbHNhLQo+ ID4gPiBvdXRwdXRfY2FsbGJhY2tfZGF0YSwKPiA+IAo+ID4gKwkJCQkJCQkgICAgb3V0cHV0Xwo+ ID4gYgo+ID4gdWZmZXIsCj4gPiArCQkJCQkJCSAgICBvdXRwdXRfCj4gPiB0Cj4gPiByaWdnZXIp Owo+ID4gKwkJCQlpZiAocmV0IDwgMCkKPiA+ICsJCQkJCWdvdG8gY29tcGxldGU7Cj4gPiArCQkJ fQo+ID4gKwo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3Vu dDsKPiA+IGkrKykgewo+ID4gKwkJCQloYW5kbGUgPSBhbHNhLT5vdXRwdXRfaGFuZGxlc1tpXTsK PiA+ICsKPiA+ICsJCQkJaWYgKG91dHB1dF9jb3VudHNbaV0gPAo+ID4gb3V0cHV0X3RyaWdnZXIg JiYKPiA+ICsJCQkJICAgIHNuZF9wY21fYXZhaWwoaGFuZGxlKSA+IDApIHsKPiA+ICsJCQkJCWlu ZGV4ID0gb3V0cHV0X2NvdW50c1tpXSAqCj4gPiArCQkJCQkJb3V0cHV0X2NoYW5uZWxzOwo+ID4g KwkJCQkJY291bnQgPSBvdXRwdXRfdHJpZ2dlciAtCj4gPiArCQkJCQkJb3V0cHV0X2NvdW50c1tp XTsKPiA+ICsJCQkJCWF2YWlsID0KPiA+IHNuZF9wY21fYXZhaWwoaGFuZGxlKTsKPiA+ICsKPiA+ ICsJCQkJCWNvdW50ID0gYXZhaWwgPCBjb3VudCA/Cj4gPiBhdmFpbCA6IGNvdW50Owo+ID4gKwo+ ID4gKwkJCQkJcmV0ID0KPiA+IHNuZF9wY21fd3JpdGVpKGhhbmRsZSwKPiA+ICsJCQkJCQkJICAg ICAmb3V0cHUKPiA+IHQKPiA+IF9idWZmZXJbaW5kZXhdLAo+ID4gKwkJCQkJCQkgICAgIGNvdW50 KQo+ID4gOwo+ID4gKwkJCQkJaWYgKHJldCA8IDApIHsKPiA+ICsJCQkJCQlyZXQgPQo+ID4gc25k X3BjbV9yZWNvdmVyKGhhbmRsZSwKPiA+ICsJCQkJCQkJCSAgIAo+ID4gIAo+ID4gICBjb3VudCwg MCk7Cj4gPiArCQkJCQkJaWYgKHJldCA8IDApCj4gPiArCQkJCQkJCWdvdG8KPiA+IGNvbXBsZXRl Owo+ID4gKwkJCQkJfQo+ID4gKwo+ID4gKwkJCQkJb3V0cHV0X2NvdW50c1tpXSArPSByZXQ7Cj4g PiArCQkJCX0KPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJb3V0cHV0X3JlYWR5ID0gZmFsc2U7Cj4g PiArCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IGFsc2EtPm91dHB1dF9oYW5kbGVzX2NvdW50Owo+ ID4gaSsrKQo+ID4gKwkJCQlpZiAob3V0cHV0X2NvdW50c1tpXSA8Cj4gPiBvdXRwdXRfdHJpZ2dl cikKPiA+ICsJCQkJCW91dHB1dF9yZWFkeSA9IHRydWU7Cj4gPiArCj4gPiArCQkJaWYgKCFvdXRw dXRfcmVhZHkpCj4gPiArCQkJCW91dHB1dF90b3RhbCArPSBvdXRwdXRfdHJpZ2dlcjsKPiA+ICsK PiA+ICsJCX0KPiA+ICsKPiA+ICsJCWlmIChhbHNhLT5pbnB1dF9jYWxsYmFjayAmJiBpbnB1dF90 b3RhbCA8Cj4gPiBpbnB1dF9saW1pdCkgewo+ID4gKwkJCXJlYWNoZWQgPSBmYWxzZTsKPiA+ICsK PiA+ICsJCQlpZiAoaW5wdXRfY291bnQgPT0gaW5wdXRfdHJpZ2dlcikgewo+ID4gKwkJCQlpbnB1 dF9jb3VudCA9IDA7Cj4gPiArCj4gPiArCQkJCXJldCA9IGFsc2EtPmlucHV0X2NhbGxiYWNrKGFs c2EtCj4gPiA+IGlucHV0X2NhbGxiYWNrX2RhdGEsCj4gPiAKPiA+ICsJCQkJCQkJICAgaW5wdXRf YnUKPiA+IGYKPiA+IGZlciwKPiA+ICsJCQkJCQkJICAgaW5wdXRfdHIKPiA+IGkKPiA+IGdnZXIp Owo+ID4gKwkJCQlpZiAocmV0ICE9IDApCj4gPiArCQkJCQlnb3RvIGNvbXBsZXRlOwo+ID4gKwkJ CX0KPiA+ICsKPiA+ICsJCQloYW5kbGUgPSBhbHNhLT5pbnB1dF9oYW5kbGU7Cj4gPiArCj4gPiAr CQkJaWYgKGlucHV0X2NvdW50IDwgaW5wdXRfdHJpZ2dlciAmJgo+ID4gKwkJCSAgICAoc25kX3Bj bV9hdmFpbChoYW5kbGUpID4gMCB8fAo+ID4gaW5wdXRfdG90YWwgPT0gMCkpIHsKPiA+ICsJCQkJ aW5kZXggPSBpbnB1dF9jb3VudCAqCj4gPiBpbnB1dF9jaGFubmVsczsKPiA+ICsJCQkJY291bnQg PSBpbnB1dF90cmlnZ2VyIC0KPiA+IGlucHV0X2NvdW50Owo+ID4gKwkJCQlhdmFpbCA9IHNuZF9w Y21fYXZhaWwoaGFuZGxlKTsKPiA+ICsKPiA+ICsJCQkJY291bnQgPSBhdmFpbCA+IDAgJiYgYXZh aWwgPCBjb3VudAo+ID4gPwo+ID4gYXZhaWwgOgo+ID4gKwkJCQkJY291bnQ7Cj4gPiArCj4gPiAr CQkJCXJldCA9IHNuZF9wY21fcmVhZGkoaGFuZGxlLAo+ID4gKwkJCQkJCSAgICAmaW5wdXRfYnVm ZmVyW2kKPiA+IG4KPiA+IGRleF0sCj4gPiArCQkJCQkJICAgIGNvdW50KTsKPiA+ICsJCQkJaWYg KHJldCA9PSAtRUFHQUlOKSB7Cj4gPiArCQkJCQlyZXQgPSAwOwo+ID4gKwkJCQl9IGVsc2UgaWYg KHJldCA8IDApIHsKPiA+ICsJCQkJCXJldCA9Cj4gPiBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCBj b3VudCwgMCk7Cj4gPiArCQkJCQlpZiAocmV0IDwgMCkKPiA+ICsJCQkJCQlnb3RvIGNvbXBsZXRl Owo+ID4gKwkJCQl9Cj4gPiArCj4gPiArCQkJCWlucHV0X2NvdW50ICs9IHJldDsKPiA+ICsJCQkJ aW5wdXRfdG90YWwgKz0gcmV0Owo+ID4gKwkJCX0KPiA+ICsJCX0KPiA+ICsJfSB3aGlsZSAoIXJl YWNoZWQpOwo+ID4gKwo+ID4gKwlyZXQgPSAwOwo+ID4gKwo+ID4gK2NvbXBsZXRlOgo+ID4gKwlp ZiAob3V0cHV0X2J1ZmZlcikKPiA+ICsJCWZyZWUob3V0cHV0X2J1ZmZlcik7Cj4gPiArCj4gPiAr CWlmIChpbnB1dF9idWZmZXIpCj4gPiArCQlmcmVlKGlucHV0X2J1ZmZlcik7Cj4gPiArCj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYWxzYS5oIGIvbGli L2lndF9hbHNhLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMC4u OTkxMWRkZGUKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi9pZ3RfYWxzYS5oCj4gPiBA QCAtMCwwICsxLDYwIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBD b3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KPiA+IG9idGFpbmluZyBhCj4gPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZQo+ID4gIlNvZnR3YXJlIiksCj4gPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQKPiA+IGxpbWl0YXRpb24KPiA+ICsgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwKPiA+IHN1YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvCj4gPiB3aG9tCj4gPiB0aGUKPiA+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwo+ ID4gY29uZGl0aW9uczoKPiA+ICsgKgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcKPiA+IHRoZSBuZXh0Cj4gPiAr ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsCj4gPiBwb3J0aW9ucyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELAo+ID4gRVhQUkVTUyBPUgo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiA+IE1FUkNIQU5UQUJJTElUWSwKPiA+ICsg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8KPiA+IEVWRU5UIFNIQUxMCj4gPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gPiBEQU1BR0VTCj4gPiBPUiBPVEhFUgo+ ID4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAo+ID4gQVJJU0lORwo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKPiA+IE9USEVSIERFQUxJTkdT Cj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqCj4gPiArICogQXV0aG9yczoKPiA+ICsg KiAgUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293c2tpQGxpbnV4LmludGVsLmNvbT4K PiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIElHVF9BTFNBX0gKPiA+ICsjZGVmaW5lIElHVF9B TFNBX0gKPiA+ICsKPiA+ICsjaWZkZWYgSEFWRV9DT05GSUdfSAo+ID4gKyNpbmNsdWRlICJjb25m aWcuaCIKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjaW5jbHVkZSAiaWd0LmgiCj4gPiArI2luY2x1 ZGUgPHN0ZGJvb2wuaD4KPiA+ICsKPiA+ICtzdHJ1Y3QgYWxzYTsKPiA+ICsKPiA+ICtzdHJ1Y3Qg YWxzYSAqYWxzYV9pbml0KHZvaWQpOwo+ID4gK2ludCBhbHNhX29wZW5fb3V0cHV0KHN0cnVjdCBh bHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7Cj4gPiAraW50IGFsc2Ffb3Blbl9p bnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgY29uc3QgY2hhciAqZGV2aWNlX25hbWUpOwo+ID4gK3Zv aWQgYWxzYV9jbG9zZV9vdXRwdXQoc3RydWN0IGFsc2EgKmFsc2EpOwo+ID4gK3ZvaWQgYWxzYV9j bG9zZV9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSk7Cj4gPiArYm9vbCBhbHNhX3Rlc3Rfb3V0cHV0 X2NvbmZpZ3VyYXRpb24oc3RydWN0IGFsc2EgKmFsc2EsIGludAo+ID4gY2hhbm5lbHMsCj4gPiAr CQkJICAJICAgIGludCBzYW1wbGluZ19yYXRlKTsKPiA+ICtib29sIGFsc2FfdGVzdF9pbnB1dF9j b25maWd1cmF0aW9uKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gPiArCQkJICAJ ICAgaW50IHNhbXBsaW5nX3JhdGUpOwo+ID4gK3ZvaWQgYWxzYV9jb25maWd1cmVfb3V0cHV0KHN0 cnVjdCBhbHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gPiArCQkJICAgaW50IHNhbXBsaW5nX3Jh dGUpOwo+ID4gK3ZvaWQgYWxzYV9jb25maWd1cmVfaW5wdXQoc3RydWN0IGFsc2EgKmFsc2EsIGlu dCBjaGFubmVscywKPiA+ICsJCQkgIGludCBzYW1wbGluZ19yYXRlKTsKPiA+ICt2b2lkIGFsc2Ff cmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrKHN0cnVjdCBhbHNhICphbHNhLAo+ID4gKwkJCQkgICBp bnQgKCpjYWxsYmFjaykodm9pZCAqZGF0YSwKPiA+IHNob3J0Cj4gPiAqYnVmZmVyLCBpbnQgc2Ft cGxlcyksCj4gPiArCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGludAo+ID4gc2FtcGxlc190 cmlnZ2VyKTsKPiA+ICt2b2lkIGFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2soc3RydWN0IGFs c2EgKmFsc2EsCj4gPiArCQkJCSAgaW50ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEsIHNob3J0Cj4g PiAqYnVmZmVyLCBpbnQgc2FtcGxlcyksCj4gPiArCQkJCSAgdm9pZCAqY2FsbGJhY2tfZGF0YSwg aW50Cj4gPiBzYW1wbGVzX3RyaWdnZXIpOwo+ID4gK2ludCBhbHNhX3J1bihzdHJ1Y3QgYWxzYSAq YWxzYSwgaW50IGR1cmF0aW9uX21zKTsKPiA+ICsKPiA+ICsjZW5kaWYKLS0gClBhdWwgS29jaWFs a293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5pbnRlbC5jb20+CkludGVsIEZpbmxhbmQg T3kgLSBCSUMgMDM1NzYwNi00IC0gV2VzdGVuZGlua2F0dSA3LCAwMjE2MCBFc3BvbywgRmlubGFu ZApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK