From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MEXx1-0000am-6F for qemu-devel@nongnu.org; Wed, 10 Jun 2009 20:15:27 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MEXwv-0000Zo-Ve for qemu-devel@nongnu.org; Wed, 10 Jun 2009 20:15:26 -0400 Received: from [199.232.76.173] (port=50917 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MEXwv-0000Zl-ST for qemu-devel@nongnu.org; Wed, 10 Jun 2009 20:15:21 -0400 Received: from smtp-out.google.com ([216.239.33.17]:19774) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MEXwu-0007s7-NJ for qemu-devel@nongnu.org; Wed, 10 Jun 2009 20:15:21 -0400 Received: from zps78.corp.google.com (zps78.corp.google.com [172.25.146.78]) by smtp-out.google.com with ESMTP id n5B0FHkL017513 for ; Thu, 11 Jun 2009 01:15:18 +0100 Received: from bwz26 (bwz26.prod.google.com [10.188.26.26]) by zps78.corp.google.com with ESMTP id n5B0FEGa008906 for ; Wed, 10 Jun 2009 17:15:15 -0700 Received: by bwz26 with SMTP id 26so1227399bwz.7 for ; Wed, 10 Jun 2009 17:15:14 -0700 (PDT) MIME-Version: 1.0 Date: Thu, 11 Jun 2009 02:15:14 +0200 Message-ID: <60cad3f0906101715ufc754d1q339870a9fb8f8107@mail.gmail.com> From: David Turner Content-Type: multipart/mixed; boundary=001636c5b8ef6595fd046c077ce0 Subject: [Qemu-devel] [PATCH] Add WinWave-based audio backend to Windows QEMU builds List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, malc --001636c5b8ef6595fd046c077ce0 Content-Type: multipart/alternative; boundary=001636c5b8ef6595f8046c077cde --001636c5b8ef6595f8046c077cde Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Here's a patch that provides a Windows audio backend with both playback and record capabilities, named "winaudio". --001636c5b8ef6595f8046c077cde Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Here's a patch that provides a Windows audio backend with both playback and record capabilities, named "winaudio".

--001636c5b8ef6595f8046c077cde-- --001636c5b8ef6595fd046c077ce0 Content-Type: application/octet-stream; name="0001-Add-a-Windows-Wave-audio-backend-to-QEMU.patch" Content-Disposition: attachment; filename="0001-Add-a-Windows-Wave-audio-backend-to-QEMU.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvspw24c0 RnJvbSA0ZTA2MWEzMTJiNWY2NTc1NDYyZTNmYTUwYzdkZjIwNzg4ZTVmOTVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBkaWdpdCA8ZGlnaXRAZ29vZ2xlLmNvbT4KRGF0ZTogV2VkLCAx MCBKdW4gMjAwOSAxNDoxMToyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBhIFdpbmRvd3Mg V2F2ZSBhdWRpbyBiYWNrZW5kIHRvIFFFTVUuCgpUaGlzIGJhY2tlbmQgcHJvdmlkZXMgYm90aCBw bGF5YmFjayBhbmQgcmVjb3JkLiBJdCBkb2Vzbid0IGRlcGVuZApvbiBhbnkgZXh0ZXJuYWwgbGli cmFyeSBsaWtlIFNETCBvciBGTU9ELCBvciBhbnkgbm9uLWRpc3RyaWJ1dGFibGUKaGVhZGVycyBs aWtlIHRoZSBEaXJlY3RTb3VuZCBvbmVzLgoKRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBtYWRlIHRo ZSBkZWZhdWx0IGZvciBDeWd3aW4gYW5kIE1pbmd3IGJ1aWxkcwoKVGVzdGVkIG9uIGJvdGggQ3ln d2luIGFuZCBNU3lzIGJ1aWxkcy4KClNpZ25lZC1vZmYtYnk6IERhdmlkIFR1cm5lciA8ZGlnaXRA Z29vZ2xlLmNvbT4KLS0tCiBNYWtlZmlsZSAgICAgICAgICB8ICAgIDMgKwogYXVkaW8vYXVkaW9f aW50LmggfCAgICAxICsKIGF1ZGlvL3dpbmF1ZGlvLmMgIHwgIDY2MyArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogY29uZmlndXJlICAgICAgICAg fCAgICA4ICstCiA0IGZpbGVzIGNoYW5nZWQsIDY3MiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGF1ZGlvL3dpbmF1ZGlvLmMKCmRpZmYgLS1naXQgYS9N YWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDMxNzc2MTYuLjhmNzg5NGEgMTAwNjQ0Ci0tLSBhL01h a2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMzcsNiArMTM3LDkgQEAgZW5kaWYKIGlmZGVmIENP TkZJR19EU09VTkQKIEFVRElPX09CSlMgKz0gZHNvdW5kYXVkaW8ubwogZW5kaWYKK2lmZGVmIENP TkZJR19XSU5BVURJTworQVVESU9fT0JKUyArPSB3aW5hdWRpby5vCitlbmRpZgogaWZkZWYgQ09O RklHX0ZNT0QKIEFVRElPX09CSlMgKz0gZm1vZGF1ZGlvLm8KIGF1ZGlvL2F1ZGlvLm8gYXVkaW8v Zm1vZGF1ZGlvLm86IENQUEZMQUdTIDo9IC1JJChDT05GSUdfRk1PRF9JTkMpICQoQ1BQRkxBR1Mp CmRpZmYgLS1naXQgYS9hdWRpby9hdWRpb19pbnQuaCBiL2F1ZGlvL2F1ZGlvX2ludC5oCmluZGV4 IDBhYmVkMzguLmYyYzA4YWMgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2F1ZGlvX2ludC5oCisrKyBiL2F1 ZGlvL2F1ZGlvX2ludC5oCkBAIC0yMDcsNiArMjA3LDcgQEAgZXh0ZXJuIHN0cnVjdCBhdWRpb19k cml2ZXIgY29yZWF1ZGlvX2F1ZGlvX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgYXVkaW9fZHJpdmVy IGRzb3VuZF9hdWRpb19kcml2ZXI7CiBleHRlcm4gc3RydWN0IGF1ZGlvX2RyaXZlciBlc2RfYXVk aW9fZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBhdWRpb19kcml2ZXIgcGFfYXVkaW9fZHJpdmVyOwor ZXh0ZXJuIHN0cnVjdCBhdWRpb19kcml2ZXIgd2luYXVkaW9fYXVkaW9fZHJpdmVyOwogZXh0ZXJu IHN0cnVjdCBtaXhlbmdfdm9sdW1lIG5vbWluYWxfdm9sdW1lOwogCiB2b2lkIGF1ZGlvX3BjbV9p bml0X2luZm8gKHN0cnVjdCBhdWRpb19wY21faW5mbyAqaW5mbywgc3RydWN0IGF1ZHNldHRpbmdz ICphcyk7CmRpZmYgLS1naXQgYS9hdWRpby93aW5hdWRpby5jIGIvYXVkaW8vd2luYXVkaW8uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDAwZjdiCi0tLSAvZGV2L251bGwK KysrIGIvYXVkaW8vd2luYXVkaW8uYwpAQCAtMCwwICsxLDY2MyBAQAorLyoKKyAqIFFFTVUgInNp bXBsZSIgV2luZG93cyBhdWRpbyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhl IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK KyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK KyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPHdp bmRvd3MuaD4KKyNpbmNsdWRlIDxtbXN5c3RlbS5oPgorCisjaW5jbHVkZSAicWVtdS1jb21tb24u aCIKKyNpbmNsdWRlICJhdWRpby5oIgorCisjZGVmaW5lIEFVRElPX0NBUCAid2luYXVkaW8iCisj aW5jbHVkZSAiYXVkaW9faW50LmgiCisKKy8qIGRlZmluZSBERUJVRyB0byAxIHRvIGR1bXAgYXVk aW8gZGVidWdnaW5nIGluZm8gYXQgcnVudGltZSB0byBzdGRlcnIgKi8KKyNkZWZpbmUgIERFQlVH ICAwCisKKy8qIGRlZmluZSBERUJVR19USU1JTkcgdG8gMSB0byBkdW1wIHRpbWluZyBkZWJ1Z2dp bmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgIERFQlVHX1RJTUlORyAgMAorCisjaWYgREVCVUcKKyMg IGRlZmluZSAgRCguLi4pICAgcHJpbnRmKF9fVkFfQVJHU19fKQorI2Vsc2UKKyMgIGRlZmluZSAg RCguLi4pICAgKCh2b2lkKTApCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB7CisgICAgaW50IG5i X3NhbXBsZXM7Cit9IGNvbmYgPSB7CisgICAgMTAyNAorfTsKKworI2lmIERFQlVHX1RJTUlORwor aW50NjRfdCAgc3RhcnRfdGltZTsKK2ludDY0X3QgIGxhc3RfdGltZTsKKyNlbmRpZgorCisvKiBY UCB3b3JrcyB3ZWxsIHdpdGggNCwgYnV0IFZpc3RhIHN0cnVnZ2xlcyB3aXRoIGFueXRoaW5nIGxl c3MgdGhhbiA4ICovCisjZGVmaW5lICBOVU1fT1VUX0JVRkZFUlMgIDggIC8qIG11c3QgYmUgYXQg bGVhc3QgMiAqLworCisvKiogQ09NTU9OIFVUSUxJVElFUworICoqLworCisjaWYgREVCVUcKK3N0 YXRpYyB2b2lkCitkdW1wX21tZXJyb3IoIGNvbnN0IGNoYXIqICBmdW5jLCBNTVJFU1VMVCAgZXJy b3IgKQoreworICAgIGNvbnN0IGNoYXIqICByZWFzb24gPSBOVUxMOworCisgICAgZnByaW50Zihz dGRlcnIsICIlcyByZXR1cm5lZCBlcnJvcjogIiwgZnVuYyk7CisgICAgc3dpdGNoIChlcnJvcikg eworICAgICAgICBjYXNlIE1NU1lTRVJSX0FMTE9DQVRFRDogICByZWFzb249InNwZWNpZmllZCBy ZXNvdXJjZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCI7IGJyZWFrOworICAgICAgICBjYXNlIE1NU1lT RVJSX0JBRERFVklDRUlEOiByZWFzb249ImJhZCBkZXZpY2UgaWQiOyBicmVhazsKKyAgICAgICAg Y2FzZSBNTVNZU0VSUl9OT0RSSVZFUjogICAgcmVhc29uPSJubyBkcml2ZXIgaXMgcHJlc2VudCI7 IGJyZWFrOworICAgICAgICBjYXNlIE1NU1lTRVJSX05PTUVNOiAgICAgICByZWFzb249InVuYWJs ZSB0byBhbGxvY2F0ZSBvciBsb2NrIG1lbW9yeSI7IGJyZWFrOworICAgICAgICBjYXNlIFdBVkVS Ul9CQURGT1JNQVQ6ICAgICByZWFzb249InVuc3VwcG9ydGVkIHdhdmVmb3JtLWF1ZGlvIGZvcm1h dCI7IGJyZWFrOworICAgICAgICBjYXNlIFdBVkVSUl9TWU5DOiAgICAgICAgICByZWFzb249ImRl dmljZSBpcyBzeW5jaHJvbm91cyI7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJ1bmtub3duKCVkKVxuIiwgZXJyb3IpOworICAgIH0KKyAgICBp ZiAocmVhc29uKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCByZWFzb24pOworfQor I2Vsc2UKKyMgIGRlZmluZSAgZHVtcF9tbWVycm9yKGZ1bmMsZXJyb3IpICAoKHZvaWQpMCkKKyNl bmRpZgorCisKKy8qKiBBVURJTyBPVVQKKyAqKi8KKwordHlwZWRlZiBzdHJ1Y3QgV2luQXVkaW9P dXQgeworICAgIEhXVm9pY2VPdXQgICAgICAgIGh3OworICAgIEhXQVZFT1VUICAgICAgICAgIHdh dmVvdXQ7CisgICAgaW50ICAgICAgICAgICAgICAgc2lsZW5jZTsKKyAgICBDUklUSUNBTF9TRUNU SU9OICBsb2NrOworICAgIHVuc2lnbmVkIGNoYXIqICAgIGJ1ZmZlcl9ieXRlczsKKyAgICBXQVZF SERSICAgICAgICAgICBidWZmZXJzWyBOVU1fT1VUX0JVRkZFUlMgXTsKKyAgICBpbnQgICAgICAg ICAgICAgICB3cml0ZV9pbmRleDsgICAvKiBzdGFydGluZyBmaXJzdCB3cml0YWJsZSBidWZmZXIg ICAgICAqLworICAgIGludCAgICAgICAgICAgICAgIHdyaXRlX2NvdW50OyAgIC8qIGF2YWlsYWJs ZSB3cml0YWJsZSBidWZmZXJzIGNvdW50ICAgICovCisgICAgaW50ICAgICAgICAgICAgICAgd3Jp dGVfcG9zOyAgICAgLyogcG9zaXRpb24gaW4gY3VycmVudCB3cml0YWJsZSBidWZmZXIgKi8KKyAg ICBpbnQgICAgICAgICAgICAgICB3cml0ZV9zaXplOyAgICAvKiBzaXplIGluIGJ5dGVzIG9mIGVh Y2ggYnVmZmVyICAgICAgICAqLworfSBXaW5BdWRpb091dDsKKworLyogVGhlIGNhbGxiYWNrIHRo YXQgaXMgY2FsbGVkIHdoZW4gV2luZG93cyBoYXMgZmluaXNoZWQgcGxheWluZyBhIGJ1ZmZlciAq Lworc3RhdGljIHZvaWQgQ0FMTEJBQ0sKK3dpbmF1ZGlvX291dF9idWZmZXJfZG9uZSAoSFdBVkVP VVQgaHdvLCBVSU5UIHVNc2csIERXT1JEX1BUUiBkd0luc3RhbmNlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBEV09SRCBkd1BhcmFtMSwgRFdPUkQgZHdQYXJhbTIpCit7CisgICAgV2luQXVk aW9PdXQqICBzID0gKFdpbkF1ZGlvT3V0KikgZHdJbnN0YW5jZTsKKworICAgIC8qIE9ubHkgc2Vy dmljZSAiYnVmZmVyIGRvbmUgcGxheWluZyIgbWVzc2FnZXMgKi8KKyAgICBpZiAoIHVNc2cgIT0g V09NX0RPTkUgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBTaWduYWwgdGhhdCB3ZSBhcmUg ZG9uZSBwbGF5aW5nIGEgYnVmZmVyICovCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZzLT5s b2NrICk7CisgICAgaWYgKHMtPndyaXRlX2NvdW50IDwgTlVNX09VVF9CVUZGRVJTKQorICAgICAg ICBzLT53cml0ZV9jb3VudCArPSAxOworICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmcy0+bG9j ayApOworfQorCitzdGF0aWMgaW50Cit3aW5hdWRpb19vdXRfd3JpdGUgKFNXVm9pY2VPdXQgKnN3 LCB2b2lkICpidWYsIGludCBsZW4pCit7CisgICAgcmV0dXJuIGF1ZGlvX3BjbV9zd193cml0ZSAo c3csIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQKK3dpbmF1ZGlvX291dF9maW5pIChIV1Zv aWNlT3V0ICpodykKK3sKKyAgICBXaW5BdWRpb091dCogIHMgPSAoV2luQXVkaW9PdXQqKSBodzsK KyAgICBpbnQgICAgICAgICAgIGk7CisKKyAgICBpZiAocy0+d2F2ZW91dCkgeworICAgICAgICB3 YXZlT3V0UmVzZXQocy0+d2F2ZW91dCk7CisgICAgICAgIHMtPndhdmVvdXQgPSAwOworICAgIH0K KworICAgIGZvciAoIGk9MDsgaTxOVU1fT1VUX0JVRkZFUlM7ICsraSApIHsKKyAgICAgICAgaWYg KCBzLT5idWZmZXJzW2ldLmR3VXNlciAhPSAweEZGRkYgKSB7CisgICAgICAgICAgICB3YXZlT3V0 VW5wcmVwYXJlSGVhZGVyKAorICAgICAgICAgICAgICAgIHMtPndhdmVvdXQsICZzLT5idWZmZXJz W2ldLCBzaXplb2Yocy0+YnVmZmVyc1tpXSkgKTsKKyAgICAgICAgICAgICAgICBzLT5idWZmZXJz W2ldLmR3VXNlciA9IDB4RkZGRjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzLT5idWZm ZXJfYnl0ZXMgIT0gTlVMTCkgeworICAgICAgICBxZW11X2ZyZWUocy0+YnVmZmVyX2J5dGVzKTsK KyAgICAgICAgcy0+YnVmZmVyX2J5dGVzID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocy0+d2F2 ZW91dCkgeworICAgICAgICB3YXZlT3V0Q2xvc2Uocy0+d2F2ZW91dCk7CisgICAgICAgIHMtPndh dmVvdXQgPSBOVUxMOworICAgIH0KK30KKworCitzdGF0aWMgaW50Cit3aW5hdWRpb19vdXRfaW5p dCAoSFdWb2ljZU91dCAqaHcsIHN0cnVjdCBhdWRzZXR0aW5ncyAqYXMpCit7CisgICAgV2luQXVk aW9PdXQqICAgcyA9IChXaW5BdWRpb091dCopIGh3OworICAgIE1NUkVTVUxUICAgICAgIHJlc3Vs dDsKKyAgICBXQVZFRk9STUFURVggICBmb3JtYXQ7CisgICAgaW50ICAgICAgICAgICAgc2hpZnQs IGksIHNhbXBsZXNfc2l6ZTsKKworICAgIHMtPndhdmVvdXQgPSBOVUxMOworICAgIEluaXRpYWxp emVDcml0aWNhbFNlY3Rpb24oICZzLT5sb2NrICk7CisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9P VVRfQlVGRkVSUzsgaSsrKSB7CisgICAgICAgIHMtPmJ1ZmZlcnNbaV0uZHdVc2VyID0gMHhGRkZG OworICAgIH0KKyAgICBzLT5idWZmZXJfYnl0ZXMgPSBOVUxMOworCisgICAgLyogY29tcHV0ZSBk ZXNpcmVkIHdhdmUgb3V0cHV0IGZvcm1hdCAqLworICAgIGZvcm1hdC53Rm9ybWF0VGFnICAgICAg PSBXQVZFX0ZPUk1BVF9QQ007CisgICAgZm9ybWF0Lm5DaGFubmVscyAgICAgICA9IGFzLT5uY2hh bm5lbHM7CisgICAgZm9ybWF0Lm5TYW1wbGVzUGVyU2VjICA9IGFzLT5mcmVxOworICAgIGZvcm1h dC5uQXZnQnl0ZXNQZXJTZWMgPSBhcy0+ZnJlcSphcy0+bmNoYW5uZWxzOworCisgICAgcy0+c2ls ZW5jZSA9IDA7CisKKyAgICBzd2l0Y2ggKGFzLT5mbXQpIHsKKyAgICAgICAgY2FzZSBBVURfRk1U X1M4OiAgIHNoaWZ0ID0gMDsgYnJlYWs7CisgICAgICAgIGNhc2UgQVVEX0ZNVF9VODogICBzaGlm dCA9IDA7IHMtPnNpbGVuY2UgPSAweDgwOyBicmVhazsKKyAgICAgICAgY2FzZSBBVURfRk1UX1Mx NjogIHNoaWZ0ID0gMTsgYnJlYWs7CisgICAgICAgIGNhc2UgQVVEX0ZNVF9VMTY6ICBzaGlmdCA9 IDE7IHMtPnNpbGVuY2UgPSAweDgwMDA7IGJyZWFrOworICAgICAgICBjYXNlIEFVRF9GTVRfUzMy OiAgc2hpZnQgPSAyOyBicmVhazsKKyAgICAgICAgY2FzZSBBVURfRk1UX1UzMjogIHNoaWZ0ID0g Mjsgcy0+c2lsZW5jZSA9IDB4ODAwMDAwMDA7IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiB3aW5hdWRpbzogQmFkIG91dHB1dCBhdWRp byBmb3JtYXQ6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBhcy0+Zm10KTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9ybWF0Lm5BdmdCeXRlc1BlclNlYyA9 IChmb3JtYXQublNhbXBsZXNQZXJTZWMgJiBmb3JtYXQubkNoYW5uZWxzKSA8PCBzaGlmdDsKKyAg ICBmb3JtYXQubkJsb2NrQWxpZ24gICAgID0gZm9ybWF0Lm5DaGFubmVscyA8PCBzaGlmdDsKKyAg ICBmb3JtYXQud0JpdHNQZXJTYW1wbGUgID0gOCA8PCBzaGlmdDsKKyAgICBmb3JtYXQuY2JTaXpl ICAgICAgICAgID0gMDsKKworICAgIC8qIG9wZW4gdGhlIHdhdmUgb3V0IGRldmljZSAqLworICAg IHJlc3VsdCA9IHdhdmVPdXRPcGVuKCAmcy0+d2F2ZW91dCwgV0FWRV9NQVBQRVIsICZmb3JtYXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgIChEV09SRF9QVFIpIHdpbmF1ZGlvX291dF9idWZm ZXJfZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEX1BUUikgaHcsIENBTExC QUNLX0ZVTkNUSU9OKTsKKyAgICBpZiAoIHJlc3VsdCAhPSBNTVNZU0VSUl9OT0VSUk9SICkgewor ICAgICAgICBkdW1wX21tZXJyb3IoICJxZW11OiB3aW5hdWRpbzogd2F2ZU91dE9wZW4oKSIsIHJl c3VsdCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc2FtcGxlc19zaXpl ICAgID0gZm9ybWF0Lm5CbG9ja0FsaWduICogY29uZi5uYl9zYW1wbGVzOworICAgIHMtPmJ1ZmZl cl9ieXRlcyA9IHFlbXVfbWFsbG9jKCBOVU1fT1VUX0JVRkZFUlMgKiBzYW1wbGVzX3NpemUgKTsK KyAgICBpZiAocy0+YnVmZmVyX2J5dGVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHdhdmVPdXRD bG9zZSggcy0+d2F2ZW91dCApOworICAgICAgICAgICAgcy0+d2F2ZW91dCA9IE5VTEw7CisgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBXaW5kb3dzIGF1 ZGlvIGJ1ZmZlcnNcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZv ciAoaSA9IDA7IGkgPCBOVU1fT1VUX0JVRkZFUlM7IGkrKykgeworICAgICAgICBtZW1zZXQoICZz LT5idWZmZXJzW2ldLCAwLCBzaXplb2Yocy0+YnVmZmVyc1tpXSkgKTsKKyAgICAgICAgcy0+YnVm ZmVyc1tpXS5scERhdGEgICAgICAgICA9IChMUFNUUikocy0+YnVmZmVyX2J5dGVzICsgaSpzYW1w bGVzX3NpemUpOworICAgICAgICBzLT5idWZmZXJzW2ldLmR3QnVmZmVyTGVuZ3RoID0gc2FtcGxl c19zaXplOworICAgICAgICBzLT5idWZmZXJzW2ldLmR3RmxhZ3MgICAgICAgID0gV0hEUl9ET05F OworCisgICAgICAgIHJlc3VsdCA9IHdhdmVPdXRQcmVwYXJlSGVhZGVyKCBzLT53YXZlb3V0LCAm cy0+YnVmZmVyc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihzLT5idWZmZXJzW2ldKSApOworICAgICAgICBpZiAoIHJlc3VsdCAhPSBNTVNZU0VSUl9O T0VSUk9SICkgeworICAgICAgICAgICAgZHVtcF9tbWVycm9yKCJ3YXZlT3V0UHJlcGFyZUhlYWRl cigpIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0K KworI2lmIERFQlVHCisgICAgLyogQ2hlY2sgdGhlIHNvdW5kIGRldmljZSB3ZSByZXRyaWV2ZWQg Ki8KKyAgICB7CisgICAgICAgIFdBVkVPVVRDQVBTIGNhcHM7CisKKyAgICAgICAgcmVzdWx0ID0g d2F2ZU91dEdldERldkNhcHMoKFVJTlQpIHMtPndhdmVvdXQsICZjYXBzLCBzaXplb2YoY2Fwcykp OworICAgICAgICBpZiAoIHJlc3VsdCAhPSBNTVNZU0VSUl9OT0VSUk9SICkgeworICAgICAgICAg ICAgZHVtcF9tbWVycm9yKCJ3YXZlT3V0R2V0RGV2Q2FwcygpIiwgcmVzdWx0KTsKKyAgICAgICAg fSBlbHNlCisgICAgICAgICAgICBwcmludGYoIkF1ZGlvIG91dCBkZXZpY2U6ICVzXG4iLCBjYXBz LnN6UG5hbWUpOworICAgIH0KKyNlbmRpZgorCisgICAgYXVkaW9fcGNtX2luaXRfaW5mbyAoJmh3 LT5pbmZvLCBhcyk7CisgICAgaHctPnNhbXBsZXMgPSBjb25mLm5iX3NhbXBsZXMqMjsKKworICAg IHMtPndyaXRlX2luZGV4ID0gMDsKKyAgICBzLT53cml0ZV9jb3VudCA9IE5VTV9PVVRfQlVGRkVS UzsKKyAgICBzLT53cml0ZV9wb3MgICA9IDA7CisgICAgcy0+d3JpdGVfc2l6ZSAgPSBzYW1wbGVz X3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludAord2luYXVkaW9fb3V0X3J1 biAoSFdWb2ljZU91dCAqaHcpCit7CisgICAgV2luQXVkaW9PdXQqICBzICAgICAgPSAoV2luQXVk aW9PdXQqKSBodzsKKyAgICBpbnQgICAgICAgICAgIHBsYXllZCA9IDA7CisgICAgaW50ICAgICAg ICAgICBoYXNfYnVmZmVyOworICAgIGludCAgICAgICAgICAgbGl2ZSA9IGF1ZGlvX3BjbV9od19n ZXRfbGl2ZV9vdXQgKGh3KTsKKworICAgIGlmICghbGl2ZSkgeworICAgICAgICByZXR1cm4gMDsK KyAgICB9CisKKyAgICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJnMtPmxvY2sgKTsKKyAgICBoYXNf YnVmZmVyID0gKHMtPndyaXRlX2NvdW50ID4gMCk7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24o ICZzLT5sb2NrICk7CisKKyAgICBpZiAoIWhhc19idWZmZXIpCisgICAgICAgIHJldHVybiAwOwor CisgICAgd2hpbGUgKGxpdmUgPiAwKSB7CisgICAgICAgIFdBVkVIRFIqICAgICAgd2F2X2J1ZmZl ciAgPSBzLT5idWZmZXJzICsgcy0+d3JpdGVfaW5kZXg7CisgICAgICAgIGludCAgICAgICAgICAg d2F2X2J5dGVzICAgPSAocy0+d3JpdGVfc2l6ZSAtIHMtPndyaXRlX3Bvcyk7CisgICAgICAgIGlu dCAgICAgICAgICAgd2F2X3NhbXBsZXMgPSBhdWRpb19NSU4od2F2X2J5dGVzID4+IGh3LT5pbmZv LnNoaWZ0LCBsaXZlKTsKKyAgICAgICAgaW50ICAgICAgICAgICBod19zYW1wbGVzICA9IGF1ZGlv X01JTihody0+c2FtcGxlcyAtIGh3LT5ycG9zLCBsaXZlKTsKKyAgICAgICAgc3RydWN0IHN0X3Nh bXBsZSogICAgc3JjICA9IGh3LT5taXhfYnVmICsgaHctPnJwb3M7CisgICAgICAgIHVpbnQ4X3Qq ICAgICAgZHN0ICAgICAgICAgPSAodWludDhfdCopd2F2X2J1ZmZlci0+bHBEYXRhICsgcy0+d3Jp dGVfcG9zOworCisgICAgICAgIGlmICh3YXZfc2FtcGxlcyA+IGh3X3NhbXBsZXMpIHsKKyAgICAg ICAgICAgICAgICB3YXZfc2FtcGxlcyA9IGh3X3NhbXBsZXM7CisgICAgICAgIH0KKworICAgICAg ICB3YXZfYnl0ZXMgPSB3YXZfc2FtcGxlcyA8PCBody0+aW5mby5zaGlmdDsKKworICAgICAgICAv L0QoInJ1bl9vdXQ6IGJ1ZmZlcjolZCBwb3M6JWQgc2l6ZTolZCB3c2FtcGxlczolZCB3Ynl0ZXM6 JWQgbGl2ZTolZCBycG9zOiVkIGh3c2FtcGxlczolZFxuIiwgcy0+d3JpdGVfaW5kZXgsCisgICAg ICAgIC8vICAgcy0+d3JpdGVfcG9zLCBzLT53cml0ZV9zaXplLCB3YXZfc2FtcGxlcywgd2F2X2J5 dGVzLCBsaXZlLCBody0+cnBvcywgaHctPnNhbXBsZXMpOworICAgICAgICBody0+Y2xpcCAoZHN0 LCBzcmMsIHdhdl9zYW1wbGVzKTsKKyAgICAgICAgaHctPnJwb3MgKz0gd2F2X3NhbXBsZXM7Cisg ICAgICAgIGlmIChody0+cnBvcyA+PSBody0+c2FtcGxlcykKKyAgICAgICAgICAgICAgICBody0+ cnBvcyAtPSBody0+c2FtcGxlczsKKworICAgICAgICBsaXZlICAgICAgICAgLT0gd2F2X3NhbXBs ZXM7CisgICAgICAgIHBsYXllZCAgICAgICArPSB3YXZfc2FtcGxlczsKKyAgICAgICAgcy0+d3Jp dGVfcG9zICs9IHdhdl9ieXRlczsKKyAgICAgICAgaWYgKHMtPndyaXRlX3BvcyA9PSBzLT53cml0 ZV9zaXplKSB7CisjaWYgREVCVUdfVElNSU5HCisgICAgICAgICAgICBpbnQ2NF90ICBub3cgID0g cWVtdV9nZXRfY2xvY2sodm1fY2xvY2spIC0gc3RhcnRfdGltZTsKKyAgICAgICAgICAgIGludDY0 X3QgIGRpZmYgPSBub3cgLSBsYXN0X3RpbWU7CisKKyAgICAgICAgICAgIEQoInJ1bl9vdXQ6ICgl Ny4zZjolN2QpOndhdmVPdXRXcml0ZSBidWZmZXI6JWRcbiIsCisgICAgICAgICAgICAgICBub3cv MWU5LCAobm93LWxhc3RfdGltZSkvMWU5LCBzLT53cml0ZV9pbmRleCk7CisgICAgICAgICAgICBs YXN0X3RpbWUgPSBub3c7CisjZW5kaWYKKyAgICAgICAgICAgIHdhdmVPdXRXcml0ZSggcy0+d2F2 ZW91dCwgd2F2X2J1ZmZlciwgc2l6ZW9mKCp3YXZfYnVmZmVyKSApOworICAgICAgICAgICAgcy0+ d3JpdGVfcG9zICAgID0gMDsKKyAgICAgICAgICAgIHMtPndyaXRlX2luZGV4ICs9IDE7CisgICAg ICAgICAgICBpZiAocy0+d3JpdGVfaW5kZXggPT0gTlVNX09VVF9CVUZGRVJTKQorICAgICAgICAg ICAgICAgIHMtPndyaXRlX2luZGV4ID0gMDsKKworICAgICAgICAgICAgRW50ZXJDcml0aWNhbFNl Y3Rpb24oICZzLT5sb2NrICk7CisgICAgICAgICAgICBpZiAoLS1zLT53cml0ZV9jb3VudCA9PSAw KSB7CisgICAgICAgICAgICAgICAgbGl2ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJnMtPmxvY2sgKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICByZXR1cm4gcGxheWVkOworfQorCitzdGF0aWMgaW50Cit3aW5hdWRpb19vdXRfY3RsIChIV1Zv aWNlT3V0ICpodywgaW50IGNtZCwgLi4uKQoreworICAgIFdpbkF1ZGlvT3V0KiAgcyA9IChXaW5B dWRpb091dCopIGh3OworCisgICAgc3dpdGNoIChjbWQpIHsKKyAgICBjYXNlIFZPSUNFX0VOQUJM RToKKyAgICAgICAgd2F2ZU91dFJlc3RhcnQoIHMtPndhdmVvdXQgKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIFZPSUNFX0RJU0FCTEU6CisgICAgICAgIHdhdmVPdXRQYXVzZSggcy0+d2F2 ZW91dCApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKiBB VURJTyBJTgorICoqLworCisjZGVmaW5lICBOVU1fSU5fQlVGRkVSUyAgMgorCit0eXBlZGVmIHN0 cnVjdCBXaW5BdWRpb0luIHsKKyAgICBIV1ZvaWNlSW4gICAgICAgICBodzsKKyAgICBIV0FWRUlO ICAgICAgICAgICB3YXZlaW47CisgICAgQ1JJVElDQUxfU0VDVElPTiAgbG9jazsKKyAgICB1bnNp Z25lZCBjaGFyKiAgICBidWZmZXJfYnl0ZXM7CisgICAgV0FWRUhEUiAgICAgICAgICAgYnVmZmVy c1sgTlVNX0lOX0JVRkZFUlMgXTsKKyAgICBpbnQgICAgICAgICAgICAgICByZWFkX2luZGV4Owor ICAgIGludCAgICAgICAgICAgICAgIHJlYWRfY291bnQ7CisgICAgaW50ICAgICAgICAgICAgICAg cmVhZF9wb3M7CisgICAgaW50ICAgICAgICAgICAgICAgcmVhZF9zaXplOworfSBXaW5BdWRpb0lu OworCisvKiBUaGUgY2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBXaW5kb3dzIGhhcyBmaW5p c2hlZCBmaWxsaW5nIGEgYnVmZmVyICovCitzdGF0aWMgdm9pZCBDQUxMQkFDSword2luYXVkaW9f aW5fYnVmZmVyX2RvbmUgKEhXQVZFSU4gaHdpLCBVSU5UIHVNc2csIERXT1JEX1BUUiBkd0luc3Rh bmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1Bh cmFtMikKK3sKKyAgICBXaW5BdWRpb0luKiAgcyA9IChXaW5BdWRpb0luKikgZHdJbnN0YW5jZTsK KworICAgIC8qIE9ubHkgc2VydmljZSAiYnVmZmVyIGZpbGxlZCIgbWVzc2FnZXMgKi8KKyAgICBp ZiAoIHVNc2cgIT0gV0lNX0RBVEEgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBTaWduYWwg dGhhdCB3ZSBhcmUgZG9uZSBwbGF5aW5nIGEgYnVmZmVyICovCisgICAgRW50ZXJDcml0aWNhbFNl Y3Rpb24oICZzLT5sb2NrICk7CisgICAgaWYgKHMtPnJlYWRfY291bnQgPCBOVU1fSU5fQlVGRkVS UykKKyAgICAgICAgcy0+cmVhZF9jb3VudCArPSAxOworICAgIExlYXZlQ3JpdGljYWxTZWN0aW9u KCAmcy0+bG9jayApOworfQorCitzdGF0aWMgdm9pZAord2luYXVkaW9faW5fZmluaSAoSFdWb2lj ZUluICpodykKK3sKKyAgICBXaW5BdWRpb0luKiAgcyA9IChXaW5BdWRpb0luKikgaHc7CisgICAg aW50ICAgICAgICAgIGk7CisKKyAgICBpZiAocy0+d2F2ZWluKSB7CisgICAgICAgIHdhdmVJblJl c2V0KHMtPndhdmVpbik7CisgICAgICAgIHMtPndhdmVpbiA9IDA7CisgICAgfQorCisgICAgZm9y ICggaT0wOyBpPE5VTV9PVVRfQlVGRkVSUzsgKytpICkgeworICAgICAgICBpZiAoIHMtPmJ1ZmZl cnNbaV0uZHdVc2VyICE9IDB4RkZGRiApIHsKKyAgICAgICAgICAgIHdhdmVJblVucHJlcGFyZUhl YWRlcigKKyAgICAgICAgICAgICAgICBzLT53YXZlaW4sICZzLT5idWZmZXJzW2ldLCBzaXplb2Yo cy0+YnVmZmVyc1tpXSkgKTsKKyAgICAgICAgICAgICAgICBzLT5idWZmZXJzW2ldLmR3VXNlciA9 IDB4RkZGRjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzLT5idWZmZXJfYnl0ZXMgIT0g TlVMTCkgeworICAgICAgICBxZW11X2ZyZWUocy0+YnVmZmVyX2J5dGVzKTsKKyAgICAgICAgcy0+ YnVmZmVyX2J5dGVzID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocy0+d2F2ZWluKSB7CisgICAg ICAgIHdhdmVJbkNsb3NlKHMtPndhdmVpbik7CisgICAgICAgIHMtPndhdmVpbiA9IE5VTEw7Cisg ICAgfQorfQorCisKK3N0YXRpYyBpbnQKK3dpbmF1ZGlvX2luX2luaXQgKEhXVm9pY2VJbiAqaHcs IHN0cnVjdCBhdWRzZXR0aW5ncyAqYXMpCit7CisgICAgV2luQXVkaW9JbiogICBzID0gKFdpbkF1 ZGlvSW4qKSBodzsKKyAgICBNTVJFU1VMVCAgICAgIHJlc3VsdDsKKyAgICBXQVZFRk9STUFURVgg IGZvcm1hdDsKKyAgICBpbnQgICAgICAgICAgIHNoaWZ0LCBpLCBzYW1wbGVzX3NpemU7CisKKyAg ICBzLT53YXZlaW4gPSBOVUxMOworICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oICZzLT5s b2NrICk7CisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9PVVRfQlVGRkVSUzsgaSsrKSB7CisgICAg ICAgIHMtPmJ1ZmZlcnNbaV0uZHdVc2VyID0gMHhGRkZGOworICAgIH0KKyAgICBzLT5idWZmZXJf Ynl0ZXMgPSBOVUxMOworCisgICAgLyogY29tcHV0ZSBkZXNpcmVkIHdhdmUgaW5wdXQgZm9ybWF0 ICovCisgICAgZm9ybWF0LndGb3JtYXRUYWcgICAgICA9IFdBVkVfRk9STUFUX1BDTTsKKyAgICBm b3JtYXQubkNoYW5uZWxzICAgICAgID0gYXMtPm5jaGFubmVsczsKKyAgICBmb3JtYXQublNhbXBs ZXNQZXJTZWMgID0gYXMtPmZyZXE7CisgICAgZm9ybWF0Lm5BdmdCeXRlc1BlclNlYyA9IGFzLT5m cmVxKmFzLT5uY2hhbm5lbHM7CisKKyAgICBzd2l0Y2ggKGFzLT5mbXQpIHsKKyAgICAgICAgY2Fz ZSBBVURfRk1UX1M4OiAgIHNoaWZ0ID0gMDsgYnJlYWs7CisgICAgICAgIGNhc2UgQVVEX0ZNVF9V ODogICBzaGlmdCA9IDA7IGJyZWFrOworICAgICAgICBjYXNlIEFVRF9GTVRfUzE2OiAgc2hpZnQg PSAxOyBicmVhazsKKyAgICAgICAgY2FzZSBBVURfRk1UX1UxNjogIHNoaWZ0ID0gMTsgYnJlYWs7 CisgICAgICAgIGNhc2UgQVVEX0ZNVF9TMzI6ICBzaGlmdCA9IDI7IGJyZWFrOworICAgICAgICBj YXNlIEFVRF9GTVRfVTMyOiAgc2hpZnQgPSAyOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogd2luYXVkaW86IEJhZCBpbnB1dCBhdWRp byBmb3JtYXQ6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBhcy0+Zm10KTsKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3JtYXQubkF2Z0J5dGVzUGVyU2VjID0gKGZv cm1hdC5uU2FtcGxlc1BlclNlYyAqIGZvcm1hdC5uQ2hhbm5lbHMpIDw8IHNoaWZ0OworICAgIGZv cm1hdC5uQmxvY2tBbGlnbiAgICAgPSBmb3JtYXQubkNoYW5uZWxzIDw8IHNoaWZ0OworICAgIGZv cm1hdC53Qml0c1BlclNhbXBsZSAgPSA4IDw8IHNoaWZ0OworICAgIGZvcm1hdC5jYlNpemUgICAg ICAgICAgPSAwOworCisgICAgLyogb3BlbiB0aGUgd2F2ZSBpbiBkZXZpY2UgKi8KKyAgICByZXN1 bHQgPSB3YXZlSW5PcGVuKCAmcy0+d2F2ZWluLCBXQVZFX01BUFBFUiwgJmZvcm1hdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAoRFdPUkRfUFRSKXdpbmF1ZGlvX2luX2J1ZmZlcl9kb25lLCAo RFdPUkRfUFRSKSBodywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS19GVU5DVElP Tik7CisgICAgaWYgKCByZXN1bHQgIT0gTU1TWVNFUlJfTk9FUlJPUiApIHsKKyAgICAgICAgZHVt cF9tbWVycm9yKCAicWVtdTogd2luYXVkaW86IHdhdmVJbk9wZW4oKSIsIHJlc3VsdCk7CisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc2FtcGxlc19zaXplICAgID0gZm9ybWF0 Lm5CbG9ja0FsaWduICogY29uZi5uYl9zYW1wbGVzOworICAgIHMtPmJ1ZmZlcl9ieXRlcyA9IHFl bXVfbWFsbG9jKCBOVU1fSU5fQlVGRkVSUyAqIHNhbXBsZXNfc2l6ZSApOworICAgIGlmIChzLT5i dWZmZXJfYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICB3YXZlSW5DbG9zZSggcy0+d2F2ZWluICk7 CisgICAgICAgIHMtPndhdmVpbiA9IE5VTEw7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm90 IGVub3VnaCBtZW1vcnkgZm9yIFdpbmRvd3MgYXVkaW8gYnVmZmVyc1xuIik7CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0lOX0JVRkZFUlM7IGkr KykgeworICAgICAgICBtZW1zZXQoICZzLT5idWZmZXJzW2ldLCAwLCBzaXplb2Yocy0+YnVmZmVy c1tpXSkgKTsKKyAgICAgICAgcy0+YnVmZmVyc1tpXS5scERhdGEgICAgICAgICA9IChMUFNUUiko cy0+YnVmZmVyX2J5dGVzICsgaSpzYW1wbGVzX3NpemUpOworICAgICAgICBzLT5idWZmZXJzW2ld LmR3QnVmZmVyTGVuZ3RoID0gc2FtcGxlc19zaXplOworICAgICAgICBzLT5idWZmZXJzW2ldLmR3 RmxhZ3MgICAgICAgID0gV0hEUl9ET05FOworCisgICAgICAgIHJlc3VsdCA9IHdhdmVJblByZXBh cmVIZWFkZXIoIHMtPndhdmVpbiwgJnMtPmJ1ZmZlcnNbaV0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHMtPmJ1ZmZlcnNbaV0pICk7CisgICAgICAgIGlmICggcmVzdWx0 ICE9IE1NU1lTRVJSX05PRVJST1IgKSB7CisgICAgICAgICAgICBkdW1wX21tZXJyb3IoIndhdmVJ blByZXBhcmVIZWFkZXIoKSIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICAgIH0KKworICAgICAgICByZXN1bHQgPSB3YXZlSW5BZGRCdWZmZXIoIHMtPndhdmVpbiwgJnMt PmJ1ZmZlcnNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHMt PmJ1ZmZlcnNbaV0pICk7CisgICAgICAgIGlmICggcmVzdWx0ICE9IE1NU1lTRVJSX05PRVJST1Ig KSB7CisgICAgICAgICAgICBkdW1wX21tZXJyb3IoIndhdmVJbkFkZEJ1ZmZlcigpIiwgcmVzdWx0 KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIERFQlVH CisgICAgLyogQ2hlY2sgdGhlIHNvdW5kIGRldmljZSB3ZSByZXRyaWV2ZWQgKi8KKyAgICB7Cisg ICAgICAgIFdBVkVJTkNBUFMgY2FwczsKKworICAgICAgICByZXN1bHQgPSB3YXZlSW5HZXREZXZD YXBzKChVSU5UKSBzLT53YXZlaW4sICZjYXBzLCBzaXplb2YoY2FwcykpOworICAgICAgICBpZiAo IHJlc3VsdCAhPSBNTVNZU0VSUl9OT0VSUk9SICkgeworICAgICAgICAgICAgZHVtcF9tbWVycm9y KCJ3YXZlSW5HZXREZXZDYXBzKCkiLCByZXN1bHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg ICAgIHByaW50ZigiQXVkaW8gaW4gZGV2aWNlOiAlc1xuIiwgY2Fwcy5zelBuYW1lKTsKKyAgICB9 CisjZW5kaWYKKworICAgIGF1ZGlvX3BjbV9pbml0X2luZm8gKCZody0+aW5mbywgYXMpOworICAg IGh3LT5zYW1wbGVzID0gY29uZi5uYl9zYW1wbGVzKjI7CisKKyAgICBzLT5yZWFkX2luZGV4ID0g MDsKKyAgICBzLT5yZWFkX2NvdW50ID0gMDsKKyAgICBzLT5yZWFkX3BvcyAgID0gMDsKKyAgICBz LT5yZWFkX3NpemUgID0gc2FtcGxlc19zaXplOworICAgIHJldHVybiAwOworfQorCisKKy8qIHJl cG9ydCB0aGUgbnVtYmVyIG9mIGNhcHR1cmVkIHNhbXBsZXMgdG8gdGhlIGF1ZGlvIHN1YnN5c3Rl bSAqLworc3RhdGljIGludAord2luYXVkaW9faW5fcnVuIChIV1ZvaWNlSW4gKmh3KQoreworICAg IFdpbkF1ZGlvSW4qICBzICAgICAgICA9IChXaW5BdWRpb0luKikgaHc7CisgICAgaW50ICAgICAg ICAgIGNhcHR1cmVkID0gMDsKKyAgICBpbnQgICAgICAgICAgaGFzX2J1ZmZlcjsKKyAgICBpbnQg ICAgICAgICAgbGl2ZSA9IGh3LT5zYW1wbGVzIC0gaHctPnRvdGFsX3NhbXBsZXNfY2FwdHVyZWQ7 CisKKyAgICBpZiAoIWxpdmUpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRW50 ZXJDcml0aWNhbFNlY3Rpb24oICZzLT5sb2NrICk7CisgICAgaGFzX2J1ZmZlciA9IChzLT5yZWFk X2NvdW50ID4gMCk7CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZzLT5sb2NrICk7CisKKyAg ICBpZiAoIWhhc19idWZmZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgd2hpbGUgKGxpdmUg PiAwKSB7CisgICAgICAgIFdBVkVIRFIqICAgICAgd2F2X2J1ZmZlciAgPSBzLT5idWZmZXJzICsg cy0+cmVhZF9pbmRleDsKKyAgICAgICAgaW50ICAgICAgICAgICB3YXZfYnl0ZXMgICA9IChzLT5y ZWFkX3NpemUgLSBzLT5yZWFkX3Bvcyk7CisgICAgICAgIGludCAgICAgICAgICAgd2F2X3NhbXBs ZXMgPSBhdWRpb19NSU4od2F2X2J5dGVzID4+IGh3LT5pbmZvLnNoaWZ0LCBsaXZlKTsKKyAgICAg ICAgaW50ICAgICAgICAgICBod19zYW1wbGVzICA9IGF1ZGlvX01JTihody0+c2FtcGxlcyAtIGh3 LT53cG9zLCBsaXZlKTsKKyAgICAgICAgc3RydWN0IHN0X3NhbXBsZSogIGRzdCAgICA9IGh3LT5j b252X2J1ZiArIGh3LT53cG9zOworICAgICAgICB1aW50OF90KiAgICAgIHNyYyAgICAgICAgID0g KHVpbnQ4X3QqKXdhdl9idWZmZXItPmxwRGF0YSArIHMtPnJlYWRfcG9zOworCisgICAgICAgIGlm ICh3YXZfc2FtcGxlcyA+IGh3X3NhbXBsZXMpIHsKKyAgICAgICAgICAgIHdhdl9zYW1wbGVzID0g aHdfc2FtcGxlczsKKyAgICAgICAgfQorCisgICAgICAgIHdhdl9ieXRlcyA9IHdhdl9zYW1wbGVz IDw8IGh3LT5pbmZvLnNoaWZ0OworCisgICAgICAgIEQoIiVzOiBidWZmZXI6JWQgcG9zOiVkIHNp emU6JWQgd3NhbXBsZXM6JWQgd2J5dGVzOiVkIGxpdmU6JWQgd3BvczolZCBod3NhbXBsZXM6JWRc biIsCisgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcy0+cmVhZF9pbmRleCwgcy0+cmVhZF9wb3Ms IHMtPnJlYWRfc2l6ZSwgd2F2X3NhbXBsZXMsIHdhdl9ieXRlcywgbGl2ZSwKKyAgICAgICAgICAg aHctPndwb3MsIGh3LT5zYW1wbGVzKTsKKworICAgICAgICBody0+Y29udihkc3QsIHNyYywgd2F2 X3NhbXBsZXMsICZub21pbmFsX3ZvbHVtZSk7CisKKyAgICAgICAgaHctPndwb3MgKz0gd2F2X3Nh bXBsZXM7CisgICAgICAgIGlmIChody0+d3BvcyA+PSBody0+c2FtcGxlcykKKyAgICAgICAgICAg IGh3LT53cG9zIC09IGh3LT5zYW1wbGVzOworCisgICAgICAgIGxpdmUgICAgICAgIC09IHdhdl9z YW1wbGVzOworICAgICAgICBjYXB0dXJlZCAgICArPSB3YXZfc2FtcGxlczsKKyAgICAgICAgcy0+ cmVhZF9wb3MgKz0gd2F2X2J5dGVzOworICAgICAgICBpZiAocy0+cmVhZF9wb3MgPT0gcy0+cmVh ZF9zaXplKSB7CisgICAgICAgICAgICBzLT5yZWFkX3BvcyAgICA9IDA7CisgICAgICAgICAgICBz LT5yZWFkX2luZGV4ICs9IDE7CisgICAgICAgICAgICBpZiAocy0+cmVhZF9pbmRleCA9PSBOVU1f SU5fQlVGRkVSUykKKyAgICAgICAgICAgICAgICBzLT5yZWFkX2luZGV4ID0gMDsKKworICAgICAg ICAgICAgd2F2ZUluQWRkQnVmZmVyKCBzLT53YXZlaW4sIHdhdl9idWZmZXIsIHNpemVvZigqd2F2 X2J1ZmZlcikgKTsKKworICAgICAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZzLT5sb2Nr ICk7CisgICAgICAgICAgICBpZiAoLS1zLT5yZWFkX2NvdW50ID09IDApIHsKKyAgICAgICAgICAg ICAgICBsaXZlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExlYXZlQ3JpdGljYWxT ZWN0aW9uKCAmcy0+bG9jayApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAgY2FwdHVy ZWQ7Cit9CisKKworc3RhdGljIGludAord2luYXVkaW9faW5fcmVhZCAoU1dWb2ljZUluICpzdywg dm9pZCAqYnVmLCBpbnQgbGVuKQoreworICAgIGludCAgcmV0ID0gYXVkaW9fcGNtX3N3X3JlYWQg KHN3LCBidWYsIGxlbik7CisgICAgaWYgKHJldCA+IDApCisgICAgICAgIEQoIiVzOiAoJWQpIHJl dHVybmVkICVkXG4iLCBfX0ZVTkNUSU9OX18sIGxlbiwgcmV0KTsKKyAgICByZXR1cm4gcmV0Owor fQorCisKK3N0YXRpYyBpbnQKK3dpbmF1ZGlvX2luX2N0bCAoSFdWb2ljZUluICpodywgaW50IGNt ZCwgLi4uKQoreworICAgIFdpbkF1ZGlvSW4qICBzID0gKFdpbkF1ZGlvSW4qKSBodzsKKworICAg IHN3aXRjaCAoY21kKSB7CisgICAgY2FzZSBWT0lDRV9FTkFCTEU6CisgICAgICAgIEQoIiVzOiBl bmFibGUgYXVkaW8gaW5cbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHdhdmVJblN0YXJ0KCBz LT53YXZlaW4gKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZPSUNFX0RJU0FCTEU6Cisg ICAgICAgIEQoIiVzOiBkaXNhYmxlIGF1ZGlvIGluXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAg ICB3YXZlSW5TdG9wKCBzLT53YXZlaW4gKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl dHVybiAwOworfQorCisvKiogQVVESU8gU1RBVEUKKyAqKi8KKwordHlwZWRlZiBzdHJ1Y3QgV2lu QXVkaW9TdGF0ZSB7CisgICAgaW50ICBkdW1teTsKK30gV2luQXVkaW9TdGF0ZTsKKworc3RhdGlj IFdpbkF1ZGlvU3RhdGUgIGdfd2luYXVkaW87CisKK3N0YXRpYyB2b2lkKgord2luYXVkaW9faW5p dCh2b2lkKQoreworICAgIFdpbkF1ZGlvU3RhdGUqICBzID0gJmdfd2luYXVkaW87CisKKyNpZiBE RUJVR19USU1JTkcKKyAgICBzdGFydF90aW1lID0gcWVtdV9nZXRfY2xvY2sodm1fY2xvY2spOwor ICAgIGxhc3RfdGltZSAgPSAwOworI2VuZGlmCisKKyAgICByZXR1cm4gczsKK30KKworCitzdGF0 aWMgdm9pZAord2luYXVkaW9fZmluaSAodm9pZCAqb3BhcXVlKQoreworfQorCitzdGF0aWMgc3Ry dWN0IGF1ZGlvX29wdGlvbiB3aW5hdWRpb19vcHRpb25zW10gPSB7CisgICAgeyJTQU1QTEVTIiwg QVVEX09QVF9JTlQsICZjb25mLm5iX3NhbXBsZXMsCisgICAgICJTaXplIG9mIFdpbmRvd3MgYXVk aW8gYnVmZmVyIGluIHNhbXBsZXMiLCBOVUxMLCAwfSwKKyAgICB7TlVMTCwgMCwgTlVMTCwgTlVM TCwgTlVMTCwgMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGNtX29wcyB3aW5hdWRpb19w Y21fb3BzID0geworICAgIHdpbmF1ZGlvX291dF9pbml0LAorICAgIHdpbmF1ZGlvX291dF9maW5p LAorICAgIHdpbmF1ZGlvX291dF9ydW4sCisgICAgd2luYXVkaW9fb3V0X3dyaXRlLAorICAgIHdp bmF1ZGlvX291dF9jdGwsCisKKyAgICB3aW5hdWRpb19pbl9pbml0LAorICAgIHdpbmF1ZGlvX2lu X2ZpbmksCisgICAgd2luYXVkaW9faW5fcnVuLAorICAgIHdpbmF1ZGlvX2luX3JlYWQsCisgICAg d2luYXVkaW9faW5fY3RsCit9OworCitzdHJ1Y3QgYXVkaW9fZHJpdmVyIHdpbmF1ZGlvX2F1ZGlv X2RyaXZlciA9IHsKKyAgICBJTklUX0ZJRUxEIChuYW1lICAgICAgICAgICA9ICkgIndpbmF1ZGlv IiwKKyAgICBJTklUX0ZJRUxEIChkZXNjciAgICAgICAgICA9ICkgIldpbmRvd3Mgd2F2ZSBhdWRp byIsCisgICAgSU5JVF9GSUVMRCAob3B0aW9ucyAgICAgICAgPSApIHdpbmF1ZGlvX29wdGlvbnMs CisgICAgSU5JVF9GSUVMRCAoaW5pdCAgICAgICAgICAgPSApIHdpbmF1ZGlvX2luaXQsCisgICAg SU5JVF9GSUVMRCAoZmluaSAgICAgICAgICAgPSApIHdpbmF1ZGlvX2ZpbmksCisgICAgSU5JVF9G SUVMRCAocGNtX29wcyAgICAgICAgPSApICZ3aW5hdWRpb19wY21fb3BzLAorICAgIElOSVRfRklF TEQgKGNhbl9iZV9kZWZhdWx0ID0gKSAxLAorICAgIElOSVRfRklFTEQgKG1heF92b2ljZXNfb3V0 ID0gKSAxLAorICAgIElOSVRfRklFTEQgKG1heF92b2ljZXNfaW4gID0gKSAxLAorICAgIElOSVRf RklFTEQgKHZvaWNlX3NpemVfb3V0ID0gKSBzaXplb2YgKFdpbkF1ZGlvT3V0KSwKKyAgICBJTklU X0ZJRUxEICh2b2ljZV9zaXplX2luICA9ICkgc2l6ZW9mIChXaW5BdWRpb0luKQorfTsKZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA4OWU3ZjUzLi4zZGRiMTM4IDEwMDc1 NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yMTksMTQgKzIxOSwxNiBAQCBP U19DRkxBR1M9Ii1tbm8tY3lnd2luIgogaWYgWyAiJGNwdSIgPSAiaTM4NiIgXSA7IHRoZW4KICAg ICBrcWVtdT0ieWVzIgogZmkKLWF1ZGlvX3Bvc3NpYmxlX2RyaXZlcnM9InNkbCIKK2F1ZGlvX2Ry dl9saXN0PSJ3aW5hdWRpbyIKK2F1ZGlvX3Bvc3NpYmxlX2RyaXZlcnM9IndpbmF1ZGlvIHNkbCIK IDs7CiBNSU5HVzMyKikKIG1pbmd3MzI9InllcyIKIGlmIFsgIiRjcHUiID0gImkzODYiIF0gOyB0 aGVuCiAgICAga3FlbXU9InllcyIKIGZpCi1hdWRpb19wb3NzaWJsZV9kcml2ZXJzPSJkc291bmQg c2RsIGZtb2QiCithdWRpb19kcnZfbGlzdD13aW5hdWRpbworYXVkaW9fcG9zc2libGVfZHJpdmVy cz0iZHNvdW5kIHdpbmF1ZGlvIHNkbCBmbW9kIgogOzsKIEdOVS9rRnJlZUJTRCkKIGF1ZGlvX2Ry dl9saXN0PSJvc3MiCkBAIC0xMDMzLDcgKzEwMzUsNyBAQCBmb3IgZHJ2IGluICRhdWRpb19kcnZf bGlzdDsgZG8KICAgICAgICAgInBhX3NpbXBsZSAqcyA9IE5VTEw7IHBhX3NpbXBsZV9mcmVlKHMp OyByZXR1cm4gMDsiCiAgICAgOzsKIAotICAgIG9zc3xzZGx8Y29yZXx3YXZ8ZHNvdW5kKQorICAg IG9zc3xzZGx8Y29yZXx3YXZ8ZHNvdW5kfHdpbmF1ZGlvKQogICAgICMgWFhYOiBQcm9iZXMgZm9y IENvcmVBdWRpbywgRGlyZWN0U291bmQsIFNETCg/KQogICAgIDs7CiAKLS0gCjEuNi4xLjIKCg== --001636c5b8ef6595fd046c077ce0--