From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Anand Subject: [PATCH V2 3/7] ALSA: add shell for Intel HDMI LPE audio driver Date: Sat, 7 Jan 2017 06:51:05 +0530 Message-ID: <20170107012109.25744-4-jerome.anand@intel.com> References: <20170107012109.25744-1-jerome.anand@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170107012109.25744-1-jerome.anand@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, alsa-devel@alsa-project.org Cc: tiwai@suse.de, broonie@kernel.org, rakesh.a.ughreja@intel.com List-Id: alsa-devel@alsa-project.org T24gQmF5dHJhaWwgYW5kIENoZXJyeXRyYWlsLCBIRGF1ZGlvIG1heSBiZSBmdXNlZCBvdXQgb3Ig ZGlzYWJsZWQKYnkgdGhlIEJJT1MuIFRoaXMgZHJpdmVyIGVuYWJsZXMgYW4gYWx0ZXJuYXRlIHBh dGggdG8gdGhlIGk5MTUKZGlzcGxheSByZWdpc3RlcnMgYW5kIERNQS4KCkFsdGhvdWdoIHRoZXJl IGlzIG5vIGhhcmR3YXJlIHBhdGggYmV0d2VlbiBpOTE1IGRpc3BsYXkgYW5kIExQRS9TU1QKYXVk aW8gY2x1c3RlcnMsIHRoaXMgSERNSSBjYXBhYmlsaXR5IGlzIHJlZmVycmVkIHRvIGluIHRoZSBk b2N1bWVudGF0aW9uCmFzICJIRE1JIExQRSBBdWRpbyIgc28gd2Uga2VlcCB0aGUgbmFtZSBmb3Ig Y29uc2lzdGVuY3kuIFRoZXJlIGlzIG5vCmhhcmR3YXJlIHBhdGggb3IgY29udHJvbCBkZXBlbmRl bmNpZXMgd2l0aCB0aGUgTFBFL1NTVCBEU1AgZnVuY3Rpb25hbGl0eS4KClRoZSBoZG1pLWxwZS1h dWRpbyBkcml2ZXIgd2lsbCBiZSBwcm9iZWQgd2hlbiB0aGUgaTkxNSBkcml2ZXIgY3JlYXRlcwph IGNoaWxkIHBsYXRmb3JtIGRldmljZS4KClNpbmNlIHRoaXMgZHJpdmVyIGlzIG5laXRoZXIgU29D IG5vciBQQ0ksIGEgbmV3IHg4NiBmb2xkZXIgaXMgYWRkZWQKClNpZ25lZC1vZmYtYnk6IFBpZXJy ZS1Mb3VpcyBCb3NzYXJ0IDxwaWVycmUtbG91aXMuYm9zc2FydEBsaW51eC5pbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IEplcm9tZSBBbmFuZCA8amVyb21lLmFuYW5kQGludGVsLmNvbT4KLS0tCiBz b3VuZC9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzb3VuZC9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgICB8ICAgMiArLQogc291bmQveDg2L0tjb25maWcgICAgICAgICAgICAg ICAgfCAgMTYgKwogc291bmQveDg2L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDYgKwogc291 bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmMgfCA2MjMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIHNvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5oIHwgNjg1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAx MzMzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzb3Vu ZC94ODYvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3g4Ni9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmgKCmRpZmYgLS1naXQg YS9zb3VuZC9LY29uZmlnIGIvc291bmQvS2NvbmZpZwppbmRleCA1YTI0MGUwLi5lZTJlNjlhIDEw MDY0NAotLS0gYS9zb3VuZC9LY29uZmlnCisrKyBiL3NvdW5kL0tjb25maWcKQEAgLTEwOCw2ICsx MDgsOCBAQCBzb3VyY2UgInNvdW5kL3BhcmlzYy9LY29uZmlnIgogCiBzb3VyY2UgInNvdW5kL3Nv Yy9LY29uZmlnIgogCitzb3VyY2UgInNvdW5kL3g4Ni9LY29uZmlnIgorCiBlbmRpZiAjIFNORAog CiBtZW51Y29uZmlnIFNPVU5EX1BSSU1FCmRpZmYgLS1naXQgYS9zb3VuZC9NYWtlZmlsZSBiL3Nv dW5kL01ha2VmaWxlCmluZGV4IGM0MWJkZjUuLjZkZTQ1ZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL01h a2VmaWxlCisrKyBiL3NvdW5kL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQCBvYmotJChDT05GSUdf U09VTkQpICs9IHNvdW5kY29yZS5vCiBvYmotJChDT05GSUdfU09VTkRfUFJJTUUpICs9IG9zcy8K IG9iai0kKENPTkZJR19ETUFTT1VORCkgKz0gb3NzLwogb2JqLSQoQ09ORklHX1NORCkgKz0gY29y ZS8gaTJjLyBkcml2ZXJzLyBpc2EvIHBjaS8gcHBjLyBhcm0vIHNoLyBzeW50aC8gdXNiLyBcCi0J ZmlyZXdpcmUvIHNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0bWVsLyBo ZGEvCisJZmlyZXdpcmUvIHNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0 bWVsLyBoZGEvIHg4Ni8KIG9iai0kKENPTkZJR19TTkRfQU9BKSArPSBhb2EvCiAKICMgVGhpcyBv bmUgbXVzdCBiZSBjb21waWxhYmxlIGV2ZW4gaWYgc291bmQgaXMgY29uZmlndXJlZCBvdXQKZGlm ZiAtLWdpdCBhL3NvdW5kL3g4Ni9LY29uZmlnIGIvc291bmQveDg2L0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyOTdkMAotLS0gL2Rldi9udWxsCisrKyBiL3Nv dW5kL3g4Ni9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK21lbnVjb25maWcgU05EX1g4NgorCXRy aXN0YXRlICJYODYgc291bmQgZGV2aWNlcyIKKwktLS1oZWxwLS0tCisKKwkgIFg4NiBzb3VuZCBk ZXZpY2VzIHRoYXQgZG9uJ3QgZmFsbCB1bmRlciBTb0Mgb3IgUENJIGNhdGVnb3JpZXMKKworaWYg U05EX1g4NgorCitjb25maWcgSERNSV9MUEVfQVVESU8KKwl0cmlzdGF0ZSAiSERNSSBhdWRpbyB3 aXRob3V0IEhEYXVkaW8gb24gSW50ZWwgQXRvbSBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBEUk1f STkxNQorCWRlZmF1bHQgbgorCWhlbHAKKwkgQ2hvb3NlIHRoaXMgb3B0aW9uIHRvIHN1cHBvcnQg SERNSSBMUEUgQXVkaW8gbW9kZQorCitlbmRpZgkjIFNORF9YODYKZGlmZiAtLWdpdCBhL3NvdW5k L3g4Ni9NYWtlZmlsZSBiL3NvdW5kL3g4Ni9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iYWE2MzMzCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQveDg2L01ha2Vm aWxlCkBAIC0wLDAgKzEsNiBAQAorY2NmbGFncy15ICs9IC1JZHJpdmVycy9ncHUvZHJtL2k5MTUK Kworc25kLWhkbWktbHBlLWF1ZGlvLW9ianMgKz0gXAorCWludGVsX2hkbWlfbHBlX2F1ZGlvLm8K Kworb2JqLSQoQ09ORklHX0hETUlfTFBFX0FVRElPKSArPSBzbmQtaGRtaS1scGUtYXVkaW8ubwpk aWZmIC0tZ2l0IGEvc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmMgYi9zb3VuZC94ODYv aW50ZWxfaGRtaV9scGVfYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li42MTM0N2FiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1 ZGlvLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiAgaW50ZWxfaGRtaV9scGVfYXVkaW8uYyAt IEludGVsIEhETUkgTFBFIGF1ZGlvIGRyaXZlciBmb3IgQXRvbSBwbGF0Zm9ybXMKKyAqCisgKiAg Q29weXJpZ2h0IChDKSAyMDE2IEludGVsIENvcnAKKyAqICBBdXRob3JzOgorICoJCUplcm9tZSBB bmFuZCA8amVyb21lLmFuYW5kQGludGVsLmNvbT4KKyAqCQlBcmF2aW5kIFNpZGRhcHBhamkgPGFy YXZpbmR4LnNpZGRhcHBhamlAaW50ZWwuY29tPgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgor ICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQK KyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjZGVmaW5lIHByX2Zt dChmbXQpCSJoZG1pX2xwZV9hdWRpbzogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgorI2luY2x1ZGUgPGxpbnV4 L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2xh Yi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgor I2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRl IDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1 ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVk ZSA8ZHJtL2ludGVsX2xwZV9hdWRpby5oPgorI2luY2x1ZGUgImludGVsX2hkbWlfbHBlX2F1ZGlv LmgiCisKKy8qIGdsb2JhbHMqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaGxwZV9wZGV2Owor aW50IGhscGVfc3RhdGU7Cit1bmlvbiBvdG1faGRtaV9lbGRfdCBobHBlX2VsZDsKKworc3RydWN0 IGhkbWlfbHBlX2F1ZGlvX2N0eCB7CisJaW50IGlycTsKKwl2b2lkIF9faW9tZW0gKm1taW9fc3Rh cnQ7CisJaGFkX2V2ZW50X2NhbGxfYmFjayBoYWRfZXZlbnRfY2FsbGJhY2tzOworCXN0cnVjdCBz bmRfaW50ZWxfaGFkX2ludGVyZmFjZSAqaGFkX2ludGVyZmFjZTsKKwl2b2lkICpoYWRfcHZ0X2Rh dGE7CisJaW50IHRtZHNfY2xvY2tfc3BlZWQ7CisJdW5zaWduZWQgaW50IGhhZF9jb25maWdfb2Zm c2V0OworCWludCBoZG1pX2F1ZGlvX2ludGVycnVwdF9tYXNrOworCXN0cnVjdCB3b3JrX3N0cnVj dCBoZG1pX2F1ZGlvX3dxOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGhkbWlfc2V0X2VsZCh2 b2lkICplbGQpCit7CisJaW50IHNpemU7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKGhscGVfZWxk KSA+IEhETUlfTUFYX0VMRF9CWVRFUyk7CisKKwlzaXplID0gc2l6ZW9mKGhscGVfZWxkKTsKKwlt ZW1jcHkoKHZvaWQgKikmaGxwZV9lbGQsIGVsZCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50IGhkbWlfZ2V0X2VsZCh2b2lkICplbGQpCit7CisJbWVtY3B5KGVsZCwgKHZvaWQgKikmaGxw ZV9lbGQsIHNpemVvZihobHBlX2VsZCkpOworCisJeworCQlpbnQgaTsKKwkJdWludDhfdCAqZWxk X2RhdGEgPSAodWludDhfdCAqKSZobHBlX2VsZDsKKworCQlwcl9kZWJ1ZygiaGRtaV9nZXRfZWxk Olxue3siKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGhscGVfZWxkKTsgaSsrKQorCQkJ cHJfZGVidWcoIjB4JXgsICIsIGVsZF9kYXRhW2ldKTsKKworCQlwcl9kZWJ1ZygifX1cbiIpOwor CX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoZG1pX2xwZV9hdWRp b19jdHggKmdldF9oZG1pX2NvbnRleHQodm9pZCkKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9f Y3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShobHBlX3BkZXYpOworCXJl dHVybiBjdHg7Cit9CisKKy8qCisgKiByZXR1cm4gd2hldGhlciBIRE1JIGF1ZGlvIGRldmljZSBp cyBidXN5LgorICovCitib29sIG1pZF9oZG1pX2F1ZGlvX2lzX2J1c3kodm9pZCAqZGRldikKK3sK KwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJaW50IGhkbWlfYXVkaW9fYnVzeSA9 IDA7CisJc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQgaGRtaV9hdWRpb19ldmVudDsKKworCXByX2Rl YnVnKCIlczogRW50ZXIiLCAgX19mdW5jX18pOworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEoaGxwZV9wZGV2KTsKKworCWlmIChobHBlX3N0YXRlID09IGhkbWlfY29ubmVjdG9yX3N0YXR1 c19kaXNjb25uZWN0ZWQpIHsKKwkJLyogSERNSSBpcyBub3QgY29ubmVjdGVkLCBhc3N1bWluZyBh dWRpbyBkZXZpY2UgaXMgaWRsZS4gKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChjdHgt PmhhZF9pbnRlcmZhY2UpIHsKKwkJaGRtaV9hdWRpb19ldmVudC50eXBlID0gSEFEX0VWRU5UX1FV RVJZX0lTX0FVRElPX0JVU1k7CisJCWhkbWlfYXVkaW9fYnVzeSA9IGN0eC0+aGFkX2ludGVyZmFj ZS0+cXVlcnkoCisJCQkJY3R4LT5oYWRfcHZ0X2RhdGEsCisJCQkJaGRtaV9hdWRpb19ldmVudCk7 CisJCXJldHVybiBoZG1pX2F1ZGlvX2J1c3kgIT0gMDsKKwl9CisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogcmV0dXJuIHdoZXRoZXIgSERNSSBhdWRpbyBkZXZpY2UgaXMgc3VzcGVuZGVkLgor ICovCitib29sIG1pZF9oZG1pX2F1ZGlvX3N1c3BlbmQodm9pZCAqZGRldikKK3sKKwlzdHJ1Y3Qg aGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQgaGRtaV9h dWRpb19ldmVudDsKKwlpbnQgcmV0ID0gMDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KGhscGVfcGRldik7CisKKwlpZiAoaGxwZV9zdGF0ZSA9PSBoZG1pX2Nvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkKSB7CisJCS8qIEhETUkgaXMgbm90IGNvbm5lY3RlZCwgYXNzdW1pbmcgYXVk aW8gZGV2aWNlCisJCSAqIGlzIHN1c3BlbmRlZCBhbHJlYWR5LgorCQkgKi8KKwkJcmV0dXJuIHRy dWU7CisJfQorCisJcHJfZGVidWcoIiVzOiBobHBlX3N0YXRlICVkIiwgIF9fZnVuY19fLAorCQkJ aGxwZV9zdGF0ZSk7CisKKwlpZiAoY3R4LT5oYWRfaW50ZXJmYWNlKSB7CisJCWhkbWlfYXVkaW9f ZXZlbnQudHlwZSA9IDA7CisJCXJldCA9IGN0eC0+aGFkX2ludGVyZmFjZS0+c3VzcGVuZChjdHgt PmhhZF9wdnRfZGF0YSwKKwkJCQloZG1pX2F1ZGlvX2V2ZW50KTsKKwkJcmV0dXJuIChyZXQgPT0g MCkgPyB0cnVlIDogZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCit2b2lkIG1pZF9oZG1p X2F1ZGlvX3Jlc3VtZSh2b2lkICpkZGV2KQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHgg KmN0eDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7CisKKwlpZiAo aGxwZV9zdGF0ZSA9PSBoZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7CisJCS8q IEhETUkgaXMgbm90IGNvbm5lY3RlZCwgdGhlcmUgaXMgbm8gbmVlZAorCQkgKiB0byByZXN1bWUg YXVkaW8gZGV2aWNlLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCIlczogaGxw ZV9zdGF0ZSAlZCIsICBfX2Z1bmNfXywgaGxwZV9zdGF0ZSk7CisKKwlpZiAoY3R4LT5oYWRfaW50 ZXJmYWNlKQorCQljdHgtPmhhZF9pbnRlcmZhY2UtPnJlc3VtZShjdHgtPmhhZF9wdnRfZGF0YSk7 Cit9CisKK3ZvaWQgbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2ZW50KGVudW0gaGFkX2V2ZW50X3R5 cGUgZXZlbnQpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4OworCisJcHJfZGVi dWcoIiVzOiBFbnRlclxuIiwgX19mdW5jX18pOworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEoaGxwZV9wZGV2KTsKKworCWlmIChjdHgtPmhhZF9ldmVudF9jYWxsYmFja3MpCisJCSgqY3R4 LT5oYWRfZXZlbnRfY2FsbGJhY2tzKShldmVudCwKKwkJCWN0eC0+aGFkX3B2dF9kYXRhKTsKK30K KworLyoqCisgKiBoZG1pX2F1ZGlvX3dyaXRlOgorICogdXNlZCB0byB3cml0ZSBpbnRvIGRpc3Bs YXkgY29udHJvbGxlciBIRE1JIGF1ZGlvIHJlZ2lzdGVycy4KKyAqCisgKi8KK3N0YXRpYyBpbnQg aGRtaV9hdWRpb193cml0ZSh1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwlzdHJ1Y3Qg aGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSho bHBlX3BkZXYpOworCisJcHJfZGVidWcoIiVzOiByZWdbMHgleF0gPSAweCV4XG4iLCBfX2Z1bmNf XywgcmVnLCB2YWwpOworCisJaW93cml0ZTMyKHZhbCwgKGN0eC0+bW1pb19zdGFydCtyZWcpKTsK KworCXJldHVybiAwOworfQorCisvKioKKyAqIGhkbWlfYXVkaW9fcmVhZDoKKyAqIHVzZWQgdG8g Z2V0IHRoZSByZWdpc3RlciB2YWx1ZSByZWFkIGZyb20KKyAqIGRpc3BsYXkgY29udHJvbGxlciBI RE1JIGF1ZGlvIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBoZG1pX2F1ZGlvX3JlYWQodWlu dDMyX3QgcmVnLCB1aW50MzJfdCAqdmFsKQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHgg KmN0eDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7CisJKnZhbCA9 IGlvcmVhZDMyKGN0eC0+bW1pb19zdGFydCtyZWcpOworCXByX2RlYnVnKCIlczogcmVnWzB4JXhd ID0gMHgleFxuIiwgX19mdW5jX18sIHJlZywgKnZhbCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgor ICogaGRtaV9hdWRpb19ybXc6CisgKiB1c2VkIHRvIHVwZGF0ZSB0aGUgbWFza2VkIGJpdHMgaW4g ZGlzcGxheSBjb250cm9sbGVyIEhETUkKKyAqIGF1ZGlvIHJlZ2lzdGVycy4KKyAqLworc3RhdGlj IGludCBoZG1pX2F1ZGlvX3Jtdyh1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCwgdWludDMyX3Qg bWFzaykKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisJdWludDMyX3QgdmFs X3RtcCA9IDA7CisKKwljdHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShobHBlX3BkZXYpOworCisJ dmFsX3RtcCA9ICh2YWwgJiBtYXNrKSB8CisJCQkoKGlvcmVhZDMyKGN0eC0+bW1pb19zdGFydCAr IHJlZykpICYgfm1hc2spOworCisJaW93cml0ZTMyKHZhbF90bXAsIChjdHgtPm1taW9fc3RhcnQr cmVnKSk7CisJcHJfZGVidWcoIiVzOiByZWdbMHgleF0gPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVn LCB2YWxfdG1wKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhkbWlfYXVkaW9fZ2V0X2Nh cHM6CisgKiB1c2VkIHRvIHJldHVybiB0aGUgSERNSSBhdWRpbyBjYXBhYmlsaXRpZXMuCisgKiBl LmcuIHJlc29sdXRpb24sIGZyYW1lIHJhdGUuCisgKi8KK3N0YXRpYyBpbnQgaGRtaV9hdWRpb19n ZXRfY2FwcyhlbnVtIGhhZF9jYXBzX2xpc3QgZ2V0X2VsZW1lbnQsCisJCQl2b2lkICpjYXBhYmls aXRpZXMpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4OworCWludCByZXQgPSAw OworCisJY3R4ID0gZ2V0X2hkbWlfY29udGV4dCgpOworCisJcHJfZGVidWcoIiVzOiBFbnRlclxu IiwgX19mdW5jX18pOworCisJc3dpdGNoIChnZXRfZWxlbWVudCkgeworCWNhc2UgSEFEX0dFVF9F TEQ6CisJCXJldCA9IGhkbWlfZ2V0X2VsZChjYXBhYmlsaXRpZXMpOworCQlicmVhazsKKwljYXNl IEhBRF9HRVRfRElTUExBWV9SQVRFOgorCQkvKiBUb0RvOiBWZXJpZnkgaWYgc2FtcGxpbmcgZnJl cSBsb2dpYyBpcyBjb3JyZWN0ICovCisJCW1lbWNweShjYXBhYmlsaXRpZXMsICYoY3R4LT50bWRz X2Nsb2NrX3NwZWVkKSwKKwkJCXNpemVvZih1aW50MzJfdCkpOworCQlwcl9kZWJ1ZygiJXM6IHRt ZHNfY2xvY2tfc3BlZWQgPSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQljdHgtPnRtZHNfY2xvY2tf c3BlZWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0 OworfQorCisvKioKKyAqIGhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UKKyAqIHVzZWQgdG8g Z2V0IHRoZSBjdXJyZW50IGhkbWkgYmFzZSBhZGRyZXNzCisgKi8KK2ludCBoZG1pX2F1ZGlvX2dl dF9yZWdpc3Rlcl9iYXNlKHVpbnQzMl90ICoqcmVnX2Jhc2UsCisJCXVpbnQzMl90ICpjb25maWdf b2Zmc2V0KQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKKworCWN0eCA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7CisJKnJlZ19iYXNlID0gKHVpbnQzMl90ICop KGN0eC0+bW1pb19zdGFydCk7CisJKmNvbmZpZ19vZmZzZXQgPSBjdHgtPmhhZF9jb25maWdfb2Zm c2V0OworCXByX2RlYnVnKCIlczogcmVnX2Jhc2UgPSAweCVwLCBjZmdfb2ZmID0gMHgleFxuIiwg X19mdW5jX18sCisJCQkqcmVnX2Jhc2UsICpjb25maWdfb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBoZG1pX2F1ZGlvX3NldF9jYXBzOgorICogdXNlZCB0byBzZXQgdGhlIEhETUkg YXVkaW8gY2FwYWJpbGl0aWVzLgorICogZS5nLiBBdWRpbyBJTlQuCisgKi8KK2ludCBoZG1pX2F1 ZGlvX3NldF9jYXBzKGVudW0gaGFkX2NhcHNfbGlzdCBzZXRfZWxlbWVudCwKKwkJCXZvaWQgKmNh cGFiaWx0aWVzKQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKKworCWN0eCA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7CisKKwlwcl9kZWJ1ZygiJXM6IGNhcF9p ZCA9IDB4JXhcbiIsIF9fZnVuY19fLCBzZXRfZWxlbWVudCk7CisKKwlzd2l0Y2ggKHNldF9lbGVt ZW50KSB7CisJY2FzZSBIQURfU0VUX0VOQUJMRV9BVURJT19JTlQ6CisJCXsKKwkJCXVpbnQzMl90 IHN0YXR1c19yZWc7CisKKwkJCWhkbWlfYXVkaW9fcmVhZChBVURfSERNSV9TVEFUVVNfdjIgKwor CQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQsICZzdGF0dXNfcmVnKTsKKwkJCXN0YXR1c19yZWcg fD0KKwkJCQlIRE1JX0FVRElPX0JVRkZFUl9ET05FIHwgSERNSV9BVURJT19VTkRFUlJVTjsKKwkJ CWhkbWlfYXVkaW9fd3JpdGUoQVVEX0hETUlfU1RBVFVTX3YyICsKKwkJCQljdHgtPmhhZF9jb25m aWdfb2Zmc2V0LCBzdGF0dXNfcmVnKTsKKwkJCWhkbWlfYXVkaW9fcmVhZChBVURfSERNSV9TVEFU VVNfdjIgKworCQkJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQsICZzdGF0dXNfcmVnKTsKKworCQl9 CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgc3RydWN0ICBoZG1pX2F1ZGlvX3JlZ2lzdGVyc19vcHMgaGRtaV9hdWRpb19yZWdfb3Bz ID0geworCS5oZG1pX2F1ZGlvX2dldF9yZWdpc3Rlcl9iYXNlID0gaGRtaV9hdWRpb19nZXRfcmVn aXN0ZXJfYmFzZSwKKwkuaGRtaV9hdWRpb19yZWFkX3JlZ2lzdGVyID0gaGRtaV9hdWRpb19yZWFk LAorCS5oZG1pX2F1ZGlvX3dyaXRlX3JlZ2lzdGVyID0gaGRtaV9hdWRpb193cml0ZSwKKwkuaGRt aV9hdWRpb19yZWFkX21vZGlmeSA9IGhkbWlfYXVkaW9fcm13LAorfTsKKworc3RhdGljIHN0cnVj dCBoZG1pX2F1ZGlvX3F1ZXJ5X3NldF9vcHMgaGRtaV9hdWRpb19nZXRfc2V0X29wcyA9IHsKKwku aGRtaV9hdWRpb19nZXRfY2FwcyA9IGhkbWlfYXVkaW9fZ2V0X2NhcHMsCisJLmhkbWlfYXVkaW9f c2V0X2NhcHMgPSBoZG1pX2F1ZGlvX3NldF9jYXBzLAorfTsKKworaW50IG1pZF9oZG1pX2F1ZGlv X3NldHVwKAorCQloYWRfZXZlbnRfY2FsbF9iYWNrIGF1ZGlvX2NhbGxiYWNrcywKKwkJc3RydWN0 IGhkbWlfYXVkaW9fcmVnaXN0ZXJzX29wcyAqcmVnX29wcywKKwkJc3RydWN0IGhkbWlfYXVkaW9f cXVlcnlfc2V0X29wcyAqcXVlcnlfb3BzKQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHgg KmN0eDsKKworCWN0eCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGhscGVfcGRldik7CisKKwlwcl9k ZWJ1ZygiJXM6IGNhbGxlZFxuIiwgIF9fZnVuY19fKTsKKworCXJlZ19vcHMtPmhkbWlfYXVkaW9f Z2V0X3JlZ2lzdGVyX2Jhc2UgPQorCQkoaGRtaV9hdWRpb19yZWdfb3BzLmhkbWlfYXVkaW9fZ2V0 X3JlZ2lzdGVyX2Jhc2UpOworCXJlZ19vcHMtPmhkbWlfYXVkaW9fcmVhZF9yZWdpc3RlciA9CisJ CShoZG1pX2F1ZGlvX3JlZ19vcHMuaGRtaV9hdWRpb19yZWFkX3JlZ2lzdGVyKTsKKwlyZWdfb3Bz LT5oZG1pX2F1ZGlvX3dyaXRlX3JlZ2lzdGVyID0KKwkJKGhkbWlfYXVkaW9fcmVnX29wcy5oZG1p X2F1ZGlvX3dyaXRlX3JlZ2lzdGVyKTsKKwlyZWdfb3BzLT5oZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5 ID0KKwkJKGhkbWlfYXVkaW9fcmVnX29wcy5oZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5KTsKKwlxdWVy eV9vcHMtPmhkbWlfYXVkaW9fZ2V0X2NhcHMgPQorCQloZG1pX2F1ZGlvX2dldF9zZXRfb3BzLmhk bWlfYXVkaW9fZ2V0X2NhcHM7CisJcXVlcnlfb3BzLT5oZG1pX2F1ZGlvX3NldF9jYXBzID0KKwkJ aGRtaV9hdWRpb19nZXRfc2V0X29wcy5oZG1pX2F1ZGlvX3NldF9jYXBzOworCisJY3R4LT5oYWRf ZXZlbnRfY2FsbGJhY2tzID0gYXVkaW9fY2FsbGJhY2tzOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgX2hhZF93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJbWlkX2hkbWlfYXVkaW9f c2lnbmFsX2V2ZW50KEhBRF9FVkVOVF9IT1RfUExVRyk7Cit9CisKK2ludCBtaWRfaGRtaV9hdWRp b19yZWdpc3RlcihzdHJ1Y3Qgc25kX2ludGVsX2hhZF9pbnRlcmZhY2UgKmRyaXZlciwKKwkJCQl2 b2lkICpoYWRfZGF0YSkKK3sKKwlzdHJ1Y3QgaGRtaV9scGVfYXVkaW9fY3R4ICpjdHg7CisKKwlj dHggPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShobHBlX3BkZXYpOworCisJcHJfZGVidWcoIiVzOiBj YWxsZWRcbiIsIF9fZnVuY19fKTsKKworCWN0eC0+aGFkX3B2dF9kYXRhID0gaGFkX2RhdGE7CisJ Y3R4LT5oYWRfaW50ZXJmYWNlID0gZHJpdmVyOworCisJLyogVGhlIEF1ZGlvIGRyaXZlciBpcyBs b2FkaW5nIG5vdyBhbmQgd2UgbmVlZCB0byBub3RpZnkKKwkgKiBpdCBpZiB0aGVyZSBpcyBhbiBI RE1JIGRldmljZSBhdHRhY2hlZAorCSAqLworCUlOSVRfV09SSygmY3R4LT5oZG1pX2F1ZGlvX3dx LCBfaGFkX3dxKTsKKwlwcl9kZWJ1ZygiJXM6IFNjaGVkdWxpbmcgSERNSSBhdWRpbyB3b3JrIHF1 ZXVlXG4iLCBfX2Z1bmNfXyk7CisJc2NoZWR1bGVfd29yaygmY3R4LT5oZG1pX2F1ZGlvX3dxKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGlzcGxheV9waXBlX2ludGVy cnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1MzIgYXVkaW9fc3RhdCwg YXVkaW9fcmVnOworCisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0eCAqY3R4OworCisJcHJfZGVi dWcoIiVzOiBFbnRlclxuIiwgX19mdW5jX18pOworCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEoaGxwZV9wZGV2KTsKKworCWF1ZGlvX3JlZyA9IGN0eC0+aGFkX2NvbmZpZ19vZmZzZXQgKyBB VURfSERNSV9TVEFUVVNfdjI7CisJaGRtaV9hdWRpb19yZWFkKGF1ZGlvX3JlZywgJmF1ZGlvX3N0 YXQpOworCisJaWYgKGF1ZGlvX3N0YXQgJiBIRE1JX0FVRElPX1VOREVSUlVOKSB7CisJCWhkbWlf YXVkaW9fd3JpdGUoYXVkaW9fcmVnLCBIRE1JX0FVRElPX1VOREVSUlVOKTsKKwkJbWlkX2hkbWlf YXVkaW9fc2lnbmFsX2V2ZW50KAorCQkJCUhBRF9FVkVOVF9BVURJT19CVUZGRVJfVU5ERVJSVU4p OworCX0KKworCWlmIChhdWRpb19zdGF0ICYgSERNSV9BVURJT19CVUZGRVJfRE9ORSkgeworCQlo ZG1pX2F1ZGlvX3dyaXRlKGF1ZGlvX3JlZywgSERNSV9BVURJT19CVUZGRVJfRE9ORSk7CisJCW1p ZF9oZG1pX2F1ZGlvX3NpZ25hbF9ldmVudCgKKwkJCQlIQURfRVZFTlRfQVVESU9fQlVGRkVSX0RP TkUpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5 X2F1ZGlvX2xwZSh2b2lkICphdWRpb19wdHIpCit7CisJc3RydWN0IGhkbWlfbHBlX2F1ZGlvX2N0 eCAqY3R4ID0gZ2V0X2hkbWlfY29udGV4dCgpOworCXN0cnVjdCBpbnRlbF9oZG1pX2xwZV9hdWRp b19wZGF0YSAqcGRhdGEgPSBobHBlX3BkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBp bnRlbF9oZG1pX2xwZV9hdWRpb19lbGQgKmVsZCA9IGF1ZGlvX3B0cjsKKworCWlmIChwZGF0YS0+ aGRtaV9jb25uZWN0ZWQgIT0gdHJ1ZSkgeworCisJCXByX2RlYnVnKCIlczogRXZlbnQ6IEhBRF9O T1RJRllfSE9UX1VOUExVR1xuIiwKKwkJCV9fZnVuY19fKTsKKworCQlpZiAoaGxwZV9zdGF0ZSA9 PSBoZG1pX2Nvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CisKKwkJCWhscGVfc3RhdGUgPQor CQkJCWhkbWlfY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisKKwkJCW1pZF9oZG1pX2F1 ZGlvX3NpZ25hbF9ldmVudCgKKwkJCQlIQURfRVZFTlRfSE9UX1VOUExVRyk7CisJCX0gZWxzZQor CQkJcHJfZGVidWcoIiVzOiBBbHJlYWR5IFVucGx1Z2dlZCFcbiIsIF9fZnVuY19fKTsKKworCX0g ZWxzZSBpZiAoZWxkICE9IE5VTEwpIHsKKworCQloZG1pX3NldF9lbGQoZWxkLT5lbGRfZGF0YSk7 CisKKwkJbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2ZW50KEhBRF9FVkVOVF9IT1RfUExVRyk7CisK KwkJaGxwZV9zdGF0ZSA9IGhkbWlfY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwkJcHJf ZGVidWcoIiVzOiBIQURfTk9USUZZX0VMRCA6IHBvcnQgPSAlZCwgdG1kcyA9ICVkXG4iLAorCQkJ X19mdW5jX18sIGVsZC0+cG9ydF9pZCwKKwkJCXBkYXRhLT50bWRzX2Nsb2NrX3NwZWVkKTsKKwor CQlpZiAocGRhdGEtPnRtZHNfY2xvY2tfc3BlZWQpIHsKKwkJCWN0eC0+dG1kc19jbG9ja19zcGVl ZCA9IHBkYXRhLT50bWRzX2Nsb2NrX3NwZWVkOworCQkJbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2 ZW50KEhBRF9FVkVOVF9NT0RFX0NIQU5HSU5HKTsKKwkJfQorCX0gZWxzZQorCQlwcl9kZWJ1Zygi JXM6IEV2ZW50OiBOVUxMIEVESUQhIVxuIiwgX19mdW5jX18pOworfQorCisvKioKKyAqIGhkbWlf bHBlX2F1ZGlvX3Byb2JlIC0gc3RhcnQgYnJpZGdlIHdpdGggaTkxNQorICoKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGk5MTUgZHJpdmVyIGNyZWF0ZXMgdGhlIGhkbWktbHBl LWF1ZGlvCisgKiBwbGF0Zm9ybSBkZXZpY2UuIENhcmQgY3JlYXRpb24gaXMgZGVmZXJyZWQgdW50 aWwgYSBob3QgcGx1ZyBldmVudCBpcworICogcmVjZWl2ZWQKKyAqLworc3RhdGljIGludCBoZG1p X2xwZV9hdWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBoZG1pX2xwZV9hdWRpb19jdHggKmN0eDsKKwlzdHJ1Y3QgaW50ZWxfaGRtaV9scGVfYXVkaW9f cGRhdGEgKnBkYXRhOworCWludCBpcnE7CisJc3RydWN0IHJlc291cmNlICpyZXNfbW1pbzsKKwl2 b2lkIF9faW9tZW0gKm1taW9fc3RhcnQ7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBm bGFnX2lycTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2hlcnJ5dmlld19p ZHNbXSA9IHsKKwkJe1BDSV9ERVZJQ0UoMHg4MDg2LCAweDIyYjApfSwKKwkJe1BDSV9ERVZJQ0Uo MHg4MDg2LCAweDIyYjEpfSwKKwkJe1BDSV9ERVZJQ0UoMHg4MDg2LCAweDIyYjIpfSwKKwkJe1BD SV9ERVZJQ0UoMHg4MDg2LCAweDIyYjMpfSwKKwkJe30KKwl9OworCisJcHJfZGVidWcoIkVudGVy ICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKlRCRDpyZW1vdmUgZ2xvYmFscyovCisJaGxwZV9wZGV2 ID0gcGRldjsKKwlobHBlX3N0YXRlID0gaGRtaV9jb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl ZDsKKworCS8qIGdldCByZXNvdXJjZXMgKi8KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYs IDApOworCWlmIChpcnEgPCAwKSB7CisJCXByX2VycigiQ291bGQgbm90IGdldCBpcnEgcmVzb3Vy Y2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXNfbW1pbyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXNfbW1pbykgewor CQlwcl9lcnIoIkNvdWxkIG5vdCBnZXQgSU9fTUVNIHJlc291cmNlc1xuIik7CisJCXJldHVybiAt RU5YSU87CisJfQorCisJcHJfZGVidWcoIiVzOiBtbWlvX3N0YXJ0ID0gMHgleCwgbW1pb19lbmQg PSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJKHVuc2lnbmVkIGludClyZXNfbW1pby0+c3RhcnQsICh1 bnNpZ25lZCBpbnQpcmVzX21taW8tPmVuZCk7CisKKwltbWlvX3N0YXJ0ID0gaW9yZW1hcF9ub2Nh Y2hlKHJlc19tbWlvLT5zdGFydCwKKwkJCQkoc2l6ZV90KSgocmVzX21taW8tPmVuZCAtIHJlc19t bWlvLT5zdGFydCkKKwkJCQkJCSsgMSkpOworCWlmICghbW1pb19zdGFydCkgeworCQlwcl9lcnIo IkNvdWxkIG5vdCBnZXQgaW9yZW1hcFxuIik7CisJCXJldHVybiAtRUFDQ0VTOworCX0KKworCS8q IHNldHVwIGludGVycnVwdCBoYW5kbGVyICovCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBkaXNw bGF5X3BpcGVfaW50ZXJydXB0X2hhbmRsZXIsCisJCQkwLAorCQkJcGRldi0+bmFtZSwKKwkJCU5V TEwpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsK KwkJaW91bm1hcChtbWlvX3N0YXJ0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogYWxs b2MgYW5kIHNhdmUgY29udGV4dCAqLworCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBf S0VSTkVMKTsKKwlpZiAoY3R4ID09IE5VTEwpIHsKKwkJZnJlZV9pcnEoaXJxLCBOVUxMKTsKKwkJ aW91bm1hcChtbWlvX3N0YXJ0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY3R4LT5pcnEg PSBpcnE7CisJcHJfZGVidWcoImhkbWkgbHBlIGF1ZGlvOiBpcnEgbnVtID0gJWRcbiIsIGlycSk7 CisJY3R4LT5tbWlvX3N0YXJ0ID0gbW1pb19zdGFydDsKKwljdHgtPnRtZHNfY2xvY2tfc3BlZWQg PSBESVNfU0FNUExFX1JBVEVfMTQ4XzU7CisKKwlpZiAocGNpX2Rldl9wcmVzZW50KGNoZXJyeXZp ZXdfaWRzKSkgeworCQlwcl9kZWJ1ZygiJXM6IENoZXJyeXRyYWlsIExQRSAtIERldGVjdGVkXG4i LCBfX2Z1bmNfXyk7CisJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQgPSBBVURJT19IRE1JX0NPTkZJ R19DOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogQmF5dHJhaWwgTFBFIC0gQXNzdW1lXG4i LCBfX2Z1bmNfXyk7CisJCWN0eC0+aGFkX2NvbmZpZ19vZmZzZXQgPSBBVURJT19IRE1JX0NPTkZJ R19BOworCX0KKworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRh dGEgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiBxdWl0OiBwZGF0YSBub3QgYWxsb2NhdGVkIGJ5 IGk5MTUhIVxuIiwgX19mdW5jX18pOworCQlrZnJlZShjdHgpOworCQlmcmVlX2lycShpcnEsIE5V TEwpOworCQlpb3VubWFwKG1taW9fc3RhcnQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjdHgpOworCisJcHJfZGVidWcoImhkbWkgbHBlIGF1 ZGlvOiBzZXR0aW5nIHBpbiBlbGQgbm90aWZ5IGNhbGxiYWNrXG4iKTsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZwZGF0YS0+bHBlX2F1ZGlvX3Nsb2NrLCBmbGFnX2lycSk7CisJcGRhdGEtPm5vdGlm eV9hdWRpb19scGUgPSBub3RpZnlfYXVkaW9fbHBlOworCisJaWYgKHBkYXRhLT5ub3RpZnlfcGVu ZGluZykgeworCisJCXByX2RlYnVnKCIlczogaGFuZGxlIHBlbmRpbmcgbm90aWZpY2F0aW9uXG4i LCBfX2Z1bmNfXyk7CisJCW5vdGlmeV9hdWRpb19scGUoJnBkYXRhLT5lbGQpOworCQlwZGF0YS0+ bm90aWZ5X3BlbmRpbmcgPSBmYWxzZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRh dGEtPmxwZV9hdWRpb19zbG9jaywgZmxhZ19pcnEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoq CisgKiBoZG1pX2xwZV9hdWRpb19yZW1vdmUgLSBzdG9wIGJyaWRnZSB3aXRoIGk5MTUKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBwbGF0Zm9ybSBkZXZpY2UgaXMgZGVz dHJveWVkLiBUaGUgc291bmQKKyAqIGNhcmQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIG9uIGhv dCBwbHVnIGV2ZW50LgorICovCitzdGF0aWMgaW50IGhkbWlfbHBlX2F1ZGlvX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBoZG1pX2xwZV9hdWRpb19jdHgg KmN0eDsKKworCXByX2RlYnVnKCJFbnRlciAlc1xuIiwgX19mdW5jX18pOworCisJLyogZ2V0IGNv bnRleHQsIHJlbGVhc2UgcmVzb3VyY2VzICovCisJY3R4ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldik7CisJaW91bm1hcChjdHgtPm1taW9fc3RhcnQpOworCWZyZWVfaXJxKGN0eC0+aXJxLCBO VUxMKTsKKwlrZnJlZShjdHgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfbHBl X2F1ZGlvX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcHRfZGV2LAorCQkJCXBtX21l c3NhZ2VfdCBzdGF0ZSkKK3sKKwlwcl9kZWJ1ZygiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKKwlt aWRfaGRtaV9hdWRpb19zdXNwZW5kKE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGhkbWlfbHBlX2F1ZGlvX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwdF9kZXYpCit7 CisJcHJfZGVidWcoIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CisJbWlkX2hkbWlfYXVkaW9fcmVz dW1lKE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBoZG1pX2xwZV9hdWRpb19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lICA9ICJo ZG1pLWxwZS1hdWRpbyIsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBoZG1pX2xwZV9hdWRpb19w cm9iZSwKKwkucmVtb3ZlCQk9IGhkbWlfbHBlX2F1ZGlvX3JlbW92ZSwKKwkuc3VzcGVuZAk9IGhk bWlfbHBlX2F1ZGlvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBoZG1pX2xwZV9hdWRpb19yZXN1bWUK K307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaGRtaV9scGVfYXVkaW9fZHJpdmVyKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aGRtaV9scGVf YXVkaW8iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3g4Ni9pbnRlbF9oZG1pX2xwZV9hdWRpby5oIGIv c291bmQveDg2L2ludGVsX2hkbWlfbHBlX2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOGQ5MjkzMQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3g4Ni9pbnRlbF9o ZG1pX2xwZV9hdWRpby5oCkBAIC0wLDAgKzEsNjg1IEBACisvKgorICogICBpbnRlbF9oZG1pX2xw ZV9hdWRpby5oIC0gSW50ZWwgSERNSSBMUEUgYXVkaW8gZHJpdmVyCisgKgorICogIENvcHlyaWdo dCAoQykgMjAxNiBJbnRlbCBDb3JwCisgKiAgQXV0aG9yczoJU2FpbGFqYSBCYW5kYXJ1cGFsbGkg PHNhaWxhamEuYmFuZGFydXBhbGxpQGludGVsLmNvbT4KKyAqCQlSYW1lc2ggQmFidSBLIFYgPHJh bWVzaC5iYWJ1QGludGVsLmNvbT4KKyAqCQlWYWliaGF2IEFnYXJ3YWwgPHZhaWJoYXYuYWdhcndh bEBpbnRlbC5jb20+CisgKgkJSmVyb21lIEFuYW5kIDxqZXJvbWUuYW5hbmRAaW50ZWwuY29tPgor ICoJCUFyYXZpbmQgU2lkZGFwcGFqaSA8YXJhdmluZHguc2lkZGFwcGFqaUBpbnRlbC5jb20+Cisg KiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICog IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4K KyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLwor I2lmbmRlZiBfX0lOVEVMX0hETUlfTFBFX0FVRElPX0gKKyNkZWZpbmUgX19JTlRFTF9IRE1JX0xQ RV9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPHNvdW5kL2lu aXR2YWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQv Y29udHJvbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjZGVmaW5lIEhNRElfTFBFX0FV RElPX0RSSVZFUl9OQU1FCQkiaW50ZWwtaGRtaS1scGUtYXVkaW8iCisjZGVmaW5lIEhBRF9NQVhf REVWSUNFUwkJMQorI2RlZmluZSBIQURfTUlOX0NIQU5ORUwJCTIKKyNkZWZpbmUgSEFEX01BWF9D SEFOTkVMCQk4CisjZGVmaW5lIEhBRF9OVU1fT0ZfUklOR19CVUZTCTQKKworLyogQXNzdW1lIDE5 MktIeiwgOGNoYW5uZWwsIDI1bXNlYyBwZXJpb2QgKi8KKyNkZWZpbmUgSEFEX01BWF9CVUZGRVIJ CSg2MDAqMTAyNCkKKyNkZWZpbmUgSEFEX01JTl9CVUZGRVIJCSgzMioxMDI0KQorI2RlZmluZSBI QURfTUFYX1BFUklPRFMJCTQKKyNkZWZpbmUgSEFEX01JTl9QRVJJT0RTCQk0CisjZGVmaW5lIEhB RF9NQVhfUEVSSU9EX0JZVEVTCShIQURfTUFYX0JVRkZFUi9IQURfTUlOX1BFUklPRFMpCisjZGVm aW5lIEhBRF9NSU5fUEVSSU9EX0JZVEVTCTI1NgorI2RlZmluZSBIQURfRklGT19TSVpFCQkwIC8q IGZpZm8gbm90IGJlaW5nIHVzZWQgKi8KKyNkZWZpbmUgTUFYX1NQRUFLRVJTCQk4CisvKiBUT0RP OiBBZGQgb3duIHRsdiB3aGVuIGNoYW5uZWwgbWFwIGlzIHBvcnRlZCBmb3IgdXNlciBzcGFjZSAq LworI2RlZmluZSBVU0VfQUxTQV9ERUZBVUxUX1RMVgorCisjZGVmaW5lIEFVRF9TQU1QTEVfUkFU RV8zMgkzMjAwMAorI2RlZmluZSBBVURfU0FNUExFX1JBVEVfNDRfMQk0NDEwMAorI2RlZmluZSBB VURfU0FNUExFX1JBVEVfNDgJNDgwMDAKKyNkZWZpbmUgQVVEX1NBTVBMRV9SQVRFXzg4XzIJODgy MDAKKyNkZWZpbmUgQVVEX1NBTVBMRV9SQVRFXzk2CTk2MDAwCisjZGVmaW5lIEFVRF9TQU1QTEVf UkFURV8xNzZfNAkxNzY0MDAKKyNkZWZpbmUgQVVEX1NBTVBMRV9SQVRFXzE5MgkxOTIwMDAKKwor I2RlZmluZSBIQURfTUlOX1JBVEUJCUFVRF9TQU1QTEVfUkFURV8zMgorI2RlZmluZSBIQURfTUFY X1JBVEUJCUFVRF9TQU1QTEVfUkFURV8xOTIKKworI2RlZmluZSBESVNfU0FNUExFX1JBVEVfMjVf MgkyNTIwMAorI2RlZmluZSBESVNfU0FNUExFX1JBVEVfMjcJMjcwMDAKKyNkZWZpbmUgRElTX1NB TVBMRV9SQVRFXzU0CTU0MDAwCisjZGVmaW5lIERJU19TQU1QTEVfUkFURV83NF8yNQk3NDI1MAor I2RlZmluZSBESVNfU0FNUExFX1JBVEVfMTQ4XzUJMTQ4NTAwCisjZGVmaW5lIEhBRF9SRUdfV0lE VEgJCTB4MDgKKyNkZWZpbmUgSEFEX01BWF9IV19CVUZTCQkweDA0CisjZGVmaW5lIEhBRF9NQVhf RElQX1dPUkRTCQkxNgorI2RlZmluZSBJTlRFTF9IQUQJCSJJbnRlbEhkbWlMcGVBdWRpbyIKKwor LyogX0FVRF9DT05GSUcgcmVnaXN0ZXIgTUFTSyAqLworI2RlZmluZSBBVURfQ09ORklHX01BU0tf VU5ERVJSVU4JMHhDMDAwMDAwMAorI2RlZmluZSBBVURfQ09ORklHX01BU0tfU1JEQkcJCTB4MDAw MDAwMDIKKyNkZWZpbmUgQVVEX0NPTkZJR19NQVNLX0ZVTkNSU1QJCTB4MDAwMDAwMDEKKworI2Rl ZmluZSBNQVhfQ05UCQkJMHhGRgorI2RlZmluZSBIQURfU1VTUEVORF9ERUxBWQkxMDAwCisKKyNk ZWZpbmUgT1RNX0hETUlfRUxEX1NJWkUgMTI4CisKK3VuaW9uIG90bV9oZG1pX2VsZF90IHsKKwl1 bnNpZ25lZCBjaGFyIGVsZF9kYXRhW09UTV9IRE1JX0VMRF9TSVpFXTsKKwlzdHJ1Y3QgeworCQkv KiBCeXRlWzBdID0gRUxEIFZlcnNpb24gTnVtYmVyICovCisJCXVuaW9uIHsKKwkJCXVuc2lnbmVk IGNoYXIgICBieXRlMDsKKwkJCXN0cnVjdCB7CisJCQkJdW5zaWduZWQgY2hhciByZXNlcnZlZDoz OyAvKiBSZXNlcmYgKi8KKwkJCQl1bnNpZ25lZCBjaGFyIGVsZF92ZXI6NTsgLyogRUxEIFZlcnNp b24gTnVtYmVyICovCisJCQkJLyogMDAwMDBiIC0gcmVzZXJ2ZWQKKwkJCQkgKiAwMDAwMWIgLSBm aXJzdCByZXYsIG9ic29sZXRlZAorCQkJCSAqIDAwMDEwYiAtIHZlcnNpb24gMiwgc3VwcG9ydGlu ZyBDRUEgdmVyc2lvbgorCQkJCSAqCQkJODYxRCBvciBiZWxvdworCQkJCSAqIDAwMDExYjoxMTEx MWIgLSByZXNlcnZlZAorCQkJCSAqIGZvciBmdXR1cmUKKwkJCQkgKi8KKwkJCX07CisJCX07CisK KwkJLyogQnl0ZVsxXSA9IFZlbmRvciBWZXJzaW9uIEZpZWxkICovCisJCXVuaW9uIHsKKwkJCXVu c2lnbmVkIGNoYXIgdmVuZG9yX3ZlcnNpb247CisJCQlzdHJ1Y3QgeworCQkJCXVuc2lnbmVkIGNo YXIgcmVzZXJ2ZWQxOjM7CisJCQkJdW5zaWduZWQgY2hhciB2ZWxkX3Zlcjo1OyAvKiBWZXJzaW9u IG51bWJlciBvZiB0aGUgRUxECisJCQkJCQkgICAgICogZXh0ZW5zaW9uLiBUaGlzIHZhbHVlIGlz CisJCQkJCQkgICAgICogcHJvdmlzaW9uZWQgYW5kIHVuaXF1ZSB0bworCQkJCQkJICAgICAqIGVh Y2ggdmVuZG9yLgorCQkJCQkJICAgICAqLworCQkJfTsKKwkJfTsKKworCQkvKiBCeXRlWzJdID0g QmFzZWxpbmUgTGVuZ3RoIGZpZWxkICovCisJCXVuc2lnbmVkIGNoYXIgYmFzZWxpbmVfZWxkX2xl bmd0aDsgLyogTGVuZ3RoIG9mIHRoZSBCYXNlbGluZSBzdHJ1Y3R1cmUKKwkJCQkJICAgICAgKglk aXZpZGVkIGJ5IEZvdXIuCisJCQkJCSAgICAgICovCisKKwkJLyogQnl0ZSBbM10gPSBSZXNlcnZl ZCBmb3IgZnV0dXJlIHVzZSAqLworCQl1bnNpZ25lZCBjaGFyIGJ5dGUzOworCisJCS8qIFN0YXJ0 aW5nIG9mIHRoZSBCYXNlTGluZSBFRUxEIHN0cnVjdHVyZQorCQkgKiBCeXRlWzRdID0gTW9uaXRv ciBOYW1lIExlbmd0aAorCQkgKi8KKwkJdW5pb24geworCQkJdW5zaWduZWQgY2hhciBieXRlNDsK KwkJCXN0cnVjdCB7CisJCQkJdW5zaWduZWQgY2hhciBtbmw6NTsKKwkJCQl1bnNpZ25lZCBjaGFy IGNlYV9lZGlkX3Jldl9pZDozOworCQkJfTsKKwkJfTsKKworCQkvKiBCeXRlWzVdID0gQ2FwYWJp bGl0aWVzICovCisJCXVuaW9uIHsKKwkJCXVuc2lnbmVkIGNoYXIgY2FwYWJpbGl0aWVzOworCQkJ c3RydWN0IHsKKwkJCQl1bnNpZ25lZCBjaGFyIGhkY3A6MTsgLyogSERDUCBzdXBwb3J0ICovCisJ CQkJdW5zaWduZWQgY2hhciBhaV9zdXBwb3J0OjE7ICAgLyogQUkgc3VwcG9ydCAqLworCQkJCXVu c2lnbmVkIGNoYXIgY29ubmVjdGlvbl90eXBlOjI7IC8qIENvbm5lY3Rpb24gdHlwZQorCQkJCQkJ CSAgICAqIDAwIC0gSERNSQorCQkJCQkJCSAgICAqIDAxIC0gRFAKKwkJCQkJCQkgICAgKiAxMCAt MTEgIFJlc2VydmVkCisJCQkJCQkJICAgICogZm9yIGZ1dHVyZQorCQkJCQkJCSAgICAqIGNvbm5l Y3Rpb24gdHlwZXMKKwkJCQkJCQkgICAgKi8KKwkJCQl1bnNpZ25lZCBjaGFyIHNhZGM6NDsgLyog SW5kaWNhdGVzIG51bWJlciBvZiAzIGJ5dGVzCisJCQkJCQkgKiBTaG9ydCBBdWRpbyBEZXNjcmlw dG9ycy4KKwkJCQkJCSAqLworCQkJfTsKKwkJfTsKKworCQkvKiBCeXRlWzZdID0gQXVkaW8gU3lu Y2ggRGVsYXkgKi8KKwkJdW5zaWduZWQgY2hhciBhdWRpb19zeW5jaF9kZWxheTsgLyogQW1vdW50 IG9mIHRpbWUgcmVwb3J0ZWQgYnkgdGhlCisJCQkJCSAgICAqIHNpbmsgdGhhdCB0aGUgdmlkZW8g dHJhaWxzIGF1ZGlvCisJCQkJCSAgICAqIGluIG1pbGxpc2Vjb25kcy4KKwkJCQkJICAgICovCisK KwkJLyogQnl0ZVs3XSA9IFNwZWFrZXIgQWxsb2NhdGlvbiBCbG9jayAqLworCQl1bmlvbiB7CisJ CQl1bnNpZ25lZCBjaGFyIHNwZWFrZXJfYWxsb2NhdGlvbl9ibG9jazsKKwkJCXN0cnVjdCB7CisJ CQkJdW5zaWduZWQgY2hhciBmbHI6MTsgLypGcm9udCBMZWZ0IGFuZCBSaWdodCBjaGFubmVscyov CisJCQkJdW5zaWduZWQgY2hhciBsZmU6MTsgLypMb3cgRnJlcXVlbmN5IEVmZmVjdCBjaGFubmVs Ki8KKwkJCQl1bnNpZ25lZCBjaGFyIGZjOjE7ICAvKkNlbnRlciB0cmFuc21pc3Npb24gY2hhbm5l bCovCisJCQkJdW5zaWduZWQgY2hhciBybHI6MTsgLypSZWFyIExlZnQgYW5kIFJpZ2h0IGNoYW5u ZWxzKi8KKwkJCQl1bnNpZ25lZCBjaGFyIHJjOjE7IC8qUmVhciBDZW50ZXIgY2hhbm5lbCovCisJ CQkJdW5zaWduZWQgY2hhciBmbHJjOjE7IC8qRnJvbnQgbGVmdCBhbmQgUmlnaHQgb2YgQ2VudGVy CisJCQkJCQkgKnRyYW5zbWlzc2lvbiBjaGFubmVscworCQkJCQkJICovCisJCQkJdW5zaWduZWQg Y2hhciBybHJjOjE7IC8qUmVhciBsZWZ0IGFuZCBSaWdodCBvZiBDZW50ZXIKKwkJCQkJCSAqdHJh bnNtaXNzaW9uIGNoYW5uZWxzCisJCQkJCQkgKi8KKwkJCQl1bnNpZ25lZCBjaGFyIHJlc2VydmVk MzoxOyAvKiBSZXNlcnZlZCAqLworCQkJfTsKKwkJfTsKKworCQkvKiBCeXRlWzggLSAxNV0gLSA4 IEJ5dGUgcG9ydCBpZGVudGlmaWNhdGlvbiB2YWx1ZSAqLworCQl1bnNpZ25lZCBjaGFyIHBvcnRf aWRfdmFsdWVbOF07CisKKwkJLyogQnl0ZVsxNiAtIDE3XSAtIDIgQnl0ZSBNYW51ZmFjdHVyZXIg SUQgKi8KKwkJdW5zaWduZWQgY2hhciBtYW51ZmFjdHVyZXJfaWRbMl07CisKKwkJLyogQnl0ZVsx OCAtIDE5XSAtIDIgQnl0ZSBQcm9kdWN0IElEICovCisJCXVuc2lnbmVkIGNoYXIgcHJvZHVjdF9p ZFsyXTsKKworCQkvKiBCeXRlIFsyMC04M10gLSA2NCBCeXRlcyBvZiBCYXNlTGluZSBEYXRhICov CisJCXVuc2lnbmVkIGNoYXIgbW5fc2FuZF9zYWRzWzY0XTsgLyogVGhpcyB3aWxsIGluY2x1ZGUK KwkJCQkJICAgKiAtIEFTQ0lJIHN0cmluZyBvZiBNb25pdG9yIG5hbWUKKwkJCQkJICAgKiAtIExp c3Qgb2YgMyBieXRlIFNBRHMKKwkJCQkJICAgKiAtIFplcm8gcGFkZGluZworCQkJCQkgICAqLwor CisJCS8qIFZlbmRvciBFTEQgQmxvY2sgc2hvdWxkIGNvbnRpbnVlIGhlcmUhCisJCSAqIE5vIFZl bmRvciBFTEQgYmxvY2sgZGVmaW5lZCBhcyBvZiBub3cuCisJCSAqLworCX0gX19wYWNrZWQ7Cit9 OworCisvKioKKyAqIGVudW0gaGFkX3N0YXR1cyAtIEF1ZGlvIHN0cmVhbSBzdGF0ZXMKKyAqCisg KiBAU1RSRUFNX0lOSVQ6IFN0cmVhbSBpbml0aWFsaXplZAorICogQFNUUkVBTV9SVU5OSU5HOiBT dHJlYW0gcnVubmluZworICogQFNUUkVBTV9QQVVTRUQ6IFN0cmVhbSBwYXVzZWQKKyAqIEBTVFJF QU1fRFJPUFBFRDogU3RyZWFtIGRyb3BwZWQKKyAqLworZW51bSBoYWRfc3RyZWFtX3N0YXR1cyB7 CisJU1RSRUFNX0lOSVQgPSAwLAorCVNUUkVBTV9SVU5OSU5HID0gMSwKKwlTVFJFQU1fUEFVU0VE ID0gMiwKKwlTVFJFQU1fRFJPUFBFRCA9IDMKK307CisKKy8qKgorICogZW51bSBoYWRfc3RhdHVz X3N0cmVhbSAtIEhBRCBzdHJlYW0gc3RhdGVzCisgKi8KK2VudW0gaGFkX3N0YXR1c19zdHJlYW0g eworCUhBRF9JTklUID0gMCwKKwlIQURfUlVOTklOR19TVFJFQU0sCit9OworCitlbnVtIGhhZF9k cnZfc3RhdHVzIHsKKwlIQURfRFJWX0NPTk5FQ1RFRCwKKwlIQURfRFJWX1JVTk5JTkcsCisJSEFE X0RSVl9ESVNDT05ORUNURUQsCisJSEFEX0RSVl9TVVNQRU5ERUQsCisJSEFEX0RSVl9FUlIsCit9 OworCisvKiBlbnVtIGludGVsX2hhZF9hdWRfYnVmX3R5cGUgLSBIRE1JIGNvbnRyb2xsZXIgcmlu ZyBidWZmZXIgdHlwZXMgKi8KK2VudW0gaW50ZWxfaGFkX2F1ZF9idWZfdHlwZSB7CisJSEFEX0JV Rl9UWVBFX0EgPSAwLAorCUhBRF9CVUZfVFlQRV9CID0gMSwKKwlIQURfQlVGX1RZUEVfQyA9IDIs CisJSEFEX0JVRl9UWVBFX0QgPSAzLAorfTsKKworZW51bSBudW1fYXVkX2NoIHsKKwlDSF9TVEVS RU8gPSAwLAorCUNIX1RIUkVFX0ZPVVIgPSAxLAorCUNIX0ZJVkVfU0lYID0gMiwKKwlDSF9TRVZF Tl9FSUdIVCA9IDMKK307CisKKy8qIEhETUkgQ29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzIC0g YXVkaW8gZG9tYWluIGNvbW1vbiAqLworLyogQmFzZSBhZGRyZXNzIGZvciBiZWxvdyByZWdzID0g MHg2NTAwMCAqLworZW51bSBoZG1pX2N0cmxfcmVnX29mZnNldF9jb21tb24geworCUFVRElPX0hE TUlfQ09ORklHX0EJPSAweDAwMCwKKwlBVURJT19IRE1JX0NPTkZJR19CID0gMHg4MDAsCisJQVVE SU9fSERNSV9DT05GSUdfQyA9IDB4OTAwLAorfTsKKy8qIEhETUkgY29udHJvbGxlciByZWdpc3Rl ciBvZmZzZXRzICovCitlbnVtIGhkbWlfY3RybF9yZWdfb2Zmc2V0X3YxIHsKKwlBVURfQ09ORklH CQk9IDB4MCwKKwlBVURfQ0hfU1RBVFVTXzAJCT0gMHgwOCwKKwlBVURfQ0hfU1RBVFVTXzEJCT0g MHgwQywKKwlBVURfSERNSV9DVFMJCT0gMHgxMCwKKwlBVURfTl9FTkFCTEUJCT0gMHgxNCwKKwlB VURfU0FNUExFX1JBVEUJCT0gMHgxOCwKKwlBVURfQlVGX0NPTkZJRwkJPSAweDIwLAorCUFVRF9C VUZfQ0hfU1dBUAkJPSAweDI0LAorCUFVRF9CVUZfQV9BRERSCQk9IDB4NDAsCisJQVVEX0JVRl9B X0xFTkdUSAk9IDB4NDQsCisJQVVEX0JVRl9CX0FERFIJCT0gMHg0OCwKKwlBVURfQlVGX0JfTEVO R1RICT0gMHg0YywKKwlBVURfQlVGX0NfQUREUgkJPSAweDUwLAorCUFVRF9CVUZfQ19MRU5HVEgJ PSAweDU0LAorCUFVRF9CVUZfRF9BRERSCQk9IDB4NTgsCisJQVVEX0JVRl9EX0xFTkdUSAk9IDB4 NWMsCisJQVVEX0NOVExfU1QJCT0gMHg2MCwKKwlBVURfSERNSV9TVEFUVVMJCT0gMHg2OCwKKwlB VURfSERNSVdfSU5GT0ZSCT0gMHgxMTQsCit9OworCisvKgorICogRGVsdGEgY2hhbmdlcyBpbiBI RE1JIGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cworICogY29tcGFyZSB0byB2MSB2ZXJzaW9u CisgKi8KKworZW51bSBoZG1pX2N0cmxfcmVnX29mZnNldF92MiB7CisJQVVEX0hETUlfU1RBVFVT X3YyCT0gMHg2NCwKKwlBVURfSERNSVdfSU5GT0ZSX3YyCT0gMHg2OCwKK307CisKKy8qCisgKglD RUEgc3BlYWtlciBwbGFjZW1lbnQ6CisgKgorICoJRkwgIEZMQyAgIEZDICAgRlJDICAgRlIKKyAq CisgKgkJCQkJCUxGRQorICoKKyAqCVJMICBSTEMgICBSQyAgIFJSQyAgIFJSCisgKgorICoJVGhl IExlZnQvUmlnaHQgU3Vycm91bmQgY2hhbm5lbCBfbm90aW9uc18gTFMvUlMgaW4gU01QVEUgMzIw TQorICoJY29ycmVzcG9uZHMgdG8gQ0VBIFJML1JSOyBUaGUgU01QVEUgY2hhbm5lbCBfYXNzaWdu bWVudF8gQy9MRkUgaXMKKyAqCXN3YXBwZWQgdG8gQ0VBIExGRS9GQy4KKyAqLworZW51bSBjZWFf c3BlYWtlcl9wbGFjZW1lbnQgeworCUZMICA9ICgxIDw8ICAwKSwgICAgICAgIC8qIEZyb250IExl ZnQgICAgICAgICAgICovCisJRkMgID0gKDEgPDwgIDEpLCAgICAgICAgLyogRnJvbnQgQ2VudGVy ICAgICAgICAgKi8KKwlGUiAgPSAoMSA8PCAgMiksICAgICAgICAvKiBGcm9udCBSaWdodCAgICAg ICAgICAqLworCUZMQyA9ICgxIDw8ICAzKSwgICAgICAgIC8qIEZyb250IExlZnQgQ2VudGVyICAg ICovCisJRlJDID0gKDEgPDwgIDQpLCAgICAgICAgLyogRnJvbnQgUmlnaHQgQ2VudGVyICAgKi8K KwlSTCAgPSAoMSA8PCAgNSksICAgICAgICAvKiBSZWFyIExlZnQgICAgICAgICAgICAqLworCVJD ICA9ICgxIDw8ICA2KSwgICAgICAgIC8qIFJlYXIgQ2VudGVyICAgICAgICAgICovCisJUlIgID0g KDEgPDwgIDcpLCAgICAgICAgLyogUmVhciBSaWdodCAgICAgICAgICAgKi8KKwlSTEMgPSAoMSA8 PCAgOCksICAgICAgICAvKiBSZWFyIExlZnQgQ2VudGVyICAgICAqLworCVJSQyA9ICgxIDw8ICA5 KSwgICAgICAgIC8qIFJlYXIgUmlnaHQgQ2VudGVyICAgICovCisJTEZFID0gKDEgPDwgMTApLCAg ICAgICAgLyogTG93IEZyZXF1ZW5jeSBFZmZlY3QgKi8KK307CisKK3N0cnVjdCBjZWFfY2hhbm5l bF9zcGVha2VyX2FsbG9jYXRpb24geworCWludCBjYV9pbmRleDsKKwlpbnQgc3BlYWtlcnNbOF07 CisKKwkvKiBkZXJpdmVkIHZhbHVlcywganVzdCBmb3IgY29udmVuaWVuY2UgKi8KKwlpbnQgY2hh bm5lbHM7CisJaW50IHNwa19tYXNrOworfTsKKworc3RydWN0IGNoYW5uZWxfbWFwX3RhYmxlIHsK Kwl1bnNpZ25lZCBjaGFyIG1hcDsgICAgICAgICAgICAgIC8qIEFMU0EgQVBJIGNoYW5uZWwgbWFw IHBvc2l0aW9uICovCisJdW5zaWduZWQgY2hhciBjZWFfc2xvdDsgICAgICAgICAvKiBDRUEgc2xv dCB2YWx1ZSAqLworCWludCBzcGtfbWFzazsgICAgICAgICAgICAgICAgICAgLyogc3BlYWtlciBw b3NpdGlvbiBiaXQgbWFzayAqLworfTsKKworLyoqCisgKiB1bmlvbiBhdWRfY2ZnIC0gQXVkaW8g Y29uZmlndXJhdGlvbgorICoKKyAqIEBjZmdfcmVneDogaW5kaXZpZHVhbCByZWdpc3RlciBiaXRz CisgKiBAY2ZnX3JlZ3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwordW5pb24gYXVk X2NmZyB7CisJc3RydWN0IHsKKwkJdTMyIGF1ZF9lbjoxOworCQl1MzIgbGF5b3V0OjE7CisJCXUz MiBmbXQ6MjsKKwkJdTMyIG51bV9jaDoyOworCQl1MzIgcnN2ZDA6MTsKKwkJdTMyIHNldDoxOwor CQl1MzIgZmxhdDoxOworCQl1MzIgdmFsX2JpdDoxOworCQl1MzIgdXNlcl9iaXQ6MTsKKwkJdTMy IHVuZGVycnVuOjE7CisJCXUzMiByc3ZkMToyMDsKKwl9IGNmZ19yZWd4OworCXN0cnVjdCB7CisJ CXUzMiBhdWRfZW46MTsKKwkJdTMyIGxheW91dDoxOworCQl1MzIgZm10OjI7CisJCXUzMiBudW1f Y2g6MzsKKwkJdTMyIHNldDoxOworCQl1MzIgZmxhdDoxOworCQl1MzIgdmFsX2JpdDoxOworCQl1 MzIgdXNlcl9iaXQ6MTsKKwkJdTMyIHVuZGVycnVuOjE7CisJCXUzMiBwYWNrZXRfbW9kZToxOwor CQl1MzIgbGVmdF9hbGlnbjoxOworCQl1MzIgYm9ndXNfc2FtcGxlOjE7CisJCXUzMiBkcF9tb2Rl aToxOworCQl1MzIgcnN2ZDoxNjsKKwl9IGNmZ19yZWd4X3YyOworCXUzMiBjZmdfcmVndmFsOwor fTsKKworLyoqCisgKiB1bmlvbiBhdWRfY2hfc3RhdHVzXzAgLSBBdWRpbyBDaGFubmVsIFN0YXR1 cyAwIEF0dHJpYnV0ZXMKKyAqCisgKiBAc3RhdHVzXzBfcmVneDppbmRpdmlkdWFsIHJlZ2lzdGVy IGJpdHMKKyAqIEBzdGF0dXNfMF9yZWd2YWw6ZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwor dW5pb24gYXVkX2NoX3N0YXR1c18wIHsKKwlzdHJ1Y3QgeworCQl1MzIgY2hfc3RhdHVzOjE7CisJ CXUzMiBscGNtX2lkOjE7CisJCXUzMiBjcF9pbmZvOjE7CisJCXUzMiBmb3JtYXQ6MzsKKwkJdTMy IG1vZGU6MjsKKwkJdTMyIGN0Z19jb2RlOjg7CisJCXUzMiBzcmNfbnVtOjQ7CisJCXUzMiBjaF9u dW06NDsKKwkJdTMyIHNhbXBfZnJlcTo0OworCQl1MzIgY2xrX2FjYzoyOworCQl1MzIgcnN2ZDoy OworCX0gc3RhdHVzXzBfcmVneDsKKwl1MzIgc3RhdHVzXzBfcmVndmFsOworfTsKKworLyoqCisg KiB1bmlvbiBhdWRfY2hfc3RhdHVzXzEgLSBBdWRpbyBDaGFubmVsIFN0YXR1cyAxIEF0dHJpYnV0 ZXMKKyAqCisgKiBAc3RhdHVzXzFfcmVneDogaW5kaXZpZHVhbCByZWdpc3RlciBiaXRzCisgKiBA c3RhdHVzXzFfcmVndmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1bmlvbiBhdWRf Y2hfc3RhdHVzXzEgeworCXN0cnVjdCB7CisJCXUzMiBtYXhfd3JkX2xlbjoxOworCQl1MzIgd3Jk X2xlbjozOworCQl1MzIgcnN2ZDoyODsKKwkJfSBzdGF0dXNfMV9yZWd4OworCXUzMiBzdGF0dXNf MV9yZWd2YWw7Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9oZG1pX2N0cyAtIENUUyByZWdpc3Rl cgorICoKKyAqIEBjdHNfcmVneDogaW5kaXZpZHVhbCByZWdpc3RlciBiaXRzCisgKiBAY3RzX3Jl Z3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwordW5pb24gYXVkX2hkbWlfY3RzIHsK KwlzdHJ1Y3QgeworCQl1MzIgY3RzX3ZhbDoyMDsKKwkJdTMyIGVuX2N0c19wcm9nOjE7CisJCXUz MiByc3ZkOjExOworCX0gY3RzX3JlZ3g7CisJc3RydWN0IHsKKwkJdTMyIGN0c192YWw6MjQ7CisJ CXUzMiBlbl9jdHNfcHJvZzoxOworCQl1MzIgcnN2ZDo3OworCX0gY3RzX3JlZ3hfdjI7CisJdTMy IGN0c19yZWd2YWw7Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9oZG1pX25fZW5hYmxlIC0gTiBy ZWdpc3RlcgorICoKKyAqIEBuX3JlZ3g6IGluZGl2aWR1YWwgcmVnaXN0ZXIgYml0cworICogQG5f cmVndmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1bmlvbiBhdWRfaGRtaV9uX2Vu YWJsZSB7CisJc3RydWN0IHsKKwkJdTMyIG5fdmFsOjIwOworCQl1MzIgZW5fbl9wcm9nOjE7CisJ CXUzMiByc3ZkOjExOworCX0gbl9yZWd4OworCXN0cnVjdCB7CisJCXUzMiBuX3ZhbDoyNDsKKwkJ dTMyIGVuX25fcHJvZzoxOworCQl1MzIgcnN2ZDo3OworCX0gbl9yZWd4X3YyOworCXUzMiBuX3Jl Z3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2J1Zl9jb25maWcgLSAgQXVkaW8gQnVmZmVy IGNvbmZpZ3VyYXRpb25zCisgKgorICogQGJ1Zl9jZmdfcmVneDogaW5kaXZpZHVhbCByZWdpc3Rl ciBiaXRzCisgKiBAYnVmX2NmZ3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwordW5p b24gYXVkX2J1Zl9jb25maWcgeworCXN0cnVjdCB7CisJCXUzMiBmaWZvX3dpZHRoOjg7CisJCXUz MiByc3ZkMDo4OworCQl1MzIgYXVkX2RlbGF5Ojg7CisJCXUzMiByc3ZkMTo4OworCX0gYnVmX2Nm Z19yZWd4OworCXN0cnVjdCB7CisJCXUzMiBhdWRpb19maWZvX3dhdGVybWFyazo4OworCQl1MzIg ZG1hX2ZpZm9fd2F0ZXJtYXJrOjM7CisJCXUzMiByc3ZkMDo1OworCQl1MzIgYXVkX2RlbGF5Ojg7 CisJCXUzMiByc3ZkMTo4OworCX0gYnVmX2NmZ19yZWd4X3YyOworCXUzMiBidWZfY2ZndmFsOwor fTsKKworLyoqCisgKiB1bmlvbiBhdWRfYnVmX2NoX3N3YXAgLSBBdWRpbyBTYW1wbGUgU3dhcHBp bmcgb2Zmc2V0CisgKgorICogQGJ1Zl9jaF9zd2FwX3JlZ3g6IGluZGl2aWR1YWwgcmVnaXN0ZXIg Yml0cworICogQGJ1Zl9jaF9zd2FwX3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwor dW5pb24gYXVkX2J1Zl9jaF9zd2FwIHsKKwlzdHJ1Y3QgeworCQl1MzIgZmlyc3RfMDozOworCQl1 MzIgc2Vjb25kXzA6MzsKKwkJdTMyIGZpcnN0XzE6MzsKKwkJdTMyIHNlY29uZF8xOjM7CisJCXUz MiBmaXJzdF8yOjM7CisJCXUzMiBzZWNvbmRfMjozOworCQl1MzIgZmlyc3RfMzozOworCQl1MzIg c2Vjb25kXzM6MzsKKwkJdTMyIHJzdmQ6ODsKKwl9IGJ1Zl9jaF9zd2FwX3JlZ3g7CisJdTMyIGJ1 Zl9jaF9zd2FwX3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2J1Zl9hZGRyIC0gQWRkcmVz cyBmb3IgQXVkaW8gQnVmZmVyCisgKgorICogQGJ1Zl9hZGRyX3JlZ3g6IGluZGl2aWR1YWwgcmVn aXN0ZXIgYml0cworICogQGJ1Zl9hZGRyX3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAq LwordW5pb24gYXVkX2J1Zl9hZGRyIHsKKwlzdHJ1Y3QgeworCQl1MzIgdmFsaWQ6MTsKKwkJdTMy IGludHJfZW46MTsKKwkJdTMyIHJzdmQ6NDsKKwkJdTMyIGFkZHI6MjY7CisJfSBidWZfYWRkcl9y ZWd4OworCXUzMiBidWZfYWRkcl92YWw7Cit9OworCisvKioKKyAqIHVuaW9uIGF1ZF9idWZfbGVu IC0gTGVuZ3RoIG9mIEF1ZGlvIEJ1ZmZlcgorICoKKyAqIEBidWZfbGVuX3JlZ3g6IGluZGl2aWR1 YWwgcmVnaXN0ZXIgYml0cworICogQGJ1Zl9sZW5fdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisg KgorICovCit1bmlvbiBhdWRfYnVmX2xlbiB7CisJc3RydWN0IHsKKwkJdTMyIGJ1Zl9sZW46MjA7 CisJCXUzMiByc3ZkOjEyOworCX0gYnVmX2xlbl9yZWd4OworCXUzMiBidWZfbGVuX3ZhbDsKK307 CisKKy8qKgorICogdW5pb24gYXVkX2N0cmxfc3QgLSBBdWRpbyBDb250cm9sIFN0YXRlIFJlZ2lz dGVyIG9mZnNldAorICoKKyAqIEBjdHJsX3JlZ3g6IGluZGl2aWR1YWwgcmVnaXN0ZXIgYml0cwor ICogQGN0cmxfdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgorICovCit1bmlvbiBhdWRfY3Ry bF9zdCB7CisJc3RydWN0IHsKKwkJdTMyIHJhbV9hZGRyOjQ7CisJCXUzMiBlbGRfYWNrOjE7CisJ CXUzMiBlbGRfYWRkcjo0OworCQl1MzIgZWxkX2J1Zl9zaXplOjU7CisJCXUzMiBlbGRfdmFsaWQ6 MTsKKwkJdTMyIGNwX3JlYWR5OjE7CisJCXUzMiBkaXBfZnJlcToyOworCQl1MzIgZGlwX2lkeDoz OworCQl1MzIgZGlwX2VuX3N0YTo0OworCQl1MzIgcnN2ZDo3OworCX0gY3RybF9yZWd4OworCXUz MiBjdHJsX3ZhbDsKK307CisKKy8qKgorICogdW5pb24gYXVkX2luZm9fZnJhbWUxIC0gQXVkaW8g SERNSSBXaWRnZXQgRGF0YSBJc2xhbmQgUGFja2V0IG9mZnNldAorICoKKyAqIEBmcjFfcmVneDog aW5kaXZpZHVhbCByZWdpc3RlciBiaXRzCisgKiBAZnIxX3ZhbDogZnVsbCByZWdpc3RlciB2YWx1 ZQorICoKKyAqLwordW5pb24gYXVkX2luZm9fZnJhbWUxIHsKKwlzdHJ1Y3QgeworCQl1MzIgcGt0 X3R5cGU6ODsKKwkJdTMyIHZlcl9udW06ODsKKwkJdTMyIGxlbjo1OworCQl1MzIgcnN2ZDoxMTsK Kwl9IGZyMV9yZWd4OworCXUzMiBmcjFfdmFsOworfTsKKworLyoqCisgKiB1bmlvbiBhdWRfaW5m b19mcmFtZTIgLSBESVAgZnJhbWUgMgorICoKKyAqIEBmcjJfcmVneDogaW5kaXZpZHVhbCByZWdp c3RlciBiaXRzCisgKiBAZnIyX3ZhbDogZnVsbCByZWdpc3RlciB2YWx1ZQorICoKKyAqLwordW5p b24gYXVkX2luZm9fZnJhbWUyIHsKKwlzdHJ1Y3QgeworCQl1MzIgY2hrc3VtOjg7CisJCXUzMiBj aG5sX2NudDozOworCQl1MzIgcnN2ZDA6MTsKKwkJdTMyIGNvZGluZ190eXBlOjQ7CisJCXUzMiBz bXBsX3NpemU6MjsKKwkJdTMyIHNtcGxfZnJlcTozOworCQl1MzIgcnN2ZDE6MzsKKwkJdTMyIGZv cm1hdDo4OworCX0gZnIyX3JlZ3g7CisJdTMyIGZyMl92YWw7Cit9OworCisvKioKKyAqIHVuaW9u IGF1ZF9pbmZvX2ZyYW1lMyAtIERJUCBmcmFtZSAzCisgKgorICogQGZyM19yZWd4OiBpbmRpdmlk dWFsIHJlZ2lzdGVyIGJpdHMKKyAqIEBmcjNfdmFsOiBmdWxsIHJlZ2lzdGVyIHZhbHVlCisgKgor ICovCit1bmlvbiBhdWRfaW5mb19mcmFtZTMgeworCXN0cnVjdCB7CisJCXUzMiBjaG5sX2FsbG9j Ojg7CisJCXUzMiByc3ZkMDozOworCQl1MzIgbHN2OjQ7CisJCXUzMiBkbV9pbmg6MTsKKwkJdTMy IHJzdmQxOjE2OworCX0gZnIzX3JlZ3g7CisJdTMyIGZyM192YWw7Cit9OworCitlbnVtIGhkbWlf Y29ubmVjdG9yX3N0YXR1cyB7CisJaGRtaV9jb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA9IDEs CisJaGRtaV9jb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCA9IDIsCisJaGRtaV9jb25uZWN0 b3Jfc3RhdHVzX3Vua25vd24gPSAzLAorfTsKKworI2RlZmluZSBIRE1JX0FVRElPX1VOREVSUlVO ICAgICAoMVVMPDwzMSkKKyNkZWZpbmUgSERNSV9BVURJT19CVUZGRVJfRE9ORSAgKDFVTDw8Mjkp CisKKworI2RlZmluZSBQT1JUX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSBTRFZPX0FVRElP X0VOQUJMRQkoMSA8PCA2KQorCitlbnVtIGhhZF9jYXBzX2xpc3QgeworCUhBRF9HRVRfRUxEID0g MSwKKwlIQURfR0VUX0RJU1BMQVlfUkFURSwKKwlIQURfU0VUX0VOQUJMRV9BVURJTywKKwlIQURf U0VUX0RJU0FCTEVfQVVESU8sCisJSEFEX1NFVF9FTkFCTEVfQVVESU9fSU5ULAorCUhBRF9TRVRf RElTQUJMRV9BVURJT19JTlQsCit9OworCitlbnVtIGhhZF9ldmVudF90eXBlIHsKKwlIQURfRVZF TlRfSE9UX1BMVUcgPSAxLAorCUhBRF9FVkVOVF9IT1RfVU5QTFVHLAorCUhBRF9FVkVOVF9NT0RF X0NIQU5HSU5HLAorCUhBRF9FVkVOVF9BVURJT19CVUZGRVJfRE9ORSwKKwlIQURfRVZFTlRfQVVE SU9fQlVGRkVSX1VOREVSUlVOLAorCUhBRF9FVkVOVF9RVUVSWV9JU19BVURJT19CVVNZLAorCUhB RF9FVkVOVF9RVUVSWV9JU19BVURJT19TVVNQRU5ERUQsCit9OworCisvKgorICogSERNSSBEaXNw bGF5IENvbnRyb2xsZXIgQXVkaW8gSW50ZXJmYWNlCisgKgorICovCit0eXBlZGVmIGludCAoKmhh ZF9ldmVudF9jYWxsX2JhY2spIChlbnVtIGhhZF9ldmVudF90eXBlIGV2ZW50X3R5cGUsCisJCXZv aWQgKmN0eHRfaW5mbyk7CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3JlZ2lzdGVyc19vcHMgeworCWlu dCAoKmhkbWlfYXVkaW9fZ2V0X3JlZ2lzdGVyX2Jhc2UpKHVpbnQzMl90ICoqcmVnX2Jhc2UsCisJ CQl1aW50MzJfdCAqY29uZmlnX29mZnNldCk7CisJaW50ICgqaGRtaV9hdWRpb19yZWFkX3JlZ2lz dGVyKSh1aW50MzJfdCByZWdfYWRkciwgdWludDMyX3QgKmRhdGEpOworCWludCAoKmhkbWlfYXVk aW9fd3JpdGVfcmVnaXN0ZXIpKHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MzJfdCBkYXRhKTsKKwlp bnQgKCpoZG1pX2F1ZGlvX3JlYWRfbW9kaWZ5KSh1aW50MzJfdCByZWdfYWRkciwgdWludDMyX3Qg ZGF0YSwKKwkJCXVpbnQzMl90IG1hc2spOworfTsKKworc3RydWN0IGhkbWlfYXVkaW9fcXVlcnlf c2V0X29wcyB7CisJaW50ICgqaGRtaV9hdWRpb19nZXRfY2FwcykoZW51bSBoYWRfY2Fwc19saXN0 IHF1ZXJ5X2VsZW1lbnQsCisJCQl2b2lkICpjYXBhYmlsdGllcyk7CisJaW50ICgqaGRtaV9hdWRp b19zZXRfY2FwcykoZW51bSBoYWRfY2Fwc19saXN0IHNldF9lbGVtZW50LAorCQkJdm9pZCAqY2Fw YWJpbHRpZXMpOworfTsKKworc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQgeworCWludCB0eXBlOwor fTsKKworc3RydWN0IHNuZF9pbnRlbF9oYWRfaW50ZXJmYWNlIHsKKwljb25zdCBjaGFyICpuYW1l OworCWludCAoKnF1ZXJ5KSh2b2lkICpoYWRfZGF0YSwgc3RydWN0IGhkbWlfYXVkaW9fZXZlbnQg ZXZlbnQpOworCWludCAoKnN1c3BlbmQpKHZvaWQgKmhhZF9kYXRhLCBzdHJ1Y3QgaGRtaV9hdWRp b19ldmVudCBldmVudCk7CisJaW50ICgqcmVzdW1lKSh2b2lkICpoYWRfZGF0YSk7Cit9OworCiti b29sIG1pZF9oZG1pX2F1ZGlvX2lzX2J1c3kodm9pZCAqZGV2KTsKK2Jvb2wgbWlkX2hkbWlfYXVk aW9fc3VzcGVuZCh2b2lkICpkZXYpOwordm9pZCBtaWRfaGRtaV9hdWRpb19yZXN1bWUodm9pZCAq ZGV2KTsKK3ZvaWQgbWlkX2hkbWlfYXVkaW9fc2lnbmFsX2V2ZW50KGVudW0gaGFkX2V2ZW50X3R5 cGUgZXZlbnQpOworaW50IG1pZF9oZG1pX2F1ZGlvX3NldHVwKAorCWhhZF9ldmVudF9jYWxsX2Jh Y2sgYXVkaW9fY2FsbGJhY2tzLAorCXN0cnVjdCBoZG1pX2F1ZGlvX3JlZ2lzdGVyc19vcHMgKnJl Z19vcHMsCisJc3RydWN0IGhkbWlfYXVkaW9fcXVlcnlfc2V0X29wcyAqcXVlcnlfb3BzKTsKK2lu dCBtaWRfaGRtaV9hdWRpb19yZWdpc3RlcigKKwlzdHJ1Y3Qgc25kX2ludGVsX2hhZF9pbnRlcmZh Y2UgKmRyaXZlciwKKwl2b2lkICpoYWRfZGF0YSk7CisKKyNlbmRpZgotLSAKMi45LjMKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=