From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH i-g-t 2/3] lib: Add ALSA library with dedicated helpers Date: Fri, 18 Aug 2017 12:20:00 -0400 Message-ID: <1503073200.3702.6.camel@redhat.com> References: <20170817160557.14238-1-paul.kocialkowski@linux.intel.com> <20170817160557.14238-2-paul.kocialkowski@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id C01956E766 for ; Fri, 18 Aug 2017 16:20:02 +0000 (UTC) In-Reply-To: <20170817160557.14238-2-paul.kocialkowski@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paul Kocialkowski , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QW5kIHR3byBtb3JlIHNtYWxsIGNoYW5nZXMKCk9uIFRodSwgMjAxNy0wOC0xNyBhdCAxOTowNSAr MDMwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4gVGhpcyBpbnRyb2R1Y2VzIGFuIEFMU0Eg bGlicmFyeSwgd2l0aCBkZWRpY2F0ZWQgaGVscGVycyBmb3IgaGFuZGxpbmcKPiBwbGF5YmFjayBh bmQgY2FwdHVyZS4gSXQgaGFuZGxlcyBBTFNBIGRldmljZSBpZGVudGlmaWNhdGlvbiBhbmQKPiBj b25maWd1cmF0aW9uIGFzIHdlbGwgYXMgYSBydW4gbG9vcCB3aXRoIGNhbGxiYWNrIG1lY2hhbmlz bXMgZm9yCj4gZmVlZGluZwo+IG91dHB1dCBkYXRhIGFuZCBoYW5kbGluZyBpbnB1dCBkYXRhLgo+ IAo+IFRoaXMgbGlicmFyeSBwYXZlcyB0aGUgd2F5IGZvciB0ZXN0aW5nIGF1ZGlvIGdvaW5nIHRo cm91Z2ggZGlzcGxheQo+IGNvbm5lY3RvcnMsIHN1Y2ggYXMgSERNSS4KPiAKPiBTaWduZWQtb2Zm LWJ5OiBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAbGludXguaW50ZWwuY29t Pgo+IC0tLQo+ICBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMyArCj4gIC4uLi9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRvb2xzLWRvY3Mu eG1sICAgICAgIHwgICAxICsKPiAgbGliL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDcgKwo+ICBsaWIvaWd0LmggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGxpYi9pZ3RfYWxzYS5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgNjI0Cj4gKysrKysrKysrKysrKysrKysrKysrCj4g IGxpYi9pZ3RfYWxzYS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYw ICsrCj4gIDYgZmlsZXMgY2hhbmdlZCwgNjk2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGxpYi9pZ3RfYWxzYS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2Fsc2Eu aAo+IAo+IGRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKPiBpbmRleCA1 MGFhODZiNS4uZTY2MjczYTQgMTAwNjQ0Cj4gLS0tIGEvY29uZmlndXJlLmFjCj4gKysrIGIvY29u ZmlndXJlLmFjCj4gQEAgLTIxOSw2ICsyMTksOSBAQCBpZiB0ZXN0ICJ4JGVuYWJsZV9jaGFtZWxp dW0iID0geHllczsgdGhlbgo+ICAJQUNfREVGSU5FKEhBVkVfQ0hBTUVMSVVNLCAxLCBbRW5hYmxl IENoYW1lbGl1bSBzdXBwb3J0XSkKPiAgZmkKPiAgCj4gK1BLR19DSEVDS19NT0RVTEVTKEFMU0Es IFthbHNhXSwgW2Fsc2E9eWVzXSwgW2Fsc2E9bm9dKQo+ICtBTV9DT05ESVRJT05BTChIQVZFX0FM U0EsIFt0ZXN0ICJ4JGFsc2EiID0geHllc10pCj4gKwo+ICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IC0tLS0tLS0t LS0tCj4gICMJCQlDb25maWd1cmF0aW9uIG9wdGlvbnMKPiAgIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAtLS0tLS0t LS0tLQo+IGRpZmYgLS1naXQgYS9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwt Z3B1LXRvb2xzLWRvY3MueG1sCj4gYi9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50 ZWwtZ3B1LXRvb2xzLWRvY3MueG1sCj4gaW5kZXggYzc3MTU5Y2YuLjBjMzRlNGE1IDEwMDY0NAo+ IC0tLSBhL2RvY3MvcmVmZXJlbmNlL2ludGVsLWdwdS10b29scy9pbnRlbC1ncHUtdG9vbHMtZG9j cy54bWwKPiArKysgYi9kb2NzL3JlZmVyZW5jZS9pbnRlbC1ncHUtdG9vbHMvaW50ZWwtZ3B1LXRv b2xzLWRvY3MueG1sCj4gQEAgLTE2LDYgKzE2LDcgQEAKPiAgICA8Y2hhcHRlcj4KPiAgICAgIDx0 aXRsZT5BUEkgUmVmZXJlbmNlPC90aXRsZT4KPiAgICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9k cm10ZXN0LnhtbCIvPgo+ICsgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9hbHNhLnhtbCIv Pgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9hdWRpby54bWwiLz4KPiAgICAgIDx4 aTppbmNsdWRlIGhyZWY9InhtbC9pZ3RfYXV4LnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJl Zj0ieG1sL2lndF9jaGFtZWxpdW0ueG1sIi8+Cj4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5h bSBiL2xpYi9NYWtlZmlsZS5hbQo+IGluZGV4IDVlYTA4MzE0Li4zZmYxNGY2NiAxMDA2NDQKPiAt LS0gYS9saWIvTWFrZWZpbGUuYW0KPiArKysgYi9saWIvTWFrZWZpbGUuYW0KPiBAQCAtMzgsNiAr MzgsMTMgQEAgbGliX3NvdXJjZV9saXN0ICs9CQlcCj4gIAkkKE5VTEwpCj4gIGVuZGlmCj4gIAo+ ICtpZiBIQVZFX0FMU0EKPiArbGliX3NvdXJjZV9saXN0ICs9CQlcCj4gKwlpZ3RfYWxzYS5jCQlc Cj4gKwlpZ3RfYWxzYS5oCQlcCj4gKwkkKE5VTEwpCj4gK2VuZGlmCj4gKwo+ICBBTV9DUFBGTEFH UyA9IC1JJCh0b3Bfc3JjZGlyKQo+ICBBTV9DRkxBR1MgPSBcCj4gIAkgICAgJChDV0FSTkZMQUdT KSBcCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3QuaCBiL2xpYi9pZ3QuaAo+IGluZGV4IGE3NWQyZGI3 Li5lYmY5MjM0OSAxMDA2NDQKPiAtLS0gYS9saWIvaWd0LmgKPiArKysgYi9saWIvaWd0LmgKPiBA QCAtMzUsNiArMzUsNyBAQAo+ICAjaW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgo+ICAjaW5jbHVk ZSAiaWd0X2ZiLmgiCj4gICNpbmNsdWRlICJpZ3RfZnJhbWUuaCIKPiArI2luY2x1ZGUgImlndF9h bHNhLmgiCj4gICNpbmNsdWRlICJpZ3RfYXVkaW8uaCIKPiAgI2luY2x1ZGUgImlndF9ndC5oIgo+ ICAjaW5jbHVkZSAiaWd0X2ttcy5oIgo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Fsc2EuYyBiL2xp Yi9pZ3RfYWxzYS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uZDhi ZDA4NzMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2lndF9hbHNhLmMKPiBAQCAtMCwwICsx LDYyNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+ ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbgo+IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tCj4gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nCj4gY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+IHRoZSBu ZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbAo+IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsCj4gRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8KPiBF VkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+IEFSSVNJ TkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICoKPiArICogQXV0aG9yczoKPiArICogIFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtv d3NraUBsaW51eC5pbnRlbC5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ ICsKPiArI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0Lmgi Cj4gKwo+ICsjZGVmaW5lIEhBTkRMRVNfTUFYCTgKPiArCj4gKy8qKgo+ICsgKiBTRUNUSU9OOmln dF9hbHNhCj4gKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogTGlicmFyeSB3aXRoIEFMU0EgaGVscGVy cwo+ICsgKiBAdGl0bGU6IEFMU0EKPiArICogQGluY2x1ZGU6IGlndF9hbHNhLmgKPiArICoKPiAr ICogVGhpcyBsaWJyYXJ5IGNvbnRhaW5zIGhlbHBlcnMgZm9yIEFMU0EgcGxheWJhY2sgYW5kIGNh cHR1cmUuCj4gKyAqLwo+ICsKPiArc3RydWN0IGFsc2Egewo+ICsJc25kX3BjbV90ICpvdXRwdXRf aGFuZGxlc1tIQU5ETEVTX01BWF07Cj4gKwlpbnQgb3V0cHV0X2hhbmRsZXNfY291bnQ7Cj4gKwlp bnQgb3V0cHV0X3NhbXBsaW5nX3JhdGU7Cj4gKwlpbnQgb3V0cHV0X2NoYW5uZWxzOwo+ICsKPiAr CWludCAoKm91dHB1dF9jYWxsYmFjaykodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50Cj4g c2FtcGxlcyk7Cj4gKwl2b2lkICpvdXRwdXRfY2FsbGJhY2tfZGF0YTsKPiArCWludCBvdXRwdXRf c2FtcGxlc190cmlnZ2VyOwo+ICsKPiArCXNuZF9wY21fdCAqaW5wdXRfaGFuZGxlOwo+ICsJaW50 IGlucHV0X3NhbXBsaW5nX3JhdGU7Cj4gKwlpbnQgaW5wdXRfY2hhbm5lbHM7Cj4gKwo+ICsJaW50 ICgqaW5wdXRfY2FsbGJhY2spKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIsIGludAo+IHNhbXBs ZXMpOwo+ICsJdm9pZCAqaW5wdXRfY2FsbGJhY2tfZGF0YTsKPiArCWludCBpbnB1dF9zYW1wbGVz X3RyaWdnZXI7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBhbHNhX2Vycm9yX2hhbmRsZXIoY29u c3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0Cj4gY2hhciAqZnVuY3Rpb24sCj4gKwkJCSAg ICAgICBpbnQgZXJyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKPiArewo+ICsJaWYgKGVycikKPiAr CQlpZ3RfZGVidWcoIltBTFNBXSAlczogJXNcbiIsIGZ1bmN0aW9uLAo+IHNuZF9zdHJlcnJvcihl cnIpKTsKPiArfQoKV291bGQgYmUgYSBnb29kIGlkZWEgdG8gYWRkIGFuIF9fYXR0cmlidXRlX18o KHByaW50ZikpIGhlcmUKPiArCj4gKy8qKgo+ICsgKiBhbHNhX2luaXQ6Cj4gKyAqIEFsbG9jYXRl IGFuZCBpbml0aWFsaXplIGFuIGFsc2Egc3RydWN0dXJlIGFuZCBjb25maWd1cmUgdGhlIGVycm9y Cj4gaGFuZGxlci4KPiArICoKPiArICogUmV0dXJuczogQSBuZXdseS1hbGxvY2F0ZWQgYWxzYSBz dHJ1Y3R1cmUKPiArICovCj4gK3N0cnVjdCBhbHNhICphbHNhX2luaXQodm9pZCkKPiArewo+ICsJ c3RydWN0IGFsc2EgKmFsc2E7Cj4gKwo+ICsJYWxzYSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGFs c2EpKTsKPiArCW1lbXNldChhbHNhLCAwLCBzaXplb2Yoc3RydWN0IGFsc2EpKTsKPiArCj4gKwkv KiBSZWRpcmVjdCBlcnJvcnMgdG8gaWd0X2RlYnVnIGluc3RlYWQgb2Ygc3RkZXJyLiAqLwo+ICsJ c25kX2xpYl9lcnJvcl9zZXRfaGFuZGxlcihhbHNhX2Vycm9yX2hhbmRsZXIpOwo+ICsKPiArCXJl dHVybiBhbHNhOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhciAqYWxzYV9yZXNvbHZlX2luZGVudGlm aWVyKGNvbnN0IGNoYXIgKmRldmljZV9uYW1lLCBpbnQKPiBza2lwKQo+ICt7Cj4gKwlzbmRfY3Rs X2NhcmRfaW5mb190ICpjYXJkX2luZm87Cj4gKwlzbmRfcGNtX2luZm9fdCAqcGNtX2luZm87Cj4g KwlzbmRfY3RsX3QgKmhhbmRsZSA9IE5VTEw7Cj4gKwljb25zdCBjaGFyICpwY21fbmFtZTsKPiAr CWNoYXIgKmlkZW50aWZpZXIgPSBOVUxMOwo+ICsJY2hhciBuYW1lWzMyXTsKPiArCWludCBjYXJk Owo+ICsJaW50IGRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJc25kX2N0bF9jYXJkX2luZm9fYWxs b2NhKCZjYXJkX2luZm8pOwo+ICsJc25kX3BjbV9pbmZvX2FsbG9jYSgmcGNtX2luZm8pOwo+ICsK PiArCWNhcmQgPSAtMTsKSnVzdCBzZXQgY2FyZCA9IC0xIGF0IGl0J3MgZGVjbGFyYXRpb24KPiAr Cj4gKwkvKiBGaXJzdCB0cnkgdG8gb3BlbiB0aGUgZGV2aWNlIGFzLWlzLiAqLwo+ICsJaWYgKCFz a2lwKSB7Cj4gKwkJcmV0ID0gc25kX2N0bF9vcGVuKCZoYW5kbGUsIGRldmljZV9uYW1lLCAwKTsK PiArCQlpZiAoIXJldCkgewo+ICsJCQlpZGVudGlmaWVyID0gc3RyZHVwKGRldmljZV9uYW1lKTsK PiArCQkJZ290byByZXNvbHZlZDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJZG8gewo+ICsJCXJldCA9 IHNuZF9jYXJkX25leHQoJmNhcmQpOwo+ICsJCWlmIChyZXQgPCAwIHx8IGNhcmQgPCAwKQo+ICsJ CQlicmVhazsKPiArCj4gKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiaHc6JWQiLCBj YXJkKTsKPiArCj4gKwkJcmV0ID0gc25kX2N0bF9vcGVuKCZoYW5kbGUsIG5hbWUsIDApOwo+ICsJ CWlmIChyZXQgPCAwKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gc25kX2N0bF9jYXJk X2luZm8oaGFuZGxlLCBjYXJkX2luZm8pOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCXNuZF9j dGxfY2xvc2UoaGFuZGxlKTsKPiArCQkJaGFuZGxlID0gTlVMTDsKPiArCQkJY29udGludWU7Cj4g KwkJfQo+ICsKPiArCQlkZXYgPSAtMTsKPiArCj4gKwkJZG8gewo+ICsJCQlyZXQgPSBzbmRfY3Rs X3BjbV9uZXh0X2RldmljZShoYW5kbGUsICZkZXYpOwo+ICsJCQlpZiAocmV0IDwgMCB8fCBkZXYg PCAwKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlzbmRfcGNtX2luZm9fc2V0X2RldmljZShwY21f aW5mbywgZGV2KTsKPiArCQkJc25kX3BjbV9pbmZvX3NldF9zdWJkZXZpY2UocGNtX2luZm8sIDAp Owo+ICsKPiArCQkJcmV0ID0gc25kX2N0bF9wY21faW5mbyhoYW5kbGUsIHBjbV9pbmZvKTsKPiAr CQkJaWYgKHJldCA8IDApCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCXBjbV9uYW1lID0gc25k X3BjbV9pbmZvX2dldF9uYW1lKHBjbV9pbmZvKTsKPiArCQkJaWYgKCFwY21fbmFtZSkKPiArCQkJ CWNvbnRpbnVlOwo+ICsKPiArCQkJcmV0ID0gc3RybmNtcChkZXZpY2VfbmFtZSwgcGNtX25hbWUs Cj4gKwkJCQkgICAgICBzdHJsZW4oZGV2aWNlX25hbWUpKTsKPiArCj4gKwkJCWlmIChyZXQgPT0g MCkgewo+ICsJCQkJaWYgKHNraXAgPiAwKSB7Cj4gKwkJCQkJc2tpcC0tOwo+ICsJCQkJCWNvbnRp bnVlOwo+ICsJCQkJfQo+ICsKPiArCQkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKPiAi aHc6JWQsJWQiLCBjYXJkLAo+ICsJCQkJCSBkZXYpOwo+ICsKPiArCQkJCWlkZW50aWZpZXIgPSBz dHJkdXAobmFtZSk7Cj4gKwkJCQlnb3RvIHJlc29sdmVkOwo+ICsJCQl9Cj4gKwkJfSB3aGlsZSAo ZGV2ID49IDApOwo+ICsKPiArCQlzbmRfY3RsX2Nsb3NlKGhhbmRsZSk7Cj4gKwkJaGFuZGxlID0g TlVMTDsKPiArCX0gd2hpbGUgKGNhcmQgPj0gMCk7Cj4gKwo+ICtyZXNvbHZlZDoKPiArCWlmICho YW5kbGUpCj4gKwkJc25kX2N0bF9jbG9zZShoYW5kbGUpOwo+ICsKPiArCXJldHVybiBpZGVudGlm aWVyOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYWxzYV9vcGVuX291dHB1dDoKPiArICogQGFsc2E6 IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiArICogQGRldmljZV9uYW1lOiBUaGUgbmFtZSBw cmVmaXggb2YgdGhlIG91dHB1dCBkZXZpY2UocykgdG8gb3Blbgo+ICsgKgo+ICsgKiBPcGVuIEFM U0Egb3V0cHV0IGRldmljZXMgd2hvc2UgbmFtZSBwcmVmaXhlcyBtYXRjaCB0aGUgcHJvdmlkZWQK PiBuYW1lIHByZWZpeC4KPiArICoKPiArICogUmV0dXJuczogQW4gaW50ZWdlciBlcXVhbCB0byB6 ZXJvIGZvciBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBmb3IKPiBmYWlsdXJlCj4gKyAqLwo+ICtpbnQg YWxzYV9vcGVuX291dHB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgY29uc3QgY2hhciAqZGV2aWNlX25h bWUpCj4gK3sKPiArCXNuZF9wY21fdCAqaGFuZGxlOwo+ICsJY2hhciAqaWRlbnRpZmllcjsKPiAr CWludCBza2lwOwo+ICsJaW50IGluZGV4Owo+ICsJaW50IHJldDsKPiArCj4gKwlza2lwID0gYWxz YS0+b3V0cHV0X2hhbmRsZXNfY291bnQ7Cj4gKwlpbmRleCA9IGFsc2EtPm91dHB1dF9oYW5kbGVz X2NvdW50Owo+ICsKPiArCXdoaWxlIChpbmRleCA8IEhBTkRMRVNfTUFYKSB7Cj4gKwkJaWRlbnRp ZmllciA9IGFsc2FfcmVzb2x2ZV9pbmRlbnRpZmllcihkZXZpY2VfbmFtZSwKPiBza2lwKyspOwo+ ICsJCWlmICghaWRlbnRpZmllcikKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXJldCA9IHNuZF9wY21f b3BlbigmaGFuZGxlLCBpZGVudGlmaWVyLAo+IFNORF9QQ01fU1RSRUFNX1BMQVlCQUNLLAo+ICsJ CQkJICAgU05EX1BDTV9OT05CTE9DSyk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZnJlZShp ZGVudGlmaWVyKTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZ3RfZGVidWcoIk9w ZW5lZCBvdXRwdXQgJXNcbiIsIGlkZW50aWZpZXIpOwo+ICsKPiArCQlhbHNhLT5vdXRwdXRfaGFu ZGxlc1tpbmRleCsrXSA9IGhhbmRsZTsKPiArCQlmcmVlKGlkZW50aWZpZXIpOwo+ICsJfQo+ICsK PiArCWlmIChpbmRleCA9PSAwKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlhbHNhLT5vdXRwdXRf aGFuZGxlc19jb3VudCA9IGluZGV4Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioK PiArICogYWxzYV9vcGVuX2lucHV0Ogo+ICsgKiBAYWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVj dHVyZQo+ICsgKiBAZGV2aWNlX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBpbnB1dCBkZXZpY2UgdG8g b3Blbgo+ICsgKgo+ICsgKiBPcGVuIHRoZSBBTFNBIGlucHV0IGRldmljZSB3aG9zZSBuYW1lIG1h dGNoZXMgdGhlIHByb3ZpZGVkIG5hbWUKPiBwcmVmaXguCj4gKyAqCj4gKyAqIFJldHVybnM6IEFu IGludGVnZXIgZXF1YWwgdG8gemVybyBmb3Igc3VjY2VzcyBhbmQgbmVnYXRpdmUgZm9yCj4gZmFp bHVyZQo+ICsgKi8KPiAraW50IGFsc2Ffb3Blbl9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgY29u c3QgY2hhciAqZGV2aWNlX25hbWUpCj4gK3sKPiArCXNuZF9wY21fdCAqaGFuZGxlOwo+ICsJY2hh ciAqaWRlbnRpZmllcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWRlbnRpZmllciA9IGFsc2FfcmVz b2x2ZV9pbmRlbnRpZmllcihkZXZpY2VfbmFtZSwgMCk7Cj4gKwo+ICsJcmV0ID0gc25kX3BjbV9v cGVuKCZoYW5kbGUsIGRldmljZV9uYW1lLAo+IFNORF9QQ01fU1RSRUFNX0NBUFRVUkUsCj4gKwkJ CSAgIFNORF9QQ01fTk9OQkxPQ0spOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBjb21wbGV0 ZTsKPiArCj4gKwlpZ3RfZGVidWcoIk9wZW5lZCBpbnB1dCAlc1xuIiwgaWRlbnRpZmllcik7Cj4g Kwo+ICsJYWxzYS0+aW5wdXRfaGFuZGxlID0gaGFuZGxlOwo+ICsKPiArCXJldCA9IDA7Cj4gKwo+ ICtjb21wbGV0ZToKPiArCWZyZWUoaWRlbnRpZmllcik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGFsc2FfY2xvc2Vfb3V0cHV0Ogo+ICsgKiBAYWxzYTogVGhlIHRh cmdldCBhbHNhIHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBDbG9zZSBhbGwgdGhlIG9wZW4gQUxTQSBv dXRwdXRzLgo+ICsgKi8KPiArdm9pZCBhbHNhX2Nsb3NlX291dHB1dChzdHJ1Y3QgYWxzYSAqYWxz YSkKPiArewo+ICsJc25kX3BjbV90ICpoYW5kbGU7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgYWxzYS0+b3V0cHV0X2hhbmRsZXNfY291bnQ7IGkrKykgewo+ICsJCWhhbmRsZSA9 IGFsc2EtPm91dHB1dF9oYW5kbGVzW2ldOwo+ICsJCWlmICghaGFuZGxlKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJc25kX3BjbV9jbG9zZShoYW5kbGUpOwo+ICsJCWFsc2EtPm91dHB1dF9oYW5k bGVzW2ldID0gTlVMTDsKPiArCX0KPiArCj4gKwlhbHNhLT5vdXRwdXRfaGFuZGxlc19jb3VudCA9 IDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbHNhX2Nsb3NlX291dHB1dDoKPiArICogQGFsc2E6 IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiArICoKPiArICogQ2xvc2UgdGhlIG9wZW4gQUxT QSBpbnB1dC4KPiArICovCj4gK3ZvaWQgYWxzYV9jbG9zZV9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxz YSkKPiArewo+ICsJc25kX3BjbV90ICpoYW5kbGUgPSBhbHNhLT5pbnB1dF9oYW5kbGU7Cj4gKwlp ZiAoIWhhbmRsZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJc25kX3BjbV9jbG9zZShoYW5kbGUpOwo+ ICsJYWxzYS0+aW5wdXRfaGFuZGxlID0gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgYWxz YV90ZXN0X2NvbmZpZ3VyYXRpb24oc25kX3BjbV90ICpoYW5kbGUsIGludCBjaGFubmVscywKPiAr CQkJICAgICBpbnQgc2FtcGxpbmdfcmF0ZSkKPiArewo+ICsJc25kX3BjbV9od19wYXJhbXNfdCAq cGFyYW1zOwo+ICsJaW50IHJldDsKPiArCj4gKwlzbmRfcGNtX2h3X3BhcmFtc19hbGxvY2EoJnBh cmFtcyk7Cj4gKwo+ICsJcmV0ID0gc25kX3BjbV9od19wYXJhbXNfYW55KGhhbmRsZSwgcGFyYW1z KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXQgPSBzbmRf cGNtX2h3X3BhcmFtc190ZXN0X3JhdGUoaGFuZGxlLCBwYXJhbXMsCj4gc2FtcGxpbmdfcmF0ZSwg MCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0ID0gc25k X3BjbV9od19wYXJhbXNfdGVzdF9jaGFubmVscyhoYW5kbGUsIHBhcmFtcywKPiBjaGFubmVscyk7 Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3VyYXRpb246Cj4g KyAqIEBhbHNhOiBUaGUgdGFyZ2V0IGFsc2Egc3RydWN0dXJlCj4gKyAqIEBjaGFubmVsczogVGhl IG51bWJlciBvZiBjaGFubmVscyB0byB0ZXN0Cj4gKyAqIEBzYW1wbGluZ19yYXRlOiBUaGUgc2Ft cGxpbmcgcmF0ZSB0byB0ZXN0Cj4gKyAqCj4gKyAqIFRlc3QgdGhlIG91dHB1dCBjb25maWd1cmF0 aW9uIHNwZWNpZmllZCBieSBAY2hhbm5lbHMgYW5kCj4gQHNhbXBsaW5nX3JhdGUKPiArICogZm9y IHRoZSBvdXRwdXQgZGV2aWNlcy4KPiArICoKPiArICogUmV0dXJuczogQSBib29sZWFuIGluZGlj YXRpbmcgd2hldGhlciB0aGUgdGVzdCBzdWNjZWVkZWQKPiArICovCj4gK2Jvb2wgYWxzYV90ZXN0 X291dHB1dF9jb25maWd1cmF0aW9uKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4g KwkJCSAgCSAgICBpbnQgc2FtcGxpbmdfcmF0ZSkKPiArewo+ICsJc25kX3BjbV90ICpoYW5kbGU7 Cj4gKwlib29sIHJldDsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBhbHNhLT5v dXRwdXRfaGFuZGxlc19jb3VudDsgaSsrKSB7Cj4gKwkJaGFuZGxlID0gYWxzYS0+b3V0cHV0X2hh bmRsZXNbaV07Cj4gKwo+ICsJCXJldCA9IGFsc2FfdGVzdF9jb25maWd1cmF0aW9uKGhhbmRsZSwg Y2hhbm5lbHMsCj4gc2FtcGxpbmdfcmF0ZSk7Cj4gKwkJaWYgKCFyZXQpCj4gKwkJCXJldHVybiBm YWxzZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFs c2FfdGVzdF9pbnB1dF9jb25maWd1cmF0aW9uOgo+ICsgKiBAYWxzYTogVGhlIHRhcmdldCBhbHNh IHN0cnVjdHVyZQo+ICsgKiBAY2hhbm5lbHM6IFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gdGVz dAo+ICsgKiBAc2FtcGxpbmdfcmF0ZTogVGhlIHNhbXBsaW5nIHJhdGUgdG8gdGVzdAo+ICsgKgo+ ICsgKiBUZXN0IHRoZSBpbnB1dCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSBAY2hhbm5lbHMg YW5kCj4gQHNhbXBsaW5nX3JhdGUKPiArICogZm9yIHRoZSBpbnB1dCBkZXZpY2UuCj4gKyAqCj4g KyAqIFJldHVybnM6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRlc3Qgc3VjY2Vl ZGVkCj4gKyAqLwo+ICtib29sIGFsc2FfdGVzdF9pbnB1dF9jb25maWd1cmF0aW9uKHN0cnVjdCBh bHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gKwkJCSAgCSAgIGludCBzYW1wbGluZ19yYXRlKQo+ ICt7Cj4gKwlyZXR1cm4gYWxzYV90ZXN0X2NvbmZpZ3VyYXRpb24oYWxzYS0+aW5wdXRfaGFuZGxl LCBjaGFubmVscywKPiArCQkJCSAgICAgICBzYW1wbGluZ19yYXRlKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGFsc2FfY29uZmlndXJlX291dHB1dDoKPiArICogQGFsc2E6IFRoZSB0YXJnZXQgYWxz YSBzdHJ1Y3R1cmUKPiArICogQGNoYW5uZWxzOiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHRl c3QKPiArICogQHNhbXBsaW5nX3JhdGU6IFRoZSBzYW1wbGluZyByYXRlIHRvIHRlc3QKPiArICoK PiArICogQ29uZmlndXJlIHRoZSBvdXRwdXQgZGV2aWNlcyB3aXRoIHRoZSBjb25maWd1cmF0aW9u IHNwZWNpZmllZCBieQo+IEBjaGFubmVscwo+ICsgKiBhbmQgQHNhbXBsaW5nX3JhdGUuCj4gKyAq Lwo+ICt2b2lkIGFsc2FfY29uZmlndXJlX291dHB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGNo YW5uZWxzLAo+ICsJCQkgICBpbnQgc2FtcGxpbmdfcmF0ZSkKPiArewo+ICsJc25kX3BjbV90ICpo YW5kbGU7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGFs c2EtPm91dHB1dF9oYW5kbGVzX2NvdW50OyBpKyspIHsKPiArCQloYW5kbGUgPSBhbHNhLT5vdXRw dXRfaGFuZGxlc1tpXTsKPiArCj4gKwkJcmV0ID0gc25kX3BjbV9zZXRfcGFyYW1zKGhhbmRsZSwK PiBTTkRfUENNX0ZPUk1BVF9TMTZfTEUsCj4gKwkJCQkJIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVS TEVBVgo+IEVELAo+ICsJCQkJCSBjaGFubmVscywgc2FtcGxpbmdfcmF0ZSwgMCwKPiAwKTsKPiAr CQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKPiArCX0KPiArCj4gKwlhbHNhLT5vdXRwdXRfY2hhbm5l bHMgPSBjaGFubmVsczsKPiArCWFsc2EtPm91dHB1dF9zYW1wbGluZ19yYXRlID0gc2FtcGxpbmdf cmF0ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFsc2FfY29uZmlndXJlX2lucHV0Ogo+ICsgKiBA YWxzYTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQo+ICsgKiBAY2hhbm5lbHM6IFRoZSBudW1i ZXIgb2YgY2hhbm5lbHMgdG8gdGVzdAo+ICsgKiBAc2FtcGxpbmdfcmF0ZTogVGhlIHNhbXBsaW5n IHJhdGUgdG8gdGVzdAo+ICsgKgo+ICsgKiBDb25maWd1cmUgdGhlIGlucHV0IGRldmljZSB3aXRo IHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieQo+IEBjaGFubmVscwo+ICsgKiBhbmQgQHNh bXBsaW5nX3JhdGUuCj4gKyAqLwo+ICt2b2lkIGFsc2FfY29uZmlndXJlX2lucHV0KHN0cnVjdCBh bHNhICphbHNhLCBpbnQgY2hhbm5lbHMsCj4gKwkJCSAgaW50IHNhbXBsaW5nX3JhdGUpCj4gK3sK PiArCXNuZF9wY21fdCAqaGFuZGxlOwo+ICsJaW50IHJldDsKPiArCj4gKwloYW5kbGUgPSBhbHNh LT5pbnB1dF9oYW5kbGU7Cj4gKwo+ICsJcmV0ID0gc25kX3BjbV9zZXRfcGFyYW1zKGhhbmRsZSwg U05EX1BDTV9GT1JNQVRfUzE2X0xFLAo+ICsJCQkJIFNORF9QQ01fQUNDRVNTX1JXX0lOVEVSTEVB VkVELAo+IGNoYW5uZWxzLAo+ICsJCQkJIHNhbXBsaW5nX3JhdGUsIDAsIDApOwo+ICsJaWd0X2Fz c2VydChyZXQgPj0gMCk7Cj4gKwo+ICsJYWxzYS0+aW5wdXRfY2hhbm5lbHMgPSBjaGFubmVsczsK PiArCWFsc2EtPmlucHV0X3NhbXBsaW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlOwo+ICsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGFsc2FfcmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrOgo+ICsgKiBAYWxz YTogVGhlIHRhcmdldCBhbHNhIHN0cnVjdHVyZQo+ICsgKiBAY2FsbGJhY2s6IFRoZSBjYWxsYmFj ayBmdW5jdGlvbiB0byBjYWxsIHRvIGZpbGwgb3V0cHV0IGRhdGEKPiArICogQGNhbGxiYWNrX2Rh dGE6IFRoZSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24KPiAr ICogQHNhbXBsZXNfdHJpZ2dlcjogVGhlIHJlcXVpcmVkIG51bWJlciBvZiBzYW1wbGVzIHRvIHRy aWdnZXIgdGhlCj4gY2FsbGJhY2sKPiArICoKPiArICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5j dGlvbiB0byBiZSBjYWxsZWQgdG8gZmlsbCBvdXRwdXQgZGF0YQo+IGR1cmluZyBhIHJ1bi4KPiAr ICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIEBzYW1wbGVzX3RyaWdnZXIgc2FtcGxlcyBh cmUKPiByZXF1aXJlZC4KPiArICoKPiArICogVGhlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4g aW50ZWdlciBlcXVhbCB0byB6ZXJvIGZvciBzdWNjZXNzCj4gYW5kIG5lZ2F0aXZlCj4gKyAqIGZv ciBmYWlsdXJlLgo+ICsgKi8KPiArdm9pZCBhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhz dHJ1Y3QgYWxzYSAqYWxzYSwKPiArCQkJCSAgIGludCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhLCBz aG9ydAo+ICpidWZmZXIsIGludCBzYW1wbGVzKSwKPiArCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2Rh dGEsIGludAo+IHNhbXBsZXNfdHJpZ2dlcikKPiArewo+ICsJYWxzYS0+b3V0cHV0X2NhbGxiYWNr ID0gY2FsbGJhY2s7Cj4gKwlhbHNhLT5vdXRwdXRfY2FsbGJhY2tfZGF0YSA9IGNhbGxiYWNrX2Rh dGE7Cj4gKwlhbHNhLT5vdXRwdXRfc2FtcGxlc190cmlnZ2VyID0gc2FtcGxlc190cmlnZ2VyOwo+ ICt9Cj4gKwo+ICsvKioKPiArICogYWxzYV9yZWdpc3Rlcl9pbnB1dF9jYWxsYmFjazoKPiArICog QGFsc2E6IFRoZSB0YXJnZXQgYWxzYSBzdHJ1Y3R1cmUKPiArICogQGNhbGxiYWNrOiBUaGUgY2Fs bGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGlucHV0IGRhdGEgaXMKPiBhdmFpbGFibGUKPiAr ICogQGNhbGxiYWNrX2RhdGE6IFRoZSBkYXRhIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY2FsbGJh Y2sgZnVuY3Rpb24KPiArICogQHNhbXBsZXNfdHJpZ2dlcjogVGhlIHJlcXVpcmVkIG51bWJlciBv ZiBzYW1wbGVzIHRvIHRyaWdnZXIgdGhlCj4gY2FsbGJhY2sKPiArICoKPiArICogUmVnaXN0ZXIg YSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBpbnB1dCBkYXRhIGlzCj4gYXZh aWxhYmxlIGR1cmluZwo+ICsgKiBhIHJ1bi4gVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIEBz YW1wbGVzX3RyaWdnZXIgc2FtcGxlcyBhcmUKPiBhdmFpbGFibGUuCj4gKyAqCj4gKyAqIFRoZSBj YWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIgZXF1YWwgdG8gemVybyBmb3Igc3VjY2Vz cywKPiBuZWdhdGl2ZSBmb3IKPiArICogZmFpbHVyZSBhbmQgcG9zaXRpdmUgdG8gaW5kaWNhdGUg dGhhdCB0aGUgcnVuIHNob3VsZCBzdG9wLgo+ICsgKi8KPiArdm9pZCBhbHNhX3JlZ2lzdGVyX2lu cHV0X2NhbGxiYWNrKHN0cnVjdCBhbHNhICphbHNhLAo+ICsJCQkJICBpbnQgKCpjYWxsYmFjayko dm9pZCAqZGF0YSwgc2hvcnQKPiAqYnVmZmVyLCBpbnQgc2FtcGxlcyksCj4gKwkJCQkgIHZvaWQg KmNhbGxiYWNrX2RhdGEsIGludAo+IHNhbXBsZXNfdHJpZ2dlcikKPiArewo+ICsJYWxzYS0+aW5w dXRfY2FsbGJhY2sgPSBjYWxsYmFjazsKPiArCWFsc2EtPmlucHV0X2NhbGxiYWNrX2RhdGEgPSBj YWxsYmFja19kYXRhOwo+ICsJYWxzYS0+aW5wdXRfc2FtcGxlc190cmlnZ2VyID0gc2FtcGxlc190 cmlnZ2VyOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYWxzYV9ydW46Cj4gKyAqIEBhbHNhOiBUaGUg dGFyZ2V0IGFsc2Egc3RydWN0dXJlCj4gKyAqIEBkdXJhdGlvbl9tczogVGhlIG1heGltdW0gZHVy YXRpb24gb2YgdGhlIHJ1biBpbiBtaWxsaXNlY29uZHMKPiArICoKPiArICogUnVuIEFMU0EgcGxh eWJhY2sgYW5kIGNhcHR1cmUgb24gdGhlIGlucHV0IGFuZCBvdXRwdXQgZGV2aWNlcyBmb3IKPiBh dAo+ICsgKiBtb3N0IEBkdXJhdGlvbl9tcyBtaWxsaXNlY29uZHMsIGNhbGxpbmcgdGhlIHJlZ2lz dGVyZWQgY2FsbGJhY2tzCj4gd2hlbiBuZWVkZWQuCj4gKyAqCj4gKyAqIFJldHVybnM6IEFuIGlu dGVnZXIgZXF1YWwgdG8gemVybyBmb3Igc3VjY2VzcywgcG9zaXRpdmUgZm9yIGEKPiBzdG9wIGNh dXNlZAo+ICsgKiBieSB0aGUgaW5wdXQgY2FsbGJhY2sgYW5kIG5lZ2F0aXZlIGZvciBmYWlsdXJl Cj4gKyAqLwo+ICtpbnQgYWxzYV9ydW4oc3RydWN0IGFsc2EgKmFsc2EsIGludCBkdXJhdGlvbl9t cykKPiArewo+ICsJc25kX3BjbV90ICpoYW5kbGU7Cj4gKwlzaG9ydCAqb3V0cHV0X2J1ZmZlciA9 IE5VTEw7Cj4gKwlzaG9ydCAqaW5wdXRfYnVmZmVyID0gTlVMTDsKPiArCWludCBvdXRwdXRfbGlt aXQ7Cj4gKwlpbnQgb3V0cHV0X3RvdGFsID0gMDsKPiArCWludCBvdXRwdXRfY291bnRzW2Fsc2Et Pm91dHB1dF9oYW5kbGVzX2NvdW50XTsKPiArCWJvb2wgb3V0cHV0X3JlYWR5ID0gZmFsc2U7Cj4g KwlpbnQgb3V0cHV0X2NoYW5uZWxzOwo+ICsJaW50IG91dHB1dF90cmlnZ2VyOwo+ICsJaW50IGlu cHV0X2xpbWl0Owo+ICsJaW50IGlucHV0X3RvdGFsID0gMDsKPiArCWludCBpbnB1dF9jb3VudCA9 IDA7Cj4gKwlpbnQgaW5wdXRfY2hhbm5lbHM7Cj4gKwlpbnQgaW5wdXRfdHJpZ2dlcjsKPiArCWJv b2wgcmVhY2hlZDsKPiArCWludCBpbmRleDsKPiArCWludCBjb3VudDsKPiArCWludCBhdmFpbDsK PiArCWludCBpOwo+ICsJaW50IHJldDsKPiArCj4gKwlvdXRwdXRfbGltaXQgPSBhbHNhLT5vdXRw dXRfc2FtcGxpbmdfcmF0ZSAqIGR1cmF0aW9uX21zIC8KPiAxMDAwOwo+ICsJb3V0cHV0X2NoYW5u ZWxzID0gYWxzYS0+b3V0cHV0X2NoYW5uZWxzOwo+ICsJb3V0cHV0X3RyaWdnZXIgPSBhbHNhLT5v dXRwdXRfc2FtcGxlc190cmlnZ2VyOwo+ICsJb3V0cHV0X2J1ZmZlciA9IG1hbGxvYyhzaXplb2Yo c2hvcnQpICogb3V0cHV0X2NoYW5uZWxzICoKPiArCQkJICAgICAgIG91dHB1dF90cmlnZ2VyKTsK PiArCj4gKwlpZiAoYWxzYS0+aW5wdXRfY2FsbGJhY2spIHsKPiArCQlpbnB1dF9saW1pdCA9IGFs c2EtPmlucHV0X3NhbXBsaW5nX3JhdGUgKgo+IGR1cmF0aW9uX21zIC8gMTAwMDsKPiArCQlpbnB1 dF90cmlnZ2VyID0gYWxzYS0+aW5wdXRfc2FtcGxlc190cmlnZ2VyOwo+ICsJCWlucHV0X2NoYW5u ZWxzID0gYWxzYS0+aW5wdXRfY2hhbm5lbHM7Cj4gKwkJaW5wdXRfYnVmZmVyID0gbWFsbG9jKHNp emVvZihzaG9ydCkgKiBpbnB1dF9jaGFubmVscwo+ICoKPiArCQkJCSAgICAgIGlucHV0X3RyaWdn ZXIpOwo+ICsJfQo+ICsKPiArCWRvIHsKPiArCQlyZWFjaGVkID0gdHJ1ZTsKPiArCj4gKwkJaWYg KG91dHB1dF90b3RhbCA8IG91dHB1dF9saW1pdCkgewo+ICsJCQlyZWFjaGVkID0gZmFsc2U7Cj4g Kwo+ICsJCQlpZiAoIW91dHB1dF9yZWFkeSkgewo+ICsJCQkJb3V0cHV0X3JlYWR5ID0gdHJ1ZTsK PiArCj4gKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWxzYS0KPiA+b3V0cHV0X2hhbmRsZXNfY291bnQ7 IGkrKykKPiArCQkJCQlvdXRwdXRfY291bnRzW2ldID0gMDsKPiArCj4gKwkJCQlyZXQgPSBhbHNh LT5vdXRwdXRfY2FsbGJhY2soYWxzYS0KPiA+b3V0cHV0X2NhbGxiYWNrX2RhdGEsCj4gKwkJCQkJ CQkgICAgb3V0cHV0X2IKPiB1ZmZlciwKPiArCQkJCQkJCSAgICBvdXRwdXRfdAo+IHJpZ2dlcik7 Cj4gKwkJCQlpZiAocmV0IDwgMCkKPiArCQkJCQlnb3RvIGNvbXBsZXRlOwo+ICsJCQl9Cj4gKwo+ ICsJCQlmb3IgKGkgPSAwOyBpIDwgYWxzYS0+b3V0cHV0X2hhbmRsZXNfY291bnQ7Cj4gaSsrKSB7 Cj4gKwkJCQloYW5kbGUgPSBhbHNhLT5vdXRwdXRfaGFuZGxlc1tpXTsKPiArCj4gKwkJCQlpZiAo b3V0cHV0X2NvdW50c1tpXSA8Cj4gb3V0cHV0X3RyaWdnZXIgJiYKPiArCQkJCSAgICBzbmRfcGNt X2F2YWlsKGhhbmRsZSkgPiAwKSB7Cj4gKwkJCQkJaW5kZXggPSBvdXRwdXRfY291bnRzW2ldICoK PiArCQkJCQkJb3V0cHV0X2NoYW5uZWxzOwo+ICsJCQkJCWNvdW50ID0gb3V0cHV0X3RyaWdnZXIg LQo+ICsJCQkJCQlvdXRwdXRfY291bnRzW2ldOwo+ICsJCQkJCWF2YWlsID0KPiBzbmRfcGNtX2F2 YWlsKGhhbmRsZSk7Cj4gKwo+ICsJCQkJCWNvdW50ID0gYXZhaWwgPCBjb3VudCA/Cj4gYXZhaWwg OiBjb3VudDsKPiArCj4gKwkJCQkJcmV0ID0gc25kX3BjbV93cml0ZWkoaGFuZGxlLAo+ICsJCQkJ CQkJICAgICAmb3V0cHV0Cj4gX2J1ZmZlcltpbmRleF0sCj4gKwkJCQkJCQkgICAgIGNvdW50KTsK PiArCQkJCQlpZiAocmV0IDwgMCkgewo+ICsJCQkJCQlyZXQgPQo+IHNuZF9wY21fcmVjb3Zlciho YW5kbGUsCj4gKwkJCQkJCQkJICAgIAo+ICAgY291bnQsIDApOwo+ICsJCQkJCQlpZiAocmV0IDwg MCkKPiArCQkJCQkJCWdvdG8KPiBjb21wbGV0ZTsKPiArCQkJCQl9Cj4gKwo+ICsJCQkJCW91dHB1 dF9jb3VudHNbaV0gKz0gcmV0Owo+ICsJCQkJfQo+ICsJCQl9Cj4gKwo+ICsJCQlvdXRwdXRfcmVh ZHkgPSBmYWxzZTsKPiArCj4gKwkJCWZvciAoaSA9IDA7IGkgPCBhbHNhLT5vdXRwdXRfaGFuZGxl c19jb3VudDsKPiBpKyspCj4gKwkJCQlpZiAob3V0cHV0X2NvdW50c1tpXSA8Cj4gb3V0cHV0X3Ry aWdnZXIpCj4gKwkJCQkJb3V0cHV0X3JlYWR5ID0gdHJ1ZTsKPiArCj4gKwkJCWlmICghb3V0cHV0 X3JlYWR5KQo+ICsJCQkJb3V0cHV0X3RvdGFsICs9IG91dHB1dF90cmlnZ2VyOwo+ICsKPiArCQl9 Cj4gKwo+ICsJCWlmIChhbHNhLT5pbnB1dF9jYWxsYmFjayAmJiBpbnB1dF90b3RhbCA8Cj4gaW5w dXRfbGltaXQpIHsKPiArCQkJcmVhY2hlZCA9IGZhbHNlOwo+ICsKPiArCQkJaWYgKGlucHV0X2Nv dW50ID09IGlucHV0X3RyaWdnZXIpIHsKPiArCQkJCWlucHV0X2NvdW50ID0gMDsKPiArCj4gKwkJ CQlyZXQgPSBhbHNhLT5pbnB1dF9jYWxsYmFjayhhbHNhLQo+ID5pbnB1dF9jYWxsYmFja19kYXRh LAo+ICsJCQkJCQkJICAgaW5wdXRfYnVmCj4gZmVyLAo+ICsJCQkJCQkJICAgaW5wdXRfdHJpCj4g Z2dlcik7Cj4gKwkJCQlpZiAocmV0ICE9IDApCj4gKwkJCQkJZ290byBjb21wbGV0ZTsKPiArCQkJ fQo+ICsKPiArCQkJaGFuZGxlID0gYWxzYS0+aW5wdXRfaGFuZGxlOwo+ICsKPiArCQkJaWYgKGlu cHV0X2NvdW50IDwgaW5wdXRfdHJpZ2dlciAmJgo+ICsJCQkgICAgKHNuZF9wY21fYXZhaWwoaGFu ZGxlKSA+IDAgfHwKPiBpbnB1dF90b3RhbCA9PSAwKSkgewo+ICsJCQkJaW5kZXggPSBpbnB1dF9j b3VudCAqCj4gaW5wdXRfY2hhbm5lbHM7Cj4gKwkJCQljb3VudCA9IGlucHV0X3RyaWdnZXIgLSBp bnB1dF9jb3VudDsKPiArCQkJCWF2YWlsID0gc25kX3BjbV9hdmFpbChoYW5kbGUpOwo+ICsKPiAr CQkJCWNvdW50ID0gYXZhaWwgPiAwICYmIGF2YWlsIDwgY291bnQgPwo+IGF2YWlsIDoKPiArCQkJ CQljb3VudDsKPiArCj4gKwkJCQlyZXQgPSBzbmRfcGNtX3JlYWRpKGhhbmRsZSwKPiArCQkJCQkJ ICAgICZpbnB1dF9idWZmZXJbaW4KPiBkZXhdLAo+ICsJCQkJCQkgICAgY291bnQpOwo+ICsJCQkJ aWYgKHJldCA9PSAtRUFHQUlOKSB7Cj4gKwkJCQkJcmV0ID0gMDsKPiArCQkJCX0gZWxzZSBpZiAo cmV0IDwgMCkgewo+ICsJCQkJCXJldCA9Cj4gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwgY291bnQs IDApOwo+ICsJCQkJCWlmIChyZXQgPCAwKQo+ICsJCQkJCQlnb3RvIGNvbXBsZXRlOwo+ICsJCQkJ fQo+ICsKPiArCQkJCWlucHV0X2NvdW50ICs9IHJldDsKPiArCQkJCWlucHV0X3RvdGFsICs9IHJl dDsKPiArCQkJfQo+ICsJCX0KPiArCX0gd2hpbGUgKCFyZWFjaGVkKTsKPiArCj4gKwlyZXQgPSAw Owo+ICsKPiArY29tcGxldGU6Cj4gKwlpZiAob3V0cHV0X2J1ZmZlcikKPiArCQlmcmVlKG91dHB1 dF9idWZmZXIpOwo+ICsKPiArCWlmIChpbnB1dF9idWZmZXIpCj4gKwkJZnJlZShpbnB1dF9idWZm ZXIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9hbHNh LmggYi9saWIvaWd0X2Fsc2EuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MDAuLjk5MTFkZGRlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3RfYWxzYS5oCj4gQEAg LTAsMCArMSw2MCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3Jh dGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbgo+IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiAiU29mdHdhcmUi KSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1YmxpY2Vuc2UsCj4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tCj4gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nCj4gY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZwo+ IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbAo+IHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoK PiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsCj4gRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUwo+IE9SIE9USEVSCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAo+ IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgo+IE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FS RS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogIFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtv Y2lhbGtvd3NraUBsaW51eC5pbnRlbC5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBJR1RfQUxT QV9ICj4gKyNkZWZpbmUgSUdUX0FMU0FfSAo+ICsKPiArI2lmZGVmIEhBVkVfQ09ORklHX0gKPiAr I2luY2x1ZGUgImNvbmZpZy5oIgo+ICsjZW5kaWYKPiArCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiAr I2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArCj4gK3N0cnVjdCBhbHNhOwo+ICsKPiArc3RydWN0IGFs c2EgKmFsc2FfaW5pdCh2b2lkKTsKPiAraW50IGFsc2Ffb3Blbl9vdXRwdXQoc3RydWN0IGFsc2Eg KmFsc2EsIGNvbnN0IGNoYXIgKmRldmljZV9uYW1lKTsKPiAraW50IGFsc2Ffb3Blbl9pbnB1dChz dHJ1Y3QgYWxzYSAqYWxzYSwgY29uc3QgY2hhciAqZGV2aWNlX25hbWUpOwo+ICt2b2lkIGFsc2Ff Y2xvc2Vfb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhKTsKPiArdm9pZCBhbHNhX2Nsb3NlX2lucHV0 KHN0cnVjdCBhbHNhICphbHNhKTsKPiArYm9vbCBhbHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3VyYXRp b24oc3RydWN0IGFsc2EgKmFsc2EsIGludCBjaGFubmVscywKPiArCQkJICAJICAgIGludCBzYW1w bGluZ19yYXRlKTsKPiArYm9vbCBhbHNhX3Rlc3RfaW5wdXRfY29uZmlndXJhdGlvbihzdHJ1Y3Qg YWxzYSAqYWxzYSwgaW50IGNoYW5uZWxzLAo+ICsJCQkgIAkgICBpbnQgc2FtcGxpbmdfcmF0ZSk7 Cj4gK3ZvaWQgYWxzYV9jb25maWd1cmVfb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhLCBpbnQgY2hh bm5lbHMsCj4gKwkJCSAgIGludCBzYW1wbGluZ19yYXRlKTsKPiArdm9pZCBhbHNhX2NvbmZpZ3Vy ZV9pbnB1dChzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGNoYW5uZWxzLAo+ICsJCQkgIGludCBzYW1w bGluZ19yYXRlKTsKPiArdm9pZCBhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhzdHJ1Y3Qg YWxzYSAqYWxzYSwKPiArCQkJCSAgIGludCAoKmNhbGxiYWNrKSh2b2lkICpkYXRhLCBzaG9ydAo+ ICpidWZmZXIsIGludCBzYW1wbGVzKSwKPiArCQkJCSAgIHZvaWQgKmNhbGxiYWNrX2RhdGEsIGlu dAo+IHNhbXBsZXNfdHJpZ2dlcik7Cj4gK3ZvaWQgYWxzYV9yZWdpc3Rlcl9pbnB1dF9jYWxsYmFj ayhzdHJ1Y3QgYWxzYSAqYWxzYSwKPiArCQkJCSAgaW50ICgqY2FsbGJhY2spKHZvaWQgKmRhdGEs IHNob3J0Cj4gKmJ1ZmZlciwgaW50IHNhbXBsZXMpLAo+ICsJCQkJICB2b2lkICpjYWxsYmFja19k YXRhLCBpbnQKPiBzYW1wbGVzX3RyaWdnZXIpOwo+ICtpbnQgYWxzYV9ydW4oc3RydWN0IGFsc2Eg KmFsc2EsIGludCBkdXJhdGlvbl9tcyk7Cj4gKwo+ICsjZW5kaWYKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==