From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v6] libelf: rewrite symtab/strtab loading Date: Thu, 31 Mar 2016 18:00:22 +0200 Message-ID: <1459440022-8345-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1alfAz-0005dH-BG for xen-devel@lists.xenproject.org; Thu, 31 Mar 2016 16:10:29 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Wei Liu , Ian Jackson , Jan Beulich , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Q3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBlbGZfbG9hZF9ic2RzeW1zIGlzIGJyb2tlbiB3aGVu IGxvYWRpbmcgaW5zaWRlIG9mCmEgSFZNIGd1ZXN0LCBiZWNhdXNlIGl0IGFzc3VtZXMgZWxmX21l bWNweV9zYWZlIGlzIGFibGUgdG8gd3JpdGUgaW50byBndWVzdAptZW1vcnkgc3BhY2UsIHdoaWNo IGl0IGlzIG5vdC4KClRha2UgdGhlIG9wb3J0dW5pdHkgdG8gZG8gc29tZSBjbGVhbnVwIGFuZCBw cm9wZXJseSBkb2N1bWVudCBob3cKZWxmX3twYXJzZS9sb2FkfV9ic2RzeW1zIHdvcmtzLiBUaGUg bmV3IGltcGxlbWVudGF0aW9uIHVzZXMgZWxmX2xvYWRfaW1hZ2UKd2hlbiBkZWFsaW5nIHdpdGgg ZGF0YSB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZCB0byB0aGUgZ3Vlc3QgbWVtb3J5IHNwYWNlLgpB bHNvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyBjb3BpZWQgdG8gdGhlIG1p bmltdW0gbmVjZXNzYXJ5LgoKVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIGR1cGxpY2F0aW9u IG9mIGNvZGUgZm91bmQgaW4gdGhlIGxpYnhjIEVMRgpsb2FkZXIsIHNpbmNlIHRoZSBsaWJlbGYg c3ltdGFiL3N0cnRhYiBsb2FkaW5nIGNvZGUgd2lsbCBhbHNvIGhhbmRsZSB0aGlzCmNhc2Ugd2l0 aG91dCBoYXZpbmcgdG8gZHVwbGljYXRlIGl0LgoKU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1IE1v bm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+CkFja2VkLWJ5OiBJYW4gSmFja3NvbiA8aWFuLmph Y2tzb25AZXUuY2l0cml4LmNvbT4KLS0tCkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUu Y2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkNjOiBKYW4gQmV1 bGljaCA8SkJldWxpY2hAc3VzZS5jb20+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY1OgogLSBNb3ZlIHNo X2xpbmsgc3ltdGFiIHNhbml0eSBjaGVjayB0byBlbGZfaW5pdC4KCkNoYW5nZXMgc2luY2UgdjQ6 CiAtIEFkZCBhIGRlZmluZSB0aGF0IGNvbnRhaW5zIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMuCiAt IEltcHJvdmUgdGhlIGNvbW1lbnQgdG8gZGVzY3JpYmUgdGhlIG1lbW9yeSBsYXlvdXQuCiAtIENo ZWNrIHRoYXQgdGhlIHNoX2xpbmsgZmllbGQgaXMgMCA8IHNoX2xpbmsgPCBlX3NobnVtLgogLSBT aW1wbGlmeSBzb21lIG9mIHRoZSBsb2dpYywgc2luY2UgdGhlIFNZTVRBQiBzZWN0aW9uIGlzIGFs cmVhZHkKICAgZGlzY292ZXJlZCBieSBlbGZfaW5pdCBhbmQgaXQncyBoYW5kbGVyIHN0b3JlZCBp biBlbGYtPnN5bV90YWIuCi0tLQogdG9vbHMvbGlieGMveGNfZG9tX2VsZmxvYWRlci5jICAgIHwg MjAzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9jb21tb24vbGliZWxmL2xpYmVsZi1s b2FkZXIuYyB8IDMwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCAyMjggaW5zZXJ0aW9ucygrKSwgMjgwIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2RvbV9lbGZsb2FkZXIuYyBiL3Rvb2xzL2xpYnhjL3hjX2Rv bV9lbGZsb2FkZXIuYwppbmRleCA1MDM5ZjNmLi42MmQ0MjFhIDEwMDY0NAotLS0gYS90b29scy9s aWJ4Yy94Y19kb21fZWxmbG9hZGVyLmMKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tX2VsZmxvYWRl ci5jCkBAIC0xMzMsMjA0ICsxMzMsNiBAQCBzdGF0aWMgZWxmX25lZ2Vycm5vdmFsIHhjX2RvbV9w cm9iZV9lbGZfa2VybmVsKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICByZXR1cm4gMDsK IH0KIAotc3RhdGljIGVsZl9lcnJvcnN0YXR1cyB4Y19kb21fbG9hZF9lbGZfc3ltdGFiKHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCBib29sIGxvYWQpCi17Ci0gICAgc3RydWN0IGVsZl9iaW5h cnkgc3ltczsKLSAgICBFTEZfSEFORExFX0RFQ0woZWxmX3NoZHIpIHNoZHI7IEVMRl9IQU5ETEVf REVDTChlbGZfc2hkcikgc2hkcjI7Ci0gICAgeGVuX3ZhZGRyX3Qgc3ltdGFiLCBtYXhhZGRyOwot ICAgIGVsZl9wdHJ2YWwgaGRyOwotICAgIHNpemVfdCBzaXplOwotICAgIHVuc2lnbmVkIGgsIGNv dW50LCB0eXBlLCBpLCB0YWJsZXMgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgKnN0cnRhYl9yZWZl cmVuY2VkID0gTlVMTDsKLQotICAgIGlmICggZWxmX3N3YXAoZWxmKSApCi0gICAgewotICAgICAg ICBET01QUklOVEYoIiVzOiBub24tbmF0aXZlIGJ5dGUgb3JkZXIsIGJzZCBzeW10YWIgbm90IHN1 cHBvcnRlZCIsCi0gICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOwotICAgICAgICByZXR1 cm4gMDsKLSAgICB9Ci0KLSAgICBzaXplID0gZWxmLT5ic2Rfc3ltdGFiX3BlbmQgLSBlbGYtPmJz ZF9zeW10YWJfcHN0YXJ0OwotCi0gICAgaWYgKCBsb2FkICkKLSAgICB7Ci0gICAgICAgIGNoYXIg Kmhkcl9wdHI7Ci0gICAgICAgIHNpemVfdCBhbGxvd19zaXplOwotCi0gICAgICAgIGlmICggIWRv bS0+YnNkX3N5bXRhYl9zdGFydCApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaGRy X3B0ciA9IHhjX2RvbV92YWRkcl90b19wdHIoZG9tLCBkb20tPmJzZF9zeW10YWJfc3RhcnQsICZh bGxvd19zaXplKTsKLSAgICAgICAgaWYgKCBoZHJfcHRyID09IE5VTEwgKQotICAgICAgICB7Ci0g ICAgICAgICAgICBET01QUklOVEYoIiVzOiB4Y19kb21fdmFkZHJfdG9fcHRyKGRvbSxkb20tPmJz ZF9zeW10YWJfc3RhcnQiCi0gICAgICAgICAgICAgICAgICAgICAgIiA9PiBOVUxMIiwgX19GVU5D VElPTl9fKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBlbGYt PmNhbGxlcl94ZGVzdF9iYXNlID0gaGRyX3B0cjsKLSAgICAgICAgZWxmLT5jYWxsZXJfeGRlc3Rf c2l6ZSA9IGFsbG93X3NpemU7Ci0gICAgICAgIGhkciA9IEVMRl9SRUFMUFRSMlBUUlZBTChoZHJf cHRyKTsKLSAgICAgICAgZWxmX3N0b3JlX3ZhbChlbGYsIHVuc2lnbmVkLCBoZHIsIHNpemUgLSBz aXplb2YodW5zaWduZWQpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY2hhciAq aGRyX3B0cjsKLQotICAgICAgICBoZHJfcHRyID0geGNfZG9tX21hbGxvYyhkb20sIHNpemUpOwot ICAgICAgICBpZiAoIGhkcl9wdHIgPT0gTlVMTCApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAg ICAgICAgZWxmLT5jYWxsZXJfeGRlc3RfYmFzZSA9IGhkcl9wdHI7Ci0gICAgICAgIGVsZi0+Y2Fs bGVyX3hkZXN0X3NpemUgPSBzaXplOwotICAgICAgICBoZHIgPSBFTEZfUkVBTFBUUjJQVFJWQUwo aGRyX3B0cik7Ci0gICAgICAgIGRvbS0+YnNkX3N5bXRhYl9zdGFydCA9IGVsZl9yb3VuZF91cChl bGYsIGRvbS0+a2VybmVsX3NlZy52ZW5kKTsKLSAgICAgICAgZG9tLT5rZXJuZWxfc2VnLnZlbmQg PSBlbGZfcm91bmRfdXAoZWxmLCBkb20tPmJzZF9zeW10YWJfc3RhcnQgKyBzaXplKTsKLSAgICAg ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZWxmX21lbWNweV9zYWZlKGVsZiwgaGRyICsgc2l6 ZW9mKHVuc2lnbmVkKSwKLSAgICAgICAgICAgRUxGX0lNQUdFX0JBU0UoZWxmKSwKLSAgICAgICAg ICAgZWxmX3NpemUoZWxmLCBlbGYtPmVoZHIpKTsKLSAgICBlbGZfbWVtY3B5X3NhZmUoZWxmLCBo ZHIgKyBzaXplb2YodW5zaWduZWQpICsgZWxmX3NpemUoZWxmLCBlbGYtPmVoZHIpLAotICAgICAg ICAgICBFTEZfSU1BR0VfQkFTRShlbGYpICsgZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hv ZmYpLAotICAgICAgICAgICBlbGZfc2hkcl9jb3VudChlbGYpICogZWxmX3NpemUoZWxmLCBzaGRy KSk7Ci0gICAgaWYgKCBlbGZfNjRiaXQoZWxmKSApCi0gICAgewotICAgICAgICBFbGY2NF9FaGRy ICplaGRyID0gKEVsZjY0X0VoZHIgKikoaGRyICsgc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAgICAg IGVoZHItPmVfcGhvZmYgPSAwOwotICAgICAgICBlaGRyLT5lX3BoZW50c2l6ZSA9IDA7Ci0gICAg ICAgIGVoZHItPmVfcGhudW0gPSAwOwotICAgICAgICBlaGRyLT5lX3Nob2ZmID0gZWxmX3NpemUo ZWxmLCBlbGYtPmVoZHIpOwotICAgICAgICBlaGRyLT5lX3Noc3RybmR4ID0gU0hOX1VOREVGOwot ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFbGYzMl9FaGRyICplaGRyID0gKEVsZjMy X0VoZHIgKikoaGRyICsgc2l6ZW9mKHVuc2lnbmVkKSk7Ci0gICAgICAgIGVoZHItPmVfcGhvZmYg PSAwOwotICAgICAgICBlaGRyLT5lX3BoZW50c2l6ZSA9IDA7Ci0gICAgICAgIGVoZHItPmVfcGhu dW0gPSAwOwotICAgICAgICBlaGRyLT5lX3Nob2ZmID0gZWxmX3NpemUoZWxmLCBlbGYtPmVoZHIp OwotICAgICAgICBlaGRyLT5lX3Noc3RybmR4ID0gU0hOX1VOREVGOwotICAgIH0KLSAgICBpZiAo IGVsZi0+Y2FsbGVyX3hkZXN0X3NpemUgPCBzaXplb2YodW5zaWduZWQpICkKLSAgICB7Ci0gICAg ICAgIERPTVBSSU5URigiJXM6IGhlYWRlciBzaXplICUiUFJJeDY0IiB0b28gc21hbGwiLAotICAg ICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCAodWludDY0X3QpZWxmLT5jYWxsZXJfeGRlc3Rf c2l6ZSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKCBlbGZfaW5pdCgmc3lt cywgZWxmLT5jYWxsZXJfeGRlc3RfYmFzZSArIHNpemVvZih1bnNpZ25lZCksCi0gICAgICAgICAg ICAgICAgICBlbGYtPmNhbGxlcl94ZGVzdF9zaXplIC0gc2l6ZW9mKHVuc2lnbmVkKSkgKQotICAg ICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKgotICAgICAqIFRoZSBjYWxsZXJfeGRlc3Rfe2Jhc2Us c2l6ZX0gYW5kIGRlc3Rfe2Jhc2Usc2l6ZX0gbmVlZCB0bwotICAgICAqIHJlbWFpbiB2YWxpZCBz byBsb25nIGFzIGVhY2ggc3RydWN0IGVsZl9pbWFnZSBkb2VzLiAgVGhlCi0gICAgICogcHJpbmNp cGxlIHdlIGFkb3B0IGlzIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBzZXQgd2hlbiB0aGUKLSAgICAg KiBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIG1hcHBlZCwgYW5kIGNsZWFyZWQgd2hlbiAoYW5kIGlm KQotICAgICAqIHRoZXkgYXJlIHVubWFwcGVkLgotICAgICAqCi0gICAgICogTWFwcGluZ3Mgb2Yg dGhlIGd1ZXN0IGFyZSBub3JtYWxseSB1bmRvbmUgYnkgeGNfZG9tX3VubWFwX2FsbAotICAgICAq IChkaXJlY3RseSBvciB2aWEgeGNfZG9tX3JlbGVhc2UpLiAgV2UgZG8gbm90IGV4cGxpY2l0bHkg Y2xlYXIKLSAgICAgKiB0aGVzZSBiZWNhdXNlIGluIGZhY3QgdGhhdCBoYXBwZW5zIG9ubHkgYXQg dGhlIGVuZCBvZgotICAgICAqIHhjX2RvbV9ib290X2ltYWdlLCBhdCB3aGljaCB0aW1lIGFsbCBv ZiB0aGVzZSBFTEYgbG9hZGluZwotICAgICAqIGZ1bmN0aW9ucyBoYXZlIHJldHVybmVkLiAgTm8g cmVsZXZhbnQgc3RydWN0IGVsZl9iaW5hcnkqCi0gICAgICogZXNjYXBlcyB0aGlzIGZpbGUuCi0g ICAgICovCi0KLSAgICB4Y19lbGZfc2V0X2xvZ2ZpbGUoZG9tLT54Y2gsICZzeW1zLCAxKTsKLQot ICAgIHN5bXRhYiA9IGRvbS0+YnNkX3N5bXRhYl9zdGFydCArIHNpemVvZih1bnNpZ25lZCk7Ci0g ICAgbWF4YWRkciA9IGVsZl9yb3VuZF91cCgmc3ltcywgc3ltdGFiICsgZWxmX3NpemUoJnN5bXMs IHN5bXMuZWhkcikgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxmX3NoZHJfY291bnQo JnN5bXMpICogZWxmX3NpemUoJnN5bXMsIHNoZHIpKTsKLQotICAgIERPTVBSSU5URigiJXM6IGJz ZF9zeW10YWJfc3RhcnQ9JSIgUFJJeDY0ICIsIGtlcm5lbC5lbmQ9MHglIiBQUkl4NjQKLSAgICAg ICAgICAgICAgIiAtLSBzeW10YWI9MHglIiBQUkl4NjQgIiwgbWF4YWRkcj0weCUiIFBSSXg2NCAi IiwKLSAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBkb20tPmJzZF9zeW10YWJfc3RhcnQsIGRv bS0+a2VybmVsX3NlZy52ZW5kLAotICAgICAgICAgICAgICBzeW10YWIsIG1heGFkZHIpOwotCi0g ICAgY291bnQgPSBlbGZfc2hkcl9jb3VudCgmc3ltcyk7Ci0gICAgLyogZWxmX3NoZHJfY291bnQg Z3VhcmFudGVlcyB0aGF0IGNvdW50IGlzIHJlYXNvbmFibGUgKi8KLQotICAgIHN0cnRhYl9yZWZl cmVuY2VkID0geGNfZG9tX21hbGxvYyhkb20sIGJpdG1hcF9zaXplKGNvdW50KSk7Ci0gICAgaWYg KCBzdHJ0YWJfcmVmZXJlbmNlZCA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGJp dG1hcF9jbGVhcihzdHJ0YWJfcmVmZXJlbmNlZCwgY291bnQpOwotICAgIC8qIE5vdGUgdGhlIHN5 bXRhYnMgQGggbGlua2VkIHRvIGJ5IGFueSBzdHJ0YWIgQGkuICovCi0gICAgZm9yICggaSA9IDA7 IGkgPCBjb3VudDsgaSsrICkKLSAgICB7Ci0gICAgICAgIHNoZHIyID0gZWxmX3NoZHJfYnlfaW5k ZXgoJnN5bXMsIGkpOwotICAgICAgICBpZiAoIGVsZl91dmFsKCZzeW1zLCBzaGRyMiwgc2hfdHlw ZSkgPT0gU0hUX1NZTVRBQiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGggPSBlbGZfdXZhbCgm c3ltcywgc2hkcjIsIHNoX2xpbmspOwotICAgICAgICAgICAgaWYgKGggPCBjb3VudCkKLSAgICAg ICAgICAgICAgICBzZXRfYml0KGgsIHN0cnRhYl9yZWZlcmVuY2VkKTsKLSAgICAgICAgfQotICAg IH0KLQotICAgIGZvciAoIGggPSAwOyBoIDwgY291bnQ7IGgrKyApCi0gICAgewotICAgICAgICBz aGRyID0gZWxmX3NoZHJfYnlfaW5kZXgoJnN5bXMsIGgpOwotICAgICAgICBpZiAoICFlbGZfYWNj ZXNzX29rKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksIDEpICkKLSAgICAgICAgICAgIC8q IGlucHV0IGhhcyBhbiBpbnNhbmUgc2VjdGlvbiBoZWFkZXIgY291bnQgZmllbGQgKi8KLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICB0eXBlID0gZWxmX3V2YWwoJnN5bXMsIHNoZHIsIHNoX3R5 cGUpOwotICAgICAgICBpZiAoIHR5cGUgPT0gU0hUX1NUUlRBQiApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIC8qIFNraXAgc3ltdGFiIEBoIGlmIHdlIGZvdW5kIG5vIGNvcnJlc3BvbmRpbmcgc3Ry dGFiIEBpLiAqLwotICAgICAgICAgICAgaWYgKCAhdGVzdF9iaXQoaCwgc3RydGFiX3JlZmVyZW5j ZWQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIGVsZl82NGJpdCgmc3lt cykgKQotICAgICAgICAgICAgICAgICAgICBlbGZfc3RvcmVfZmllbGQoZWxmLCBzaGRyLCBlNjQu c2hfb2Zmc2V0LCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg IGVsZl9zdG9yZV9maWVsZChlbGYsIHNoZHIsIGUzMi5zaF9vZmZzZXQsIDApOwotICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg KCAodHlwZSA9PSBTSFRfU1RSVEFCKSB8fCAodHlwZSA9PSBTSFRfU1lNVEFCKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIC8qIE1hbmdsZWQgdG8gYmUgYmFzZWQgb24gRUxGIGhlYWRlciBsb2Nh dGlvbi4gKi8KLSAgICAgICAgICAgIGlmICggZWxmXzY0Yml0KCZzeW1zKSApCi0gICAgICAgICAg ICAgICAgZWxmX3N0b3JlX2ZpZWxkKGVsZiwgc2hkciwgZTY0LnNoX29mZnNldCwgbWF4YWRkciAt IHN5bXRhYik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZWxmX3N0b3JlX2Zp ZWxkKGVsZiwgc2hkciwgZTMyLnNoX29mZnNldCwgbWF4YWRkciAtIHN5bXRhYik7Ci0gICAgICAg ICAgICBzaXplID0gZWxmX3V2YWwoJnN5bXMsIHNoZHIsIHNoX3NpemUpOwotICAgICAgICAgICAg bWF4YWRkciA9IGVsZl9yb3VuZF91cCgmc3ltcywgbWF4YWRkciArIHNpemUpOwotICAgICAgICAg ICAgdGFibGVzKys7Ci0gICAgICAgICAgICBET01QUklOVEYoIiVzOiBoPSV1ICVzLCBzaXplPTB4 JXp4LCBtYXhhZGRyPTB4JSIgUFJJeDY0ICIiLAotICAgICAgICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXywgaCwKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IFNIVF9TWU1UQUIgPyAi c3ltdGFiIiA6ICJzdHJ0YWIiLAotICAgICAgICAgICAgICAgICAgICAgIHNpemUsIG1heGFkZHIp OwotCi0gICAgICAgICAgICBzaGRyMiA9IGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgaCk7Ci0gICAg ICAgICAgICBlbGZfbWVtY3B5X3NhZmUoZWxmLCBlbGZfc2VjdGlvbl9zdGFydCgmc3ltcywgc2hk ciksCi0gICAgICAgICAgICAgICAgICAgZWxmX3NlY3Rpb25fc3RhcnQoZWxmLCBzaGRyMiksCi0g ICAgICAgICAgICAgICAgICAgc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOYW1lIGlz IE5VTEwuICovCi0gICAgICAgIGlmICggZWxmXzY0Yml0KCZzeW1zKSApCi0gICAgICAgICAgICBl bGZfc3RvcmVfZmllbGQoZWxmLCBzaGRyLCBlNjQuc2hfbmFtZSwgMCk7Ci0gICAgICAgIGVsc2UK LSAgICAgICAgICAgIGVsZl9zdG9yZV9maWVsZChlbGYsIHNoZHIsIGUzMi5zaF9uYW1lLCAwKTsK LSAgICB9Ci0KLSAgICBpZiAoIGVsZl9jaGVja19icm9rZW4oJnN5bXMpICkKLSAgICAgICAgRE9N UFJJTlRGKCIlczogc3ltYm9scyBFTEYgYnJva2VuOiAlcyIsIF9fRlVOQ1RJT05fXywKLSAgICAg ICAgICAgICAgICAgIGVsZl9jaGVja19icm9rZW4oJnN5bXMpKTsKLSAgICBpZiAoIGVsZl9jaGVj a19icm9rZW4oZWxmKSApCi0gICAgICAgIERPTVBSSU5URigiJXM6IEVMRiBicm9rZW46ICVzIiwg X19GVU5DVElPTl9fLAotICAgICAgICAgICAgICAgICAgZWxmX2NoZWNrX2Jyb2tlbihlbGYpKTsK LQotICAgIGlmICggdGFibGVzID09IDAgKQotICAgIHsKLSAgICAgICAgRE9NUFJJTlRGKCIlczog bm8gc3ltYm9sIHRhYmxlIHByZXNlbnQiLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICBkb20tPmJz ZF9zeW10YWJfc3RhcnQgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1 cm4gMDsKLX0KLQogc3RhdGljIGVsZl9lcnJvcnN0YXR1cyB4Y19kb21fcGFyc2VfZWxmX2tlcm5l bChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAgLyoKICAgICAgKiBUaGlzIGZ1bmN0aW9u IHNvbWV0aW1lcyByZXR1cm5zIC0xIGZvciBlcnJvciBhbmQgc29tZXRpbWVzCkBAIC0zODUsOSAr MTg3LDYgQEAgc3RhdGljIGVsZl9lcnJvcnN0YXR1cyB4Y19kb21fcGFyc2VfZWxmX2tlcm5lbChz dHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAgZG9tLT5rZXJuZWxfc2VnLnZzdGFydCA9IGRv bS0+cGFybXMudmlydF9rc3RhcnQ7CiAgICAgZG9tLT5rZXJuZWxfc2VnLnZlbmQgICA9IGRvbS0+ cGFybXMudmlydF9rZW5kOwogCi0gICAgaWYgKCBkb20tPnBhcm1zLmJzZF9zeW10YWIgKQotICAg ICAgICB4Y19kb21fbG9hZF9lbGZfc3ltdGFiKGRvbSwgZWxmLCAwKTsKLQogICAgIGRvbS0+Z3Vl c3RfdHlwZSA9IHhjX2RvbV9ndWVzdF90eXBlKGRvbSwgZWxmKTsKICAgICBET01QUklOVEYoIiVz OiAlczogMHglIiBQUkl4NjQgIiAtPiAweCUiIFBSSXg2NCAiIiwKICAgICAgICAgICAgICAgX19G VU5DVElPTl9fLCBkb20tPmd1ZXN0X3R5cGUsCkBAIC00MjIsOCArMjIxLDYgQEAgc3RhdGljIGVs Zl9lcnJvcnN0YXR1cyB4Y19kb21fbG9hZF9lbGZfa2VybmVsKHN0cnVjdCB4Y19kb21faW1hZ2Ug KmRvbSkKICAgICAgICAgRE9NUFJJTlRGKCIlczogZmFpbGVkIHRvIGxvYWQgZWxmIGJpbmFyeSIs IF9fRlVOQ1RJT05fXyk7CiAgICAgICAgIHJldHVybiByYzsKICAgICB9Ci0gICAgaWYgKCBkb20t PnBhcm1zLmJzZF9zeW10YWIgKQotICAgICAgICB4Y19kb21fbG9hZF9lbGZfc3ltdGFiKGRvbSwg ZWxmLCAxKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9saWJl bGYvbGliZWxmLWxvYWRlci5jIGIveGVuL2NvbW1vbi9saWJlbGYvbGliZWxmLWxvYWRlci5jCmlu ZGV4IDZmNDJiZWEuLjRkM2FlNGQgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vbGliZWxmL2xpYmVs Zi1sb2FkZXIuYworKysgYi94ZW4vY29tbW9uL2xpYmVsZi9saWJlbGYtbG9hZGVyLmMKQEAgLTIx LDEyICsyMSwxNSBAQAogCiAjaW5jbHVkZSAibGliZWxmLXByaXZhdGUuaCIKIAorLyogTnVtYmVy IG9mIHNlY3Rpb24gaGVhZGVyIG5lZWRlZCBpbiBvcmRlciB0byBmaXQgdGhlIFNZTVRBQiBhbmQg U1RSVEFCLiAqLworI2RlZmluZSBFTEZfQlNEU1lNX1NFQ1RJT05TIDMKKwogLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCiAKIGVsZl9lcnJvcnN0YXR1cyBlbGZfaW5pdChzdHJ1Y3QgZWxmX2JpbmFyeSAq ZWxmLCBjb25zdCBjaGFyICppbWFnZV9pbnB1dCwgc2l6ZV90IHNpemUpCiB7CiAgICAgRUxGX0hB TkRMRV9ERUNMKGVsZl9zaGRyKSBzaGRyOwotICAgIHVpbnQ2NF90IGksIGNvdW50LCBzZWN0aW9u LCBvZmZzZXQ7CisgICAgdWludDY0X3QgaSwgY291bnQsIHNlY3Rpb24sIG9mZnNldCwgbGluazsK IAogICAgIGlmICggIWVsZl9pc19lbGZiaW5hcnkoaW1hZ2VfaW5wdXQsIHNpemUpICkKICAgICB7 CkBAIC03OSw4ICs4MiwxNCBAQCBlbGZfZXJyb3JzdGF0dXMgZWxmX2luaXQoc3RydWN0IGVsZl9i aW5hcnkgKmVsZiwgY29uc3QgY2hhciAqaW1hZ2VfaW5wdXQsIHNpemVfdAogICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgIGlmICggZWxmX3V2YWwoZWxmLCBzaGRyLCBzaF90eXBlKSAhPSBTSFRf U1lNVEFCICkKICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGxpbmsgPSBlbGZfdXZh bChlbGYsIHNoZHIsIHNoX2xpbmspOworICAgICAgICBpZiAoIGxpbmsgPT0gU0hOX1VOREVGIHx8 IGxpbmsgPj0gZWxmX3NoZHJfY291bnQoZWxmKSApCisgICAgICAgICAgICAvKiBvdXQtb2YtYm91 bmRzIGxpbmsgdmFsdWUuICovCisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBlbGYtPnN5 bV90YWIgPSBzaGRyOwotICAgICAgICBzaGRyID0gZWxmX3NoZHJfYnlfaW5kZXgoZWxmLCBlbGZf dXZhbChlbGYsIHNoZHIsIHNoX2xpbmspKTsKKyAgICAgICAgc2hkciA9IGVsZl9zaGRyX2J5X2lu ZGV4KGVsZiwgbGluayk7CiAgICAgICAgIGlmICggIUVMRl9IQU5ETEVfVkFMSUQoc2hkcikgKQog ICAgICAgICB7CiAgICAgICAgICAgICBlbGYtPnN5bV90YWIgPSBFTEZfSU5WQUxJRF9IQU5ETEUo ZWxmX3NoZHIpOwpAQCAtMTUzLDEwICsxNjIsMTIgQEAgdm9pZCBlbGZfcGFyc2VfYnNkc3ltcyhz dHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCB1aW50NjRfdCBwc3RhcnQpCiB7CiAgICAgdWludDY0X3Qg c3o7CiAgICAgRUxGX0hBTkRMRV9ERUNMKGVsZl9zaGRyKSBzaGRyOwotICAgIHVuc2lnbmVkIGks IHR5cGU7CiAKICAgICBpZiAoICFFTEZfSEFORExFX1ZBTElEKGVsZi0+c3ltX3RhYikgKQorICAg IHsKKyAgICAgICAgZWxmX21hcmtfYnJva2VuKGVsZiwgImludmFsaWQgRUxGIGhhbmRsZSBmb3Ig c3ltdGFiIHNlY3Rpb24iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHBzdGFydCA9 IGVsZl9yb3VuZF91cChlbGYsIHBzdGFydCk7CiAKQEAgLTE2NCwyMSArMTc1LDI5IEBAIHZvaWQg ZWxmX3BhcnNlX2JzZHN5bXMoc3RydWN0IGVsZl9iaW5hcnkgKmVsZiwgdWludDY0X3QgcHN0YXJ0 KQogICAgIHN6ID0gc2l6ZW9mKHVpbnQzMl90KTsKIAogICAgIC8qIFNwYWNlIGZvciB0aGUgZWxm IGFuZCBlbGYgc2VjdGlvbiBoZWFkZXJzICovCi0gICAgc3ogKz0gKGVsZl91dmFsKGVsZiwgZWxm LT5laGRyLCBlX2Voc2l6ZSkgKwotICAgICAgICAgICBlbGZfc2hkcl9jb3VudChlbGYpICogZWxm X3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKSk7CisgICAgc3ogKz0gZWxmX3V2YWwo ZWxmLCBlbGYtPmVoZHIsIGVfZWhzaXplKSArCisgICAgICAgICAgRUxGX0JTRFNZTV9TRUNUSU9O UyAqIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3NoZW50c2l6ZSk7CiAgICAgc3ogPSBlbGZf cm91bmRfdXAoZWxmLCBzeik7CiAKKyAgICAvKgorICAgICAqIE5vIG5lZWQgdG8gc2VhcmNoIGZv ciB0aGUgc3ltdGFiIHNlY3Rpb24gaGVhZGVyIGFnYWluLCBpdCdzIGhhbmRsZXIKKyAgICAgKiBp cyBzdG9yZWQgaW4gZWxmLT5zeW1fdGFiIGJ5IHRoZSBlbGZfaW5pdCBmdW5jdGlvbi4KKyAgICAg Ki8KKwogICAgIC8qIFNwYWNlIGZvciB0aGUgc3ltYm9sIGFuZCBzdHJpbmcgdGFibGVzLiAqLwot ICAgIGZvciAoIGkgPSAwOyBpIDwgZWxmX3NoZHJfY291bnQoZWxmKTsgaSsrICkKLSAgICB7Ci0g ICAgICAgIHNoZHIgPSBlbGZfc2hkcl9ieV9pbmRleChlbGYsIGkpOwotICAgICAgICBpZiAoICFl bGZfYWNjZXNzX29rKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2hkciksIDEpICkKLSAgICAgICAg ICAgIC8qIGlucHV0IGhhcyBhbiBpbnNhbmUgc2VjdGlvbiBoZWFkZXIgY291bnQgZmllbGQgKi8K LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0eXBlID0gZWxmX3V2YWwoZWxmLCBzaGRyLCBz aF90eXBlKTsKLSAgICAgICAgaWYgKCAodHlwZSA9PSBTSFRfU1RSVEFCKSB8fCAodHlwZSA9PSBT SFRfU1lNVEFCKSApCi0gICAgICAgICAgICBzeiA9IGVsZl9yb3VuZF91cChlbGYsIHN6ICsgZWxm X3V2YWwoZWxmLCBzaGRyLCBzaF9zaXplKSk7Ci0gICAgfQorICAgIHN6ID0gZWxmX3JvdW5kX3Vw KGVsZiwgc3ogKyBlbGZfdXZhbChlbGYsIGVsZi0+c3ltX3RhYiwgc2hfc2l6ZSkpOworCisgICAg c2hkciA9IGVsZl9zaGRyX2J5X2luZGV4KGVsZiwgZWxmX3V2YWwoZWxmLCBlbGYtPnN5bV90YWIs IHNoX2xpbmspKTsKKworICAgIGlmICggIWVsZl9hY2Nlc3Nfb2soZWxmLCBFTEZfSEFORExFX1BU UlZBTChzaGRyKSwgMSkgKQorICAgICAgICAvKiBpbnB1dCBoYXMgYW4gaW5zYW5lIHNlY3Rpb24g aGVhZGVyIGNvdW50IGZpZWxkICovCisgICAgICAgIHJldHVybjsKKworICAgIGlmICggZWxmX3V2 YWwoZWxmLCBzaGRyLCBzaF90eXBlKSAhPSBTSFRfU1RSVEFCICkKKyAgICAgICAgLyogSW52YWxp ZCBzeW10YWIgLT4gc3RydGFiIGxpbmsgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgc3ogPSBl bGZfcm91bmRfdXAoZWxmLCBzeiArIGVsZl91dmFsKGVsZiwgc2hkciwgc2hfc2l6ZSkpOwogCiAg ICAgZWxmLT5ic2Rfc3ltdGFiX3BzdGFydCA9IHBzdGFydDsKICAgICBlbGYtPmJzZF9zeW10YWJf cGVuZCAgID0gcHN0YXJ0ICsgc3o7CkBAIC0xODYsNzkgKzIwNSwyMTEgQEAgdm9pZCBlbGZfcGFy c2VfYnNkc3ltcyhzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLCB1aW50NjRfdCBwc3RhcnQpCiAKIHN0 YXRpYyB2b2lkIGVsZl9sb2FkX2JzZHN5bXMoc3RydWN0IGVsZl9iaW5hcnkgKmVsZikKIHsKLSAg ICBFTEZfSEFORExFX0RFQ0woZWxmX2VoZHIpIHN5bV9laGRyOwotICAgIHVuc2lnbmVkIGxvbmcg c3o7Ci0gICAgZWxmX3B0cnZhbCBtYXh2YTsKLSAgICBlbGZfcHRydmFsIHN5bWJhc2U7Ci0gICAg ZWxmX3B0cnZhbCBzeW10YWJfYWRkcjsKLSAgICBFTEZfSEFORExFX0RFQ0woZWxmX3NoZHIpIHNo ZHI7Ci0gICAgdW5zaWduZWQgaSwgdHlwZTsKKyAgICAvKgorICAgICAqIEhlYWRlciB0aGF0IGlz IHBsYWNlZCBhdCB0aGUgZW5kIG9mIHRoZSBrZXJuZWwgYW5kIGFsbG93cworICAgICAqIHRoZSBP UyB0byBmaW5kIHdoZXJlIHRoZSBzeW10YWIgYW5kIHN0cnRhYiBoYXZlIGJlZW4gbG9hZGVkLgor ICAgICAqIEl0IG1pbWljcyBhIHZhbGlkIEVMRiBmaWxlIGhlYWRlciwgYWx0aG91Z2ggaXQgb25s eSBjb250YWlucworICAgICAqIGEgc3ltdGFiIGFuZCBhIHN0cnRhYiBzZWN0aW9uLiBUaGUgbGF5 b3V0IGluIG1lbW9yeSBpcyB0aGUKKyAgICAgKiBmb2xsb3dpbmc6CisgICAgICoKKyAgICAgKiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAg ICB8CisgICAgICogfCBLRVJORUwgICAgICAgICAgICAgICAgIHwKKyAgICAgKiB8ICAgICAgICAg ICAgICAgICAgICAgICAgfAorICAgICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHBlbmQK KyAgICAgKiB8IEFMSUdOTUVOVCAgICAgICAgICAgICAgfAorICAgICAqICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rIGJzZF9zeW10YWJfcHN0YXJ0CisgICAgICogfCAgICAgICAgICAgICAgICAg ICAgICAgIHwKKyAgICAgKiB8IHNpemUgICAgICAgICAgICAgICAgICAgfCBic2Rfc3ltdGFiX3Bl bmQgLSBic2Rfc3ltdGFiX3BzdGFydAorICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAgICB8 CisgICAgICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgYnNkX3N5bXRhYl9wc3RhcnQgKyA0 CisgICAgICogfCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiB8IEVMRiBoZWFkZXIg ICAgICAgICAgICAgfAorICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICog Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiB8ICAgICAgICAgICAgICAgICAgICAg ICAgfAorICAgICAqIHwgRUxGIHNlY3Rpb24gaGVhZGVyIDAgICB8IFVuZGVmaW5lZCBzZWN0aW9u IGhlYWRlcgorICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAor ICAgICAqIHwgRUxGIHNlY3Rpb24gaGVhZGVyIDEgICB8IFNZTVRBQiBzZWN0aW9uIGhlYWRlcgor ICAgICAqIHwgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKKyAgICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqIHwg RUxGIHNlY3Rpb24gaGVhZGVyIDIgICB8IFNUUlRBQiBzZWN0aW9uIGhlYWRlcgorICAgICAqIHwg ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKKyAgICAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqIHwgU1lNVEFCICAg ICAgICAgICAgICAgICB8CisgICAgICogfCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg KiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqIHwgICAgICAgICAgICAgICAgICAg ICAgICB8CisgICAgICogfCBTVFJUQUIgICAgICAgICAgICAgICAgIHwKKyAgICAgKiB8ICAgICAg ICAgICAgICAgICAgICAgICAgfAorICAgICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIGJz ZF9zeW10YWJfcGVuZAorICAgICAqCisgICAgICogTkI6IGFjY29yZGluZyB0byB0aGUgRUxGIHNw ZWMgdGhlcmUncyBvbmx5IE9ORSBzeW10YWIgcGVyIEVMRgorICAgICAqIGZpbGUsIGFuZCBhY2Nv cmRpbmdseSB3ZSB3aWxsIG9ubHkgbG9hZCB0aGUgY29ycmVzcG9uZGluZworICAgICAqIHN0cnRh Yiwgc28gd2Ugb25seSBuZWVkIHRocmVlIHNlY3Rpb24gaGVhZGVycyBpbiBvdXIgZmFrZSBFTEYK KyAgICAgKiBoZWFkZXIgKGZpcnN0IHNlY3Rpb24gaGVhZGVyIGlzIGFsd2F5cyB0aGUgdW5kZWZp bmVkIHNlY3Rpb24pLgorICAgICAqLworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQzMl90IHNp emU7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBlbGZfZWhkciBoZWFkZXI7CisgICAg ICAgICAgICBlbGZfc2hkciBzZWN0aW9uW0VMRl9CU0RTWU1fU0VDVElPTlNdOworICAgICAgICB9 IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVsZl9oZWFkZXI7CisgICAgfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKSBoZWFkZXI7CisKKyAgICBFTEZfSEFORExFX0RFQ0woZWxmX2VoZHIpIGhlYWRl cl9oYW5kbGU7CisgICAgdW5zaWduZWQgbG9uZyBzaGRyX3NpemU7CisgICAgRUxGX0hBTkRMRV9E RUNMKGVsZl9zaGRyKSBzZWN0aW9uX2hhbmRsZTsKKyAgICB1bnNpZ25lZCBpbnQgbGluaywgcmM7 CisgICAgZWxmX3B0cnZhbCBoZWFkZXJfYmFzZTsKKyAgICBlbGZfcHRydmFsIGVsZl9oZWFkZXJf YmFzZTsKKyAgICBlbGZfcHRydmFsIHN5bXRhYl9iYXNlOworICAgIGVsZl9wdHJ2YWwgc3RydGFi X2Jhc2U7CiAKICAgICBpZiAoICFlbGYtPmJzZF9zeW10YWJfcHN0YXJ0ICkKICAgICAgICAgcmV0 dXJuOwogCi0jZGVmaW5lIGVsZl9oZHJfZWxtKF9lbGYsIF9oZHIsIF9lbG0sIF92YWwpICAgICBc Ci1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg aWYgKCBlbGZfNjRiaXQoX2VsZikgKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVs Zl9zdG9yZV9maWVsZChfZWxmLCBfaGRyLCBlNjQuX2VsbSwgX3ZhbCk7ICBcCi0gICAgZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsZl9zdG9y ZV9maWVsZChfZWxmLCBfaGRyLCBlMzIuX2VsbSwgX3ZhbCk7ICBcCisjZGVmaW5lIGVsZl9zdG9y ZV9maWVsZF9iaXRuZXNzKF9lbGYsIF9oZHIsIF9lbG0sIF92YWwpICAgICAgICAgICAgIFwKK2Rv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIGlmICggZWxmXzY0Yml0KF9lbGYpICkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsZl9zdG9yZV9maWVsZChfZWxmLCBf aGRyLCBlNjQuX2VsbSwgX3ZhbCk7ICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICBlbGZfc3RvcmVfZmllbGQoX2VsZiwgX2hkciwgZTMyLl9lbG0sIF92YWwpOyAgICAgICAg ICAgICAgICBcCiB9IHdoaWxlICggMCApCiAKLSAgICBzeW1iYXNlID0gZWxmX2dldF9wdHIoZWxm LCBlbGYtPmJzZF9zeW10YWJfcHN0YXJ0KTsKLSAgICBzeW10YWJfYWRkciA9IG1heHZhID0gc3lt YmFzZSArIHNpemVvZih1aW50MzJfdCk7Ci0KLSAgICAvKiBTZXQgdXAgRWxmIGhlYWRlci4gKi8K LSAgICBzeW1fZWhkciA9IEVMRl9NQUtFX0hBTkRMRShlbGZfZWhkciwgc3ltdGFiX2FkZHIpOwot ICAgIHN6ID0gZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfZWhzaXplKTsKLSAgICBlbGZfbWVt Y3B5X3NhZmUoZWxmLCBFTEZfSEFORExFX1BUUlZBTChzeW1fZWhkciksIEVMRl9IQU5ETEVfUFRS VkFMKGVsZi0+ZWhkciksIHN6KTsKLSAgICBtYXh2YSArPSBzejsgLyogbm8gcm91bmQgdXAgKi8K LQotICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfcGhvZmYsIDApOwotICAgIGVsZl9o ZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfc2hvZmYsIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBl X2Voc2l6ZSkpOwotICAgIGVsZl9oZHJfZWxtKGVsZiwgc3ltX2VoZHIsIGVfcGhlbnRzaXplLCAw KTsKLSAgICBlbGZfaGRyX2VsbShlbGYsIHN5bV9laGRyLCBlX3BobnVtLCAwKTsKLQotICAgIC8q IENvcHkgRWxmIHNlY3Rpb24gaGVhZGVycy4gKi8KLSAgICBzaGRyID0gRUxGX01BS0VfSEFORExF KGVsZl9zaGRyLCBtYXh2YSk7Ci0gICAgc3ogPSBlbGZfc2hkcl9jb3VudChlbGYpICogZWxmX3V2 YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKTsKLSAgICBlbGZfbWVtY3B5X3NhZmUoZWxm LCBFTEZfSEFORExFX1BUUlZBTChzaGRyKSwKLSAgICAgICAgICAgICAgICAgICAgRUxGX0lNQUdF X0JBU0UoZWxmKSArIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3Nob2ZmKSwKLSAgICAgICAg ICAgICAgICAgICAgc3opOwotICAgIG1heHZhID0gZWxmX3JvdW5kX3VwKGVsZiwgKHVuc2lnbmVk IGxvbmcpbWF4dmEgKyBzeik7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IGVsZl9zaGRyX2NvdW50 KGVsZik7IGkrKyApCisjZGVmaW5lIFNZTVRBQl9JTkRFWCAgICAxCisjZGVmaW5lIFNUUlRBQl9J TkRFWCAgICAyCisKKyAgICAvKiBBbGxvdyBlbGZfbWVtY3B5X3NhZmUgdG8gd3JpdGUgdG8gc3lt Ym9sX2hlYWRlci4gKi8KKyAgICBlbGYtPmNhbGxlcl94ZGVzdF9iYXNlID0gJmhlYWRlcjsKKyAg ICBlbGYtPmNhbGxlcl94ZGVzdF9zaXplID0gc2l6ZW9mKGhlYWRlcik7CisKKyAgICAvKgorICAg ICAqIENhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIHZhcmlvdXMgZWxlbWVudHMgaW4gR1VF U1QgTUVNT1JZIFNQQUNFLgorICAgICAqIFRoaXMgYWRkcmVzc2VzIE1VU1Qgb25seSBiZSB1c2Vk IHdpdGggZWxmX2xvYWRfaW1hZ2UuCisgICAgICoKKyAgICAgKiBOQjogc3RydGFiX2Jhc2UgY2Fu bm90IGJlIGNhbGN1bGF0ZWQgYXQgdGhpcyBwb2ludCBiZWNhdXNlIHdlIGRvbid0CisgICAgICog a25vdyB0aGUgc2l6ZSBvZiB0aGUgc3ltdGFiIHlldCwgYW5kIHRoZSBzdHJ0YWIgd2lsbCBiZSBw bGFjZWQgYWZ0ZXIgaXQuCisgICAgICovCisgICAgaGVhZGVyX2Jhc2UgPSBlbGZfZ2V0X3B0cihl bGYsIGVsZi0+YnNkX3N5bXRhYl9wc3RhcnQpOworICAgIGVsZl9oZWFkZXJfYmFzZSA9IGVsZl9n ZXRfcHRyKGVsZiwgZWxmLT5ic2Rfc3ltdGFiX3BzdGFydCkgKworICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZih1aW50MzJfdCk7CisgICAgc3ltdGFiX2Jhc2UgPSBlbGZfcm91bmRfdXAoZWxm LCBoZWFkZXJfYmFzZSArIHNpemVvZihoZWFkZXIpKTsKKworICAgIC8qIEZpbGwgdGhlIEVMRiBo ZWFkZXIsIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYgaGVhZGVyLiAqLworICAgIGhlYWRl cl9oYW5kbGUgPSBFTEZfTUFLRV9IQU5ETEUoZWxmX2VoZHIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVMRl9SRUFMUFRSMlBUUlZBTCgmaGVhZGVyLmVsZl9oZWFkZXIuaGVhZGVy KSk7CisgICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoaGVhZGVyX2hh bmRsZSksCisgICAgICAgICAgICAgICAgICAgIEVMRl9IQU5ETEVfUFRSVkFMKGVsZi0+ZWhkciks CisgICAgICAgICAgICAgICAgICAgIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX2Voc2l6ZSkp OworCisgICAgLyogU2V0IHRoZSBvZmZzZXQgdG8gdGhlIHNoZHIgYXJyYXkuICovCisgICAgZWxm X3N0b3JlX2ZpZWxkX2JpdG5lc3MoZWxmLCBoZWFkZXJfaGFuZGxlLCBlX3Nob2ZmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKHR5cGVvZihoZWFkZXIuZWxmX2hlYWRlciks IHNlY3Rpb24pKTsKKworICAgIC8qIFNldCB0aGUgcmlnaHQgbnVtYmVyIG9mIHNlY3Rpb24gaGVh ZGVycy4gKi8KKyAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIGhlYWRlcl9oYW5kbGUs IGVfc2hudW0sIEVMRl9CU0RTWU1fU0VDVElPTlMpOworCisgICAgLyogQ2xlYXIgYSBjb3VwbGUg b2YgZmllbGRzIHdlIGRvbid0IHVzZS4gKi8KKyAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhl bGYsIGhlYWRlcl9oYW5kbGUsIGVfcGhvZmYsIDApOworICAgIGVsZl9zdG9yZV9maWVsZF9iaXRu ZXNzKGVsZiwgaGVhZGVyX2hhbmRsZSwgZV9waGVudHNpemUsIDApOworICAgIGVsZl9zdG9yZV9m aWVsZF9iaXRuZXNzKGVsZiwgaGVhZGVyX2hhbmRsZSwgZV9waG51bSwgMCk7CisKKyAgICAvKiBa ZXJvIHRoZSB1bmRlZmluZWQgc2VjdGlvbi4gKi8KKyAgICBzZWN0aW9uX2hhbmRsZSA9IEVMRl9N QUtFX0hBTkRMRShlbGZfc2hkciwKKyAgICAgICAgICAgICAgICAgICAgIEVMRl9SRUFMUFRSMlBU UlZBTCgmaGVhZGVyLmVsZl9oZWFkZXIuc2VjdGlvbltTSE5fVU5ERUZdKSk7CisgICAgc2hkcl9z aXplID0gZWxmX3V2YWwoZWxmLCBlbGYtPmVoZHIsIGVfc2hlbnRzaXplKTsKKyAgICBlbGZfbWVt c2V0X3NhZmUoZWxmLCBFTEZfSEFORExFX1BUUlZBTChzZWN0aW9uX2hhbmRsZSksIDAsIHNoZHJf c2l6ZSk7CisKKyAgICAvKgorICAgICAqIFRoZSBzeW10YWIgc2VjdGlvbiBoZWFkZXIgaXMgZ29p bmcgdG8gcmVzaWRlIGluIHNlY3Rpb25bU1lNVEFCX0lOREVYXSwKKyAgICAgKiB3aGlsZSB0aGUg Y29ycmVzcG9uZGluZyBzdHJ0YWIgaXMgZ29pbmcgdG8gYmUgcGxhY2VkIGluCisgICAgICogc2Vj dGlvbltTVFJUQUJfSU5ERVhdLiBzaF9vZmZzZXQgaXMgbWFuZ2xlZCBzbyBpdCBwb2ludHMgdG8g dGhlIG9mZnNldAorICAgICAqIHdoZXJlIHRoZSBzZWN0aW9ucyBhcmUgYWN0dWFsbHkgbG9hZGVk IChyZWxhdGl2ZSB0byB0aGUgRUxGIGhlYWRlcgorICAgICAqIGxvY2F0aW9uKS4KKyAgICAgKi8K KyAgICBzZWN0aW9uX2hhbmRsZSA9IEVMRl9NQUtFX0hBTkRMRShlbGZfc2hkciwKKyAgICAgICAg ICAgICAgICBFTEZfUkVBTFBUUjJQVFJWQUwoJmhlYWRlci5lbGZfaGVhZGVyLnNlY3Rpb25bU1lN VEFCX0lOREVYXSkpOworCisgICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJW QUwoc2VjdGlvbl9oYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICBFTEZfSEFORExFX1BUUlZB TChlbGYtPnN5bV90YWIpLAorICAgICAgICAgICAgICAgICAgICBzaGRyX3NpemUpOworCisgICAg LyogQ29weSB0aGUgb3JpZ2luYWwgc2hfbGluayBmaWVsZCBiZWZvcmUgbWFuZ2xpbmcgaXQuICov CisgICAgbGluayA9IGVsZl91dmFsKGVsZiwgc2VjdGlvbl9oYW5kbGUsIHNoX2xpbmspOworCisg ICAgLyogTG9hZCBzeW10YWIgaW50byBndWVzdCBtZW1vcnkuICovCisgICAgcmMgPSBlbGZfbG9h ZF9pbWFnZShlbGYsIHN5bXRhYl9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxmX3Nl Y3Rpb25fc3RhcnQoZWxmLCBzZWN0aW9uX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAg ICBlbGZfdXZhbChlbGYsIHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGVsZl91dmFsKGVsZiwgc2VjdGlvbl9oYW5kbGUsIHNoX3NpemUpKTsKKyAgICBp ZiAoIHJjICE9IDAgKQogICAgIHsKLSAgICAgICAgZWxmX3B0cnZhbCBvbGRfc2hkcl9wOwotICAg ICAgICBlbGZfcHRydmFsIG5ld19zaGRyX3A7CisgICAgICAgIGVsZl9tYXJrX2Jyb2tlbihlbGYs ICJ1bmFibGUgdG8gbG9hZCBzeW10YWIgaW50byBndWVzdCBtZW1vcnkiKTsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KIAotICAgICAgICB0eXBlID0gZWxmX3V2YWwoZWxmLCBzaGRyLCBzaF90eXBl KTsKLSAgICAgICAgaWYgKCAodHlwZSA9PSBTSFRfU1RSVEFCKSB8fCAodHlwZSA9PSBTSFRfU1lN VEFCKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgICBlbGZfbXNnKGVsZiwgIiVzOiBzaGRyICVp IGF0IDB4JSJFTEZfUFJQVFJWQUwiIC0+IDB4JSJFTEZfUFJQVFJWQUwiXG4iLCBfX2Z1bmNfXywg aSwKLSAgICAgICAgICAgICAgICAgICAgIGVsZl9zZWN0aW9uX3N0YXJ0KGVsZiwgc2hkciksIG1h eHZhKTsKLSAgICAgICAgICAgICBzeiA9IGVsZl91dmFsKGVsZiwgc2hkciwgc2hfc2l6ZSk7Ci0g ICAgICAgICAgICAgZWxmX21lbWNweV9zYWZlKGVsZiwgbWF4dmEsIGVsZl9zZWN0aW9uX3N0YXJ0 KGVsZiwgc2hkciksIHN6KTsKLSAgICAgICAgICAgICAvKiBNYW5nbGVkIHRvIGJlIGJhc2VkIG9u IEVMRiBoZWFkZXIgbG9jYXRpb24uICovCi0gICAgICAgICAgICAgZWxmX2hkcl9lbG0oZWxmLCBz aGRyLCBzaF9vZmZzZXQsIG1heHZhIC0gc3ltdGFiX2FkZHIpOwotICAgICAgICAgICAgIG1heHZh ID0gZWxmX3JvdW5kX3VwKGVsZiwgKHVuc2lnbmVkIGxvbmcpbWF4dmEgKyBzeik7Ci0gICAgICAg IH0KLSAgICAgICAgb2xkX3NoZHJfcCA9IEVMRl9IQU5ETEVfUFRSVkFMKHNoZHIpOwotICAgICAg ICBuZXdfc2hkcl9wID0gb2xkX3NoZHJfcCArIGVsZl91dmFsKGVsZiwgZWxmLT5laGRyLCBlX3No ZW50c2l6ZSk7Ci0gICAgICAgIGlmICggbmV3X3NoZHJfcCA8PSBvbGRfc2hkcl9wICkgLyogd3Jh cHBlZCBvciBzdHVjayAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBlbGZfbWFya19icm9rZW4o ZWxmLCAiYmFkIHNlY3Rpb24gaGVhZGVyIGxlbmd0aCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIH0KLSAgICAgICAgaWYgKCAhZWxmX2FjY2Vzc19vayhlbGYsIG5ld19zaGRyX3AsIDEp ICkgLyogb3V0c2lkZSBpbWFnZSAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHNoZHIg PSBFTEZfTUFLRV9IQU5ETEUoZWxmX3NoZHIsIG5ld19zaGRyX3ApOworICAgIC8qIEFkanVzdCB0 aGUgc2hfb2Zmc2V0IGFuZCBzaF9saW5rIG9mIHRoZSBjb3BpZWQgc2VjdGlvbiBoZWFkZXIuICov CisgICAgZWxmX3N0b3JlX2ZpZWxkX2JpdG5lc3MoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfb2Zm c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXRhYl9iYXNlIC0gZWxmX2hlYWRl cl9iYXNlKTsKKyAgICBlbGZfc3RvcmVfZmllbGRfYml0bmVzcyhlbGYsIHNlY3Rpb25faGFuZGxl LCBzaF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUUlRBQl9JTkRFWCk7CisK KyAgICAvKiBDYWxjdWxhdGUgdGhlIGd1ZXN0IGFkZHJlc3Mgd2hlcmUgc3RydGFiIGlzIGxvYWRl ZC4gKi8KKyAgICBzdHJ0YWJfYmFzZSA9IGVsZl9yb3VuZF91cChlbGYsIHN5bXRhYl9iYXNlICsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZfdXZhbChlbGYsIHNlY3Rpb25faGFu ZGxlLCBzaF9zaXplKSk7CisKKyAgICAvKiBMb2FkIHN0cnRhYiBzZWN0aW9uIGhlYWRlci4gKi8K KyAgICBzZWN0aW9uX2hhbmRsZSA9IEVMRl9NQUtFX0hBTkRMRShlbGZfc2hkciwKKyAgICAgICAg ICAgIEVMRl9SRUFMUFRSMlBUUlZBTCgmaGVhZGVyLmVsZl9oZWFkZXIuc2VjdGlvbltTVFJUQUJf SU5ERVhdKSk7CisgICAgZWxmX21lbWNweV9zYWZlKGVsZiwgRUxGX0hBTkRMRV9QVFJWQUwoc2Vj dGlvbl9oYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICBFTEZfSEFORExFX1BUUlZBTChlbGZf c2hkcl9ieV9pbmRleChlbGYsIGxpbmspKSwKKyAgICAgICAgICAgICAgICAgICAgc2hkcl9zaXpl KTsKKworICAgIGlmICggZWxmX3V2YWwoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfdHlwZSkgIT0g U0hUX1NUUlRBQiApCisgICAgeworICAgICAgICBlbGZfbWFya19icm9rZW4oZWxmLCAic3RydGFi IG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogTG9hZCBzdHJ0 YWIgaW50byBndWVzdCBtZW1vcnkuICovCisgICAgcmMgPSBlbGZfbG9hZF9pbWFnZShlbGYsIHN0 cnRhYl9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZWxmX3NlY3Rpb25fc3RhcnQoZWxm LCBzZWN0aW9uX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICBlbGZfdXZhbChlbGYs IHNlY3Rpb25faGFuZGxlLCBzaF9zaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZl91 dmFsKGVsZiwgc2VjdGlvbl9oYW5kbGUsIHNoX3NpemUpKTsKKyAgICBpZiAoIHJjICE9IDAgKQor ICAgIHsKKyAgICAgICAgZWxmX21hcmtfYnJva2VuKGVsZiwgInVuYWJsZSB0byBsb2FkIHN0cnRh YiBpbnRvIGd1ZXN0IG1lbW9yeSIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLyog V3JpdGUgZG93biB0aGUgYWN0dWFsIHN5bSBzaXplLiAqLwotICAgIGVsZl9zdG9yZV92YWwoZWxm LCB1aW50MzJfdCwgc3ltYmFzZSwgbWF4dmEgLSBzeW10YWJfYWRkcik7CisgICAgZWxmX3N0b3Jl X2ZpZWxkX2JpdG5lc3MoZWxmLCBzZWN0aW9uX2hhbmRsZSwgc2hfb2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnRhYl9iYXNlIC0gZWxmX2hlYWRlcl9iYXNlKTsKKworICAg IC8qIFN0b3JlIHRoZSB3aG9sZSBzaXplIChpbmNsdWRpbmcgaGVhZGVycyBhbmQgbG9hZGVkIHNl Y3Rpb25zKS4gKi8KKyAgICBoZWFkZXIuc2l6ZSA9IHN0cnRhYl9iYXNlICsgZWxmX3V2YWwoZWxm LCBzZWN0aW9uX2hhbmRsZSwgc2hfc2l6ZSkgLQorICAgICAgICAgICAgICAgICAgZWxmX2hlYWRl cl9iYXNlOworCisgICAgLyogTG9hZCB0aGUgaGVhZGVycy4gKi8KKyAgICByYyA9IGVsZl9sb2Fk X2ltYWdlKGVsZiwgaGVhZGVyX2Jhc2UsIEVMRl9SRUFMUFRSMlBUUlZBTCgmaGVhZGVyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihoZWFkZXIpLCBzaXplb2YoaGVhZGVyKSk7Cisg ICAgaWYgKCByYyAhPSAwICkKKyAgICB7CisgICAgICAgIGVsZl9tYXJrX2Jyb2tlbihlbGYsICJ1 bmFibGUgdG8gbG9hZCBFTEYgaGVhZGVycyBpbnRvIGd1ZXN0IG1lbW9yeSIpOworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgLyogUmVtb3ZlIHBlcm1pc3Npb25zIGZyb20gZWxmX21lbWNw eV9zYWZlLiAqLworICAgIGVsZi0+Y2FsbGVyX3hkZXN0X2Jhc2UgPSBOVUxMOworICAgIGVsZi0+ Y2FsbGVyX3hkZXN0X3NpemUgPSAwOwogCi0jdW5kZWYgZWxmX2VoZHJfZWxtCisjdW5kZWYgU1lN VEFCX0lOREVYCisjdW5kZWYgU1RSVEFCX0lOREVYCisjdW5kZWYgZWxmX3N0b3JlX2ZpZWxkX2Jp dG5lc3MKIH0KIAogdm9pZCBlbGZfcGFyc2VfYmluYXJ5KHN0cnVjdCBlbGZfYmluYXJ5ICplbGYp Ci0tIAoyLjYuNCAoQXBwbGUgR2l0LTYzKQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3Rz Lnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==