From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 21/38] drm/i915: Replace global breadcrumbs with per-context interrupt tracking Date: Fri, 18 Jan 2019 14:00:52 +0000 Message-ID: <20190118140109.25261-22-chris@chris-wilson.co.uk> References: <20190118140109.25261-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 452856F7B5 for ; Fri, 18 Jan 2019 14:01:56 +0000 (UTC) In-Reply-To: <20190118140109.25261-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QSBmZXcgeWVhcnMgYWdvLCBzZWUgY29tbWl0IDY4OGU2YzcyNTgxNiAoImRybS9pOTE1OiBTbGF1 Z2h0ZXIgdGhlCnRodW5kZXJpbmcgaTkxNV93YWl0X3JlcXVlc3QgaGVyZCIpLCB0aGUgaXNzdWUg b2YgaGFuZGxpbmcgbXVsdGlwbGUKY2xpZW50cyB3YWl0aW5nIGluIHBhcmFsbGVsIHdhcyBicm91 Z2h0IHRvIG91ciBhdHRlbnRpb24uIFRoZQpyZXF1aXJlbWVudCB3YXMgdGhhdCBldmVyeSBjbGll bnQgc2hvdWxkIGJlIHdva2VuIGltbWVkaWF0ZWx5IHVwb24gaXRzCnJlcXVlc3QgYmVpbmcgc2ln bmFsZWQsIHdpdGhvdXQgaW5jdXJyaW5nIGFueSBjcHUgb3ZlcmhlYWQuCgpUbyBoYW5kbGUgY2Vy dGFpbiBmcmFnaWxpdHkgb2Ygb3VyIGh3IG1lYW50IHRoYXQgd2UgY291bGQgbm90IGRvIGEKc2lt cGxlIGNoZWNrIGluc2lkZSB0aGUgaXJxIGhhbmRsZXIgKHNvbWUgZ2VuZXJhdGlvbnMgcmVxdWly ZWQgYWxtb3N0CnVuYm91bmRlZCBkZWxheXMgYmVmb3JlIHdlIGNvdWxkIGJlIHN1cmUgb2Ygc2Vx bm8gY29oZXJlbmN5KSBhbmQgc28KcmVxdWVzdCBjb21wbGV0aW9uIGNoZWNraW5nIHJlcXVpcmVk IGRlbGVnYXRpb24uCgpCZWZvcmUgY29tbWl0IDY4OGU2YzcyNTgxNiwgdGhlIHNvbHV0aW9uIHdh cyBzaW1wbGUuIEV2ZXJ5IGNsaWVudCB3YWtpbmcKb24gYSByZXF1ZXN0IHdvdWxkIGJlIHdva2Vu IG9uIGV2ZXJ5IGludGVycnVwdCBhbmQgZWFjaCB3b3VsZCBkbyBhCmhlYXZ5d2VpZ2h0IGNoZWNr IHRvIHNlZSBpZiB0aGVpciByZXF1ZXN0IHdhcyBjb21wbGV0ZS4gQ29tbWl0CjY4OGU2YzcyNTgx NiBpbnRyb2R1Y2VkIGFuIHJidHJlZSBzbyB0aGF0IG9ubHkgdGhlIGVhcmxpZXN0IHdhaXRlciBv bgp0aGUgZ2xvYmFsIHRpbWVsaW5lIHdvdWxkIHdva2VuLCBhbmQgd291bGQgd2FrZSB0aGUgbmV4 dCBhbmQgc28gb24uCihBbG9uZyB3aXRoIHZhcmlvdXMgY29tcGxpY2F0aW9ucyB0byBoYW5kbGUg cmVxdWVzdHMgYmVpbmcgcmVvcmRlcmVkCmFsb25nIHRoZSBnbG9iYWwgdGltZWxpbmUsIGFuZCBh bHNvIGEgcmVxdWlyZW1lbnQgZm9yIGt0aHJlYWQgdG8gcHJvdmlkZQphIGRlbGVnYXRlIGZvciBm ZW5jZSBzaWduYWxpbmcgdGhhdCBoYWQgbm8gcHJvY2VzcyBjb250ZXh0LikKClRoZSBnbG9iYWwg cmJ0cmVlIGRlcGVuZHMgb24ga25vd2luZyB0aGUgZXhlY3V0aW9uIHRpbWVsaW5lIChhbmQgZ2xv YmFsCnNlcW5vKS4gV2l0aG91dCBrbm93aW5nIHRoYXQgb3JkZXIsIHdlIG11c3QgaW5zdGVhZCBj aGVjayBhbGwgY29udGV4dHMKcXVldWVkIHRvIHRoZSBIVyB0byBzZWUgd2hpY2ggbWF5IGhhdmUg YWR2YW5jZWQuIFdlIHRyaW0gdGhhdCBsaXN0IGJ5Cm9ubHkgY2hlY2tpbmcgcXVldWVkIGNvbnRl eHRzIHRoYXQgYXJlIGJlaW5nIHdhaXRlZCBvbiwgYnV0IHN0aWxsIHdlCmtlZXAgYSBsaXN0IG9m IGFsbCBhY3RpdmUgY29udGV4dHMgYW5kIHRoZWlyIGFjdGl2ZSBzaWduYWxlcnMgdGhhdCB3ZQpp bnNwZWN0IGZyb20gaW5zaWRlIHRoZSBpcnEgaGFuZGxlci4gQnkgbW92aW5nIHRoZSB3YWl0ZXJz IG9udG8gdGhlIGZlbmNlCnNpZ25hbCBsaXN0LCB3ZSBjYW4gY29tYmluZSB0aGUgY2xpZW50IHdh a2V1cCB3aXRoIHRoZSBkbWFfZmVuY2UKc2lnbmFsaW5nIChhIGRyYW1hdGljIHJlZHVjdGlvbiBp biBjb21wbGV4aXR5LCBidXQgZG9lcyByZXF1aXJlIHRoZSBIVwpiZWluZyBjb2hlcmVudCwgdGhl IHNlcW5vIG11c3QgYmUgdmlzaWJsZSBmcm9tIHRoZSBjcHUgYmVmb3JlIHRoZQppbnRlcnJ1cHQg aXMgcmFpc2VkIC0gd2Uga2VlcCBhIHRpbWVyIGJhY2t1cCBqdXN0IGluIGNhc2UpLgoKSGF2aW5n IHByZXZpb3VzbHkgZml4ZWQgYWxsIHRoZSBpc3N1ZXMgd2l0aCBpcnEtc2Vxbm8gc2VyaWFsaXNh dGlvbiAoYnkKaW5zZXJ0aW5nIGRlbGF5cyBvbnRvIHRoZSBHUFUgYWZ0ZXIgZWFjaCByZXF1ZXN0 IGluc3RlYWQgb2YgcmFuZG9tIGRlbGF5cwpvbiB0aGUgQ1BVIGFmdGVyIGVhY2ggaW50ZXJydXB0 KSwgd2UgY2FuIHJlbHkgb24gdGhlIHNlcW5vIHN0YXRlIHRvCnBlcmZvbSBkaXJlY3Qgd2FrZXVw cyBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyBhbGxvd3MgdXMgdG8KcHJlc2VydmUg b3VyIHNpbmdsZSBjb250ZXh0IHN3aXRjaCBiZWhhdmlvdXIgb2YgdGhlIGN1cnJlbnQgcm91dGlu ZSwKd2l0aCB0aGUgb25seSBkb3duc2lkZSB0aGF0IHdlIGxvc2UgdGhlIFJUIHByaW9yaXR5IHNv cnRpbmcgb2Ygd2FrZXVwcy4KSW4gZ2VuZXJhbCwgZGlyZWN0IHdha2V1cCBsYXRlbmN5IG9mIG11 bHRpcGxlIGNsaWVudHMgaXMgYWJvdXQgdGhlIHNhbWUKKGFib3V0IDEwJSBiZXR0ZXIgaW4gbW9z dCBjYXNlcykgd2l0aCBhIHJlZHVjdGlvbiBpbiB0b3RhbCBDUFUgdGltZSBzcGVudAppbiB0aGUg d2FpdGVyIChhYm91dCAyMC01MCUgZGVwZW5kaW5nIG9uIGdlbikuIEF2ZXJhZ2UgaGVyZCBiZWhh dmlvdXIgaXMKaW1wcm92ZWQsIGJ1dCBhdCB0aGUgY29zdCBvZiBub3QgZGVsZWdhdGluZyB3YWtl dXBzIG9uIHRhc2tfcHJpby4KClJlZmVyZW5jZXM6IDY4OGU2YzcyNTgxNiAoImRybS9pOTE1OiBT bGF1Z2h0ZXIgdGhlIHRodW5kZXJpbmcgaTkxNV93YWl0X3JlcXVlc3QgaGVyZCIpClNpZ25lZC1v ZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAyOCArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgICAgICAgfCAgNzMgLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmggICAgICAgICB8ICAgOCAtCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgODggKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8IDEyOCArLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5oICAgICAgICAgICB8ICAyMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZXNldC5jICAgICAgICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9icmVhZGNydW1icy5jICAgICAgfCA3OTMgKysrKystLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgICAgICAgfCAgMzQgKy0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgICAgICB8ICAgNiArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgICAgIHwgIDk1ICstLQogLi4u L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggIHwgICAxIC0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYyB8IDM5OCArKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jICB8ICAgNSAtCiAu Li4vZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2JyZWFkY3J1bWJzLmMgICAgfCA0NzAgLS0tLS0t LS0tLS0KIC4uLi9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jICB8ICAg MiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2xpYl9zd19mZW5jZS5jIHwgIDU0 ICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmggfCAgIDMg KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jIHwgICAyICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jICB8ICAyNiArLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmggIHwgICA2IC0KIDIz IGZpbGVzIGNoYW5nZWQsIDc3NCBpbnNlcnRpb25zKCspLCAxNDg1IGRlbGV0aW9ucygtKQogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9icmVh ZGNydW1icy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCAyYTZlNDA0NGYy NWIuLmQ3NzY0ZTYyZTliNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k ZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTEz MTUsMjkgKzEzMTUsMTYgQEAgc3RhdGljIGludCBpOTE1X2hhbmdjaGVja19pbmZvKHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogCXNlcV9wcmludGYobSwgIkdUIGFjdGl2ZT8gJXNc biIsIHllc25vKGRldl9wcml2LT5ndC5hd2FrZSkpOwogCiAJZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgZGV2X3ByaXYsIGlkKSB7Ci0JCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdp bmUtPmJyZWFkY3J1bWJzOwotCQlzdHJ1Y3QgcmJfbm9kZSAqcmI7Ci0KIAkJc2VxX3ByaW50Ziht LCAiJXM6XG4iLCBlbmdpbmUtPm5hbWUpOwogCQlzZXFfcHJpbnRmKG0sICJcdHNlcW5vID0gJXgg W2N1cnJlbnQgJXgsIGxhc3QgJXhdLCAlZG1zIGFnb1xuIiwKIAkJCSAgIGVuZ2luZS0+aGFuZ2No ZWNrLnNlcW5vLCBzZXFub1tpZF0sCiAJCQkgICBpbnRlbF9lbmdpbmVfbGFzdF9zdWJtaXQoZW5n aW5lKSwKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCiAJCQkJCSAgICBlbmdpbmUt PmhhbmdjaGVjay5hY3Rpb25fdGltZXN0YW1wKSk7Ci0JCXNlcV9wcmludGYobSwgIlx0d2FpdGVy cz8gJXMsIGZha2UgaXJxIGFjdGl2ZT8gJXNcbiIsCi0JCQkgICB5ZXNubyhpbnRlbF9lbmdpbmVf aGFzX3dhaXRlcihlbmdpbmUpKSwKKwkJc2VxX3ByaW50ZihtLCAiXHRmYWtlIGlycSBhY3RpdmU/ ICVzXG4iLAogCQkJICAgeWVzbm8odGVzdF9iaXQoZW5naW5lLT5pZCwKIAkJCQkJICAmZGV2X3By aXYtPmdwdV9lcnJvci5taXNzZWRfaXJxX3JpbmdzKSkpOwogCi0JCXNwaW5fbG9ja19pcnEoJmIt PnJiX2xvY2spOwotCQlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMpOyByYjsgcmIgPSBy Yl9uZXh0KHJiKSkgewotCQkJc3RydWN0IGludGVsX3dhaXQgKncgPSByYl9lbnRyeShyYiwgdHlw ZW9mKCp3KSwgbm9kZSk7Ci0KLQkJCXNlcV9wcmludGYobSwgIlx0JXMgWyVkXSB3YWl0aW5nIGZv ciAleFxuIiwKLQkJCQkgICB3LT50c2stPmNvbW0sIHctPnRzay0+cGlkLCB3LT5zZXFubyk7Ci0J CX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKLQogCQlzZXFfcHJpbnRmKG0sICJc dEFDVEhEID0gMHglMDhsbHggW2N1cnJlbnQgMHglMDhsbHhdXG4iLAogCQkJICAgKGxvbmcgbG9u ZyllbmdpbmUtPmhhbmdjaGVjay5hY3RoZCwKIAkJCSAgIChsb25nIGxvbmcpYWN0aGRbaWRdKTsK QEAgLTIwMjEsMTggKzIwMDgsNiBAQCBzdGF0aWMgaW50IGk5MTVfc3dpenpsZV9pbmZvKHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBj b3VudF9pcnFfd2FpdGVycyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0J aW50IGNvdW50ID0gMDsKLQotCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKQotCQlj b3VudCArPSBpbnRlbF9lbmdpbmVfaGFzX3dhaXRlcihlbmdpbmUpOwotCi0JcmV0dXJuIGNvdW50 OwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqcnBzX3Bvd2VyX3RvX3N0cih1bnNpZ25lZCBpbnQg cG93ZXIpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10gPSB7CkBAIC0y MDcyLDcgKzIwNDcsNiBAQCBzdGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNl cV9maWxlICptLCB2b2lkICpkYXRhKQogCXNlcV9wcmludGYobSwgIlJQUyBlbmFibGVkPyAlZFxu IiwgcnBzLT5lbmFibGVkKTsKIAlzZXFfcHJpbnRmKG0sICJHUFUgYnVzeT8gJXMgWyVkIHJlcXVl c3RzXVxuIiwKIAkJICAgeWVzbm8oZGV2X3ByaXYtPmd0LmF3YWtlKSwgZGV2X3ByaXYtPmd0LmFj dGl2ZV9yZXF1ZXN0cyk7Ci0Jc2VxX3ByaW50ZihtLCAiQ1BVIHdhaXRpbmc/ICVkXG4iLCBjb3Vu dF9pcnFfd2FpdGVycyhkZXZfcHJpdikpOwogCXNlcV9wcmludGYobSwgIkJvb3N0cyBvdXRzdGFu ZGluZz8gJWRcbiIsCiAJCSAgIGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7CiAJc2Vx X3ByaW50ZihtLCAiSW50ZXJhY3RpdmU/ICVkXG4iLCBSRUFEX09OQ0UocnBzLT5wb3dlci5pbnRl cmFjdGl2ZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IDU5 MzNhZGJlM2Q5OS4uMDU0ZDNlMWJmZTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5jCkBAIC0zNDIsNiArMzQyLDggQEAgX19jcmVhdGVfaHdfY29udGV4dChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9 ICZjdHgtPl9fZW5naW5lW25dOwogCiAJCWNlLT5nZW1fY29udGV4dCA9IGN0eDsKKwkJSU5JVF9M SVNUX0hFQUQoJmNlLT5zaWduYWxfbGluayk7CisJCUlOSVRfTElTVF9IRUFEKCZjZS0+c2lnbmFs cyk7CiAJfQogCiAJSU5JVF9SQURJWF9UUkVFKCZjdHgtPmhhbmRsZXNfdm1hLCBHRlBfS0VSTkVM KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAppbmRleCBmNmQ4NzBiMWY3 M2UuLmU1ZWNhMjljZDM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fY29udGV4dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQu aApAQCAtMTY0LDYgKzE2NCw4IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsKIAlzdHJ1Y3Qg aW50ZWxfY29udGV4dCB7CiAJCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpnZW1fY29udGV4dDsK IAkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqYWN0aXZlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHNp Z25hbF9saW5rOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbHM7CiAJCXN0cnVjdCBpOTE1X3Zt YSAqc3RhdGU7CiAJCXN0cnVjdCBpbnRlbF9yaW5nICpyaW5nOwogCQl1MzIgKmxyY19yZWdfc3Rh dGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwppbmRleCA2ZjJmY2FkMGE2ZWUu LjdjMjUxMGNlODFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCkBAIC01 MzAsNyArNTMwLDYgQEAgc3RhdGljIHZvaWQgZXJyb3JfcHJpbnRfZW5naW5lKHN0cnVjdCBkcm1f aTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCiAJfQogCWVycl9wcmludGYobSwgIiAgc2Vxbm86IDB4 JTA4eFxuIiwgZWUtPnNlcW5vKTsKIAllcnJfcHJpbnRmKG0sICIgIGxhc3Rfc2Vxbm86IDB4JTA4 eFxuIiwgZWUtPmxhc3Rfc2Vxbm8pOwotCWVycl9wcmludGYobSwgIiAgd2FpdGluZzogJXNcbiIs IHllc25vKGVlLT53YWl0aW5nKSk7CiAJZXJyX3ByaW50ZihtLCAiICByaW5nLT5oZWFkOiAweCUw OHhcbiIsIGVlLT5jcHVfcmluZ19oZWFkKTsKIAllcnJfcHJpbnRmKG0sICIgIHJpbmctPnRhaWw6 IDB4JTA4eFxuIiwgZWUtPmNwdV9yaW5nX3RhaWwpOwogCWVycl9wcmludGYobSwgIiAgaGFuZ2No ZWNrIHRpbWVzdGFtcDogJWRtcyAoJWx1JXMpXG4iLApAQCAtODA0LDIxICs4MDMsNiBAQCBzdGF0 aWMgdm9pZCBfX2Vycl9wcmludF90b19zZ2woc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlX2J1 ZiAqbSwKIAkJCQkJCSAgICBlcnJvci0+ZXBvY2gpOwogCQl9CiAKLQkJaWYgKElTX0VSUihlZS0+ d2FpdGVycykpIHsKLQkJCWVycl9wcmludGYobSwgIiVzIC0tLSA/IHdhaXRlcnMgW3VuYWJsZSB0 byBhY3F1aXJlIHNwaW5sb2NrXVxuIiwKLQkJCQkgICBtLT5pOTE1LT5lbmdpbmVbaV0tPm5hbWUp OwotCQl9IGVsc2UgaWYgKGVlLT5udW1fd2FpdGVycykgewotCQkJZXJyX3ByaW50ZihtLCAiJXMg LS0tICVkIHdhaXRlcnNcbiIsCi0JCQkJICAgbS0+aTkxNS0+ZW5naW5lW2ldLT5uYW1lLAotCQkJ CSAgIGVlLT5udW1fd2FpdGVycyk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgZWUtPm51bV93YWl0ZXJz OyBqKyspIHsKLQkJCQllcnJfcHJpbnRmKG0sICIgc2Vxbm8gMHglMDh4IGZvciAlcyBbJWRdXG4i LAotCQkJCQkgICBlZS0+d2FpdGVyc1tqXS5zZXFubywKLQkJCQkJICAgZWUtPndhaXRlcnNbal0u Y29tbSwKLQkJCQkJICAgZWUtPndhaXRlcnNbal0ucGlkKTsKLQkJCX0KLQkJfQotCiAJCXByaW50 X2Vycm9yX29iaihtLCBtLT5pOTE1LT5lbmdpbmVbaV0sCiAJCQkJInJpbmdidWZmZXIiLCBlZS0+ cmluZ2J1ZmZlcik7CiAKQEAgLTEwMDAsOCArOTg0LDYgQEAgdm9pZCBfX2k5MTVfZ3B1X3N0YXRl X2ZyZWUoc3RydWN0IGtyZWYgKmVycm9yX3JlZikKIAkJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShl ZS0+d2FfY3R4KTsKIAogCQlrZnJlZShlZS0+cmVxdWVzdHMpOwotCQlpZiAoIUlTX0VSUl9PUl9O VUxMKGVlLT53YWl0ZXJzKSkKLQkJCWtmcmVlKGVlLT53YWl0ZXJzKTsKIAl9CiAKIAlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShlcnJvci0+YWN0aXZlX2JvKTsgaSsrKQpAQCAtMTIwMSw1OSAr MTE4Myw2IEBAIHN0YXRpYyB2b2lkIGdlbjZfcmVjb3JkX3NlbWFwaG9yZV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQlJOTE1X1JFQUQoUklOR19TWU5DXzIoZW5naW5l LT5tbWlvX2Jhc2UpKTsKIH0KIAotc3RhdGljIHZvaWQgZXJyb3JfcmVjb3JkX2VuZ2luZV93YWl0 ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkJc3RydWN0IGRybV9pOTE1 X2Vycm9yX2VuZ2luZSAqZWUpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVu Z2luZS0+YnJlYWRjcnVtYnM7Ci0Jc3RydWN0IGRybV9pOTE1X2Vycm9yX3dhaXRlciAqd2FpdGVy OwotCXN0cnVjdCByYl9ub2RlICpyYjsKLQlpbnQgY291bnQ7Ci0KLQllZS0+bnVtX3dhaXRlcnMg PSAwOwotCWVlLT53YWl0ZXJzID0gTlVMTDsKLQotCWlmIChSQl9FTVBUWV9ST09UKCZiLT53YWl0 ZXJzKSkKLQkJcmV0dXJuOwotCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxKCZiLT5yYl9sb2NrKSkg ewotCQllZS0+d2FpdGVycyA9IEVSUl9QVFIoLUVERUFETEspOwotCQlyZXR1cm47Ci0JfQotCi0J Y291bnQgPSAwOwotCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7IHJiICE9IE5VTEw7 IHJiID0gcmJfbmV4dChyYikpCi0JCWNvdW50Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9s b2NrKTsKLQotCXdhaXRlciA9IE5VTEw7Ci0JaWYgKGNvdW50KQotCQl3YWl0ZXIgPSBrbWFsbG9j X2FycmF5KGNvdW50LAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2Vycm9yX3dh aXRlciksCi0JCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCWlmICghd2FpdGVyKQotCQlyZXR1cm47 Ci0KLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnEoJmItPnJiX2xvY2spKSB7Ci0JCWtmcmVlKHdhaXRl cik7Ci0JCWVlLT53YWl0ZXJzID0gRVJSX1BUUigtRURFQURMSyk7Ci0JCXJldHVybjsKLQl9Ci0K LQllZS0+d2FpdGVycyA9IHdhaXRlcjsKLQlmb3IgKHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMp OyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewotCQlzdHJ1Y3QgaW50ZWxfd2FpdCAqdyA9IHJiX2Vu dHJ5KHJiLCB0eXBlb2YoKncpLCBub2RlKTsKLQotCQlzdHJjcHkod2FpdGVyLT5jb21tLCB3LT50 c2stPmNvbW0pOwotCQl3YWl0ZXItPnBpZCA9IHctPnRzay0+cGlkOwotCQl3YWl0ZXItPnNlcW5v ID0gdy0+c2Vxbm87Ci0JCXdhaXRlcisrOwotCi0JCWlmICgrK2VlLT5udW1fd2FpdGVycyA9PSBj b3VudCkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnEoJmItPnJiX2xvY2spOwotfQot CiBzdGF0aWMgdm9pZCBlcnJvcl9yZWNvcmRfZW5naW5lX3JlZ2lzdGVycyhzdHJ1Y3QgaTkxNV9n cHVfc3RhdGUgKmVycm9yLAogCQkJCQkgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK IAkJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfZW5naW5lICplZSkKQEAgLTEyODksNyArMTIx OCw2IEBAIHN0YXRpYyB2b2lkIGVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0ZXJzKHN0cnVjdCBp OTE1X2dwdV9zdGF0ZSAqZXJyb3IsCiAKIAlpbnRlbF9lbmdpbmVfZ2V0X2luc3Rkb25lKGVuZ2lu ZSwgJmVlLT5pbnN0ZG9uZSk7CiAKLQllZS0+d2FpdGluZyA9IGludGVsX2VuZ2luZV9oYXNfd2Fp dGVyKGVuZ2luZSk7CiAJZWUtPmluc3RwbSA9IEk5MTVfUkVBRChSSU5HX0lOU1RQTShlbmdpbmUt Pm1taW9fYmFzZSkpOwogCWVlLT5hY3RoZCA9IGludGVsX2VuZ2luZV9nZXRfYWN0aXZlX2hlYWQo ZW5naW5lKTsKIAllZS0+c2Vxbm8gPSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7CkBA IC0xNTM4LDcgKzE0NjYsNiBAQCBzdGF0aWMgdm9pZCBnZW1fcmVjb3JkX3JpbmdzKHN0cnVjdCBp OTE1X2dwdV9zdGF0ZSAqZXJyb3IpCiAJCWVlLT5lbmdpbmVfaWQgPSBpOwogCiAJCWVycm9yX3Jl Y29yZF9lbmdpbmVfcmVnaXN0ZXJzKGVycm9yLCBlbmdpbmUsIGVlKTsKLQkJZXJyb3JfcmVjb3Jk X2VuZ2luZV93YWl0ZXJzKGVuZ2luZSwgZWUpOwogCQllcnJvcl9yZWNvcmRfZW5naW5lX2V4ZWNs aXN0cyhlbmdpbmUsIGVlKTsKIAogCQlyZXF1ZXN0ID0gaTkxNV9nZW1fZmluZF9hY3RpdmVfcmVx dWVzdChlbmdpbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVf ZXJyb3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmgKaW5kZXggMjMx MTczNzg2ZWFlLi4wZTE4NDcxMmNiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3B1X2Vycm9yLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJy b3IuaApAQCAtODIsOCArODIsNiBAQCBzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgewogCQlpbnQgZW5n aW5lX2lkOwogCQkvKiBTb2Z0d2FyZSB0cmFja2VkIHN0YXRlICovCiAJCWJvb2wgaWRsZTsKLQkJ Ym9vbCB3YWl0aW5nOwotCQlpbnQgbnVtX3dhaXRlcnM7CiAJCXVuc2lnbmVkIGxvbmcgaGFuZ2No ZWNrX3RpbWVzdGFtcDsKIAkJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm07CiAJCWludCBu dW1fcmVxdWVzdHM7CkBAIC0xNTksMTIgKzE1Nyw2IEBAIHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSB7 CiAJCX0gKnJlcXVlc3RzLCBleGVjbGlzdFtFWEVDTElTVF9NQVhfUE9SVFNdOwogCQl1bnNpZ25l ZCBpbnQgbnVtX3BvcnRzOwogCi0JCXN0cnVjdCBkcm1faTkxNV9lcnJvcl93YWl0ZXIgewotCQkJ Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwotCQkJcGlkX3QgcGlkOwotCQkJdTMyIHNlcW5vOwot CQl9ICp3YWl0ZXJzOwotCiAJCXN0cnVjdCB7CiAJCQl1MzIgZ2Z4X21vZGU7CiAJCQl1bmlvbiB7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4ZGE1ODE2ZTI4NTQuLjc2NjliMWNhZWVmMCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjZGVmaW5lIHBy X2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAKLSNpbmNsdWRlIDxsaW51eC9zeXNy cS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgorCiAj aW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+CiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRl ICJpOTE1X3RyYWNlLmgiCkBAIC0xMTUxLDY3ICsxMTUyLDYgQEAgc3RhdGljIHZvaWQgaXJvbmxh a2VfcnBzX2NoYW5nZV9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBub3RpZnlfcmluZyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCi17Ci0JY29uc3QgdTMyIHNlcW5vID0gaW50ZWxfZW5naW5lX2dl dF9zZXFubyhlbmdpbmUpOwotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gTlVMTDsKLQlzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnRzayA9IE5VTEw7Ci0Jc3RydWN0IGludGVsX3dhaXQgKndhaXQ7Ci0K LQlpZiAodW5saWtlbHkoIWVuZ2luZS0+YnJlYWRjcnVtYnMuaXJxX2FybWVkKSkKLQkJcmV0dXJu OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3Bpbl9sb2NrKCZlbmdpbmUtPmJyZWFkY3J1bWJz LmlycV9sb2NrKTsKLQl3YWl0ID0gZW5naW5lLT5icmVhZGNydW1icy5pcnFfd2FpdDsKLQlpZiAo d2FpdCkgewotCQkvKgotCQkgKiBXZSB1c2UgYSBjYWxsYmFjayBmcm9tIHRoZSBkbWEtZmVuY2Ug dG8gc3VibWl0Ci0JCSAqIHJlcXVlc3RzIGFmdGVyIHdhaXRpbmcgb24gb3VyIG93biByZXF1ZXN0 cy4gVG8KLQkJICogZW5zdXJlIG1pbmltdW0gZGVsYXkgaW4gcXVldWluZyB0aGUgbmV4dCByZXF1 ZXN0IHRvCi0JCSAqIGhhcmR3YXJlLCBzaWduYWwgdGhlIGZlbmNlIG5vdyByYXRoZXIgdGhhbiB3 YWl0IGZvcgotCQkgKiB0aGUgc2lnbmFsZXIgdG8gYmUgd29rZW4gdXAuIFdlIHN0aWxsIHdha2Ug dXAgdGhlCi0JCSAqIHdhaXRlciBpbiBvcmRlciB0byBoYW5kbGUgdGhlIGlycS1zZXFubyBjb2hl cmVuY3kKLQkJICogaXNzdWVzICh3ZSBtYXkgcmVjZWl2ZSB0aGUgaW50ZXJydXB0IGJlZm9yZSB0 aGUKLQkJICogc2Vxbm8gaXMgd3JpdHRlbiwgc2VlIF9faTkxNV9yZXF1ZXN0X2lycV9jb21wbGV0 ZSgpKQotCQkgKiBhbmQgdG8gaGFuZGxlIGNvYWxlc2Npbmcgb2YgbXVsdGlwbGUgc2Vxbm8gdXBk YXRlcwotCQkgKiBhbmQgbWFueSB3YWl0ZXJzLgotCQkgKi8KLQkJaWYgKGk5MTVfc2Vxbm9fcGFz c2VkKHNlcW5vLCB3YWl0LT5zZXFubykpIHsKLQkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKndhaXRl ciA9IHdhaXQtPnJlcXVlc3Q7Ci0KLQkJCWlmICh3YWl0ZXIgJiYKLQkJCSAgICAhdGVzdF9iaXQo RE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULAotCQkJCSAgICAgICZ3YWl0ZXItPmZlbmNlLmZs YWdzKSAmJgotCQkJICAgIGludGVsX3dhaXRfY2hlY2tfcmVxdWVzdCh3YWl0LCB3YWl0ZXIpKQot CQkJCXJxID0gaTkxNV9yZXF1ZXN0X2dldCh3YWl0ZXIpOwotCi0JCQl0c2sgPSB3YWl0LT50c2s7 Ci0JCX0KLQotCQllbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9jb3VudCsrOwotCX0gZWxzZSB7Ci0J CWlmIChlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9hcm1lZCkKLQkJCV9faW50ZWxfZW5naW5lX2Rp c2FybV9icmVhZGNydW1icyhlbmdpbmUpOwotCX0KLQlzcGluX3VubG9jaygmZW5naW5lLT5icmVh ZGNydW1icy5pcnFfbG9jayk7Ci0KLQlpZiAocnEpIHsKLQkJc3Bpbl9sb2NrKCZycS0+bG9jayk7 Ci0JCWRtYV9mZW5jZV9zaWduYWxfbG9ja2VkKCZycS0+ZmVuY2UpOwotCQlHRU1fQlVHX09OKCFp OTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7Ci0JCXNwaW5fdW5sb2NrKCZycS0+bG9jayk7Ci0K LQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Ci0JfQotCi0JaWYgKHRzayAmJiB0c2stPnN0YXRlICYg VEFTS19OT1JNQUwpCi0JCXdha2VfdXBfcHJvY2Vzcyh0c2spOwotCi0JcmN1X3JlYWRfdW5sb2Nr KCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZsdl9jMF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKIAkJCXN0cnVjdCBpbnRlbF9ycHNfZWkgKmVpKQogewpAQCAtMTQ1NiwyMCAr MTM5NiwyMCBAQCBzdGF0aWMgdm9pZCBpbGtfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIHUzMiBndF9paXIpCiB7CiAJaWYgKGd0X2lp ciAmIEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKLQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVu Z2luZVtSQ1NdKTsKKwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5n aW5lW1JDU10pOwogCWlmIChndF9paXIgJiBJTEtfQlNEX1VTRVJfSU5URVJSVVBUKQotCQlub3Rp ZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOworCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVt YnNfaXJxKGRldl9wcml2LT5lbmdpbmVbVkNTXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNuYl9ndF9p cnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgICAg dTMyIGd0X2lpcikKIHsKIAlpZiAoZ3RfaWlyICYgR1RfUkVOREVSX1VTRVJfSU5URVJSVVBUKQot CQlub3RpZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW1JDU10pOworCQlpbnRlbF9lbmdpbmVfYnJl YWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7CiAJaWYgKGd0X2lpciAmIEdUX0JT RF9VU0VSX0lOVEVSUlVQVCkKLQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsK KwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOwog CWlmIChndF9paXIgJiBHVF9CTFRfVVNFUl9JTlRFUlJVUFQpCi0JCW5vdGlmeV9yaW5nKGRldl9w cml2LT5lbmdpbmVbQkNTXSk7CisJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3By aXYtPmVuZ2luZVtCQ1NdKTsKIAogCWlmIChndF9paXIgJiAoR1RfQkxUX0NTX0VSUk9SX0lOVEVS UlVQVCB8CiAJCSAgICAgIEdUX0JTRF9DU19FUlJPUl9JTlRFUlJVUFQgfApAQCAtMTQ4OSw3ICsx NDI5LDcgQEAgZ2VuOF9jc19pcnFfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIHUzMiBpaXIpCiAJCXRhc2tsZXQgPSB0cnVlOwogCiAJaWYgKGlpciAmIEdUX1JFTkRFUl9V U0VSX0lOVEVSUlVQVCkgewotCQlub3RpZnlfcmluZyhlbmdpbmUpOworCQlpbnRlbF9lbmdpbmVf YnJlYWRjcnVtYnNfaXJxKGVuZ2luZSk7CiAJCXRhc2tsZXQgfD0gVVNFU19HVUNfU1VCTUlTU0lP TihlbmdpbmUtPmk5MTUpOwogCX0KIApAQCAtMTgzNSw3ICsxNzc1LDcgQEAgc3RhdGljIHZvaWQg Z2VuNl9ycHNfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1 MzIgcG1faWlyKQogCiAJaWYgKEhBU19WRUJPWChkZXZfcHJpdikpIHsKIAkJaWYgKHBtX2lpciAm IFBNX1ZFQk9YX1VTRVJfSU5URVJSVVBUKQotCQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2lu ZVtWRUNTXSk7CisJCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdp bmVbVkVDU10pOwogCiAJCWlmIChwbV9paXIgJiBQTV9WRUJPWF9DU19FUlJPUl9JTlRFUlJVUFQp CiAJCQlEUk1fREVCVUcoIkNvbW1hbmQgcGFyc2VyIGVycm9yLCBwbV9paXIgMHglMDh4XG4iLCBw bV9paXIpOwpAQCAtNDI1OCw3ICs0MTk4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGk4eHhfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogCQlJOTE1X1dSSVRFMTYoSUlSLCBpaXIpOwog CiAJCWlmIChpaXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKQotCQkJbm90aWZ5X3JpbmcoZGV2X3By aXYtPmVuZ2luZVtSQ1NdKTsKKwkJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZGV2X3By aXYtPmVuZ2luZVtSQ1NdKTsKIAogCQlpZiAoaWlyICYgSTkxNV9NQVNURVJfRVJST1JfSU5URVJS VVBUKQogCQkJaTh4eF9lcnJvcl9pcnFfaGFuZGxlcihkZXZfcHJpdiwgZWlyLCBlaXJfc3R1Y2sp OwpAQCAtNDM2Niw3ICs0MzA2LDcgQEAgc3RhdGljIGlycXJldHVybl90IGk5MTVfaXJxX2hhbmRs ZXIoaW50IGlycSwgdm9pZCAqYXJnKQogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAogCQlpZiAo aWlyICYgSTkxNV9VU0VSX0lOVEVSUlVQVCkKLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdp bmVbUkNTXSk7CisJCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdp bmVbUkNTXSk7CiAKIAkJaWYgKGlpciAmIEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCkKIAkJ CWk5eHhfZXJyb3JfaXJxX2hhbmRsZXIoZGV2X3ByaXYsIGVpciwgZWlyX3N0dWNrKTsKQEAgLTQ1 MTEsMTAgKzQ0NTEsMTAgQEAgc3RhdGljIGlycXJldHVybl90IGk5NjVfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqYXJnKQogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAogCQlpZiAoaWlyICYg STkxNV9VU0VSX0lOVEVSUlVQVCkKLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbUkNT XSk7CisJCQlpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbUkNT XSk7CiAKIAkJaWYgKGlpciAmIEk5MTVfQlNEX1VTRVJfSU5URVJSVVBUKQotCQkJbm90aWZ5X3Jp bmcoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKKwkJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19p cnEoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKIAogCQlpZiAoaWlyICYgSTkxNV9NQVNURVJfRVJS T1JfSU5URVJSVVBUKQogCQkJaTl4eF9lcnJvcl9pcnFfaGFuZGxlcihkZXZfcHJpdiwgZWlyLCBl aXJfc3R1Y2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwppbmRleCBmNjFjYzVjMWJm MDguLjVhZDE0NDA5YjUyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZXF1ZXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKQEAgLTYw LDcgKzYwLDcgQEAgc3RhdGljIGJvb2wgaTkxNV9mZW5jZV9zaWduYWxlZChzdHJ1Y3QgZG1hX2Zl bmNlICpmZW5jZSkKIAogc3RhdGljIGJvb2wgaTkxNV9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQogewotCXJldHVybiBpbnRlbF9lbmdpbmVfZW5hYmxlX3Np Z25hbGluZyh0b19yZXF1ZXN0KGZlbmNlKSwgdHJ1ZSk7CisJcmV0dXJuIGludGVsX2VuZ2luZV9l bmFibGVfc2lnbmFsaW5nKHRvX3JlcXVlc3QoZmVuY2UpKTsKIH0KIAogc3RhdGljIHNpZ25lZCBs b25nIGk5MTVfZmVuY2Vfd2FpdChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKQEAgLTM3MCw5ICsz NzAsMTEgQEAgdm9pZCBfX2k5MTVfcmVxdWVzdF9zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAq cmVxdWVzdCkKIAogCS8qIFdlIG1heSBiZSByZWN1cnNpbmcgZnJvbSB0aGUgc2lnbmFsIGNhbGxi YWNrIG9mIGFub3RoZXIgaTkxNSBmZW5jZSAqLwogCXNwaW5fbG9ja19uZXN0ZWQoJnJlcXVlc3Qt PmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwlzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19B Q1RJVkUsICZyZXF1ZXN0LT5mZW5jZS5mbGFncyk7CiAJcmVxdWVzdC0+Z2xvYmFsX3NlcW5vID0g c2Vxbm87Ci0JaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdOQUxfQklULCAm cmVxdWVzdC0+ZmVuY2UuZmxhZ3MpKQotCQlpbnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGluZyhy ZXF1ZXN0LCBmYWxzZSk7CisJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdO QUxfQklULCAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3MpICYmCisJICAgICFpbnRlbF9lbmdpbmVfZW5h YmxlX3NpZ25hbGluZyhyZXF1ZXN0KSkKKwkJaW50ZWxfZW5naW5lX3F1ZXVlX2JyZWFkY3J1bWJz KGVuZ2luZSk7CiAJc3Bpbl91bmxvY2soJnJlcXVlc3QtPmxvY2spOwogCiAJZW5naW5lLT5lbWl0 X2JyZWFkY3J1bWIocmVxdWVzdCwKQEAgLTM4Miw4ICszODQsNiBAQCB2b2lkIF9faTkxNV9yZXF1 ZXN0X3N1Ym1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQogCW1vdmVfdG9fdGltZWxp bmUocmVxdWVzdCwgJmVuZ2luZS0+dGltZWxpbmUpOwogCiAJdHJhY2VfaTkxNV9yZXF1ZXN0X2V4 ZWN1dGUocmVxdWVzdCk7Ci0KLQl3YWtlX3VwX2FsbCgmcmVxdWVzdC0+ZXhlY3V0ZSk7CiB9CiAK IHZvaWQgaTkxNV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQpA QCAtNDI3LDYgKzQyNyw3IEBAIHZvaWQgX19pOTE1X3JlcXVlc3RfdW5zdWJtaXQoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcmVxdWVzdCkKIAlyZXF1ZXN0LT5nbG9iYWxfc2Vxbm8gPSAwOwogCWlmICh0 ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJlcXVlc3QtPmZlbmNl LmZsYWdzKSkKIAkJaW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcocmVxdWVzdCk7CisJY2xl YXJfYml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJVkUsICZyZXF1ZXN0LT5mZW5jZS5mbGFncyk7CiAJ c3Bpbl91bmxvY2soJnJlcXVlc3QtPmxvY2spOwogCiAJLyogVHJhbnNmZXIgYmFjayBmcm9tIHRo ZSBnbG9iYWwgcGVyLWVuZ2luZSB0aW1lbGluZSB0byBwZXItY29udGV4dCAqLwpAQCAtNjI2LDEz ICs2MjcsMTEgQEAgaTkxNV9yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKIAogCS8qIFdlIGJ1bXAgdGhlIHJl ZiBmb3IgdGhlIGZlbmNlIGNoYWluICovCiAJaTkxNV9zd19mZW5jZV9pbml0KCZpOTE1X3JlcXVl c3RfZ2V0KHJxKS0+c3VibWl0LCBzdWJtaXRfbm90aWZ5KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFk KCZycS0+ZXhlY3V0ZSk7CiAKIAlpOTE1X3NjaGVkX25vZGVfaW5pdCgmcnEtPnNjaGVkKTsKIAog CS8qIE5vIHphbGxvYywgbXVzdCBjbGVhciB3aGF0IHdlIG5lZWQgYnkgaGFuZCAqLwogCXJxLT5n bG9iYWxfc2Vxbm8gPSAwOwotCXJxLT5zaWduYWxpbmcud2FpdC5zZXFubyA9IDA7CiAJcnEtPmZp bGVfcHJpdiA9IE5VTEw7CiAJcnEtPmJhdGNoID0gTlVMTDsKIAlycS0+Y2FwdHVyZV9saXN0ID0g TlVMTDsKQEAgLTEwMjMsMTMgKzEwMjIsMTAgQEAgc3RhdGljIGJvb2wgYnVzeXdhaXRfc3RvcCh1 bnNpZ25lZCBsb25nIHRpbWVvdXQsIHVuc2lnbmVkIGludCBjcHUpCiAJcmV0dXJuIHRoaXNfY3B1 ICE9IGNwdTsKIH0KIAotc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKLQkJCQl1MzIgc2Vxbm8sIGludCBzdGF0ZSwgdW5zaWduZWQg bG9uZyB0aW1lb3V0X3VzKQorc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICogY29uc3QgcnEsCisJCQkJaW50IHN0YXRlLCB1bnNpZ25lZCBs b25nIHRpbWVvdXRfdXMpCiB7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcnEt PmVuZ2luZTsKLQl1bnNpZ25lZCBpbnQgaXJxLCBjcHU7Ci0KLQlHRU1fQlVHX09OKCFzZXFubyk7 CisJdW5zaWduZWQgaW50IGNwdTsKIAogCS8qCiAJICogT25seSB3YWl0IGZvciB0aGUgcmVxdWVz dCBpZiB3ZSBrbm93IGl0IGlzIGxpa2VseSB0byBjb21wbGV0ZS4KQEAgLTEwNDIsNyArMTAzOCw3 IEBAIHN0YXRpYyBib29sIF9faTkxNV9zcGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEsCiAJICogaXQgaXMgYSBmYWlyIGFzc3VtcHRpb24gdGhhdCBpdCB3aWxsIG5vdCBj b21wbGV0ZSB3aXRoaW4gb3VyCiAJICogcmVsYXRpdmVseSBzaG9ydCB0aW1lb3V0LgogCSAqLwot CWlmICghaW50ZWxfZW5naW5lX2hhc19zdGFydGVkKGVuZ2luZSwgc2Vxbm8pKQorCWlmICghaTkx NV9yZXF1ZXN0X3N0YXJ0ZWQocnEpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMTA1Niwy MCArMTA1MiwxMCBAQCBzdGF0aWMgYm9vbCBfX2k5MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAogCSAqIHRha2VzIHRvIHNsZWVwIG9uIGEgcmVxdWVzdCwgb24g dGhlIG9yZGVyIG9mIGEgbWljcm9zZWNvbmQuCiAJICovCiAKLQlpcnEgPSBSRUFEX09OQ0UoZW5n aW5lLT5icmVhZGNydW1icy5pcnFfY291bnQpOwogCXRpbWVvdXRfdXMgKz0gbG9jYWxfY2xvY2tf dXMoJmNwdSk7CiAJZG8gewotCQlpZiAoaW50ZWxfZW5naW5lX2hhc19jb21wbGV0ZWQoZW5naW5l LCBzZXFubykpCi0JCQlyZXR1cm4gc2Vxbm8gPT0gaTkxNV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhy cSk7Ci0KLQkJLyoKLQkJICogU2Vxbm8gYXJlIG1lYW50IHRvIGJlIG9yZGVyZWQgKmJlZm9yZSog dGhlIGludGVycnVwdC4gSWYKLQkJICogd2Ugc2VlIGFuIGludGVycnVwdCB3aXRob3V0IGEgY29y cmVzcG9uZGluZyBzZXFubyBhZHZhbmNlLAotCQkgKiBhc3N1bWUgd2Ugd29uJ3Qgc2VlIG9uZSBp biB0aGUgbmVhciBmdXR1cmUgYnV0IHJlcXVpcmUKLQkJICogdGhlIGVuZ2luZS0+c2Vxbm9fYmFy cmllcigpIHRvIGZpeHVwIGNvaGVyZW5jeS4KLQkJICovCi0JCWlmIChSRUFEX09OQ0UoZW5naW5l LT5icmVhZGNydW1icy5pcnFfY291bnQpICE9IGlycSkKLQkJCWJyZWFrOworCQlpZiAoaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkpCisJCQlyZXR1cm4gdHJ1ZTsKIAogCQlpZiAoc2lnbmFsX3Bl bmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKQogCQkJYnJlYWs7CkBAIC0xMDgzLDYgKzEwNjks MTggQEAgc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0cnVjdCByZXF1ZXN0X3dhaXQgewor CXN0cnVjdCBkbWFfZmVuY2VfY2IgY2I7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7Cit9Owor CitzdGF0aWMgdm9pZCByZXF1ZXN0X3dhaXRfd2FrZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwg c3RydWN0IGRtYV9mZW5jZV9jYiAqY2IpCit7CisJc3RydWN0IHJlcXVlc3Rfd2FpdCAqd2FpdCA9 IGNvbnRhaW5lcl9vZihjYiwgdHlwZW9mKCp3YWl0KSwgY2IpOworCisJd2FrZV91cF9wcm9jZXNz KHdhaXQtPnRzayk7Cit9CisKIC8qKgogICogaTkxNV9yZXF1ZXN0X3dhaXQgLSB3YWl0IHVudGls IGV4ZWN1dGlvbiBvZiByZXF1ZXN0IGhhcyBmaW5pc2hlZAogICogQHJxOiB0aGUgcmVxdWVzdCB0 byB3YWl0IHVwb24KQEAgLTExMDgsOCArMTEwNiw3IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQo c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiB7CiAJY29uc3QgaW50IHN0YXRlID0gZmxhZ3MgJiBJ OTE1X1dBSVRfSU5URVJSVVBUSUJMRSA/CiAJCVRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5J TlRFUlJVUFRJQkxFOwotCURFRklORV9XQUlUX0ZVTkMoZXhlYywgZGVmYXVsdF93YWtlX2Z1bmN0 aW9uKTsKLQlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0OworCXN0cnVjdCByZXF1ZXN0X3dhaXQgd2Fp dDsKIAogCW1pZ2h0X3NsZWVwKCk7CiAJR0VNX0JVR19PTih0aW1lb3V0IDwgMCk7CkBAIC0xMTIx LDQ3ICsxMTE4LDI0IEBAIGxvbmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsCiAJCXJldHVybiAtRVRJTUU7CiAKIAl0cmFjZV9pOTE1X3JlcXVlc3Rfd2FpdF9iZWdp bihycSwgZmxhZ3MpOwotCWFkZF93YWl0X3F1ZXVlKCZycS0+ZXhlY3V0ZSwgJmV4ZWMpOwotCWlu dGVsX3dhaXRfaW5pdCgmd2FpdCk7Ci0JaWYgKGZsYWdzICYgSTkxNV9XQUlUX1BSSU9SSVRZKQot CQlpOTE1X3NjaGVkdWxlX2J1bXBfcHJpb3JpdHkocnEsIEk5MTVfUFJJT1JJVFlfV0FJVCk7Ci0K LXJlc3RhcnQ6Ci0JZG8gewotCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7Ci0JCWlmIChpbnRl bF93YWl0X3VwZGF0ZV9yZXF1ZXN0KCZ3YWl0LCBycSkpCi0JCQlicmVhazsKLQotCQlpZiAoc2ln bmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKSB7Ci0JCQl0aW1lb3V0ID0gLUVSRVNU QVJUU1lTOwotCQkJZ290byBjb21wbGV0ZTsKLQkJfQogCi0JCWlmICghdGltZW91dCkgewotCQkJ dGltZW91dCA9IC1FVElNRTsKLQkJCWdvdG8gY29tcGxldGU7Ci0JCX0KKwkvKiBPcHRpbWlzdGlj IHNob3J0IHNwaW4gYmVmb3JlIHRvdWNoaW5nIElSUXMgKi8KKwlpZiAoX19pOTE1X3NwaW5fcmVx dWVzdChycSwgc3RhdGUsIDUpKQorCQlnb3RvIG91dDsKIAotCQl0aW1lb3V0ID0gaW9fc2NoZWR1 bGVfdGltZW91dCh0aW1lb3V0KTsKLQl9IHdoaWxlICgxKTsKKwlpZiAoZmxhZ3MgJiBJOTE1X1dB SVRfUFJJT1JJVFkpCisJCWk5MTVfc2NoZWR1bGVfYnVtcF9wcmlvcml0eShycSwgSTkxNV9QUklP UklUWV9XQUlUKTsKIAotCUdFTV9CVUdfT04oIWludGVsX3dhaXRfaGFzX3NlcW5vKCZ3YWl0KSk7 Ci0JR0VNX0JVR19PTighaTkxNV9zd19mZW5jZV9zaWduYWxlZCgmcnEtPnN1Ym1pdCkpOworCXdh aXQudHNrID0gY3VycmVudDsKKwlpZiAoZG1hX2ZlbmNlX2FkZF9jYWxsYmFjaygmcnEtPmZlbmNl LCAmd2FpdC5jYiwgcmVxdWVzdF93YWl0X3dha2UpKQorCQlnb3RvIG91dDsKIAotCS8qIE9wdGlt aXN0aWMgc2hvcnQgc3BpbiBiZWZvcmUgdG91Y2hpbmcgSVJRcyAqLwotCWlmIChfX2k5MTVfc3Bp bl9yZXF1ZXN0KHJxLCB3YWl0LnNlcW5vLCBzdGF0ZSwgNSkpCi0JCWdvdG8gY29tcGxldGU7CisJ Zm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CiAKLQlzZXRfY3VycmVudF9z dGF0ZShzdGF0ZSk7Ci0JaWYgKGludGVsX2VuZ2luZV9hZGRfd2FpdChycS0+ZW5naW5lLCAmd2Fp dCkpCi0JCS8qCi0JCSAqIEluIG9yZGVyIHRvIGNoZWNrIHRoYXQgd2UgaGF2ZW4ndCBtaXNzZWQg dGhlIGludGVycnVwdAotCQkgKiBhcyB3ZSBlbmFibGVkIGl0LCB3ZSBuZWVkIHRvIGtpY2sgb3Vy c2VsdmVzIHRvIGRvIGEKLQkJICogY29oZXJlbnQgY2hlY2sgb24gdGhlIHNlcW5vIGJlZm9yZSB3 ZSBzbGVlcC4KLQkJICovCi0JCWdvdG8gd2FrZXVwOworCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBs ZXRlZChycSkpCisJCQlicmVhazsKIAotCWZvciAoOzspIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5n X3N0YXRlKHN0YXRlLCBjdXJyZW50KSkgewogCQkJdGltZW91dCA9IC1FUkVTVEFSVFNZUzsKIAkJ CWJyZWFrOwpAQCAtMTE3MywzMyArMTE0NywxMyBAQCBsb25nIGk5MTVfcmVxdWVzdF93YWl0KHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAogCQl9CiAKIAkJdGltZW91dCA9IGlvX3NjaGVkdWxlX3Rp bWVvdXQodGltZW91dCk7Ci0KLQkJaWYgKGludGVsX3dhaXRfY29tcGxldGUoJndhaXQpICYmCi0J CSAgICBpbnRlbF93YWl0X2NoZWNrX3JlcXVlc3QoJndhaXQsIHJxKSkKLQkJCWJyZWFrOwotCi0J CXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKLQotd2FrZXVwOgotCQlpZiAoaTkxNV9yZXF1ZXN0 X2NvbXBsZXRlZChycSkpCi0JCQlicmVhazsKLQotCQkvKiBPbmx5IHNwaW4gaWYgd2Uga25vdyB0 aGUgR1BVIGlzIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0ICovCi0JCWlmIChfX2k5MTVfc3Bpbl9y ZXF1ZXN0KHJxLCB3YWl0LnNlcW5vLCBzdGF0ZSwgMikpCi0JCQlicmVhazsKLQotCQlpZiAoIWlu dGVsX3dhaXRfY2hlY2tfcmVxdWVzdCgmd2FpdCwgcnEpKSB7Ci0JCQlpbnRlbF9lbmdpbmVfcmVt b3ZlX3dhaXQocnEtPmVuZ2luZSwgJndhaXQpOwotCQkJZ290byByZXN0YXJ0OwotCQl9CiAJfQot Ci0JaW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHJxLT5lbmdpbmUsICZ3YWl0KTsKLWNvbXBsZXRl OgogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1 ZSgmcnEtPmV4ZWN1dGUsICZleGVjKTsKLQl0cmFjZV9pOTE1X3JlcXVlc3Rfd2FpdF9lbmQocnEp OwogCisJZG1hX2ZlbmNlX3JlbW92ZV9jYWxsYmFjaygmcnEtPmZlbmNlLCAmd2FpdC5jYik7CisK K291dDoKKwl0cmFjZV9pOTE1X3JlcXVlc3Rfd2FpdF9lbmQocnEpOwogCXJldHVybiB0aW1lb3V0 OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCmluZGV4IDgzY2U5ODJkY2JkOS4u YjZkNDczOTIzNTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaApAQCAtMzgsMjMg KzM4LDE2IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Owogc3RydWN0IGk5MTVfcmVxdWVz dDsKIHN0cnVjdCBpOTE1X3RpbWVsaW5lOwogCi1zdHJ1Y3QgaW50ZWxfd2FpdCB7Ci0Jc3RydWN0 IHJiX25vZGUgbm9kZTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpyZXF1ZXN0OwotCXUzMiBzZXFubzsKLX07Ci0KLXN0cnVjdCBpbnRlbF9zaWduYWxf bm9kZSB7Ci0Jc3RydWN0IGludGVsX3dhaXQgd2FpdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7 Ci19OwotCiBzdHJ1Y3QgaTkxNV9jYXB0dXJlX2xpc3QgewogCXN0cnVjdCBpOTE1X2NhcHR1cmVf bGlzdCAqbmV4dDsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIH07CiAKK2VudW0geworCUk5MTVf RkVOQ0VfRkxBR19BQ1RJVkUgPSBETUFfRkVOQ0VfRkxBR19VU0VSX0JJVFMsCisJSTkxNV9GRU5D RV9GTEFHX1NJR05BTCwKK307CisKIC8qKgogICogUmVxdWVzdCBxdWV1ZSBzdHJ1Y3R1cmUuCiAg KgpAQCAtOTcsNyArOTAsNyBAQCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0IHsKIAlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqaHdfY29udGV4dDsKIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZzsKIAlzdHJ1Y3Qg aTkxNV90aW1lbGluZSAqdGltZWxpbmU7Ci0Jc3RydWN0IGludGVsX3NpZ25hbF9ub2RlIHNpZ25h bGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbF9saW5rOwogCiAJLyoKIAkgKiBUaGUgcmN1 IGVwb2NoIG9mIHdoZW4gdGhpcyByZXF1ZXN0IHdhcyBhbGxvY2F0ZWQuIFVzZWQgdG8ganVkaWNp b3VzbHkKQEAgLTExNiw3ICsxMDksNiBAQCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0IHsKIAkgKi8KIAlz dHJ1Y3QgaTkxNV9zd19mZW5jZSBzdWJtaXQ7CiAJd2FpdF9xdWV1ZV9lbnRyeV90IHN1Ym1pdHE7 Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgZXhlY3V0ZTsKIAogCS8qCiAJICogQSBsaXN0IG9mIGV2ZXJ5 b25lIHdlIHdhaXQgdXBvbiwgYW5kIGV2ZXJ5b25lIHdobyB3YWl0cyB1cG9uIHVzLgpAQCAtMjU1 LDcgKzI0Nyw3IEBAIGk5MTVfcmVxdWVzdF9wdXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCiAg KiB0aGF0IGl0IGhhcyBwYXNzZWQgdGhlIGdsb2JhbCBzZXFubyBhbmQgdGhlIGdsb2JhbCBzZXFu byBpcyB1bmNoYW5nZWQKICAqIGFmdGVyIHRoZSByZWFkLCBpdCBpcyBpbmRlZWQgY29tcGxldGUp LgogICovCi1zdGF0aWMgdTMyCitzdGF0aWMgaW5saW5lIHUzMgogaTkxNV9yZXF1ZXN0X2dsb2Jh bF9zZXFubyhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCXJldHVybiBS RUFEX09OQ0UocmVxdWVzdC0+Z2xvYmFsX3NlcW5vKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVzZXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVzZXQu YwppbmRleCBlZmY3NjU1OGI5NTguLmQ4NDZmNDk0MDFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVzZXQuYwpAQCAtNzQ3LDE4ICs3NDcsMTkgQEAgc3RhdGljIHZvaWQgcmVzZXRfcmVzdGFydChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAogc3RhdGljIHZvaWQgbm9wX3N1Ym1pdF9y ZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiB7CisJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 CiAKIAlHRU1fVFJBQ0UoIiVzIGZlbmNlICVsbHg6JWxsZCAtPiAtRUlPXG4iLAotCQkgIHJlcXVl c3QtPmVuZ2luZS0+bmFtZSwKLQkJICByZXF1ZXN0LT5mZW5jZS5jb250ZXh0LCByZXF1ZXN0LT5m ZW5jZS5zZXFubyk7CisJCSAgZW5naW5lLT5uYW1lLCByZXF1ZXN0LT5mZW5jZS5jb250ZXh0LCBy ZXF1ZXN0LT5mZW5jZS5zZXFubyk7CiAJZG1hX2ZlbmNlX3NldF9lcnJvcigmcmVxdWVzdC0+ZmVu Y2UsIC1FSU8pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJlcXVlc3QtPmVuZ2luZS0+dGltZWxp bmUubG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnRpbWVsaW5lLmxv Y2ssIGZsYWdzKTsKIAlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocmVxdWVzdCk7CiAJaTkxNV9yZXF1 ZXN0X2Zha2VfY29tcGxldGUocmVxdWVzdCk7Ci0JaW50ZWxfZW5naW5lX3dyaXRlX2dsb2JhbF9z ZXFubyhyZXF1ZXN0LT5lbmdpbmUsIHJlcXVlc3QtPmdsb2JhbF9zZXFubyk7Ci0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmcmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7CisK KwlpbnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVtYnMoZW5naW5lKTsKIH0KIAogdm9pZCBpOTE1 X2dlbV9zZXRfd2VkZ2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQpAQCAtODEzLDcg KzgxNCw3IEBAIHZvaWQgaTkxNV9nZW1fc2V0X3dlZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKIAogCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CiAJCXJlc2V0 X2ZpbmlzaF9lbmdpbmUoZW5naW5lKTsKLQkJaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpOwor CQlpbnRlbF9lbmdpbmVfc2lnbmFsX2JyZWFkY3J1bWJzKGVuZ2luZSk7CiAJfQogCiAJc21wX21i X19iZWZvcmVfYXRvbWljKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9icmVhZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMu YwppbmRleCA0ZmFkOTNmZTM2NzguLjExODdkMmVkZDMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9icmVhZGNydW1icy5jCkBAIC0yOSw0OCArMjksMTI3IEBACiAKICNkZWZpbmUgdGFz a19hc2xlZXAodHNrKSAoKHRzayktPnN0YXRlICYgVEFTS19OT1JNQUwgJiYgISh0c2spLT5vbl9y cSkKIAotc3RhdGljIHVuc2lnbmVkIGludCBfX2ludGVsX2JyZWFkY3J1bWJzX3dha2V1cChzdHJ1 Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIpCitzdGF0aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKLQlzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdDsKLQl1 bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwlpZiAoIWVuZ2luZS0+aXJxX2VuYWJsZSkKKwkJcmV0 dXJuOworCisJLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2soJmVu Z2luZS0+aTkxNS0+aXJxX2xvY2spOworCWVuZ2luZS0+aXJxX2VuYWJsZShlbmdpbmUpOworCXNw aW5fdW5sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaXJx X2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWlmICghZW5naW5l LT5pcnFfZGlzYWJsZSkKKwkJcmV0dXJuOworCisJLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVw dHMgKi8KKwlzcGluX2xvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xvY2spOworCWVuZ2luZS0+aXJx X2Rpc2FibGUoZW5naW5lKTsKKwlzcGluX3VubG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7 Cit9CiAKK3N0YXRpYyB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfZGlzYXJtX2lycShzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIpCit7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYi0+aXJxX2xv Y2spOwogCi0Jd2FpdCA9IGItPmlycV93YWl0OwotCWlmICh3YWl0KSB7Ci0JCS8qCi0JCSAqIE4u Qi4gU2luY2UgdGFza19hc2xlZXAoKSBhbmQgdHR3dSBhcmUgbm90IGF0b21pYywgdGhlCi0JCSAq IHdhaXRlciBtYXkgYWN0dWFsbHkgZ28gdG8gc2xlZXAgYWZ0ZXIgdGhlIGNoZWNrLCBjYXVzaW5n Ci0JCSAqIHVzIHRvIHN1cHByZXNzIGEgdmFsaWQgd2FrZXVwLiBXZSBwcmVmZXIgdG8gcmVkdWNl IHRoZQotCQkgKiBudW1iZXIgb2YgZmFsc2UgcG9zaXRpdmUgbWlzc2VkX2JyZWFkY3J1bWIoKSB3 YXJuaW5ncwotCQkgKiBhdCB0aGUgZXhwZW5zZSBvZiBhIGZldyBmYWxzZSBuZWdhdGl2ZXMsIGFz IGl0IGl0IGVhc3kKLQkJICogdG8gdHJpZ2dlciBhIGZhbHNlIHBvc2l0aXZlIHVuZGVyIGhlYXZ5 IGxvYWQuIEVub3VnaAotCQkgKiBzaWduYWwgc2hvdWxkIHJlbWFpbiBmcm9tIGdlbnVpbmUgbWlz c2VkX2JyZWFkY3J1bWIoKQotCQkgKiBmb3IgdXMgdG8gZGV0ZWN0IGluIENJLgotCQkgKi8KLQkJ Ym9vbCB3YXNfYXNsZWVwID0gdGFza19hc2xlZXAod2FpdC0+dHNrKTsKLQotCQlyZXN1bHQgPSBF TkdJTkVfV0FLRVVQX1dBSVRFUjsKLQkJaWYgKHdha2VfdXBfcHJvY2Vzcyh3YWl0LT50c2spICYm IHdhc19hc2xlZXApCi0JCQlyZXN1bHQgfD0gRU5HSU5FX1dBS0VVUF9BU0xFRVA7Ci0JfQorCUdF TV9CVUdfT04oIWItPmlycV9lbmFibGVkKTsKKwlpZiAoIS0tYi0+aXJxX2VuYWJsZWQpCisJCWly cV9kaXNhYmxlKGNvbnRhaW5lcl9vZihiLAorCQkJCQkgc3RydWN0IGludGVsX2VuZ2luZV9jcywK KwkJCQkJIGJyZWFkY3J1bWJzKSk7CiAKLQlyZXR1cm4gcmVzdWx0OworCWItPmlycV9hcm1lZCA9 IGZhbHNlOwogfQogCi11bnNpZ25lZCBpbnQgaW50ZWxfZW5naW5lX3dha2V1cChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCit2b2lkIGludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVt YnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0cnVjdCBpbnRlbF9icmVh ZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0JdW5zaWduZWQgaW50IHJlc3VsdDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5pcnFfbG9j aywgZmxhZ3MpOwotCXJlc3VsdCA9IF9faW50ZWxfYnJlYWRjcnVtYnNfd2FrZXVwKGIpOwotCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmItPmlycV9sb2NrLCBmbGFncyk7CisJaWYgKCFiLT5pcnFf YXJtZWQpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnEoJmItPmlycV9sb2NrKTsKKwlpZiAo Yi0+aXJxX2FybWVkKQorCQlfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2FybV9pcnEoYik7CisJc3Bp bl91bmxvY2tfaXJxKCZiLT5pcnFfbG9jayk7Cit9CisKK2Jvb2wgaW50ZWxfZW5naW5lX2JyZWFk Y3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7CisJc3RydWN0IGludGVs X2NvbnRleHQgKmNlLCAqY247CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsICpybjsKKwlMSVNU X0hFQUQoc2lnbmFsKTsKKworCXNwaW5fbG9jaygmYi0+aXJxX2xvY2spOworCisJYi0+aXJxX2Zp cmVkID0gdHJ1ZTsKKwlpZiAoYi0+aXJxX2FybWVkICYmIGxpc3RfZW1wdHkoJmItPnNpZ25hbGVy cykpCisJCV9faW50ZWxfYnJlYWRjcnVtYnNfZGlzYXJtX2lycShiKTsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShjZSwgY24sICZiLT5zaWduYWxlcnMsIHNpZ25hbF9saW5rKSB7CisJCUdF TV9CVUdfT04obGlzdF9lbXB0eSgmY2UtPnNpZ25hbHMpKTsKKworCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUocnEsIHJuLCAmY2UtPnNpZ25hbHMsIHNpZ25hbF9saW5rKSB7CisJCQlpZiAoIWk5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQkJCWJyZWFrOworCisJCQlHRU1fQlVHX09OKCF0 ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLAorCQkJCQkgICAgICZycS0+ZmVuY2UuZmxh Z3MpKTsKKwkJCWNsZWFyX2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAmcnEtPmZlbmNlLmZs YWdzKTsKKworCQkJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwKKwkJ CQkgICAgICZycS0+ZmVuY2UuZmxhZ3MpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICog UXVldWUgZm9yIGV4ZWN1dGlvbiBhZnRlciBkcm9wcGluZyB0aGUgc2lnbmFsaW5nCisJCQkgKiBz cGlubG9jayBhcyB0aGUgY2FsbGJhY2sgY2hhaW4gbWF5IGVuZCBhZGRpbmcKKwkJCSAqIG1vcmUg c2lnbmFsZXJzIHRvIHRoZSBzYW1lIGNvbnRleHQgb3IgZW5naW5lLgorCQkJICovCisJCQlpOTE1 X3JlcXVlc3RfZ2V0KHJxKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnJxLT5zaWduYWxfbGluaywgJnNp Z25hbCk7CisJCX0KKworCQlpZiAoIWxpc3RfaXNfZmlyc3QoJnJxLT5zaWduYWxfbGluaywgJmNl LT5zaWduYWxzKSkgeworCQkJX19saXN0X2RlbF9tYW55KCZjZS0+c2lnbmFscywgJnJxLT5zaWdu YWxfbGluayk7CisJCQlpZiAoJmNlLT5zaWduYWxzID09ICZycS0+c2lnbmFsX2xpbmspCisJCQkJ bGlzdF9kZWxfaW5pdCgmY2UtPnNpZ25hbF9saW5rKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2Nr KCZiLT5pcnFfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIHJuLCAmc2ln bmFsLCBzaWduYWxfbGluaykgeworCQlkbWFfZmVuY2Vfc2lnbmFsKCZycS0+ZmVuY2UpOworCQlp OTE1X3JlcXVlc3RfcHV0KHJxKTsKKwl9CisKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnNpZ25hbCk7 Cit9CisKK2Jvb2wgaW50ZWxfZW5naW5lX3NpZ25hbF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCit7CisJYm9vbCByZXN1bHQ7CisKKwlsb2NhbF9pcnFfZGlzYWJs ZSgpOworCXJlc3VsdCA9IGludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoZW5naW5lKTsKKwls b2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgdm9pZCBz aWduYWxfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKQoreworCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmVuZ2luZSks IGJyZWFkY3J1bWJzLmlycV93b3JrKTsKKworCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEo ZW5naW5lKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2FpdF90aW1lb3V0KHZvaWQpCiB7 CiAJcmV0dXJuIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArIERSTV9JOTE1X0hBTkdDSEVDS19K SUZGSUVTKTsKQEAgLTk0LDE5ICsxNzMsMTUgQEAgc3RhdGljIHZvaWQgaW50ZWxfYnJlYWRjcnVt YnNfaGFuZ2NoZWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSA9CiAJCWZyb21fdGltZXIoZW5naW5lLCB0LCBicmVhZGNydW1icy5oYW5nY2hl Y2spOwogCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJz OwotCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CiAKIAlpZiAoIWItPmlycV9hcm1lZCkKIAkJcmV0 dXJuOwogCi0JaXJxX2NvdW50ID0gUkVBRF9PTkNFKGItPmlycV9jb3VudCk7Ci0JaWYgKGItPmhh bmdjaGVja19pbnRlcnJ1cHRzICE9IGlycV9jb3VudCkgewotCQliLT5oYW5nY2hlY2tfaW50ZXJy dXB0cyA9IGlycV9jb3VudDsKLQkJbW9kX3RpbWVyKCZiLT5oYW5nY2hlY2ssIHdhaXRfdGltZW91 dCgpKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoYi0+aXJxX2ZpcmVkKQorCQlnb3RvIHJlYXJtOwog Ci0JLyogV2Uga2VlcCB0aGUgaGFuZ2NoZWNrIHRpbWVyIGFsaXZlIHVudGlsIHdlIGRpc2FybSB0 aGUgaXJxLCBldmVuCisJLyoKKwkgKiBXZSBrZWVwIHRoZSBoYW5nY2hlY2sgdGltZXIgYWxpdmUg dW50aWwgd2UgZGlzYXJtIHRoZSBpcnEsIGV2ZW4KIAkgKiBpZiB0aGVyZSBhcmUgbm8gd2FpdGVy cyBhdCBwcmVzZW50LgogCSAqCiAJICogSWYgdGhlIHdhaXRlciB3YXMgY3VycmVudGx5IHJ1bm5p bmcsIGFzc3VtZSBpdCBoYXNuJ3QgaGFkIGEgY2hhbmNlCkBAIC0xMTgsMTAgKzE5MywxMyBAQCBz dGF0aWMgdm9pZCBpbnRlbF9icmVhZGNydW1ic19oYW5nY2hlY2soc3RydWN0IHRpbWVyX2xpc3Qg KnQpCiAJICogYnV0IHdlIHN0aWxsIGhhdmUgYSB3YWl0ZXIuIEFzc3VtaW5nIGFsbCBiYXRjaGVz IGNvbXBsZXRlIHdpdGhpbgogCSAqIERSTV9JOTE1X0hBTkdDSEVDS19KSUZGSUVTIFsxLjVzXSEK IAkgKi8KLQlpZiAoaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpICYgRU5HSU5FX1dBS0VVUF9B U0xFRVApIHsKKwlzeW5jaHJvbml6ZV9oYXJkaXJxKGVuZ2luZS0+aTkxNS0+ZHJtLmlycSk7CisJ aWYgKGludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5naW5lKSkgewogCQltaXNzZWRf YnJlYWRjcnVtYihlbmdpbmUpOwogCQltb2RfdGltZXIoJmItPmZha2VfaXJxLCBqaWZmaWVzICsg MSk7CiAJfSBlbHNlIHsKK3JlYXJtOgorCQliLT5pcnFfZmlyZWQgPSBmYWxzZTsKIAkJbW9kX3Rp bWVyKCZiLT5oYW5nY2hlY2ssIHdhaXRfdGltZW91dCgpKTsKIAl9CiB9CkBAIC0xNDAsMTEgKzIx OCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2JyZWFkY3J1bWJzX2Zha2VfaXJxKHN0cnVjdCB0aW1l cl9saXN0ICp0KQogCSAqIG9sZGVzdCB3YWl0ZXIgdG8gZG8gdGhlIGNvaGVyZW50IHNlcW5vIGNo ZWNrLgogCSAqLwogCi0Jc3Bpbl9sb2NrX2lycSgmYi0+aXJxX2xvY2spOwotCWlmIChiLT5pcnFf YXJtZWQgJiYgIV9faW50ZWxfYnJlYWRjcnVtYnNfd2FrZXVwKGIpKQotCQlfX2ludGVsX2VuZ2lu ZV9kaXNhcm1fYnJlYWRjcnVtYnMoZW5naW5lKTsKLQlzcGluX3VubG9ja19pcnEoJmItPmlycV9s b2NrKTsKLQlpZiAoIWItPmlycV9hcm1lZCkKKwlpZiAoIWludGVsX2VuZ2luZV9zaWduYWxfYnJl YWRjcnVtYnMoZW5naW5lKSAmJiAhYi0+aXJxX2FybWVkKQogCQlyZXR1cm47CiAKIAkvKiBJZiB0 aGUgdXNlciBoYXMgZGlzYWJsZWQgdGhlIGZha2UtaXJxLCByZXN0b3JlIHRoZSBoYW5nY2hlY2tp bmcgKi8KQEAgLTE1Niw0MyArMjMwLDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfYnJlYWRjcnVtYnNf ZmFrZV9pcnEoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJbW9kX3RpbWVyKCZiLT5mYWtlX2lycSwg amlmZmllcyArIDEpOwogfQogCi1zdGF0aWMgdm9pZCBpcnFfZW5hYmxlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlpZiAoIWVuZ2luZS0+aXJxX2VuYWJsZSkKLQkJcmV0dXJu OwotCi0JLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMgKi8KLQlzcGluX2xvY2soJmVuZ2lu ZS0+aTkxNS0+aXJxX2xvY2spOwotCWVuZ2luZS0+aXJxX2VuYWJsZShlbmdpbmUpOwotCXNwaW5f dW5sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgaXJxX2Rp c2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCWlmICghZW5naW5lLT5p cnFfZGlzYWJsZSkKLQkJcmV0dXJuOwotCi0JLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMg Ki8KLQlzcGluX2xvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xvY2spOwotCWVuZ2luZS0+aXJxX2Rp c2FibGUoZW5naW5lKTsKLQlzcGluX3VubG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Ci19 Ci0KLXZvaWQgX19pbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5n aW5lLT5icmVhZGNydW1iczsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmItPmlycV9sb2NrKTsK LQlHRU1fQlVHX09OKGItPmlycV93YWl0KTsKLQlHRU1fQlVHX09OKCFiLT5pcnFfYXJtZWQpOwot Ci0JR0VNX0JVR19PTighYi0+aXJxX2VuYWJsZWQpOwotCWlmICghLS1iLT5pcnFfZW5hYmxlZCkK LQkJaXJxX2Rpc2FibGUoZW5naW5lKTsKLQotCWItPmlycV9hcm1lZCA9IGZhbHNlOwotfQotCiB2 b2lkIGludGVsX2VuZ2luZV9waW5fYnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5i cmVhZGNydW1iczsKQEAgLTIxNSw0MCArMjUyLDYgQEAgdm9pZCBpbnRlbF9lbmdpbmVfdW5waW5f YnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlzcGluX3Vu bG9ja19pcnEoJmItPmlycV9sb2NrKTsKIH0KIAotdm9pZCBpbnRlbF9lbmdpbmVfZGlzYXJtX2Jy ZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgaW50 ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKLQlzdHJ1Y3QgaW50ZWxf d2FpdCAqd2FpdCwgKm47Ci0KLQlpZiAoIWItPmlycV9hcm1lZCkKLQkJcmV0dXJuOwotCi0JLyoK LQkgKiBXZSBvbmx5IGRpc2FybSB0aGUgaXJxIHdoZW4gd2UgYXJlIGlkbGUgKGFsbCByZXF1ZXN0 cyBjb21wbGV0ZWQpLAotCSAqIHNvIGlmIHRoZSBib3R0b20taGFsZiByZW1haW5zIGFzbGVlcCwg aXQgbWlzc2VkIHRoZSByZXF1ZXN0Ci0JICogY29tcGxldGlvbi4KLQkgKi8KLQlpZiAoaW50ZWxf ZW5naW5lX3dha2V1cChlbmdpbmUpICYgRU5HSU5FX1dBS0VVUF9BU0xFRVApCi0JCW1pc3NlZF9i cmVhZGNydW1iKGVuZ2luZSk7Ci0KLQlzcGluX2xvY2tfaXJxKCZiLT5yYl9sb2NrKTsKLQotCXNw aW5fbG9jaygmYi0+aXJxX2xvY2spOwotCWItPmlycV93YWl0ID0gTlVMTDsKLQlpZiAoYi0+aXJx X2FybWVkKQotCQlfX2ludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVtYnMoZW5naW5lKTsKLQlz cGluX3VubG9jaygmYi0+aXJxX2xvY2spOwotCi0JcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9l bnRyeV9zYWZlKHdhaXQsIG4sICZiLT53YWl0ZXJzLCBub2RlKSB7Ci0JCUdFTV9CVUdfT04oIWlu dGVsX2VuZ2luZV9zaWduYWxlZChlbmdpbmUsIHdhaXQtPnNlcW5vKSk7Ci0JCVJCX0NMRUFSX05P REUoJndhaXQtPm5vZGUpOwotCQl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dHNrKTsKLQl9Ci0JYi0+ d2FpdGVycyA9IFJCX1JPT1Q7Ci0KLQlzcGluX3VubG9ja19pcnEoJmItPnJiX2xvY2spOwotfQot CiBzdGF0aWMgYm9vbCB1c2VfZmFrZV9pcnEoY29uc3Qgc3RydWN0IGludGVsX2JyZWFkY3J1bWJz ICpiKQogewogCWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9CkBAIC0yNjQs NyArMjY3LDcgQEAgc3RhdGljIGJvb2wgdXNlX2Zha2VfaXJxKGNvbnN0IHN0cnVjdCBpbnRlbF9i cmVhZGNydW1icyAqYikKIAkgKiBlbmdpbmUtPnNlcW5vX2JhcnJpZXIoKSwgYSB0aW1pbmcgZXJy b3IgdGhhdCBzaG91bGQgYmUgdHJhbnNpZW50CiAJICogYW5kIHVubGlrZWx5IHRvIHJlb2NjdXIu CiAJICovCi0JcmV0dXJuIFJFQURfT05DRShiLT5pcnFfY291bnQpID09IGItPmhhbmdjaGVja19p bnRlcnJ1cHRzOworCXJldHVybiAhYi0+aXJxX2ZpcmVkOwogfQogCiBzdGF0aWMgdm9pZCBlbmFi bGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQpAQCAtMjc2LDcgKzI3OSw3 IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9mYWtlX2lycShzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMg KmIpCiAJCW1vZF90aW1lcigmYi0+aGFuZ2NoZWNrLCB3YWl0X3RpbWVvdXQoKSk7CiB9CiAKLXN0 YXRpYyBib29sIF9faW50ZWxfYnJlYWRjcnVtYnNfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfYnJl YWRjcnVtYnMgKmIpCitzdGF0aWMgYm9vbCBfX2ludGVsX2JyZWFkY3J1bWJzX2FybV9pcnEoc3Ry dWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQogewogCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSA9CiAJCWNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzLCBicmVhZGNy dW1icyk7CkBAIC0zMTUsNTM3ICszMTgsMTM1IEBAIHN0YXRpYyBib29sIF9faW50ZWxfYnJlYWRj cnVtYnNfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIpCiAJcmV0dXJuIGVu YWJsZWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX3dhaXQgKnRvX3dhaXQoc3Ry dWN0IHJiX25vZGUgKm5vZGUpCit2b2lkIGludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKLQlyZXR1cm4gcmJfZW50cnkobm9kZSwg c3RydWN0IGludGVsX3dhaXQsIG5vZGUpOwotfQorCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAq YiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbnRlbF9i cmVhZGNydW1ic19maW5pc2goc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiLAotCQkJCQkgICAg ICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKLXsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZiLT5y Yl9sb2NrKTsKLQlHRU1fQlVHX09OKGItPmlycV93YWl0ID09IHdhaXQpOworCXNwaW5fbG9ja19p bml0KCZiLT5pcnFfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmItPnNpZ25hbGVycyk7CiAKLQkv KgotCSAqIFRoaXMgcmVxdWVzdCBpcyBjb21wbGV0ZWQsIHNvIHJlbW92ZSBpdCBmcm9tIHRoZSB0 cmVlLCBtYXJrIGl0IGFzCi0JICogY29tcGxldGUsIGFuZCAqdGhlbiogd2FrZSB1cCB0aGUgYXNz b2NpYXRlZCB0YXNrLiBOLkIuIHdoZW4gdGhlCi0JICogdGFzayB3YWtlcyB1cCwgaXQgd2lsbCBm aW5kIHRoZSBlbXB0eSByYl9ub2RlLCBkaXNjZXJuIHRoYXQgaXQKLQkgKiBoYXMgYWxyZWFkeSBi ZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZSBhbmQgc2tpcCB0aGUgc2VyaWFsaXNhdGlvbgotCSAq IG9mIHRoZSBiLT5yYl9sb2NrIGFuZCBiLT5pcnFfbG9jay4gVGhpcyBtZWFucyB0aGF0IHRoZSBk ZXN0cnVjdGlvbgotCSAqIG9mIHRoZSBpbnRlbF93YWl0IGlzIG5vdCBzZXJpYWxpc2VkIHdpdGgg dGhlIGludGVycnVwdCBoYW5kbGVyCi0JICogYnkgdGhlIHdhaXRlciAtIGl0IG11c3QgaW5zdGVh ZCBiZSBzZXJpYWxpc2VkIGJ5IHRoZSBjYWxsZXIuCi0JICovCi0JcmJfZXJhc2UoJndhaXQtPm5v ZGUsICZiLT53YWl0ZXJzKTsKLQlSQl9DTEVBUl9OT0RFKCZ3YWl0LT5ub2RlKTsKKwlpbml0X2ly cV93b3JrKCZiLT5pcnFfd29yaywgc2lnbmFsX2lycV93b3JrKTsKIAotCWlmICh3YWl0LT50c2st PnN0YXRlICE9IFRBU0tfUlVOTklORykKLQkJd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRzayk7IC8q IGltcGxpY2l0IHNtcF93bWIoKSAqLworCXRpbWVyX3NldHVwKCZiLT5mYWtlX2lycSwgaW50ZWxf YnJlYWRjcnVtYnNfZmFrZV9pcnEsIDApOworCXRpbWVyX3NldHVwKCZiLT5oYW5nY2hlY2ssIGlu dGVsX2JyZWFkY3J1bWJzX2hhbmdjaGVjaywgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBf X2ludGVsX2JyZWFkY3J1bWJzX25leHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAot CQkJCQkgICAgc3RydWN0IHJiX25vZGUgKm5leHQpCitzdGF0aWMgdm9pZCBjYW5jZWxfZmFrZV9p cnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0cnVjdCBpbnRlbF9icmVh ZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwogCi0Jc3Bpbl9sb2NrKCZiLT5pcnFf bG9jayk7Ci0JR0VNX0JVR19PTighYi0+aXJxX2FybWVkKTsKLQlHRU1fQlVHX09OKCFiLT5pcnFf d2FpdCk7Ci0JYi0+aXJxX3dhaXQgPSB0b193YWl0KG5leHQpOwotCXNwaW5fdW5sb2NrKCZiLT5p cnFfbG9jayk7Ci0KLQkvKiBXZSBhbHdheXMgd2FrZSB1cCB0aGUgbmV4dCB3YWl0ZXIgdGhhdCB0 YWtlcyBvdmVyIGFzIHRoZSBib3R0b20taGFsZgotCSAqIGFzIHdlIG1heSBkZWxlZ2F0ZSBub3Qg b25seSB0aGUgaXJxLXNlcW5vIGJhcnJpZXIgdG8gdGhlIG5leHQgd2FpdGVyCi0JICogYnV0IGFs c28gdGhlIHRhc2sgb2Ygd2FraW5nIHVwIGNvbmN1cnJlbnQgd2FpdGVycy4KLQkgKi8KLQlpZiAo bmV4dCkKLQkJd2FrZV91cF9wcm9jZXNzKHRvX3dhaXQobmV4dCktPnRzayk7CisJZGVsX3RpbWVy X3N5bmMoJmItPmZha2VfaXJxKTsgLyogbWF5IHF1ZXVlIGItPmhhbmdjaGVjayAqLworCWRlbF90 aW1lcl9zeW5jKCZiLT5oYW5nY2hlY2spOworCWNsZWFyX2JpdChlbmdpbmUtPmlkLCAmZW5naW5l LT5pOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7CiB9CiAKLXN0YXRpYyBib29sIF9f aW50ZWxfZW5naW5lX2FkZF93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJ CQkgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCit2b2lkIGludGVsX2VuZ2luZV9yZXNldF9i cmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0Jc3RydWN0IHJiX25v ZGUgKipwLCAqcGFyZW50LCAqY29tcGxldGVkOwotCWJvb2wgZmlyc3QsIGFybWVkOwotCXUzMiBz ZXFubzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JR0VNX0JVR19PTighd2FpdC0+c2Vxbm8p OworCXNwaW5fbG9ja19pcnFzYXZlKCZiLT5pcnFfbG9jaywgZmxhZ3MpOwogCi0JLyogSW5zZXJ0 IHRoZSByZXF1ZXN0IGludG8gdGhlIHJldGlyZW1lbnQgb3JkZXJlZCBsaXN0Ci0JICogb2Ygd2Fp dGVycyBieSB3YWxraW5nIHRoZSByYnRyZWUuIElmIHdlIGFyZSB0aGUgb2xkZXN0Ci0JICogc2Vx bm8gaW4gdGhlIHRyZWUgKHRoZSBmaXJzdCB0byBiZSByZXRpcmVkKSwgdGhlbgotCSAqIHNldCBv dXJzZWx2ZXMgYXMgdGhlIGJvdHRvbS1oYWxmLgotCSAqCi0JICogQXMgd2UgZGVzY2VuZCB0aGUg dHJlZSwgcHJ1bmUgY29tcGxldGVkIGJyYW5jaGVzIHNpbmNlIHdlIGhvbGQgdGhlCi0JICogc3Bp bmxvY2sgd2Uga25vdyB0aGF0IHRoZSBmaXJzdF93YWl0ZXIgbXVzdCBiZSBkZWxheWVkIGFuZCBj YW4KLQkgKiByZWR1Y2Ugc29tZSBvZiB0aGUgc2VxdWVudGlhbCB3YWtlIHVwIGxhdGVuY3kgaWYg d2UgdGFrZSBhY3Rpb24KLQkgKiBvdXJzZWx2ZXMgYW5kIHdha2UgdXAgdGhlIGNvbXBsZXRlZCB0 YXNrcyBpbiBwYXJhbGxlbC4gQWxzbywgYnkKLQkgKiByZW1vdmluZyBzdGFsZSBlbGVtZW50cyBp biB0aGUgdHJlZSwgd2UgbWF5IGJlIGFibGUgdG8gcmVkdWNlIHRoZQotCSAqIHBpbmctcG9uZyBi ZXR3ZWVuIHRoZSBvbGQgYm90dG9tLWhhbGYgYW5kIG91cnNlbHZlcyBhcyBmaXJzdC13YWl0ZXIu CisJLyoKKwkgKiBMZWF2ZSB0aGUgZmFrZV9pcnEgdGltZXIgZW5hYmxlZCAoaWYgaXQgaXMgcnVu bmluZyksIGJ1dCBjbGVhciB0aGUKKwkgKiBiaXQgc28gdGhhdCBpdCB0dXJucyBpdHNlbGYgb2Zm IG9uIGl0cyBuZXh0IHdha2UgdXAgYW5kIGdvZXMgYmFjaworCSAqIHRvIHRoZSBsb25nIGhhbmdj aGVjayBpbnRlcnZhbCBpZiBzdGlsbCByZXF1aXJlZC4KIAkgKi8KLQlhcm1lZCA9IGZhbHNlOwot CWZpcnN0ID0gdHJ1ZTsKLQlwYXJlbnQgPSBOVUxMOwotCWNvbXBsZXRlZCA9IE5VTEw7Ci0Jc2Vx bm8gPSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Ci0KLQkgLyogSWYgdGhlIHJlcXVl c3QgY29tcGxldGVkIGJlZm9yZSB3ZSBtYW5hZ2VkIHRvIGdyYWIgdGhlIHNwaW5sb2NrLAotCSAg KiByZXR1cm4gbm93IGJlZm9yZSBhZGRpbmcgb3Vyc2VsdmVzIHRvIHRoZSByYnRyZWUuIFdlIGxl dCB0aGUKLQkgICogY3VycmVudCBib3R0b20taGFsZiBoYW5kbGUgYW55IHBlbmRpbmcgd2FrZXVw cyBhbmQgaW5zdGVhZAotCSAgKiB0cnkgYW5kIGdldCBvdXQgb2YgdGhlIHdheSBxdWlja2x5Lgot CSAgKi8KLQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8sIHdhaXQtPnNlcW5vKSkgewotCQlS Ql9DTEVBUl9OT0RFKCZ3YWl0LT5ub2RlKTsKLQkJcmV0dXJuIGZpcnN0OwotCX0KLQotCXAgPSAm Yi0+d2FpdGVycy5yYl9ub2RlOwotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJaWYg KHdhaXQtPnNlcW5vID09IHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pIHsKLQkJCS8qIFdlIGhhdmUg bXVsdGlwbGUgd2FpdGVycyBvbiB0aGUgc2FtZSBzZXFubywgc2VsZWN0Ci0JCQkgKiB0aGUgaGln aGVzdCBwcmlvcml0eSB0YXNrICh0aGF0IHdpdGggdGhlIHNtYWxsZXN0Ci0JCQkgKiB0YXNrLT5w cmlvKSB0byBzZXJ2ZSBhcyB0aGUgYm90dG9tLWhhbGYgZm9yIHRoaXMKLQkJCSAqIGdyb3VwLgot CQkJICovCi0JCQlpZiAod2FpdC0+dHNrLT5wcmlvID4gdG9fd2FpdChwYXJlbnQpLT50c2stPnBy aW8pIHsKLQkJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7Ci0JCQkJZmlyc3QgPSBmYWxzZTsKLQkJ CX0gZWxzZSB7Ci0JCQkJcCA9ICZwYXJlbnQtPnJiX2xlZnQ7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAo aTkxNV9zZXFub19wYXNzZWQod2FpdC0+c2Vxbm8sCi0JCQkJCSAgICAgdG9fd2FpdChwYXJlbnQp LT5zZXFubykpIHsKLQkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKLQkJCWlmIChpOTE1X3NlcW5v X3Bhc3NlZChzZXFubywgdG9fd2FpdChwYXJlbnQpLT5zZXFubykpCi0JCQkJY29tcGxldGVkID0g cGFyZW50OwotCQkJZWxzZQotCQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlwID0g JnBhcmVudC0+cmJfbGVmdDsKLQkJfQotCX0KLQlyYl9saW5rX25vZGUoJndhaXQtPm5vZGUsIHBh cmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7Ci0K LQlpZiAoZmlyc3QpIHsKLQkJc3Bpbl9sb2NrKCZiLT5pcnFfbG9jayk7Ci0JCWItPmlycV93YWl0 ID0gd2FpdDsKLQkJLyogQWZ0ZXIgYXNzaWduaW5nIG91cnNlbHZlcyBhcyB0aGUgbmV3IGJvdHRv bS1oYWxmLCB3ZSBtdXN0Ci0JCSAqIHBlcmZvcm0gYSBjdXJzb3J5IGNoZWNrIHRvIHByZXZlbnQg YSBtaXNzZWQgaW50ZXJydXB0LgotCQkgKiBFaXRoZXIgd2UgbWlzcyB0aGUgaW50ZXJydXB0IHdo aWxzdCBwcm9ncmFtbWluZyB0aGUgaGFyZHdhcmUsCi0JCSAqIG9yIGlmIHRoZXJlIHdhcyBhIHBy ZXZpb3VzIHdhaXRlciAoZm9yIGEgbGF0ZXIgc2Vxbm8pIHRoZXkKLQkJICogbWF5IGJlIHdva2Vu IGluc3RlYWQgb2YgdXMgKGR1ZSB0byB0aGUgaW5oZXJlbnQgcmFjZQotCQkgKiBpbiB0aGUgdW5s b2NrZWQgcmVhZCBvZiBiLT5pcnFfc2Vxbm9fYmggaW4gdGhlIGlycSBoYW5kbGVyKQotCQkgKiBh bmQgc28gd2UgbWlzcyB0aGUgd2FrZSB1cC4KLQkJICovCi0JCWFybWVkID0gX19pbnRlbF9icmVh ZGNydW1ic19lbmFibGVfaXJxKGIpOwotCQlzcGluX3VubG9jaygmYi0+aXJxX2xvY2spOwotCX0K LQotCWlmIChjb21wbGV0ZWQpIHsKLQkJLyogQWR2YW5jZSB0aGUgYm90dG9tLWhhbGYgKGItPmly cV93YWl0KSBiZWZvcmUgd2Ugd2FrZSB1cAotCQkgKiB0aGUgd2FpdGVycyB3aG8gbWF5IHNjcmli YmxlIG92ZXIgdGhlaXIgaW50ZWxfd2FpdAotCQkgKiBqdXN0IGFzIHRoZSBpbnRlcnJ1cHQgaGFu ZGxlciBpcyBkZXJlZmVyZW5jaW5nIGl0IHZpYQotCQkgKiBiLT5pcnFfd2FpdC4KLQkJICovCi0J CWlmICghZmlyc3QpIHsKLQkJCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfbmV4dChjb21wbGV0 ZWQpOwotCQkJR0VNX0JVR19PTihuZXh0ID09ICZ3YWl0LT5ub2RlKTsKLQkJCV9faW50ZWxfYnJl YWRjcnVtYnNfbmV4dChlbmdpbmUsIG5leHQpOwotCQl9Ci0KLQkJZG8gewotCQkJc3RydWN0IGlu dGVsX3dhaXQgKmNydW1iID0gdG9fd2FpdChjb21wbGV0ZWQpOwotCQkJY29tcGxldGVkID0gcmJf cHJldihjb21wbGV0ZWQpOwotCQkJX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgY3J1bWIp OwotCQl9IHdoaWxlIChjb21wbGV0ZWQpOwotCX0KLQotCUdFTV9CVUdfT04oIWItPmlycV93YWl0 KTsKLQlHRU1fQlVHX09OKCFiLT5pcnFfYXJtZWQpOwotCUdFTV9CVUdfT04ocmJfZmlyc3QoJmIt PndhaXRlcnMpICE9ICZiLT5pcnFfd2FpdC0+bm9kZSk7Ci0KLQlyZXR1cm4gYXJtZWQ7Ci19Ci0K LWJvb2wgaW50ZWxfZW5naW5lX2FkZF93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwKLQkJCSAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQotewotCXN0cnVjdCBpbnRlbF9icmVh ZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCWJvb2wgYXJtZWQ7Ci0KLQlzcGlu X2xvY2tfaXJxKCZiLT5yYl9sb2NrKTsKLQlhcm1lZCA9IF9faW50ZWxfZW5naW5lX2FkZF93YWl0 KGVuZ2luZSwgd2FpdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKLQlpZiAoYXJt ZWQpCi0JCXJldHVybiBhcm1lZDsKLQotCS8qIE1ha2UgdGhlIGNhbGxlciByZWNoZWNrIGlmIGl0 cyByZXF1ZXN0IGhhcyBhbHJlYWR5IHN0YXJ0ZWQuICovCi0JcmV0dXJuIGludGVsX2VuZ2luZV9o YXNfc3RhcnRlZChlbmdpbmUsIHdhaXQtPnNlcW5vKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s IGNoYWluX3dha2V1cChzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBwcmlvcml0eSkKLXsKLQlyZXR1 cm4gcmIgJiYgdG9fd2FpdChyYiktPnRzay0+cHJpbyA8PSBwcmlvcml0eTsKLX0KKwljbGVhcl9i aXQoZW5naW5lLT5pZCwgJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3Mp OwogCi1zdGF0aWMgaW5saW5lIGludCB3YWtldXBfcHJpb3JpdHkoc3RydWN0IGludGVsX2JyZWFk Y3J1bWJzICpiLAotCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKHRzayA9 PSBiLT5zaWduYWxlcikKLQkJcmV0dXJuIElOVF9NSU47CisJaWYgKGItPmlycV9lbmFibGVkKQor CQlpcnFfZW5hYmxlKGVuZ2luZSk7CiAJZWxzZQotCQlyZXR1cm4gdHNrLT5wcmlvOwotfQotCi1z dGF0aWMgdm9pZCBfX2ludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCi0JCQkJICAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQotewotCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCi0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmYi0+cmJfbG9jayk7Ci0KLQlpZiAoUkJfRU1QVFlfTk9ERSgmd2Fp dC0+bm9kZSkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGItPmlycV93YWl0ID09IHdhaXQpIHsKLQkJ Y29uc3QgaW50IHByaW9yaXR5ID0gd2FrZXVwX3ByaW9yaXR5KGIsIHdhaXQtPnRzayk7Ci0JCXN0 cnVjdCByYl9ub2RlICpuZXh0OwotCi0JCS8qIFdlIGFyZSB0aGUgY3VycmVudCBib3R0b20taGFs Zi4gRmluZCB0aGUgbmV4dCBjYW5kaWRhdGUsCi0JCSAqIHRoZSBmaXJzdCB3YWl0ZXIgaW4gdGhl IHF1ZXVlIG9uIHRoZSByZW1haW5pbmcgb2xkZXN0Ci0JCSAqIHJlcXVlc3QuIEFzIG11bHRpcGxl IHNlcW5vcyBtYXkgY29tcGxldGUgaW4gdGhlIHRpbWUgaXQKLQkJICogdGFrZXMgdXMgdG8gd2Fr ZSB1cCBhbmQgZmluZCB0aGUgbmV4dCB3YWl0ZXIsIHdlIGhhdmUgdG8KLQkJICogd2FrZSB1cCB0 aGF0IHdhaXRlciBmb3IgaXQgdG8gcGVyZm9ybSBpdHMgb3duIGNvaGVyZW50Ci0JCSAqIGNvbXBs ZXRpb24gY2hlY2suCi0JCSAqLwotCQluZXh0ID0gcmJfbmV4dCgmd2FpdC0+bm9kZSk7Ci0JCWlm IChjaGFpbl93YWtldXAobmV4dCwgcHJpb3JpdHkpKSB7Ci0JCQkvKiBJZiB0aGUgbmV4dCB3YWl0 ZXIgaXMgYWxyZWFkeSBjb21wbGV0ZSwKLQkJCSAqIHdha2UgaXQgdXAgYW5kIGNvbnRpbnVlIG9u dG8gdGhlIG5leHQgd2FpdGVyLiBTbwotCQkJICogaWYgaGF2ZSBhIHNtYWxsIGhlcmQsIHRoZXkg d2lsbCB3YWtlIHVwIGluIHBhcmFsbGVsCi0JCQkgKiByYXRoZXIgdGhhbiBzZXF1ZW50aWFsbHks IHdoaWNoIHNob3VsZCByZWR1Y2UKLQkJCSAqIHRoZSBvdmVyYWxsIGxhdGVuY3kgaW4gd2FraW5n IGFsbCB0aGUgY29tcGxldGVkCi0JCQkgKiBjbGllbnRzLgotCQkJICoKLQkJCSAqIEhvd2V2ZXIs IHdha2luZyB1cCBhIGNoYWluIGFkZHMgZXh0cmEgbGF0ZW5jeSB0bwotCQkJICogdGhlIGZpcnN0 X3dhaXRlci4gVGhpcyBpcyB1bmRlc2lyYWJsZSBpZiB0aGF0Ci0JCQkgKiB3YWl0ZXIgaXMgYSBo aWdoIHByaW9yaXR5IHRhc2suCi0JCQkgKi8KLQkJCXUzMiBzZXFubyA9IGludGVsX2VuZ2luZV9n ZXRfc2Vxbm8oZW5naW5lKTsKLQotCQkJd2hpbGUgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCB0 b193YWl0KG5leHQpLT5zZXFubykpIHsKLQkJCQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJiX25leHQo bmV4dCk7Ci0KLQkJCQlfX2ludGVsX2JyZWFkY3J1bWJzX2ZpbmlzaChiLCB0b193YWl0KG5leHQp KTsKLQkJCQluZXh0ID0gbjsKLQkJCQlpZiAoIWNoYWluX3dha2V1cChuZXh0LCBwcmlvcml0eSkp Ci0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJX19pbnRlbF9icmVhZGNydW1ic19uZXh0KGVu Z2luZSwgbmV4dCk7Ci0JfSBlbHNlIHsKLQkJR0VNX0JVR19PTihyYl9maXJzdCgmYi0+d2FpdGVy cykgPT0gJndhaXQtPm5vZGUpOwotCX0KLQotCUdFTV9CVUdfT04oUkJfRU1QVFlfTk9ERSgmd2Fp dC0+bm9kZSkpOwotCXJiX2VyYXNlKCZ3YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7Ci0JUkJfQ0xF QVJfTk9ERSgmd2FpdC0+bm9kZSk7Ci0KLW91dDoKLQlHRU1fQlVHX09OKGItPmlycV93YWl0ID09 IHdhaXQpOwotCUdFTV9CVUdfT04ocmJfZmlyc3QoJmItPndhaXRlcnMpICE9Ci0JCSAgIChiLT5p cnFfd2FpdCA/ICZiLT5pcnFfd2FpdC0+bm9kZSA6IE5VTEwpKTsKLX0KLQotdm9pZCBpbnRlbF9l bmdpbmVfcmVtb3ZlX3dhaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICAg ICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJz ICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0KLQkvKiBRdWljayBjaGVjayB0byBzZWUgaWYg dGhpcyB3YWl0ZXIgd2FzIGFscmVhZHkgZGVjb3VwbGVkIGZyb20KLQkgKiB0aGUgdHJlZSBieSB0 aGUgYm90dG9tLWhhbGYgdG8gYXZvaWQgY29udGVudGlvbiBvbiB0aGUgc3BpbmxvY2sKLQkgKiBi eSB0aGUgaGVyZC4KLQkgKi8KLQlpZiAoUkJfRU1QVFlfTk9ERSgmd2FpdC0+bm9kZSkpIHsKLQkJ R0VNX0JVR19PTihSRUFEX09OQ0UoYi0+aXJxX3dhaXQpID09IHdhaXQpOwotCQlyZXR1cm47Ci0J fQorCQlpcnFfZGlzYWJsZShlbmdpbmUpOwogCi0Jc3Bpbl9sb2NrX2lycSgmYi0+cmJfbG9jayk7 Ci0JX19pbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoZW5naW5lLCB3YWl0KTsKLQlzcGluX3VubG9j a19pcnEoJmItPnJiX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmItPmlycV9sb2Nr LCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNpZ25hbGVyX3NldF9ydHByaW9yaXR5KHZvaWQp Cit2b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKIHsKLQkgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJp b3JpdHkgPSAxIH07Ci0KLQkgc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NI RURfRklGTywgJnBhcmFtKTsKKwljYW5jZWxfZmFrZV9pcnEoZW5naW5lKTsKIH0KIAotc3RhdGlj IGludCBpbnRlbF9icmVhZGNydW1ic19zaWduYWxlcih2b2lkICphcmcpCitib29sIGludGVsX2Vu Z2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogewotCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGFyZzsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwg Km47Ci0KLQkvKiBJbnN0YWxsIG91cnNlbHZlcyB3aXRoIGhpZ2ggcHJpb3JpdHkgdG8gcmVkdWNl IHNpZ25hbGxpbmcgbGF0ZW5jeSAqLwotCXNpZ25hbGVyX3NldF9ydHByaW9yaXR5KCk7Ci0KLQlk byB7Ci0JCWJvb2wgZG9fc2NoZWR1bGUgPSB0cnVlOwotCQlMSVNUX0hFQUQobGlzdCk7Ci0JCXUz MiBzZXFubzsKLQotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlp ZiAobGlzdF9lbXB0eSgmYi0+c2lnbmFscykpCi0JCQlnb3RvIHNsZWVwOwotCi0JCS8qCi0JCSAq IFdlIGFyZSBlaXRoZXIgd29rZW4gdXAgYnkgdGhlIGludGVycnVwdCBib3R0b20taGFsZiwKLQkJ ICogb3IgYnkgYSBjbGllbnQgYWRkaW5nIGEgbmV3IHNpZ25hbGxlci4gSW4gYm90aCBjYXNlcywK LQkJICogdGhlIEdQVSBzZXFubyBtYXkgaGF2ZSBhZHZhbmNlZCBiZXlvbmQgb3VyIG9sZGVzdCBz aWduYWwuCi0JCSAqIElmIGl0IGhhcywgcHJvcGFnYXRlIHRoZSBzaWduYWwsIHJlbW92ZSB0aGUg d2FpdGVyIGFuZAotCQkgKiBjaGVjayBhZ2FpbiB3aXRoIHRoZSBuZXh0IG9sZGVzdCBzaWduYWwu IE90aGVyd2lzZSB3ZQotCQkgKiBuZWVkIHRvIHdhaXQgZm9yIGEgbmV3IGludGVycnVwdCBmcm9t IHRoZSBHUFUgb3IgZm9yCi0JCSAqIGEgbmV3IGNsaWVudC4KLQkJICovCi0JCXNlcW5vID0gaW50 ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpOwotCi0JCXNwaW5fbG9ja19pcnEoJmItPnJiX2xv Y2spOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIG4sICZiLT5zaWduYWxzLCBzaWdu YWxpbmcubGluaykgewotCQkJdTMyIHRoaXMgPSBycS0+c2lnbmFsaW5nLndhaXQuc2Vxbm87Ci0K LQkJCUdFTV9CVUdfT04oIXJxLT5zaWduYWxpbmcud2FpdC5zZXFubyk7Ci0KLQkJCWlmICghaTkx NV9zZXFub19wYXNzZWQoc2Vxbm8sIHRoaXMpKQotCQkJCWJyZWFrOworCXN0cnVjdCBpbnRlbF9i cmVhZGNydW1icyAqYiA9ICZycS0+ZW5naW5lLT5icmVhZGNydW1iczsKIAotCQkJaWYgKGxpa2Vs eSh0aGlzID09IGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vxbm8ocnEpKSkgewotCQkJCV9faW50ZWxf ZW5naW5lX3JlbW92ZV93YWl0KGVuZ2luZSwKLQkJCQkJCQkgICAmcnEtPnNpZ25hbGluZy53YWl0 KTsKKwlHRU1fQlVHX09OKHRlc3RfYml0KEk5MTVfRkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ZmVu Y2UuZmxhZ3MpKTsKIAotCQkJCXJxLT5zaWduYWxpbmcud2FpdC5zZXFubyA9IDA7Ci0JCQkJX19s aXN0X2RlbF9lbnRyeSgmcnEtPnNpZ25hbGluZy5saW5rKTsKLQotCQkJCWlmICghdGVzdF9iaXQo RE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklULAotCQkJCQkgICAgICAmcnEtPmZlbmNlLmZsYWdz KSkgewotCQkJCQlsaXN0X2FkZF90YWlsKCZycS0+c2lnbmFsaW5nLmxpbmssCi0JCQkJCQkgICAg ICAmbGlzdCk7Ci0JCQkJCWk5MTVfcmVxdWVzdF9nZXQocnEpOwotCQkJCX0KLQkJCX0KLQkJfQot CQlzcGluX3VubG9ja19pcnEoJmItPnJiX2xvY2spOworCWlmICghdGVzdF9iaXQoSTkxNV9GRU5D RV9GTEFHX0FDVElWRSwgJnJxLT5mZW5jZS5mbGFncykpCisJCXJldHVybiB0cnVlOwogCi0JCWlm ICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKLQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShycSwgbiwgJmxpc3QsIHNpZ25hbGluZy5saW5rKSB7Ci0JCQkJ ZG1hX2ZlbmNlX3NpZ25hbCgmcnEtPmZlbmNlKTsKLQkJCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVl c3RfY29tcGxldGVkKHJxKSk7Ci0JCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7Ci0JCQl9Ci0JCQls b2NhbF9iaF9lbmFibGUoKTsgLyoga2ljayBzdGFydCB0aGUgdGFza2xldHMgKi8KKwlzcGluX2xv Y2soJmItPmlycV9sb2NrKTsKKwlpZiAodGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwg JnJxLT5mZW5jZS5mbGFncykgJiYKKwkgICAgIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7 CisJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHJxLT5od19jb250ZXh0OworCQlzdHJ1Y3Qg bGlzdF9oZWFkICpwb3M7CiAKLQkJCS8qCi0JCQkgKiBJZiB0aGUgZW5naW5lIGlzIHNhdHVyYXRl ZCB3ZSBtYXkgYmUgY29udGludWFsbHkKLQkJCSAqIHByb2Nlc3NpbmcgY29tcGxldGVkIHJlcXVl c3RzLiBUaGlzIGFuZ2VycyB0aGUKLQkJCSAqIE5NSSB3YXRjaGRvZyBpZiB3ZSBuZXZlciBsZXQg YW55dGhpbmcgZWxzZQotCQkJICogaGF2ZSBhY2Nlc3MgdG8gdGhlIENQVS4gTGV0J3MgcHJldGVu ZCB0byBiZSBuaWNlCi0JCQkgKiBhbmQgcmVsaW5xdWlzaCB0aGUgQ1BVIGlmIHdlIGJ1cm4gdGhy b3VnaCB0aGUKLQkJCSAqIGVudGlyZSBSVCB0aW1lc2xpY2UhCi0JCQkgKi8KLQkJCWRvX3NjaGVk dWxlID0gbmVlZF9yZXNjaGVkKCk7Ci0JCX0KKwkJX19pbnRlbF9icmVhZGNydW1ic19hcm1faXJx KGIpOwogCi0JCWlmICh1bmxpa2VseShkb19zY2hlZHVsZSkpIHsKLXNsZWVwOgotCQkJaWYgKGt0 aHJlYWRfc2hvdWxkX3BhcmsoKSkKLQkJCQlrdGhyZWFkX3BhcmttZSgpOworCQlsaXN0X2Zvcl9l YWNoX3ByZXYocG9zLCAmY2UtPnNpZ25hbHMpIHsKKwkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKml0 ID0KKwkJCQlsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCppdCksIHNpZ25hbF9saW5rKTsKIAotCQkJ aWYgKHVubGlrZWx5KGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCisJCQlpZiAoaTkxNV9zZXFub19w YXNzZWQocnEtPmZlbmNlLnNlcW5vLCBpdC0+ZmVuY2Uuc2Vxbm8pKQogCQkJCWJyZWFrOwotCi0J CQlzY2hlZHVsZSgpOwogCQl9Ci0JfSB3aGlsZSAoMSk7Ci0JX19zZXRfY3VycmVudF9zdGF0ZShU QVNLX1JVTk5JTkcpOworCQlsaXN0X2FkZCgmcnEtPnNpZ25hbF9saW5rLCBwb3MpOworCQlpZiAo cG9zID09ICZjZS0+c2lnbmFscykKKwkJCWxpc3RfbW92ZV90YWlsKCZjZS0+c2lnbmFsX2xpbmss ICZiLT5zaWduYWxlcnMpOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGluc2VydF9z aWduYWwoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiLAotCQkJICBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpyZXF1ZXN0LAotCQkJICBjb25zdCB1MzIgc2Vxbm8pCi17Ci0Jc3RydWN0IGk5MTVfcmVx dWVzdCAqaXRlcjsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmItPnJiX2xvY2spOwotCi0JLyoK LQkgKiBBIHJlYXNvbmFibGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBjYWxsZWQgdG8gYWRk IHNpZ25hbHMKLQkgKiBpbiBzZXF1ZW5jZSwgYXMgdGhlIHJlcXVlc3RzIGFyZSBzdWJtaXR0ZWQg Zm9yIGV4ZWN1dGlvbiBhbmQKLQkgKiBhc3NpZ25lZCBhIGdsb2JhbF9zZXFuby4gVGhpcyB3aWxs IGJlIHRoZSBjYXNlIGZvciB0aGUgbWFqb3JpdHkKLQkgKiBvZiBpbnRlcm5hbGx5IGdlbmVyYXRl ZCBzaWduYWxzIChpbnRlci1lbmdpbmUgc2lnbmFsaW5nKS4KLQkgKgotCSAqIE91dCBvZiBvcmRl ciB3YWl0ZXJzIHRyaWdnZXJpbmcgcmFuZG9tIHNpZ25hbGluZyBlbmFibGluZyB3aWxsCi0JICog YmUgbW9yZSBwcm9ibGVtYXRpYywgYnV0IGhvcGVmdWxseSByYXJlIGVub3VnaCBhbmQgdGhlIGxp c3QKLQkgKiBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgTyhOKSBpbnNlcnRpb24gc29ydCBpcyBub3Qg YW4gaXNzdWUuCi0JICovCi0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaXRlciwgJmIt PnNpZ25hbHMsIHNpZ25hbGluZy5saW5rKQotCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoc2Vxbm8s IGl0ZXItPnNpZ25hbGluZy53YWl0LnNlcW5vKSkKLQkJCWJyZWFrOwotCi0JbGlzdF9hZGQoJnJl cXVlc3QtPnNpZ25hbGluZy5saW5rLCAmaXRlci0+c2lnbmFsaW5nLmxpbmspOwotfQotCi1ib29s IGludGVsX2VuZ2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVl c3QsIGJvb2wgd2FrZXVwKQotewotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IHJl cXVlc3QtPmVuZ2luZTsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5i cmVhZGNydW1iczsKLQlzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCA9ICZyZXF1ZXN0LT5zaWduYWxp bmcud2FpdDsKLQl1MzIgc2Vxbm87Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB3ZSBtYXkgYmUgY2Fs bGVkIGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIgb24gYW5vdGhlcgotCSAqIGRldmljZSAoZS5n LiBub3V2ZWF1IHNpZ25hbGluZyBhIGZlbmNlIGNvbXBsZXRpb24gY2F1c2luZyB1cwotCSAqIHRv IHN1Ym1pdCBhIHJlcXVlc3QsIGFuZCBzbyBlbmFibGUgc2lnbmFsaW5nKS4gQXMgc3VjaCwKLQkg KiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBvdGhlciB1c2VycyBvZiBiLT5yYl9sb2Nr IHByb3RlY3QKLQkgKiBhZ2FpbnN0IGludGVycnVwdHMsIGkuZS4gdXNlIHNwaW5fbG9ja19pcnFz YXZlLgotCSAqLwotCi0JLyogbG9ja2VkIGJ5IGRtYV9mZW5jZV9lbmFibGVfc3dfc2lnbmFsaW5n KCkgKGlycXNhZmUgZmVuY2UtPmxvY2spICovCi0JR0VNX0JVR19PTighaXJxc19kaXNhYmxlZCgp KTsKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZyZXF1ZXN0LT5sb2NrKTsKLQotCXNlcW5vID0gaTkx NV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhyZXF1ZXN0KTsKLQlpZiAoIXNlcW5vKSAvKiB3aWxsIGJl IGVuYWJsZWQgbGF0ZXIgdXBvbiBleGVjdXRpb24gKi8KLQkJcmV0dXJuIHRydWU7Ci0KLQlHRU1f QlVHX09OKHdhaXQtPnNlcW5vKTsKLQl3YWl0LT50c2sgPSBiLT5zaWduYWxlcjsKLQl3YWl0LT5y ZXF1ZXN0ID0gcmVxdWVzdDsKLQl3YWl0LT5zZXFubyA9IHNlcW5vOwotCi0JLyoKLQkgKiBBZGQg b3Vyc2VsdmVzIGludG8gdGhlIGxpc3Qgb2Ygd2FpdGVycywgYnV0IHJlZ2lzdGVyaW5nIG91cgot CSAqIGJvdHRvbS1oYWxmIGFzIHRoZSBzaWduYWxsZXIgdGhyZWFkLiBBcyBwZXIgdXN1YWwsIG9u bHkgdGhlIG9sZGVzdAotCSAqIHdhaXRlciAobm90IGp1c3Qgc2lnbmFsbGVyKSBpcyB0YXNrZWQg YXMgdGhlIGJvdHRvbS1oYWxmIHdha2luZwotCSAqIHVwIGFsbCBjb21wbGV0ZWQgd2FpdGVycyBh ZnRlciB0aGUgdXNlciBpbnRlcnJ1cHQuCi0JICoKLQkgKiBJZiB3ZSBhcmUgdGhlIG9sZGVzdCB3 YWl0ZXIsIGVuYWJsZSB0aGUgaXJxIChhZnRlciB3aGljaCB3ZQotCSAqIG11c3QgZG91YmxlIGNo ZWNrIHRoYXQgdGhlIHNlcW5vIGRpZCBub3QgY29tcGxldGUpLgotCSAqLwotCXNwaW5fbG9jaygm Yi0+cmJfbG9jayk7Ci0JaW5zZXJ0X3NpZ25hbChiLCByZXF1ZXN0LCBzZXFubyk7Ci0Jd2FrZXVw ICY9IF9faW50ZWxfZW5naW5lX2FkZF93YWl0KGVuZ2luZSwgd2FpdCk7Ci0Jc3Bpbl91bmxvY2so JmItPnJiX2xvY2spOwotCi0JaWYgKHdha2V1cCkgewotCQl3YWtlX3VwX3Byb2Nlc3MoYi0+c2ln bmFsZXIpOwotCQlyZXR1cm4gIWludGVsX3dhaXRfY29tcGxldGUod2FpdCk7CisJCXNldF9iaXQo STkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncyk7CiAJfQorCXNwaW5fdW5s b2NrKCZiLT5pcnFfbG9jayk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gIWk5MTVfcmVxdWVz dF9jb21wbGV0ZWQocnEpOwogfQogCi12b2lkIGludGVsX2VuZ2luZV9jYW5jZWxfc2lnbmFsaW5n KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCit2b2lkIGludGVsX2VuZ2luZV9jYW5jZWxf c2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQogewotCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSA9IHJlcXVlc3QtPmVuZ2luZTsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKLQotCUdFTV9CVUdfT04oIWlycXNfZGlzYWJs ZWQoKSk7Ci0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmcmVxdWVzdC0+bG9jayk7CisJc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICpiID0gJnJxLT5lbmdpbmUtPmJyZWFkY3J1bWJzOwogCi0JaWYgKCFS RUFEX09OQ0UocmVxdWVzdC0+c2lnbmFsaW5nLndhaXQuc2Vxbm8pKQorCWlmICghdGVzdF9iaXQo STkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpCiAJCXJldHVybjsKIAot CXNwaW5fbG9jaygmYi0+cmJfbG9jayk7Ci0JX19pbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoZW5n aW5lLCAmcmVxdWVzdC0+c2lnbmFsaW5nLndhaXQpOwotCWlmIChmZXRjaF9hbmRfemVybygmcmVx dWVzdC0+c2lnbmFsaW5nLndhaXQuc2Vxbm8pKQotCQlfX2xpc3RfZGVsX2VudHJ5KCZyZXF1ZXN0 LT5zaWduYWxpbmcubGluayk7Ci0Jc3Bpbl91bmxvY2soJmItPnJiX2xvY2spOwotfQotCi1pbnQg aW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQotewotCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1 bWJzOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmItPnJi X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZiLT5pcnFfbG9jayk7Ci0KLQl0aW1lcl9zZXR1cCgm Yi0+ZmFrZV9pcnEsIGludGVsX2JyZWFkY3J1bWJzX2Zha2VfaXJxLCAwKTsKLQl0aW1lcl9zZXR1 cCgmYi0+aGFuZ2NoZWNrLCBpbnRlbF9icmVhZGNydW1ic19oYW5nY2hlY2ssIDApOwotCi0JSU5J VF9MSVNUX0hFQUQoJmItPnNpZ25hbHMpOwotCi0JLyogU3Bhd24gYSB0aHJlYWQgdG8gcHJvdmlk ZSBhIGNvbW1vbiBib3R0b20taGFsZiBmb3IgYWxsIHNpZ25hbHMuCi0JICogQXMgdGhpcyBpcyBh biBhc3luY2hyb25vdXMgaW50ZXJmYWNlIHdlIGNhbm5vdCBzdGVhbCB0aGUgY3VycmVudAotCSAq IHRhc2sgZm9yIGhhbmRsaW5nIHRoZSBib3R0b20taGFsZiB0byB0aGUgdXNlciBpbnRlcnJ1cHQs IHRoZXJlZm9yZQotCSAqIHdlIGNyZWF0ZSBhIHRocmVhZCB0byBkbyB0aGUgY29oZXJlbnQgc2Vx bm8gZGFuY2UgYWZ0ZXIgdGhlCi0JICogaW50ZXJydXB0IGFuZCB0aGVuIHNpZ25hbCB0aGUgd2Fp dHF1ZXVlICh2aWEgdGhlIGRtYS1idWYvZmVuY2UpLgotCSAqLwotCXRzayA9IGt0aHJlYWRfcnVu KGludGVsX2JyZWFkY3J1bWJzX3NpZ25hbGVyLCBlbmdpbmUsCi0JCQkgICJpOTE1L3NpZ25hbDol ZCIsIGVuZ2luZS0+aWQpOwotCWlmIChJU19FUlIodHNrKSkKLQkJcmV0dXJuIFBUUl9FUlIodHNr KTsKLQotCWItPnNpZ25hbGVyID0gdHNrOwotCi0JcmV0dXJuIDA7Ci19CisJc3Bpbl9sb2NrKCZi LT5pcnFfbG9jayk7CisJaWYgKHRlc3RfYml0KEk5MTVfRkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ ZmVuY2UuZmxhZ3MpKSB7CisJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHJxLT5od19jb250 ZXh0OwogCi1zdGF0aWMgdm9pZCBjYW5jZWxfZmFrZV9pcnEoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQotewotCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJy ZWFkY3J1bWJzOworCQlsaXN0X2RlbCgmcnEtPnNpZ25hbF9saW5rKTsKKwkJaWYgKGxpc3RfZW1w dHkoJmNlLT5zaWduYWxzKSkKKwkJCWxpc3RfZGVsX2luaXQoJmNlLT5zaWduYWxfbGluayk7CiAK LQlkZWxfdGltZXJfc3luYygmYi0+ZmFrZV9pcnEpOyAvKiBtYXkgcXVldWUgYi0+aGFuZ2NoZWNr ICovCi0JZGVsX3RpbWVyX3N5bmMoJmItPmhhbmdjaGVjayk7Ci0JY2xlYXJfYml0KGVuZ2luZS0+ aWQsICZlbmdpbmUtPmk5MTUtPmdwdV9lcnJvci5taXNzZWRfaXJxX3JpbmdzKTsKKwkJY2xlYXJf Yml0KEk5MTVfRkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ZmVuY2UuZmxhZ3MpOworCX0KKwlzcGlu X3VubG9jaygmYi0+aXJxX2xvY2spOwogfQogCi12b2lkIGludGVsX2VuZ2luZV9yZXNldF9icmVh ZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit2b2lkIGludGVsX2VuZ2lu ZV9wcmludF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCisJCQkJ ICAgIHN0cnVjdCBkcm1fcHJpbnRlciAqcCkKIHsKIAlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMg KmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmItPmlycV9sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIExlYXZlIHRo ZSBmYWtlX2lycSB0aW1lciBlbmFibGVkIChpZiBpdCBpcyBydW5uaW5nKSwgYnV0IGNsZWFyIHRo ZQotCSAqIGJpdCBzbyB0aGF0IGl0IHR1cm5zIGl0c2VsZiBvZmYgb24gaXRzIG5leHQgd2FrZSB1 cCBhbmQgZ29lcyBiYWNrCi0JICogdG8gdGhlIGxvbmcgaGFuZ2NoZWNrIGludGVydmFsIGlmIHN0 aWxsIHJlcXVpcmVkLgotCSAqLwotCWNsZWFyX2JpdChlbmdpbmUtPmlkLCAmZW5naW5lLT5pOTE1 LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmNl OworCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwogCi0JaWYgKGItPmlycV9lbmFibGVkKQotCQlp cnFfZW5hYmxlKGVuZ2luZSk7Ci0JZWxzZQotCQlpcnFfZGlzYWJsZShlbmdpbmUpOwotCi0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmYi0+aXJxX2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZCBpbnRl bF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Ci17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7 CisJaWYgKGxpc3RfZW1wdHkoJmItPnNpZ25hbGVycykpCisJCXJldHVybjsKIAotCS8qIFRoZSBl bmdpbmVzIHNob3VsZCBiZSBpZGxlIGFuZCBhbGwgcmVxdWVzdHMgYWNjb3VudGVkIGZvciEgKi8K LQlXQVJOX09OKFJFQURfT05DRShiLT5pcnFfd2FpdCkpOwotCVdBUk5fT04oIVJCX0VNUFRZX1JP T1QoJmItPndhaXRlcnMpKTsKLQlXQVJOX09OKCFsaXN0X2VtcHR5KCZiLT5zaWduYWxzKSk7CisJ ZHJtX3ByaW50ZihwLCAiU2lnbmFsczpcbiIpOwogCi0JaWYgKCFJU19FUlJfT1JfTlVMTChiLT5z aWduYWxlcikpCi0JCWt0aHJlYWRfc3RvcChiLT5zaWduYWxlcik7CisJc3Bpbl9sb2NrX2lycSgm Yi0+aXJxX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2UsICZiLT5zaWduYWxlcnMsIHNp Z25hbF9saW5rKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnEsICZjZS0+c2lnbmFscywgc2ln bmFsX2xpbmspIHsKKwkJCWRybV9wcmludGYocCwgIlx0WyVsbHg6JWxseCVzXSBAICVkbXNcbiIs CisJCQkJICAgcnEtPmZlbmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubywKKwkJCQkgICBpOTE1 X3JlcXVlc3RfY29tcGxldGVkKHJxKSA/ICIhIiA6CisJCQkJICAgaTkxNV9yZXF1ZXN0X3N0YXJ0 ZWQocnEpID8gIioiIDoKKwkJCQkgICAiIiwKKwkJCQkgICBqaWZmaWVzX3RvX21zZWNzKGppZmZp ZXMgLSBycS0+ZW1pdHRlZF9qaWZmaWVzKSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZi LT5pcnFfbG9jayk7CiAKLQljYW5jZWxfZmFrZV9pcnEoZW5naW5lKTsKKwlpZiAodGVzdF9iaXQo ZW5naW5lLT5pZCwgJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpKQor CQlkcm1fcHJpbnRmKHAsICJGYWtlIGlycSBhY3RpdmVcbiIpOwogfQotCi0jaWYgSVNfRU5BQkxF RChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCi0jaW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX2Jy ZWFkY3J1bWJzLmMiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMK aW5kZXggYWU0NTViODc0YzlmLi40MjlmMjFlMTY0MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jCkBAIC00NTgsMTIgKzQ1OCw2IEBAIGludCBpbnRlbF9lbmdpbmVzX2lu aXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogdm9pZCBpbnRlbF9lbmdpbmVf d3JpdGVfZ2xvYmFsX3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIHNl cW5vKQogewogCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX0lO REVYLCBzZXFubyk7Ci0KLQkvKiBBZnRlciBtYW51YWxseSBhZHZhbmNpbmcgdGhlIHNlcW5vLCBm YWtlIHRoZSBpbnRlcnJ1cHQgaW4gY2FzZQotCSAqIHRoZXJlIGFyZSBhbnkgd2FpdGVycyBmb3Ig dGhhdCBzZXFuby4KLQkgKi8KLQlpbnRlbF9lbmdpbmVfd2FrZXVwKGVuZ2luZSk7Ci0KIAlHRU1f QlVHX09OKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSAhPSBzZXFubyk7CiB9CiAKQEAg LTY2NywxNiArNjYxLDEwIEBAIGludCBpbnRlbF9lbmdpbmVfaW5pdF9jb21tb24oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCQl9CiAJfQogCi0JcmV0ID0gaW50ZWxfZW5naW5lX2lu aXRfYnJlYWRjcnVtYnMoZW5naW5lKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl91bnBpbl9wcmVl bXB0OworCWludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKGVuZ2luZSk7CiAKIAlyZXR1cm4g MDsKIAotZXJyX3VucGluX3ByZWVtcHQ6Ci0JaWYgKGk5MTUtPnByZWVtcHRfY29udGV4dCkKLQkJ X19pbnRlbF9jb250ZXh0X3VucGluKGk5MTUtPnByZWVtcHRfY29udGV4dCwgZW5naW5lKTsKLQog ZXJyX3VucGluX2tlcm5lbDoKIAlfX2ludGVsX2NvbnRleHRfdW5waW4oaTkxNS0+a2VybmVsX2Nv bnRleHQsIGVuZ2luZSk7CiAJcmV0dXJuIHJldDsKQEAgLTEyMzYsMTIgKzEyMjQsMTQgQEAgc3Rh dGljIHZvaWQgcHJpbnRfcmVxdWVzdChzdHJ1Y3QgZHJtX3ByaW50ZXIgKm0sCiAKIAl4ID0gcHJp bnRfc2NoZWRfYXR0cihycS0+aTkxNSwgJnJxLT5zY2hlZC5hdHRyLCBidWYsIHgsIHNpemVvZihi dWYpKTsKIAotCWRybV9wcmludGYobSwgIiVzJXglcyBbJWxseDolbGx4XSVzIEAgJWRtczogJXNc biIsCisJZHJtX3ByaW50ZihtLCAiJXMleCVzJXMgWyVsbHg6JWxseF0lcyBAICVkbXM6ICVzXG4i LAogCQkgICBwcmVmaXgsCiAJCSAgIHJxLT5nbG9iYWxfc2Vxbm8sCiAJCSAgIGk5MTVfcmVxdWVz dF9jb21wbGV0ZWQocnEpID8gIiEiIDoKIAkJICAgaTkxNV9yZXF1ZXN0X3N0YXJ0ZWQocnEpID8g IioiIDoKIAkJICAgIiIsCisJCSAgIHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdO QUxfQklULAorCQkJICAgICZycS0+ZmVuY2UuZmxhZ3MpID8gICIrIiA6ICIiLAogCQkgICBycS0+ ZmVuY2UuY29udGV4dCwgcnEtPmZlbmNlLnNlcW5vLAogCQkgICBidWYsCiAJCSAgIGppZmZpZXNf dG9fbXNlY3MoamlmZmllcyAtIHJxLT5lbWl0dGVkX2ppZmZpZXMpLApAQCAtMTQzMywxMiArMTQy Myw5IEBAIHZvaWQgaW50ZWxfZW5naW5lX2R1bXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLAogCQkgICAgICAgc3RydWN0IGRybV9wcmludGVyICptLAogCQkgICAgICAgY29uc3QgY2hh ciAqaGVhZGVyLCAuLi4pCiB7Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICogY29uc3QgYiA9 ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwogCXN0cnVjdCBpOTE1X2dwdV9lcnJvciAqIGNvbnN0IGVy cm9yID0gJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yOwogCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx OwogCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Ry dWN0IHJiX25vZGUgKnJiOwogCiAJaWYgKGhlYWRlcikgewogCQl2YV9saXN0IGFwOwpAQCAtMTUw NCwyMSArMTQ5MSwxMiBAQCB2b2lkIGludGVsX2VuZ2luZV9kdW1wKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKIAogCWludGVsX2V4ZWNsaXN0c19zaG93X3JlcXVlc3RzKGVuZ2luZSwg bSwgcHJpbnRfcmVxdWVzdCwgOCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+cmJfbG9jaywg ZmxhZ3MpOwotCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7IHJiOyByYiA9IHJiX25l eHQocmIpKSB7Ci0JCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gcmJfZW50cnkocmIsIHR5cGVvZigq dyksIG5vZGUpOwotCi0JCWRybV9wcmludGYobSwgIlx0JXMgWyVkOiVjXSB3YWl0aW5nIGZvciAl eFxuIiwKLQkJCSAgIHctPnRzay0+Y29tbSwgdy0+dHNrLT5waWQsCi0JCQkgICB0YXNrX3N0YXRl X3RvX2NoYXIody0+dHNrKSwKLQkJCSAgIHctPnNlcW5vKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmYi0+cmJfbG9jaywgZmxhZ3MpOwotCiAJZHJtX3ByaW50ZihtLCAiSFdTUDpcbiIp OwogCWhleGR1bXAobSwgZW5naW5lLT5zdGF0dXNfcGFnZS5hZGRyLCBQQUdFX1NJWkUpOwogCiAJ ZHJtX3ByaW50ZihtLCAiSWRsZT8gJXNcbiIsIHllc25vKGludGVsX2VuZ2luZV9pc19pZGxlKGVu Z2luZSkpKTsKKworCWludGVsX2VuZ2luZV9wcmludF9icmVhZGNydW1icyhlbmdpbmUsIG0pOwog fQogCiBzdGF0aWMgdTggdXNlcl9jbGFzc19tYXBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuYwppbmRleCAyYjRiZWIxNWEyNzEuLjk3NzMyZTM4NzgyMSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtNDgyLDggKzQ4Miw4IEBAIHN0 YXRpYyB2b2lkIGdlbjdfeGNzX2VtaXRfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSwgdTMyICpjcykKIAogCWZvciAoaSA9IDA7IGkgPCBHRU43X1hDU19XQTsgaSsrKSB7CiAJCSpj cysrID0gTUlfU1RPUkVfRFdPUkRfSU5ERVg7Ci0JCSpjcysrID0gSTkxNV9HRU1fSFdTX0lOREVY X0FERFI7Ci0JCSpjcysrID0gcnEtPmdsb2JhbF9zZXFubzsKKwkJKmNzKysgPSBJOTE1X0dFTV9I V1NfU0VRTk9fQUREUjsKKwkJKmNzKysgPSBycS0+ZmVuY2Uuc2Vxbm87CiAJfQogCiAJKmNzKysg PSBNSV9GTFVTSF9EVzsKQEAgLTczMyw3ICs3MzMsNyBAQCBzdGF0aWMgaW50IGluaXRfcmluZ19j b21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCX0KIAogCS8qIFBhcGVyaW5n IG92ZXIgbG9zdCBfaW50ZXJydXB0c18gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSByZXN0YXJ0 ICovCi0JaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpOworCWludGVsX2VuZ2luZV9xdWV1ZV9i cmVhZGNydW1icyhlbmdpbmUpOwogb3V0OgogCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRl dl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oCmluZGV4IGRlMDA5OWVhOTI2Yi4uNmQxNDg1MjA4MzQyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGRybS9k cm1fdXRpbC5oPgogCiAjaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8bGlu dXgvaXJxX3dvcmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAKICNpbmNsdWRlICJp OTE1X2dlbV9iYXRjaF9wb29sLmgiCkBAIC0zODQsMjIgKzM4NSwxOSBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIHsKIAkgKiB0aGUgb3ZlcmhlYWQgb2Ygd2FraW5nIHRoYXQgY2xpZW50IGlzIG11 Y2ggcHJlZmVycmVkLgogCSAqLwogCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyB7Ci0JCXNwaW5s b2NrX3QgaXJxX2xvY2s7IC8qIHByb3RlY3RzIGlycV8qOyBpcnFzYWZlICovCi0JCXN0cnVjdCBp bnRlbF93YWl0ICppcnFfd2FpdDsgLyogb2xkZXN0IHdhaXRlciBieSByZXRpcmVtZW50ICovCisJ CXNwaW5sb2NrX3QgaXJxX2xvY2s7CisJCXN0cnVjdCBsaXN0X2hlYWQgc2lnbmFsZXJzOwogCi0J CXNwaW5sb2NrX3QgcmJfbG9jazsgLyogcHJvdGVjdHMgdGhlIHJiIGFuZCB3cmFwcyBpcnFfbG9j ayAqLwotCQlzdHJ1Y3QgcmJfcm9vdCB3YWl0ZXJzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCwg cHJpb3JpdHkgKi8KLQkJc3RydWN0IGxpc3RfaGVhZCBzaWduYWxzOyAvKiBzb3J0ZWQgYnkgcmV0 aXJlbWVudCAqLwotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNpZ25hbGVyOyAvKiB1c2VkIGZvciBm ZW5jZSBzaWduYWxsaW5nICovCisJCXN0cnVjdCBpcnFfd29yayBpcnFfd29yazsKIAogCQlzdHJ1 Y3QgdGltZXJfbGlzdCBmYWtlX2lycTsgLyogdXNlZCBhZnRlciBhIG1pc3NlZCBpbnRlcnJ1cHQg Ki8KIAkJc3RydWN0IHRpbWVyX2xpc3QgaGFuZ2NoZWNrOyAvKiBkZXRlY3QgbWlzc2VkIGludGVy cnVwdHMgKi8KIAogCQl1bnNpZ25lZCBpbnQgaGFuZ2NoZWNrX2ludGVycnVwdHM7CiAJCXVuc2ln bmVkIGludCBpcnFfZW5hYmxlZDsKLQkJdW5zaWduZWQgaW50IGlycV9jb3VudDsKIAotCQlib29s IGlycV9hcm1lZCA6IDE7CisJCWJvb2wgaXJxX2FybWVkOworCQlib29sIGlycV9maXJlZDsKIAl9 IGJyZWFkY3J1bWJzOwogCiAJc3RydWN0IHsKQEAgLTg4Niw4MyArODg0LDMyIEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFzX3N0YXJ0ZWQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLAogdm9pZCBpbnRlbF9lbmdpbmVfZ2V0X2luc3Rkb25lKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKIAkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgKmluc3Rk b25lKTsKIAotLyogaW50ZWxfYnJlYWRjcnVtYnMuYyAtLSB1c2VyIGludGVycnVwdCBib3R0b20t aGFsZiBmb3Igd2FpdGVycyAqLwotaW50IGludGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRl bF93YWl0X2luaXQoc3RydWN0IGludGVsX3dhaXQgKndhaXQpCi17Ci0Jd2FpdC0+dHNrID0gY3Vy cmVudDsKLQl3YWl0LT5yZXF1ZXN0ID0gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlu dGVsX3dhaXRfaW5pdF9mb3Jfc2Vxbm8oc3RydWN0IGludGVsX3dhaXQgKndhaXQsIHUzMiBzZXFu bykKLXsKLQl3YWl0LT50c2sgPSBjdXJyZW50OwotCXdhaXQtPnNlcW5vID0gc2Vxbm87Ci19Ci0K LXN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF93YWl0X2hhc19zZXFubyhjb25zdCBzdHJ1Y3QgaW50 ZWxfd2FpdCAqd2FpdCkKLXsKLQlyZXR1cm4gd2FpdC0+c2Vxbm87Ci19Ci0KLXN0YXRpYyBpbmxp bmUgYm9vbAotaW50ZWxfd2FpdF91cGRhdGVfc2Vxbm8oc3RydWN0IGludGVsX3dhaXQgKndhaXQs IHUzMiBzZXFubykKLXsKLQl3YWl0LT5zZXFubyA9IHNlcW5vOwotCXJldHVybiBpbnRlbF93YWl0 X2hhc19zZXFubyh3YWl0KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1pbnRlbF93YWl0X3Vw ZGF0ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0LAotCQkJICBjb25zdCBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpycSkKLXsKLQlyZXR1cm4gaW50ZWxfd2FpdF91cGRhdGVfc2Vxbm8od2Fp dCwgaTkxNV9yZXF1ZXN0X2dsb2JhbF9zZXFubyhycSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv b2wKLWludGVsX3dhaXRfY2hlY2tfc2Vxbm8oY29uc3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXQs IHUzMiBzZXFubykKLXsKLQlyZXR1cm4gd2FpdC0+c2Vxbm8gPT0gc2Vxbm87Ci19Ci0KLXN0YXRp YyBpbmxpbmUgYm9vbAotaW50ZWxfd2FpdF9jaGVja19yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpbnRl bF93YWl0ICp3YWl0LAotCQkJIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCXJl dHVybiBpbnRlbF93YWl0X2NoZWNrX3NlcW5vKHdhaXQsIGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vx bm8ocnEpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGludGVsX3dhaXRfY29tcGxldGUoY29u c3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCi17Ci0JcmV0dXJuIFJCX0VNUFRZX05PREUoJndh aXQtPm5vZGUpOwotfQordm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwordm9pZCBpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNy dW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCi1ib29sIGludGVsX2VuZ2lu ZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICBzdHJ1Y3Qg aW50ZWxfd2FpdCAqd2FpdCk7Ci12b2lkIGludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2Fp dCk7Ci1ib29sIGludGVsX2VuZ2luZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QsIGJvb2wgd2FrZXVwKTsKK2Jvb2wgaW50ZWxfZW5naW5lX2VuYWJsZV9zaWdu YWxpbmcoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCk7CiB2b2lkIGludGVsX2VuZ2luZV9j YW5jZWxfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpOwogCi1zdGF0aWMg aW5saW5lIGJvb2wgaW50ZWxfZW5naW5lX2hhc193YWl0ZXIoY29uc3Qgc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQotewotCXJldHVybiBSRUFEX09OQ0UoZW5naW5lLT5icmVhZGNydW1i cy5pcnFfd2FpdCk7Ci19Ci0KLXVuc2lnbmVkIGludCBpbnRlbF9lbmdpbmVfd2FrZXVwKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0jZGVmaW5lIEVOR0lORV9XQUtFVVBfV0FJVEVS IEJJVCgwKQotI2RlZmluZSBFTkdJTkVfV0FLRVVQX0FTTEVFUCBCSVQoMSkKLQogdm9pZCBpbnRl bF9lbmdpbmVfcGluX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpOwogdm9pZCBpbnRlbF9lbmdpbmVfdW5waW5fYnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKLXZvaWQgX19pbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFk Y3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Citib29sIGludGVsX2VuZ2lu ZV9zaWduYWxfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIHZv aWQgaW50ZWxfZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpOwogCitzdGF0aWMgaW5saW5lIHZvaWQKK2ludGVsX2VuZ2luZV9xdWV1ZV9icmVh ZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJaXJxX3dvcmtfcXVl dWUoJmVuZ2luZS0+YnJlYWRjcnVtYnMuaXJxX3dvcmspOworfQorCitib29sIGludGVsX2VuZ2lu ZV9icmVhZGNydW1ic19pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwogdm9p ZCBpbnRlbF9lbmdpbmVfcmVzZXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKTsKIHZvaWQgaW50ZWxfZW5naW5lX2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKIAordm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfYnJlYWRjcnVt YnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3By aW50ZXIgKnApOworCiBzdGF0aWMgaW5saW5lIHUzMiAqZ2VuOF9lbWl0X3BpcGVfY29udHJvbCh1 MzIgKmJhdGNoLCB1MzIgZmxhZ3MsIHUzMiBvZmZzZXQpCiB7CiAJbWVtc2V0KGJhdGNoLCAwLCA2 ICogc2l6ZW9mKHUzMikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKaW5kZXggNGE4M2ExYzZjNDA2Li44OGU1YWI1ODYzMzcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2Vs ZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19z ZWxmdGVzdHMuaApAQCAtMTUsNyArMTUsNiBAQCBzZWxmdGVzdChzY2F0dGVybGlzdCwgc2NhdHRl cmxpc3RfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChzeW5jbWFwLCBpOTE1X3N5bmNtYXBfbW9j a19zZWxmdGVzdHMpCiBzZWxmdGVzdCh1bmNvcmUsIGludGVsX3VuY29yZV9tb2NrX3NlbGZ0ZXN0 cykKIHNlbGZ0ZXN0KGVuZ2luZSwgaW50ZWxfZW5naW5lX2NzX21vY2tfc2VsZnRlc3RzKQotc2Vs ZnRlc3QoYnJlYWRjcnVtYnMsIGludGVsX2JyZWFkY3J1bWJzX21vY2tfc2VsZnRlc3RzKQogc2Vs ZnRlc3QodGltZWxpbmVzLCBpOTE1X3RpbWVsaW5lX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3Qo cmVxdWVzdHMsIGk5MTVfcmVxdWVzdF9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KG9iamVjdHMs IGk5MTVfZ2VtX29iamVjdF9tb2NrX3NlbGZ0ZXN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwppbmRleCAyZTE0ZDZkM2JhZDcuLjQ4YjYxNTlhZmU2 NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVz dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwpA QCAtMjUsOCArMjUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9wcmltZV9udW1iZXJzLmg+CiAKICNp bmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisjaW5jbHVkZSAiaTkxNV9yYW5kb20uaCIKKyNp bmNsdWRlICJsaWJfc3dfZmVuY2UuaCIKIAogI2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgorI2lu Y2x1ZGUgIm1vY2tfZHJtLmgiCiAjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgiCiAKIHN0YXRp YyBpbnQgaWd0X2FkZF9yZXF1ZXN0KHZvaWQgKmFyZykKQEAgLTI0Niw2ICsyNDksMjM5IEBAIHN0 YXRpYyBpbnQgaWd0X3JlcXVlc3RfcmV3aW5kKHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQog CitzdHJ1Y3Qgc21va2V0ZXN0IHsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJ c3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKipjb250ZXh0czsKKwl1bnNpZ25lZCBpbnQgbmNvbnRl eHRzLCBtYXhfYmF0Y2g7CisJYXRvbWljX2xvbmdfdCBudW1fd2FpdHMsIG51bV9mZW5jZXM7CisJ c3RydWN0IGk5MTVfcmVxdWVzdCAqKCpyZXF1ZXN0X2FsbG9jKShzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCAqLAorCQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopOworCit9OworCitz dGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqCitfX21vY2tfcmVxdWVzdF9hbGxvYyhzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKK3sKKwlyZXR1cm4gbW9ja19yZXF1ZXN0KGVuZ2luZSwgY3R4LCAwKTsKK30KKworc3Rh dGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgorX19saXZlX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCit7CisJcmV0dXJuIGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cit9CisKK3N0 YXRpYyBpbnQgX19pZ3RfYnJlYWRjcnVtYnNfc21va2V0ZXN0KHZvaWQgKmFyZykKK3sKKwlzdHJ1 Y3Qgc21va2V0ZXN0ICp0ID0gYXJnOworCXN0cnVjdCBtdXRleCAqQktMID0gJnQtPmVuZ2luZS0+ aTkxNS0+ZHJtLnN0cnVjdF9tdXRleDsKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqcmVxdWVzdHM7 CisJSTkxNV9STkRfU1RBVEUocHJuZyk7CisJY29uc3QgdW5zaWduZWQgaW50IHRvdGFsID0gNCAq IHQtPm5jb250ZXh0cyArIDE7CisJY29uc3QgdW5zaWduZWQgaW50IG1heF9iYXRjaCA9IG1pbih0 LT5uY29udGV4dHMsIHQtPm1heF9iYXRjaCkgLSAxOworCXVuc2lnbmVkIGludCBudW1fd2FpdHMg PSAwLCBudW1fZmVuY2VzID0gMDsKKwl1bnNpZ25lZCBpbnQgKm9yZGVyOworCWludCBlcnIgPSAw OworCisJcmVxdWVzdHMgPSBrbWFsbG9jX2FycmF5KHRvdGFsLCBzaXplb2YoKnJlcXVlc3RzKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvcmRl ciA9IGk5MTVfcmFuZG9tX29yZGVyKHRvdGFsLCAmcHJuZyk7CisJaWYgKCFvcmRlcikgeworCQll cnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZXF1ZXN0czsKKwl9CisKKwl3aGlsZSAoIWt0aHJl YWRfc2hvdWxkX3N0b3AoKSkgeworCQlzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqc3VibWl0LCAqd2Fp dDsKKwkJdW5zaWduZWQgaW50IG4sIGNvdW50OworCisJCXN1Ym1pdCA9IGhlYXBfZmVuY2VfY3Jl YXRlKEdGUF9LRVJORUwpOworCQlpZiAoIXN1Ym1pdCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJ CWJyZWFrOworCQl9CisKKwkJd2FpdCA9IGhlYXBfZmVuY2VfY3JlYXRlKEdGUF9LRVJORUwpOwor CQlpZiAoIXdhaXQpIHsKKwkJCWk5MTVfc3dfZmVuY2VfY29tbWl0KHN1Ym1pdCk7CisJCQloZWFw X2ZlbmNlX3B1dChzdWJtaXQpOworCQkJZXJyID0gRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwor CQlpOTE1X3JhbmRvbV9yZW9yZGVyKG9yZGVyLCB0b3RhbCwgJnBybmcpOworCQljb3VudCA9IDEg KyBpOTE1X3ByYW5kb21fdTMyX21heF9zdGF0ZShtYXhfYmF0Y2gsICZwcm5nKTsKKworCQlmb3Ig KG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCA9CisJCQkJdC0+Y29udGV4dHNbb3JkZXJbbl0gJSB0LT5uY29udGV4dHNdOworCQkJc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnE7CisKKwkJCW11dGV4X2xvY2soQktMKTsKKworCQkJcnEgPSB0LT5y ZXF1ZXN0X2FsbG9jKGN0eCwgdC0+ZW5naW5lKTsKKwkJCWlmIChJU19FUlIocnEpKSB7CisJCQkJ bXV0ZXhfdW5sb2NrKEJLTCk7CisJCQkJZXJyID0gUFRSX0VSUihycSk7CisJCQkJY291bnQgPSBu OworCQkJCWJyZWFrOworCQkJfQorCisJCQllcnIgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2Zl bmNlX2dmcCgmcnEtPnN1Ym1pdCwKKwkJCQkJCQkgICAgICAgc3VibWl0LAorCQkJCQkJCSAgICAg ICBHRlBfS0VSTkVMKTsKKworCQkJcmVxdWVzdHNbbl0gPSBpOTE1X3JlcXVlc3RfZ2V0KHJxKTsK KwkJCWk5MTVfcmVxdWVzdF9hZGQocnEpOworCisJCQltdXRleF91bmxvY2soQktMKTsKKworCQkJ aWYgKGVyciA+PSAwKQorCQkJCWVyciA9IGk5MTVfc3dfZmVuY2VfYXdhaXRfZG1hX2ZlbmNlKHdh aXQsCisJCQkJCQkJCSAgICAmcnEtPmZlbmNlLAorCQkJCQkJCQkgICAgMCwKKwkJCQkJCQkJICAg IEdGUF9LRVJORUwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlpOTE1X3JlcXVlc3RfcHV0KHJx KTsKKwkJCQljb3VudCA9IG47CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpOTE1X3N3X2Zl bmNlX2NvbW1pdChzdWJtaXQpOworCQlpOTE1X3N3X2ZlbmNlX2NvbW1pdCh3YWl0KTsKKworCQlp ZiAoIXdhaXRfZXZlbnRfdGltZW91dCh3YWl0LT53YWl0LAorCQkJCQlpOTE1X3N3X2ZlbmNlX2Rv bmUod2FpdCksCisJCQkJCUhaIC8gMikpIHsKKwkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0g cmVxdWVzdHNbY291bnQgLSAxXTsKKworCQkJcHJfZXJyKCJ3YWl0aW5nIGZvciAlZCBmZW5jZXMg KGxhc3QgJWxseDolbGxkKSBvbiAlcyB0aW1lZCBvdXQhXG4iLAorCQkJICAgICAgIGNvdW50LAor CQkJICAgICAgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCisJCQkgICAgICAg dC0+ZW5naW5lLT5uYW1lKTsKKwkJCWk5MTVfZ2VtX3NldF93ZWRnZWQodC0+ZW5naW5lLT5pOTE1 KTsKKwkJCUdFTV9CVUdfT04oIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKTsKKwkJCWk5MTVf c3dfZmVuY2Vfd2FpdCh3YWl0KTsKKwkJCWVyciA9IC1FSU87CisJCX0KKworCQlmb3IgKG4gPSAw OyBuIDwgY291bnQ7IG4rKykgeworCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSByZXF1ZXN0 c1tuXTsKKworCQkJaWYgKCF0ZXN0X2JpdChETUFfRkVOQ0VfRkxBR19TSUdOQUxFRF9CSVQsCisJ CQkJICAgICAgJnJxLT5mZW5jZS5mbGFncykpIHsKKwkJCQlwcl9lcnIoIiVsbHU6JWxsdSB3YXMg bm90IHNpZ25hbGVkIVxuIiwKKwkJCQkgICAgICAgcnEtPmZlbmNlLmNvbnRleHQsIHJxLT5mZW5j ZS5zZXFubyk7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCX0KKworCQkJaTkxNV9yZXF1ZXN0X3B1 dChycSk7CisJCX0KKworCQloZWFwX2ZlbmNlX3B1dCh3YWl0KTsKKwkJaGVhcF9mZW5jZV9wdXQo c3VibWl0KTsKKworCQlpZiAoZXJyIDwgMCkKKwkJCWJyZWFrOworCisJCW51bV9mZW5jZXMgKz0g Y291bnQ7CisJCW51bV93YWl0cysrOworCisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCWF0b21p Y19sb25nX2FkZChudW1fZmVuY2VzLCAmdC0+bnVtX2ZlbmNlcyk7CisJYXRvbWljX2xvbmdfYWRk KG51bV93YWl0cywgJnQtPm51bV93YWl0cyk7CisKKwlrZnJlZShvcmRlcik7CitvdXRfcmVxdWVz dHM6CisJa2ZyZWUocmVxdWVzdHMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbW9j a19icmVhZGNydW1ic19zbW9rZXRlc3Qodm9pZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gYXJnOworCXN0cnVjdCBzbW9rZXRlc3QgdCA9IHsKKwkJLmVuZ2luZSA9 IGk5MTUtPmVuZ2luZVtSQ1NdLAorCQkubmNvbnRleHRzID0gMTAyNCwKKwkJLm1heF9iYXRjaCA9 IDEwMjQsCisJCS5yZXF1ZXN0X2FsbG9jID0gX19tb2NrX3JlcXVlc3RfYWxsb2MKKwl9OworCXVu c2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworCXN0cnVjdCB0YXNrX3N0cnVj dCAqKnRocmVhZHM7CisJdW5zaWduZWQgaW50IG47CisJaW50IHJldCA9IDA7CisKKwl0aHJlYWRz ID0ga21hbGxvY19hcnJheShuY3B1cywgc2l6ZW9mKCp0aHJlYWRzKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCF0aHJlYWRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXQuY29udGV4dHMgPQorCQlrbWFs bG9jX2FycmF5KHQubmNvbnRleHRzLCBzaXplb2YoKnQuY29udGV4dHMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXQuY29udGV4dHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdGhyZWFk czsKKwl9CisKKwltdXRleF9sb2NrKCZ0LmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 CisJZm9yIChuID0gMDsgbiA8IHQubmNvbnRleHRzOyBuKyspIHsKKwkJdC5jb250ZXh0c1tuXSA9 IG1vY2tfY29udGV4dCh0LmVuZ2luZS0+aTkxNSwgIm1vY2siKTsKKwkJaWYgKCF0LmNvbnRleHRz W25dKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfY29udGV4dHM7CisJCX0KKwl9 CisKKwlmb3IgKG4gPSAwOyBuIDwgbmNwdXM7IG4rKykgeworCQl0aHJlYWRzW25dID0ga3RocmVh ZF9ydW4oX19pZ3RfYnJlYWRjcnVtYnNfc21va2V0ZXN0LAorCQkJCQkgJnQsICJpZ3QvJWQiLCBu KTsKKwkJaWYgKElTX0VSUih0aHJlYWRzW25dKSkgeworCQkJcmV0ID0gUFRSX0VSUih0aHJlYWRz W25dKTsKKwkJCW5jcHVzID0gbjsKKwkJCWJyZWFrOworCQl9CisKKwkJZ2V0X3Rhc2tfc3RydWN0 KHRocmVhZHNbbl0pOworCX0KKwltdXRleF91bmxvY2soJnQuZW5naW5lLT5pOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKKworCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKGk5MTVfc2VsZnRlc3QudGlt ZW91dF9qaWZmaWVzKSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgbmNwdXM7IG4rKykgeworCQlpbnQg ZXJyOworCisJCWVyciA9IGt0aHJlYWRfc3RvcCh0aHJlYWRzW25dKTsKKwkJaWYgKGVyciA8IDAg JiYgIXJldCkKKwkJCXJldCA9IGVycjsKKworCQlwdXRfdGFza19zdHJ1Y3QodGhyZWFkc1tuXSk7 CisJfQorCXByX2luZm8oIkNvbXBsZXRlZCAlbHUgd2FpdHMgZm9yICVsdSBmZW5jZSBhY3Jvc3Mg JWQgY3B1c1xuIiwKKwkJYXRvbWljX2xvbmdfcmVhZCgmdC5udW1fd2FpdHMpLAorCQlhdG9taWNf bG9uZ19yZWFkKCZ0Lm51bV9mZW5jZXMpLAorCQluY3B1cyk7CisKKwltdXRleF9sb2NrKCZ0LmVu Z2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CitvdXRfY29udGV4dHM6CisJZm9yIChuID0g MDsgbiA8IHQubmNvbnRleHRzOyBuKyspIHsKKwkJaWYgKCF0LmNvbnRleHRzW25dKQorCQkJYnJl YWs7CisJCW1vY2tfY29udGV4dF9jbG9zZSh0LmNvbnRleHRzW25dKTsKKwl9CisJbXV0ZXhfdW5s b2NrKCZ0LmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJa2ZyZWUodC5jb250ZXh0 cyk7CitvdXRfdGhyZWFkczoKKwlrZnJlZSh0aHJlYWRzKTsKKworCXJldHVybiByZXQ7Cit9CisK IGludCBpOTE1X3JlcXVlc3RfbW9ja19zZWxmdGVzdHModm9pZCkKIHsKIAlzdGF0aWMgY29uc3Qg c3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewpAQCAtMjUzLDYgKzQ4OSw3IEBAIGludCBp OTE1X3JlcXVlc3RfbW9ja19zZWxmdGVzdHModm9pZCkKIAkJU1VCVEVTVChpZ3Rfd2FpdF9yZXF1 ZXN0KSwKIAkJU1VCVEVTVChpZ3RfZmVuY2Vfd2FpdCksCiAJCVNVQlRFU1QoaWd0X3JlcXVlc3Rf cmV3aW5kKSwKKwkJU1VCVEVTVChtb2NrX2JyZWFkY3J1bWJzX3Ntb2tldGVzdCksCiAJfTsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKIAlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsK QEAgLTg3Miw2ICsxMTA5LDE2NiBAQCBzdGF0aWMgaW50IGxpdmVfc2VxdWVudGlhbF9lbmdpbmVz KHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50CittYXhfYmF0Y2hlcyhz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCit7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CisJaW50IHJldDsKKworCS8qCisJICog QmVmb3JlIGV4ZWNsaXN0cywgYWxsIGNvbnRleHRzIHNoYXJlIHRoZSBzYW1lIHJpbmdidWZmZXIu IFdpdGgKKwkgKiBleGVjbGlzdHMsIGVhY2ggY29udGV4dC9lbmdpbmUgaGFzIGEgc2VwYXJhdGUg cmluZ2J1ZmZlciBhbmQKKwkgKiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdGVzdCwgaW5leGhh dXN0aWJsZS4KKwkgKgorCSAqIEZvciB0aGUgZ2xvYmFsIHJpbmdidWZmZXIgdGhvdWdoLCB3ZSBo YXZlIHRvIGJlIHZlcnkgY2FyZWZ1bAorCSAqIHRoYXQgd2UgZG8gbm90IHdyYXAgd2hpbGUgcHJl dmVudGluZyB0aGUgZXhlY3V0aW9uIG9mIHJlcXVlc3RzCisJICogd2l0aCBhIHVuc2lnbmFsZWQg ZmVuY2UuCisJICovCisJaWYgKEhBU19FWEVDTElTVFMoY3R4LT5pOTE1KSkKKwkJcmV0dXJuIElO VF9NQVg7CisKKwlycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7CisJaWYgKElT X0VSUihycSkpIHsKKwkJcmV0ID0gUFRSX0VSUihycSk7CisJfSBlbHNlIHsKKwkJaW50IHN6Owor CisJCXJldCA9IHJxLT5yaW5nLT5zaXplIC0gcnEtPnJlc2VydmVkX3NwYWNlOworCQlpOTE1X3Jl cXVlc3RfYWRkKHJxKTsKKworCQlzeiA9IHJxLT5yaW5nLT5lbWl0IC0gcnEtPmhlYWQ7CisJCWlm IChzeiA8IDApCisJCQlzeiArPSBycS0+cmluZy0+c2l6ZTsKKwkJcmV0IC89IHN6OworCQlyZXQg Lz0gMjsgLyogbGVhdmUgaGFsZiBzcGFyZSwgaW4gY2FzZSBvZiBlbWVyZ2VuY3khICovCisKKwkJ LyogT25lIHJpbmcgaW50ZXJsZWF2ZWQgYmV0d2VlbiByZXF1ZXN0cyBmcm9tIGFsbCBjcHVzICov CisJCXJldCAvPSBudW1fb25saW5lX2NwdXMoKSArIDE7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBsaXZlX2JyZWFkY3J1bWJzX3Ntb2tldGVzdCh2b2lkICphcmcpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IHNtb2tldGVzdCB0 W0k5MTVfTlVNX0VOR0lORVNdOworCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxpbmVfY3B1 cygpOworCXVuc2lnbmVkIGxvbmcgbnVtX3dhaXRzLCBudW1fZmVuY2VzOworCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKip0aHJlYWRzOworCWVu dW0gaW50ZWxfZW5naW5lX2lkIGlkOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCXN0cnVj dCBkcm1fZmlsZSAqZmlsZTsKKwlzdHJ1Y3QgbGl2ZV90ZXN0IGxpdmU7CisJdW5zaWduZWQgaW50 IG47CisJaW50IHJldCA9IDA7CisKKwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkx NSk7CisKKwlmaWxlID0gbW9ja19maWxlKGk5MTUpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJ cmV0ID0gUFRSX0VSUihmaWxlKTsKKwkJZ290byBvdXRfcnBtOworCX0KKworCXRocmVhZHMgPSBr Y2FsbG9jKG5jcHVzICogSTkxNV9OVU1fRU5HSU5FUywKKwkJCSAgc2l6ZW9mKCp0aHJlYWRzKSwK KwkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aHJlYWRzKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CW1lbXNldCgmdFswXSwgMCwgc2l6ZW9mKHRbMF0pKTsKKwl0WzBdLnJlcXVlc3RfYWxsb2MgPSBf X2xpdmVfcmVxdWVzdF9hbGxvYzsKKwl0WzBdLm5jb250ZXh0cyA9IDY0OworCXRbMF0uY29udGV4 dHMgPSBrbWFsbG9jX2FycmF5KHRbMF0ubmNvbnRleHRzLAorCQkJCSAgICAgIHNpemVvZigqdFsw XS5jb250ZXh0cyksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF0WzBdLmNvbnRleHRz KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3RocmVhZHM7CisJfQorCisJbXV0ZXhf bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJZm9yIChuID0gMDsgbiA8IHRbMF0ubmNv bnRleHRzOyBuKyspIHsKKwkJdFswXS5jb250ZXh0c1tuXSA9IGxpdmVfY29udGV4dChpOTE1LCBm aWxlKTsKKwkJaWYgKCF0WzBdLmNvbnRleHRzW25dKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJ Z290byBvdXRfY29udGV4dHM7CisJCX0KKwl9CisKKwlyZXQgPSBiZWdpbl9saXZlX3Rlc3QoJmxp dmUsIGk5MTUsIF9fZnVuY19fLCAiIik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY29udGV4dHM7 CisKKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgeworCQl0W2lkXSA9IHRbMF07 CisJCXRbaWRdLmVuZ2luZSA9IGVuZ2luZTsKKwkJdFtpZF0ubWF4X2JhdGNoID0gbWF4X2JhdGNo ZXModFswXS5jb250ZXh0c1swXSwgZW5naW5lKTsKKwkJaWYgKHRbaWRdLm1heF9iYXRjaCA8IDAp IHsKKwkJCXJldCA9IHRbaWRdLm1heF9iYXRjaDsKKwkJCWdvdG8gb3V0X2ZsdXNoOworCQl9CisJ CXByX2RlYnVnKCJMaW1pdGluZyBiYXRjaGVzIHRvICVkIHJlcXVlc3RzIG9uICVzXG4iLAorCQkJ IHRbaWRdLm1heF9iYXRjaCwgZW5naW5lLT5uYW1lKTsKKworCQlmb3IgKG4gPSAwOyBuIDwgbmNw dXM7IG4rKykgeworCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisKKwkJCXRzayA9IGt0aHJl YWRfcnVuKF9faWd0X2JyZWFkY3J1bWJzX3Ntb2tldGVzdCwKKwkJCQkJICAmdFtpZF0sICJpZ3Qv JWQuJWQiLCBpZCwgbik7CisJCQlpZiAoSVNfRVJSKHRzaykpIHsKKwkJCQlyZXQgPSBQVFJfRVJS KHRzayk7CisJCQkJZ290byBvdXRfZmx1c2g7CisJCQl9CisKKwkJCWdldF90YXNrX3N0cnVjdCh0 c2spOworCQkJdGhyZWFkc1tpZCAqIG5jcHVzICsgbl0gPSB0c2s7CisJCX0KKwl9CisJbXV0ZXhf dW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCW1zbGVlcChqaWZmaWVzX3RvX21z ZWNzKGk5MTVfc2VsZnRlc3QudGltZW91dF9qaWZmaWVzKSk7CisKK291dF9mbHVzaDoKKwludW1f d2FpdHMgPSAwOworCW51bV9mZW5jZXMgPSAwOworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5 MTUsIGlkKSB7CisJCWZvciAobiA9IDA7IG4gPCBuY3B1czsgbisrKSB7CisJCQlzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnRzayA9IHRocmVhZHNbaWQgKiBuY3B1cyArIG5dOworCQkJaW50IGVycjsKKwor CQkJaWYgKCF0c2spCisJCQkJY29udGludWU7CisKKwkJCWVyciA9IGt0aHJlYWRfc3RvcCh0c2sp OworCQkJaWYgKGVyciA8IDAgJiYgIXJldCkKKwkJCQlyZXQgPSBlcnI7CisKKwkJCXB1dF90YXNr X3N0cnVjdCh0c2spOworCQl9CisKKwkJbnVtX3dhaXRzICs9IGF0b21pY19sb25nX3JlYWQoJnRb aWRdLm51bV93YWl0cyk7CisJCW51bV9mZW5jZXMgKz0gYXRvbWljX2xvbmdfcmVhZCgmdFtpZF0u bnVtX2ZlbmNlcyk7CisJfQorCXByX2luZm8oIkNvbXBsZXRlZCAlbHUgd2FpdHMgZm9yICVsdSBm ZW5jZSBhY3Jvc3MgJWQgZW5naW5lcyBhbmQgJWQgY3B1c1xuIiwKKwkJbnVtX3dhaXRzLCBudW1f ZmVuY2VzLCBSVU5USU1FX0lORk8oaTkxNSktPm51bV9yaW5ncywgbmNwdXMpOworCisJbXV0ZXhf bG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJcmV0ID0gZW5kX2xpdmVfdGVzdCgmbGl2 ZSkgPzogcmV0Oworb3V0X2NvbnRleHRzOgorCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7CisJa2ZyZWUodFswXS5jb250ZXh0cyk7CitvdXRfdGhyZWFkczoKKwlrZnJlZSh0 aHJlYWRzKTsKKwltb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKK291dF9ycG06CisJaW50ZWxf cnVudGltZV9wbV9wdXQoaTkxNSwgd2FrZXJlZik7CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQg aTkxNV9yZXF1ZXN0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7CkBAIC04 NzksNiArMTI3Niw3IEBAIGludCBpOTE1X3JlcXVlc3RfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCiAJCVNVQlRFU1QobGl2ZV9hbGxfZW5naW5lcyksCiAJCVNV QlRFU1QobGl2ZV9zZXF1ZW50aWFsX2VuZ2luZXMpLAogCQlTVUJURVNUKGxpdmVfZW1wdHlfcmVx dWVzdCksCisJCVNVQlRFU1QobGl2ZV9icmVhZGNydW1ic19zbW9rZXRlc3QpLAogCX07CiAKIAlp ZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkxNS0+Z3B1X2Vycm9yKSkKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lndF9zcGlubmVyLmMKaW5kZXggMGU3MGRmMDIzMGI4Li45 ZWJkOTIyNTY4NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p Z3Rfc3Bpbm5lci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bp bm5lci5jCkBAIC0xODUsMTEgKzE4NSw2IEBAIHZvaWQgaWd0X3NwaW5uZXJfZmluaShzdHJ1Y3Qg aWd0X3NwaW5uZXIgKnNwaW4pCiAKIGJvb2wgaWd0X3dhaXRfZm9yX3NwaW5uZXIoc3RydWN0IGln dF9zcGlubmVyICpzcGluLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsKLQlpZiAoIXdhaXRf ZXZlbnRfdGltZW91dChycS0+ZXhlY3V0ZSwKLQkJCQlSRUFEX09OQ0UocnEtPmdsb2JhbF9zZXFu byksCi0JCQkJbXNlY3NfdG9famlmZmllcygxMCkpKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAlyZXR1 cm4gISh3YWl0X2Zvcl91cyhpOTE1X3NlcW5vX3Bhc3NlZChod3Nfc2Vxbm8oc3BpbiwgcnEpLAog CQkJCQkgICAgICAgcnEtPmZlbmNlLnNlcW5vKSwKIAkJCSAgICAgMTApICYmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfYnJlYWRjcnVtYnMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9icmVhZGNydW1icy5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDNiNDA3ZmRiZTIuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfYnJlYWRjcnVtYnMuYworKysgL2Rl di9udWxsCkBAIC0xLDQ3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwg Q29ycG9yYXRpb24KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK LSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Ci0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUu Ci0gKgotICovCi0KLSNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCi0jaW5jbHVkZSAiaTkx NV9yYW5kb20uaCIKLQotI2luY2x1ZGUgIm1vY2tfZ2VtX2RldmljZS5oIgotI2luY2x1ZGUgIm1v Y2tfZW5naW5lLmgiCi0KLXN0YXRpYyBpbnQgY2hlY2tfcmJ0cmVlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKLQkJCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwKLQkJCWNvbnN0 IHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0ZXJzLAotCQkJY29uc3QgaW50IGNvdW50KQotewotCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCXN0cnVj dCByYl9ub2RlICpyYjsKLQlpbnQgbjsKLQotCWlmICgmYi0+aXJxX3dhaXQtPm5vZGUgIT0gcmJf Zmlyc3QoJmItPndhaXRlcnMpKSB7Ci0JCXByX2VycigiRmlyc3Qgd2FpdGVyIGRvZXMgbm90IG1h dGNoIGZpcnN0IGVsZW1lbnQgb2Ygd2FpdC10cmVlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JbiA9IGZpbmRfZmlyc3RfYml0KGJpdG1hcCwgY291bnQpOwotCWZvciAocmIgPSByYl9m aXJzdCgmYi0+d2FpdGVycyk7IHJiOyByYiA9IHJiX25leHQocmIpKSB7Ci0JCXN0cnVjdCBpbnRl bF93YWl0ICp3ID0gY29udGFpbmVyX29mKHJiLCB0eXBlb2YoKncpLCBub2RlKTsKLQkJaW50IGlk eCA9IHcgLSB3YWl0ZXJzOwotCi0JCWlmICghdGVzdF9iaXQoaWR4LCBiaXRtYXApKSB7Ci0JCQlw cl9lcnIoIndhaXRlclslZCwgc2Vxbm89JWRdIHJlbW92ZWQgYnV0IHN0aWxsIGluIHdhaXQtdHJl ZVxuIiwKLQkJCSAgICAgICBpZHgsIHctPnNlcW5vKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9 Ci0KLQkJaWYgKG4gIT0gaWR4KSB7Ci0JCQlwcl9lcnIoIndhaXRlclslZCwgc2Vxbm89JWRdIGRv ZXMgbm90IG1hdGNoIGV4cGVjdGVkIG5leHQgZWxlbWVudCBpbiB0cmVlIFslZF1cbiIsCi0JCQkg ICAgICAgaWR4LCB3LT5zZXFubywgbik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW4g PSBmaW5kX25leHRfYml0KGJpdG1hcCwgY291bnQsIG4gKyAxKTsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBjaGVja19jb21wbGV0aW9uKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKLQkJCSAgICBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAsCi0JCQkgICAgY29u c3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXRlcnMsCi0JCQkgICAgY29uc3QgaW50IGNvdW50KQot ewotCWludCBuOwotCi0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLQkJaWYgKGludGVs X3dhaXRfY29tcGxldGUoJndhaXRlcnNbbl0pICE9ICEhdGVzdF9iaXQobiwgYml0bWFwKSkKLQkJ CWNvbnRpbnVlOwotCi0JCXByX2Vycigid2FpdGVyWyVkLCBzZXFubz0lZF0gaXMgJXMsIGJ1dCBl eHBlY3RlZCAlc1xuIiwKLQkJICAgICAgIG4sIHdhaXRlcnNbbl0uc2Vxbm8sCi0JCSAgICAgICBp bnRlbF93YWl0X2NvbXBsZXRlKCZ3YWl0ZXJzW25dKSA/ICJjb21wbGV0ZSIgOiAiYWN0aXZlIiwK LQkJICAgICAgIHRlc3RfYml0KG4sIGJpdG1hcCkgPyAiYWN0aXZlIiA6ICJjb21wbGV0ZSIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaGVj a19yYnRyZWVfZW1wdHkoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXN0cnVj dCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCi0JaWYgKGIt PmlycV93YWl0KSB7Ci0JCXByX2VycigiRW1wdHkgYnJlYWRjcnVtYnMgc3RpbGwgaGFzIGEgd2Fp dGVyXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKCFSQl9FTVBUWV9ST09UKCZi LT53YWl0ZXJzKSkgewotCQlwcl9lcnIoIkVtcHR5IGJyZWFkY3J1bWJzLCBidXQgd2FpdC10cmVl IG5vdCBlbXB0eVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGlndF9yYW5kb21faW5zZXJ0X3JlbW92ZSh2b2lkICphcmcpCi17Ci0JY29u c3QgdTMyIHNlcW5vX2JpYXMgPSAweDEwMDA7Ci0JSTkxNV9STkRfU1RBVEUocHJuZyk7Ci0Jc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gYXJnOwotCXN0cnVjdCBpbnRlbF93YWl0ICp3 YWl0ZXJzOwotCWNvbnN0IGludCBjb3VudCA9IDQwOTY7Ci0JdW5zaWduZWQgaW50ICpvcmRlcjsK LQl1bnNpZ25lZCBsb25nICpiaXRtYXA7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IG47Ci0K LQltb2NrX2VuZ2luZV9yZXNldChlbmdpbmUpOwotCi0Jd2FpdGVycyA9IGt2bWFsbG9jX2FycmF5 KGNvdW50LCBzaXplb2YoKndhaXRlcnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhaXRlcnMpCi0J CWdvdG8gb3V0X2VuZ2luZXM7Ci0KLQliaXRtYXAgPSBrY2FsbG9jKERJVl9ST1VORF9VUChjb3Vu dCwgQklUU19QRVJfTE9ORyksIHNpemVvZigqYml0bWFwKSwKLQkJCSBHRlBfS0VSTkVMKTsKLQlp ZiAoIWJpdG1hcCkKLQkJZ290byBvdXRfd2FpdGVyczsKLQotCW9yZGVyID0gaTkxNV9yYW5kb21f b3JkZXIoY291bnQsICZwcm5nKTsKLQlpZiAoIW9yZGVyKQotCQlnb3RvIG91dF9iaXRtYXA7Ci0K LQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykKLQkJaW50ZWxfd2FpdF9pbml0X2Zvcl9zZXFu bygmd2FpdGVyc1tuXSwgc2Vxbm9fYmlhcyArIG4pOwotCi0JZXJyID0gY2hlY2tfcmJ0cmVlKGVu Z2luZSwgYml0bWFwLCB3YWl0ZXJzLCBjb3VudCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfb3Jk ZXI7Ci0KLQkvKiBBZGQgYW5kIHJlbW92ZSB3YWl0ZXJzIGludG8gdGhlIHJidHJlZSBpbiByYW5k b20gb3JkZXIuIEF0IGVhY2gKLQkgKiBzdGVwLCB3ZSB2ZXJpZnkgdGhhdCB0aGUgcmJ0cmVlIGlz IGNvcnJlY3RseSBvcmRlcmVkLgotCSAqLwotCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7 Ci0JCWludCBpID0gb3JkZXJbbl07Ci0KLQkJaW50ZWxfZW5naW5lX2FkZF93YWl0KGVuZ2luZSwg JndhaXRlcnNbaV0pOwotCQlfX3NldF9iaXQoaSwgYml0bWFwKTsKLQotCQllcnIgPSBjaGVja19y YnRyZWUoZW5naW5lLCBiaXRtYXAsIHdhaXRlcnMsIGNvdW50KTsKLQkJaWYgKGVycikKLQkJCWdv dG8gb3V0X29yZGVyOwotCX0KLQotCWk5MTVfcmFuZG9tX3Jlb3JkZXIob3JkZXIsIGNvdW50LCAm cHJuZyk7Ci0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLQkJaW50IGkgPSBvcmRlcltu XTsKLQotCQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoZW5naW5lLCAmd2FpdGVyc1tpXSk7Ci0J CV9fY2xlYXJfYml0KGksIGJpdG1hcCk7Ci0KLQkJZXJyID0gY2hlY2tfcmJ0cmVlKGVuZ2luZSwg Yml0bWFwLCB3YWl0ZXJzLCBjb3VudCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dF9vcmRlcjsK LQl9Ci0KLQllcnIgPSBjaGVja19yYnRyZWVfZW1wdHkoZW5naW5lKTsKLW91dF9vcmRlcjoKLQlr ZnJlZShvcmRlcik7Ci1vdXRfYml0bWFwOgotCWtmcmVlKGJpdG1hcCk7Ci1vdXRfd2FpdGVyczoK LQlrdmZyZWUod2FpdGVycyk7Ci1vdXRfZW5naW5lczoKLQltb2NrX2VuZ2luZV9mbHVzaChlbmdp bmUpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaWd0X2luc2VydF9jb21wbGV0ZSh2 b2lkICphcmcpCi17Ci0JY29uc3QgdTMyIHNlcW5vX2JpYXMgPSAweDEwMDA7Ci0Jc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0gYXJnOwotCXN0cnVjdCBpbnRlbF93YWl0ICp3YWl0ZXJz OwotCWNvbnN0IGludCBjb3VudCA9IDQwOTY7Ci0JdW5zaWduZWQgbG9uZyAqYml0bWFwOwotCWlu dCBlcnIgPSAtRU5PTUVNOwotCWludCBuLCBtOwotCi0JbW9ja19lbmdpbmVfcmVzZXQoZW5naW5l KTsKLQotCXdhaXRlcnMgPSBrdm1hbGxvY19hcnJheShjb3VudCwgc2l6ZW9mKCp3YWl0ZXJzKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCF3YWl0ZXJzKQotCQlnb3RvIG91dF9lbmdpbmVzOwotCi0JYml0 bWFwID0ga2NhbGxvYyhESVZfUk9VTkRfVVAoY291bnQsIEJJVFNfUEVSX0xPTkcpLCBzaXplb2Yo KmJpdG1hcCksCi0JCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiaXRtYXApCi0JCWdvdG8gb3V0X3dh aXRlcnM7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewotCQlpbnRlbF93YWl0X2lu aXRfZm9yX3NlcW5vKCZ3YWl0ZXJzW25dLCBuICsgc2Vxbm9fYmlhcyk7Ci0JCWludGVsX2VuZ2lu ZV9hZGRfd2FpdChlbmdpbmUsICZ3YWl0ZXJzW25dKTsKLQkJX19zZXRfYml0KG4sIGJpdG1hcCk7 Ci0JfQotCWVyciA9IGNoZWNrX3JidHJlZShlbmdpbmUsIGJpdG1hcCwgd2FpdGVycywgY291bnQp OwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2JpdG1hcDsKLQotCS8qIE9uIGVhY2ggc3RlcCwgd2Ug YWR2YW5jZSB0aGUgc2Vxbm8gc28gdGhhdCBzZXZlcmFsIHdhaXRlcnMgYXJlIHRoZW4KLQkgKiBj b21wbGV0ZSAod2UgaW5jcmVhc2UgdGhlIHNlcW5vIGJ5IGluY3JlYXNpbmdseSBsYXJnZXIgdmFs dWVzIHRvCi0JICogcmV0aXJlIG1vcmUgYW5kIG1vcmUgd2FpdGVycyBhdCBvbmNlKS4gQWxsIHJl dGlyZWQgd2FpdGVycyBzaG91bGQKLQkgKiBiZSB3b2tlbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBy YnRyZWUsIGFuZCBzbyB0aGF0IHdlIGNoZWNrLgotCSAqLwotCWZvciAobiA9IDA7IG4gPCBjb3Vu dDsgbiA9IG0pIHsKLQkJaW50IHNlcW5vID0gMiAqIG47Ci0KLQkJR0VNX0JVR19PTihmaW5kX2Zp cnN0X2JpdChiaXRtYXAsIGNvdW50KSAhPSBuKTsKLQotCQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0 ZSgmd2FpdGVyc1tuXSkpIHsKLQkJCXByX2Vycigid2FpdGVyWyVkLCBzZXFubz0lZF0gY29tcGxl dGVkIHRvbyBlYXJseVxuIiwKLQkJCSAgICAgICBuLCB3YWl0ZXJzW25dLnNlcW5vKTsKLQkJCWVy ciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dF9iaXRtYXA7Ci0JCX0KLQotCQkvKiBjb21wbGV0ZSB0 aGUgZm9sbG93aW5nIHdhaXRlcnMgKi8KLQkJbW9ja19zZXFub19hZHZhbmNlKGVuZ2luZSwgc2Vx bm8gKyBzZXFub19iaWFzKTsKLQkJZm9yIChtID0gbjsgbSA8PSBzZXFubzsgbSsrKSB7Ci0JCQlp ZiAobSA9PSBjb3VudCkKLQkJCQlicmVhazsKLQotCQkJR0VNX0JVR19PTighdGVzdF9iaXQobSwg Yml0bWFwKSk7Ci0JCQlfX2NsZWFyX2JpdChtLCBiaXRtYXApOwotCQl9Ci0KLQkJaW50ZWxfZW5n aW5lX3JlbW92ZV93YWl0KGVuZ2luZSwgJndhaXRlcnNbbl0pOwotCQlSQl9DTEVBUl9OT0RFKCZ3 YWl0ZXJzW25dLm5vZGUpOwotCi0JCWVyciA9IGNoZWNrX3JidHJlZShlbmdpbmUsIGJpdG1hcCwg d2FpdGVycywgY291bnQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcl9lcnIoInJidHJlZSBjb3JydXB0 IGFmdGVyIHNlcW5vIGFkdmFuY2UgdG8gJWRcbiIsCi0JCQkgICAgICAgc2Vxbm8gKyBzZXFub19i aWFzKTsKLQkJCWdvdG8gb3V0X2JpdG1hcDsKLQkJfQotCi0JCWVyciA9IGNoZWNrX2NvbXBsZXRp b24oZW5naW5lLCBiaXRtYXAsIHdhaXRlcnMsIGNvdW50KTsKLQkJaWYgKGVycikgewotCQkJcHJf ZXJyKCJjb21wbGV0aW9ucyBhZnRlciBzZXFubyBhZHZhbmNlIHRvICVkIGZhaWxlZFxuIiwKLQkJ CSAgICAgICBzZXFubyArIHNlcW5vX2JpYXMpOwotCQkJZ290byBvdXRfYml0bWFwOwotCQl9Ci0J fQotCi0JZXJyID0gY2hlY2tfcmJ0cmVlX2VtcHR5KGVuZ2luZSk7Ci1vdXRfYml0bWFwOgotCWtm cmVlKGJpdG1hcCk7Ci1vdXRfd2FpdGVyczoKLQlrdmZyZWUod2FpdGVycyk7Ci1vdXRfZW5naW5l czoKLQltb2NrX2VuZ2luZV9mbHVzaChlbmdpbmUpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0cnVj dCBpZ3Rfd2FrZXVwIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlhdG9taWNfdCAqcmVh ZHksICpzZXQsICpkb25lOwotCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKLQl1bnNp Z25lZCBsb25nIGZsYWdzOwotI2RlZmluZSBTVE9QIDAKLSNkZWZpbmUgSURMRSAxCi0Jd2FpdF9x dWV1ZV9oZWFkX3QgKndxOwotCXUzMiBzZXFubzsKLX07Ci0KLXN0YXRpYyBib29sIHdhaXRfZm9y X3JlYWR5KHN0cnVjdCBpZ3Rfd2FrZXVwICp3KQotewotCURFRklORV9XQUlUKHJlYWR5KTsKLQot CXNldF9iaXQoSURMRSwgJnctPmZsYWdzKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCh3LT5k b25lKSkKLQkJd2FrZV91cF92YXIody0+ZG9uZSk7Ci0KLQlpZiAodGVzdF9iaXQoU1RPUCwgJnct PmZsYWdzKSkKLQkJZ290byBvdXQ7Ci0KLQlmb3IgKDs7KSB7Ci0JCXByZXBhcmVfdG9fd2FpdCh3 LT53cSwgJnJlYWR5LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAoYXRvbWljX3JlYWQody0+ cmVhZHkpID09IDApCi0JCQlicmVhazsKLQotCQlzY2hlZHVsZSgpOwotCX0KLQlmaW5pc2hfd2Fp dCh3LT53cSwgJnJlYWR5KTsKLQotb3V0OgotCWNsZWFyX2JpdChJRExFLCAmdy0+ZmxhZ3MpOwot CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KHctPnNldCkpCi0JCXdha2VfdXBfdmFyKHctPnNldCk7 Ci0KLQlyZXR1cm4gIXRlc3RfYml0KFNUT1AsICZ3LT5mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQg aWd0X3dha2V1cF90aHJlYWQodm9pZCAqYXJnKQotewotCXN0cnVjdCBpZ3Rfd2FrZXVwICp3ID0g YXJnOwotCXN0cnVjdCBpbnRlbF93YWl0IHdhaXQ7Ci0KLQl3aGlsZSAod2FpdF9mb3JfcmVhZHko dykpIHsKLQkJR0VNX0JVR19PTihrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwotCi0JCWludGVsX3dh aXRfaW5pdF9mb3Jfc2Vxbm8oJndhaXQsIHctPnNlcW5vKTsKLQkJaW50ZWxfZW5naW5lX2FkZF93 YWl0KHctPmVuZ2luZSwgJndhaXQpOwotCQlmb3IgKDs7KSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0 ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoaTkxNV9zZXFub19wYXNzZWQoaW50ZWxf ZW5naW5lX2dldF9zZXFubyh3LT5lbmdpbmUpLAotCQkJCQkgICAgICB3LT5zZXFubykpCi0JCQkJ YnJlYWs7Ci0KLQkJCWlmICh0ZXN0X2JpdChTVE9QLCAmdy0+ZmxhZ3MpKSAvKiBlbWVyZ2VuY3kg ZXNjYXBlICovCi0JCQkJYnJlYWs7Ci0KLQkJCXNjaGVkdWxlKCk7Ci0JCX0KLQkJaW50ZWxfZW5n aW5lX3JlbW92ZV93YWl0KHctPmVuZ2luZSwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRl KFRBU0tfUlVOTklORyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGlndF93 YWtlX2FsbF9zeW5jKGF0b21pY190ICpyZWFkeSwKLQkJCSAgICAgIGF0b21pY190ICpzZXQsCi0J CQkgICAgICBhdG9taWNfdCAqZG9uZSwKLQkJCSAgICAgIHdhaXRfcXVldWVfaGVhZF90ICp3cSwK LQkJCSAgICAgIGludCBjb3VudCkKLXsKLQlhdG9taWNfc2V0KHNldCwgY291bnQpOwotCWF0b21p Y19zZXQocmVhZHksIDApOwotCXdha2VfdXBfYWxsKHdxKTsKLQotCXdhaXRfdmFyX2V2ZW50KHNl dCwgIWF0b21pY19yZWFkKHNldCkpOwotCWF0b21pY19zZXQocmVhZHksIGNvdW50KTsKLQlhdG9t aWNfc2V0KGRvbmUsIGNvdW50KTsKLX0KLQotc3RhdGljIGludCBpZ3Rfd2FrZXVwKHZvaWQgKmFy ZykKLXsKLQlJOTE1X1JORF9TVEFURShwcm5nKTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUgPSBhcmc7Ci0Jc3RydWN0IGlndF93YWtldXAgKndhaXRlcnM7Ci0JREVDTEFSRV9XQUlU X1FVRVVFX0hFQURfT05TVEFDSyh3cSk7Ci0JY29uc3QgaW50IGNvdW50ID0gNDA5NjsKLQljb25z dCB1MzIgbWF4X3NlcW5vID0gY291bnQgLyA0OwotCWF0b21pY190IHJlYWR5LCBzZXQsIGRvbmU7 Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IG4sIHN0ZXA7Ci0KLQltb2NrX2VuZ2luZV9yZXNl dChlbmdpbmUpOwotCi0Jd2FpdGVycyA9IGt2bWFsbG9jX2FycmF5KGNvdW50LCBzaXplb2YoKndh aXRlcnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhaXRlcnMpCi0JCWdvdG8gb3V0X2VuZ2luZXM7 Ci0KLQkvKiBDcmVhdGUgYSBsYXJnZSBudW1iZXIgb2YgdGhyZWFkcywgZWFjaCB3YWl0aW5nIG9u IGEgcmFuZG9tIHNlcW5vLgotCSAqIE11bHRpcGxlIHdhaXRlcnMgd2lsbCBiZSB3YWl0aW5nIGZv ciB0aGUgc2FtZSBzZXFuby4KLQkgKi8KLQlhdG9taWNfc2V0KCZyZWFkeSwgY291bnQpOwotCWZv ciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0JCXdhaXRlcnNbbl0ud3EgPSAmd3E7Ci0JCXdh aXRlcnNbbl0ucmVhZHkgPSAmcmVhZHk7Ci0JCXdhaXRlcnNbbl0uc2V0ID0gJnNldDsKLQkJd2Fp dGVyc1tuXS5kb25lID0gJmRvbmU7Ci0JCXdhaXRlcnNbbl0uZW5naW5lID0gZW5naW5lOwotCQl3 YWl0ZXJzW25dLmZsYWdzID0gQklUKElETEUpOwotCi0JCXdhaXRlcnNbbl0udHNrID0ga3RocmVh ZF9ydW4oaWd0X3dha2V1cF90aHJlYWQsICZ3YWl0ZXJzW25dLAotCQkJCQkgICAgICJpOTE1L2ln dDolZCIsIG4pOwotCQlpZiAoSVNfRVJSKHdhaXRlcnNbbl0udHNrKSkKLQkJCWdvdG8gb3V0X3dh aXRlcnM7Ci0KLQkJZ2V0X3Rhc2tfc3RydWN0KHdhaXRlcnNbbl0udHNrKTsKLQl9Ci0KLQlmb3Ig KHN0ZXAgPSAxOyBzdGVwIDw9IG1heF9zZXFubzsgc3RlcCA8PD0gMSkgewotCQl1MzIgc2Vxbm87 Ci0KLQkJLyogVGhlIHdhaXRlciB0aHJlYWRzIHN0YXJ0IHBhdXNlZCBhcyB3ZSBhc3NpZ24gdGhl bSBhIHJhbmRvbQotCQkgKiBzZXFubyBhbmQgcmVzZXQgdGhlIGVuZ2luZS4gT25jZSB0aGUgZW5n aW5lIGlzIHJlc2V0LAotCQkgKiB3ZSBzaWduYWwgdGhhdCB0aGUgdGhyZWFkcyBtYXkgYmVnaW4g dGhlaXIgd2FpdCB1cG9uIHRoZWlyCi0JCSAqIHNlcW5vLgotCQkgKi8KLQkJZm9yIChuID0gMDsg biA8IGNvdW50OyBuKyspIHsKLQkJCUdFTV9CVUdfT04oIXRlc3RfYml0KElETEUsICZ3YWl0ZXJz W25dLmZsYWdzKSk7Ci0JCQl3YWl0ZXJzW25dLnNlcW5vID0KLQkJCQkxICsgcHJhbmRvbV91MzJf c3RhdGUoJnBybmcpICUgbWF4X3NlcW5vOwotCQl9Ci0JCW1vY2tfc2Vxbm9fYWR2YW5jZShlbmdp bmUsIDApOwotCQlpZ3Rfd2FrZV9hbGxfc3luYygmcmVhZHksICZzZXQsICZkb25lLCAmd3EsIGNv dW50KTsKLQotCQkvKiBTaW11bGF0ZSB0aGUgR1BVIGRvaW5nIGNodW5rcyBvZiB3b3JrLCB3aXRo IG9uZSBvciBtb3JlCi0JCSAqIHNlcW5vIGFwcGVhcmluZyB0byBmaW5pc2ggYXQgdGhlIHNhbWUg dGltZS4gQSByYW5kb20gbnVtYmVyCi0JCSAqIG9mIHRocmVhZHMgd2lsbCBiZSB3YWl0aW5nIHVw b24gdGhlIHVwZGF0ZSBhbmQgaG9wZWZ1bGx5IGJlCi0JCSAqIHdva2VuLgotCQkgKi8KLQkJZm9y IChzZXFubyA9IDE7IHNlcW5vIDw9IG1heF9zZXFubyArIHN0ZXA7IHNlcW5vICs9IHN0ZXApIHsK LQkJCXVzbGVlcF9yYW5nZSg1MCwgNTAwKTsKLQkJCW1vY2tfc2Vxbm9fYWR2YW5jZShlbmdpbmUs IHNlcW5vKTsKLQkJfQotCQlHRU1fQlVHX09OKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5l KSA8IDEgKyBtYXhfc2Vxbm8pOwotCi0JCS8qIFdpdGggdGhlIHNlcW5vIG5vdyBiZXlvbmQgYW55 IG9mIHRoZSB3YWl0aW5nIHRocmVhZHMsIHRoZXkKLQkJICogc2hvdWxkIGFsbCBiZSB3b2tlbiwg c2VlIHRoYXQgdGhleSBhcmUgY29tcGxldGUgYW5kIHNpZ25hbAotCQkgKiB0aGF0IHRoZXkgYXJl IHJlYWR5IGZvciB0aGUgbmV4dCB0ZXN0LiBXZSB3YWl0IHVudGlsIGFsbAotCQkgKiB0aHJlYWRz IGFyZSBjb21wbGV0ZSBhbmQgd2FpdGluZyBmb3IgdXMgKGkuZS4gbm90IGEgc2Vxbm8pLgotCQkg Ki8KLQkJaWYgKCF3YWl0X3Zhcl9ldmVudF90aW1lb3V0KCZkb25lLAotCQkJCQkgICAgIWF0b21p Y19yZWFkKCZkb25lKSwgMTAgKiBIWikpIHsKLQkJCXByX2VycigiVGltZWQgb3V0IHdhaXRpbmcg Zm9yICVkIHJlbWFpbmluZyB3YWl0ZXJzXG4iLAotCQkJICAgICAgIGF0b21pY19yZWFkKCZkb25l KSk7Ci0JCQllcnIgPSAtRVRJTUVET1VUOwotCQkJYnJlYWs7Ci0JCX0KLQotCQllcnIgPSBjaGVj a19yYnRyZWVfZW1wdHkoZW5naW5lKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCX0KLQotb3V0 X3dhaXRlcnM6Ci0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLQkJaWYgKElTX0VSUih3 YWl0ZXJzW25dLnRzaykpCi0JCQlicmVhazsKLQotCQlzZXRfYml0KFNUT1AsICZ3YWl0ZXJzW25d LmZsYWdzKTsKLQl9Ci0JbW9ja19zZXFub19hZHZhbmNlKGVuZ2luZSwgSU5UX01BWCk7IC8qIHdh a2V1cCBhbnkgYnJva2VuIHdhaXRlcnMgKi8KLQlpZ3Rfd2FrZV9hbGxfc3luYygmcmVhZHksICZz ZXQsICZkb25lLCAmd3EsIG4pOwotCi0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLQkJ aWYgKElTX0VSUih3YWl0ZXJzW25dLnRzaykpCi0JCQlicmVhazsKLQotCQlrdGhyZWFkX3N0b3Ao d2FpdGVyc1tuXS50c2spOwotCQlwdXRfdGFza19zdHJ1Y3Qod2FpdGVyc1tuXS50c2spOwotCX0K LQotCWt2ZnJlZSh3YWl0ZXJzKTsKLW91dF9lbmdpbmVzOgotCW1vY2tfZW5naW5lX2ZsdXNoKGVu Z2luZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGludGVsX2JyZWFkY3J1bWJzX21vY2tfc2Vs ZnRlc3RzKHZvaWQpCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNb XSA9IHsKLQkJU1VCVEVTVChpZ3RfcmFuZG9tX2luc2VydF9yZW1vdmUpLAotCQlTVUJURVNUKGln dF9pbnNlcnRfY29tcGxldGUpLAotCQlTVUJURVNUKGlndF93YWtldXApLAotCX07Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Ci0JaW50IGVycjsKLQotCWk5MTUgPSBtb2NrX2dlbV9k ZXZpY2UoKTsKLQlpZiAoIWk5MTUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZXJyID0gaTkxNV9z dWJ0ZXN0cyh0ZXN0cywgaTkxNS0+ZW5naW5lW1JDU10pOwotCWRybV9kZXZfcHV0KCZpOTE1LT5k cm0pOwotCi0JcmV0dXJuIGVycjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pbnRlbF9oYW5nY2hlY2suYwppbmRleCA5ZDBjYzlkNjNhMWUuLjEyOGQzN2JiYTFhYyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVj ay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2su YwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAgc3RhdGljIGludCBfX2lndF9yZXNldF9ldmljdF92bWEo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZh cmcuY29tcGxldGlvbik7CiAKLQlpZiAod2FpdF9mb3Iod2FpdHF1ZXVlX2FjdGl2ZSgmcnEtPmV4 ZWN1dGUpLCAxMCkpIHsKKwlpZiAod2FpdF9mb3IoIWxpc3RfZW1wdHkoJnJxLT5mZW5jZS5jYl9s aXN0KSwgMTApKSB7CiAJCXN0cnVjdCBkcm1fcHJpbnRlciBwID0gZHJtX2luZm9fcHJpbnRlcihp OTE1LT5kcm0uZGV2KTsKIAogCQlwcl9lcnIoImlndC9ldmljdF92bWEga3RocmVhZCBkaWQgbm90 IHdhaXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2xp Yl9zd19mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2xpYl9zd19mZW5j ZS5jCmluZGV4IGIyNmYwN2I1NWQ4Ni4uMmJmYTcyYzE2NTRiIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2xpYl9zd19mZW5jZS5jCkBAIC03NiwzICs3Niw1NyBAQCB2b2lk IHRpbWVkX2ZlbmNlX2Zpbmkoc3RydWN0IHRpbWVkX2ZlbmNlICp0ZikKIAlkZXN0cm95X3RpbWVy X29uX3N0YWNrKCZ0Zi0+dGltZXIpOwogCWk5MTVfc3dfZmVuY2VfZmluaSgmdGYtPmZlbmNlKTsK IH0KKworc3RydWN0IGhlYXBfZmVuY2UgeworCXN0cnVjdCBpOTE1X3N3X2ZlbmNlIGZlbmNlOwor CXVuaW9uIHsKKwkJc3RydWN0IGtyZWYgcmVmOworCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCX07 Cit9OworCitzdGF0aWMgaW50IF9faTkxNV9zd19mZW5jZV9jYWxsCitoZWFwX2ZlbmNlX25vdGlm eShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsIGVudW0gaTkxNV9zd19mZW5jZV9ub3RpZnkg c3RhdGUpCit7CisJc3RydWN0IGhlYXBfZmVuY2UgKmggPSBjb250YWluZXJfb2YoZmVuY2UsIHR5 cGVvZigqaCksIGZlbmNlKTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEZFTkNFX0NPTVBM RVRFOgorCQlicmVhazsKKworCWNhc2UgRkVOQ0VfRlJFRToKKwkJaGVhcF9mZW5jZV9wdXQoJmgt PmZlbmNlKTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0cnVjdCBpOTE1X3N3 X2ZlbmNlICpoZWFwX2ZlbmNlX2NyZWF0ZShnZnBfdCBnZnApCit7CisJc3RydWN0IGhlYXBfZmVu Y2UgKmg7CisKKwloID0ga21hbGxvYyhzaXplb2YoKmgpLCBnZnApOworCWlmICghaCkKKwkJcmV0 dXJuIE5VTEw7CisKKwlpOTE1X3N3X2ZlbmNlX2luaXQoJmgtPmZlbmNlLCBoZWFwX2ZlbmNlX25v dGlmeSk7CisJcmVmY291bnRfc2V0KCZoLT5yZWYucmVmY291bnQsIDIpOworCisJcmV0dXJuICZo LT5mZW5jZTsKK30KKworc3RhdGljIHZvaWQgaGVhcF9mZW5jZV9yZWxlYXNlKHN0cnVjdCBrcmVm ICpyZWYpCit7CisJc3RydWN0IGhlYXBfZmVuY2UgKmggPSBjb250YWluZXJfb2YocmVmLCB0eXBl b2YoKmgpLCByZWYpOworCisJaTkxNV9zd19mZW5jZV9maW5pKCZoLT5mZW5jZSk7CisKKwlrZnJl ZV9yY3UoaCwgcmN1KTsKK30KKwordm9pZCBoZWFwX2ZlbmNlX3B1dChzdHJ1Y3QgaTkxNV9zd19m ZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IGhlYXBfZmVuY2UgKmggPSBjb250YWluZXJfb2YoZmVu Y2UsIHR5cGVvZigqaCksIGZlbmNlKTsKKworCWtyZWZfcHV0KCZoLT5yZWYsIGhlYXBfZmVuY2Vf cmVsZWFzZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv bGliX3N3X2ZlbmNlLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2Zl bmNlLmgKaW5kZXggNDc0YWFmYjkyYWUxLi4xZjk5MjdlMTBmM2EgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmgKQEAgLTM5LDQgKzM5LDcgQEAgc3Ry dWN0IHRpbWVkX2ZlbmNlIHsKIHZvaWQgdGltZWRfZmVuY2VfaW5pdChzdHJ1Y3QgdGltZWRfZmVu Y2UgKnRmLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogdm9pZCB0aW1lZF9mZW5jZV9maW5pKHN0 cnVjdCB0aW1lZF9mZW5jZSAqdGYpOwogCitzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqaGVhcF9mZW5j ZV9jcmVhdGUoZ2ZwX3QgZ2ZwKTsKK3ZvaWQgaGVhcF9mZW5jZV9wdXQoc3RydWN0IGk5MTVfc3df ZmVuY2UgKmZlbmNlKTsKKwogI2VuZGlmIC8qIF9MSUJfU1dfRkVOQ0VfSF8gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwppbmRleCBkOTM3YmRmZjI2 ZjkuLmU0ZGI5YTMxYjUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9t b2NrX2NvbnRleHQuYwpAQCAtNDksNiArNDksOCBAQCBtb2NrX2NvbnRleHQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsCiAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9ICZjdHgtPl9f ZW5naW5lW25dOwogCiAJCWNlLT5nZW1fY29udGV4dCA9IGN0eDsKKwkJSU5JVF9MSVNUX0hFQUQo JmNlLT5zaWduYWxfbGluayk7CisJCUlOSVRfTElTVF9IRUFEKCZjZS0+c2lnbmFscyk7CiAJfQog CiAJcmV0ID0gaTkxNV9nZW1fY29udGV4dF9waW5faHdfaWQoY3R4KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMKaW5kZXggYjRiNjEwNTZiMjI3Li5jMWNk OGIyN2IzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2Nr X2VuZ2luZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2lu ZS5jCkBAIC03NSwyNSArNzUsMjcgQEAgc3RhdGljIHN0cnVjdCBtb2NrX3JlcXVlc3QgKmZpcnN0 X3JlcXVlc3Qoc3RydWN0IG1vY2tfZW5naW5lICplbmdpbmUpCiAJCQkJCWxpbmspOwogfQogCi1z dGF0aWMgdm9pZCBhZHZhbmNlKHN0cnVjdCBtb2NrX2VuZ2luZSAqZW5naW5lLAotCQkgICAgc3Ry dWN0IG1vY2tfcmVxdWVzdCAqcmVxdWVzdCkKK3N0YXRpYyB2b2lkIGFkdmFuY2Uoc3RydWN0IG1v Y2tfcmVxdWVzdCAqcmVxdWVzdCkKIHsKIAlsaXN0X2RlbF9pbml0KCZyZXF1ZXN0LT5saW5rKTsK IAlpOTE1X3JlcXVlc3RfZmFrZV9jb21wbGV0ZSgmcmVxdWVzdC0+YmFzZSk7Ci0JbW9ja19zZXFu b19hZHZhbmNlKCZlbmdpbmUtPmJhc2UsIHJlcXVlc3QtPmJhc2UuZ2xvYmFsX3NlcW5vKTsKKwlp bnRlbF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vKHJlcXVlc3QtPmJhc2UuZW5naW5lLAorCQkJ CQlyZXF1ZXN0LT5iYXNlLmdsb2JhbF9zZXFubyk7CisJaW50ZWxfZW5naW5lX3F1ZXVlX2JyZWFk Y3J1bWJzKHJlcXVlc3QtPmJhc2UuZW5naW5lKTsKIH0KIAogc3RhdGljIHZvaWQgaHdfZGVsYXlf Y29tcGxldGUoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiB7CiAJc3RydWN0IG1vY2tfZW5naW5lICpl bmdpbmUgPSBmcm9tX3RpbWVyKGVuZ2luZSwgdCwgaHdfZGVsYXkpOwogCXN0cnVjdCBtb2NrX3Jl cXVlc3QgKnJlcXVlc3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZW5n aW5lLT5od19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5od19sb2NrLCBmbGFn cyk7CiAKIAkvKiBUaW1lciBmaXJlZCwgZmlyc3QgcmVxdWVzdCBpcyBjb21wbGV0ZSAqLwogCXJl cXVlc3QgPSBmaXJzdF9yZXF1ZXN0KGVuZ2luZSk7CiAJaWYgKHJlcXVlc3QpCi0JCWFkdmFuY2Uo ZW5naW5lLCByZXF1ZXN0KTsKKwkJYWR2YW5jZShyZXF1ZXN0KTsKIAogCS8qCiAJICogQWxzbyBp bW1lZGlhdGVseSBzaWduYWwgYW55IHN1YnNlcXVlbnQgMC1kZWxheSByZXF1ZXN0cywgYnV0CkBA IC0xMDUsMTAgKzEwNywxMCBAQCBzdGF0aWMgdm9pZCBod19kZWxheV9jb21wbGV0ZShzdHJ1Y3Qg dGltZXJfbGlzdCAqdCkKIAkJCWJyZWFrOwogCQl9CiAKLQkJYWR2YW5jZShlbmdpbmUsIHJlcXVl c3QpOworCQlhZHZhbmNlKHJlcXVlc3QpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZlbmdpbmUtPmh3 X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3Mp OwogfQogCiBzdGF0aWMgdm9pZCBtb2NrX2NvbnRleHRfdW5waW4oc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKQpAQCAtMTc5LDE5ICsxODEsMjAgQEAgc3RhdGljIHZvaWQgbW9ja19zdWJtaXRfcmVx dWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQogCXN0cnVjdCBtb2NrX3JlcXVlc3Qg Km1vY2sgPSBjb250YWluZXJfb2YocmVxdWVzdCwgdHlwZW9mKCptb2NrKSwgYmFzZSk7CiAJc3Ry dWN0IG1vY2tfZW5naW5lICplbmdpbmUgPQogCQljb250YWluZXJfb2YocmVxdWVzdC0+ZW5naW5l LCB0eXBlb2YoKmVuZ2luZSksIGJhc2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpOTE1 X3JlcXVlc3Rfc3VibWl0KHJlcXVlc3QpOwogCUdFTV9CVUdfT04oIXJlcXVlc3QtPmdsb2JhbF9z ZXFubyk7CiAKLQlzcGluX2xvY2tfaXJxKCZlbmdpbmUtPmh3X2xvY2spOworCXNwaW5fbG9ja19p cnFzYXZlKCZlbmdpbmUtPmh3X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZF90YWlsKCZtb2NrLT5s aW5rLCAmZW5naW5lLT5od19xdWV1ZSk7CiAJaWYgKG1vY2stPmxpbmsucHJldiA9PSAmZW5naW5l LT5od19xdWV1ZSkgewogCQlpZiAobW9jay0+ZGVsYXkpCiAJCQltb2RfdGltZXIoJmVuZ2luZS0+ aHdfZGVsYXksIGppZmZpZXMgKyBtb2NrLT5kZWxheSk7CiAJCWVsc2UKLQkJCWFkdmFuY2UoZW5n aW5lLCBtb2NrKTsKKwkJCWFkdmFuY2UobW9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycSgmZW5n aW5lLT5od19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmh3X2xvY2ss IGZsYWdzKTsKIH0KIAogc3RydWN0IGludGVsX2VuZ2luZV9jcyAqbW9ja19lbmdpbmUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCkBAIC0yNTUsMTIgKzI1OCwxMyBAQCB2b2lkIG1vY2tf ZW5naW5lX2ZsdXNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAogCXNwaW5fbG9j a19pcnEoJm1vY2stPmh3X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0 LCBybiwgJm1vY2stPmh3X3F1ZXVlLCBsaW5rKQotCQlhZHZhbmNlKG1vY2ssIHJlcXVlc3QpOwor CQlhZHZhbmNlKHJlcXVlc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmbW9jay0+aHdfbG9jayk7CiB9 CiAKIHZvaWQgbW9ja19lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogeworCWludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8oZW5naW5lLCAwKTsKIH0KIAog dm9pZCBtb2NrX2VuZ2luZV9mcmVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2VuZ2luZS5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmgKaW5kZXggMTMzZDBj MjE3OTBkLi5iOWNjM2EyNDVmMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9tb2NrX2VuZ2luZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9tb2NrX2VuZ2luZS5oCkBAIC00NiwxMCArNDYsNCBAQCB2b2lkIG1vY2tfZW5naW5lX2ZsdXNo KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiB2b2lkIG1vY2tfZW5naW5lX3Jlc2V0 KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiB2b2lkIG1vY2tfZW5naW5lX2ZyZWUo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAotc3RhdGljIGlubGluZSB2b2lkIG1v Y2tfc2Vxbm9fYWR2YW5jZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiBzZXFu bykKLXsKLQlpbnRlbF93cml0ZV9zdGF0dXNfcGFnZShlbmdpbmUsIEk5MTVfR0VNX0hXU19JTkRF WCwgc2Vxbm8pOwotCWludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKTsKLX0KLQogI2VuZGlmIC8q ICFfX01PQ0tfRU5HSU5FX0hfXyAqLwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK