From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fe2.vsnl.net (fe2.vsnl.net [203.200.235.172]) by ozlabs.org (Postfix) with ESMTP id BFB50DDE11 for ; Fri, 20 Apr 2007 17:24:44 +1000 (EST) Received: from vsnl.net ([172.16.28.40]) by fe2.internal.vsnl.net (vsnl mail server fe2) with ESMTP id <0JGS007UYCKJU250@fe2.internal.vsnl.net> for linuxppc-dev@ozlabs.org; Fri, 20 Apr 2007 12:54:42 +0530 (IST) Date: Fri, 20 Apr 2007 12:24:19 +0500 From: rsmadhvesh@vsnl.net Subject: [RFC][PATCH]Kprobes for PPC32(BOOKE) To: galak@kernel.crashing.org Message-id: MIME-version: 1.0 Content-type: multipart/mixed; boundary="Boundary_(ID_Ak4d+0WbLKxvVsoRyqDheA)" Cc: linuxppc-dev@ozlabs.org, madhvesh.s@ap.sony.com List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --Boundary_(ID_Ak4d+0WbLKxvVsoRyqDheA) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Content-disposition: inline Hi Kumar, This is regarding the kprobes patches for PPC32 BOOKE version. The attached patches contain the implementation for this version. I saw your earlier postings and commits to 2.6.21 regarding kprobes for PPC32. Since the single step mechanism in BookE is quite different, I thought i can share some of the issues faced in this implementation and get your review feedback for those patches. Last month, i had posted the patches for PPC32(BookE) version in the below thread. http://ozlabs.org/pipermail/linuxppc-dev/2007-March/033058.html Kernel Version:- 2.6.16.39 Target: Ebony (ppc440_gp processor) I had mentioned some issues regarding the preempt count in the above thread with some issues. In today released patches, these issues are fixed with some additional patches to head_booke.h and traps.c. With these changes, there are no issues noticed and kprobes behavior is same as other architetcures. Regarding the below issue mentioned in my earlier mail... > 2. It was noticed that having preempt_disable() at the beginning of > kprobe_handler, generates OOPS and kprobes doesnot work. But this is > against the original kprobes design implemented in other > already working > archs (that is, preemption is disabled for the entire > duration of pre and post > handlers execution). The basic problem noticed is, change in > the preempt > count after generating single step exception. Even though the > preemption > is disabled at the beginning of kprobe_handler(), after generating the > single step exception, preempt count gets printed as zero in > DebugException() > handler of traps.c. This causes the problem and system > generates OOPS!! > The core issue was the way debug exception was getting handled in PPC32 BookE versions. The debug exception gets executed using exception stack which doesnot contain the original stack preempt count status. This exact sequence can be explained as below After executing pre handler, the DEBUG_EXCEPTION gets called because of setting DE bit in MSR and IC, IDM bits of DBCR0. As part of DEBUG_EXCEPTION in head_booke.h, the exception stack is prepared by storing current registers and original sp. But the current preempt count value is not set in exception stack. Because of this, preempt_count=ZERO. This will enable preemption and at any point, it can be rescheduled because of higher priority interrupts. Also as part of post_kprobe_handler(), preempt_enable_no_resched() gets called, which will try to decrement the preempt_count value by 1. But since exception stack contains the preempt_count as ZERO, this operation will make its value as NEGATIVE and that results in OOPS. Execution stops after this point and system reboots Two solutions are incorporated to solve this fix 1. The head_booke.h is modified before setting the exception stack. This patch takes care of copying the original stack preempt_count value to exception stack before Stack Pointer gets changed 2. Also as part of traps.c within DebugException(), the original stack thread_info contents are copied to exception stack since other contents of current thread_info is also required. With the above 2 fixes, the system is stable and the kprobes behavior is same as other architectures. I am porting these patches to 2.6.21-rc7 and will resubmit these patches after testing. Originally i thought of combining the 2nd patch contents as part of 1st patch in the form of assembly, but i could not do it because of my limited PPC assembly knowledge. If you have any comments regarding the above patches or better solution, please let me know and i shall try it in 2.6.21.rc7.. Regards Madhvesh --Boundary_(ID_Ak4d+0WbLKxvVsoRyqDheA) Content-type: application/octet-stream; NAME=kprobes-ppc-2.6.16.39-1.patch Content-transfer-encoding: base64 Content-disposition: attachment; filename=kprobes-ppc-2.6.16.39-1.patch a3Byb2Jlcy1wcGMtMS5wYXRjaDoKClRoaXMgcGF0Y2ggaXMgdG8gYWRkIEtwcm9iZXMgc3Vw cG9ydCBmb3IgQk9PS0UgdmVyc2lvbiBvZiBQUEMzMgoKU2lnbmVkLW9mZi1ieTogTWFkaHZl c2ggU3VsaWJoYXZpIDxtYWRodmVzaC5zQGFwLnNvbnkuY29tPgpTaWduZWQtb2ZmLWJ5OiBM dWJuYSBCYWRrYXIgPGx1Ym5hQGFwLnNvbnkuY29tPgoKSW5kZXg6IGxpbnV4LTIuNi4xNi4z OS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIu Ni4xNi4zOS5vcmlnL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUJMjAwNy0wNC0xMSAxMToy ODo0Ny4wMDAwMDAwMDAgKzA1MzAKKysrIGxpbnV4LTIuNi4xNi4zOS9hcmNoL3Bvd2VycGMv bGliL01ha2VmaWxlCTIwMDctMDQtMTEgMTE6Mjg6NTAuMzg2MjY5MTEyICswNTMwCkBAIC0x Myw4ICsxMyw4IEBACiAJCQkgICBzdHJjYXNlLm8KIG9iai0kKENPTkZJR19QUENfSVNFUklF UykgKz0gZTJhLm8KIG9iai0kKENPTkZJR19YTU9OKQkrPSBzc3RlcC5vCitvYmotJChDT05G SUdfS1BST0JFUykJKz0gc3N0ZXAubwogCiBpZmVxICgkKENPTkZJR19QUEM2NCkseSkKIG9i ai0kKENPTkZJR19TTVApCSs9IGxvY2tzLm8KLW9iai0kKENPTkZJR19ERUJVR19LRVJORUwp ICs9IHNzdGVwLm8KIGVuZGlmCkluZGV4OiBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMvS2Nv bmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9L Y29uZmlnCTIwMDctMDQtMTEgMTE6Mjg6NDcuMDAwMDAwMDAwICswNTMwCisrKyBsaW51eC0y LjYuMTYuMzkvYXJjaC9wcGMvS2NvbmZpZwkyMDA3LTA0LTExIDExOjMzOjEwLjY2NjcwMDQ3 MiArMDUzMApAQCAtMTM5NywzICsxMzk3LDE3IEBACiBzb3VyY2UgInNlY3VyaXR5L0tjb25m aWciCiAKIHNvdXJjZSAiY3J5cHRvL0tjb25maWciCisKK21lbnUgIkluc3RydW1lbnRhdGlv biBTdXBwb3J0IgorCitjb25maWcgS1BST0JFUworCWJvb2wgIktwcm9iZXMiCisJZGVwZW5k cyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJh cCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZAorCSAgZXhlY3V0ZSBhIGNhbGxi YWNrIGZ1bmN0aW9uLiAgcmVnaXN0ZXJfa3Byb2JlKCkgZXN0YWJsaXNoZXMKKwkgIGEgcHJv YmVwb2ludCBhbmQgc3BlY2lmaWVzIHRoZSBjYWxsYmFjay4gIEtwcm9iZXMgaXMgdXNlZnVs CisJICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRp b24gYW5kIHRlc3RpbmcuCisJICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KKworZW5kbWVudQpJ bmRleDogbGludXgtMi42LjE2LjM5L2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBsaW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9rZXJuZWwvTWFrZWZp bGUJMjAwNy0wNC0xMSAxMToyODo0Ny4wMDAwMDAwMDAgKzA1MzAKKysrIGxpbnV4LTIuNi4x Ni4zOS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUJMjAwNy0wNC0xMSAxMToyODo1MC4zODky Njg2NTYgKzA1MzAKQEAgLTIxLDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19QQ0kpCQkrPSBw Y2kubwogb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSByaW8ubwogb2JqLSQoQ09ORklHX0tH REIpCQkrPSBwcGMtc3R1Yi5vCitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMu bwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNtcC10YnN5bmMubwogb2JqLSQoQ09O RklHX1RBVSkJCSs9IHRlbXAubwogaWZuZGVmIENPTkZJR19FMjAwCkluZGV4OiBsaW51eC0y LjYuMTYuMzkvYXJjaC9wcGMva2VybmVsL2twcm9iZXMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAv ZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4 LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwva3Byb2Jlcy5jCTIwMDctMDQtMTEgMTE6NDE6 NTMuMzM1MjQyNzc2ICswNTMwCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogIEtlcm5lbCBQ cm9iZXMgKEtQcm9iZXMpCisgKiAgYXJjaC9wcGMva2VybmVsL2twcm9iZXMuYworICoKKyAq ICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4K KyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3NzdGVwLmg+CisKK0RF RklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmUgKiwgY3VycmVudF9rcHJvYmUpID0gTlVMTDsK K0RFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmVfY3RsYmxrLCBrcHJvYmVfY3RsYmxrKTsK KworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAp Cit7CisJaW50IHJldCA9IDA7CisJa3Byb2JlX29wY29kZV90IGluc24gPSAqcC0+YWRkcjsK KworCWlmICgodW5zaWduZWQgbG9uZylwLT5hZGRyICYgMHgwMykgeworCQlwcmludGsoIkF0 dGVtcHQgdG8gcmVnaXN0ZXIga3Byb2JlIGF0IGFuIHVuYWxpZ25lZCBhZGRyZXNzXG4iKTsK KwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKElTX01UTVNSRChpbnNuKSB8fCBJU19S RklEKGluc24pIHx8IElTX1JGSShpbnNuKSkgeworCQlwcmludGsoIkNhbm5vdCByZWdpc3Rl ciBhIGtwcm9iZSBvbiByZmkvcmZpZCBvciBtdG1zcltkXVxuIik7CisJCXJldCA9IC1FSU5W QUw7CisJfQorCisJLyogaW5zbiBtdXN0IGJlIG9uIGEgc3BlY2lhbCBleGVjdXRhYmxlIHBh Z2Ugb24gcHBjMzIgKi8KKwlpZiAoIXJldCkgeworCQlwLT5haW5zbi5pbnNuID0gZ2V0X2lu c25fc2xvdCgpOworCQlpZiAoIXAtPmFpbnNuLmluc24pCisJCQlyZXQgPSAtRU5PTUVNOwor CX0KKworCWlmICghcmV0KSB7CisJCW1lbWNweShwLT5haW5zbi5pbnNuLCBwLT5hZGRyLCBN QVhfSU5TTl9TSVpFICogc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworCQlwLT5vcGNvZGUg PSAqcC0+YWRkcjsKKwkJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSBwLT5h aW5zbi5pbnNuLAorCQkJKHVuc2lnbmVkIGxvbmcpIHAtPmFpbnNuLmluc24gKyBzaXplb2Yo a3Byb2JlX29wY29kZV90KSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2tw cm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJKnAtPmFkZHIg PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWdu ZWQgbG9uZykgcC0+YWRkciwKKwkJCSAgICh1bnNpZ25lZCBsb25nKSBwLT5hZGRyICsgc2l6 ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX2Rpc2Fy bV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwkqcC0+YWRkciA9IHAtPm9wY29kZTsK KwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpIHAtPmFkZHIsCisJCQkgICAo dW5zaWduZWQgbG9uZykgcC0+YWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKK30K Kwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAp Cit7CisJZG93bigma3Byb2JlX211dGV4KTsKKwlmcmVlX2luc25fc2xvdChwLT5haW5zbi5p bnNuKTsKKwl1cCgma3Byb2JlX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBy ZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVn cykKK3sKKwlyZWdzLT5tc3IgJj0gfihNU1JfRUUpOyAvKiBUdXJuIG9mZiAnRXh0ZXJuZWwg SW50ZXJydXB0JyBiaXRzICovCisJcmVncy0+bXNyICY9IH4oTVNSX0NFKTsgLyogVHVybiBv ZmYgJ0NyaXRpY2FsIEludGVycnVwdCcgYml0cyAqLworCXJlZ3MtPm1zciB8PSBNU1JfREU7 CisJbXRzcHIoU1BSTl9EQkNSMCwgbWZzcHIoU1BSTl9EQkNSMCkgfCBEQkNSMF9JQyB8IERC Q1IwX0lETSk7CisJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbjsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHNhdmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBr cHJvYmVfY3RsYmxrICprY2IpCit7CisJa2NiLT5wcmV2X2twcm9iZS5rcCA9IGtwcm9iZV9y dW5uaW5nKCk7CisJa2NiLT5wcmV2X2twcm9iZS5zdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0 dXM7CisJa2NiLT5wcmV2X2twcm9iZS5zYXZlZF9tc3IgPSBrY2ItPmtwcm9iZV9zYXZlZF9t c3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShz dHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9r cHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBr Y2ItPnByZXZfa3Byb2JlLnN0YXR1czsKKwlrY2ItPmtwcm9iZV9zYXZlZF9tc3IgPSBrY2It PnByZXZfa3Byb2JlLnNhdmVkX21zcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9j dXJyZW50X2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywK KwkJCQlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3Vy cmVudF9rcHJvYmUpID0gcDsKKwlyZWdzLT5tc3IgfD0gKE1TUl9FRSk7IC8qIFR1cm4gb24g J0V4dGVybmFsIEludGVycnVwdCcgYml0cyAqLworCXJlZ3MtPm1zciB8PSAoTVNSX0NFKTsg LyogVHVybiBvbiAnQ3JpdGljYWwgSW50ZXJydXB0JyBiaXRzICovCisJa2NiLT5rcHJvYmVf c2F2ZWRfbXNyID0gcmVncy0+bXNyOworfQorCisvKiBDYWxsZWQgd2l0aCBrcmV0cHJvYmVf bG9jayBoZWxkICovCit2b2lkIF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3JldHByb2JlKHN0 cnVjdCBrcmV0cHJvYmUgKnJwLAorCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQor eworfQorCitzdGF0aWMgaW5saW5lIGludCBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVn cyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlICpwOworCWludCByZXQgPSAwOworCXVuc2ln bmVkIGludCAqYWRkciA9ICh1bnNpZ25lZCBpbnQgKilyZWdzLT5uaXA7CisJc3RydWN0IGtw cm9iZV9jdGxibGsgKmtjYjsKKworCisJLyoKKwkgKiBXZSBkb24ndCB3YW50IHRvIGJlIHBy ZWVtcHRlZCBmb3IgdGhlIGVudGlyZQorCSAqIGR1cmF0aW9uIG9mIGtwcm9iZSBwcm9jZXNz aW5nCisJICovCisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRfa3Byb2JlX2N0 bGJsaygpOworCisJLyogQ2hlY2sgd2UncmUgbm90IGFjdHVhbGx5IHJlY3Vyc2luZyAqLwor CWlmIChrcHJvYmVfcnVubmluZygpKSB7CisJCXAgPSBnZXRfa3Byb2JlKGFkZHIpOworCQlp ZiAocCkgeworCQkJa3Byb2JlX29wY29kZV90IGluc24gPSAqcC0+YWluc24uaW5zbjsKKwkJ CWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgorCQkJCQlpc190 cmFwKGluc24pKSB7CisJCQkJcmVncy0+bXNyICY9IH5NU1JfREU7IC8qIFR1cm4gb2ZmICd0 cmFjZScgYml0cyAqLworCQkJCXJlZ3MtPm1zciB8PSBrY2ItPmtwcm9iZV9zYXZlZF9tc3I7 CisJCQkJZ290byBub19rcHJvYmU7CisJCQl9CisJCQkvKiBXZSBoYXZlIHJlZW50ZXJlZCB0 aGUga3Byb2JlX2hhbmRsZXIoKSwgc2luY2UKKwkJCSAqIGFub3RoZXIgcHJvYmUgd2FzIGhp dCB3aGlsZSB3aXRoaW4gdGhlIGhhbmRsZXIuCisJCQkgKiBXZSBoZXJlIHNhdmUgdGhlIG9y aWdpbmFsIGtwcm9iZXMgdmFyaWFibGVzIGFuZAorCQkJICoganVzdCBzaW5nbGUgc3RlcCBv biB0aGUgaW5zdHJ1Y3Rpb24gb2YgdGhlIG5ldyBwcm9iZQorCQkJICogd2l0aG91dCBjYWxs aW5nIGFueSB1c2VyIGhhbmRsZXJzLgorCQkJICovCisJCQlzYXZlX3ByZXZpb3VzX2twcm9i ZShrY2IpOworCQkJc2V0X2N1cnJlbnRfa3Byb2JlKHAsIHJlZ3MsIGtjYik7CisJCQlrY2It Pmtwcm9iZV9zYXZlZF9tc3IgPSByZWdzLT5tc3I7CisJCQlrcHJvYmVzX2luY19ubWlzc2Vk X2NvdW50KHApOworCQkJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOworCQkJa2NiLT5r cHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNl IHsKKwkJCWlmICgqYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CisJCQkJLyog SWYgdHJhcCB2YXJpYW50LCB0aGVuIGl0IGJlbG9uZ3Mgbm90IHRvIHVzICovCisJCQkJa3By b2JlX29wY29kZV90IGN1cl9pbnNuID0gKmFkZHI7CisJCQkJaWYgKGlzX3RyYXAoY3VyX2lu c24pKQorCQkgICAgICAgCQkJZ290byBub19rcHJvYmU7CisJCQkJLyogVGhlIGJyZWFrcG9p bnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgYnkKKwkJCQkgKiBhbm90aGVyIGNwdSByaWdo dCBhZnRlciB3ZSBoaXQsIG5vIGZ1cnRoZXIKKwkJCQkgKiBoYW5kbGluZyBvZiB0aGlzIGlu dGVycnVwdCBpcyBhcHByb3ByaWF0ZQorCQkJCSAqLworCQkJCXJldCA9IDE7CisJCQkJZ290 byBub19rcHJvYmU7CisJCQl9CisJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9i ZSk7CisJCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJl Z3MpKSB7CisJCQkJZ290byBzc19wcm9iZTsKKwkJCX0KKwkJfQorCQlnb3RvIG5vX2twcm9i ZTsKKwl9CisKKwlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwlpZiAoIXApIHsKKwkJaWYgKCph ZGRyICE9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCS8qCisJCQkgKiBQb3dlclBD IGhhcyBtdWx0aXBsZSB2YXJpYW50cyBvZiB0aGUgInRyYXAiCisJCQkgKiBpbnN0cnVjdGlv bi4gSWYgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaXMgYQorCQkJICogdHJhcCB2YXJpYW50 LCBpdCBjb3VsZCBiZWxvbmcgdG8gc29tZW9uZSBlbHNlCisJCQkgKi8KKwkJCWtwcm9iZV9v cGNvZGVfdCBjdXJfaW5zbiA9ICphZGRyOworCQkJaWYgKGlzX3RyYXAoY3VyX2luc24pKQor CQkgICAgICAgCQlnb3RvIG5vX2twcm9iZTsKKwkJCS8qCisJCQkgKiBUaGUgYnJlYWtwb2lu dCBpbnN0cnVjdGlvbiB3YXMgcmVtb3ZlZCByaWdodAorCQkJICogYWZ0ZXIgd2UgaGl0IGl0 LiAgQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHByb2JlcG9pbnQg b3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJlc3MuICBJbiBl aXRoZXIgY2FzZSwgbm8gZnVydGhlcgorCQkJICogaGFuZGxpbmcgb2YgdGhpcyBpbnRlcnJ1 cHQgaXMgYXBwcm9wcmlhdGUuCisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0KKwkJLyogTm90 IG9uZSBvZiBvdXJzOiBsZXQga2VybmVsIGhhbmRsZSBpdCAqLworCQlnb3RvIG5vX2twcm9i ZTsKKwl9CisKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX0FDVElWRTsKKwlz ZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwlpZiAocC0+cHJlX2hhbmRsZXIg JiYgcC0+cHJlX2hhbmRsZXIocCwgcmVncykpCisJCS8qIGhhbmRsZXIgaGFzIGFscmVhZHkg c2V0IHRoaW5ncyB1cCwgc28gc2tpcCBzcyBzZXR1cCAqLworCQlyZXR1cm4gMTsKKworc3Nf cHJvYmU6CisJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOworCWtjYi0+a3Byb2JlX3N0 YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJcmV0dXJuIDE7CisKK25vX2twcm9iZToKKwlwcmVl bXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEZ1 bmN0aW9uIHJldHVybiBwcm9iZSB0cmFtcG9saW5lOgorICogCS0gaW5pdF9rcHJvYmVzKCkg ZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50IGhlcmUKKyAqIAktIFdoZW4gdGhlIHByb2JlZCBm dW5jdGlvbiByZXR1cm5zLCB0aGlzIHByb2JlCisgKiAJCWNhdXNlcyB0aGUgaGFuZGxlcnMg dG8gZmlyZQorICovCit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lX2hvbGRlcih2b2lkKQor eworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIHByb2JlIGF0IGtyZXRwcm9iZSB0cmFt cG9saW5lIGlzIGhpdAorICovCitpbnQgX19rcHJvYmVzIHRyYW1wb2xpbmVfcHJvYmVfaGFu ZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyAgICAg ICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDYWxsZWQgYWZ0ZXIgc2luZ2xlLXN0ZXBwaW5n LiAgcC0+YWRkciBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKKyAqIGluc3RydWN0aW9uIHdob3Nl IGZpcnN0IGJ5dGUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlICJicmVha3BvaW50IgorICog aW5zdHJ1Y3Rpb24uICBUbyBhdm9pZCB0aGUgU01QIHByb2JsZW1zIHRoYXQgY2FuIG9jY3Vy IHdoZW4gd2UKKyAqIHRlbXBvcmFyaWx5IHB1dCBiYWNrIHRoZSBvcmlnaW5hbCBvcGNvZGUg dG8gc2luZ2xlLXN0ZXAsIHdlCisgKiBzaW5nbGUtc3RlcHBlZCBhIGNvcHkgb2YgdGhlIGlu c3RydWN0aW9uLiAgVGhlIGFkZHJlc3Mgb2YgdGhpcworICogY29weSBpcyBwLT5haW5zbi5p bnNuLgorICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcmVzdW1lX2V4ZWN1dGlvbihzdHJ1 Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgcmV0OworCXVu c2lnbmVkIGludCBpbnNuID0gKnAtPmFpbnNuLmluc247CisKKwlyZWdzLT5uaXAgPSAodW5z aWduZWQgbG9uZylwLT5hZGRyOworCXJldCA9IGVtdWxhdGVfc3RlcChyZWdzLCBpbnNuKTsK KwlpZiAocmV0ID09IDApCisJCXJlZ3MtPm5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHIg KyA0OworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3N0X2twcm9iZV9oYW5kbGVyKHN0cnVj dCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5u aW5nKCk7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxr KCk7CisKKwlpZiAoIWN1cikKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGtjYi0+a3Byb2JlX3N0 YXR1cyAhPSBLUFJPQkVfUkVFTlRFUikgJiYgY3VyLT5wb3N0X2hhbmRsZXIpIHsKKwkJa2Ni LT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9TU0RPTkU7CisJCWN1ci0+cG9zdF9oYW5k bGVyKGN1ciwgcmVncywgMCk7CisJfQorCisJcmVzdW1lX2V4ZWN1dGlvbihjdXIsIHJlZ3Mp OworCXJlZ3MtPm1zciB8PSBrY2ItPmtwcm9iZV9zYXZlZF9tc3I7CisKKwkvKlJlc3RvcmUg YmFjayB0aGUgb3JpZ2luYWwgc2F2ZWQga3Byb2JlcyB2YXJpYWJsZXMgYW5kIGNvbnRpbnVl LiAqLworCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX1JFRU5URVIpIHsKKwkJ cmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZ290byBvdXQ7CisJfQorCXJlc2V0 X2N1cnJlbnRfa3Byb2JlKCk7CitvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgp OworCisJLyoKKwkgKiBpZiBzb21lYm9keSBlbHNlIGlzIHNpbmdsZXN0ZXBwaW5nIGFjcm9z cyBhIHByb2JlIHBvaW50LCBtc3IKKwkgKiB3aWxsIGhhdmUgREUgc2V0LCBpbiB3aGljaCBj YXNlLCBjb250aW51ZSB0aGUgcmVtYWluaW5nIHByb2Nlc3NpbmcKKwkgKiBvZiBkb19kZWJ1 ZywgYXMgaWYgdGhpcyBpcyBub3QgYSBwcm9iZSBoaXQuCisJICovCisJaWYgKHJlZ3MtPm1z ciAmIE1TUl9ERSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlu bGluZSBpbnQga3Byb2JlX2ZhdWx0X2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGlu dCB0cmFwbnIpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsK KwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKwor CWlmIChjdXItPmZhdWx0X2hhbmRsZXIgJiYgY3VyLT5mYXVsdF9oYW5kbGVyKGN1ciwgcmVn cywgdHJhcG5yKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzICYg S1BST0JFX0hJVF9TUykgeworCQlyZXN1bWVfZXhlY3V0aW9uKGN1ciwgcmVncyk7CisJCXJl Z3MtPm1zciAmPSB+TVNSX0RFOyAvKiBUdXJuIG9mZiAndHJhY2UnIGJpdHMgKi8KKwkJcmVn cy0+bXNyIHw9IGtjYi0+a3Byb2JlX3NhdmVkX21zcjsKKworCQlyZXNldF9jdXJyZW50X2tw cm9iZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJfQorCisJcmV0dXJu IDA7Cit9CisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgdG8gZm9yIGhhbmRsaW5nIGV4Y2Vw dGlvbnMuCisgKi8KK2ludCBfX2twcm9iZXMga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0 cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2 YWwsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRpZV9hcmdzICphcmdzID0gKHN0cnVjdCBk aWVfYXJncyAqKWRhdGE7CisJaW50IHJldCA9IE5PVElGWV9ET05FOworCisJc3dpdGNoICh2 YWwpIHsKKwljYXNlIERJRV9CUFQ6CisJCWlmIChrcHJvYmVfaGFuZGxlcihhcmdzLT5yZWdz KSkKKwkJCXJldCA9IE5PVElGWV9TVE9QOworCQlicmVhazsKKwljYXNlIERJRV9TU1RFUDoK KwkJaWYgKHBvc3Rfa3Byb2JlX2hhbmRsZXIoYXJncy0+cmVncykpCisJCQlyZXQgPSBOT1RJ RllfU1RPUDsKKwkJYnJlYWs7CisJY2FzZSBESUVfUEFHRV9GQVVMVDoKKwkJLyoga3Byb2Jl X3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KKwkJcHJlZW1wdF9kaXNh YmxlKCk7CisJCWlmIChrcHJvYmVfcnVubmluZygpICYmCisJCSAgICBrcHJvYmVfZmF1bHRf aGFuZGxlcihhcmdzLT5yZWdzLCBhcmdzLT50cmFwbnIpKQorCQkJcmV0ID0gTk9USUZZX1NU T1A7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCWJyZWFrOworCWNhc2UgRElFX0lBQlJfTUFU Q0g6CisJCXByaW50aygiXG5JQUJSIE1hdGNoIEZvdW5kXG4iKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2twcm9iZXMg c2V0am1wX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpy ZWdzKQoreworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJu KHZvaWQpCit7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQp Cit7Cit9OworCitpbnQgX19rcHJvYmVzIGxvbmdqbXBfYnJlYWtfaGFuZGxlcihzdHJ1Y3Qg a3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gMTsKK30KKwor aW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXJldHVybiAwOworfQpJ bmRleDogbGludXgtMi42LjE2LjM5L2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gbGludXgtMi42LjE2LjM5Lm9yaWcvYXJjaC9wcGMva2VybmVsL21pc2MuUwky MDA3LTA0LTExIDExOjI4OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbGludXgtMi42LjE2LjM5 L2FyY2gvcHBjL2tlcm5lbC9taXNjLlMJMjAwNy0wNC0xMSAxMToyODo1MC4zOTIyNjgyMDAg KzA1MzAKQEAgLTQyNyw3ICs0MjcsNyBAQAogICoKICAqIF9fZmx1c2hfaWNhY2hlX3Jhbmdl KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKICAqLwotX0dMT0JB TChfX2ZsdXNoX2ljYWNoZV9yYW5nZSkKK19LUFJPQkUoX19mbHVzaF9pY2FjaGVfcmFuZ2Up CiBCRUdJTl9GVFJfU0VDVElPTgogCWJscgkJCQkvKiBmb3IgNjAxLCBkbyBub3RoaW5nICov CiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSkKSW5kZXg6 IGxpbnV4LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwkyMDA3 LTA0LTExIDExOjI4OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2Fy Y2gvcHBjL2tlcm5lbC90cmFwcy5jCTIwMDctMDQtMTEgMTE6NDI6NDIuMTI5ODI0ODcyICsw NTMwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CisjaW5jbHVk ZSA8bGludXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNs dWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9y ZWcuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS9wbWMuaD4KKyNp bmNsdWRlIDxhc20va2RlYnVnLmg+CiAKICNpZmRlZiBDT05GSUdfWE1PTgogZXh0ZXJuIGlu dCB4bW9uX2JwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC03MCw2ICs3MiwyMyBAQAog I2VuZGlmCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LUFJPQkVTCitzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKnBwY19kaWVfY2hhaW47CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9u b3RpZmllcl9sb2NrKTsKKworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKm5iKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGllX25vdGlmaWVyX2xvY2ssIGZsYWdzKTsK KwllcnIgPSBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcHBjX2RpZV9jaGFpbiwgbmIpOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7CisJ cmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKIC8qCiAgKiBUcmFwICYgRXhjZXB0aW9uIHN1 cHBvcnQKICAqLwpAQCAtNDAyLDYgKzQyMSwxMSBAQAogCiB2b2lkIGluc3RydWN0aW9uX2Jy ZWFrcG9pbnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworI2lmZGVmIENP TkZJR19LUFJPQkVTCisJaWYgKG5vdGlmeV9kaWUoRElFX0lBQlJfTUFUQ0gsICJpYWJyX21h dGNoIiwgcmVncywgNSwKKwkJICAgICAgIDUsIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQor CQlyZXR1cm47CisjZW5kaWYKIAlpZiAoZGVidWdnZXJfaWFicl9tYXRjaChyZWdzKSkKIAkJ cmV0dXJuOwogCV9leGNlcHRpb24oU0lHVFJBUCwgcmVncywgVFJBUF9CUktQVCwgMCk7CkBA IC02MjIsNyArNjQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBwcm9ncmFtX2NoZWNr X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgX19rcHJvYmVzIHByb2dy YW1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVk IGludCByZWFzb24gPSBnZXRfcmVhc29uKHJlZ3MpOwogCWV4dGVybiBpbnQgZG9fbWF0aGVt dShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC02NzEsNiArNjk1LDExIEBACiAJfQogCiAJ aWYgKHJlYXNvbiAmIFJFQVNPTl9UUkFQKSB7CisjaWZkZWYgQ09ORklHX0tQUk9CRVMKKwkJ aWYgKG5vdGlmeV9kaWUoRElFX0JQVCwgImJyZWFrcG9pbnQiLCByZWdzLCA1LCA1LCBTSUdU UkFQKQorCQkJICAgICAgID09IE5PVElGWV9TVE9QKQorCQkJcmV0dXJuOworI2VuZGlmCiAJ CS8qIHRyYXAgZXhjZXB0aW9uICovCiAJCWlmIChkZWJ1Z2dlcl9icHQocmVncykpCiAJCQly ZXR1cm47CkBAIC03OTEsOCArODIwLDQzIEBACiAKIHZvaWQgRGVidWdFeGNlcHRpb24oc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZGVidWdfc3RhdHVzKQogeworCXN0 cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkX2luZm8sICpleGNlcHRpb25fdGhyZWFkX2luZm87 CisKIAlpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQykgewkvKiBpbnN0cnVjdGlvbiBjb21w bGV0aW9uICovCiAJCXJlZ3MtPm1zciAmPSB+TVNSX0RFOworCisjaWZkZWYgQ09ORklHX0tQ Uk9CRVMKKwkJLyogRGlzYWJsZSBpbnN0cnVjdGlvbiBjb21wbGV0aW9uICovCisJCW10c3By KFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApICYgfkRCQ1IwX0lDKTsKKwkJLyogQ2xl YXIgdGhlIGluc3RydWN0aW9uIGNvbXBsZXRpb24gZXZlbnQgKi8KKwkJbXRzcHIoU1BSTl9E QlNSLCBEQlNSX0lDKTsKKwkJLyoKKwkJICogT24gQm9vayBFIGFuZCBwZXJoYXBzIG90aGVy IHByb2Nlc3Nzb3JzLCBzaW5nbGVzdGVwIGlzCisJCSAqIGhhbmRsZWQgb24gdGhlIGNyaXRp Y2FsIGV4Y2VwdGlvbiBzdGFjay4gIFRoaXMgY2F1c2VzCisJCSAqIGN1cnJlbnRfdGhyZWFk X2luZm8oKSB0byBmYWlsLCBzaW5jZSBpdCBsb2NhdGVzIHRoZQorCQkgKiB0aHJlYWRfaW5m byBieSBtYXNraW5nIG9mZiB0aGUgbG93IGJpdHMgb2YgdGhlIGN1cnJlbnQKKwkJICogc3Rh Y2sgcG9pbnRlci4gIFdlIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUgYnkgY29weWluZworCQkg KiB0aGUgdGhyZWFkX2luZm8gZnJvbSB0aGUga2VybmVsIHN0YWNrIGJlZm9yZSBjYWxsaW5n CisJCSAqIGtwcm9iZV9wb3N0X2hhbmRsZXIsIGFuZCBjb3B5aW5nIGl0IGJhY2sgYWZ0ZXJ3 YXJkcy4KKwkJICogT24gbW9zdCBwcm9jZXNzb3JzIHRoZSBjb3B5IGlzIGF2b2lkZWQgc2lu Y2UKKwkJICogZXhjZXB0aW9uX3RocmVhZF9pbmZvID09IHRocmVhZF9pbmZvLgorCQkgKi8K KwkJdGhyZWFkX2luZm8gPSAoc3RydWN0IHRocmVhZF9pbmZvICopCisJCSAgICAocmVncy0+ Z3ByWzFdICYgfihUSFJFQURfU0laRSAtIDEpKTsKKwkJZXhjZXB0aW9uX3RocmVhZF9pbmZv ID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCisJCWlmICh0aHJlYWRfaW5mbyAhPSBleGNl cHRpb25fdGhyZWFkX2luZm8pCisJCQltZW1jcHkoZXhjZXB0aW9uX3RocmVhZF9pbmZvLCB0 aHJlYWRfaW5mbywKKwkJCSAgICAgICBzaXplb2YgKnRocmVhZF9pbmZvKTsKKworCQlpZiAo bm90aWZ5X2RpZShESUVfU1NURVAsICJzaW5nbGVfc3RlcCIsIHJlZ3MsIDUsCisJCQkgICAg ICAgNSwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApIHsKKwkJCWlmICh0aHJlYWRfaW5mbyAh PSBleGNlcHRpb25fdGhyZWFkX2luZm8pCisJCQkJbWVtY3B5KHRocmVhZF9pbmZvLCBleGNl cHRpb25fdGhyZWFkX2luZm8sCisJCQkJICAgICAgIHNpemVvZiAqdGhyZWFkX2luZm8pOwor CQkJcmV0dXJuOworCQl9CisjZW5kaWYKIAkJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQkJ Y3VycmVudC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQzsKIAkJfSBlbHNlIHsKSW5kZXg6 IGxpbnV4LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwvdm1saW51eC5sZHMuUwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBsaW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9rZXJuZWwvdm1saW51 eC5sZHMuUwkyMDA3LTA0LTExIDExOjI4OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbGludXgt Mi42LjE2LjM5L2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCTIwMDctMDQtMTEgMTE6 Mjg6NTAuMzk1MjY3NzQ0ICswNTMwCkBAIC0zMyw2ICszMyw3IEBACiAgICAgKigudGV4dCkK ICAgICBTQ0hFRF9URVhUCiAgICAgTE9DS19URVhUCisgICAgS1BST0JFU19URVhUCiAgICAg KiguZml4dXApCiAgICAgKiguZ290MSkKICAgICBfX2dvdDJfc3RhcnQgPSAuOwpJbmRleDog bGludXgtMi42LjE2LjM5L2FyY2gvcHBjL21tL2ZhdWx0LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g bGludXgtMi42LjE2LjM5Lm9yaWcvYXJjaC9wcGMvbW0vZmF1bHQuYwkyMDA3LTA0LTExIDEx OjI4OjQ3LjAwMDAwMDAwMCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2FyY2gvcHBjL21t L2ZhdWx0LmMJMjAwNy0wNC0xMSAxMTozODozNS4yOTgzNDg5NjAgKzA1MzAKQEAgLTI4LDYg KzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51 eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20v cGd0YWJsZS5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4K ICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgor I2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1hNT04pIHx8 IGRlZmluZWQoQ09ORklHX0tHREIpCiBleHRlcm4gdm9pZCAoKmRlYnVnZ2VyKShzdHJ1Y3Qg cHRfcmVncyAqKTsKQEAgLTkyLDcgKzk0LDcgQEAKICAqIHRoZSBlcnJvcl9jb2RlIHBhcmFt ZXRlciBpcyBFU1IgZm9yIGEgZGF0YSBmYXVsdCwgMCBmb3IgYW4gaW5zdHJ1Y3Rpb24KICAq IGZhdWx0LgogICovCi1pbnQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywg dW5zaWduZWQgbG9uZyBhZGRyZXNzLAoraW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHN0 cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCSAgdW5zaWdu ZWQgbG9uZyBlcnJvcl9jb2RlKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsK QEAgLTExNiw2ICsxMTgsMTMgQEAKIAkJaXNfd3JpdGUgPSBlcnJvcl9jb2RlICYgMHgwMjAw MDAwMDsKICNlbmRpZiAvKiBDT05GSUdfNHh4IHx8IENPTkZJR19CT09LRSAqLwogCisjaWZk ZWYgQ09ORklHX0tQUk9CRVMKKwlpZiAobm90aWZ5X2RpZShESUVfUEFHRV9GQVVMVCwgInBh Z2VfZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlLAorCQkgICAgICAgMTEsIFNJR1NFR1YpID09 IE5PVElGWV9TVE9QKSB7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAjaWYgZGVmaW5l ZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfS0dEQikKIAlpZiAoZGVidWdnZXJf ZmF1bHRfaGFuZGxlciAmJiBUUkFQKHJlZ3MpID09IDB4MzAwKSB7CiAJCWRlYnVnZ2VyX2Zh dWx0X2hhbmRsZXIocmVncyk7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20t cG93ZXJwYy9zc3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi4xNi4zOS5vcmln L2luY2x1ZGUvYXNtLXBvd2VycGMvc3N0ZXAuaAkyMDA3LTA0LTExIDExOjI4OjQ3LjAwMDAw MDAwMCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBvd2VycGMvc3N0 ZXAuaAkyMDA3LTA0LTExIDExOjI4OjUwLjM5NzI2NzQ0MCArMDUzMApAQCAtMjEsNiArMjEs NyBAQAogICovCiAjZGVmaW5lIElTX01UTVNSRChpbnN0cikJKCgoaW5zdHIpICYgMHhmYzAw MDdiZSkgPT0gMHg3YzAwMDEyNCkKICNkZWZpbmUgSVNfUkZJRChpbnN0cikJCSgoKGluc3Ry KSAmIDB4ZmMwMDA3ZmUpID09IDB4NGMwMDAwMjQpCisjZGVmaW5lIElTX1JGSShpbnN0cikJ CSgoKGluc3RyKSAmIDB4ZmMwMDA3ZmUpID09IDB4NGMwMDAwNjQpCiAKIC8qIEVtdWxhdGUg aW5zdHJ1Y3Rpb25zIHRoYXQgY2F1c2UgYSB0cmFuc2ZlciBvZiBjb250cm9sLiAqLwogZXh0 ZXJuIGludCBlbXVsYXRlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGlu dCBpbnN0cik7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20tcHBjL2tkZWJ1 Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAw MDAwMDAwMCArMDAwMAorKysgbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBwYy9rZGVi dWcuaAkyMDA3LTA0LTExIDExOjI4OjUwLjM5ODI2NzI4OCArMDUzMApAQCAtMCwwICsxLDYw IEBACisjaWZuZGVmIF9fUFBDX0tERUJVR19ICisjZGVmaW5lIF9fUFBDX0tERUJVR19ICisj aWZkZWYgX19LRVJORUxfXworLyoKKyAqICBLZXJuZWwgUHJvYmVzIChLUHJvYmVzKQorICog IGluY2x1ZGUvYXNtLXBwYy9rZGVidWcuaAorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255 IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitz dHJ1Y3QgZGllX2FyZ3MgeworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWNvbnN0IGNoYXIg KnN0cjsKKwlsb25nIGVycjsKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307CisKKy8q CisgICBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBj YW4gcmFjZSB3aXRoIE5NSXMuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmly c3QgdW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfc2NoZWQgLQorICAgdGhlbiBmcmVl LgorICovCitpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbmIpOworZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqcHBjX2RpZV9jaGFpbjsK KworLyogR3Jvc3NseSBtaXNuYW1lZC4gKi8KK2VudW0gZGllX3ZhbCB7CisJRElFX09PUFMg PSAxLAorCURJRV9JQUJSX01BVENILAorCURJRV9CUFQsCisJRElFX1NTVEVQLAorCURJRV9Q QUdFX0ZBVUxULAorfTsKKworc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRp ZV92YWwgdmFsLGNoYXIgKnN0cixzdHJ1Y3QgcHRfcmVncyAqcmVncyxsb25nIGVycixpbnQg dHJhcCwgaW50IHNpZykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsgLnJlZ3M9cmVn cywgLnN0cj1zdHIsIC5lcnI9ZXJyLCAudHJhcG5yPXRyYXAsLnNpZ25yPXNpZyB9OworCXJl dHVybiBub3RpZmllcl9jYWxsX2NoYWluKCZwcGNfZGllX2NoYWluLCB2YWwsICZhcmdzKTsK K30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX1BQQ19LREVCVUdf SCAqLwpJbmRleDogbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBwYy9rcHJvYmVzLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAw MDAwICswMDAwCisrKyBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20tcHBjL2twcm9iZXMu aAkyMDA3LTA0LTExIDExOjI4OjUwLjM5OTI2NzEzNiArMDUzMApAQCAtMCwwICsxLDcxIEBA CisjaWZuZGVmIF9fUFBDX0tQUk9CRVNfSAorI2RlZmluZSBfX1BQQ19LUFJPQkVTX0gKKyNp ZmRlZiBfX0tFUk5FTF9fCisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKiAg aW5jbHVkZS9hc20tcHBjL2twcm9iZXMuaAorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255 IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu c2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+ CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKKyNkZWZpbmUgIF9fQVJDSF9XQU5UX0tQ Uk9CRVNfSU5TTl9TTE9UCisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IGtwcm9iZTsKKwor dHlwZWRlZiB1bnNpZ25lZCBpbnQga3Byb2JlX29wY29kZV90OworI2RlZmluZSBCUkVBS1BP SU5UX0lOU1RSVUNUSU9OCTB4N2ZlMDAwMDgJLyogdHJhcCAqLworI2RlZmluZSBNQVhfSU5T Tl9TSVpFIDEKKworI2RlZmluZSBJU19UVyhpbnN0cikJCSgoKGluc3RyKSAmIDB4ZmMwMDA3 ZmUpID09IDB4N2MwMDAwMDgpCisjZGVmaW5lIElTX1RXSShpbnN0cikJCSgoKGluc3RyKSAm IDB4ZmMwMDAwMDApID09IDB4MGMwMDAwMDApCisKKyNkZWZpbmUgSlBST0JFX0VOVFJZKHBl bnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKSgoZnVuY19kZXNjcl90ICopcGVudHJ5KQorCisj ZGVmaW5lIGlzX3RyYXAoaW5zdHIpCShJU19UVyhpbnN0cikgfHwgSVNfVFdJKGluc3RyKSkK KworI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKK3ZvaWQga3JldHByb2JlX3Ry YW1wb2xpbmUodm9pZCk7CitleHRlcm4gdm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0 IGtwcm9iZSAqcCk7CisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdp bmFsIGluc3RydWN0aW9uICovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBj b3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90ICppbnNu OworfTsKKworc3RydWN0IHByZXZfa3Byb2JlIHsKKwlzdHJ1Y3Qga3Byb2JlICprcDsKKwl1 bnNpZ25lZCBsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNhdmVkX21zcjsKK307CisK Ky8qIHBlci1jcHUga3Byb2JlIGNvbnRyb2wgYmxvY2sgKi8KK3N0cnVjdCBrcHJvYmVfY3Rs YmxrIHsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBr cHJvYmVfc2F2ZWRfbXNyOworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOwor CXN0cnVjdCBwcmV2X2twcm9iZSBwcmV2X2twcm9iZTsKK307CisKK2V4dGVybiBpbnQga3By b2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJ CQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworI2VuZGlmIC8qIF9fS0VSTkVM X18gKi8KKyNlbmRpZgkvKiBfX1BQQ19LUFJPQkVTX0ggKi8KSW5kZXg6IGxpbnV4LTIuNi4x Ni4zOS9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxp bnV4LTIuNi4xNi4zOS5vcmlnL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgJMjAwNy0w NC0xMSAxMToyODo0Ny4wMDAwMDAwMDAgKzA1MzAKKysrIGxpbnV4LTIuNi4xNi4zOS9hcmNo L3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCTIwMDctMDQtMTEgMTE6MzQ6MzQuMDMxMDI3MTY4 ICswNTMwCkBAIC04NSw2ICs4NSwzNSBAQAogI2VuZGlmCiAKIC8qCisgKiBUaGUgYmVsb3cg bWFjcm8gaXMgc3BlY2lmaWMgdG8ga3Byb2JlcyBzdXBwb3J0IHdoaWNoIGFkZHJlc3NlcyBj b3B5aW5nCisgKiBwcmVlbXB0IGNvdW50IHZhbHVlIGZyb20gY3VycmVudCBzdGFjayB0byBl eGNlcHRpb24gc3RhY2suIFRoaXMgaXMKKyAqIHJlcXVpcmVkIGJlY2F1c2Uga3Byb2JlcyBo YXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IGRpc2FibGluZyBwcmVlbXB0aW9uLgorICogRXZlbiB0 aG91Z2ggaXQgaXMgZGlzYWJsZWQgaW4ga3Byb2JlX2hhbmRsZXIsIHNpbmNlIGV4Y2VwdGlv biBzdGFjaworICogZ2V0cyB1c2VkIGZvciBkZWJ1ZyBleGNlcHRpb24sIHRoaXMgY29weSBp cyB0YWtlbiBjYXJlIGV4cGxpY2l0bHkuCisgKiBPdGhlciBmaWVsZHMgb2YgdGhyZWFkIGlu Zm9ybWF0aW9uIGlzIGNvcGllZCBhcyBwYXJ0IG9mIERlYnVnRXhjZXB0aW9uCisgKiBiZWZv cmUganVtcGluZyB0byBrcHJvYmUgcG9zdCBoYW5kbGVyLgorICovCisjaWZkZWYgQ09ORklH X0tQUk9CRVMKKyNkZWZpbmUgQ09QWV9QUkVFTVBUX1NUQVRVUwkJCQkJCSAgICAgXAorCVNB VkVfNEdQUlMoMywgcjExKTsJCQkJCQkgICAgIFwKKwlTQVZFXzJHUFJTKDcsIHIxMSk7CQkJ CQkJICAgICBcCisJcmx3aW5tICByNixyMSwwLDAsMTg7CQkJCQkJICAgICBcCisJbHd6ICAg ICByNixUSV9QUkVFTVBUKHI2KTsJCQkJCSAgICAgXAorCXJsd2lubSAgcjcscjExLDAsMCwx ODsJCQkJCQkgICAgIFwKKwlzdHcgICAgIHI2LFRJX1BSRUVNUFQocjcpOwkJCQkJICAgICBc CisJbXIgICAgICByMSxyMTE7CQkJCQkJCSAgICAgXAorCXJsd2lubQlyOSxyOSwwLDE0LDEy OwkJLyogY2xlYXIgTVNSX1dFIChuZWNlc3Nhcnk/KQkgICAqL1wKKwlzdHcgICAgIHIwLEdQ UjAocjExKQorI2Vsc2UKKyNkZWZpbmUgQ09QWV9QUkVFTVBUX1NUQVRVUwkJCQkJCSAgICAg XAorCW1yICAgICAgcjEscjExOwkJCQkJCQkgICAgIFwKKwlybHdpbm0JcjkscjksMCwxNCwx MjsJCS8qIGNsZWFyIE1TUl9XRSAobmVjZXNzYXJ5PykJICAgKi9cCisJc3R3ICAgICByMCxH UFIwKHIxMSk7CQkJCQkJICAgICBcCisJU0FWRV80R1BSUygzLCByMTEpOwkJCQkJCSAgICAg XAorCVNBVkVfMkdQUlMoNywgcjExKQorI2VuZGlmCisKKy8qCiAgKiBFeGNlcHRpb24gcHJv bG9nIGZvciBjcml0aWNhbC9tYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMuICBUaGlzIGlzIGEK ICAqIGxpdHRsZSBkaWZmZXJlbnQgZnJvbSB0aGUgbm9ybWFsIGV4Y2VwdGlvbiBwcm9sb2cg YWJvdmUgc2luY2UgYQogICogY3JpdGljYWwvbWFjaGluZSBjaGVjayBleGNlcHRpb24gY2Fu IHBvdGVudGlhbGx5IG9jY3VyIGF0IGFueSBwb2ludApAQCAtMTIxLDExICsxNTAsNyBAQAog CXN0dwlyMSxHUFIxKHIxMSk7CQkJCQkJICAgICBcCiAJbWZzcHIJcjksZXhjX2xldmVsX3Ny cjE7CQkJCQkgICAgIFwKIAlzdHcJcjEsMChyMTEpOwkJCQkJCSAgICAgXAotCW1yCXIxLHIx MTsJCQkJCQkJICAgICBcCi0Jcmx3aW5tCXI5LHI5LDAsMTQsMTI7CQkvKiBjbGVhciBNU1Jf V0UgKG5lY2Vzc2FyeT8pCSAgICovXAotCXN0dwlyMCxHUFIwKHIxMSk7CQkJCQkJICAgICBc Ci0JU0FWRV80R1BSUygzLCByMTEpOwkJCQkJCSAgICAgXAotCVNBVkVfMkdQUlMoNywgcjEx KQorCUNPUFlfUFJFRU1QVF9TVEFUVVMKIAogI2RlZmluZSBDUklUSUNBTF9FWENFUFRJT05f UFJPTE9HIFwKIAkJRVhDX0xFVkVMX0VYQ0VQVElPTl9QUk9MT0coQ1JJVCwgU1BSTl9DU1JS MCwgU1BSTl9DU1JSMSkK --Boundary_(ID_Ak4d+0WbLKxvVsoRyqDheA) Content-type: application/octet-stream; NAME=kprobes-kernel-test-module.patch Content-transfer-encoding: base64 Content-disposition: attachment; filename=kprobes-kernel-test-module.patch a3Byb2Jlcy1rZXJuZWwtdGVzdC1tb2R1bGUucGF0Y2ggOgoKS2VybmVsIFByb2JlcyB0ZXN0 IG1vZHVsZXMKCktwcm9iZXMgaXMgYSBrZXJuZWwgZGVidWdnaW5nIHRlY2huaXF1ZS4gVGhp cyBjYW4gYmUgdGVzdGVkIHVzaW5nIGtlcm5lbAptb2R1bGVzLiBUaGVzZSBrZXJuZWwgbW9k dWxlIHdpbGwgaG9vayB0aGUgdXNlciBkZWZpbmVkIHByZSBoYW5kbGVyLCBwb3N0CmhhbmRs ZXIgYW5kIGZhdWx0IGhhbmRsZXIgdG8gdGhlIHByb2JlZCBwb2ludC4KClNpZ25lZC1vZmYt Ynk6IE1hZGh2ZXNoIFN1bGliaGF2aSA8bWFkaHZlc2guc0BhcC5zb255LmNvbT4KU2lnbmVk LW9mZi1ieTogTHVibmEgQmFka2FyIDxsdWJuYUBhcC5zb255LmNvbT4KCkluZGV4OiBsaW51 eC0yLjYuMTYuMzkvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42LjE2LjM5 Lm9yaWcvTWFrZWZpbGUJMjAwNy0wMy0xMiAxODoyNjo1OS40NzAzNTY3NjAgKzA1MzAKKysr IGxpbnV4LTIuNi4xNi4zOS9NYWtlZmlsZQkyMDA3LTAzLTEyIDE4OjI5OjU3Ljk3NjIxOTc0 NCArMDUzMApAQCAtNTU5LDcgKzU1OSw3IEBACiAKIAogaWZlcSAoJChLQlVJTERfRVhUTU9E KSwpCi1jb3JlLXkJCSs9IGtlcm5lbC8gbW0vIGZzLyBpcGMvIHNlY3VyaXR5LyBjcnlwdG8v IGJsb2NrLworY29yZS15CQkrPSBrZXJuZWwvIG1tLyBmcy8gaXBjLyBzZWN1cml0eS8gY3J5 cHRvLyBibG9jay8ga3Byb2JlLXRlc3RzLwogCiB2bWxpbnV4LWRpcnMJOj0gJChwYXRzdWJz dCAlLywlLCQoZmlsdGVyICUvLCAkKGluaXQteSkgJChpbml0LW0pIFwKIAkJICAgICAkKGNv cmUteSkgJChjb3JlLW0pICQoZHJpdmVycy15KSAkKGRyaXZlcnMtbSkgXApJbmRleDogbGlu dXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9LY29uZmlnCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9k ZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgt Mi42LjE2LjM5L2twcm9iZS10ZXN0cy9LY29uZmlnCTIwMDctMDMtMTIgMTg6Mjk6NTcuOTc2 MjE5NzQ0ICswNTMwCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgS3Byb2JlcyB0ZXN0IG1vZHVs ZXMgY29uZmlndXJhdGlvbgorIworY29uZmlnIEtQUk9CRVNURVNUCisJdHJpc3RhdGUgIktw cm9iZXMgdGVzdCBtb2R1bGVzIgorCWRlcGVuZHMgb24gS1BST0JFUworCWRlZmF1bHQgbSBp ZiBLUFJPQkVTPXkKKwloZWxwCisJICBUaGlzIHN1cHBvcnQgaWYgZW5hYmxlZCwgd2lsbCBi ZSB1c2VkIHRvIHRlc3QgdGhlIGtwcm9iZXMgc3VwcG9ydC4KKworCSAgVG8gY29tcGlsZSB0 aGlzIGtwcm9iZSB0ZXN0IHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRo ZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGstMDB4KHggd2lsbCBiZSBhbnkgbnVtYmVy IGluIDEsMiwuLi4uOSkuCisJICBJZiBpbiBkb3VidCwgc2F5ICJOIgpJbmRleDogbGludXgt Mi42LjE2LjM5L2twcm9iZS10ZXN0cy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2 L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIu Ni4xNi4zOS9rcHJvYmUtdGVzdHMvTWFrZWZpbGUJMjAwNy0wMy0xMiAxODoyOTo1Ny45Nzcy MTk1OTIgKzA1MzAKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgS3By b2JlcyB0ZXN0IG1vZHVsZXMga2VybmVsLgorIworb2JqLSQoQ09ORklHX0tQUk9CRVNURVNU KSArPSBrLTAwMS5vIGstMDAyLm8gay0wMDMubyBrLTAwNC5vIGstMDA1Lm8gay0wMDYubyBc CisJCQkJay0wMDcubyBrLTAwOC5vIGstMDA5Lm8KSW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9r cHJvYmUtdGVzdHMvay0wMDEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0w MS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9rcHJv YmUtdGVzdHMvay0wMDEuYwkyMDA3LTAzLTEyIDE4OjMxOjUyLjI2Njg0NDkyOCArMDUzMApA QCAtMCwwICsxLDkxIEBACisvKgorICogIGstMDAxLmMgLSBBIEtwcm9iZSB3aXRoIHByb2Jl IHBvaW50IHRvIHRoZSBrZXJuZWwgZnVuY3Rpb24gJ2RvX2ZvcmsnLgorICoKKyAqICBDb3B5 cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt MTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxs aW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRl ICJrcHJvYmVzLXRlc3QuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorZXh0ZXJu IHZvaWQgc2hvd19hbGxyZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbmRpZgorc3Rh dGljIHN0cnVjdCBrcHJvYmUga18wMDFfa3ByOworCitzdGF0aWMgdm9pZCBfX2V4aXQga18w MDFfZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygiXG5Nb2R1bGUgZXhpdGluZyBmcm9t IGRvX2ZvcmsgXG4iKTsKKwl1bnJlZ2lzdGVyX2twcm9iZSgma18wMDFfa3ByKTsKK30KKwor c3RhdGljIGludCBrXzAwMV9iZWZvcmVfaG9vayhzdHJ1Y3Qga3Byb2JlICprXzAwMV9rcHIs IHN0cnVjdCBwdF9yZWdzICpwKQoreworCXByaW50aygiXG5CZWZvcmUgaG9vayBpbiBkb19m b3JrIik7CisJcHJpbnRrKCJcblRoaXMgaXMgdGhlIEtwcm9iZSBwcmUgXG4iCisJICAgICAg ICJoYW5kbGVyIGZvciBpbnN0cnVjdGlvbiBhdCAlcFxuIiwga18wMDFfa3ByLT5hZGRyKTsK KwlwcmludGsoIlN0YWNrIER1bXAgOlxuIik7CisJZHVtcF9zdGFjaygpOworCXByaW50aygi VGhlIFJlZ2lzdGVycyBhcmU6XG4iKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwlz aG93X2FsbHJlZ3MocCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBr XzAwMV9hZnRlcl9ob29rKHN0cnVjdCBrcHJvYmUgKmtfMDAxX2twciwKKwkJCSAgICBzdHJ1 Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlwcmludGsoIlxuQWZ0 ZXIgaG9vayBpbiBkb19mb3JrIik7CisJcHJpbnRrKCJcblRoaXMgaXMgdGhlIEtwcm9iZSBw b3N0IFxuIgorCSAgICAgICAiaGFuZGxlciBmb3IgaW5zdHJ1Y3Rpb24gYXQiICIgJXBcbiIs IGtfMDAxX2twci0+YWRkcik7CisJcHJpbnRrKCJTdGFjayBEdW1wIDpcbiIpOworCWR1bXBf c3RhY2soKTsKKwlwcmludGsoIlRoZSBSZWdpc3RlcnMgYXJlOlxuIik7CisjaWYgZGVmaW5l ZChDT05GSUdfUFBDMzIpCisJc2hvd19hbGxyZWdzKHApOworI2VuZGlmCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGtfMDAxX2luaXRfcHJvYmUodm9pZCkKK3sKKwlw cmludGsoIlxuSW5zZXJ0aW5nIHRoZSBrcHJvYmUgZm9yIGRvX2ZvcmtcbiIpOworCisJLyog UmVnaXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlrXzAwMV9rcHIucHJlX2hhbmRsZXIgPSAoa3By b2JlX3ByZV9oYW5kbGVyX3QpIGtfMDAxX2JlZm9yZV9ob29rOworCWtfMDAxX2twci5wb3N0 X2hhbmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFuZGxlcl90KSBrXzAwMV9hZnRlcl9ob29rOwor CWtfMDAxX2twci5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSBrYWxsc3ltc19sb29rdXBf bmFtZSgiZG9fZm9yayIpOworCWlmIChrXzAwMV9rcHIuYWRkciA9PSBOVUxMKSB7CisJCXBy aW50aygia2FsbHN5bXNfbG9va3VwX25hbWUgY291bGQgbm90IGZpbmQgYWRkcmVzcyAiCisJ CSAgICAgICAiZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sIG5hbWVcbiIpOworCQlyZXR1cm4g MTsKKwl9CisKKwlwcmludGsoIlxuQWRkcmVzcyB3aGVyZSB0aGUga3Byb2JlIGlzIFxuIgor CSAgICAgICAiZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgLSAlcFxuIiwga18wMDFfa3ByLmFkZHIp OworCXJlZ2lzdGVyX2twcm9iZSgma18wMDFfa3ByKTsKKwlyZXR1cm4gMDsKK30KKworbW9k dWxlX2luaXQoa18wMDFfaW5pdF9wcm9iZSk7Cittb2R1bGVfZXhpdChrXzAwMV9leGl0X3By b2JlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJLcHJvYmVzIHRlc3QgbW9kdWxlIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRl c3RzL2stMDAyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6 MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3Rz L2stMDAyLmMJMjAwNy0wMy0xMiAxODozMTo1OS45NDA2NzgzMjggKzA1MzAKQEAgLTAsMCAr MSw5NSBAQAorLyoKKyAqIGstMDAyLmMgLSBNdWx0aXBsZSBLcHJvYmVzIHdpdGggdGhlIHNh bWUgcHJvYmUgcG9pbnQgZm9yIHRoZSBrZXJuZWwKKyAqIGZ1bmN0aW9uICdkb19mb3JrJy4K KyAqCisgKiAgQ29weXJpZ2h0IDIwMDcgU29ueSBDb3JwLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv biwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1z Lmg+CisKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIGtfMDAyX2twMTsKK3N0YXRpYyBzdHJ1Y3Qg a3Byb2JlIGtfMDAyX2twMjsKKworc3RhdGljIHZvaWQgX19leGl0IGtfMDAyX2V4aXRfcHJv YmUodm9pZCkKK3sKKwlwcmludGsoIlxuTW9kdWxlIGV4aXRpbmciKTsKKwlwcmludGsoIjIg a3Byb2JlcyBmcm9tIGRvLWZvcmtcbiIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwMl9r cDIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwMl9rcDEpOworfQorCitzdGF0aWMgaW50 IGtfMDAyX2JlZm9yZV9ob29rKHN0cnVjdCBrcHJvYmUgKmtfMDAyX2twMSwgc3RydWN0IHB0 X3JlZ3MgKnApCit7CisJcHJpbnRrKCJcbkJlZm9yZSBob29rIDFzdCBkb19mb3JrXG4iKTsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAwMl9hZnRlcl9ob29rKHN0cnVjdCBr cHJvYmUgKmtfMDAyX2twMSwKKwkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQg bG9uZyBmbGFncykKK3sKKwlwcmludGsoIlxuQWZ0ZXIgaG9vayAxc3QgZG9fZm9ya1xuIik7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga18wMDJfcHJlX2hhbmRsZXIoc3RydWN0 IGtwcm9iZSAqa18wMDJfa3AyLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlwcmludGsoIlxu QmVmb3JlIGhvb2sgMm5kIGRvX2ZvcmtcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGtfMDAyX3Bvc3RfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICprXzAwMl9rcDIsCisJCQkg ICAgICBzdHJ1Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlwcmlu dGsoIlxuQWZ0ZXIgaG9vayAybmQgZG9fZm9ya1xuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgX19pbml0IGtfMDAyX2luaXRfcHJvYmUodm9pZCkKK3sKKwlwcmludGsoIlxu SW5zZXJ0aW5nIHR3byBrcHJvYmVzIGF0IHRoZSBzYW1lIHByb2JlIHBvaW50XG4iKTsKKwor CS8qIFJlZ2lzdGVyaW5nIGEga3Byb2JlICovCisJa18wMDJfa3AxLnByZV9oYW5kbGVyID0g KGtwcm9iZV9wcmVfaGFuZGxlcl90KSBrXzAwMl9iZWZvcmVfaG9vazsKKwlrXzAwMl9rcDEu cG9zdF9oYW5kbGVyID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDJfYWZ0ZXJfaG9v azsKKworCWtfMDAyX2twMi5wcmVfaGFuZGxlciA9IChrcHJvYmVfcHJlX2hhbmRsZXJfdCkg a18wMDJfcHJlX2hhbmRsZXI7CisJa18wMDJfa3AyLnBvc3RfaGFuZGxlciA9IChrcHJvYmVf cG9zdF9oYW5kbGVyX3QpIGtfMDAyX3Bvc3RfaGFuZGxlcjsKKwlrXzAwMl9rcDIuYWRkciA9 IGtfMDAyX2twMS5hZGRyID0KKwkgICAgKGtwcm9iZV9vcGNvZGVfdCAqKSBrYWxsc3ltc19s b29rdXBfbmFtZSgiZG9fZm9yayIpOworCWlmICgoa18wMDJfa3AxLmFkZHIgPT0gTlVMTCkg fHwgKGtfMDAyX2twMi5hZGRyID09IE5VTEwpKSB7CisJCXByaW50aygia2FsbHN5bXNfbG9v a3VwX25hbWUgY291bGQgbm90IGZpbmQgYWRkcmVzcyAiCisJCSAgICAgICAiZm9yIHRoZSBz cGVjaWZpZWQgc3ltYm9sIG5hbWVcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGso IlxuQWRkcmVzcyB3aGVyZSB0aGUgdHdvIGtwcm9iZXMgYXJlIFxuIgorCSAgICAgICAiZ29p bmcgdG8gYmUgaW5zZXJ0ZWQgLSAlcCBhbmQgJXBcbiIsIGtfMDAyX2twMS5hZGRyLAorCSAg ICAgICBrXzAwMl9rcDIuYWRkcik7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwMl9rcDEpOwor CXJlZ2lzdGVyX2twcm9iZSgma18wMDJfa3AyKTsKKworCXJldHVybiAwOworfQorCittb2R1 bGVfaW5pdChrXzAwMl9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtfMDAyX2V4aXRfcHJv YmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBtb2R1bGUiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVz dHMvay0wMDMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDow MDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMv ay0wMDMuYwkyMDA3LTAzLTEyIDE4OjMyOjA5Ljk4MDE1MjA5NiArMDUzMApAQCAtMCwwICsx LDk3IEBACisvKgorICogIGstMDAzLmMgLSBNdWx0aXBsZSBrcHJvYmVzIHdpdGggdGhlIGRp ZmZlcmVudCBwcm9iZSBwb2ludCBmb3IgdGhlIGtlcm5lbAorICogIGZ1bmN0aW9uICdkb19m b3JrJyBhbmQgJ3N5c19nZXR0aW1lb2ZkYXknLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBT b255IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVz Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworc3RhdGljIHN0cnVjdCBrcHJv YmUga18wMDNfa3AxOworc3RhdGljIHN0cnVjdCBrcHJvYmUga18wMDNfa3AyOworCitzdGF0 aWMgdm9pZCBfX2V4aXQga18wMDNfZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygiXG5N b2R1bGUgZXhpdGluZyIpOworCXByaW50aygiXG4yIGtwcm9iZXMgZnJvbSBkby1mb3JrIGFu ZCBzeXNfZ2V0dGltZW9mZGF5XG4iKTsKKwl1bnJlZ2lzdGVyX2twcm9iZSgma18wMDNfa3Ay KTsKKwl1bnJlZ2lzdGVyX2twcm9iZSgma18wMDNfa3AxKTsKK30KKworc3RhdGljIGludCBr XzAwM19iZWZvcmVfaG9vayhzdHJ1Y3Qga3Byb2JlICprXzAwM19rcDEsIHN0cnVjdCBwdF9y ZWdzICpwKQoreworCXByaW50aygiXG5CZWZvcmUgaG9vayBpbiBkb19mb3JrXG4iKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAwM19hZnRlcl9ob29rKHN0cnVjdCBrcHJv YmUgKmtfMDAzX2twMSwKKwkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQgbG9u ZyBmbGFncykKK3sKKwlwcmludGsoIlxuQWZ0ZXIgaG9vayBpbiBkb19mb3JrXG4iKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAwM19wcmVfaGFuZGxlcihzdHJ1Y3Qga3By b2JlICprXzAwM19rcDIsIHN0cnVjdCBwdF9yZWdzICpwKQoreworCXByaW50aygiXG5CZWZv cmUgaG9vayBpbiBzeXNfZ2V0dGltZW9mZGF5XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBrXzAwM19wb3N0X2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqa18wMDNfa3AyLAor CQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJ cHJpbnRrKCJcbkFmdGVyIGhvb2sgaW4gc3lzX2dldHRpbWVvZmRheVxuIik7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGtfMDAzX2luaXRfcHJvYmUodm9pZCkKK3sK KwlwcmludGsoIlxuSW5zZXJ0aW5nIHR3byBrcHJvYmVzIGF0IGRpZmZlcm50IHByb2JlIHBv aW50XG4iKTsKKworCS8qIFJlZ2lzdGVyaW5nIGEga3Byb2JlICovCisJa18wMDNfa3AxLnBy ZV9oYW5kbGVyID0gKGtwcm9iZV9wcmVfaGFuZGxlcl90KSBrXzAwM19iZWZvcmVfaG9vazsK KwlrXzAwM19rcDEucG9zdF9oYW5kbGVyID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18w MDNfYWZ0ZXJfaG9vazsKKworCWtfMDAzX2twMi5wcmVfaGFuZGxlciA9IChrcHJvYmVfcHJl X2hhbmRsZXJfdCkga18wMDNfcHJlX2hhbmRsZXI7CisJa18wMDNfa3AyLnBvc3RfaGFuZGxl ciA9IChrcHJvYmVfcG9zdF9oYW5kbGVyX3QpIGtfMDAzX3Bvc3RfaGFuZGxlcjsKKwlrXzAw M19rcDEuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikga2FsbHN5bXNfbG9va3VwX25hbWUo ImRvX2ZvcmsiKTsKKwlrXzAwM19rcDIuYWRkciA9CisJICAgIChrcHJvYmVfb3Bjb2RlX3Qg Kikga2FsbHN5bXNfbG9va3VwX25hbWUoInN5c19nZXR0aW1lb2ZkYXkiKTsKKworCWlmICgo a18wMDNfa3AxLmFkZHIgPT0gTlVMTCkgfCAoa18wMDNfa3AyLmFkZHIgPT0gTlVMTCkpIHsK KwkJcHJpbnRrKCJrYWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBhZGRyZXNz ICIKKwkJICAgICAgICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7CisJCXJl dHVybiAxOworCX0KKworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBrcHJvYmVzIGFy ZSBcbiIKKwkgICAgICAgImdvaW5nIHRvIGJlIGluc2VydGVkIC0gJXAgIGFuZCAgJXBcbiIs IGtfMDAzX2twMS5hZGRyLAorCSAgICAgICBrXzAwM19rcDIuYWRkcik7CisJcmVnaXN0ZXJf a3Byb2JlKCZrXzAwM19rcDEpOworCXJlZ2lzdGVyX2twcm9iZSgma18wMDNfa3AyKTsKKwor CXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChrXzAwM19pbml0X3Byb2JlKTsKK21vZHVs ZV9leGl0KGtfMDAzX2V4aXRfcHJvYmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9i ZXMgdGVzdCBtb2R1bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4 LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDQuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2 L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIu Ni4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDQuYwkyMDA3LTAzLTEyIDE4OjMyOjE3LjUzMjAw NDA0MCArMDUzMApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqICBrLTAwNC5jIC0gS3Byb2Jl cyB3aXRoIHRoZSBmYXVsdCBoYW5kbGVyIGZvciB0aGUga2VybmVsIGZ1bmN0aW9uCisgKiAg J3N5c19nZXR0aW1lb2ZkYXknLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisg KgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5j bHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlICJrcHJvYmVzLXRlc3QuaCIKKwor I2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorZXh0ZXJuIHZvaWQgc2hvd19hbGxyZWdzKHN0 cnVjdCBwdF9yZWdzICpyZWdzKTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBrcHJvYmUga18w MDRfa3ByOworCit2b2lkIGtfMDA0X0NQWV9GUk9NX1VTRVIoc3RydWN0IGZpbGUgKmZpbGUs IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCWNoYXIgeCA9ICdhJzsKKworCWlmIChwdXRf dXNlcih4LCBidWYpKSB7CisJCXByaW50aygicHV0X3VzZXIgOiAtRUZBVUxUXG4iKTsKKwl9 CisKKwlwcmludGsoIkNQWV9GUk9NX1VTRVJcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4 aXQga18wMDRfZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygiXG5Nb2R1bGUgZXhpdGlu ZyBmcm9tIHN5c19nZXR0aW1lb2ZkYXkgXG4iKTsKKwl1bnJlZ2lzdGVyX2twcm9iZSgma18w MDRfa3ByKTsKK30KKworc3RhdGljIGludCBrXzAwNF9iZWZvcmVfaG9vayhzdHJ1Y3Qga3By b2JlICprXzAwNF9rcHIsIHN0cnVjdCBwdF9yZWdzICpwKQoreworCWludCBsZW4gPSA1MDA7 CisJc3RydWN0IGZpbGUgKmZpbGU7CisKKwlwcmludGsoIlxuQmVmb3JlIGhvb2sgaW4gc3lz X2dldHRpbWVvZmRheSIpOworCXByaW50aygiXG5UaGlzIGlzIHRoZSBLcHJvYmUgcHJlIFxu IgorCSAgICAgICAiaGFuZGxlciBmb3IgaW5zdHJ1Y3Rpb24gYXQiICIlcFxuIiwga18wMDRf a3ByLT5hZGRyKTsKKwlwcmludGsoIlN0YWNrIER1bXA6XG4iKTsKKwlkdW1wX3N0YWNrKCk7 CisJcHJpbnRrKCJUaGUgUmVnaXN0ZXJzIGFyZTpcbiIpOworI2lmIGRlZmluZWQoQ09ORklH X1BQQzMyKQorCXNob3dfYWxscmVncyhwKTsKKyNlbmRpZgorCWtfMDA0X0NQWV9GUk9NX1VT RVIoZmlsZSwgTlVMTCwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAw NF9hZnRlcl9ob29rKHN0cnVjdCBrcHJvYmUgKmtfMDA0X2twciwKKwkJCSAgICBzdHJ1Y3Qg cHRfcmVncyAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlwcmludGsoIlxuQWZ0ZXIg aG9vayBpbiBzeXNfZ2V0dGltZW9mZGF5Iik7CisJcHJpbnRrKCJcblRoaXMgaXMgdGhlIEtw cm9iZSBwb3N0IFxuIgorCSAgICAgICAiaGFuZGxlciBmb3IgaW5zdHJ1Y3Rpb24gYXQiICIg JXBcbiIsIGtfMDA0X2twci0+YWRkcik7CisJcHJpbnRrKCJTdGFjayBEdW1wOlxuIik7CisJ ZHVtcF9zdGFjaygpOworCXByaW50aygiVGhlIFJlZ2lzdGVycyBhcmU6XG4iKTsKKyNpZiBk ZWZpbmVkKENPTkZJR19QUEMzMikKKwlzaG93X2FsbHJlZ3MocCk7CisjZW5kaWYKKwlyZXR1 cm4gMDsKK30KKworaW50IGtfMDA0X2ZhdWx0X3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0 cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgdHJhcG5yKQoreworCXByaW50aygiXG5UaGlzIGlz IHRoZSBLcHJvYmUgZmF1bHQgXG4iCisJICAgICAgICJoYW5kbGVyIGZvciBzeXNfZ2V0dGlt ZW9kZGF5XG4iKTsKKwlwcmludGsoImZhdWx0X2hhbmRsZXI6cC0+YWRkcj0weCVwXG4iLCBw LT5hZGRyKTsKKwlwcmludGsoIlN0YWNrIER1bXA6XG4iKTsKKwlkdW1wX3N0YWNrKCk7CisJ cHJpbnRrKCJUaGUgUmVnaXN0ZXJzIGFyZTpcbiIpOworI2lmIGRlZmluZWQoQ09ORklHX1BQ QzMyKQorCXNob3dfYWxscmVncyhyZWdzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IF9faW5pdCBrXzAwNF9pbml0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJc bkluc2VydGluZyB0aGUga3Byb2JlcyAgZm9yIHN5c19nZXR0aW1lb2ZkYXlcbiIpOworCisJ LyogUmVnaXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlrXzAwNF9rcHIucHJlX2hhbmRsZXIgPSAo a3Byb2JlX3ByZV9oYW5kbGVyX3QpIGtfMDA0X2JlZm9yZV9ob29rOworCWtfMDA0X2twci5w b3N0X2hhbmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFuZGxlcl90KSBrXzAwNF9hZnRlcl9ob29r OworCWtfMDA0X2twci5mYXVsdF9oYW5kbGVyID0gKGtwcm9iZV9mYXVsdF9oYW5kbGVyX3Qp IGtfMDA0X2ZhdWx0X3Byb2JlOworCWtfMDA0X2twci5hZGRyID0KKwkgICAgKGtwcm9iZV9v cGNvZGVfdCAqKSBrYWxsc3ltc19sb29rdXBfbmFtZSgic3lzX2dldHRpbWVvZmRheSIpOwor CWlmIChrXzAwNF9rcHIuYWRkciA9PSBOVUxMKSB7CisJCXByaW50aygia2FsbHN5bXNfbG9v a3VwX25hbWUgY291bGQgbm90IGZpbmQgYWRkcmVzcyAiCisJCSAgICAgICAiZm9yIHRoZSBz cGVjaWZpZWQgc3ltYm9sIG5hbWVcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGso IlxuQWRkcmVzcyB3aGVyZSB0aGUga3Byb2JlIGlzIFxuIgorCSAgICAgICAiZ29pbmcgdG8g YmUgaW5zZXJ0ZWQgLSAlcFxuIiwga18wMDRfa3ByLmFkZHIpOworCXJlZ2lzdGVyX2twcm9i ZSgma18wMDRfa3ByKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoa18wMDRfaW5p dF9wcm9iZSk7Cittb2R1bGVfZXhpdChrXzAwNF9leGl0X3Byb2JlKTsKKworTU9EVUxFX0RF U0NSSVBUSU9OKCJLcHJvYmVzIHRlc3QgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BM Iik7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL2stMDA1LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICsw MDAwCisrKyBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL2stMDA1LmMJMjAwNy0wMy0x MiAxODozMjoyNi44ODk1ODE0NzIgKzA1MzAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBr LTAwNS5jIC0gQSBLcHJvYmUgd2l0aCBwcm9iZSBwb2ludCB0byB0aGUga2VybmVsIGZ1bmN0 aW9uIHN5c19yZWFkLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgor ICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8 bGludXgva2FsbHN5bXMuaD4KKworc3RhdGljIHN0cnVjdCBrcHJvYmUga18wMDVfa3ByOwor c3RhdGljIGludCBrXzAwNV9rcl9rcHJvYmVfcmVhZF9jbnQ7CisKK3N0YXRpYyB2b2lkIF9f ZXhpdCBrXzAwNV9leGl0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJrZXJuZWwga3Byb2Jl X3JlYWRfY250IGlzICVkIFxuIiwga18wMDVfa3Jfa3Byb2JlX3JlYWRfY250KTsKKwlwcmlu dGsoIlxuTW9kdWxlIGV4aXRpbmcgZnJvbSBzeXNfcmVhZCBcbiIpOworCXVucmVnaXN0ZXJf a3Byb2JlKCZrXzAwNV9rcHIpOworfQorCitzdGF0aWMgaW50IGtfMDA1X2JlZm9yZV9ob29r KHN0cnVjdCBrcHJvYmUgKmtwciwgc3RydWN0IHB0X3JlZ3MgKnApCit7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQga18wMDVfYWZ0ZXJfaG9vayhzdHJ1Y3Qga3Byb2JlICprcHIs CisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJ a18wMDVfa3Jfa3Byb2JlX3JlYWRfY250Kys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgX19pbml0IGtfMDA1X2luaXRfcHJvYmUodm9pZCkKK3sKKwlwcmludGsoIlxuSW5zZXJ0 aW5nIHRoZSBrcHJvYmUgZm9yIHN5c19yZWFkXG4iKTsKKworCS8qIFJlZ2lzdGVyaW5nIGEg a3Byb2JlICovCisJa18wMDVfa3ByLnByZV9oYW5kbGVyID0gKGtwcm9iZV9wcmVfaGFuZGxl cl90KSBrXzAwNV9iZWZvcmVfaG9vazsKKwlrXzAwNV9rcHIucG9zdF9oYW5kbGVyID0gKGtw cm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDVfYWZ0ZXJfaG9vazsKKwlrXzAwNV9rcHIuYWRk ciA9IChrcHJvYmVfb3Bjb2RlX3QgKikga2FsbHN5bXNfbG9va3VwX25hbWUoInN5c19yZWFk Iik7CisJaWYgKGtfMDA1X2twci5hZGRyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJrYWxsc3lt c19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBhZGRyZXNzICIKKwkJICAgICAgICJmb3Ig dGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7CisJCXJldHVybiAxOworCX0KKworCXBy aW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBrcHJvYmUgaXMgXG4iCisJICAgICAgICJnb2lu ZyB0byBiZSBpbnNlcnRlZCAtICVwXG4iLCBrXzAwNV9rcHIuYWRkcik7CisJcmVnaXN0ZXJf a3Byb2JlKCZrXzAwNV9rcHIpOworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChrXzAw NV9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtfMDA1X2V4aXRfcHJvYmUpOworCitNT0RV TEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBtb2R1bGUiKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDYuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAw MDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDYuYwkyMDA3 LTAzLTEyIDE4OjMyOjM0LjYzMjQwNDM4NCArMDUzMApAQCAtMCwwICsxLDcyIEBACisvKgor ICogIGstMDA2LmMgLSBBIEtwcm9iZSB3aXRoIHByb2JlIHBvaW50IHRvIHRoZSBrZXJuZWwg ZnVuY3Rpb24gc3lzX3dyaXRlLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisg KgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5j bHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworc3RhdGljIHN0cnVjdCBrcHJvYmUga18wMDZf a3ByOworc3RhdGljIGludCBrXzAwNl9rcl9rcHJvYmVfd3JpdGVfY250OworCitzdGF0aWMg dm9pZCBfX2V4aXQga18wMDZfZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygia2VybmVs IGtwcm9iZV93cml0ZV9jbnQgaXMgJWQgXG4iLCBrXzAwNl9rcl9rcHJvYmVfd3JpdGVfY250 KTsKKwlwcmludGsoIlxuTW9kdWxlIGV4aXRpbmcgZnJvbSBzeXNfd3JpdGUgXG4iKTsKKwl1 bnJlZ2lzdGVyX2twcm9iZSgma18wMDZfa3ByKTsKK30KKworc3RhdGljIGludCBrXzAwNl9i ZWZvcmVfaG9vayhzdHJ1Y3Qga3Byb2JlICprcHIsIHN0cnVjdCBwdF9yZWdzICpwKQorewor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtfMDA2X2FmdGVyX2hvb2soc3RydWN0IGtw cm9iZSAqa3ByLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICpwLCB1bnNpZ25lZCBsb25nIGZs YWdzKQoreworCWtfMDA2X2tyX2twcm9iZV93cml0ZV9jbnQrKzsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBfX2luaXQga18wMDZfaW5pdF9wcm9iZSh2b2lkKQoreworCXByaW50 aygiXG5JbnNlcnRpbmcgdGhlIGtwcm9iZSBmb3Igc3lzX3dyaXRlXG4iKTsKKworCS8qIFJl Z2lzdGVyaW5nIGEga3Byb2JlICovCisJa18wMDZfa3ByLnByZV9oYW5kbGVyID0gKGtwcm9i ZV9wcmVfaGFuZGxlcl90KSBrXzAwNl9iZWZvcmVfaG9vazsKKwlrXzAwNl9rcHIucG9zdF9o YW5kbGVyID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDZfYWZ0ZXJfaG9vazsKKwlr XzAwNl9rcHIuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikga2FsbHN5bXNfbG9va3VwX25h bWUoInN5c193cml0ZSIpOworCWlmIChrXzAwNl9rcHIuYWRkciA9PSBOVUxMKSB7CisJCXBy aW50aygia2FsbHN5bXNfbG9va3VwX25hbWUgY291bGQgbm90IGZpbmQgYWRkcmVzcyAiCisJ CSAgICAgICAiZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sIG5hbWVcbiIpOworCQlyZXR1cm4g MTsKKwl9CisKKwlwcmludGsoIlxuQWRkcmVzcyB3aGVyZSB0aGUga3Byb2JlIGlzIFxuIgor CSAgICAgICAiZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgLSAlcFxuIiwga18wMDZfa3ByLmFkZHIp OworCXJlZ2lzdGVyX2twcm9iZSgma18wMDZfa3ByKTsKKwlyZXR1cm4gMDsKK30KKworbW9k dWxlX2luaXQoa18wMDZfaW5pdF9wcm9iZSk7Cittb2R1bGVfZXhpdChrXzAwNl9leGl0X3By b2JlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJLcHJvYmVzIHRlc3QgbW9kdWxlIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRl c3RzL2stMDA3LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6 MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3Rz L2stMDA3LmMJMjAwNy0wMy0xMiAxODozMjo0MS40ODUzNjI1NzYgKzA1MzAKQEAgLTAsMCAr MSw4MCBAQAorLyoKKyAqICBrLTAwNy5jIC0gS3Byb2JlcyB3aXRoIHByb2JlIHBvaW50cyB0 byB0aGUga2VybmVsIGZ1bmN0aW9ucyBfX2ttYWxsb2MgYW5kCisgKiAga2ZyZWUuCisgKgor ICogIENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1B ICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgor CitzdGF0aWMgc3RydWN0IGtwcm9iZSBrXzAwN19rcCwga18wMDdfa3AxOworaW50IGtfMDA3 X2ttYWxsb2NfY291bnQgPSAwOworaW50IGtfMDA3X2tmcmVlX2NvdW50ID0gMDsKKworc3Rh dGljIGludCBrXzAwN19rbWFsbG9jX2huZGxyKHN0cnVjdCBrcHJvYmUgKmtwciwgc3RydWN0 IHB0X3JlZ3MgKnApCit7CisJa18wMDdfa21hbGxvY19jb3VudCsrOworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGtfMDA3X2tmcmVlX2huZGxyKHN0cnVjdCBrcHJvYmUgKmtwciwg c3RydWN0IHB0X3JlZ3MgKnApCit7CisJa18wMDdfa2ZyZWVfY291bnQrKzsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBfX2luaXQga18wMDdfa21mX2luaXQodm9pZCkKK3sKKwlp bnQgcmV0OworCWtfMDA3X2twLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIGthbGxzeW1z X2xvb2t1cF9uYW1lKCJfX2ttYWxsb2MiKTsKKwlrXzAwN19rcC5wcmVfaGFuZGxlciA9IGtf MDA3X2ttYWxsb2NfaG5kbHI7CisJa18wMDdfa3AxLmFkZHIgPSAoa3Byb2JlX29wY29kZV90 ICopIGthbGxzeW1zX2xvb2t1cF9uYW1lKCJrZnJlZSIpOworCWtfMDA3X2twMS5wcmVfaGFu ZGxlciA9IGtfMDA3X2tmcmVlX2huZGxyOworCXJldCA9IHJlZ2lzdGVyX2twcm9iZSgma18w MDdfa3ApOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdGVy X2twcm9iZSByZXR1cm5zICVkICVkIFxuIiwgcmV0LAorCQkgICAgICAgX19MSU5FX18pOwor CQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gcmVnaXN0ZXJfa3Byb2JlKCZrXzAwN19rcDEp OworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgInJlZ2lzdGVyX2twcm9i ZSByZXR1cm5zICVkICVkIFxuIiwgcmV0LAorCQkgICAgICAgX19MSU5FX18pOworCQlyZXR1 cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrXzAw N19rbWZfZXhpdCh2b2lkKQoreworCXByaW50aygiJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJVxuXG5cblxuIik7CisJcHJpbnRrKCJrbWFs bG9jIGNvdW50IGlzICVkIFxuIiwga18wMDdfa21hbGxvY19jb3VudCk7CisJcHJpbnRrKCJr ZnJlZSBjb3VudCBpcyAlZCBcbiIsIGtfMDA3X2tmcmVlX2NvdW50KTsKKwlwcmludGsoIlxu XG5cbiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSVcbiIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwN19rcCk7CisJdW5yZWdpc3Rlcl9r cHJvYmUoJmtfMDA3X2twMSk7CisJcHJpbnRrKEtFUk5fSU5GTyAia3RpbWU6IGV4aXRpbmcu Li5cbiIpOworfQorCittb2R1bGVfaW5pdChrXzAwN19rbWZfaW5pdCk7Cittb2R1bGVfZXhp dChrXzAwN19rbWZfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CkluZGV4OiBsaW51 eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL2stMDA4LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rl di9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0y LjYuMTYuMzkva3Byb2JlLXRlc3RzL2stMDA4LmMJMjAwNy0wMy0xMiAxODozMjo0OC4yNDgz MzQ0NDggKzA1MzAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBrLTAwOC5jIC0gQSBLcHJv YmUgd2l0aCBhIHByb2JlIHBvaW50IHRvIHRoZSBrZXJuZWwgZnVuY3Rpb24KKyAqICBkb19n ZXR0aW1lb2ZkYXksIHdpdGggYW4gZW1wdHkgcHJlLWhhbmRsZXIgd2hpY2ggY2FuIGJlIHVz ZWQKKyAqICB0byBtZWFzdXJlIHRoZSBLcHJvYmVzIG92ZXJoZWFkLgorICoKKyAqICBDb3B5 cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt MTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxs aW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworc3RhdGlj IHN0cnVjdCBrcHJvYmUga18wMDhfa3AxOworCitzdGF0aWMgdm9pZCBfX2V4aXQga18wMDhf ZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygiXG5Nb2R1bGUgZXhpdGluZyAiKTsKKwlw cmludGsoImZyb20gZ2V0dGltZW9mZGF5XG4iKTsKKwl1bnJlZ2lzdGVyX2twcm9iZSgma18w MDhfa3AxKTsKK30KKworc3RhdGljIGludCBrXzAwOF9wcmVfaGFuZGxlcihzdHJ1Y3Qga3By b2JlICprXzAwOF9rcDEsIHN0cnVjdCBwdF9yZWdzICpwKQoreworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IF9faW5pdCBrXzAwOF9pbml0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRr KCJcbkluc2VydGluZyB0aGUga3Byb2JlIGF0IGRvX2dldHRpbWVvZmRheVxuIik7CisKKwkv KiBSZWdpc3RlcmluZyBhIGtwcm9iZSAqLworCWtfMDA4X2twMS5wcmVfaGFuZGxlciA9IChr cHJvYmVfcHJlX2hhbmRsZXJfdCkga18wMDhfcHJlX2hhbmRsZXI7CisJa18wMDhfa3AxLmFk ZHIgPQorCSAgICAoa3Byb2JlX29wY29kZV90ICopIGthbGxzeW1zX2xvb2t1cF9uYW1lKCJk b19nZXR0aW1lb2ZkYXkiKTsKKworCWlmIChrXzAwOF9rcDEuYWRkciA9PSBOVUxMKSB7CisJ CXByaW50aygia2FsbHN5bXNfbG9va3VwX25hbWUgY291bGQgbm90IGZpbmQgYWRkcmVzcyAi CisJCSAgICAgICAiZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sIG5hbWVcbiIpOworCQlyZXR1 cm4gMTsKKwl9CisKKwlwcmludGsoIlxuQWRkcmVzcyB3aGVyZSB0aGUga3Byb2JlcyBhcmUg XG4iCisJICAgICAgICJnb2luZyB0byBiZSBpbnNlcnRlZCAtICVwIFxuIiwga18wMDhfa3Ax LmFkZHIpOworCXJlZ2lzdGVyX2twcm9iZSgma18wMDhfa3AxKTsKKworCXJldHVybiAwOwor fQorCittb2R1bGVfaW5pdChrXzAwOF9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtfMDA4 X2V4aXRfcHJvYmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBtb2R1 bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9r cHJvYmUtdGVzdHMvay0wMDkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0w MS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9rcHJv YmUtdGVzdHMvay0wMDkuYwkyMDA3LTAzLTEyIDE4OjMyOjU1LjU1NDIyMzc4NCArMDUzMApA QCAtMCwwICsxLDc0IEBACisvKgorICogIGstMDA5LmMgLSBBIEtwcm9iZSB3aXRoIGEgcHJv YmUgcG9pbnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlvbgorICogIGRvX2dldHRpbWVvZmRheSwg d2l0aCB0aGUgZW1wdHkgcHJlLWhhbmRsZXIgYW5kIHBvc3QtaGFuZGxlcgorICogIHdoaWNo IGNhbiBiZSB1c2VkIHRvIG1lYXN1cmUgdGhlIEtwcm9iZXMgb3ZlcmhlYWQuCisgKgorICog IENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAq ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAw MjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNs dWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCitzdGF0aWMgc3RydWN0IGtwcm9iZSBrXzAwOV9r cDE7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrXzAwOV9leGl0X3Byb2JlKHZvaWQpCit7CisJ cHJpbnRrKCJcbk1vZHVsZSBleGl0aW5nICIpOworCXByaW50aygiZnJvbSBnZXR0aW1lb2Zk YXlcbiIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwOV9rcDEpOworfQorCitzdGF0aWMg aW50IGtfMDA5X3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKmtfMDA5X2twMSwgc3RydWN0 IHB0X3JlZ3MgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga18wMDlfcG9z dF9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKmtfMDA5X2twMSwKKwkJCSAgICAgIHN0cnVjdCBw dF9yZWdzICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IF9faW5pdCBrXzAwOV9pbml0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJc bkluc2VydGluZyB0aGUga3Byb2JlIGF0IGRvX2dldHRpbWVvZmRheVxuIik7CisKKwkvKiBS ZWdpc3RlcmluZyBhIGtwcm9iZSAqLworCWtfMDA5X2twMS5wcmVfaGFuZGxlciA9IChrcHJv YmVfcHJlX2hhbmRsZXJfdCkga18wMDlfcHJlX2hhbmRsZXI7CisJa18wMDlfa3AxLnBvc3Rf aGFuZGxlciA9IChrcHJvYmVfcG9zdF9oYW5kbGVyX3QpIGtfMDA5X3Bvc3RfaGFuZGxlcjsK KwlrXzAwOV9rcDEuYWRkciA9CisJICAgIChrcHJvYmVfb3Bjb2RlX3QgKikga2FsbHN5bXNf bG9va3VwX25hbWUoImRvX2dldHRpbWVvZmRheSIpOworCisJaWYgKGtfMDA5X2twMS5hZGRy ID09IE5VTEwpIHsKKwkJcHJpbnRrKCJrYWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3Qg ZmluZCBhZGRyZXNzICIKKwkJICAgICAgICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFt ZVxuIik7CisJCXJldHVybiAxOworCX0KKworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRo ZSBrcHJvYmVzIGFyZSBcbiIKKwkgICAgICAgImdvaW5nIHRvIGJlIGluc2VydGVkIC0gJXAg XG4iLCBrXzAwOV9rcDEuYWRkcik7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwOV9rcDEpOwor CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGtfMDA5X2luaXRfcHJvYmUpOworbW9k dWxlX2V4aXQoa18wMDlfZXhpdF9wcm9iZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiS3By b2JlcyB0ZXN0IG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpJbmRleDogbGlu dXgtMi42LjE2LjM5L0RvY3VtZW50YXRpb24va3Byb2JlLXRlc3RzLnR4dAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAK KysrIGxpbnV4LTIuNi4xNi4zOS9Eb2N1bWVudGF0aW9uL2twcm9iZS10ZXN0cy50eHQJMjAw Ny0wMy0xMiAxODoyOTo1Ny45ODYyMTgyMjQgKzA1MzAKQEAgLTAsMCArMSwyOTkgQEAKK1Rp dGxlCTogS2VybmVsIFByb2JlcyB0ZXN0IG1vZHVsZXMKKworS3Byb2JlcyBpcyBhIGtlcm5l bCBkZWJ1Z2dpbmcgdGVjaG5pcXVlLiBUaGlzIGNhbiBiZSB0ZXN0ZWQgdXNpbmcga2VybmVs Cittb2R1bGVzLiBUaGVzZSBrZXJuZWwgbW9kdWxlIHdpbGwgaG9vayB0aGUgdXNlciBkZWZp bmVkIHByZSBoYW5kbGVyLCBwb3N0CitoYW5kbGVyIGFuZCBmYXVsdCBoYW5kbGVyIHRvIHRo ZSBwcm9iZWQgcG9pbnQuCisKK1doZW4gY29uZmlndXJpbmcgdGhlIGtlcm5lbCB1c2luZyBt YWtlIG1lbnVjb25maWcveGNvbmZpZy9vbGRjb25maWcsCitlbnN1cmUgdGhhdCBDT05GSUdf S1BST0JFUyBpcyBzZXQgdG8gInkiLiAgVW5kZXIgIkluc3RydW1lbnRhdGlvbgorU3VwcG9y dCIsIGxvb2sgZm9yICJLcHJvYmVzIi4KKworQW5kIGFsc28gZW5zdXJlIHRoYXQgQ09ORklH X0tQUk9CRVNURVNUIGlzIHNldCB0byAibSIsIG9ubHkgaWYKK0NPTkZJR19LUFJPQkVTIGlz IHNldCB0byAieSIKKworVG8gbG9hZCBhbmQgdW5sb2FkIEtwcm9iZXMtYmFzZWQgaW5zdHJ1 bWVudGF0aW9uIG1vZHVsZXMsIG1ha2Ugc3VyZQorIkxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0 IiAoQ09ORklHX01PRFVMRVMpIGFuZCAiTW9kdWxlIHVubG9hZGluZyIKKyhDT05GSUdfTU9E VUxFX1VOTE9BRCkgYXJlIHNldCB0byAieSIuCisKK1lvdSBtYXkgYWxzbyB3YW50IHRvIGVu c3VyZSB0aGF0IENPTkZJR19LQUxMU1lNUyBhbmQgcGVyaGFwcyBldmVuCitDT05GSUdfS0FM TFNZTVNfQUxMIGFyZSBzZXQgdG8gInkiLCBzaW5jZSBrYWxsc3ltc19sb29rdXBfbmFtZSgp CitpcyBhIGhhbmR5LCB2ZXJzaW9uLWluZGVwZW5kZW50IHdheSB0byBmaW5kIGEgZnVuY3Rp b24ncyBhZGRyZXNzLgorCitUaGUgS3Byb2JlcyBtb2R1bGVzIGFyZToKKworLSBrcHJvYmUt dGVzdHMvay0wMHguYyAoIHggPSAwLDEsMi4uLi45ICkKKworCisxLiBrLTAwMS5jCisKK0Eg S3Byb2JlIHdpdGggcHJvYmUgcG9pbnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlvbiAnZG9fZm9y aycuCitUaGlzIHdpbGwgdGVzdCB0aGUgd29ya2luZyBvZiBLUFJPQkVTIHN1cHBvcnQuCisK K0RFU0NSSVBUSU9OOgorSXQgaGFzIGEga2VybmVsIHByb2JlICdrXzAwMV9rcHInIG9mIHRo ZSB0eXBlIGBzdHJ1Y3Qga3Byb2JlYC4KKworVGhpcyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5l ZCBoYW5kbGVycyBhcyBmb2xsb3dzOgorMS4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgICAgOiBr XzAwMV9iZWZvcmVfaG9vaworMi4gS3Byb2JlJ3MgcG9zdC1oYW5kbGVyICAgOiBrXzAwMV9h ZnRlcl9ob29rCisKK0FuZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGlzIDoga2FsbHN5bXNfbG9v a3VwX25hbWUoImRvX2ZvcmsiKS4KKworV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnNlcnRlZCB1 c2luZyBpbnNtb2QsIGl0IHJlZ2lzdGVycyB0aGUga18wMDFfa3ByCit1c2luZyAncmVnaXN0 ZXJfa3Byb2JlKCZrXzAwMV9rcHIpJy4KKworV2hlbiB0aGUgYWRyZXNzIG9mIGEga2VybmVs IHJvdXRpbmUgJ2RvX2ZvcmsnIGlzIGhpdCwgS3Byb2JlcyBjYWxscwordXNlciBkZWZpbmVk IHByZSBoYW5kbGVyICdrXzAwMV9iZWZvcmVfaG9vaygpJy4gQXMgcGFydCBvZiB0aGUgdGhp cworZnVuY3Rpb24gY2FsbCBpdCBkdW1wcyB0aGUgc3RhY2sgdXNpbmcgZHVtcF9zdGFjaygp IGFuZCBhbHNvIHNob3dzCit0aGUgcmVnaXN0ZXIgY29udGVudCBhdCB0aGF0IHBvaW50IHVz aW5nIGtfMDAxX3Nob3dfYWxscmVncygpLgorCitBZnRlciB0aGUgcHJvYmVkIGluc3RydWN0 aW9uIHNpbmdsZS1zdGVwcGVkLCBLcHJvYmVzIGNhbGxzIHRoZSBwb3N0CitoYW5kbGVyICdr XzAwMV9hZnRlcl9ob29rKCknLiBUaGlzIGFsc28gZG9lcyB0aGUgc2FtZSBkdW1wX3N0YWNr IGFuZAorc2hvd3MgdGhlIHJlZ2lzdGVyIGNvbnRlbnQgYXQgdGhhdCBwb2ludCB1c2luZyBr XzAwMV9zaG93X2FsbHJlZ3MoKS4KKworV2hpbGUgdW5sb2FkaW5nIHRoZSBtb2R1bGUgdXNp bmcgcm1tb2QoKSwgaXQgZGVyZWdpc3RlcnMgdGhlIGtfMDAxX2twcgordXNpbmcgJ3VucmVn aXN0ZXJfa3Byb2JlKCknLgorCisKKzIuIGstMDAyLmMKKworT0JKRUNUSVZFICAgOgorTXVs dGlwbGUgS3Byb2JlcyB3aXRoIHRoZSBzYW1lIHByb2JlIHBvaW50IGZvciB0aGUga2VybmVs IGZ1bmN0aW9uCisnZG9fZm9yaycuCisKK0RFU0NSSVBUSU9OIDoKKwlJdCBoYXMgdHdvIGtl cm5lbCBwcm9iZXMgJ2tfMDAyX2twMSBhbmQga18wMDJfa3AyJyBvZiB0aGUgdHlwZQorYHN0 cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRsZXJz IGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciBmb3Iga18wMDJfa3AxCTog a18wMDJfYmVmb3JlX2hvb2sKKzIgIEtwcm9iZSdzIHBvc3QtaGFuZGxlciBmb3Iga18wMDJf a3AxCToga18wMDJfYWZ0ZXJfaG9vaworMy4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgZm9yIGtf MDAyX2twMgk6IGtfMDAyX3ByZV9oYW5kbGVyCis0LiBLcHJvYmUncyBwb3N0LWhhbmRsZXIg Zm9yIGtfMDAyX2twMgk6IGtfMDAyX3Bvc3RfaGFuZGxlcgorCitBbmQgdGhlIHByb2JlZCBh ZGRkcmVzcyBmb3Iga18wMDJfa3AxIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoImRvX2Zv cmsiKS4KK0FuZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGZvciBrXzAwMl9rcDIgaXMgOiBrYWxs c3ltc19sb29rdXBfbmFtZSgiZG9fZm9yayIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlzIGlu c2VydGVkIHVzaW5nIGluc21vZCwgaXQgcmVnaXN0ZXJzIHRoZSBrXzAwMl9rcDEgYW5kCitr XzAwMl9rcDIgdXNpbmcgJ3JlZ2lzdGVyX2twcm9iZSgpJy4KKworV2hlbiB0aGUgYWRyZXNz IG9mIGEga2VybmVsIHJvdXRpbmUgJ2RvX2ZvcmsnIGlzIGhpdCwgS3Byb2JlcyBjYWxscwor dXNlciBkZWZpbmVkIHByZSBoYW5kbGVycyAna18wMDJfcHJlX2hhbmRsZXInIGFuZCAna18w MDJfYmVmb3JlX2hvb2snLgorCitBZnRlciB0aGUgcHJvYmVkIGluc3RydWN0aW9uIHNpbmds ZS1zdGVwcGVkLCBLcHJvYmVzIGNhbGxzIHRoZSBwb3N0CitoYW5kbGVycyAna18wMDJfcG9z dF9oYW5kbGVyJyBhbmQgJ2tfMDAyX2FmdGVyX2hvb2soKScuCisKK1doaWxlIHVubG9hZGlu ZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCksIGl0IGRlcmVnaXN0ZXJzIHRoZSBrXzAwMl9r cDEKK2FuZCBrXzAwMl9rcDIgdXNpbmcgJ3VucmVnaXN0ZXJfa3Byb2JlKCknLgorCisKKzMu IGstMDAzLmMKKworT0JKRUNUSVZFICAgOgorTXVsdGlwbGUga3Byb2JlcyB3aXRoIHRoZSBk aWZmZXJlbnQgcHJvYmUgcG9pbnQgZm9yIHRoZSBrZXJuZWwgZnVuY3Rpb24KKydkb19mb3Jr JyBhbmQgJ3N5c19nZXR0aW1lb2ZkYXknLgorCitERVNDUklQVElPTiA6CitJdCBoYXMgdHdv IGtlcm5lbCBwcm9iZXMgJ2tfMDAzX2twMSBhbmQga18wMDNfa3AyJyBvZiB0aGUgdHlwZQor YHN0cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRs ZXJzIGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciBmb3Iga18wMDNfa3Ax CToga18wMDNfYmVmb3JlX2hvb2sKKzIgIEtwcm9iZSdzIHBvc3QtaGFuZGxlciBmb3Iga18w MDNfa3AxCToga18wMDNfYWZ0ZXJfaG9vaworMy4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgZm9y IGtfMDAzX2twMgk6IGtfMDAzX3ByZV9oYW5kbGVyCis0LiBrcHJvYmUncyBwb3N0LWhhbmRs ZXIgZm9yIGtfMDAzX2twMgk6IGtfMDAzX3Bvc3RfaGFuZGxlcgorCitBbmQgdGhlIHByb2Jl ZCBhZGRkcmVzcyBmb3Iga18wMDNfa3AxIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoImRv X2ZvcmsiKS4KK0FuZCBmb3Iga18wMDNfa3AyIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUo InN5c19nZXR0aW1lb2ZkYXkiKS4KKworV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnNlcnRlZCB1 c2luZyBpbnNtb2QsIGl0IHJlZ2lzdGVycyB0aGUga18wMDNfa3AxIGFuZAora18wMDNfa3Ay IHVzaW5nICdyZWdpc3Rlcl9rcHJvYmUoKScuCisKK1doZW4gdGhlIGFkcmVzcyBvZiBhIGtl cm5lbCByb3V0aW5lICdkb19mb3JrJyBpcyBoaXQsIEtwcm9iZXMgY2FsbHMKK3VzZXIgZGVm aW5lZCBwcmUgaGFuZGxlcnMgJ2tfMDAzX2JlZm9yZV9ob29rJy4KKworV2hlbiB0aGUgYWRy ZXNzIG9mIGEga2VybmVsIHJvdXRpbmUgJ3N5c19nZXR0aW1lb2ZkYXknIGlzIGhpdCwgS3By b2JlcworY2FsbHMgdXNlciBkZWZpbmVkIHByZSBoYW5kbGVycyAna18wMDNfcHJlX2hhbmRs ZXInLgorCitBZnRlciB0aGUgcHJvYmVkIGluc3RydWN0aW9uIHNpbmdsZS1zdGVwcGVkLCBL cHJvYmVzIGNhbGxzIHRoZSBwb3N0CitoYW5kbGVycyAna18wMDNfcG9zdF9oYW5kbGVyJyBh bmQgJ2tfMDAzX2FmdGVyX2hvb2soKScgZm9yIGVhY2ggcHJvYmVkCithZGRyZXNzLgorCitX aGlsZSB1bmxvYWRpbmcgdGhlIG1vZHVsZSB1c2luZyBybW1vZCgpLCBpdCBkZXJlZ2lzdGVy cyB0aGUga18wMDNfa3AxCithbmQga18wMDNfa3AyIHVzaW5nICd1bnJlZ2lzdGVyX2twcm9i ZSgpJy4KKworCis0LiBrLTAwNC5jCisKK0twcm9iZXMgd2l0aCB0aGUgZmF1bHQgaGFuZGxl ciBmb3IgdGhlIGtlcm5lbCBmdW5jdGlvbiAnc3lzX2dldHRpbWVvZmRheScuCisKK0RFU0NS SVBUSU9OOgorSXQgaGFzIGEga2VybmVsIHByb2JlICdrXzAwNF9rcHInIG9mIHRoZSB0eXBl IGBzdHJ1Y3Qga3Byb2JlYC4KKworVGhpcyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5lZCBoYW5k bGVycyBhcyBmb2xsb3dzOgorMS4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgICAgOiBrXzAwNF9i ZWZvcmVfaG9vaworMi4gS3Byb2JlJ3MgcG9zdC1oYW5kbGVyICAgOiBrXzAwNF9hZnRlcl9o b29rCiszLiBLcHJvYmUncyBmYXVsdC1oYW5kbGVyICA6IGtfMDA0X2ZhdWx0X3Byb2JlCisK K0FuZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoInN5 c19nZXR0aW1lb2ZkYXkiKS4KKworV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnNlcnRlZCB1c2lu ZyBpbnNtb2QsIGl0IHJlZ2lzdGVycyB0aGUga18wMDRfa3ByCit1c2luZyAncmVnaXN0ZXJf a3Byb2JlKCZrXzAwNF9rcHIpJy4KKworV2hlbiB0aGUgYWRyZXNzIG9mIGEga2VybmVsIHJv dXRpbmUgJ3N5c19nZXR0aW1lb2ZkYXknIGlzIGhpdCwgS3Byb2JlcworY2FsbHMgdXNlciBk ZWZpbmVkIHByZSBoYW5kbGVyICdrXzAwNF9iZWZvcmVfaG9vaygpJy4gQXMgcGFydCBvZiB0 aGUgdGhpcworZnVuY3Rpb24gY2FsbCBpdCBkdW1wcyB0aGUgc3RhY2sgdXNpbmcgZHVtcF9z dGFjaygpIGFuZCBhbHNvIHNob3dzIHRoZQorcmVnaXN0ZXIgY29udGVudCBhdCB0aGF0IHBv aW50IHVzaW5nIGtfMDA0X3Nob3dfYWxscmVncygpLgorQW5kIGFsc28gcHJlIGhhbmRsZXIg a18wMDRfYmVmb3JlX2hvb2soKSB0cmllcyB0byBnZW5lYXJhdGUgYSBmYXVsdCBieQorZG9p bmcgcHV0X3VzZXIoKSBmb3IgYSBudWxsIGJ1ZmZlci4KKworV2hlbiB0aGlzIGZhdWx0IGlz IGhpdCwgS3Byb2JlIGNhbGxzIGtwcm9iZSdzIGZhdWx0IGhhbmRsZXIgJ2tfMDA0X2ZhdWx0 X3Byb2JlJy4KK0FmdGVyIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gc2luZ2xlLXN0ZXBwZWQs IEtwcm9iZXMgY2FsbHMgdGhlIHBvc3QgaGFuZGxlcgorJ2tfMDA0X2FmdGVyX2hvb2soKScu IFRoaXMgYWxzbyBkb2VzIHRoZSBzYW1lIGR1bXBfc3RhY2sgYW5kIHNob3dzIHRoZQorcmVn aXN0ZXIgY29udGVudCBhdCB0aGF0IHBvaW50IHVzaW5nIGtfMDA0X3Nob3dfYWxscmVncygp LgorCitXaGlsZSB1bmxvYWRpbmcgdGhlIG1vZHVsZSB1c2luZyBybW1vZCgpLCBpdCBkZXJl Z2lzdGVycyB0aGUga18wMDRfa3ByIHVzaW5nCisndW5yZWdpc3Rlcl9rcHJvYmUoKScuCisK KworNS4gay0wMDUuYworCitBIEtwcm9iZSB3aXRoIHByb2JlIHBvaW50IHRvIHRoZSBrZXJu ZWwgZnVuY3Rpb24gc3lzX3JlYWQuCisKK0RFU0NSSVBUSU9OOgorSXQgaGFzIGEga2VybmVs IHByb2JlICdrXzAwNV9rcHInIG9mIHRoZSB0eXBlIGBzdHJ1Y3Qga3Byb2JlYC4KKworVGhp cyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5lZCBoYW5kbGVycyBhcyBmb2xsb3dzOgorMS4gS3By b2JlJ3MgcHJlLWhhbmRsZXIgICAgOiBrXzAwNV9iZWZvcmVfaG9vaworMi4gS3Byb2JlJ3Mg cG9zdC1oYW5kbGVyICAgOiBrXzAwNV9hZnRlcl9ob29rCisKK0FuZCB0aGUgcHJvYmVkIGFk ZGRyZXNzIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoInN5c19yZWFkIikuCisKK1doZW4g dGhpcyBtb2R1bGUgaXMgaW5zZXJ0ZWQgdXNpbmcgaW5zbW9kLCBpdCByZWdpc3RlcnMgdGhl IGtfMDA1X2twcgordXNpbmcgJ3JlZ2lzdGVyX2twcm9iZSgma18wMDVfa3ByKScuCisKK1do ZW4gdGhlIGFkcmVzcyBvZiBhIGtlcm5lbCByb3V0aW5lICdzeXNfcmVhZCcgaXMgaGl0LCBL cHJvYmVzCitjYWxscyB1c2VyIGRlZmluZWQgcHJlIGhhbmRsZXIgJ2tfMDA1X2JlZm9yZV9o b29rKCknLgorCitBZnRlciB0aGUgcHJvYmVkIGluc3RydWN0aW9uIHNpbmdsZS1zdGVwcGVk LCBLcHJvYmVzIGNhbGxzIHRoZSBwb3N0CitoYW5kbGVyICdrXzAwNV9hZnRlcl9ob29rKCkn LiBUaGlzIHdpbGwgaW5jcmVhc2VzIHRoZSBjb3VudCB2YXJpYWJsZQorJ2tfMDA1X2tyX2tw cm9iZV9yZWFkX2NudCcgYnkgb25lLgorCitXaGlsZSB1bmxvYWRpbmcgdGhlIG1vZHVsZSB1 c2luZyBybW1vZCgpLCBpdCBkZXJlZ2lzdGVycyB0aGUga18wMDVfa3ByCit1c2luZyAndW5y ZWdpc3Rlcl9rcHJvYmUoKScgYW5kIGFsc28gcHJpbnRzIHRoZSB0b3RhbCBudW1iZXIgb2Yg cmVhZCBjb3VudC4KKworCis2LiBrLTAwNi5jCisKK0EgS3Byb2JlIHdpdGggcHJvYmUgcG9p bnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlvbiBzeXNfd3JpdGUuCisKK0RFU0NSSVBUSU9OOgor SXQgaGFzIGEga2VybmVsIHByb2JlICdrXzAwNl9rcHInIG9mIHRoZSB0eXBlIGBzdHJ1Y3Qg a3Byb2JlYC4KKworVGhpcyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5lZCBoYW5kbGVycyBhcyBm b2xsb3dzOgorMS4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgICAgOiBrXzAwNl9iZWZvcmVfaG9v aworMi4gS3Byb2JlJ3MgcG9zdC1oYW5kbGVyICAgOiBrXzAwNl9hZnRlcl9ob29rCisKK0Fu ZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoInN5c193 cml0ZSIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlzIGluc2VydGVkIHVzaW5nIGluc21vZCwg aXQgcmVnaXN0ZXJzIHRoZSBrXzAwNl9rcHIKK3VzaW5nICdyZWdpc3Rlcl9rcHJvYmUoJmtf MDA2X2twciknLgorCitXaGVuIHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnc3lz X3JlYWQnIGlzIGhpdCwgS3Byb2JlcyBjYWxscwordXNlciBkZWZpbmVkIHByZSBoYW5kbGVy ICdrXzAwNl9iZWZvcmVfaG9vaygpJy4KKworQWZ0ZXIgdGhlIHByb2JlZCBpbnN0cnVjdGlv biBzaW5nbGUtc3RlcHBlZCwgS3Byb2JlcyBjYWxscyB0aGUgcG9zdAoraGFuZGxlciAna18w MDZfYWZ0ZXJfaG9vaygpJy4gVGhpcyB3aWxsIGluY3JlYXNlcyB0aGUgY291bnQgdmFyaWFi bGUKKydrXzAwNl9rcl9rcHJvYmVfd3JpdGVfY250JyBieSBvbmUuCisKK1doaWxlIHVubG9h ZGluZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCksIGl0IGRlcmVnaXN0ZXJzIHRoZSBrXzAw Nl9rcHIKK3VzaW5nICd1bnJlZ2lzdGVyX2twcm9iZSgpJyBhbmQgYWxzbyBwcmludHMgdGhl IHRvdGFsIG51bWJlciBvZiB3cml0ZQorY291bnQuCisKKworNy4gay0wMDcuYworCitLcHJv YmVzIHdpdGggcHJvYmUgcG9pbnRzIHRvIHRoZSBrZXJuZWwgZnVuY3Rpb25zIF9fa21hbGxv YyBhbmQga2ZyZWUuCisKK0RFU0NSSVBUSU9OIDoKK0l0IGhhcyB0d28ga2VybmVsIHByb2Jl cyAna18wMDdfa3AgYW5kIGtfMDA3X2twMScgb2YgdGhlIHR5cGUKK2BzdHJ1Y3Qga3Byb2Jl YC4KKworVGhpcyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5lZCBoYW5kbGVycyBhcyBmb2xsb3dz OgorMS4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgZm9yIGtfMDA3X2twCToga18wMDdfa21hbGxv Y19obmRscgorMi4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgZm9yIGtfMDA3X2twMQk6IGtfMDA3 X2tmcmVlX2huZGxyCisKK0FuZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGZvciBrXzAwN19rcCBp cyA6IGthbGxzeW1zX2xvb2t1cF9uYW1lKCJfX2ttYWxsb2MiKS4KK0FuZCB0aGUgcHJvYmVk IGFkZGRyZXNzIGZvciBrXzAwN19rcDEgaXM6IGthbGxzeW1zX2xvb2t1cF9uYW1lKCJrZnJl ZSIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlzIGluc2VydGVkIHVzaW5nIGluc21vZCwgaXQg cmVnaXN0ZXJzIHRoZSBrXzAwN19rcCBhbmQKK2tfMDA3X2twMSB1c2luZyAncmVnaXN0ZXJf a3Byb2JlKCknLgorCitXaGVuIHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnX19r bWFsbG9jJyBpcyBoaXQsIEtwcm9iZXMgY2FsbHMKK3VzZXIgZGVmaW5lZCBwcmUgaGFuZGxl cnMgJ2tfMDA3X2ttYWxsb2NfaG5kbHInLiBUaGlzIHdpbGwgaW5jcmVhc2VzCit0aGUgY291 bnQgdmFyaWFibGUgJ2tfMDA3X2ttYWxsb2NfY291bnQnIGJ5IG9uZS4KKworV2hlbiB0aGUg YWRyZXNzIG9mIGEga2VybmVsIHJvdXRpbmUgJ2ZyZWUnIGlzIGhpdCwgS3Byb2JlcyBjYWxs cyB1c2VyCitkZWZpbmVkIHByZSBoYW5kbGVycyAna18wMDdfa2ZyZWVfaG5kbHInLiBUaGlz IHdpbGwgaW5jcmVhc2VzIHRoZQorY291bnQgdmFyaWFibGUgJ2tfMDA3X2tmcmVlX2NvdW50 JyBieSBvbmUuCisKK0FmdGVyIHRoZSBwcmUgaGFuZGxlciBleGN1dGlvbiBpdCBkb2VzIHRo ZSBzaW5nbGUtc3RlcHBpbmcgb2YgdGhlCitwcm9iZWQgaW5zdHJ1Y3Rpb24uCisKK1doaWxl IHVubG9hZGluZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCksIGl0IGRlcmVnaXN0ZXJzIHRo ZSBrXzAwM19rcAorYW5kIGtfMDAzX2twMSB1c2luZyAndW5yZWdpc3Rlcl9rcHJvYmUoKScg YW5kIGFsc28gcHJpbnRzIHRoZSB0b3RhbAorbnVtYmVyIG9mIF9fa21hbGxvYyBhbmQga2Zy ZWUgY291bnRzLgorCisKKzguIGstMDA4LmMKKworQSBLcHJvYmUgd2l0aCBhIHByb2JlIHBv aW50IHRvIHRoZSBrZXJuZWwgZnVuY3Rpb24gZG9fZ2V0dGltZW9mZGF5LAord2l0aCBhbiBl bXB0eSBwcmUtaGFuZGxlciB3aGljaCBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIHRoZSBLcHJv YmVzCitvdmVyaGVhZC4KKworREVTQ1JJUFRJT046CitJdCBoYXMgYSBrZXJuZWwgcHJvYmUg J2tfMDA4X2twMScgb2YgdGhlIHR5cGUgYHN0cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVs ZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRsZXJzIGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBw cmUtaGFuZGxlciAgICA6IGtfMDA4X3ByZV9oYW5kbGVyCisKK0FuZCB0aGUgcHJvYmVkIGFk ZGRyZXNzIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoImRvX2dldHRpbWVvZmRheSIpLgor CitXaGVuIHRoaXMgbW9kdWxlIGlzIGluc2VydGVkIHVzaW5nIGluc21vZCwgaXQgcmVnaXN0 ZXJzIHRoZSBrXzAwOF9rcDEKK3VzaW5nICdyZWdpc3Rlcl9rcHJvYmUoJmtfMDA4X2twMSkn LgorCitXaGVuIHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnZG9fZ2V0dGltZW9m ZGF5JyBpcyBoaXQsIEtwcm9iZXMKK2NhbGxzIHVzZXIgZGVmaW5lZCBlbXB0eSBwcmUgaGFu ZGxlciAna18wMDhfcHJlX2hhbmRsZXIoKScuCisKK0FmdGVyIHRoZSBwcmUgaGFuZGxlciBl eGN1dGlvbiBpdCBkb2VzIHRoZSBzaW5nbGUtc3RlcHBpbmcgb2YgdGhlIHByb2JlZAoraW5z dHJ1Y3Rpb24uCisKK1doaWxlIHVubG9hZGluZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCks IGl0IGRlcmVnaXN0ZXJzIHRoZSBrXzAwOF9rcDEKK3VzaW5nICd1bnJlZ2lzdGVyX2twcm9i ZSgpJy4KKworCis5LiBrLTAwOS5jCisKK0EgS3Byb2JlIHdpdGggYSBwcm9iZSBwb2ludCB0 byB0aGUga2VybmVsIGZ1bmN0aW9uIGRvX2dldHRpbWVvZmRheSwKK3dpdGggdGhlIGVtcHR5 IHByZS1oYW5kbGVyIGFuZCBwb3N0LWhhbmRsZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8KK21l YXN1cmUgdGhlIEtwcm9iZXMgb3ZlcmhlYWQuCisKK0RFU0NSSVBUSU9OOgorSXQgaGFzIGEg a2VybmVsIHByb2JlICdrXzAwOV9rcDEnIG9mIHRoZSB0eXBlIGBzdHJ1Y3Qga3Byb2JlYC4K KworVGhpcyBtb2R1bGUgaGFzIHVzZXIgZGVmaW5lZCBoYW5kbGVycyBhcyBmb2xsb3dzOgor MS4gS3Byb2JlJ3MgcHJlLWhhbmRsZXIgICAgOiBrXzAwOV9wcmVfaGFuZGxlcgorMi4gS3By b2JlJ3MgcG9zdC1oYW5kbGVyICAgOiBrXzAwOV9wb3N0X2hhbmRsZXIKKworQW5kIHRoZSBw cm9iZWQgYWRkZHJlc3MgaXMgOiBrYWxsc3ltc19sb29rdXBfbmFtZSgiZG9fZ2V0dGltZW9m ZGF5IikuCisKK1doZW4gdGhpcyBtb2R1bGUgaXMgaW5zZXJ0ZWQgdXNpbmcgaW5zbW9kLCBp dCByZWdpc3RlcnMgdGhlIGtfMDA5X2twMQordXNpbmcgJ3JlZ2lzdGVyX2twcm9iZSgma18w MDlfa3AxKScuCisKK1doZW4gdGhlIGFkcmVzcyBvZiBhIGtlcm5lbCByb3V0aW5lICdkb19n ZXR0aW1lb2ZkYXknIGlzIGhpdCwgS3Byb2JlcworY2FsbHMgdXNlciBkZWZpbmVkIGVtcHR5 IHByZSBoYW5kbGVyICdrXzAwOV9wcmVfaGFuZGxlcigpJy4KKworQWZ0ZXIgdGhlIHByb2Jl ZCBpbnN0cnVjdGlvbiBzaW5nbGUtc3RlcHBlZCwgS3Byb2JlcyBjYWxscyB0aGUgZW1wdHkg cG9zdAoraGFuZGxlciAna18wMDlfcG9zdF9oYW5kbGVyJy4KKworV2hpbGUgdW5sb2FkaW5n IHRoZSBtb2R1bGUgdXNpbmcgcm1tb2QoKSwgaXQgZGVyZWdpc3RlcnMgdGhlIGtfMDA5X2tw MQordXNpbmcgJ3VucmVnaXN0ZXJfa3Byb2JlKCknLgpJbmRleDogbGludXgtMi42LjE2LjM5 L2twcm9iZS10ZXN0cy9rcHJvYmVzLXRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251 bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4x Ni4zOS9rcHJvYmUtdGVzdHMva3Byb2Jlcy10ZXN0LmgJMjAwNy0wMy0xMiAxODozMDo1NC4x NjQ2Nzc4MDAgKzA1MzAKQEAgLTAsMCArMSwxMDEgQEAKKyNpZm5kZWYgX0tQUk9CRVNfVEVT VF9ICisjZGVmaW5lIF9LUFJPQkVTX1RFU1RfSAorLyoKKyAqICBrcHJvYmVzLXRlc3QuaCAt IEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBrcHJvYmVzIHRlc3QgZnVuY3Rpb25zLgorICoKKyAq ICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg MDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmZGVmIENPTkZJR19QUEMzMgorI2luY2x1ZGU8 bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUg UkVHCQkiJTA4bFgiCisjZGVmaW5lIFJFR1NfUEVSX0xJTkUJOAorI2RlZmluZSBMQVNUX1ZP TEFUSUxFCTEyCisKK3N0YXRpYyBzdHJ1Y3QgcmVnYml0IHsKKwl1bnNpZ25lZCBsb25nIGJp dDsKKwljb25zdCBjaGFyICpuYW1lOworfSBtc3JfYml0c1tdID0geworCXtNU1JfV0UsCSJX RSJ9LAorCXtNU1JfQ0UsCSJDRSJ9LAorCXtNU1JfRUUsCSJFRSJ9LAorCXtNU1JfUFIsCSJQ UiJ9LAorCXtNU1JfTUUsCSJNRSJ9LAorCXtNU1JfRFdFLAkiRFdFIn0sCisJe01TUl9ERSwJ IkRFIn0sCisJe01TUl9JUywJIklTIn0sCisJe01TUl9EUywJIkRTIn0sCisJezAsCQlOVUxM fQorfTsKKworc3RhdGljIHZvaWQgcHJpbnRiaXRzKHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1 Y3QgcmVnYml0ICpiaXRzKQoreworCWNvbnN0IGNoYXIgKnNlcCA9ICIiOworCisJcHJpbnRr KCI8Iik7CisJZm9yICg7IGJpdHMtPmJpdDsgKytiaXRzKQorCQlpZiAodmFsICYgYml0cy0+ Yml0KSB7CisJCQlwcmludGsoIiVzJXMiLCBzZXAsIGJpdHMtPm5hbWUpOworCQkJc2VwID0g IiwiOworCQl9CisJcHJpbnRrKCI+Iik7Cit9Cit2b2lkIHNob3dfYWxscmVncyhzdHJ1Y3Qg cHRfcmVncyAqIHJlZ3MpCit7CisJaW50IGksIHRyYXA7CisKKwlwcmludGsoIk5JUDogIlJF RyIgTFI6ICJSRUciIENUUjogIlJFRyJcbiIsCisJICAgICAgIHJlZ3MtPm5pcCwgcmVncy0+ bGluaywgcmVncy0+Y3RyKTsKKwlwcmludGsoIlJFR1M6ICVwIFRSQVA6ICUwNGx4ICAgKCVz KVxuIiwKKwkgICAgICAgcmVncywgcmVncy0+dHJhcCwgc3lzdGVtX3V0c25hbWUucmVsZWFz ZSk7CisJcHJpbnRrKCJNU1I6ICJSRUciICIsIHJlZ3MtPm1zcik7CisJcHJpbnRiaXRzKHJl Z3MtPm1zciwgbXNyX2JpdHMpOworCXByaW50aygiICBDUjogJTA4bFggIFhFUjogJTA4bFhc biIsIHJlZ3MtPmNjciwgcmVncy0+eGVyKTsKKwl0cmFwID0gVFJBUChyZWdzKTsKKwlpZiAo dHJhcCA9PSAweDMwMCB8fCB0cmFwID09IDB4NjAwKQorCQlwcmludGsoIkRBUjogIlJFRyIs IERTSVNSOiAiUkVHIlxuIiwgcmVncy0+ZGFyLCByZWdzLT5kc2lzcik7CisJcHJpbnRrKCJU QVNLID0gJXBbJWRdICclcycgVEhSRUFEOiAlcCIsCisJICAgICAgIGN1cnJlbnQsIGN1cnJl bnQtPnBpZCwgY3VycmVudC0+Y29tbSwgdGFza190aHJlYWRfaW5mbyhjdXJyZW50KSk7CisK KyNpZmRlZiBDT05GSUdfU01QCisJcHJpbnRrKCIgQ1BVOiAlZCIsIHNtcF9wcm9jZXNzb3Jf aWQoKSk7CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisJZm9yIChpID0gMDsgIGkgPCAz MjsgIGkrKykgeworCQlpZiAoKGkgJSBSRUdTX1BFUl9MSU5FKSA9PSAwKQorCQkJcHJpbnRr KCJcbiIgS0VSTl9JTkZPICJHUFIlMDJkOiAiLCBpKTsKKwkJcHJpbnRrKFJFRyAiICIsIHJl Z3MtPmdwcltpXSk7CisJCWlmIChpID09IExBU1RfVk9MQVRJTEUgJiYgIUZVTExfUkVHUyhy ZWdzKSkKKwkJCWJyZWFrOworCX0KKwlwcmludGsoIlxuIik7CisjaWZkZWYgQ09ORklHX0tB TExTWU1TCisJLyoKKwkgKiBMb29rdXAgTklQIGxhdGUgc28gd2UgaGF2ZSB0aGUgYmVzdCBj aGFuZ2Ugb2YgZ2V0dGluZyB0aGUKKwkgKiBhYm92ZSBpbmZvIG91dCB3aXRob3V0IGZhaWxp bmcKKwkgKi8KKwlwcmludGsoIk5JUCBbIlJFRyJdICIsIHJlZ3MtPm5pcCk7CisJcHJpbnRf c3ltYm9sKCIlc1xuIiwgcmVncy0+bmlwKTsKKwlwcmludGsoIkxSIFsiUkVHIl0gIiwgcmVn cy0+bGluayk7CisJcHJpbnRfc3ltYm9sKCIlc1xuIiwgcmVncy0+bGluayk7CisjZW5kaWYK K30KKyNlbmRpZgorCisKKyNlbmRpZgpJbmRleDogbGludXgtMi42LjE2LjM5L2FyY2gvcHBj L0tjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42LjE2LjM5Lm9yaWcvYXJjaC9w cGMvS2NvbmZpZwkyMDA3LTAzLTEyIDE4OjI2OjU5LjQ3NjM1NTg0OCArMDUzMAorKysgbGlu dXgtMi42LjE2LjM5L2FyY2gvcHBjL0tjb25maWcJMjAwNy0wMy0xMiAxODoyOTo1Ny45ODky MTc3NjggKzA1MzAKQEAgLTE0MTAsNCArMTQxMCw1IEBACiAJICBmb3Iga2VybmVsIGRlYnVn Z2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuCiAJICBJ ZiBpbiBkb3VidCwgc2F5ICJOIi4KIAorc291cmNlICJrcHJvYmUtdGVzdHMvS2NvbmZpZyIK IGVuZG1lbnUK --Boundary_(ID_Ak4d+0WbLKxvVsoRyqDheA)--