From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: Re: [PATCH 0 of 5] Add credit2 scheduler (EXPERIMENTAL) Date: Thu, 15 Apr 2010 13:33:19 -0400 Message-ID: References: <4BC664E1.7090304@purdue.edu> <4BC71A63.90302@eu.citrix.com> <4BC742C9.7060100@purdue.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d975bc04e62c048449e4a9 Return-path: In-Reply-To: <4BC742C9.7060100@purdue.edu> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Naresh Rapolu Cc: George Dunlap , "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --0016e6d975bc04e62c048449e4a9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Naresh, If you are interested only in profiling, you could use xenoprof too. I had ported xenoprof to pvops (attaching a patch that applies cleanly to linux pvops). I have used this with passive profiling and for profiling xen/dom0. This patch also includes an obvious fix (over oprofile branch in Jeremy's repo) for active profiling, although I didn't get a chance to test. Please let know if you try this and if you face any issues. thanks dulloor On Thu, Apr 15, 2010 at 12:46 PM, Naresh Rapolu wrote: > Hello George, > > I am trying to get linux "perf" tool work with Xen(Virtualize PMU to meas= ure > hardware events from inside guests). > I have the following options : > > =A01. allowing the guest kernel to see the PMU hardware features via > =A0 =A0 cpuid, and then doing whatever is necessary to make them work as > =A0 =A0 expected (by instruction emulation, etc), or > =A02. keeping them hidden, but adding a new Xen interface and the > =A0 =A0 appropriate Linux-side code to detect that interface and use it > > > Does Xenalyze have any code relevant to this ? Can you think of any > directions in this regard ? > > Thanks, > Naresh Rapolu. > > > George Dunlap wrote: >> >> I have not measured cache / TLB misses with this workload yet. =A0In the >> past I've instrumented the scheduler trace records in Xen to include >> performance counters such as instructions executed and cache / tlb misse= s, >> and then used xenalyze (http://xenbits.xensource.com/ext/xenalyze.hg) to >> analyze them. =A0But the functionality for both capture and analysis was= never >> standardized or added to mainline. >> >> I'd be happy to help point you in the right direction if you're interest= ed >> in investing in that approach. :-) >> >> -George >> >> Naresh Rapolu wrote: >>> >>> Hello George, >>> >>> How did you measure =A0Cache/ TLB misses etc while using/profiling this= new >>> scheduler ? =A0Any tool that you`ve used which works with Xen ? >>> >>> Thanks, >>> Naresh Rapolu. >>> PhD Student, Computer Science, >>> Purdue University. >>> >>> George Dunlap wrote: >>> >>>> >>>> This patch series introduces the credit2 scheduler. =A0The first two >>>> patches >>>> introduce changes necessary to allow the credit2 shared runqueue >>>> functionality >>>> to work properly; the last two implement the functionality itself. >>>> >>>> The scheduler is still in the experimental phase. =A0There's lots of >>>> opportunity to contribute with independent lines of development; email >>>> George Dunlap or check out the wiki page >>>> http://wiki.xensource.com/xenwiki/Credit2_Scheduler_Development for >>>> ideas >>>> and status updates. >>>> >>>> 19 files changed, 1453 insertions(+), 21 deletions(-) >>>> tools/libxc/Makefile =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 = =A01 >>>> tools/libxc/xc_csched2.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 50 + >>>> tools/libxc/xenctrl.h =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 = =A08 >>>> tools/python/xen/lowlevel/xc/xc.c =A0 =A0 =A0 =A0 | =A0 58 + >>>> tools/python/xen/xend/XendAPI.py =A0 =A0 =A0 =A0 =A0| =A0 =A03 >>>> tools/python/xen/xend/XendDomain.py =A0 =A0 =A0 | =A0 54 + >>>> tools/python/xen/xend/XendDomainInfo.py =A0 | =A0 =A04 >>>> tools/python/xen/xend/XendNode.py =A0 =A0 =A0 =A0 | =A0 =A04 >>>> tools/python/xen/xend/XendVMMetrics.py =A0 =A0| =A0 =A01 >>>> tools/python/xen/xend/server/SrvDomain.py | =A0 14 tools/python/xen/xm= /main.py >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 82 ++ >>>> xen/arch/ia64/vmx/vmmu.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 =A06= xen/common/Makefile >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 =A01 xen/common/sched_credit= .c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 =A08 >>>> xen/common/sched_credit2.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| 1125 >>>> +++++++++++++++++++++++++++++ >>>> xen/common/schedule.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 22 >>>> xen/include/public/domctl.h =A0 =A0 =A0 =A0 =A0 =A0 =A0 | =A0 =A04 xen= /include/public/trace.h >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 =A01 xen/include/xen/sched-if.h = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0 28 >>>> _______________________________________________ >>>> Xen-devel mailing list >>>> Xen-devel@lists.xensource.com >>>> http://lists.xensource.com/xen-devel >>>> >>> >>> >> > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > --0016e6d975bc04e62c048449e4a9 Content-Type: text/x-patch; charset=US-ASCII; name="xenoprof.patch" Content-Disposition: attachment; filename="xenoprof.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g81ugkhk1 ZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2FyY2gv eDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAppbmRleCA3ZGU5M2YzLi4wNGQ4ZjM4IDEw MDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKKysrIGIvYXJj aC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC00NTAsNiArNDUwLDEyIEBAIEhZ UEVSVklTT1Jfbm1pX29wKHVuc2lnbmVkIGxvbmcgb3AsIHVuc2lnbmVkIGxvbmcgYXJnKQogCXJl dHVybiBfaHlwZXJjYWxsMihpbnQsIG5taV9vcCwgb3AsIGFyZyk7CiB9CiAKK3N0YXRpYyBpbmxp bmUgaW50CitIWVBFUlZJU09SX3hlbm9wcm9mX29wKHVuc2lnbmVkIGludCBvcCwgdm9pZCAqYXJn KQoreworCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHhlbm9wcm9mX29wLCBvcCwgYXJnKTsKK30K Kwogc3RhdGljIGlubGluZSB2b2lkCiBNVUxUSV9mcHVfdGFza3N3aXRjaChzdHJ1Y3QgbXVsdGlj YWxsX2VudHJ5ICptY2wsIGludCBzZXQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmls ZS9NYWtlZmlsZSBiL2FyY2gveDg2L29wcm9maWxlL01ha2VmaWxlCmluZGV4IDQ0NjkwMmIuLjZh OTc2ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL01ha2VmaWxlCisrKyBiL2FyY2gv eDg2L29wcm9maWxlL01ha2VmaWxlCkBAIC02LDYgKzYsMTIgQEAgRFJJVkVSX09CSlMgPSAkKGFk ZHByZWZpeCAuLi8uLi8uLi9kcml2ZXJzL29wcm9maWxlLywgXAogCQlvcHJvZmlsZWZzLm8gb3By b2ZpbGVfc3RhdHMubyAgXAogCQl0aW1lcl9pbnQubyApCiAKK2lmZGVmIENPTkZJR19YRU4KK1hF Tk9QUk9GX0NPTU1PTl9PQkpTID0gJChhZGRwcmVmaXggLi4vLi4vLi4vZHJpdmVycy94ZW4veGVu b3Byb2YvLCBcCisJCQkgeGVub3Byb2ZpbGUubykKK0RSSVZFUl9PQkpTCQkJCTo9ICQoRFJJVkVS X09CSlMpIFwKKwkJCQkJICAgJChYRU5PUFJPRl9DT01NT05fT0JKUykgeGVub3Byb2YubworZW5k aWYgCiBvcHJvZmlsZS15CQkJCTo9ICQoRFJJVkVSX09CSlMpIGluaXQubyBiYWNrdHJhY2Uubwog b3Byb2ZpbGUtJChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpIAkrPSBubWlfaW50Lm8gb3BfbW9kZWxf YW1kLm8gXAogCQkJCQkgICBvcF9tb2RlbF9wcHJvLm8gb3BfbW9kZWxfcDQubwpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYvb3Byb2ZpbGUveGVub3Byb2YuYyBiL2FyY2gveDg2L29wcm9maWxlL3hlbm9w cm9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2ZjFkMAotLS0gL2Rl di9udWxsCisrKyBiL2FyY2gveDg2L29wcm9maWxlL3hlbm9wcm9mLmMKQEAgLTAsMCArMSwxNzIg QEAKKy8qKgorICogQGZpbGUgeGVub3Byb2YuYworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIw MDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAq CisgKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1vdmVtZW50YXJpYW4ub3JnPgorICoKKyAq IE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gYW5kIEpvc2UgUmVuYXRvIFNhbnRvcyBmb3IgWGVu CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds ZXR0LVBhY2thcmQgQ28uCisgKgorICogeDg2LXNwZWNpZmljIHBhcnQKKyAqIENvcHlyaWdodCAo YykgMjAwNiBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAg ICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqLworCisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29wcm9maWxlLmg+CisjaW5jbHVk ZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8 YXNtL3BndGFibGUuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CisjaW5jbHVk ZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KKyNpbmNsdWRlIDx4ZW4veGVuLW9wcy5oPgorI2luY2x1 ZGUgPHhlbi9pbnRlcmZhY2UveGVub3Byb2YuaD4KKyNpbmNsdWRlIDx4ZW4veGVub3Byb2YuaD4K KyNpbmNsdWRlICJvcF9jb3VudGVyLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX2V2ZW50 cyA9IDA7CitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgeGVuX2NvdW50ZXJfY29uZmlnW09QX01B WF9DT1VOVEVSXTsKKwordm9pZCBfX2luaXQgeGVub3Byb2ZfYXJjaF9pbml0X2NvdW50ZXIoc3Ry dWN0IHhlbm9wcm9mX2luaXQgKmluaXQpCit7CisJbnVtX2V2ZW50cyA9IGluaXQtPm51bV9ldmVu dHM7CisJLyoganVzdCBpbiBjYXNlIC0gbWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyZmxvdyBldmVu dCBsaXN0IAorCSAgIChpLmUuIHhlbl9jb3VudGVyX2NvbmZpZyBsaXN0KSAqLworCWlmIChudW1f ZXZlbnRzID4gT1BfTUFYX0NPVU5URVIpIHsKKwkJbnVtX2V2ZW50cyA9IE9QX01BWF9DT1VOVEVS OworCQlpbml0LT5udW1fZXZlbnRzID0gbnVtX2V2ZW50czsKKwl9Cit9CisKK3ZvaWQgeGVub3By b2ZfYXJjaF9jb3VudGVyKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHhlbm9wcm9mX2NvdW50 ZXIgY291bnRlcjsKKworCWZvciAoaT0wOyBpPG51bV9ldmVudHM7IGkrKykgeworCQljb3VudGVy LmluZCAgICAgICA9IGk7CisJCWNvdW50ZXIuY291bnQgICAgID0gKHVpbnQ2NF90KXhlbl9jb3Vu dGVyX2NvbmZpZ1tpXS5jb3VudDsKKwkJY291bnRlci5lbmFibGVkICAgPSAodWludDMyX3QpeGVu X2NvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQ7CisJCWNvdW50ZXIuZXZlbnQgICAgID0gKHVpbnQz Ml90KXhlbl9jb3VudGVyX2NvbmZpZ1tpXS5ldmVudDsKKwkJY291bnRlci5rZXJuZWwgICAgPSAo dWludDMyX3QpeGVuX2NvdW50ZXJfY29uZmlnW2ldLmtlcm5lbDsKKwkJY291bnRlci51c2VyICAg ICAgPSAodWludDMyX3QpeGVuX2NvdW50ZXJfY29uZmlnW2ldLnVzZXI7CisJCWNvdW50ZXIudW5p dF9tYXNrID0gKHVpbnQ2NF90KXhlbl9jb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2s7CisJCVdB Uk5fT04oSFlQRVJWSVNPUl94ZW5vcHJvZl9vcChYRU5PUFJPRl9jb3VudGVyLAorCQkJCQkgICAg ICAgJmNvdW50ZXIpKTsKKwl9Cit9CisKK3ZvaWQgeGVub3Byb2ZfYXJjaF9zdGFydCh2b2lkKSAK K3sKKwkvKiBub3RoaW5nICovCit9CisKK3ZvaWQgeGVub3Byb2ZfYXJjaF9zdG9wKHZvaWQpCit7 CisJLyogbm90aGluZyAqLworfQorCit2b2lkIHhlbm9wcm9mX2FyY2hfdW5tYXBfc2hhcmVkX2J1 ZmZlcihzdHJ1Y3QgeGVub3Byb2Zfc2hhcmVkX2J1ZmZlciAqIHNidWYpCit7CisJaWYgKHNidWYt PmJ1ZmZlcikgeworCQl2dW5tYXAoc2J1Zi0+YnVmZmVyKTsKKwkJc2J1Zi0+YnVmZmVyID0gTlVM TDsKKwl9Cit9CisKK2ludCB4ZW5vcHJvZl9hcmNoX21hcF9zaGFyZWRfYnVmZmVyKHN0cnVjdCB4 ZW5vcHJvZl9nZXRfYnVmZmVyICogZ2V0X2J1ZmZlciwKKwkJCQkgICAgc3RydWN0IHhlbm9wcm9m X3NoYXJlZF9idWZmZXIgKiBzYnVmKQoreworCWludCBucGFnZXMsIHJldDsKKwlzdHJ1Y3Qgdm1f c3RydWN0ICphcmVhOworCisJc2J1Zi0+YnVmZmVyID0gTlVMTDsKKwlpZiAoIChyZXQgPSBIWVBF UlZJU09SX3hlbm9wcm9mX29wKFhFTk9QUk9GX2dldF9idWZmZXIsIGdldF9idWZmZXIpKSApCisJ CXJldHVybiByZXQ7CisKKwlucGFnZXMgPSAoZ2V0X2J1ZmZlci0+YnVmc2l6ZSAqIGdldF9idWZm ZXItPm5idWYgLSAxKSAvIFBBR0VfU0laRSArIDE7CisKKwlhcmVhID0gYWxsb2Nfdm1fYXJlYShu cGFnZXMgKiBQQUdFX1NJWkUpOworCWlmIChhcmVhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVN OworCisJaWYgKCAocmV0ID0geGVuX3JlbWFwX2RvbWFpbl9rZXJuZWxfbWZuX3JhbmdlKAorCQkg ICAgICAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyLAorCQkgICAgICBnZXRfYnVmZmVyLT5idWZf Z21hZGRyID4+IFBBR0VfU0hJRlQsCisJCSAgICAgIG5wYWdlcywgX19wZ3Byb3QoX0tFUk5QR19U QUJMRSksCisJCSAgICAgIERPTUlEX1NFTEYpKSApIHsKKwkJdnVubWFwKGFyZWEtPmFkZHIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXNidWYtPmJ1ZmZlciA9IGFyZWEtPmFkZHI7CisJcmV0dXJu IHJldDsKK30KKworaW50IHhlbm9wcm9mX2FyY2hfc2V0X3Bhc3NpdmUoc3RydWN0IHhlbm9wcm9m X3Bhc3NpdmUgKiBwZG9tYWluLAorCQkJICAgICAgc3RydWN0IHhlbm9wcm9mX3NoYXJlZF9idWZm ZXIgKiBzYnVmKQoreworCWludCByZXQ7CisJaW50IG5wYWdlczsKKwlzdHJ1Y3Qgdm1fc3RydWN0 ICphcmVhOworCXBncHJvdF90IHByb3QgPSBfX3BncHJvdChfS0VSTlBHX1RBQkxFKTsKKworCXNi dWYtPmJ1ZmZlciA9IE5VTEw7CisKKwlyZXQgPSBIWVBFUlZJU09SX3hlbm9wcm9mX29wKFhFTk9Q Uk9GX3NldF9wYXNzaXZlLCBwZG9tYWluKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCW5w YWdlcyA9IChwZG9tYWluLT5idWZzaXplICogcGRvbWFpbi0+bmJ1ZiAtIDEpIC8gUEFHRV9TSVpF ICsgMTsKKworCWFyZWEgPSBhbGxvY192bV9hcmVhKG5wYWdlcyAqIFBBR0VfU0laRSk7CisJaWYg KGFyZWEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwly ZXQgPSB4ZW5fcmVtYXBfZG9tYWluX2tlcm5lbF9tZm5fcmFuZ2UoCisJCSh1bnNpZ25lZCBsb25n KWFyZWEtPmFkZHIgJiBQQUdFX01BU0ssCisJCXBkb21haW4tPmJ1Zl9nbWFkZHIgPj4gUEFHRV9T SElGVCwKKwkJbnBhZ2VzLCBwcm90LCBET01JRF9TRUxGKTsKKwlpZiAocmV0KSB7CisJCXZ1bm1h cChhcmVhLT5hZGRyKTsKKwkJZ290byBvdXQ7CisJfQorCXNidWYtPmJ1ZmZlciA9IGFyZWEtPmFk ZHI7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCB4ZW5vcHJvZl9jcmVhdGVfZmls ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290KQoreworCXVu c2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7ICsraSkgeworCQlz dHJ1Y3QgZGVudHJ5ICogZGlyOworCQljaGFyIGJ1ZlsyXTsKKyAKKwkJc25wcmludGYoYnVmLCAy LCAiJWQiLCBpKTsKKwkJZGlyID0gb3Byb2ZpbGVmc19ta2RpcihzYiwgcm9vdCwgYnVmKTsKKwkJ b3Byb2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImVuYWJsZWQiLAorCQkJCQkmeGVuX2Nv dW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpOworCQlvcHJvZmlsZWZzX2NyZWF0ZV91bG9uZyhzYiwg ZGlyLCAiZXZlbnQiLAorCQkJCQkmeGVuX2NvdW50ZXJfY29uZmlnW2ldLmV2ZW50KTsKKwkJb3By b2ZpbGVmc19jcmVhdGVfdWxvbmcoc2IsIGRpciwgImNvdW50IiwKKwkJCQkJJnhlbl9jb3VudGVy X2NvbmZpZ1tpXS5jb3VudCk7CisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJ1 bml0X21hc2siLAorCQkJCQkmeGVuX2NvdW50ZXJfY29uZmlnW2ldLnVuaXRfbWFzayk7CisJCW9w cm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIsICJrZXJuZWwiLAorCQkJCQkmeGVuX2NvdW50 ZXJfY29uZmlnW2ldLmtlcm5lbCk7CisJCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCBkaXIs ICJ1c2VyIiwKKwkJCQkJJnhlbl9jb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9t bXUuYwppbmRleCBjNWUzMWNiLi43YTIyMmViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11 LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0yMzUxLDMwICsyMzUxLDMwIEBAIHN0YXRp YyBpbnQgcmVtYXBfYXJlYV9tZm5fcHRlX2ZuKHB0ZV90ICpwdGVwLCBwZ3RhYmxlX3QgdG9rZW4s CiAJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcmVtYXBf ZGF0YSAqcm1kID0gZGF0YTsKLQlwdGVfdCBwdGUgPSBwdGVfbWtzcGVjaWFsKHBmbl9wdGUocm1k LT5tZm4rKywgcm1kLT5wcm90KSk7CisJcHRlX3QgcHRlID0gcHRlX21rc3BlY2lhbChwZm5fcHRl KHJtZC0+bWZuLCBybWQtPnByb3QpKTsKIAogCXJtZC0+bW11X3VwZGF0ZS0+cHRyID0gYXJiaXRy YXJ5X3ZpcnRfdG9fbWFjaGluZShwdGVwKS5tYWRkcjsKIAlybWQtPm1tdV91cGRhdGUtPnZhbCA9 IHB0ZV92YWxfbWEocHRlKTsKKworCXJtZC0+bWZuKys7CiAJcm1kLT5tbXVfdXBkYXRlKys7CiAK IAlyZXR1cm4gMDsKIH0KIAotaW50IHhlbl9yZW1hcF9kb21haW5fbWZuX3JhbmdlKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAg ICAgICB1bnNpZ25lZCBsb25nIG1mbiwgaW50IG5yLAotCQkJICAgICAgIHBncHJvdF90IHByb3Qs IHVuc2lnbmVkIGRvbWlkKQorc3RhdGljIGludCBfX3hlbl9yZW1hcF9kb21haW5fbWZuX3Jhbmdl KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQl1bnNp Z25lZCBsb25nIG1mbiwgaW50IG5yLAorCQkJCXBncHJvdF90IHByb3QsIHVuc2lnbmVkIGRvbWlk KQogewogCXN0cnVjdCByZW1hcF9kYXRhIHJtZDsKIAlzdHJ1Y3QgbW11X3VwZGF0ZSBtbXVfdXBk YXRlW1JFTUFQX0JBVENIX1NJWkVdOwogCWludCBiYXRjaDsKIAl1bnNpZ25lZCBsb25nIHJhbmdl OwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAKIAlwcm90ID0gX19wZ3Byb3QocGdwcm90X3Zh bChwcm90KSB8IF9QQUdFX0lPTUFQKTsKIAotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9S RVNFUlZFRCB8IFZNX1BGTk1BUDsKLQogCXJtZC5tZm4gPSBtZm47CiAJcm1kLnByb3QgPSBwcm90 OwogCkBAIC0yMzgzLDE0ICsyMzgzLDE2IEBAIGludCB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5n ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJcmFuZ2UgPSAodW5zaWduZWQgbG9uZyli YXRjaCA8PCBQQUdFX1NISUZUOwogCiAJCXJtZC5tbXVfdXBkYXRlID0gbW11X3VwZGF0ZTsKLQkJ ZXJyID0gYXBwbHlfdG9fcGFnZV9yYW5nZSh2bWEtPnZtX21tLCBhZGRyLCByYW5nZSwKKworCQll cnIgPSBhcHBseV90b19wYWdlX3JhbmdlKG1tLCBhZGRyLCByYW5nZSwKIAkJCQkJICByZW1hcF9h cmVhX21mbl9wdGVfZm4sICZybWQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJZXJy ID0gLUVGQVVMVDsKLQkJaWYgKEhZUEVSVklTT1JfbW11X3VwZGF0ZShtbXVfdXBkYXRlLCBiYXRj aCwgTlVMTCwgZG9taWQpIDwgMCkKKwkJaWYgKEhZUEVSVklTT1JfbW11X3VwZGF0ZShtbXVfdXBk YXRlLCBiYXRjaCwgTlVMTCwgZG9taWQpIDwgMCkgeworCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdv dG8gb3V0OworCQl9CiAKIAkJbnIgLT0gYmF0Y2g7CiAJCWFkZHIgKz0gcmFuZ2U7CkBAIC0yMzk4 LDEzICsyNDAwLDMzIEBAIGludCB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZShzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwKIAogCWVyciA9IDA7CiBvdXQ6Ci0KIAlmbHVzaF90bGJfYWxsKCk7 Ci0KIAlyZXR1cm4gZXJyOwogfQorCitpbnQgeGVuX3JlbWFwX2RvbWFpbl9tZm5fcmFuZ2Uoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAor CQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLCBpbnQgbnIsCisJCQkgICAgICAgcGdwcm90X3Qg cHJvdCwgdW5zaWduZWQgZG9taWQpCit7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1f UkVTRVJWRUQgfCBWTV9QRk5NQVA7CisKKwlyZXR1cm4gX194ZW5fcmVtYXBfZG9tYWluX21mbl9y YW5nZSh2bWEtPnZtX21tLCBhZGRyLCAKKwkJCQkJbWZuLCBuciwgcHJvdCwgZG9taWQpOworfQog RVhQT1JUX1NZTUJPTF9HUEwoeGVuX3JlbWFwX2RvbWFpbl9tZm5fcmFuZ2UpOwogCisKK2ludCB4 ZW5fcmVtYXBfZG9tYWluX2tlcm5lbF9tZm5fcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLAorCQkJ ICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuLCBpbnQgbnIsCisJCQkgICAgICAgcGdwcm90X3QgcHJv dCwgdW5zaWduZWQgZG9taWQpCit7CisJcmV0dXJuIF9feGVuX3JlbWFwX2RvbWFpbl9tZm5fcmFu Z2UoJmluaXRfbW0sIGFkZHIsIAorCQkJCQltZm4sIG5yLCBwcm90LCBkb21pZCk7Cit9CitFWFBP UlRfU1lNQk9MX0dQTCh4ZW5fcmVtYXBfZG9tYWluX2tlcm5lbF9tZm5fcmFuZ2UpOworCiAjaWZk ZWYgQ09ORklHX1hFTl9ERUJVR19GUwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZF9tbXVfZGVi dWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJz L29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggODU3NDYyMi4uODU2MTM5ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUv YnVmZmVyX3N5bmMuYwpAQCAtNDIsNiArNDIsMTAgQEAgc3RhdGljIGNwdW1hc2tfdmFyX3QgbWFy a2VkX2NwdXM7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRhc2tfbW9ydHVhcnkpOwogc3RhdGlj IHZvaWQgcHJvY2Vzc190YXNrX21vcnR1YXJ5KHZvaWQpOwogCisjaWZkZWYgQ09ORklHX1hFTgor c3RhdGljIGludCBjcHVfY3VycmVudF94ZW5fZG9tYWluW05SX0NQVVNdOworI2VuZGlmCisKIC8q IFRha2Ugb3duZXJzaGlwIG9mIHRoZSB0YXNrIHN0cnVjdCBhbmQgcGxhY2UgaXQgb24gdGhlCiAg KiBsaXN0IGZvciBwcm9jZXNzaW5nLiBPbmx5IGFmdGVyIHR3byBmdWxsIGJ1ZmZlciBzeW5jcwog ICogZG9lcyB0aGUgdGFzayBldmVudHVhbGx5IGdldCBmcmVlZCwgYmVjYXVzZSBieSB0aGVuCkBA IC0xNTQsMTAgKzE1OCwxNiBAQCBpbnQgc3luY19zdGFydCh2b2lkKQogewogCWludCBlcnI7CiAK KyNpZmRlZiBDT05GSUdfWEVOCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsg aSsrKQorCQljcHVfY3VycmVudF94ZW5fZG9tYWluW2ldID0gWEVOX0NPT1JESU5BVE9SX0RPTUFJ TjsKKyNlbmRpZgorCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmbWFya2VkX2NwdXMsIEdGUF9L RVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAljcHVtYXNrX2NsZWFyKG1hcmtlZF9jcHVzKTsK LQogCXN0YXJ0X2NwdV93b3JrKCk7CiAKIAllcnIgPSB0YXNrX2hhbmRvZmZfcmVnaXN0ZXIoJnRh c2tfZnJlZV9uYik7CkBAIC0yODUsMTQgKzI5NSwzNyBAQCBzdGF0aWMgdm9pZCBhZGRfY3B1X3N3 aXRjaChpbnQgaSkKIAlsYXN0X2Nvb2tpZSA9IElOVkFMSURfQ09PS0lFOwogfQogCi1zdGF0aWMg dm9pZCBhZGRfa2VybmVsX2N0eF9zd2l0Y2godW5zaWduZWQgaW50IGluX2tlcm5lbCkKK3N0YXRp YyB2b2lkIGFkZF9jcHVfbW9kZV9zd2l0Y2godW5zaWduZWQgaW50IGNwdV9tb2RlKQoreworCWFk ZF9ldmVudF9lbnRyeShFU0NBUEVfQ09ERSk7CisJc3dpdGNoKGNwdV9tb2RlKQorCXsKKwkJY2Fz ZSBDUFVfTU9ERV9VU0VSOgorCQkJYWRkX2V2ZW50X2VudHJ5KFVTRVJfRU5URVJfU1dJVENIX0NP REUpOworCQkJYnJlYWs7CisJCWNhc2UgQ1BVX01PREVfS0VSTkVMOgorCQkJYWRkX2V2ZW50X2Vu dHJ5KEtFUk5FTF9FTlRFUl9TV0lUQ0hfQ09ERSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdf WEVOCisJCWNhc2UgQ1BVX01PREVfWEVOOgorCQkJYWRkX2V2ZW50X2VudHJ5KFhFTl9FTlRFUl9T V0lUQ0hfQ09ERSk7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ fQorCisJcmV0dXJuOworfQorCisjaWZkZWYgQ09ORklHX1hFTgorc3RhdGljIHZvaWQgYWRkX3hl bl9kb21haW5fc3dpdGNoKHVuc2lnbmVkIGxvbmcgZG9tYWluX2lkKQogewogCWFkZF9ldmVudF9l bnRyeShFU0NBUEVfQ09ERSk7Ci0JaWYgKGluX2tlcm5lbCkKLQkJYWRkX2V2ZW50X2VudHJ5KEtF Uk5FTF9FTlRFUl9TV0lUQ0hfQ09ERSk7Ci0JZWxzZQotCQlhZGRfZXZlbnRfZW50cnkoS0VSTkVM X0VYSVRfU1dJVENIX0NPREUpOworCWFkZF9ldmVudF9lbnRyeShYRU5fRE9NQUlOX1NXSVRDSF9D T0RFKTsKKwlhZGRfZXZlbnRfZW50cnkoZG9tYWluX2lkKTsKIH0KKyNlbmRpZgogCiBzdGF0aWMg dm9pZAogYWRkX3VzZXJfY3R4X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgY29uc3QgKnRhc2ss IHVuc2lnbmVkIGxvbmcgY29va2llKQpAQCAtMzcyLDEyICs0MDUsMTIgQEAgc3RhdGljIGlubGlu ZSB2b2lkIGFkZF9zYW1wbGVfZW50cnkodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxv bmcgZXZlbnQpCiAgKiBmb3IgbGF0ZXIgbG9va3VwIGZyb20gdXNlcnNwYWNlLiBSZXR1cm4gMCBv biBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1hZGRfc2FtcGxlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLCBzdHJ1Y3Qgb3Bfc2FtcGxlICpzLCBpbnQgaW5fa2VybmVsKQorYWRkX3NhbXBsZShzdHJ1 Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG9wX3NhbXBsZSAqcywgaW50IGNwdV9tb2RlKQogewog CXVuc2lnbmVkIGxvbmcgY29va2llOwogCW9mZl90IG9mZnNldDsKIAotCWlmIChpbl9rZXJuZWwp IHsKKwlpZiAoY3B1X21vZGUgPj0gQ1BVX01PREVfS0VSTkVMKSB7CiAJCWFkZF9zYW1wbGVfZW50 cnkocy0+ZWlwLCBzLT5ldmVudCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTUwMiw3ICs1MzUsNyBA QCB2b2lkIHN5bmNfYnVmZmVyKGludCBjcHUpCiAJdW5zaWduZWQgbG9uZyB2YWw7CiAJc3RydWN0 IHRhc2tfc3RydWN0ICpuZXc7CiAJdW5zaWduZWQgbG9uZyBjb29raWUgPSAwOwotCWludCBpbl9r ZXJuZWwgPSAxOworCWludCBjcHVfbW9kZSA9IENQVV9NT0RFX0tFUk5FTDsKIAlzeW5jX2J1ZmZl cl9zdGF0ZSBzdGF0ZSA9IHNiX2J1ZmZlcl9zdGFydDsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNp Z25lZCBsb25nIGF2YWlsYWJsZTsKQEAgLTUxNCw2ICs1NDcsMTMgQEAgdm9pZCBzeW5jX2J1ZmZl cihpbnQgY3B1KQogCiAJYWRkX2NwdV9zd2l0Y2goY3B1KTsKIAorI2lmZGVmIENPTkZJR19YRU4K KwkvKiBXZSBuZWVkIHRvIGFzc2lnbiB0aGUgZmlyc3Qgc2FtcGxlcyBpbiB0aGlzIENQVSBidWZm ZXIgdG8gdGhlCisJICogc2FtZSBkb21haW4gdGhhdCB3ZSB3ZXJlIHByb2Nlc3NpbmcgYXQgdGhl IGxhc3Qgc3luY19idWZmZXIgKi8KKwlpZihjcHVfY3VycmVudF94ZW5fZG9tYWluW2NwdV0gIT0g WEVOX0NPT1JESU5BVE9SX0RPTUFJTikKKwkJYWRkX3hlbl9kb21haW5fc3dpdGNoKGNwdV9jdXJy ZW50X3hlbl9kb21haW5bY3B1XSk7CisjZW5kaWYKKwogCW9wX2NwdV9idWZmZXJfcmVzZXQoY3B1 KTsKIAlhdmFpbGFibGUgPSBvcF9jcHVfYnVmZmVyX2VudHJpZXMoY3B1KTsKIApAQCAtNTMwLDEw ICs1NzAsMTEgQEAgdm9pZCBzeW5jX2J1ZmZlcihpbnQgY3B1KQogCQkJfQogCQkJaWYgKGZsYWdz ICYgS0VSTkVMX0NUWF9TV0lUQ0gpIHsKIAkJCQkvKiBrZXJuZWwvdXNlcnNwYWNlIHN3aXRjaCAq LwotCQkJCWluX2tlcm5lbCA9IGZsYWdzICYgSVNfS0VSTkVMOworCQkJCS8qIFhYWDogY3JhcCBj aGFuZ2UgdGhpcyB0byB1c2UgY3B1X21vZGUgZXhwbGljaXRseSAqLworCQkJCWNwdV9tb2RlID0g ZmxhZ3MgJiBDUFVfTU9ERV9NQVNLOwogCQkJCWlmIChzdGF0ZSA9PSBzYl9idWZmZXJfc3RhcnQp CiAJCQkJCXN0YXRlID0gc2Jfc2FtcGxlX3N0YXJ0OwotCQkJCWFkZF9rZXJuZWxfY3R4X3N3aXRj aChmbGFncyAmIElTX0tFUk5FTCk7CisJCQkJYWRkX2NwdV9tb2RlX3N3aXRjaChjcHVfbW9kZSk7 CiAJCQl9CiAJCQlpZiAoZmxhZ3MgJiBVU0VSX0NUWF9TV0lUQ0gKIAkJCSAgICAmJiBvcF9jcHVf YnVmZmVyX2dldF9kYXRhKCZlbnRyeSwgJnZhbCkpIHsKQEAgLTU0NiwxNiArNTg3LDMyIEBAIHZv aWQgc3luY19idWZmZXIoaW50IGNwdSkKIAkJCQkJY29va2llID0gZ2V0X2V4ZWNfZGNvb2tpZSht bSk7CiAJCQkJYWRkX3VzZXJfY3R4X3N3aXRjaChuZXcsIGNvb2tpZSk7CiAJCQl9CisjaWZkZWYg Q09ORklHX1hFTgorCQkJLyogeGVuIGRvbWFpbiBzd2l0Y2ggKi8KKwkJCWlmIChmbGFncyAmIFhF Tl9ET01BSU5fU1dJVENICisJCQkJJiYgb3BfY3B1X2J1ZmZlcl9nZXRfZGF0YSgmZW50cnksICZ2 YWwpKSB7CisJCQkJY3B1X2N1cnJlbnRfeGVuX2RvbWFpbltjcHVdID0gdmFsOworCQkJCWFkZF94 ZW5fZG9tYWluX3N3aXRjaCh2YWwpOworCQkJfQorI2VuZGlmCiAJCQlpZiAob3BfY3B1X2J1ZmZl cl9nZXRfc2l6ZSgmZW50cnkpKQogCQkJCWFkZF9kYXRhKCZlbnRyeSwgbW0pOwogCQkJY29udGlu dWU7CiAJCX0KIAorI2lmZGVmIENPTkZJR19YRU4KKwkJaWYoY3B1X2N1cnJlbnRfeGVuX2RvbWFp bltjcHVdICE9IFhFTl9DT09SRElOQVRPUl9ET01BSU4pCisJCXsKKwkJCWFkZF9zYW1wbGVfZW50 cnkoc2FtcGxlLT5laXAsIHNhbXBsZS0+ZXZlbnQpOworCQkJY29udGludWU7CisJCX0KKyNlbmRp ZgorCQkJCiAJCWlmIChzdGF0ZSA8IHNiX2J0X3N0YXJ0KQogCQkJLyogaWdub3JlIHNhbXBsZSAq LwogCQkJY29udGludWU7CiAKLQkJaWYgKGFkZF9zYW1wbGUobW0sIHNhbXBsZSwgaW5fa2VybmVs KSkKKwkJaWYgKGFkZF9zYW1wbGUobW0sIHNhbXBsZSwgY3B1X21vZGUpKQogCQkJY29udGludWU7 CiAKIAkJLyogaWdub3JlIGJhY2t0cmFjZXMgaWYgZmFpbGVkIHRvIGFkZCBhIHNhbXBsZSAqLwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9m aWxlL2NwdV9idWZmZXIuYwppbmRleCAyNDIyNTdiLi4yMTk1OWYxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL29wcm9maWxlL2NwdV9idWZmZXIuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2NwdV9idWZm ZXIuYwpAQCAtNTUsNiArNTUsMTEgQEAgc3RhdGljIHZvaWQgd3Ffc3luY19idWZmZXIoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKTsKICNkZWZpbmUgREVGQVVMVF9USU1FUl9FWFBJUkUgKEhaIC8g MTApCiBzdGF0aWMgaW50IHdvcmtfZW5hYmxlZDsKIAorCisjaWZkZWYgQ09ORklHX1hFTgorc3Rh dGljIGludCBjdXJyZW50X3hlbl9kb21haW4gPSBYRU5fQ09PUkRJTkFUT1JfRE9NQUlOOworI2Vu ZGlmCisKIHVuc2lnbmVkIGxvbmcgb3Byb2ZpbGVfZ2V0X2NwdV9idWZmZXJfc2l6ZSh2b2lkKQog ewogCXJldHVybiBvcHJvZmlsZV9jcHVfYnVmZmVyX3NpemU7CkBAIC05OSw3ICsxMDQsNyBAQCBp bnQgYWxsb2NfY3B1X2J1ZmZlcnModm9pZCkKIAkJc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIg KmIgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBpKTsKIAogCQliLT5sYXN0X3Rhc2sgPSBOVUxMOwot CQliLT5sYXN0X2lzX2tlcm5lbCA9IC0xOworCQliLT5sYXN0X2NwdV9tb2RlID0gLTE7CiAJCWIt PnRyYWNpbmcgPSAwOwogCQliLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOwogCQliLT5zYW1w bGVfcmVjZWl2ZWQgPSAwOwpAQCAtMjE3LDcgKzIyMiw3IEBAIHVuc2lnbmVkIGxvbmcgb3BfY3B1 X2J1ZmZlcl9lbnRyaWVzKGludCBjcHUpCiAKIHN0YXRpYyBpbnQKIG9wX2FkZF9jb2RlKHN0cnVj dCBvcHJvZmlsZV9jcHVfYnVmZmVyICpjcHVfYnVmLCB1bnNpZ25lZCBsb25nIGJhY2t0cmFjZSwK LQkgICAgaW50IGlzX2tlcm5lbCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorCSAgICBpbnQg Y3B1X21vZGUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlzdHJ1Y3Qgb3BfZW50cnkg ZW50cnk7CiAJc3RydWN0IG9wX3NhbXBsZSAqc2FtcGxlOwpAQCAtMjI5LDE3ICsyMzQsMjAgQEAg b3BfYWRkX2NvZGUoc3RydWN0IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYsIHVuc2lnbmVk IGxvbmcgYmFja3RyYWNlLAogCWlmIChiYWNrdHJhY2UpCiAJCWZsYWdzIHw9IFRSQUNFX0JFR0lO OwogCi0JLyogbm90aWNlIGEgc3dpdGNoIGZyb20gdXNlci0+a2VybmVsIG9yIHZpY2UgdmVyc2Eg Ki8KLQlpc19rZXJuZWwgPSAhIWlzX2tlcm5lbDsKLQlpZiAoY3B1X2J1Zi0+bGFzdF9pc19rZXJu ZWwgIT0gaXNfa2VybmVsKSB7Ci0JCWNwdV9idWYtPmxhc3RfaXNfa2VybmVsID0gaXNfa2VybmVs OwotCQlmbGFncyB8PSBLRVJORUxfQ1RYX1NXSVRDSDsKLQkJaWYgKGlzX2tlcm5lbCkKLQkJCWZs YWdzIHw9IElTX0tFUk5FTDsKKwkvKiBzd2l0Y2ggaW4gY3B1X21vZGUgKi8KKwlpZiAoY3B1X2J1 Zi0+bGFzdF9jcHVfbW9kZSAhPSBjcHVfbW9kZSkgeworCQljcHVfYnVmLT5sYXN0X2NwdV9tb2Rl ID0gY3B1X21vZGU7CisJCWZsYWdzIHw9IChLRVJORUxfQ1RYX1NXSVRDSCB8IGNwdV9tb2RlKTsK IAl9CiAKIAkvKiBub3RpY2UgYSB0YXNrIHN3aXRjaCAqLworLyogWFhYOiB5dWNrICEgZG8gc29t ZXRoaW5nIGFib3V0IHRoaXMgdG9vLiAqLworI2lmbmRlZiBDT05GSUdfWEVOCiAJaWYgKGNwdV9i dWYtPmxhc3RfdGFzayAhPSB0YXNrKSB7CisjZWxzZQorCWlmICgoY3B1X2J1Zi0+bGFzdF90YXNr ICE9IHRhc2spCisJCSYmIChjdXJyZW50X3hlbl9kb21haW4gPT0gWEVOX0NPT1JESU5BVE9SX0RP TUFJTikpIHsKKyNlbmRpZgogCQljcHVfYnVmLT5sYXN0X3Rhc2sgPSB0YXNrOwogCQlmbGFncyB8 PSBVU0VSX0NUWF9TV0lUQ0g7CiAJfQpAQCAtMjg4LDE0ICsyOTYsMTQgQEAgb3BfYWRkX3NhbXBs ZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwKIC8qCiAgKiBUaGlzIG11c3Qg YmUgc2FmZSBmcm9tIGFueSBjb250ZXh0LgogICoKLSAqIGlzX2tlcm5lbCBpcyBuZWVkZWQgYmVj YXVzZSBvbiBzb21lIGFyY2hpdGVjdHVyZXMgeW91IGNhbm5vdAotICogdGVsbCBpZiB5b3UgYXJl IGluIGtlcm5lbCBvciB1c2VyIHNwYWNlIHNpbXBseSBieSBsb29raW5nIGF0Ci0gKiBwYy4gV2Ug dGFnIHRoaXMgaW4gdGhlIGJ1ZmZlciBieSBnZW5lcmF0aW5nIGtlcm5lbCBlbnRlci9leGl0Cisg KiBjcHVfbW9kZSBpcyBuZWVkZWQgYmVjYXVzZSBvbiBzb21lIGFyY2hpdGVjdHVyZXMgeW91IGNh bm5vdAorICogdGVsbCBpZiB5b3UgYXJlIGluIHVzZXIva2VybmVsKC94ZW4pIHNwYWNlIHNpbXBs eSBieSBsb29raW5nIGF0CisgKiBwYy4gV2UgdGFnIHRoaXMgaW4gdGhlIGJ1ZmZlciBieSBnZW5l cmF0aW5nIHVzZXIva2VybmVsKC94ZW4pIGVudGVyCiAgKiBldmVudHMgd2hlbmV2ZXIgaXNfa2Vy bmVsIGNoYW5nZXMKICAqLwogc3RhdGljIGludAogbG9nX3NhbXBsZShzdHJ1Y3Qgb3Byb2ZpbGVf Y3B1X2J1ZmZlciAqY3B1X2J1ZiwgdW5zaWduZWQgbG9uZyBwYywKLQkgICB1bnNpZ25lZCBsb25n IGJhY2t0cmFjZSwgaW50IGlzX2tlcm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCkKKwkgICB1bnNp Z25lZCBsb25nIGJhY2t0cmFjZSwgaW50IGNwdV9tb2RlLCB1bnNpZ25lZCBsb25nIGV2ZW50KQog ewogCWNwdV9idWYtPnNhbXBsZV9yZWNlaXZlZCsrOwogCkBAIC0zMDQsNyArMzEyLDcgQEAgbG9n X3NhbXBsZShzdHJ1Y3Qgb3Byb2ZpbGVfY3B1X2J1ZmZlciAqY3B1X2J1ZiwgdW5zaWduZWQgbG9u ZyBwYywKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKG9wX2FkZF9jb2RlKGNwdV9idWYsIGJhY2t0 cmFjZSwgaXNfa2VybmVsLCBjdXJyZW50KSkKKwlpZiAob3BfYWRkX2NvZGUoY3B1X2J1ZiwgYmFj a3RyYWNlLCBjcHVfbW9kZSwgY3VycmVudCkpCiAJCWdvdG8gZmFpbDsKIAogCWlmIChvcF9hZGRf c2FtcGxlKGNwdV9idWYsIHBjLCBldmVudCkpCkBAIC00MTQsMTIgKzQyMiwyNyBAQCBpbnQgb3By b2ZpbGVfd3JpdGVfY29tbWl0KHN0cnVjdCBvcF9lbnRyeSAqZW50cnkpCiAJcmV0dXJuIG9wX2Nw dV9idWZmZXJfd3JpdGVfY29tbWl0KGVudHJ5KTsKIH0KIAorLyogWFhYOiB5dWNrICEgTmVlZHMg Y2xlYW4tdXAgKi8KIHZvaWQgb3Byb2ZpbGVfYWRkX3BjKHVuc2lnbmVkIGxvbmcgcGMsIGludCBp c19rZXJuZWwsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCiB7CiAJc3RydWN0IG9wcm9maWxlX2NwdV9i dWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKIAlsb2dfc2FtcGxl KGNwdV9idWYsIHBjLCAwLCBpc19rZXJuZWwsIGV2ZW50KTsKIH0KIAorLyoKKyAqIEVxdWl2YWxl bnQgdG8gbG9nX3NhbXBsZShiLCBFU0NBUEVfQ09ERSwgMSwgY3B1X21vZGUsIENQVV9UUkFDRV9C RUdJTiksCisgKiBQcmV2aW91c2x5IGFjY2Vzc2libGUgdGhyb3VnaCBvcHJvZmlsZV9hZGRfcGMo KS4KKyAqLwordm9pZCBvcHJvZmlsZV9hZGRfbW9kZShpbnQgY3B1X21vZGUpCit7CisJc3RydWN0 IG9wcm9maWxlX2NwdV9idWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVy KTsKKworCWlmIChvcF9hZGRfY29kZShjcHVfYnVmLCAxLCBjcHVfbW9kZSwgY3VycmVudCkpCisJ CWNwdV9idWYtPnNhbXBsZV9sb3N0X292ZXJmbG93Kys7CisKKwlyZXR1cm47Cit9CisKIHZvaWQg b3Byb2ZpbGVfYWRkX3RyYWNlKHVuc2lnbmVkIGxvbmcgcGMpCiB7CiAJc3RydWN0IG9wcm9maWxl X2NwdV9idWZmZXIgKmNwdV9idWYgPSAmX19nZXRfY3B1X3ZhcihjcHVfYnVmZmVyKTsKQEAgLTQ0 NCw2ICs0NjcsMjggQEAgZmFpbDoKIAlyZXR1cm47CiB9CiAKKyNpZmRlZiBDT05GSUdfWEVOCitp bnQgb3Byb2ZpbGVfYWRkX2RvbWFpbl9zd2l0Y2goaW50MzJfdCBkb21haW5faWQpCit7CisJc3Ry dWN0IG9wX2VudHJ5IGVudHJ5OworCXN0cnVjdCBvcF9zYW1wbGUgKnNhbXBsZTsKKworCXNhbXBs ZSA9IG9wX2NwdV9idWZmZXJfd3JpdGVfcmVzZXJ2ZSgmZW50cnksIDEpOworCWlmICghc2FtcGxl KQorICAgICAgICAJcmV0dXJuIDA7CisKKwlzYW1wbGUtPmVpcCA9IEVTQ0FQRV9DT0RFOworCXNh bXBsZS0+ZXZlbnQgPSBYRU5fRE9NQUlOX1NXSVRDSDsKKworCW9wX2NwdV9idWZmZXJfYWRkX2Rh dGEoJmVudHJ5LCBkb21haW5faWQpOworCW9wX2NwdV9idWZmZXJfd3JpdGVfY29tbWl0KCZlbnRy eSk7CisKKwljdXJyZW50X3hlbl9kb21haW4gPSBkb21haW5faWQ7CisKKwlyZXR1cm4gMTsKK30K KyNlbmRpZgorCiAvKgogICogVGhpcyBzZXJ2ZXMgdG8gYXZvaWQgY3B1IGJ1ZmZlciBvdmVyZmxv dywgYW5kIG1ha2VzIHN1cmUKICAqIHRoZSB0YXNrIG1vcnR1YXJ5IHByb2dyZXNzZXMKZGlmZiAt LWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5oIGIvZHJpdmVycy9vcHJvZmlsZS9j cHVfYnVmZmVyLmgKaW5kZXggMjcyOTk1ZC4uOTViZTRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9v cHJvZmlsZS9jcHVfYnVmZmVyLmgKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmgK QEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IG9wX2VudHJ5Owogc3RydWN0IG9wcm9maWxlX2NwdV9i dWZmZXIgewogCXVuc2lnbmVkIGxvbmcgYnVmZmVyX3NpemU7CiAJc3RydWN0IHRhc2tfc3RydWN0 ICpsYXN0X3Rhc2s7Ci0JaW50IGxhc3RfaXNfa2VybmVsOworCWludCBsYXN0X2NwdV9tb2RlOwog CWludCB0cmFjaW5nOwogCXVuc2lnbmVkIGxvbmcgc2FtcGxlX3JlY2VpdmVkOwogCXVuc2lnbmVk IGxvbmcgc2FtcGxlX2xvc3Rfb3ZlcmZsb3c7CkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBpbmxp bmUgdm9pZCBvcF9jcHVfYnVmZmVyX3Jlc2V0KGludCBjcHUpCiB7CiAJc3RydWN0IG9wcm9maWxl X2NwdV9idWZmZXIgKmNwdV9idWYgPSAmcGVyX2NwdShjcHVfYnVmZmVyLCBjcHUpOwogCi0JY3B1 X2J1Zi0+bGFzdF9pc19rZXJuZWwgPSAtMTsKKwljcHVfYnVmLT5sYXN0X2NwdV9tb2RlID0gLTE7 CiAJY3B1X2J1Zi0+bGFzdF90YXNrID0gTlVMTDsKIH0KIApAQCAtMTExLDEwICsxMTEsMjIgQEAg aW50IG9wX2NwdV9idWZmZXJfZ2V0X2RhdGEoc3RydWN0IG9wX2VudHJ5ICplbnRyeSwgdW5zaWdu ZWQgbG9uZyAqdmFsKQogCXJldHVybiBzaXplOwogfQogCisvKiBkYXRhIGZsYWdzICovCisvKiBj cHUgbW9kZXMgKi8KKy8qICovCisjZGVmaW5lIENQVV9NT0RFX0JFR0lOCQkoMFVMKQorI2RlZmlu ZSBDUFVfTU9ERV9VU0VSCQkoQ1BVX01PREVfQkVHSU4gKyAweDApCisjZGVmaW5lIENQVV9NT0RF X0tFUk5FTAkJKENQVV9NT0RFX0JFR0lOICsgMHgxKQorI2lmZGVmIENPTkZJR19YRU4KKyNkZWZp bmUgQ1BVX01PREVfWEVOCQkoQ1BVX01PREVfQkVHSU4gKyAweDIpCisjZW5kaWYKKyNkZWZpbmUg Q1BVX01PREVfRU5ECQkoQ1BVX01PREVfQkVHSU4gKyAweDMpCisjZGVmaW5lIENQVV9NT0RFX01B U0sJCTB4MworCiAvKiBleHRyYSBkYXRhIGZsYWdzICovCi0jZGVmaW5lIEtFUk5FTF9DVFhfU1dJ VENICSgxVUwgPDwgMCkKLSNkZWZpbmUgSVNfS0VSTkVMCQkoMVVMIDw8IDEpCiAjZGVmaW5lIFRS QUNFX0JFR0lOCQkoMVVMIDw8IDIpCiAjZGVmaW5lIFVTRVJfQ1RYX1NXSVRDSAkJKDFVTCA8PCAz KQorI2RlZmluZSBLRVJORUxfQ1RYX1NXSVRDSAkoMVVMIDw8IDQpCisjZGVmaW5lIFhFTl9ET01B SU5fU1dJVENICSgxVUwgPDwgNSkKIAogI2VuZGlmIC8qIE9QUk9GSUxFX0NQVV9CVUZGRVJfSCAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuaCBiL2RyaXZlcnMv b3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmgKaW5kZXggNGU3MDc0OS4uOWYxOWQ0MiAxMDA2NDQKLS0t IGEvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuaAorKysgYi9kcml2ZXJzL29wcm9maWxl L2V2ZW50X2J1ZmZlci5oCkBAIC0zMCw2ICszMCwxMSBAQCB2b2lkIHdha2VfdXBfYnVmZmVyX3dh aXRlcih2b2lkKTsKICNkZWZpbmUgSU5WQUxJRF9DT09LSUUgfjBVTAogI2RlZmluZSBOT19DT09L SUUgMFVMCiAKKyNpZmRlZiBDT05GSUdfWEVOCisjZGVmaW5lIFhFTl9DT09SRElOQVRPUl9ET01B SU4gLTEKKyNlbmRpZgorCisKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV2 ZW50X2J1ZmZlcl9mb3BzOwogCiAvKiBtdXRleCBiZXR3ZWVuIHN5bmNfY3B1X2J1ZmZlcnMoKSBh bmQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMgYi9kcml2ZXJzL29w cm9maWxlL29wcm9mLmMKaW5kZXggM2NmZmNlOS4uZDFkOGEyNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9vcHJvZmlsZS9vcHJvZi5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYwpAQCAtMjAs NiArMjAsMTEgQEAKICNpbmNsdWRlICJidWZmZXJfc3luYy5oIgogI2luY2x1ZGUgIm9wcm9maWxl X3N0YXRzLmgiCiAKKyNpZmRlZiBDT05GSUdfWEVOCisjaW5jbHVkZSA8eGVuL3hlbm9wcm9mLmg+ CisjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CisjZW5kaWYKKwogc3RydWN0IG9wcm9m aWxlX29wZXJhdGlvbnMgb3Byb2ZpbGVfb3BzOwogCiB1bnNpZ25lZCBsb25nIG9wcm9maWxlX3N0 YXJ0ZWQ7CkBAIC0zMyw2ICszOCwzNSBAQCBzdGF0aWMgREVGSU5FX01VVEVYKHN0YXJ0X211dGV4 KTsKICAqLwogc3RhdGljIGludCB0aW1lciA9IDA7CiAKKyNpZmRlZiBDT05GSUdfWEVOCitpbnQg b3Byb2ZpbGVfeGVuX3NldF9hY3RpdmUoaW50IGFjdGl2ZV9kb21haW5zW10sIHVuc2lnbmVkIGlu dCBhZG9tYWlucykKK3sKKwlpbnQgZXJyOworCisJaWYgKCFvcHJvZmlsZV9vcHMueGVuX3NldF9h Y3RpdmUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmc3RhcnRfbXV0ZXgpOwor CWVyciA9IG9wcm9maWxlX29wcy54ZW5fc2V0X2FjdGl2ZShhY3RpdmVfZG9tYWlucywgYWRvbWFp bnMpOworCW11dGV4X3VubG9jaygmc3RhcnRfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK2lu dCBvcHJvZmlsZV94ZW5fc2V0X3Bhc3NpdmUoaW50IHBhc3NpdmVfZG9tYWluc1tdLCB1bnNpZ25l ZCBpbnQgcGRvbWFpbnMpCit7CisJaW50IGVycjsKKworCWlmICghb3Byb2ZpbGVfb3BzLnhlbl9z ZXRfcGFzc2l2ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZzdGFydF9tdXRl eCk7CisJZXJyID0gb3Byb2ZpbGVfb3BzLnhlbl9zZXRfcGFzc2l2ZShwYXNzaXZlX2RvbWFpbnMs IHBkb21haW5zKTsKKwltdXRleF91bmxvY2soJnN0YXJ0X211dGV4KTsKKwlyZXR1cm4gZXJyOwor fQorI2VuZGlmCisKKwogaW50IG9wcm9maWxlX3NldHVwKHZvaWQpCiB7CiAJaW50IGVycjsKQEAg LTE4Miw4ICsyMTYsMjEgQEAgb3V0Ogogc3RhdGljIGludCBfX2luaXQgb3Byb2ZpbGVfaW5pdCh2 b2lkKQogewogCWludCBlcnI7Ci0KLQllcnIgPSBvcHJvZmlsZV9hcmNoX2luaXQoJm9wcm9maWxl X29wcyk7CisgICAgaW50ICgqb3Byb2ZpbGVfYXJjaF9pbml0X2Z1bmMpKHN0cnVjdCBvcHJvZmls ZV9vcGVyYXRpb25zICogb3BzKTsKKyAgICB2b2lkICgqb3Byb2ZpbGVfYXJjaF9leGl0X2Z1bmMp KHZvaWQpOworCisgICAgaWYgKHhlbl9wdl9kb21haW4oKSkKKyAgICB7CisgICAgICAgIG9wcm9m aWxlX2FyY2hfaW5pdF9mdW5jID0geGVub3Byb2ZpbGVfaW5pdDsKKyAgICAgICAgb3Byb2ZpbGVf YXJjaF9leGl0X2Z1bmMgPSB4ZW5vcHJvZmlsZV9leGl0OworICAgIH0KKyAgICBlbHNlCisgICAg eworICAgICAgICBvcHJvZmlsZV9hcmNoX2luaXRfZnVuYyA9IG9wcm9maWxlX2FyY2hfaW5pdDsK KyAgICAgICAgb3Byb2ZpbGVfYXJjaF9leGl0X2Z1bmMgPSBvcHJvZmlsZV9hcmNoX2V4aXQ7Cisg ICAgfQorCisJZXJyID0gb3Byb2ZpbGVfYXJjaF9pbml0X2Z1bmMoJm9wcm9maWxlX29wcyk7CiAK IAlpZiAoZXJyIDwgMCB8fCB0aW1lcikgewogCQlwcmludGsoS0VSTl9JTkZPICJvcHJvZmlsZTog dXNpbmcgdGltZXIgaW50ZXJydXB0LlxuIik7CkBAIC0xOTIsNyArMjM5LDcgQEAgc3RhdGljIGlu dCBfX2luaXQgb3Byb2ZpbGVfaW5pdCh2b2lkKQogCiAJZXJyID0gb3Byb2ZpbGVmc19yZWdpc3Rl cigpOwogCWlmIChlcnIpCi0JCW9wcm9maWxlX2FyY2hfZXhpdCgpOworCQlvcHJvZmlsZV9hcmNo X2V4aXRfZnVuYygpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3By b2ZpbGUvb3Byb2YuaCBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuaAppbmRleCBjMjg4ZDNjLi5l NjU5NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL29wcm9mLmgKKysrIGIvZHJpdmVy cy9vcHJvZmlsZS9vcHJvZi5oCkBAIC0zNiw0ICszNiw5IEBAIHZvaWQgb3Byb2ZpbGVfdGltZXJf aW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKTsKIAogaW50IG9wcm9maWxlX3Nl dF9iYWNrdHJhY2UodW5zaWduZWQgbG9uZyBkZXB0aCk7CiAKKyNpZmRlZiBDT05GSUdfWEVOCitp bnQgb3Byb2ZpbGVfeGVuX3NldF9hY3RpdmUoaW50IGFjdGl2ZV9kb21haW5zW10sIHVuc2lnbmVk IGludCBhZG9tYWlucyk7CitpbnQgb3Byb2ZpbGVfeGVuX3NldF9wYXNzaXZlKGludCBwYXNzaXZl X2RvbWFpbnNbXSwgdW5zaWduZWQgaW50IHBkb21haW5zKTsKKyNlbmRpZgorCiAjZW5kaWYgLyog T1BST0ZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5j IGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZmlsZV9maWxlcy5jCmluZGV4IDVkMzZmZmMuLmMxMzE4 YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVfZmlsZXMuYworKysgYi9k cml2ZXJzL29wcm9maWxlL29wcm9maWxlX2ZpbGVzLmMKQEAgLTksNiArOSwxMSBAQAogCiAjaW5j bHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgorI2luY2x1ZGUg PGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGlu dXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KIAogI2luY2x1ZGUgImV2ZW50X2J1 ZmZlci5oIgogI2luY2x1ZGUgIm9wcm9maWxlX3N0YXRzLmgiCkBAIC0xMjMsNiArMTI4LDIwNyBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdW1wX2ZvcHMgPSB7CiAJLndy aXRlCQk9IGR1bXBfd3JpdGUsCiB9OwogCisjaWZkZWYgQ09ORklHX1hFTgorCisjZGVmaW5lIFRN UEJVRlNJWkUgNTEyCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWRvbWFpbnMgPSAwOworc3RhdGlj IGludCBhY3RpdmVfZG9tYWluc1tNQVhfT1BST0ZfRE9NQUlOUyArIDFdOworc3RhdGljIERFRklO RV9NVVRFWChhZG9tX211dGV4KTsKKworc3RhdGljIHNzaXplX3QgYWRvbWFpbl93cml0ZShzdHJ1 Y3QgZmlsZSAqIGZpbGUsIGNoYXIgY29uc3QgX191c2VyICogYnVmLAorCQkJICAgICBzaXplX3Qg Y291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3sKKwljaGFyICp0bXBidWY7CisJY2hhciAqc3RhcnRw LCAqZW5kcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzc2l6ZV90IHJldHZhbCA9 IGNvdW50OworCisJaWYgKCpvZmZzZXQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3VudCA+ IFRNUEJVRlNJWkUgLSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKHRtcGJ1ZiA9IGtt YWxsb2MoVE1QQlVGU0laRSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlm IChjb3B5X2Zyb21fdXNlcih0bXBidWYsIGJ1ZiwgY291bnQpKSB7CisJCWtmcmVlKHRtcGJ1Zik7 CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl0bXBidWZbY291bnRdID0gMDsKKworCW11dGV4X2xv Y2soJmFkb21fbXV0ZXgpOworCisJc3RhcnRwID0gdG1wYnVmOworCS8qIFBhcnNlIG9uZSBtb3Jl IHRoYW4gTUFYX09QUk9GX0RPTUFJTlMsIGZvciBlYXN5IGVycm9yIGNoZWNraW5nICovCisJZm9y IChpID0gMDsgaSA8PSBNQVhfT1BST0ZfRE9NQUlOUzsgaSsrKSB7CisJCXZhbCA9IHNpbXBsZV9z dHJ0b3VsKHN0YXJ0cCwgJmVuZHAsIDApOworCQlpZiAoZW5kcCA9PSBzdGFydHApCisJCQlicmVh azsKKwkJd2hpbGUgKGlzcHVuY3QoKmVuZHApIHx8IGlzc3BhY2UoKmVuZHApKQorCQkJZW5kcCsr OworCQlhY3RpdmVfZG9tYWluc1tpXSA9IHZhbDsKKwkJaWYgKGFjdGl2ZV9kb21haW5zW2ldICE9 IHZhbCkKKwkJCS8qIE92ZXJmbG93LCBmb3JjZSBlcnJvciBiZWxvdyAqLworCQkJaSA9IE1BWF9P UFJPRl9ET01BSU5TICsgMTsKKwkJc3RhcnRwID0gZW5kcDsKKwl9CisJLyogRm9yY2UgZXJyb3Ig b24gdHJhaWxpbmcganVuayAqLworCWFkb21haW5zID0gKnN0YXJ0cCA/IE1BWF9PUFJPRl9ET01B SU5TICsgMSA6IGk7CisKKwlrZnJlZSh0bXBidWYpOworCisJaWYgKGFkb21haW5zID4gTUFYX09Q Uk9GX0RPTUFJTlMKKwkgICAgfHwgb3Byb2ZpbGVfeGVuX3NldF9hY3RpdmUoYWN0aXZlX2RvbWFp bnMsIGFkb21haW5zKSkgeworCQlhZG9tYWlucyA9IDA7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJ fQorCisJbXV0ZXhfdW5sb2NrKCZhZG9tX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitz dGF0aWMgc3NpemVfdCBhZG9tYWluX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNl ciAqIGJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3sKKwljaGFy ICogdG1wYnVmOworCXNpemVfdCBsZW47CisJaW50IGk7CisJc3NpemVfdCByZXR2YWw7CisKKwlp ZiAoISh0bXBidWYgPSBrbWFsbG9jKFRNUEJVRlNJWkUsIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZhZG9tX211dGV4KTsKKworCWxlbiA9IDA7CisJZm9y IChpID0gMDsgaSA8IGFkb21haW5zOyBpKyspCisJCWxlbiArPSBzbnByaW50Zih0bXBidWYgKyBs ZW4sCisJCQkJbGVuIDwgVE1QQlVGU0laRSA/IFRNUEJVRlNJWkUgLSBsZW4gOiAwLAorCQkJCSIl dSAiLCBhY3RpdmVfZG9tYWluc1tpXSk7CisJV0FSTl9PTihsZW4gPiBUTVBCVUZTSVpFKTsKKwlp ZiAobGVuICE9IDAgJiYgbGVuIDw9IFRNUEJVRlNJWkUpCisJCXRtcGJ1ZltsZW4tMV0gPSAnXG4n OworCisJbXV0ZXhfdW5sb2NrKCZhZG9tX211dGV4KTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFk X2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIG9mZnNldCwgdG1wYnVmLCBsZW4pOworCisJa2ZyZWUo dG1wYnVmKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmls ZV9vcGVyYXRpb25zIGFjdGl2ZV9kb21haW5fb3BzID0geworCS5yZWFkCQk9IGFkb21haW5fcmVh ZCwKKwkud3JpdGUJCT0gYWRvbWFpbl93cml0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg cGRvbWFpbnMgPSAwOworc3RhdGljIGludCBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJ TlNdOworc3RhdGljIERFRklORV9NVVRFWChwZG9tX211dGV4KTsKKworc3RhdGljIHNzaXplX3Qg cGRvbWFpbl93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgY29uc3QgX191c2VyICogYnVm LAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3sKKwljaGFyICp0bXBi dWY7CisJY2hhciAqc3RhcnRwLCAqZW5kcDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhbDsK Kwlzc2l6ZV90IHJldHZhbCA9IGNvdW50OworCisJaWYgKCpvZmZzZXQpCisJCXJldHVybiAtRUlO VkFMOworCWlmIChjb3VudCA+IFRNUEJVRlNJWkUgLSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmICghKHRtcGJ1ZiA9IGttYWxsb2MoVE1QQlVGU0laRSwgR0ZQX0tFUk5FTCkpKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcih0bXBidWYsIGJ1ZiwgY291bnQpKSB7 CisJCWtmcmVlKHRtcGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwl0bXBidWZbY291bnRd ID0gMDsKKworCW11dGV4X2xvY2soJnBkb21fbXV0ZXgpOworCisJc3RhcnRwID0gdG1wYnVmOwor CS8qIFBhcnNlIG9uZSBtb3JlIHRoYW4gTUFYX09QUk9GX0RPTUFJTlMsIGZvciBlYXN5IGVycm9y IGNoZWNraW5nICovCisJZm9yIChpID0gMDsgaSA8PSBNQVhfT1BST0ZfRE9NQUlOUzsgaSsrKSB7 CisJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0YXJ0cCwgJmVuZHAsIDApOworCQlpZiAoZW5kcCA9 PSBzdGFydHApCisJCQlicmVhazsKKwkJd2hpbGUgKGlzcHVuY3QoKmVuZHApIHx8IGlzc3BhY2Uo KmVuZHApKQorCQkJZW5kcCsrOworCQlwYXNzaXZlX2RvbWFpbnNbaV0gPSB2YWw7CisJCWlmIChw YXNzaXZlX2RvbWFpbnNbaV0gIT0gdmFsKQorCQkJLyogT3ZlcmZsb3csIGZvcmNlIGVycm9yIGJl bG93ICovCisJCQlpID0gTUFYX09QUk9GX0RPTUFJTlMgKyAxOworCQlzdGFydHAgPSBlbmRwOwor CX0KKwkvKiBGb3JjZSBlcnJvciBvbiB0cmFpbGluZyBqdW5rICovCisJcGRvbWFpbnMgPSAqc3Rh cnRwID8gTUFYX09QUk9GX0RPTUFJTlMgKyAxIDogaTsKKworCWtmcmVlKHRtcGJ1Zik7CisKKwlp ZiAocGRvbWFpbnMgPiBNQVhfT1BST0ZfRE9NQUlOUykKKwl7CisJCXBkb21haW5zID0gMDsKKwkJ cmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCQorCWlmKG9wcm9maWxlX3hlbl9z ZXRfcGFzc2l2ZShwYXNzaXZlX2RvbWFpbnMsIHBkb21haW5zKSkKKwl7CisJCXBkb21haW5zID0g MDsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJbXV0ZXhf dW5sb2NrKCZwZG9tX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVf dCBwZG9tYWluX3JlYWQoc3RydWN0IGZpbGUgKiBmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZiwKKwkJ CSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3sKKwljaGFyICogdG1wYnVmOwor CXNpemVfdCBsZW47CisJaW50IGk7CisJc3NpemVfdCByZXR2YWw7CisKKwlpZiAoISh0bXBidWYg PSBrbWFsbG9jKFRNUEJVRlNJWkUsIEdGUF9LRVJORUwpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwltdXRleF9sb2NrKCZwZG9tX211dGV4KTsKKworCWxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8 IHBkb21haW5zOyBpKyspCisJCWxlbiArPSBzbnByaW50Zih0bXBidWYgKyBsZW4sCisJCQkJbGVu IDwgVE1QQlVGU0laRSA/IFRNUEJVRlNJWkUgLSBsZW4gOiAwLAorCQkJCSIldSAiLCBwYXNzaXZl X2RvbWFpbnNbaV0pOworCVdBUk5fT04obGVuID4gVE1QQlVGU0laRSk7CisJaWYgKGxlbiAhPSAw ICYmIGxlbiA8PSBUTVBCVUZTSVpFKQorCQl0bXBidWZbbGVuLTFdID0gJ1xuJzsKKworCW11dGV4 X3VubG9jaygmcGRvbV9tdXRleCk7CisKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZl cihidWYsIGNvdW50LCBvZmZzZXQsIHRtcGJ1ZiwgbGVuKTsKKworCWtmcmVlKHRtcGJ1Zik7CisJ cmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg cGFzc2l2ZV9kb21haW5fb3BzID0geworCS5yZWFkCQk9IHBkb21haW5fcmVhZCwKKwkud3JpdGUJ CT0gcGRvbWFpbl93cml0ZSwKK307CisKKyNlbmRpZiAvKiBDT05GSUdfWEVOICovCiB2b2lkIG9w cm9maWxlX2NyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZGVudHJ5 ICpyb290KQogewogCS8qIHJlaW5pdGlhbGl6ZSBkZWZhdWx0IHZhbHVlcyAqLwpAQCAtMTMyLDYg KzMzOCwxMCBAQCB2b2lkIG9wcm9maWxlX2NyZWF0ZV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnNiLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQogCiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZShzYiwg cm9vdCwgImVuYWJsZSIsICZlbmFibGVfZm9wcyk7CiAJb3Byb2ZpbGVmc19jcmVhdGVfZmlsZV9w ZXJtKHNiLCByb290LCAiZHVtcCIsICZkdW1wX2ZvcHMsIDA2NjYpOworI2lmZGVmIENPTkZJR19Y RU4KKwlvcHJvZmlsZWZzX2NyZWF0ZV9maWxlKHNiLCByb290LCAiYWN0aXZlX2RvbWFpbnMiLCAm YWN0aXZlX2RvbWFpbl9vcHMpOworCW9wcm9maWxlZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsICJw YXNzaXZlX2RvbWFpbnMiLCAmcGFzc2l2ZV9kb21haW5fb3BzKTsKKyNlbmRpZgogCW9wcm9maWxl ZnNfY3JlYXRlX2ZpbGUoc2IsIHJvb3QsICJidWZmZXIiLCAmZXZlbnRfYnVmZmVyX2ZvcHMpOwog CW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCByb290LCAiYnVmZmVyX3NpemUiLCAmb3Byb2Zp bGVfYnVmZmVyX3NpemUpOwogCW9wcm9maWxlZnNfY3JlYXRlX3Vsb25nKHNiLCByb290LCAiYnVm ZmVyX3dhdGVyc2hlZCIsICZvcHJvZmlsZV9idWZmZXJfd2F0ZXJzaGVkKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMveGVuL3hlbm9wcm9mL3hlbm9wcm9maWxlLmMgYi9kcml2ZXJzL3hlbi94ZW5vcHJv Zi94ZW5vcHJvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmI2 MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3hlbi94ZW5vcHJvZi94ZW5vcHJvZmlsZS5j CkBAIC0wLDAgKzEsNTQ3IEBACisvKioKKyAqIEBmaWxlIHhlbm9wcm9maWxlLmMKKyAqCisgKiBA cmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0 aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uIDxsZXZvbkBtb3ZlbWVu dGFyaWFuLm9yZz4KKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGFuZCBKb3NlIFJl bmF0byBTYW50b3MgZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5 cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICoKKyAqIFNlcGFyYXRlZCBvdXQg YXJjaC1nZW5lcmljIHBhcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJc2FrdSBZYW1haGF0YSA8 eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51 eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2lu Y2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVk ZSA8bGludXgvb3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8 bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8eGVu L2V2dGNobi5oPgorI2luY2x1ZGUgPHhlbi9ldmVudHMuaD4KKyNpbmNsdWRlIDx4ZW4veGVub3By b2YuaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9pbnRl cmZhY2UveGVub3Byb2YuaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL29wcm9maWxlL2Nw dV9idWZmZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1 ZmZlci5oIgorCisjZGVmaW5lIE1BWF9YRU5PUFJPRl9TQU1QTEVTIDE2CisKKy8qIHNhbXBsZSBi dWZmZXJzIHNoYXJlZCB3aXRoIFhlbiAqLworc3RhdGljIHhlbm9wcm9mX2J1Zl90ICp4ZW5vcHJv Zl9idWZbTUFYX1ZJUlRfQ1BVU107CisvKiBTaGFyZWQgYnVmZmVyIGFyZWEgKi8KK3N0YXRpYyBz dHJ1Y3QgeGVub3Byb2Zfc2hhcmVkX2J1ZmZlciBzaGFyZWRfYnVmZmVyOworCisvKiBQYXNzaXZl IHNhbXBsZSBidWZmZXJzIHNoYXJlZCB3aXRoIFhlbiAqLworc3RhdGljIHhlbm9wcm9mX2J1Zl90 ICpwX3hlbm9wcm9mX2J1ZltNQVhfT1BST0ZfRE9NQUlOU11bTUFYX1ZJUlRfQ1BVU107CisvKiBQ YXNzaXZlIHNoYXJlZCBidWZmZXIgYXJlYSAqLworc3RhdGljIHN0cnVjdCB4ZW5vcHJvZl9zaGFy ZWRfYnVmZmVyIHBfc2hhcmVkX2J1ZmZlcltNQVhfT1BST0ZfRE9NQUlOU107CisKK3N0YXRpYyBp bnQgeGVub3Byb2Zfc3RhcnQodm9pZCk7CitzdGF0aWMgdm9pZCB4ZW5vcHJvZl9zdG9wKHZvaWQp OworCitzdGF0aWMgaW50IHhlbm9wcm9mX2VuYWJsZWQgPSAwOworc3RhdGljIGludCB4ZW5vcHJv Zl9pc19wcmltYXJ5ID0gMDsKK3N0YXRpYyBpbnQgYWN0aXZlX2RlZmluZWQ7CisKK2V4dGVybiB1 bnNpZ25lZCBsb25nIG9wcm9maWxlX2JhY2t0cmFjZV9kZXB0aDsKKworLyogTnVtYmVyIG9mIGJ1 ZmZlcnMgaW4gc2hhcmVkIGFyZWEgKG9uZSBwZXIgVkNQVSkgKi8KK3N0YXRpYyBpbnQgbmJ1ZjsK Ky8qIE1hcHBpbmdzIG9mIFZJUlFfWEVOT1BST0YgdG8gaXJxIG51bWJlciAocGVyIGNwdSkgKi8K K3N0YXRpYyBpbnQgb3ZmX2lycVtOUl9DUFVTXTsKKy8qIGNwdSBtb2RlbCB0eXBlIHN0cmluZyAt IGNvcGllZCBmcm9tIFhlbiBvbiBYRU5PUFJPRl9pbml0IGNvbW1hbmQgKi8KK3N0YXRpYyBjaGFy IGNwdV90eXBlW1hFTk9QUk9GX0NQVV9UWVBFX1NJWkVdOworCisjaWZkZWYgQ09ORklHX1BNCisK K3N0YXRpYyBpbnQgeGVub3Byb2Zfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldiwgcG1f bWVzc2FnZV90IHN0YXRlKQoreworCWlmICh4ZW5vcHJvZl9lbmFibGVkID09IDEpCisJCXhlbm9w cm9mX3N0b3AoKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHhlbm9wcm9mX3Jlc3Vt ZShzdHJ1Y3Qgc3lzX2RldmljZSAqIGRldikKK3sKKwlpZiAoeGVub3Byb2ZfZW5hYmxlZCA9PSAx KQorCQl4ZW5vcHJvZl9zdGFydCgpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qg c3lzZGV2X2NsYXNzIG9wcm9maWxlX3N5c2NsYXNzID0geworCS5uYW1lIAkJPSAib3Byb2ZpbGUi LAorCS5yZXN1bWUJCT0geGVub3Byb2ZfcmVzdW1lLAorCS5zdXNwZW5kCT0geGVub3Byb2Zfc3Vz cGVuZAorfTsKKworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgZGV2aWNlX29wcm9maWxlID0g eworCS5pZAk9IDAsCisJLmNscwk9ICZvcHJvZmlsZV9zeXNjbGFzcywKK307CisKKworc3RhdGlj IGludCBfX2luaXQgaW5pdF9kcml2ZXJmcyh2b2lkKQoreworCWludCBlcnJvcjsKKwlpZiAoIShl cnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmb3Byb2ZpbGVfc3lzY2xhc3MpKSkKKwkJZXJy b3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmRldmljZV9vcHJvZmlsZSk7CisJcmV0dXJuIGVycm9yOwor fQorCisKK3N0YXRpYyB2b2lkIGV4aXRfZHJpdmVyZnModm9pZCkKK3sKKwlzeXNkZXZfdW5yZWdp c3RlcigmZGV2aWNlX29wcm9maWxlKTsKKwlzeXNkZXZfY2xhc3NfdW5yZWdpc3Rlcigmb3Byb2Zp bGVfc3lzY2xhc3MpOworfQorCisjZWxzZQorI2RlZmluZSBpbml0X2RyaXZlcmZzKCkgZG8geyB9 IHdoaWxlICgwKQorI2RlZmluZSBleGl0X2RyaXZlcmZzKCkgZG8geyB9IHdoaWxlICgwKQorI2Vu ZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG9wcm9maWxl X3NhbXBsZXM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHBfb3Byb2ZpbGVfc2FtcGxlczsK Kworc3RhdGljIHVuc2lnbmVkIGludCBwZG9tYWluczsKK3N0YXRpYyBzdHJ1Y3QgeGVub3Byb2Zf cGFzc2l2ZSBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJTlNdOworCisvKiBDaGVjayB3 aGV0aGVyIHRoZSBnaXZlbiBlbnRyeSBpcyBhbiBlc2NhcGUgY29kZSAqLworc3RhdGljIGludCB4 ZW5vcHJvZl9pc19lc2NhcGUoeGVub3Byb2ZfYnVmX3QgKiBidWYsIGludCB0YWlsKQoreworCXJl dHVybiAoYnVmLT5ldmVudF9sb2dbdGFpbF0uZWlwID09IFhFTk9QUk9GX0VTQ0FQRV9DT0RFKTsK K30KKworLyogR2V0IHRoZSBldmVudCBhdCB0aGUgZ2l2ZW4gZW50cnkgICovCitzdGF0aWMgdWlu dDhfdCB4ZW5vcHJvZl9nZXRfZXZlbnQoeGVub3Byb2ZfYnVmX3QgKiBidWYsIGludCB0YWlsKQor eworCXJldHVybiAoYnVmLT5ldmVudF9sb2dbdGFpbF0uZXZlbnQpOworfQorCitzdGF0aWMgdm9p ZCB4ZW5vcHJvZl9hZGRfcGMoeGVub3Byb2ZfYnVmX3QgKmJ1ZiwgaW50IGlzX3Bhc3NpdmUpCit7 CisJaW50IGhlYWQsIHRhaWwsIHNpemU7CisJaW50IHRyYWNpbmcgPSAwOworCisJaGVhZCA9IGJ1 Zi0+ZXZlbnRfaGVhZDsKKwl0YWlsID0gYnVmLT5ldmVudF90YWlsOworCXNpemUgPSBidWYtPmV2 ZW50X3NpemU7CisKKwl3aGlsZSAodGFpbCAhPSBoZWFkKSB7CisJCWlmICh4ZW5vcHJvZl9pc19l c2NhcGUoYnVmLCB0YWlsKSAmJgorCQkgICAgeGVub3Byb2ZfZ2V0X2V2ZW50KGJ1ZiwgdGFpbCkg PT0gWEVOT1BST0ZfVFJBQ0VfQkVHSU4pIHsKKwkJCXRyYWNpbmc9MTsKKwkJCW9wcm9maWxlX2Fk ZF9wYyhFU0NBUEVfQ09ERSwgYnVmLT5ldmVudF9sb2dbdGFpbF0ubW9kZSwgCisJCQkJCVRSQUNF X0JFR0lOKTsgCisJCQlpZiAoIWlzX3Bhc3NpdmUpCisJCQkJb3Byb2ZpbGVfc2FtcGxlcysrOwor CQkJZWxzZQorCQkJCXBfb3Byb2ZpbGVfc2FtcGxlcysrOworCQkJCisJCX0gZWxzZSB7CisJCQlv cHJvZmlsZV9hZGRfcGMoYnVmLT5ldmVudF9sb2dbdGFpbF0uZWlwLAorCQkJCQlidWYtPmV2ZW50 X2xvZ1t0YWlsXS5tb2RlLAorCQkJCQlidWYtPmV2ZW50X2xvZ1t0YWlsXS5ldmVudCk7CisJCQlp ZiAoIXRyYWNpbmcpIHsKKwkJCQlpZiAoIWlzX3Bhc3NpdmUpCisJCQkJCW9wcm9maWxlX3NhbXBs ZXMrKzsKKwkJCQllbHNlCisJCQkJCXBfb3Byb2ZpbGVfc2FtcGxlcysrOworCQkJfQorICAgICAg IAorCQl9CisJCXRhaWwrKzsKKwkJaWYodGFpbD09c2l6ZSkKKwkJICAgIHRhaWw9MDsKKwl9CisJ YnVmLT5ldmVudF90YWlsID0gdGFpbDsKK30KKworc3RhdGljIHZvaWQgeGVub3Byb2ZfaGFuZGxl X3Bhc3NpdmUodm9pZCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgZmxhZ19kb21haW4sIGZsYWdfc3dp dGNoID0gMDsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgcGRvbWFpbnM7IGkrKykgeworCQlmbGFnX2Rv bWFpbiA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBwYXNzaXZlX2RvbWFpbnNbaV0ubmJ1Zjsgaisr KSB7CisJCQl4ZW5vcHJvZl9idWZfdCAqYnVmID0gcF94ZW5vcHJvZl9idWZbaV1bal07CisJCQlp ZiAoYnVmLT5ldmVudF9oZWFkID09IGJ1Zi0+ZXZlbnRfdGFpbCkKKwkJCQljb250aW51ZTsKKwkJ CWlmICghZmxhZ19kb21haW4pIHsKKwkJCQlpZiAoIW9wcm9maWxlX2FkZF9kb21haW5fc3dpdGNo KAorCQkJCQlwYXNzaXZlX2RvbWFpbnNbaV0uZG9tYWluX2lkKSkKKwkJCQkJZ290byBkb25lOwor CQkJCWZsYWdfZG9tYWluID0gMTsKKwkJCX0KKwkJCXhlbm9wcm9mX2FkZF9wYyhidWYsIDEpOwor CQkJZmxhZ19zd2l0Y2ggPSAxOworCQl9CisJfQorZG9uZToKKwlpZiAoZmxhZ19zd2l0Y2gpCisJ CW9wcm9maWxlX2FkZF9kb21haW5fc3dpdGNoKFhFTl9DT09SRElOQVRPUl9ET01BSU4pOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgCit4ZW5vcHJvZl9vdmZfaW50ZXJydXB0KGludCBpcnEsIHZv aWQgKiBkZXZfaWQpCit7CisJc3RydWN0IHhlbm9wcm9mX2J1ZiAqIGJ1ZjsKKwlzdGF0aWMgdW5z aWduZWQgbG9uZyBmbGFnOworCisJYnVmID0geGVub3Byb2ZfYnVmW3NtcF9wcm9jZXNzb3JfaWQo KV07CisKKwl4ZW5vcHJvZl9hZGRfcGMoYnVmLCAwKTsKKworCWlmICh4ZW5vcHJvZl9pc19wcmlt YXJ5ICYmICF0ZXN0X2FuZF9zZXRfYml0KDAsICZmbGFnKSkgeworCQl4ZW5vcHJvZl9oYW5kbGVf cGFzc2l2ZSgpOworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJY2xlYXJfYml0KDAs ICZmbGFnKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIHZvaWQg dW5iaW5kX3ZpcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvcl9lYWNoX29ubGlu ZV9jcHUoaSkgeworCQlpZiAob3ZmX2lycVtpXSA+PSAwKSB7CisJCQl1bmJpbmRfZnJvbV9pcnFo YW5kbGVyKG92Zl9pcnFbaV0sIE5VTEwpOworCQkJb3ZmX2lycVtpXSA9IC0xOworCQl9CisJfQor fQorCisKK3N0YXRpYyBpbnQgYmluZF92aXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJ aW50IHJlc3VsdDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQlyZXN1bHQgPSBiaW5k X3ZpcnFfdG9faXJxaGFuZGxlcihWSVJRX1hFTk9QUk9GLAorCQkJCQkJIGksCisJCQkJCQkgeGVu b3Byb2Zfb3ZmX2ludGVycnVwdCwKKwkJCQkJCSBJUlFGX0RJU0FCTEVEfElSUUZfTk9CQUxBTkNJ TkcsCisJCQkJCQkgInhlbm9wcm9mIiwKKwkJCQkJCSBOVUxMKTsKKworCQlpZiAocmVzdWx0IDwg MCkgeworCQkJdW5iaW5kX3ZpcnEoKTsKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KKworCQlvdmZf aXJxW2ldID0gcmVzdWx0OworCX0KKwkJCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQg dW5tYXBfcGFzc2l2ZV9saXN0KHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBk b21haW5zOyBpKyspCisJCXhlbm9wcm9mX2FyY2hfdW5tYXBfc2hhcmVkX2J1ZmZlcigmcF9zaGFy ZWRfYnVmZmVyW2ldKTsKKwlwZG9tYWlucyA9IDA7Cit9CisKKworc3RhdGljIGludCBtYXBfeGVu b3Byb2ZfYnVmZmVyKGludCBtYXhfc2FtcGxlcykKK3sKKwlzdHJ1Y3QgeGVub3Byb2ZfZ2V0X2J1 ZmZlciBnZXRfYnVmZmVyOworCXN0cnVjdCB4ZW5vcHJvZl9idWYgKmJ1ZjsKKwlpbnQgcmV0LCBp OworCisJaWYgKCBzaGFyZWRfYnVmZmVyLmJ1ZmZlciApCisJCXJldHVybiAwOworCisJZ2V0X2J1 ZmZlci5tYXhfc2FtcGxlcyA9IG1heF9zYW1wbGVzOworCXJldCA9IHhlbm9wcm9mX2FyY2hfbWFw X3NoYXJlZF9idWZmZXIoJmdldF9idWZmZXIsICZzaGFyZWRfYnVmZmVyKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCW5idWYgPSBnZXRfYnVmZmVyLm5idWY7CisKKwlmb3IgKGk9MDsgaTwg bmJ1ZjsgaSsrKSB7CisJCWJ1ZiA9IChzdHJ1Y3QgeGVub3Byb2ZfYnVmKikgCisJCQkmc2hhcmVk X2J1ZmZlci5idWZmZXJbaSAqIGdldF9idWZmZXIuYnVmc2l6ZV07CisJCUJVR19PTihidWYtPnZj cHVfaWQgPj0gTUFYX1ZJUlRfQ1BVUyk7CisJCXhlbm9wcm9mX2J1ZltidWYtPnZjcHVfaWRdID0g YnVmOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgeGVub3Byb2Zfc2V0dXAo dm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCAocmV0ID0gbWFwX3hlbm9wcm9mX2J1ZmZlcihN QVhfWEVOT1BST0ZfU0FNUExFUykpICkKKwkJcmV0dXJuIHJldDsKKworCWlmICggKHJldCA9IGJp bmRfdmlycSgpKSApCisJCXJldHVybiByZXQ7CisKKwlpZiAoeGVub3Byb2ZfaXNfcHJpbWFyeSkg eworCQkvKiBEZWZpbmUgZG9tMCBhcyBhbiBhY3RpdmUgZG9tYWluIGlmIG5vdCBkb25lIHlldCAq LworCQlpZiAoIWFjdGl2ZV9kZWZpbmVkKSB7CisJCQlkb21pZF90IGRvbWlkOworCQkJcmV0ID0g SFlQRVJWSVNPUl94ZW5vcHJvZl9vcCgKKwkJCQlYRU5PUFJPRl9yZXNldF9hY3RpdmVfbGlzdCwg TlVMTCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQkJZG9taWQgPSAwOworCQkJcmV0 ID0gSFlQRVJWSVNPUl94ZW5vcHJvZl9vcCgKKwkJCQlYRU5PUFJPRl9zZXRfYWN0aXZlLCAmZG9t aWQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJCWFjdGl2ZV9kZWZpbmVkID0gMTsK KwkJfQorCisJCWlmIChvcHJvZmlsZV9iYWNrdHJhY2VfZGVwdGggPiAwKSB7CisJCQlyZXQgPSBI WVBFUlZJU09SX3hlbm9wcm9mX29wKFhFTk9QUk9GX3NldF9iYWNrdHJhY2UsIAorCQkJCQkJICAg ICAmb3Byb2ZpbGVfYmFja3RyYWNlX2RlcHRoKTsKKwkJCWlmIChyZXQpCisJCQkJb3Byb2ZpbGVf YmFja3RyYWNlX2RlcHRoID0gMDsKKwkJfQorCisJCXJldCA9IEhZUEVSVklTT1JfeGVub3Byb2Zf b3AoWEVOT1BST0ZfcmVzZXJ2ZV9jb3VudGVycywgTlVMTCk7CisJCWlmIChyZXQpCisJCQlnb3Rv IGVycjsKKwkJCisJCXhlbm9wcm9mX2FyY2hfY291bnRlcigpOworCQlyZXQgPSBIWVBFUlZJU09S X3hlbm9wcm9mX29wKFhFTk9QUk9GX3NldHVwX2V2ZW50cywgTlVMTCk7CisJCWlmIChyZXQpCisJ CQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBIWVBFUlZJU09SX3hlbm9wcm9mX29wKFhFTk9QUk9G X2VuYWJsZV92aXJxLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXhlbm9wcm9m X2VuYWJsZWQgPSAxOworCXJldHVybiAwOworIGVycjoKKwl1bmJpbmRfdmlycSgpOworCXJldHVy biByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgeGVub3Byb2Zfc2h1dGRvd24odm9pZCkKK3sKKwl4 ZW5vcHJvZl9lbmFibGVkID0gMDsKKworCVdBUk5fT04oSFlQRVJWSVNPUl94ZW5vcHJvZl9vcChY RU5PUFJPRl9kaXNhYmxlX3ZpcnEsIE5VTEwpKTsKKworCWlmICh4ZW5vcHJvZl9pc19wcmltYXJ5 KSB7CisJCVdBUk5fT04oSFlQRVJWSVNPUl94ZW5vcHJvZl9vcChYRU5PUFJPRl9yZWxlYXNlX2Nv dW50ZXJzLAorCQkJCQkgICAgICAgTlVMTCkpOworCQlhY3RpdmVfZGVmaW5lZCA9IDA7CisJfQor CisJdW5iaW5kX3ZpcnEoKTsKKworCXhlbm9wcm9mX2FyY2hfdW5tYXBfc2hhcmVkX2J1ZmZlcigm c2hhcmVkX2J1ZmZlcik7CisJaWYgKHhlbm9wcm9mX2lzX3ByaW1hcnkpCisJCXVubWFwX3Bhc3Np dmVfbGlzdCgpOworfQorCisKK3N0YXRpYyBpbnQgeGVub3Byb2Zfc3RhcnQodm9pZCkKK3sKKwlp bnQgcmV0ID0gMDsKKworCWlmICh4ZW5vcHJvZl9pc19wcmltYXJ5KQorCQlyZXQgPSBIWVBFUlZJ U09SX3hlbm9wcm9mX29wKFhFTk9QUk9GX3N0YXJ0LCBOVUxMKTsKKwlpZiAoIXJldCkKKwkJeGVu b3Byb2ZfYXJjaF9zdGFydCgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgeGVu b3Byb2Zfc3RvcCh2b2lkKQoreworCWlmICh4ZW5vcHJvZl9pc19wcmltYXJ5KQorCQlXQVJOX09O KEhZUEVSVklTT1JfeGVub3Byb2Zfb3AoWEVOT1BST0Zfc3RvcCwgTlVMTCkpOworCXhlbm9wcm9m X2FyY2hfc3RvcCgpOworfQorCisKK3N0YXRpYyBpbnQgeGVub3Byb2Zfc2V0X2FjdGl2ZShpbnQg KiBhY3RpdmVfZG9tYWlucywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWRvbWFpbnMpCit7CisJ aW50IHJldCA9IDA7CisJaW50IGk7CisJaW50IHNldF9kb20wID0gMDsKKwlkb21pZF90IGRvbWlk OworCisJaWYgKCF4ZW5vcHJvZl9pc19wcmltYXJ5KQorCQlyZXR1cm4gMDsKKworCWlmIChhZG9t YWlucyA+IE1BWF9PUFJPRl9ET01BSU5TKQorCQlyZXR1cm4gLUUyQklHOworCisJcmV0ID0gSFlQ RVJWSVNPUl94ZW5vcHJvZl9vcChYRU5PUFJPRl9yZXNldF9hY3RpdmVfbGlzdCwgTlVMTCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaT0wOyBpPGFkb21haW5zOyBpKyspIHsK KwkJZG9taWQgPSBhY3RpdmVfZG9tYWluc1tpXTsKKwkJaWYgKGRvbWlkICE9IGFjdGl2ZV9kb21h aW5zW2ldKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0g SFlQRVJWSVNPUl94ZW5vcHJvZl9vcChYRU5PUFJPRl9zZXRfYWN0aXZlLCAmZG9taWQpOworCQlp ZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWlmIChhY3RpdmVfZG9tYWluc1tpXSA9PSAwKQorCQkJ c2V0X2RvbTAgPSAxOworCX0KKwkvKiBkb20wIG11c3QgYWx3YXlzIGJlIGFjdGl2ZSBidXQgbWF5 IG5vdCBiZSBpbiB0aGUgbGlzdCAqLyAKKwlpZiAoIXNldF9kb20wKSB7CisJCWRvbWlkID0gMDsK KwkJcmV0ID0gSFlQRVJWSVNPUl94ZW5vcHJvZl9vcChYRU5PUFJPRl9zZXRfYWN0aXZlLCAmZG9t aWQpOworCX0KKworb3V0OgorCWlmIChyZXQpCisJCVdBUk5fT04oSFlQRVJWSVNPUl94ZW5vcHJv Zl9vcChYRU5PUFJPRl9yZXNldF9hY3RpdmVfbGlzdCwKKwkJCQkJICAgICAgIE5VTEwpKTsKKwlh Y3RpdmVfZGVmaW5lZCA9ICFyZXQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4ZW5v cHJvZl9zZXRfcGFzc2l2ZShpbnQgKiBwX2RvbWFpbnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBwZG9tcykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGlu dCBpLCBqOworCXN0cnVjdCB4ZW5vcHJvZl9idWYgKmJ1ZjsKKworCWlmICgheGVub3Byb2ZfaXNf cHJpbWFyeSkKKyAgICAgICAgCXJldHVybiAwOworCisJaWYgKHBkb21zID4gTUFYX09QUk9GX0RP TUFJTlMpCisJCXJldHVybiAtRTJCSUc7CisKKwlyZXQgPSBIWVBFUlZJU09SX3hlbm9wcm9mX29w KFhFTk9QUk9GX3Jlc2V0X3Bhc3NpdmVfbGlzdCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKwl1bm1hcF9wYXNzaXZlX2xpc3QoKTsKKworCWZvciAoaSA9IDA7IGkgPCBwZG9tczsg aSsrKSB7CisJCXBhc3NpdmVfZG9tYWluc1tpXS5kb21haW5faWQgPSBwX2RvbWFpbnNbaV07CisJ CXBhc3NpdmVfZG9tYWluc1tpXS5tYXhfc2FtcGxlcyA9IDIwNDg7CisJCXJldCA9IHhlbm9wcm9m X2FyY2hfc2V0X3Bhc3NpdmUoJnBhc3NpdmVfZG9tYWluc1tpXSwKKwkJCQkJCSZwX3NoYXJlZF9i dWZmZXJbaV0pOworCQlpZiAocmV0KQorCQl7CisJCQlnb3RvIG91dDsKKwkJfQorCQlmb3IgKGog PSAwOyBqIDwgcGFzc2l2ZV9kb21haW5zW2ldLm5idWY7IGorKykgeworCQkJYnVmID0gKHN0cnVj dCB4ZW5vcHJvZl9idWYgKikKKwkJCQkmcF9zaGFyZWRfYnVmZmVyW2ldLmJ1ZmZlclsKKwkJCQlq ICogcGFzc2l2ZV9kb21haW5zW2ldLmJ1ZnNpemVdOworCQkJQlVHX09OKGJ1Zi0+dmNwdV9pZCA+ PSBNQVhfVklSVF9DUFVTKTsKKwkJCXBfeGVub3Byb2ZfYnVmW2ldW2J1Zi0+dmNwdV9pZF0gPSBi dWY7CisJCX0KKwl9CisKKwlwZG9tYWlucyA9IHBkb21zOworCXJldHVybiAwOworCitvdXQ6CisJ Zm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJeGVub3Byb2ZfYXJjaF91bm1hcF9zaGFyZWRfYnVm ZmVyKCZwX3NoYXJlZF9idWZmZXJbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworCisvKiBUaGUg ZHVtbXkgYmFja3RyYWNlIGZ1bmN0aW9uIHRvIGtlZXAgb3Byb2ZpbGUgaGFwcHkKKyAqIFRoZSBy ZWFsIGJhY2t0cmFjZSBpcyBkb25lIGluIHhlbgorICovCitzdGF0aWMgdm9pZCB4ZW5vcHJvZl9k dW1teV9iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLCAKKwkJCQkgICAgIHVu c2lnbmVkIGludCBkZXB0aCkKK3sKKwkvKiB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgKi8K KwlCVUcoKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRp b25zIHhlbm9wcm9mX29wcyA9IHsKKyNpZmRlZiBIQVZFX1hFTk9QUk9GX0NSRUFURV9GSUxFUwor CS5jcmVhdGVfZmlsZXMgCT0geGVub3Byb2ZfY3JlYXRlX2ZpbGVzLAorI2VuZGlmCisJLnhlbl9z ZXRfYWN0aXZlCT0geGVub3Byb2Zfc2V0X2FjdGl2ZSwKKwkueGVuX3NldF9wYXNzaXZlICAgID0g eGVub3Byb2Zfc2V0X3Bhc3NpdmUsCisJLnNldHVwIAkJPSB4ZW5vcHJvZl9zZXR1cCwKKwkuc2h1 dGRvd24JPSB4ZW5vcHJvZl9zaHV0ZG93biwKKwkuc3RhcnQJCT0geGVub3Byb2Zfc3RhcnQsCisJ LnN0b3AJCT0geGVub3Byb2Zfc3RvcCwKKwkuYmFja3RyYWNlCT0geGVub3Byb2ZfZHVtbXlfYmFj a3RyYWNlCit9OworCisKKy8qIGluIG9yZGVyIHRvIGdldCBkcml2ZXJmcyByaWdodCAqLworc3Rh dGljIGludCB1c2luZ194ZW5vcHJvZjsKKworaW50IF9faW5pdCB4ZW5vcHJvZmlsZV9pbml0KHN0 cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICogb3BzKQoreworCXN0cnVjdCB4ZW5vcHJvZl9pbml0 IGluaXQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCXJldCA9IEhZUEVSVklTT1Jf eGVub3Byb2Zfb3AoWEVOT1BST0ZfaW5pdCwgJmluaXQpOworCWlmICghcmV0KSB7CisJCXhlbm9w cm9mX2FyY2hfaW5pdF9jb3VudGVyKCZpbml0KTsKKwkJeGVub3Byb2ZfaXNfcHJpbWFyeSA9IGlu aXQuaXNfcHJpbWFyeTsKKworCQkvKiAgY3B1X3R5cGUgaXMgZGV0ZWN0ZWQgYnkgWGVuICovCisJ CWNwdV90eXBlW1hFTk9QUk9GX0NQVV9UWVBFX1NJWkUtMV0gPSAwOworCQlzdHJuY3B5KGNwdV90 eXBlLCBpbml0LmNwdV90eXBlLCBYRU5PUFJPRl9DUFVfVFlQRV9TSVpFIC0gMSk7CisJCXhlbm9w cm9mX29wcy5jcHVfdHlwZSA9IGNwdV90eXBlOworCisJCWluaXRfZHJpdmVyZnMoKTsKKwkJdXNp bmdfeGVub3Byb2YgPSAxOworCQkqb3BzID0geGVub3Byb2Zfb3BzOworCisJCWZvciAoaT0wOyBp PE5SX0NQVVM7IGkrKykKKwkJCW92Zl9pcnFbaV0gPSAtMTsKKworCQlhY3RpdmVfZGVmaW5lZCA9 IDA7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJldCAlZCwgZXZlbnRzICVkLCB4ZW5v cHJvZl9pc19wcmltYXJ5ICVkXG4iLAorCSAgICAgICBfX2Z1bmNfXywgcmV0LCBpbml0Lm51bV9l dmVudHMsIHhlbm9wcm9mX2lzX3ByaW1hcnkpOworCXJldHVybiByZXQ7Cit9CisKKwordm9pZCB4 ZW5vcHJvZmlsZV9leGl0KHZvaWQpCit7CisJaWYgKHVzaW5nX3hlbm9wcm9mKQorCQlleGl0X2Ry aXZlcmZzKCk7CisKKwl4ZW5vcHJvZl9hcmNoX3VubWFwX3NoYXJlZF9idWZmZXIoJnNoYXJlZF9i dWZmZXIpOworCWlmICh4ZW5vcHJvZl9pc19wcmltYXJ5KSB7CisJCXVubWFwX3Bhc3NpdmVfbGlz dCgpOworCQlXQVJOX09OKEhZUEVSVklTT1JfeGVub3Byb2Zfb3AoWEVOT1BST0Zfc2h1dGRvd24s IE5VTEwpKTsKKyAgICAgICAgfQorfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vcHJvZmls ZS5oIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCmluZGV4IDFkOTUxOGIuLmJkNTUwNjUgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L29w cm9maWxlLmgKQEAgLTE2LDYgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2lu Y2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2lmZGVm IENPTkZJR19YRU4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbm9wcm9mLmg+CisjZW5kaWYK ICAKIC8qIEVhY2ggZXNjYXBlZCBlbnRyeSBpcyBwcmVmaXhlZCBieSBFU0NBUEVfQ09ERQogICog dGhlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb2RlcywgdGhlbiB0aGUKQEAgLTI4LDE0ICszMSwx OCBAQAogI2RlZmluZSBDUFVfU1dJVENIX0NPREUJCQkyCiAjZGVmaW5lIENPT0tJRV9TV0lUQ0hf Q09ERQkJMwogI2RlZmluZSBLRVJORUxfRU5URVJfU1dJVENIX0NPREUJNAotI2RlZmluZSBLRVJO RUxfRVhJVF9TV0lUQ0hfQ09ERQkJNQorI2RlZmluZSBVU0VSX0VOVEVSX1NXSVRDSF9DT0RFCQk1 CiAjZGVmaW5lIE1PRFVMRV9MT0FERURfQ09ERQkJNgogI2RlZmluZSBDVFhfVEdJRF9DT0RFCQkJ NwogI2RlZmluZSBUUkFDRV9CRUdJTl9DT0RFCQk4CiAjZGVmaW5lIFRSQUNFX0VORF9DT0RFCQkJ OQogI2RlZmluZSBYRU5fRU5URVJfU1dJVENIX0NPREUJCTEwCisjaWZuZGVmIENPTkZJR19YRU4K ICNkZWZpbmUgU1BVX1BST0ZJTElOR19DT0RFCQkxMQogI2RlZmluZSBTUFVfQ1RYX1NXSVRDSF9D T0RFCQkxMgorI2Vsc2UKKyNkZWZpbmUgWEVOX0RPTUFJTl9TV0lUQ0hfQ09ERQkJMTEKKyNlbmRp ZgogI2RlZmluZSBJQlNfRkVUQ0hfQ09ERQkJCTEzCiAjZGVmaW5lIElCU19PUF9DT0RFCQkJMTQK IApAQCAtNDksNiArNTYsMTIgQEAgc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgewogCS8qIGNy ZWF0ZSBhbnkgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIG9wcm9maWxlIGZz LgogCSAqIE9wdGlvbmFsLiAqLwogCWludCAoKmNyZWF0ZV9maWxlcykoc3RydWN0IHN1cGVyX2Js b2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiByb290KTsKKyNpZmRlZiBDT05GSUdfWEVOCisJLyog c2V0dXAgYWN0aXZlIGRvbWFpbnMgd2l0aCBYZW4gKi8KKwlpbnQgKCp4ZW5fc2V0X2FjdGl2ZSko aW50ICphY3RpdmVfZG9tYWlucywgdW5zaWduZWQgaW50IGFkb21haW5zKTsKKwkvKiBzZXR1cCBw YXNzaXZlIGRvbWFpbnMgd2l0aCBYZW4gKi8KKwlpbnQgKCp4ZW5fc2V0X3Bhc3NpdmUpKGludCAq cGFzc2l2ZV9kb21haW5zLCB1bnNpZ25lZCBpbnQgcGRvbWFpbnMpOworI2VuZGlmCiAJLyogRG8g YW55IG5lY2Vzc2FyeSBpbnRlcnJ1cHQgc2V0dXAuIE9wdGlvbmFsLiAqLwogCWludCAoKnNldHVw KSh2b2lkKTsKIAkvKiBEbyBhbnkgbmVjZXNzYXJ5IGludGVycnVwdCBzaHV0ZG93bi4gT3B0aW9u YWwuICovCkBAIC0xMDQsOSArMTE3LDE2IEBAIHZvaWQgb3Byb2ZpbGVfYWRkX2V4dF9zYW1wbGUo dW5zaWduZWQgbG9uZyBwYywgc3RydWN0IHB0X3JlZ3MgKiBjb25zdCByZWdzLAogICogYmFja3Ry YWNlLiAqLwogdm9pZCBvcHJvZmlsZV9hZGRfcGModW5zaWduZWQgbG9uZyBwYywgaW50IGlzX2tl cm5lbCwgdW5zaWduZWQgbG9uZyBldmVudCk7CiAKKy8qIFJlY29yZCB3aGVuIHRoZSBjcHUgbW9k ZSBzd2l0Y2hlcyBiZXR3ZWVuIHVzZXIva2VybmVsL3hlbihoeXBlcnZpc29yKSAqLwordm9pZCBv cHJvZmlsZV9hZGRfbW9kZShpbnQgY3B1X21vZGUpOworCiAvKiBhZGQgYSBiYWNrdHJhY2UgZW50 cnksIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSAtPmJhY2t0cmFjZSBjYWxsYmFjayAqLwogdm9pZCBv cHJvZmlsZV9hZGRfdHJhY2UodW5zaWduZWQgbG9uZyBlaXApOwogCisjaWZkZWYgQ09ORklHX1hF TgorLyogYWRkIGEgeGVuIGRvbWFpbiBzd2l0Y2ggZW50cnkgKi8KK2ludCBvcHJvZmlsZV9hZGRf ZG9tYWluX3N3aXRjaChpbnQzMl90IGRvbWFpbl9pZCk7CisjZW5kaWYKIAogLyoqCiAgKiBDcmVh dGUgYSBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lIGFzIGEgY2hpbGQgb2YgdGhlIGdpdmVuIHJvb3Qs IHdpdGgKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW4uaCBiL2luY2x1ZGUv eGVuL2ludGVyZmFjZS94ZW4uaAppbmRleCA4MTJmZmQ1Li4wMDU0YTNmIDEwMDY0NAotLS0gYS9p bmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgKKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hl bi5oCkBAIC03OSw2ICs3OSw4IEBACiAjZGVmaW5lIFZJUlFfQ09OU09MRSAgICAyICAvKiAoRE9N MCkgQnl0ZXMgcmVjZWl2ZWQgb24gZW1lcmdlbmN5IGNvbnNvbGUuICovCiAjZGVmaW5lIFZJUlFf RE9NX0VYQyAgICAzICAvKiAoRE9NMCkgRXhjZXB0aW9uYWwgZXZlbnQgZm9yIHNvbWUgZG9tYWlu LiAgICovCiAjZGVmaW5lIFZJUlFfREVCVUdHRVIgICA2ICAvKiAoRE9NMCkgQSBkb21haW4gaGFz IHBhdXNlZCBmb3IgZGVidWdnaW5nLiAgICovCisjZGVmaW5lIFZJUlFfWEVOT1BST0YgICA3ICAv KiBWLiBYZW5PcHJvZmlsZSBpbnRlcnJ1cHQ6IG5ldyBzYW1wbGUgYXZhaWxhYmxlICovCisKIAog LyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIFZJUlEgZGVmaW5pdGlvbnMuICovCiAjZGVmaW5lIFZJ UlFfQVJDSF8wICAgIDE2CmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVub3By b2YuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS94ZW5vcHJvZi5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjhmZjNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3hl bi9pbnRlcmZhY2UveGVub3Byb2YuaApAQCAtMCwwICsxLDE0MCBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICogeGVub3Byb2YuaAorICogCisgKiBJbnRlcmZhY2UgZm9yIGVuYWJsaW5nIHN5 c3RlbSB3aWRlIHByb2ZpbGluZyBiYXNlZCBvbiBoYXJkd2FyZSBwZXJmb3JtYW5jZQorICogY291 bnRlcnMKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisg KiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uIHRoZQorICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisgKiBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0 d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2th cmQgQ28uCisgKiBXcml0dGVuIGJ5IEFyYXZpbmQgTWVub24gJiBKb3NlIFJlbmF0byBTYW50b3MK KyAqLworCisjaWZuZGVmIF9fWEVOX1BVQkxJQ19YRU5PUFJPRl9IX18KKyNkZWZpbmUgX19YRU5f UFVCTElDX1hFTk9QUk9GX0hfXworCisjaW5jbHVkZSAieGVuLmgiCisKKy8qCisgKiBDb21tYW5k cyB0byBIWVBFUlZJU09SX3hlbm9wcm9mX29wKCkuCisgKi8KKyNkZWZpbmUgWEVOT1BST0ZfaW5p dCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFhFTk9QUk9GX3Jlc2V0X2FjdGl2ZV9saXN0ICAg MQorI2RlZmluZSBYRU5PUFJPRl9yZXNldF9wYXNzaXZlX2xpc3QgIDIKKyNkZWZpbmUgWEVOT1BS T0Zfc2V0X2FjdGl2ZSAgICAgICAgICAzCisjZGVmaW5lIFhFTk9QUk9GX3NldF9wYXNzaXZlICAg ICAgICAgNAorI2RlZmluZSBYRU5PUFJPRl9yZXNlcnZlX2NvdW50ZXJzICAgIDUKKyNkZWZpbmUg WEVOT1BST0ZfY291bnRlciAgICAgICAgICAgICA2CisjZGVmaW5lIFhFTk9QUk9GX3NldHVwX2V2 ZW50cyAgICAgICAgNworI2RlZmluZSBYRU5PUFJPRl9lbmFibGVfdmlycSAgICAgICAgIDgKKyNk ZWZpbmUgWEVOT1BST0Zfc3RhcnQgICAgICAgICAgICAgICA5CisjZGVmaW5lIFhFTk9QUk9GX3N0 b3AgICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU5PUFJPRl9kaXNhYmxlX3ZpcnEgICAgICAg MTEKKyNkZWZpbmUgWEVOT1BST0ZfcmVsZWFzZV9jb3VudGVycyAgIDEyCisjZGVmaW5lIFhFTk9Q Uk9GX3NodXRkb3duICAgICAgICAgICAxMworI2RlZmluZSBYRU5PUFJPRl9nZXRfYnVmZmVyICAg ICAgICAgMTQKKyNkZWZpbmUgWEVOT1BST0Zfc2V0X2JhY2t0cmFjZSAgICAgIDE1CisjZGVmaW5l IFhFTk9QUk9GX2xhc3Rfb3AgICAgICAgICAgICAxNQorCisjZGVmaW5lIE1BWF9PUFJPRl9FVkVO VFMgICAgMzIKKyNkZWZpbmUgTUFYX09QUk9GX0RPTUFJTlMgICAyNQorI2RlZmluZSBYRU5PUFJP Rl9DUFVfVFlQRV9TSVpFIDY0CisKKyNkZWZpbmUgREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeCkK KworLyogWGVub3Byb2YgcGVyZm9ybWFuY2UgZXZlbnRzIChub3QgWGVuIGV2ZW50cykgKi8KK3N0 cnVjdCBldmVudF9sb2cgeworICAgIHVpbnQ2NF90IGVpcDsKKyAgICB1aW50OF90IG1vZGU7Cisg ICAgdWludDhfdCBldmVudDsKK307CisKKy8qIFBDIHZhbHVlIHRoYXQgaW5kaWNhdGVzIGEgc3Bl Y2lhbCBjb2RlICovCisjZGVmaW5lIFhFTk9QUk9GX0VTQ0FQRV9DT0RFIH4wVUwKKy8qIFRyYW5z aWVudCBldmVudHMgZm9yIHRoZSB4ZW5vcHJvZi0+b3Byb2ZpbGUgY3B1IGJ1ZiAqLworI2RlZmlu ZSBYRU5PUFJPRl9UUkFDRV9CRUdJTiAxCisKKy8qIFhlbm9wcm9mIGJ1ZmZlciBzaGFyZWQgYmV0 d2VlbiBYZW4gYW5kIGRvbWFpbiAtIDEgcGVyIFZDUFUgKi8KK3N0cnVjdCB4ZW5vcHJvZl9idWYg eworICAgIHVpbnQzMl90IGV2ZW50X2hlYWQ7CisgICAgdWludDMyX3QgZXZlbnRfdGFpbDsKKyAg ICB1aW50MzJfdCBldmVudF9zaXplOworICAgIHVpbnQzMl90IHZjcHVfaWQ7CisgICAgdWludDY0 X3QgeGVuX3NhbXBsZXM7CisgICAgdWludDY0X3Qga2VybmVsX3NhbXBsZXM7CisgICAgdWludDY0 X3QgdXNlcl9zYW1wbGVzOworICAgIHVpbnQ2NF90IGxvc3Rfc2FtcGxlczsKKyAgICBzdHJ1Y3Qg ZXZlbnRfbG9nIGV2ZW50X2xvZ1sxXTsKK307CisjaWZuZGVmIF9fWEVOX18KK3R5cGVkZWYgc3Ry dWN0IHhlbm9wcm9mX2J1ZiB4ZW5vcHJvZl9idWZfdDsKK0RFRklORV9YRU5fR1VFU1RfSEFORExF KHhlbm9wcm9mX2J1Zl90KTsKKyNlbmRpZgorCitzdHJ1Y3QgeGVub3Byb2ZfaW5pdCB7CisgICAg aW50MzJfdCAgbnVtX2V2ZW50czsKKyAgICBpbnQzMl90ICBpc19wcmltYXJ5OworICAgIGNoYXIg Y3B1X3R5cGVbWEVOT1BST0ZfQ1BVX1RZUEVfU0laRV07Cit9OwordHlwZWRlZiBzdHJ1Y3QgeGVu b3Byb2ZfaW5pdCB4ZW5vcHJvZl9pbml0X3Q7CitERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5v cHJvZl9pbml0X3QpOworCitzdHJ1Y3QgeGVub3Byb2ZfZ2V0X2J1ZmZlciB7CisgICAgaW50MzJf dCAgbWF4X3NhbXBsZXM7CisgICAgaW50MzJfdCAgbmJ1ZjsKKyAgICBpbnQzMl90ICBidWZzaXpl OworICAgIHVpbnQ2NF90IGJ1Zl9nbWFkZHI7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeGVub3Byb2Zf Z2V0X2J1ZmZlciB4ZW5vcHJvZl9nZXRfYnVmZmVyX3Q7CitERUZJTkVfWEVOX0dVRVNUX0hBTkRM RSh4ZW5vcHJvZl9nZXRfYnVmZmVyX3QpOworCitzdHJ1Y3QgeGVub3Byb2ZfY291bnRlciB7Cisg ICAgdWludDMyX3QgaW5kOworICAgIHVpbnQ2NF90IGNvdW50OworICAgIHVpbnQzMl90IGVuYWJs ZWQ7CisgICAgdWludDMyX3QgZXZlbnQ7CisgICAgdWludDMyX3QgaHlwZXJ2aXNvcjsKKyAgICB1 aW50MzJfdCBrZXJuZWw7CisgICAgdWludDMyX3QgdXNlcjsKKyAgICB1aW50NjRfdCB1bml0X21h c2s7Cit9OwordHlwZWRlZiBzdHJ1Y3QgeGVub3Byb2ZfY291bnRlciB4ZW5vcHJvZl9jb3VudGVy X3Q7CitERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5vcHJvZl9jb3VudGVyX3QpOworCit0eXBl ZGVmIHN0cnVjdCB4ZW5vcHJvZl9wYXNzaXZlIHsKKyAgICB1aW50MTZfdCBkb21haW5faWQ7Cisg ICAgaW50MzJfdCAgbWF4X3NhbXBsZXM7CisgICAgaW50MzJfdCAgbmJ1ZjsKKyAgICBpbnQzMl90 ICBidWZzaXplOworICAgIHVpbnQ2NF90IGJ1Zl9nbWFkZHI7Cit9IHhlbm9wcm9mX3Bhc3NpdmVf dDsKK0RFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbm9wcm9mX3Bhc3NpdmVfdCk7CisKKworI2Vu ZGlmIC8qIF9fWEVOX1BVQkxJQ19YRU5PUFJPRl9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlh YmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtc2V0LXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZz ZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL3hlbi1vcHMuaCBiL2luY2x1ZGUveGVuL3hl bi1vcHMuaAppbmRleCA5NzY5NzM4Li44MjM0YjhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi94 ZW4tb3BzLmgKKysrIGIvaW5jbHVkZS94ZW4veGVuLW9wcy5oCkBAIC0yNSw0ICsyNSw3IEBAIGlu dCB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwK IAkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBkb21pZCk7CiAKIAoraW50IHhlbl9y ZW1hcF9kb21haW5fa2VybmVsX21mbl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAg ICAgdW5zaWduZWQgbG9uZyBtZm4sIGludCBuciwKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB1 bnNpZ25lZCBkb21pZCk7CiAjZW5kaWYgLyogSU5DTFVERV9YRU5fT1BTX0ggKi8KZGlmZiAtLWdp dCBhL2luY2x1ZGUveGVuL3hlbm9wcm9mLmggYi9pbmNsdWRlL3hlbi94ZW5vcHJvZi5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWExMTkKLS0tIC9kZXYvbnVsbAorKysg Yi9pbmNsdWRlL3hlbi94ZW5vcHJvZi5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqIHhlbi94ZW5vcHJvZi5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElz YWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAg ICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0 b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1hFTl9YRU5PUFJP Rl9IX18KKyNkZWZpbmUgX19YRU5fWEVOT1BST0ZfSF9fCisjaWZkZWYgQ09ORklHX1hFTgorCisj aWYgMAorI2luY2x1ZGUgPGFzbS94ZW5vcHJvZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENP TkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKy8qIHhlbm9wcm9mIHg4NiBzcGVj aWZpYyAqLworc3RydWN0IHN1cGVyX2Jsb2NrOworc3RydWN0IGRlbnRyeTsKK2ludCB4ZW5vcHJv Zl9jcmVhdGVfZmlsZXMoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHN0cnVjdCBkZW50cnkgKiBy b290KTsKKyNkZWZpbmUgSEFWRV9YRU5PUFJPRl9DUkVBVEVfRklMRVMKKworc3RydWN0IHhlbm9w cm9mX2luaXQ7Cit2b2lkIHhlbm9wcm9mX2FyY2hfaW5pdF9jb3VudGVyKHN0cnVjdCB4ZW5vcHJv Zl9pbml0ICppbml0KTsKK3ZvaWQgeGVub3Byb2ZfYXJjaF9jb3VudGVyKHZvaWQpOwordm9pZCB4 ZW5vcHJvZl9hcmNoX3N0YXJ0KHZvaWQpOwordm9pZCB4ZW5vcHJvZl9hcmNoX3N0b3Aodm9pZCk7 CisKK3N0cnVjdCB4ZW5vcHJvZl9hcmNoX3NoYXJlZF9idWZmZXIgeworCS8qIG5vdGhpbmcgKi8K K307CitzdHJ1Y3QgeGVub3Byb2Zfc2hhcmVkX2J1ZmZlcjsKK3ZvaWQgeGVub3Byb2ZfYXJjaF91 bm1hcF9zaGFyZWRfYnVmZmVyKHN0cnVjdCB4ZW5vcHJvZl9zaGFyZWRfYnVmZmVyKiBzYnVmKTsK K3N0cnVjdCB4ZW5vcHJvZl9nZXRfYnVmZmVyOworaW50IHhlbm9wcm9mX2FyY2hfbWFwX3NoYXJl ZF9idWZmZXIoc3RydWN0IHhlbm9wcm9mX2dldF9idWZmZXIqIGdldF9idWZmZXIsIHN0cnVjdCB4 ZW5vcHJvZl9zaGFyZWRfYnVmZmVyKiBzYnVmKTsKK3N0cnVjdCB4ZW5vcHJvZl9wYXNzaXZlOwor aW50IHhlbm9wcm9mX2FyY2hfc2V0X3Bhc3NpdmUoc3RydWN0IHhlbm9wcm9mX3Bhc3NpdmUqIHBk b21haW4sIHN0cnVjdCB4ZW5vcHJvZl9zaGFyZWRfYnVmZmVyKiBzYnVmKTsKKyNlbmRpZgorCisv KiB4ZW5vcHJvZiBjb21tb24gKi8KK3N0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zOworaW50IHhl bm9wcm9maWxlX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKiBvcHMpOwordm9pZCB4 ZW5vcHJvZmlsZV9leGl0KHZvaWQpOworCitzdHJ1Y3QgeGVub3Byb2Zfc2hhcmVkX2J1ZmZlciB7 CisJY2hhcgkJCQkJKmJ1ZmZlcjsKKwlzdHJ1Y3QgeGVub3Byb2ZfYXJjaF9zaGFyZWRfYnVmZmVy CWFyY2g7Cit9OworI2Vsc2UKKyNkZWZpbmUgeGVub3Byb2ZpbGVfaW5pdChvcHMpCSgtRU5PU1lT KQorI2RlZmluZSB4ZW5vcHJvZmlsZV9leGl0KCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYg LyogQ09ORklHX1hFTiAqLworI2VuZGlmIC8qIF9fWEVOX1hFTk9QUk9GX0hfXyAqLwo= --0016e6d975bc04e62c048449e4a9 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --0016e6d975bc04e62c048449e4a9--