From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v2 10/25] x86: NUMA: Move numa code and make it generic Date: Tue, 28 Mar 2017 21:23:18 +0530 Message-ID: <1490716413-19796-11-git-send-email-vijay.kilari@gmail.com> References: <1490716413-19796-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1490716413-19796-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBjb2Rl IGZyb20geGVuL2FyY2gveDg2L251bWEuYyB0byB4ZW4vY29tbW9uL251bWEuYwpzbyB0aGF0IGl0 IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFyY2hzLgpGZXcgZ2VuZXJpYyBzdGF0aWMgZnVuY3Rpb25z IGluIHg4Ni9udW1hLmMgaXMgbWFkZQpub24tc3RhdGljIGNvbW1vbi9udW1hLmMKClRoZSBnZW5l cmljIGNvbnRlbnRzIG9mIGhlYWRlciBmaWxlIGFzbS14ODYvbnVtYS5oCmFyZSBtb3ZlZCB0byB4 ZW4vbnVtYS5oLgoKU2lnbmVkLW9mZi1ieTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBj YXZpdW0uY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9udW1hLmMgICAgICAgIHwgNDU2IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3NyYXQuYyAg ICAgICAgfCAgIDcgKwogeGVuL2NvbW1vbi9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogeGVuL2Nv bW1vbi9udW1hLmMgICAgICAgICAgfCA0ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaCB8ICAxNSAtLQogeGVu L2luY2x1ZGUveGVuL251bWEuaCAgICAgfCAgMTggKysKIDYgZmlsZXMgY2hhbmdlZCwgNTE0IGlu c2VydGlvbnMoKyksIDQ3MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv bnVtYS5jIGIveGVuL2FyY2gveDg2L251bWEuYwppbmRleCAzYmRhYjlhLi4zM2M2ODA2IDEwMDY0 NAotLS0gYS94ZW4vYXJjaC94ODYvbnVtYS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9udW1hLmMKQEAg LTEwLDI4NiArMTAsMTMgQEAKICNpbmNsdWRlIDx4ZW4vY3R5cGUuaD4KICNpbmNsdWRlIDx4ZW4v bm9kZW1hc2suaD4KICNpbmNsdWRlIDx4ZW4vbnVtYS5oPgotI2luY2x1ZGUgPHhlbi9rZXloYW5k bGVyLmg+CiAjaW5jbHVkZSA8eGVuL3RpbWUuaD4KICNpbmNsdWRlIDx4ZW4vc21wLmg+CiAjaW5j bHVkZSA8eGVuL3Bmbi5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+Ci0jaW5jbHVkZSA8eGVuL3Nj aGVkLmg+Ci0jaW5jbHVkZSA8eGVuL3NvZnRpcnEuaD4KLQotc3RhdGljIGludCBudW1hX3NldHVw KGNoYXIgKnMpOwotY3VzdG9tX3BhcmFtKCJudW1hIiwgbnVtYV9zZXR1cCk7Ci0KLXN0cnVjdCBu b2RlX2RhdGEgbm9kZV9kYXRhW01BWF9OVU1OT0RFU107Ci0KLS8qIE1hcHBpbmcgZnJvbSBwZHgg dG8gbm9kZSBpZCAqLwotdW5zaWduZWQgaW50IG1lbW5vZGVfc2hpZnQ7Ci1zdGF0aWMgdHlwZW9m KCptZW1ub2RlbWFwKSBfbWVtbm9kZW1hcFs2NF07Ci11bnNpZ25lZCBsb25nIG1lbW5vZGVtYXBz aXplOwotdWludDhfdCAqbWVtbm9kZW1hcDsKLQotbm9kZWlkX3QgX19yZWFkX21vc3RseSBjcHVf dG9fbm9kZVtOUl9DUFVTXSA9IHsKLSAgICBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5VTUFfTk9fTk9E RQotfTsKLS8qCi0gKiBLZWVwIEJJT1MncyBDUFUybm9kZSBpbmZvcm1hdGlvbiwgc2hvdWxkIG5v dCBiZSB1c2VkIGZvciBtZW1vcnkgYWxsb2NhaW9uCi0gKi8KLW5vZGVpZF90IGFwaWNpZF90b19u b2RlW01BWF9MT0NBTF9BUElDXSA9IHsKLSAgICBbMCAuLi4gTUFYX0xPQ0FMX0FQSUMtMV0gPSBO VU1BX05PX05PREUKLX07Ci1jcHVtYXNrX3QgX19yZWFkX21vc3RseSBub2RlX3RvX2NwdW1hc2tb TUFYX05VTU5PREVTXTsKIAogbm9kZW1hc2tfdCBfX3JlYWRfbW9zdGx5IG5vZGVfb25saW5lX21h cCA9IHsgeyBbMF0gPSAxVUwgfSB9OwogCi1zdGF0aWMgYm9vbCBudW1hX29mZiA9IDA7Ci1zdGF0 aWMgYm9vbCBhY3BpX251bWEgPSAxOwotCi1ib29sIGlzX251bWFfb2ZmKHZvaWQpCi17Ci0gICAg cmV0dXJuIG51bWFfb2ZmOwotfQotCi1ib29sIGdldF9hY3BpX251bWEodm9pZCkKLXsKLSAgICBy ZXR1cm4gYWNwaV9udW1hOwotfQotCi12b2lkIHNldF9hY3BpX251bWEoYm9vbF90IHZhbCkKLXsK LSAgICBhY3BpX251bWEgPSB2YWw7Ci19Ci0KLWJvb2wgc3JhdF9kaXNhYmxlZCh2b2lkKQotewot ICAgIHJldHVybiBudW1hX29mZiB8fCBhY3BpX251bWEgPT0gMDsKLX0KLQotLyoKLSAqIEdpdmVu IGEgc2hpZnQgdmFsdWUsIHRyeSB0byBwb3B1bGF0ZSBtZW1ub2RlbWFwW10KLSAqIFJldHVybnMg OgotICogMCBpZiBPSwotICogLUVJTlZBTCBpZiBtZW1ub2RtYXBbXSB0b28gc21hbGwgKG9mIHNo aWZ0IHRvbyBzbWFsbCkKLSAqIE9SIGlmIG5vZGUgb3ZlcmxhcCBvciBsb3N0IHJhbSAoc2hpZnQg dG9vIGJpZykKLSAqLwotc3RhdGljIGludCBfX2luaXQgcG9wdWxhdGVfbWVtbm9kZW1hcChjb25z dCBzdHJ1Y3Qgbm9kZSAqbm9kZXMsIGludCBudW1ub2RlcywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNoaWZ0LCBub2RlaWRfdCAqbm9kZWlkcykK LXsKLSAgICB1bnNpZ25lZCBsb25nIHNwZHgsIGVwZHg7Ci0gICAgaW50IGksIHJlcyA9IC1FSU5W QUw7Ci0KLSAgICBtZW1zZXQobWVtbm9kZW1hcCwgTlVNQV9OT19OT0RFLCBtZW1ub2RlbWFwc2l6 ZSAqIHNpemVvZigqbWVtbm9kZW1hcCkpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtbm9kZXM7 IGkrKyApCi0gICAgewotICAgICAgICBzcGR4ID0gcGFkZHJfdG9fcGR4KG5vZGVzW2ldLnN0YXJ0 KTsKLSAgICAgICAgZXBkeCA9IHBhZGRyX3RvX3BkeChub2Rlc1tpXS5lbmQgLSAxKSArIDE7Ci0g ICAgICAgIGlmICggc3BkeCA+PSBlcGR4ICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICBpZiAoIChlcGR4ID4+IHNoaWZ0KSA+PSBtZW1ub2RlbWFwc2l6ZSApCi0gICAgICAgICAgICBy ZXR1cm4gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCBtZW1ub2RlbWFwW3NwZHgg Pj4gc2hpZnRdICE9IE5VTUFfTk9fTk9ERSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7Ci0KLSAgICAgICAgICAgIGlmICggIW5vZGVpZHMgKQotICAgICAgICAgICAgICAgIG1lbW5v ZGVtYXBbc3BkeCA+PiBzaGlmdF0gPSBpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg ICAgIG1lbW5vZGVtYXBbc3BkeCA+PiBzaGlmdF0gPSBub2RlaWRzW2ldOwotCi0gICAgICAgICAg ICBzcGR4ICs9ICgxVUwgPDwgc2hpZnQpOwotICAgICAgICB9IHdoaWxlICggc3BkeCA8IGVwZHgg KTsKLSAgICAgICAgcmVzID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0 aWMgaW50IF9faW5pdCBhbGxvY2F0ZV9jYWNoZWFsaWduZWRfbWVtbm9kZW1hcCh2b2lkKQotewot ICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBGTl9VUChtZW1ub2RlbWFwc2l6ZSAqIHNpemVvZigq bWVtbm9kZW1hcCkpOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gYWxsb2NfYm9vdF9wYWdlcyhz aXplLCAxKTsKLQotICAgIGlmICggIW1mbiApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9F UlIKLSAgICAgICAgICAgICAgICJOVU1BOiBVbmFibGUgdG8gYWxsb2NhdGUgTWVtb3J5IHRvIE5v ZGUgaGFzaCBtYXBcbiIpOwotICAgICAgICBtZW1ub2RlbWFwc2l6ZSA9IDA7Ci0gICAgICAgIHJl dHVybiAtRU5PTUVNOwotICAgIH0KLQotICAgIG1lbW5vZGVtYXAgPSBtZm5fdG9fdmlydChtZm4p OwotICAgIG1mbiA8PD0gUEFHRV9TSElGVDsKLSAgICBzaXplIDw8PSBQQUdFX1NISUZUOwotICAg IHByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBBbGxvY2F0ZWQgbWVtbm9kZW1hcCBmcm9tICVseCAt ICVseFxuIiwKLSAgICAgICAgICAgbWZuLCBtZm4gKyBzaXplKTsKLSAgICBtZW1ub2RlbWFwc2l6 ZSA9IHNpemUgLyBzaXplb2YoKm1lbW5vZGVtYXApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8q Ci0gKiBUaGUgTFNCIG9mIGFsbCBzdGFydCBhbmQgZW5kIGFkZHJlc3NlcyBpbiB0aGUgbm9kZSBt YXAgaXMgdGhlIHZhbHVlIG9mIHRoZQotICogbWF4aW11bSBwb3NzaWJsZSBzaGlmdC4KLSAqLwot c3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgZXh0cmFjdF9sc2JfZnJvbV9ub2Rlcyhjb25zdCBz dHJ1Y3Qgbm9kZSAqbm9kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBudW1ub2RlcykKLXsKLSAgICB1bnNpZ25lZCBpbnQgaSwgbm9kZXNf dXNlZCA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBzcGR4LCBlcGR4OwotICAgIHVuc2lnbmVkIGxv bmcgYml0ZmllbGQgPSAwLCBtZW10b3AgPSAwOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1u b2RlczsgaSsrICkKLSAgICB7Ci0gICAgICAgIHNwZHggPSBwYWRkcl90b19wZHgobm9kZXNbaV0u c3RhcnQpOwotICAgICAgICBlcGR4ID0gcGFkZHJfdG9fcGR4KG5vZGVzW2ldLmVuZCAtIDEpICsg MTsKLSAgICAgICAgaWYgKCBzcGR4ID49IGVwZHggKQotICAgICAgICAgICAgY29udGludWU7Ci0g ICAgICAgIGJpdGZpZWxkIHw9IHNwZHg7Ci0gICAgICAgIG5vZGVzX3VzZWQrKzsKLSAgICAgICAg aWYgKCBlcGR4ID4gbWVtdG9wICkKLSAgICAgICAgICAgIG1lbXRvcCA9IGVwZHg7Ci0gICAgfQot ICAgIGlmICggbm9kZXNfdXNlZCA8PSAxICkKLSAgICAgICAgaSA9IEJJVFNfUEVSX0xPTkcgLSAx OwotICAgIGVsc2UKLSAgICAgICAgaSA9IGZpbmRfZmlyc3RfYml0KCZiaXRmaWVsZCwgc2l6ZW9m KHVuc2lnbmVkIGxvbmcpICogOCk7Ci0gICAgbWVtbm9kZW1hcHNpemUgPSAobWVtdG9wID4+IGkp ICsgMTsKLQotICAgIHJldHVybiBpOwotfQotCi1pbnQgX19pbml0IGNvbXB1dGVfbWVtbm9kZV9z aGlmdChzdHJ1Y3Qgbm9kZSAqbm9kZXMsIGludCBudW1ub2RlcywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5vZGVpZF90ICpub2RlaWRzLCB1bnNpZ25lZCBpbnQgKnNoaWZ0KQot ewotICAgICpzaGlmdCA9IGV4dHJhY3RfbHNiX2Zyb21fbm9kZXMobm9kZXMsIG51bW5vZGVzKTsK LQotICAgIGlmICggbWVtbm9kZW1hcHNpemUgPD0gQVJSQVlfU0laRShfbWVtbm9kZW1hcCkgKQot ICAgICAgICBtZW1ub2RlbWFwID0gX21lbW5vZGVtYXA7Ci0gICAgZWxzZSBpZiAoIGFsbG9jYXRl X2NhY2hlYWxpZ25lZF9tZW1ub2RlbWFwKCkgKQotICAgICAgICByZXR1cm4gLUVOT01FTTsKLQot ICAgIHByaW50ayhLRVJOX0RFQlVHICJOVU1BOiBVc2luZyAldSBmb3IgdGhlIGhhc2ggc2hpZnQu XG4iLCAqc2hpZnQpOwotCi0gICAgaWYgKCBwb3B1bGF0ZV9tZW1ub2RlbWFwKG5vZGVzLCBudW1u b2RlcywgKnNoaWZ0LCBub2RlaWRzKSApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZP ICJZb3VyIG1lbW9yeSBpcyBub3QgYWxpZ25lZCB5b3UgbmVlZCB0byAiCi0gICAgICAgICAgICAg ICAicmVidWlsZCB5b3VyIGh5cGVydmlzb3Igd2l0aCBhIGJpZ2dlciBOT0RFTUFQU0laRSAiCi0g ICAgICAgICAgICAgICAic2hpZnQ9JXVcbiIsICpzaGlmdCk7Ci0gICAgICAgIHJldHVybiAtRUlO VkFMOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotLyogaW5pdGlhbGl6ZSBOT0RFX0RBVEEg Z2l2ZW4gbm9kZWlkIGFuZCBzdGFydC9lbmQgKi8KLXZvaWQgX19pbml0IHNldHVwX25vZGVfYm9v dG1lbShub2RlaWRfdCBub2RlaWQsIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKQotewotICAg IHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCi0gICAgc3RhcnRfcGZuID0gc3Rh cnQgPj4gUEFHRV9TSElGVDsKLSAgICBlbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0KLSAg ICBOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47Ci0gICAgTk9E RV9EQVRBKG5vZGVpZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47 Ci0KLSAgICBub2RlX3NldF9vbmxpbmUobm9kZWlkKTsKLX0KLQotdm9pZCBfX2luaXQgbnVtYV9p bml0X2FycmF5KHZvaWQpCi17Ci0gICAgaW50IHJyLCBpOwotCi0gICAgLyogVGhlcmUgYXJlIHVu Zm9ydHVuYXRlbHkgc29tZSBwb29ybHkgZGVzaWduZWQgbWFpbmJvYXJkcyBhcm91bmQKLSAgICAg ICB0aGF0IG9ubHkgY29ubmVjdCBtZW1vcnkgdG8gYSBzaW5nbGUgQ1BVLiBUaGlzIGJyZWFrcyB0 aGUgMToxIGNwdS0+bm9kZQotICAgICAgIG1hcHBpbmcuIFRvIGF2b2lkIHRoaXMgZmlsbCBpbiB0 aGUgbWFwcGluZyBmb3IgYWxsIHBvc3NpYmxlCi0gICAgICAgQ1BVcywgYXMgdGhlIG51bWJlciBv ZiBDUFVzIGlzIG5vdCBrbm93biB5ZXQuCi0gICAgICAgV2Ugcm91bmQgcm9iaW4gdGhlIGV4aXN0 aW5nIG5vZGVzLiAqLwotICAgIHJyID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwotICAg IGZvciAoIGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICgg Y3B1X3RvX25vZGVbaV0gIT0gTlVNQV9OT19OT0RFICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot ICAgICAgICBudW1hX3NldF9ub2RlKGksIHJyKTsKLSAgICAgICAgcnIgPSBuZXh0X25vZGUocnIs IG5vZGVfb25saW5lX21hcCk7Ci0gICAgICAgIGlmICggcnIgPT0gTUFYX05VTU5PREVTICkKLSAg ICAgICAgICAgIHJyID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOwotICAgIH0KLX0KLQot I2lmZGVmIENPTkZJR19OVU1BX0VNVQotc3RhdGljIGludCBfX2luaXRkYXRhIG51bWFfZmFrZSA9 IDA7Ci1zdGF0aWMgaW50IGdldF9udW1hX2Zha2Uodm9pZCkKLXsKLSAgICByZXR1cm4gbnVtYV9m YWtlOwotfQotCi0vKiBOdW1hIGVtdWxhdGlvbiAqLwotc3RhdGljIGludCBfX2luaXQgbnVtYV9l bXVsYXRpb24odWludDY0X3Qgc3RhcnRfcGZuLCB1aW50NjRfdCBlbmRfcGZuKQotewotICAgIGlu dCBpOwotICAgIHN0cnVjdCBub2RlIG5vZGVzW01BWF9OVU1OT0RFU107Ci0gICAgdWludDY0X3Qg c3ogPSAoKGVuZF9wZm4gLSBzdGFydF9wZm4pIDw8IFBBR0VfU0hJRlQpIC8gZ2V0X251bWFfZmFr ZSgpOwotCi0gICAgLyogS2x1ZGdlIG5lZWRlZCBmb3IgdGhlIGhhc2ggZnVuY3Rpb24gKi8KLSAg ICBpZiAoIGh3ZWlnaHQ2NChzeikgPiAxICkKLSAgICB7Ci0gICAgICAgIHVpbnQ2NF90IHggPSAx OwotICAgICAgICB3aGlsZSAoICh4IDw8IDEpIDwgc3ogKQotICAgICAgICAgICAgeCA8PD0gMTsK LSAgICAgICAgaWYgKCB4IDwgc3ogLyAyICkKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUgot ICAgICAgICAgICAgICAgICAgICJOdW1hIGVtdWxhdGlvbiB1bmJhbGFuY2VkLiBDb21wbGFpbiB0 byBtYWludGFpbmVyXG4iKTsKLSAgICAgICAgc3ogPSB4OwotICAgIH0KLQotICAgIG1lbXNldCgm bm9kZXMsMCxzaXplb2Yobm9kZXMpKTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IGdldF9udW1hX2Zh a2UoKTsgaSsrICkKLSAgICB7Ci0gICAgICAgIG5vZGVzW2ldLnN0YXJ0ID0gKHN0YXJ0X3BmbiA8 PCBQQUdFX1NISUZUKSArIGkgKiBzejsKLSAgICAgICAgaWYgKCBpID09IGdldF9udW1hX2Zha2Uo KSAtIDEgKQotICAgICAgICAgICAgc3ogPSAoZW5kX3BmbiA8PCBQQUdFX1NISUZUKSAtIG5vZGVz W2ldLnN0YXJ0OwotICAgICAgICBub2Rlc1tpXS5lbmQgPSBub2Rlc1tpXS5zdGFydCArIHN6Owot ICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0gICAgICAgICAgICAgICAiRmFraW5nIG5vZGUgJWQg YXQgJSJQUkl4NjQiLSUiUFJJeDY0IiAoJSJQUkl1NjQiTUIpXG4iLAotICAgICAgICAgICAgICAg aSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVuZCwKLSAgICAgICAgICAgICAgIChub2Rlc1tp XS5lbmQgLSBub2Rlc1tpXS5zdGFydCkgPj4gMjApOwotICAgICAgICBub2RlX3NldF9vbmxpbmUo aSk7Ci0gICAgfQotICAgIGlmICggY29tcHV0ZV9tZW1ub2RlX3NoaWZ0KG5vZGVzLCBnZXRfbnVt YV9mYWtlKCksIE5VTEwsICZtZW1ub2RlX3NoaWZ0KSApCi0gICAgewotICAgICAgICBtZW1ub2Rl X3NoaWZ0ID0gMDsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJObyBOVU1BIGhhc2ggZnVuY3Rp b24gZm91bmQuIEVtdWxhdGlvbiBkaXNhYmxlZC5cbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0g ICAgfQotICAgIGZvcl9lYWNoX29ubGluZV9ub2RlICggaSApCi0gICAgICAgIHNldHVwX25vZGVf Ym9vdG1lbShpLCBub2Rlc1tpXS5zdGFydCwgbm9kZXNbaV0uZW5kKTsKLSAgICBudW1hX2luaXRf YXJyYXkoKTsKLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5p dCBudW1hX2R1bW15X2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcg ZW5kX3BmbikKLXsKLSAgICBpbnQgaTsKLQotICAgIHByaW50ayhLRVJOX0lORk8gIiVzXG4iLAot ICAgICAgICAgICBpc19udW1hX29mZigpID8gIk5VTUEgdHVybmVkIG9mZiIgOiAiTm8gTlVNQSBj b25maWd1cmF0aW9uIGZvdW5kIik7Ci0KLSAgICBwcmludGsoS0VSTl9JTkZPICJGYWtpbmcgYSBu b2RlIGF0ICUwMTYiUFJJeDY0Ii0lMDE2IlBSSXg2NCJcbiIsCi0gICAgICAgICAgICh1aW50NjRf dClzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwKLSAgICAgICAgICAgKHVpbnQ2NF90KWVuZF9wZm4g PDwgUEFHRV9TSElGVCk7Ci0gICAgLyogc2V0dXAgZHVtbXkgbm9kZSBjb3ZlcmluZyBhbGwgbWVt b3J5ICovCi0gICAgbWVtbm9kZV9zaGlmdCA9IEJJVFNfUEVSX0xPTkcgLSAxOwotICAgIG1lbW5v ZGVtYXAgPSBfbWVtbm9kZW1hcDsKLSAgICBub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwot ICAgIG5vZGVfc2V0X29ubGluZSgwKTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2NwdV9pZHM7 IGkrKyApCi0gICAgICAgIG51bWFfc2V0X25vZGUoaSwgMCk7Ci0gICAgY3B1bWFza19jb3B5KCZu b2RlX3RvX2NwdW1hc2tbMF0sIGNwdW1hc2tfb2YoMCkpOwotICAgIHNldHVwX25vZGVfYm9vdG1l bSgwLCAocGFkZHJfdClzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwKLSAgICAgICAgICAgICAgICAg ICAgKHBhZGRyX3QpZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKLX0KLQogdm9pZCBfX2luaXQgbnVt YV9pbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5k X3BmbikKIHsKICNpZmRlZiBDT05GSUdfTlVNQV9FTVUKQEAgLTMwNiw0MyArMzMsNiBAQCB2b2lk IF9faW5pdCBudW1hX2luaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWdu ZWQgbG9uZyBlbmRfcGZuKQogICAgIG51bWFfZHVtbXlfaW5pdChzdGFydF9wZm4sIGVuZF9wZm4p OwogfQogCi12b2lkIG51bWFfYWRkX2NwdShpbnQgY3B1KQotewotICAgIGNwdW1hc2tfc2V0X2Nw dShjcHUsICZub2RlX3RvX2NwdW1hc2tbY3B1X3RvX25vZGUoY3B1KV0pOwotfQotCi12b2lkIG51 bWFfc2V0X25vZGUoaW50IGNwdSwgbm9kZWlkX3Qgbm9kZSkKLXsKLSAgICBjcHVfdG9fbm9kZVtj cHVdID0gbm9kZTsKLX0KLQotLyogW251bWE9b2ZmXSAqLwotc3RhdGljIGludCBfX2luaXQgbnVt YV9zZXR1cChjaGFyICpvcHQpCi17Ci0gICAgaWYgKCAhc3RybmNtcChvcHQsIm9mZiIsMykgKQot ICAgICAgICBudW1hX29mZiA9IDE7Ci0gICAgaWYgKCAhc3RybmNtcChvcHQsIm9uIiwyKSApCi0g ICAgICAgIG51bWFfb2ZmID0gMDsKLSNpZmRlZiBDT05GSUdfTlVNQV9FTVUKLSAgICBpZiAoICFz dHJuY21wKG9wdCwgImZha2U9IiwgNSkgKQotICAgIHsKLSAgICAgICAgbnVtYV9vZmYgPSAwOwot ICAgICAgICBudW1hX2Zha2UgPSBzaW1wbGVfc3RydG91bChvcHQrNSxOVUxMLDApOwotICAgICAg ICBpZiAoIG51bWFfZmFrZSA+PSBNQVhfTlVNTk9ERVMgKQotICAgICAgICAgICAgbnVtYV9mYWtl ID0gTUFYX05VTU5PREVTOwotICAgIH0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19BQ1BJX05VTUEK LSAgICBpZiAoICFzdHJuY21wKG9wdCwibm9hY3BpIiw2KSApCi0gICAgewotICAgICAgICBudW1h X29mZiA9IDA7Ci0gICAgICAgIGFjcGlfbnVtYSA9IDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBy ZXR1cm4gMTsKLX0KLQogLyoKICAqIFNldHVwIGVhcmx5IGNwdV90b19ub2RlLgogICoKQEAgLTM5 MSwxNDkgKzgxLDMgQEAgdW5zaWduZWQgaW50IF9faW5pdCBhcmNoX2dldF9kbWFfYml0c2l6ZSh2 b2lkKQogICAgICAgICAgICAgICAgICBmbHNsKG5vZGVfc3RhcnRfcGZuKG5vZGUpICsgbm9kZV9z cGFubmVkX3BhZ2VzKG5vZGUpIC8gNCAtIDEpCiAgICAgICAgICAgICAgICAgICsgUEFHRV9TSElG VCwgMzIpOwogfQotCi1zdGF0aWMgdm9pZCBkdW1wX251bWEodW5zaWduZWQgY2hhciBrZXkpCi17 Ci0gICAgc190aW1lX3Qgbm93ID0gTk9XKCk7Ci0gICAgdW5zaWduZWQgaW50IGksIGosIG47Ci0g ICAgaW50IGVycjsKLSAgICBzdHJ1Y3QgZG9tYWluICpkOwotICAgIHN0cnVjdCBwYWdlX2luZm8g KnBhZ2U7Ci0gICAgdW5zaWduZWQgaW50IHBhZ2VfbnVtX25vZGVbTUFYX05VTU5PREVTXTsKLSAg ICBjb25zdCBzdHJ1Y3Qgdm51bWFfaW5mbyAqdm51bWE7Ci0KLSAgICBwcmludGsoIiclYycgcHJl c3NlZCAtPiBkdW1waW5nIG51bWEgaW5mbyAobm93LTB4JVg6JTA4WClcbiIsIGtleSwKLSAgICAg ICAgICAgKHVpbnQzMl90KShub3cgPj4gMzIpLCAodWludDMyX3Qpbm93KTsKLQotICAgIGZvcl9l YWNoX29ubGluZV9ub2RlICggaSApCi0gICAgewotICAgICAgICBwYWRkcl90IHBhID0gcGZuX3Rv X3BhZGRyKG5vZGVfc3RhcnRfcGZuKGkpICsgMSk7Ci0KLSAgICAgICAgcHJpbnRrKCJOT0RFJXUg c3RhcnQtPiVsdSBzaXplLT4lbHUgZnJlZS0+JWx1XG4iLAotICAgICAgICAgICAgICAgaSwgbm9k ZV9zdGFydF9wZm4oaSksIG5vZGVfc3Bhbm5lZF9wYWdlcyhpKSwKLSAgICAgICAgICAgICAgIGF2 YWlsX25vZGVfaGVhcF9wYWdlcyhpKSk7Ci0gICAgICAgIC8qIHNhbml0eSBjaGVjayBwaHlzX3Rv X25pZCgpICovCi0gICAgICAgIGlmICggcGh5c190b19uaWQocGEpICE9IGkgKQotICAgICAgICAg ICAgcHJpbnRrKCJwaHlzX3RvX25pZCglIlBSSXBhZGRyIikgLT4gJWQgc2hvdWxkIGJlICV1XG4i LAotICAgICAgICAgICAgICAgICAgIHBhLCBwaHlzX3RvX25pZChwYSksIGkpOwotICAgIH0KLQot ICAgIGogPSBjcHVtYXNrX2ZpcnN0KCZjcHVfb25saW5lX21hcCk7Ci0gICAgbiA9IDA7Ci0gICAg Zm9yX2VhY2hfb25saW5lX2NwdSAoIGkgKQotICAgIHsKLSAgICAgICAgaWYgKCBpICE9IGogKyBu IHx8IGNwdV90b19ub2RlW2pdICE9IGNwdV90b19ub2RlW2ldICkKLSAgICAgICAgewotICAgICAg ICAgICAgaWYgKCBuID4gMSApCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJDUFUldS4uLiV1IC0+ IE5PREUlZFxuIiwgaiwgaiArIG4gLSAxLCBjcHVfdG9fbm9kZVtqXSk7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJDUFUldSAtPiBOT0RFJWRcbiIsIGosIGNwdV90 b19ub2RlW2pdKTsKLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICAgICAgbiA9IDE7Ci0gICAg ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKytuOwotICAgIH0KLSAgICBpZiAoIG4g PiAxICkKLSAgICAgICAgcHJpbnRrKCJDUFUldS4uLiV1IC0+IE5PREUlZFxuIiwgaiwgaiArIG4g LSAxLCBjcHVfdG9fbm9kZVtqXSk7Ci0gICAgZWxzZQotICAgICAgICBwcmludGsoIkNQVSV1IC0+ IE5PREUlZFxuIiwgaiwgY3B1X3RvX25vZGVbal0pOwotCi0gICAgcmN1X3JlYWRfbG9jaygmZG9t bGlzdF9yZWFkX2xvY2spOwotCi0gICAgcHJpbnRrKCJNZW1vcnkgbG9jYXRpb24gb2YgZWFjaCBk b21haW46XG4iKTsKLSAgICBmb3JfZWFjaF9kb21haW4gKCBkICkKLSAgICB7Ci0gICAgICAgIHBy b2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOwotCi0gICAgICAgIHByaW50aygiRG9tYWluICV1ICh0 b3RhbDogJXUpOlxuIiwgZC0+ZG9tYWluX2lkLCBkLT50b3RfcGFnZXMpOwotCi0gICAgICAgIGZv cl9lYWNoX29ubGluZV9ub2RlICggaSApCi0gICAgICAgICAgICBwYWdlX251bV9ub2RlW2ldID0g MDsKLQotICAgICAgICBzcGluX2xvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgICAgIHBh Z2VfbGlzdF9mb3JfZWFjaChwYWdlLCAmZC0+cGFnZV9saXN0KQotICAgICAgICB7Ci0gICAgICAg ICAgICBpID0gcGh5c190b19uaWQoKHBhZGRyX3QpcGFnZV90b19tZm4ocGFnZSkgPDwgUEFHRV9T SElGVCk7Ci0gICAgICAgICAgICBwYWdlX251bV9ub2RlW2ldKys7Ci0gICAgICAgIH0KLSAgICAg ICAgc3Bpbl91bmxvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7Ci0KLSAgICAgICAgZm9yX2VhY2hf b25saW5lX25vZGUgKCBpICkKLSAgICAgICAgICAgIHByaW50aygiICAgIE5vZGUgJXU6ICV1XG4i LCBpLCBwYWdlX251bV9ub2RlW2ldKTsKLQotICAgICAgICBpZiAoICFyZWFkX3RyeWxvY2soJmQt PnZudW1hX3J3bG9jaykgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCAh ZC0+dm51bWEgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWFkX3VubG9jaygmZC0+dm51bWFf cndsb2NrKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdm51 bWEgPSBkLT52bnVtYTsKLSAgICAgICAgcHJpbnRrKCIgICAgICV1IHZub2RlcywgJXUgdmNwdXMs IGd1ZXN0IHBoeXNpY2FsIGxheW91dDpcbiIsCi0gICAgICAgICAgICAgICB2bnVtYS0+bnJfdm5v ZGVzLCBkLT5tYXhfdmNwdXMpOwotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHZudW1hLT5ucl92 bm9kZXM7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydF9j cHUgPSB+MFU7Ci0KLSAgICAgICAgICAgIGVyciA9IHNucHJpbnRmKGtleWhhbmRsZXJfc2NyYXRj aCwgMTIsICIlM3UiLAotICAgICAgICAgICAgICAgICAgICB2bnVtYS0+dm5vZGVfdG9fcG5vZGVb aV0pOwotICAgICAgICAgICAgaWYgKCBlcnIgPCAwIHx8IHZudW1hLT52bm9kZV90b19wbm9kZVtp XSA9PSBOVU1BX05PX05PREUgKQotICAgICAgICAgICAgICAgIHN0cmxjcHkoa2V5aGFuZGxlcl9z Y3JhdGNoLCAiPz8/Iiwgc2l6ZW9mKGtleWhhbmRsZXJfc2NyYXRjaCkpOwotCi0gICAgICAgICAg ICBwcmludGsoIiAgICAgICAlM3U6IHBub2RlICVzLCIsIGksIGtleWhhbmRsZXJfc2NyYXRjaCk7 Ci0KLSAgICAgICAgICAgIHByaW50aygiIHZjcHVzICIpOwotCi0gICAgICAgICAgICBmb3IgKCBq ID0gMDsgaiA8IGQtPm1heF92Y3B1czsgaisrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBpZiAoICEoaiAmIDB4M2YpICkKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19wZW5k aW5nX3NvZnRpcnFzKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHZudW1hLT52Y3B1X3RvX3Zu b2RlW2pdID09IGkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg KCBzdGFydF9jcHUgPT0gfjBVICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRrKCIlZCIsIGopOwotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnRfY3B1ID0gajsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICBlbHNlIGlmICggc3RhcnRfY3B1ICE9IH4wVSApCi0gICAgICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGogLSAxICE9IHN0YXJ0X2NwdSApCi0gICAg ICAgICAgICAgICAgICAgICAgICBwcmludGsoIi0lZCAiLCBqIC0gMSk7Ci0gICAgICAgICAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiICIpOwotICAgICAg ICAgICAgICAgICAgICBzdGFydF9jcHUgPSB+MFU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHN0YXJ0X2NwdSAhPSB+MFUgICYmIHN0YXJ0X2Nw dSAhPSBqIC0gMSApCi0gICAgICAgICAgICAgICAgcHJpbnRrKCItJWQiLCBqIC0gMSk7Ci0KLSAg ICAgICAgICAgIHByaW50aygiXG4iKTsKLQotICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB2 bnVtYS0+bnJfdm1lbXJhbmdlczsgaisrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICBpZiAoIHZudW1hLT52bWVtcmFuZ2Vbal0ubmlkID09IGkgKQotICAgICAgICAgICAgICAgICAg ICBwcmludGsoIiAgICAgICAgICAgJTAxNiJQUkl4NjQiIC0gJTAxNiJQUkl4NjQiXG4iLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm51bWEtPnZtZW1yYW5nZVtqXS5zdGFydCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZudW1hLT52bWVtcmFuZ2Vbal0uZW5kKTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlYWRfdW5sb2NrKCZkLT52bnVtYV9yd2xvY2sp OwotICAgIH0KLQotICAgIHJjdV9yZWFkX3VubG9jaygmZG9tbGlzdF9yZWFkX2xvY2spOwotfQot Ci1zdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9udW1hX3RyaWdnZXIodm9pZCkKLXsKLSAgICBy ZWdpc3Rlcl9rZXloYW5kbGVyKCd1JywgZHVtcF9udW1hLCAiZHVtcCBOVU1BIGluZm8iLCAxKTsK LSAgICByZXR1cm4gMDsKLX0KLV9faW5pdGNhbGwocmVnaXN0ZXJfbnVtYV90cmlnZ2VyKTsKLQpk aWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3NyYXQuYyBiL3hlbi9hcmNoL3g4Ni9zcmF0LmMKaW5k ZXggN2NmNDc3MS4uMmNjODdhMyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3NyYXQuYworKysg Yi94ZW4vYXJjaC94ODYvc3JhdC5jCkBAIC0yNyw2ICsyNywxMyBAQCBzdGF0aWMgbm9kZW1hc2tf dCBfX2luaXRkYXRhIG1lbW9yeV9ub2Rlc19wYXJzZWQ7CiBzdGF0aWMgbm9kZW1hc2tfdCBfX2lu aXRkYXRhIHByb2Nlc3Nvcl9ub2Rlc19wYXJzZWQ7CiBzdGF0aWMgc3RydWN0IG5vZGUgX19pbml0 ZGF0YSBub2Rlc1tNQVhfTlVNTk9ERVNdOwogCisvKgorICogS2VlcCBCSU9TJ3MgQ1BVMm5vZGUg aW5mb3JtYXRpb24sIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYWlvbgorICov Citub2RlaWRfdCBhcGljaWRfdG9fbm9kZVtNQVhfTE9DQUxfQVBJQ10gPSB7CisgICAgWzAgLi4u IE1BWF9MT0NBTF9BUElDLTFdID0gTlVNQV9OT19OT0RFCit9OworCiBzdHJ1Y3QgcHhtMm5vZGUg ewogCXVuc2lnbmVkIGludCBweG07CiAJbm9kZWlkX3Qgbm9kZTsKZGlmZiAtLWdpdCBhL3hlbi9j b21tb24vTWFrZWZpbGUgYi94ZW4vY29tbW9uL01ha2VmaWxlCmluZGV4IDBmZWQzMGIuLjRiMTcz NDQgMTAwNjQ0Ci0tLSBhL3hlbi9jb21tb24vTWFrZWZpbGUKKysrIGIveGVuL2NvbW1vbi9NYWtl ZmlsZQpAQCAtNjMsNiArNjMsNyBAQCBvYmoteSArPSB3YWl0Lm8KIG9iai1iaW4teSArPSB3YXJu aW5nLmluaXQubwogb2JqLSQoQ09ORklHX1hFTk9QUk9GKSArPSB4ZW5vcHJvZi5vCiBvYmoteSAr PSB4bWFsbG9jX3Rsc2Yubworb2JqLSQoQ09ORklHX05VTUEpICs9IG51bWEubwogCiBvYmotYmlu LSQoQ09ORklHX1g4NikgKz0gJChmb3JlYWNoIG4sZGVjb21wcmVzcyBidW56aXAyIHVueHogdW5s em1hIHVubHpvIHVubHo0IGVhcmx5Y3BpbywkKG4pLmluaXQubykKIApkaWZmIC0tZ2l0IGEveGVu L2NvbW1vbi9udW1hLmMgYi94ZW4vY29tbW9uL251bWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4yMDdlYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2NvbW1vbi9udW1h LmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgKiBDb21tb24gTlVNQSBoYW5kbGluZyBmdW5jdGlv bnMgZm9yIHg4NiBhbmQgYXJtLgorICogT3JpZ2luYWwgY29kZSBleHRyYWN0ZWQgZnJvbSBhcmNo L3g4Ni9udW1hLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UsIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz IHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAq LworCisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVuL3N0cmluZy5oPgorI2luY2x1 ZGUgPHhlbi9pbml0Lmg+CisjaW5jbHVkZSA8eGVuL2N0eXBlLmg+CisjaW5jbHVkZSA8eGVuL25v ZGVtYXNrLmg+CisjaW5jbHVkZSA8eGVuL251bWEuaD4KKyNpbmNsdWRlIDx4ZW4va2V5aGFuZGxl ci5oPgorI2luY2x1ZGUgPHhlbi90aW1lLmg+CisjaW5jbHVkZSA8eGVuL3NtcC5oPgorI2luY2x1 ZGUgPHhlbi9wZm4uaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPHhlbi9zY2hl ZC5oPgorI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisKK3N0YXRpYyBpbnQgbnVtYV9zZXR1cChj aGFyICpzKTsKK2N1c3RvbV9wYXJhbSgibnVtYSIsIG51bWFfc2V0dXApOworCitzdHJ1Y3Qgbm9k ZV9kYXRhIG5vZGVfZGF0YVtNQVhfTlVNTk9ERVNdOworCisvKiBNYXBwaW5nIGZyb20gcGR4IHRv IG5vZGUgaWQgKi8KK3Vuc2lnbmVkIGludCBtZW1ub2RlX3NoaWZ0Oworc3RhdGljIHR5cGVvZigq bWVtbm9kZW1hcCkgX21lbW5vZGVtYXBbNjRdOwordW5zaWduZWQgbG9uZyBtZW1ub2RlbWFwc2l6 ZTsKK3VpbnQ4X3QgKm1lbW5vZGVtYXA7CisKK25vZGVpZF90IF9fcmVhZF9tb3N0bHkgY3B1X3Rv X25vZGVbTlJfQ1BVU10gPSB7CisgICAgWzAgLi4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUK K307CitjcHVtYXNrX3QgX19yZWFkX21vc3RseSBub2RlX3RvX2NwdW1hc2tbTUFYX05VTU5PREVT XTsKKworc3RhdGljIGJvb2wgbnVtYV9vZmYgPSAwOworc3RhdGljIGJvb2wgYWNwaV9udW1hID0g MTsKKworYm9vbCBpc19udW1hX29mZih2b2lkKQoreworICAgIHJldHVybiBudW1hX29mZjsKK30K KworYm9vbCBnZXRfYWNwaV9udW1hKHZvaWQpCit7CisgICAgcmV0dXJuIGFjcGlfbnVtYTsKK30K Kwordm9pZCBzZXRfYWNwaV9udW1hKGJvb2xfdCB2YWwpCit7CisgICAgYWNwaV9udW1hID0gdmFs OworfQorCitib29sIHNyYXRfZGlzYWJsZWQodm9pZCkKK3sKKyAgICByZXR1cm4gbnVtYV9vZmYg fHwgYWNwaV9udW1hID09IDA7Cit9CisKKy8qCisgKiBHaXZlbiBhIHNoaWZ0IHZhbHVlLCB0cnkg dG8gcG9wdWxhdGUgbWVtbm9kZW1hcFtdCisgKiBSZXR1cm5zIDoKKyAqIDAgaWYgT0sKKyAqIC1F SU5WQUwgaWYgbWVtbm9kbWFwW10gdG9vIHNtYWxsIChvZiBzaGlmdCB0b28gc21hbGwpCisgKiBP UiBpZiBub2RlIG92ZXJsYXAgb3IgbG9zdCByYW0gKHNoaWZ0IHRvbyBiaWcpCisgKi8KK3N0YXRp YyBpbnQgX19pbml0IHBvcHVsYXRlX21lbW5vZGVtYXAoY29uc3Qgc3RydWN0IG5vZGUgKm5vZGVz LCBpbnQgbnVtbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBzaGlmdCwgbm9kZWlkX3QgKm5vZGVpZHMpCit7CisgICAgdW5zaWduZWQgbG9u ZyBzcGR4LCBlcGR4OworICAgIGludCBpLCByZXMgPSAtRUlOVkFMOworCisgICAgbWVtc2V0KG1l bW5vZGVtYXAsIE5VTUFfTk9fTk9ERSwgbWVtbm9kZW1hcHNpemUgKiBzaXplb2YoKm1lbW5vZGVt YXApKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bW5vZGVzOyBpKysgKQorICAgIHsKKyAgICAg ICAgc3BkeCA9IHBhZGRyX3RvX3BkeChub2Rlc1tpXS5zdGFydCk7CisgICAgICAgIGVwZHggPSBw YWRkcl90b19wZHgobm9kZXNbaV0uZW5kIC0gMSkgKyAxOworICAgICAgICBpZiAoIHNwZHggPj0g ZXBkeCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCAoZXBkeCA+PiBzaGlm dCkgPj0gbWVtbm9kZW1hcHNpemUgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRv IHsKKyAgICAgICAgICAgIGlmICggbWVtbm9kZW1hcFtzcGR4ID4+IHNoaWZ0XSAhPSBOVU1BX05P X05PREUgKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgICAgICAgICBp ZiAoICFub2RlaWRzICkKKyAgICAgICAgICAgICAgICBtZW1ub2RlbWFwW3NwZHggPj4gc2hpZnRd ID0gaTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZW1ub2RlbWFwW3NwZHgg Pj4gc2hpZnRdID0gbm9kZWlkc1tpXTsKKworICAgICAgICAgICAgc3BkeCArPSAoMVVMIDw8IHNo aWZ0KTsKKyAgICAgICAgfSB3aGlsZSAoIHNwZHggPCBlcGR4ICk7CisgICAgICAgIHJlcyA9IDA7 CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBfX2luaXQgYWxsb2Nh dGVfY2FjaGVhbGlnbmVkX21lbW5vZGVtYXAodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHNp emUgPSBQRk5fVVAobWVtbm9kZW1hcHNpemUgKiBzaXplb2YoKm1lbW5vZGVtYXApKTsKKyAgICB1 bnNpZ25lZCBsb25nIG1mbiA9IGFsbG9jX2Jvb3RfcGFnZXMoc2l6ZSwgMSk7CisKKyAgICBpZiAo ICFtZm4gKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSCisgICAgICAgICAgICAgICAi TlVNQTogVW5hYmxlIHRvIGFsbG9jYXRlIE1lbW9yeSB0byBOb2RlIGhhc2ggbWFwXG4iKTsKKyAg ICAgICAgbWVtbm9kZW1hcHNpemUgPSAwOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9 CisKKyAgICBtZW1ub2RlbWFwID0gbWZuX3RvX3ZpcnQobWZuKTsKKyAgICBtZm4gPDw9IFBBR0Vf U0hJRlQ7CisgICAgc2l6ZSA8PD0gUEFHRV9TSElGVDsKKyAgICBwcmludGsoS0VSTl9ERUJVRyAi TlVNQTogQWxsb2NhdGVkIG1lbW5vZGVtYXAgZnJvbSAlbHggLSAlbHhcbiIsCisgICAgICAgICAg IG1mbiwgbWZuICsgc2l6ZSk7CisgICAgbWVtbm9kZW1hcHNpemUgPSBzaXplIC8gc2l6ZW9mKCpt ZW1ub2RlbWFwKTsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogVGhlIExTQiBvZiBhbGwg c3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgaW4gdGhlIG5vZGUgbWFwIGlzIHRoZSB2YWx1ZSBvZiB0 aGUKKyAqIG1heGltdW0gcG9zc2libGUgc2hpZnQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQg X19pbml0IGV4dHJhY3RfbHNiX2Zyb21fbm9kZXMoY29uc3Qgc3RydWN0IG5vZGUgKm5vZGVzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVt bm9kZXMpCit7CisgICAgdW5zaWduZWQgaW50IGksIG5vZGVzX3VzZWQgPSAwOworICAgIHVuc2ln bmVkIGxvbmcgc3BkeCwgZXBkeDsKKyAgICB1bnNpZ25lZCBsb25nIGJpdGZpZWxkID0gMCwgbWVt dG9wID0gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtbm9kZXM7IGkrKyApCisgICAgewor ICAgICAgICBzcGR4ID0gcGFkZHJfdG9fcGR4KG5vZGVzW2ldLnN0YXJ0KTsKKyAgICAgICAgZXBk eCA9IHBhZGRyX3RvX3BkeChub2Rlc1tpXS5lbmQgLSAxKSArIDE7CisgICAgICAgIGlmICggc3Bk eCA+PSBlcGR4ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBiaXRmaWVsZCB8PSBz cGR4OworICAgICAgICBub2Rlc191c2VkKys7CisgICAgICAgIGlmICggZXBkeCA+IG1lbXRvcCAp CisgICAgICAgICAgICBtZW10b3AgPSBlcGR4OworICAgIH0KKyAgICBpZiAoIG5vZGVzX3VzZWQg PD0gMSApCisgICAgICAgIGkgPSBCSVRTX1BFUl9MT05HIC0gMTsKKyAgICBlbHNlCisgICAgICAg IGkgPSBmaW5kX2ZpcnN0X2JpdCgmYml0ZmllbGQsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgp OworCisgICAgbWVtbm9kZW1hcHNpemUgPSAobWVtdG9wID4+IGkpICsgMTsKKworICAgIHJldHVy biBpOworfQorCitpbnQgX19pbml0IGNvbXB1dGVfbWVtbm9kZV9zaGlmdChzdHJ1Y3Qgbm9kZSAq bm9kZXMsIGludCBudW1ub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v ZGVpZF90ICpub2RlaWRzLCB1bnNpZ25lZCBpbnQgKnNoaWZ0KQoreworICAgICpzaGlmdCA9IGV4 dHJhY3RfbHNiX2Zyb21fbm9kZXMobm9kZXMsIG51bW5vZGVzKTsKKworICAgIGlmICggbWVtbm9k ZW1hcHNpemUgPD0gQVJSQVlfU0laRShfbWVtbm9kZW1hcCkgKQorICAgICAgICBtZW1ub2RlbWFw ID0gX21lbW5vZGVtYXA7CisgICAgZWxzZSBpZiAoIGFsbG9jYXRlX2NhY2hlYWxpZ25lZF9tZW1u b2RlbWFwKCkgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIHByaW50ayhLRVJOX0RF QlVHICJOVU1BOiBVc2luZyAldSBmb3IgdGhlIGhhc2ggc2hpZnQuXG4iLCAqc2hpZnQpOworCisg ICAgaWYgKCBwb3B1bGF0ZV9tZW1ub2RlbWFwKG5vZGVzLCBudW1ub2RlcywgKnNoaWZ0LCBub2Rl aWRzKSApCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJZb3VyIG1lbW9yeSBpcyBu b3QgYWxpZ25lZCB5b3UgbmVlZCB0byAiCisgICAgICAgICAgICAgICAicmVidWlsZCB5b3VyIGh5 cGVydmlzb3Igd2l0aCBhIGJpZ2dlciBOT0RFTUFQU0laRSAiCisgICAgICAgICAgICAgICAic2hp ZnQ9JXVcbiIsICpzaGlmdCk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IHJldHVybiAwOworfQorLyogaW5pdGlhbGl6ZSBOT0RFX0RBVEEgZ2l2ZW4gbm9kZWlkIGFuZCBz dGFydC9lbmQgKi8KK3ZvaWQgX19pbml0IHNldHVwX25vZGVfYm9vdG1lbShub2RlaWRfdCBub2Rl aWQsIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kKQoreworICAgIHVuc2lnbmVkIGxvbmcgc3Rh cnRfcGZuLCBlbmRfcGZuOworCisgICAgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsK KyAgICBlbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisKKyAgICBOT0RFX0RBVEEobm9kZWlk KS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CisgICAgTk9ERV9EQVRBKG5vZGVpZCktPm5v ZGVfc3Bhbm5lZF9wYWdlcyA9IGVuZF9wZm4gLSBzdGFydF9wZm47CisKKyAgICBub2RlX3NldF9v bmxpbmUobm9kZWlkKTsKK30KKwordm9pZCBfX2luaXQgbnVtYV9pbml0X2FycmF5KHZvaWQpCit7 CisgICAgaW50IHJyLCBpOworCisgICAgLyogVGhlcmUgYXJlIHVuZm9ydHVuYXRlbHkgc29tZSBw b29ybHkgZGVzaWduZWQgbWFpbmJvYXJkcyBhcm91bmQKKyAgICAgICB0aGF0IG9ubHkgY29ubmVj dCBtZW1vcnkgdG8gYSBzaW5nbGUgQ1BVLiBUaGlzIGJyZWFrcyB0aGUgMToxIGNwdS0+bm9kZQor ICAgICAgIG1hcHBpbmcuIFRvIGF2b2lkIHRoaXMgZmlsbCBpbiB0aGUgbWFwcGluZyBmb3IgYWxs IHBvc3NpYmxlCisgICAgICAgQ1BVcywgYXMgdGhlIG51bWJlciBvZiBDUFVzIGlzIG5vdCBrbm93 biB5ZXQuCisgICAgICAgV2Ugcm91bmQgcm9iaW4gdGhlIGV4aXN0aW5nIG5vZGVzLiAqLworICAg IHJyID0gZmlyc3Rfbm9kZShub2RlX29ubGluZV9tYXApOworICAgIGZvciAoIGkgPSAwOyBpIDwg bnJfY3B1X2lkczsgaSsrICkKKyAgICB7CisgICAgICAgIGlmICggY3B1X3RvX25vZGVbaV0gIT0g TlVNQV9OT19OT0RFICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBudW1hX3NldF9u b2RlKGksIHJyKTsKKyAgICAgICAgcnIgPSBuZXh0X25vZGUocnIsIG5vZGVfb25saW5lX21hcCk7 CisgICAgICAgIGlmICggcnIgPT0gTUFYX05VTU5PREVTICkKKyAgICAgICAgICAgIHJyID0gZmly c3Rfbm9kZShub2RlX29ubGluZV9tYXApOworICAgIH0KK30KKworI2lmZGVmIENPTkZJR19OVU1B X0VNVQorc3RhdGljIGludCBfX2luaXRkYXRhIG51bWFfZmFrZSA9IDA7CisKK2ludCBnZXRfbnVt YV9mYWtlKHZvaWQpCit7CisgICAgcmV0dXJuIG51bWFfZmFrZTsKK30KKworLyogTnVtYSBlbXVs YXRpb24gKi8KK2ludCBfX2luaXQgbnVtYV9lbXVsYXRpb24odWludDY0X3Qgc3RhcnRfcGZuLCB1 aW50NjRfdCBlbmRfcGZuKQoreworICAgIGludCBpOworICAgIHN0cnVjdCBub2RlIG5vZGVzW01B WF9OVU1OT0RFU107CisgICAgdWludDY0X3Qgc3ogPSAoKGVuZF9wZm4gLSBzdGFydF9wZm4pIDw8 IFBBR0VfU0hJRlQpIC8gZ2V0X251bWFfZmFrZSgpOworCisgICAgLyogS2x1ZGdlIG5lZWRlZCBm b3IgdGhlIGhhc2ggZnVuY3Rpb24gKi8KKyAgICBpZiAoIGh3ZWlnaHQ2NChzeikgPiAxICkKKyAg ICB7CisgICAgICAgIHVpbnQ2NF90IHggPSAxOworICAgICAgICB3aGlsZSAoICh4IDw8IDEpIDwg c3ogKQorICAgICAgICAgICAgeCA8PD0gMTsKKyAgICAgICAgaWYgKCB4IDwgc3ogLyAyICkKKyAg ICAgICAgICAgIHByaW50ayhLRVJOX0VSUgorICAgICAgICAgICAgICAgICAgICJOdW1hIGVtdWxh dGlvbiB1bmJhbGFuY2VkLiBDb21wbGFpbiB0byBtYWludGFpbmVyXG4iKTsKKyAgICAgICAgc3og PSB4OworICAgIH0KKworICAgIG1lbXNldCgmbm9kZXMsMCxzaXplb2Yobm9kZXMpKTsKKyAgICBm b3IgKCBpID0gMDsgaSA8IGdldF9udW1hX2Zha2UoKTsgaSsrICkKKyAgICB7CisgICAgICAgIG5v ZGVzW2ldLnN0YXJ0ID0gKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKSArIGkgKiBzejsKKyAgICAg ICAgaWYgKCBpID09IGdldF9udW1hX2Zha2UoKSAtIDEgKQorICAgICAgICAgICAgc3ogPSAoZW5k X3BmbiA8PCBQQUdFX1NISUZUKSAtIG5vZGVzW2ldLnN0YXJ0OworICAgICAgICBub2Rlc1tpXS5l bmQgPSBub2Rlc1tpXS5zdGFydCArIHN6OworICAgICAgICBwcmludGsoS0VSTl9JTkZPCisgICAg ICAgICAgICAgICAiRmFraW5nIG5vZGUgJWQgYXQgJSJQUkl4NjQiLSUiUFJJeDY0IiAoJSJQUkl1 NjQiTUIpXG4iLAorICAgICAgICAgICAgICAgaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ldLmVu ZCwKKyAgICAgICAgICAgICAgIChub2Rlc1tpXS5lbmQgLSBub2Rlc1tpXS5zdGFydCkgPj4gMjAp OworICAgICAgICBub2RlX3NldF9vbmxpbmUoaSk7CisgICAgfQorCisgICAgaWYgKCBjb21wdXRl X21lbW5vZGVfc2hpZnQobm9kZXMsIGdldF9udW1hX2Zha2UoKSwgTlVMTCwgJm1lbW5vZGVfc2hp ZnQpICkKKyAgICB7CisgICAgICAgIG1lbW5vZGVfc2hpZnQgPSAwOworICAgICAgICBwcmludGso S0VSTl9FUlIgIk5vIE5VTUEgaGFzaCBmdW5jdGlvbiBmb3VuZC4gRW11bGF0aW9uIGRpc2FibGVk LlxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yX2VhY2hfb25saW5lX25v ZGUgKCBpICkKKyAgICAgICAgc2V0dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBu b2Rlc1tpXS5lbmQpOworICAgIG51bWFfaW5pdF9hcnJheSgpOworCisgICAgcmV0dXJuIDA7Cit9 CisjZW5kaWYKKwordm9pZCBfX2luaXQgbnVtYV9kdW1teV9pbml0KHVuc2lnbmVkIGxvbmcgc3Rh cnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCit7CisgICAgaW50IGk7CisKKyAgICBwcmlu dGsoS0VSTl9JTkZPICIlc1xuIiwKKyAgICAgICAgICAgaXNfbnVtYV9vZmYoKSA/ICJOVU1BIHR1 cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIpOworCisgICAgcHJpbnRr KEtFUk5fSU5GTyAiRmFraW5nIGEgbm9kZSBhdCAlMDE2IlBSSXg2NCItJTAxNiJQUkl4NjQiXG4i LAorICAgICAgICAgICAodWludDY0X3Qpc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsCisgICAgICAg ICAgICh1aW50NjRfdCllbmRfcGZuIDw8IFBBR0VfU0hJRlQpOworICAgIC8qIHNldHVwIGR1bW15 IG5vZGUgY292ZXJpbmcgYWxsIG1lbW9yeSAqLworICAgIG1lbW5vZGVfc2hpZnQgPSBCSVRTX1BF Ul9MT05HIC0gMTsKKyAgICBtZW1ub2RlbWFwID0gX21lbW5vZGVtYXA7CisgICAgbm9kZXNfY2xl YXIobm9kZV9vbmxpbmVfbWFwKTsKKyAgICBub2RlX3NldF9vbmxpbmUoMCk7CisgICAgZm9yICgg aSA9IDA7IGkgPCBucl9jcHVfaWRzOyBpKysgKQorICAgICAgICBudW1hX3NldF9ub2RlKGksIDAp OworICAgIGNwdW1hc2tfY29weSgmbm9kZV90b19jcHVtYXNrWzBdLCBjcHVtYXNrX29mKDApKTsK KyAgICBzZXR1cF9ub2RlX2Jvb3RtZW0oMCwgKHBhZGRyX3Qpc3RhcnRfcGZuIDw8IFBBR0VfU0hJ RlQsCisgICAgICAgICAgICAgICAgICAgIChwYWRkcl90KWVuZF9wZm4gPDwgUEFHRV9TSElGVCk7 Cit9CisKK3ZvaWQgbnVtYV9hZGRfY3B1KGludCBjcHUpCit7CisgICAgY3B1bWFza19zZXRfY3B1 KGNwdSwgJm5vZGVfdG9fY3B1bWFza1tjcHVfdG9fbm9kZShjcHUpXSk7Cit9CisKK3ZvaWQgbnVt YV9zZXRfbm9kZShpbnQgY3B1LCBub2RlaWRfdCBub2RlKQoreworICAgIGNwdV90b19ub2RlW2Nw dV0gPSBub2RlOworfQorCisvKiBbbnVtYT1vZmZdICovCitzdGF0aWMgaW50IF9faW5pdCBudW1h X3NldHVwKGNoYXIgKm9wdCkKK3sKKyAgICBpZiAoICFzdHJuY21wKG9wdCwib2ZmIiwzKSApCisg ICAgICAgIG51bWFfb2ZmID0gMTsKKyAgICBpZiAoICFzdHJuY21wKG9wdCwib24iLDIpICkKKyAg ICAgICAgbnVtYV9vZmYgPSAwOworI2lmZGVmIENPTkZJR19OVU1BX0VNVQorICAgIGlmICggIXN0 cm5jbXAob3B0LCAiZmFrZT0iLCA1KSApCisgICAgeworICAgICAgICBudW1hX29mZiA9IDA7Cisg ICAgICAgIG51bWFfZmFrZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdCs1LE5VTEwsMCk7CisgICAgICAg IGlmICggbnVtYV9mYWtlID49IE1BWF9OVU1OT0RFUyApCisgICAgICAgICAgICBudW1hX2Zha2Ug PSBNQVhfTlVNTk9ERVM7CisgICAgfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FDUElfTlVNQQor ICAgIGlmICggIXN0cm5jbXAob3B0LCJub2FjcGkiLDYpICkKKyAgICB7CisgICAgICAgIG51bWFf b2ZmID0gMDsKKyAgICAgICAgYWNwaV9udW1hID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIHJl dHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkdW1wX251bWEodW5zaWduZWQgY2hhciBrZXkpCit7 CisgICAgc190aW1lX3Qgbm93ID0gTk9XKCk7CisgICAgdW5zaWduZWQgaW50IGksIGosIG47Cisg ICAgaW50IGVycjsKKyAgICBzdHJ1Y3QgZG9tYWluICpkOworICAgIHN0cnVjdCBwYWdlX2luZm8g KnBhZ2U7CisgICAgdW5zaWduZWQgaW50IHBhZ2VfbnVtX25vZGVbTUFYX05VTU5PREVTXTsKKyAg ICBjb25zdCBzdHJ1Y3Qgdm51bWFfaW5mbyAqdm51bWE7CisKKyAgICBwcmludGsoIiclYycgcHJl c3NlZCAtPiBkdW1waW5nIG51bWEgaW5mbyAobm93LTB4JVg6JTA4WClcbiIsIGtleSwKKyAgICAg ICAgICAgKHVpbnQzMl90KShub3cgPj4gMzIpLCAodWludDMyX3Qpbm93KTsKKworICAgIGZvcl9l YWNoX29ubGluZV9ub2RlICggaSApCisgICAgeworICAgICAgICBwYWRkcl90IHBhID0gcGZuX3Rv X3BhZGRyKG5vZGVfc3RhcnRfcGZuKGkpICsgMSk7CisKKyAgICAgICAgcHJpbnRrKCJOT0RFJXUg c3RhcnQtPiVsdSBzaXplLT4lbHUgZnJlZS0+JWx1XG4iLAorICAgICAgICAgICAgICAgaSwgbm9k ZV9zdGFydF9wZm4oaSksIG5vZGVfc3Bhbm5lZF9wYWdlcyhpKSwKKyAgICAgICAgICAgICAgIGF2 YWlsX25vZGVfaGVhcF9wYWdlcyhpKSk7CisgICAgICAgIC8qIHNhbml0eSBjaGVjayBwaHlzX3Rv X25pZCgpICovCisgICAgICAgIGlmICggcGh5c190b19uaWQocGEpICE9IGkgKQorICAgICAgICAg ICAgcHJpbnRrKCJwaHlzX3RvX25pZCglIlBSSXBhZGRyIikgLT4gJWQgc2hvdWxkIGJlICV1XG4i LAorICAgICAgICAgICAgICAgICAgIHBhLCBwaHlzX3RvX25pZChwYSksIGkpOworICAgIH0KKwor ICAgIGogPSBjcHVtYXNrX2ZpcnN0KCZjcHVfb25saW5lX21hcCk7CisgICAgbiA9IDA7CisgICAg Zm9yX2VhY2hfb25saW5lX2NwdSAoIGkgKQorICAgIHsKKyAgICAgICAgaWYgKCBpICE9IGogKyBu IHx8IGNwdV90b19ub2RlW2pdICE9IGNwdV90b19ub2RlW2ldICkKKyAgICAgICAgeworICAgICAg ICAgICAgaWYgKCBuID4gMSApCisgICAgICAgICAgICAgICAgcHJpbnRrKCJDUFUldS4uLiV1IC0+ IE5PREUlZFxuIiwgaiwgaiArIG4gLSAxLCBjcHVfdG9fbm9kZVtqXSk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgcHJpbnRrKCJDUFUldSAtPiBOT0RFJWRcbiIsIGosIGNwdV90 b19ub2RlW2pdKTsKKyAgICAgICAgICAgIGogPSBpOworICAgICAgICAgICAgbiA9IDE7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKytuOworICAgIH0KKyAgICBpZiAoIG4g PiAxICkKKyAgICAgICAgcHJpbnRrKCJDUFUldS4uLiV1IC0+IE5PREUlZFxuIiwgaiwgaiArIG4g LSAxLCBjcHVfdG9fbm9kZVtqXSk7CisgICAgZWxzZQorICAgICAgICBwcmludGsoIkNQVSV1IC0+ IE5PREUlZFxuIiwgaiwgY3B1X3RvX25vZGVbal0pOworCisgICAgcmN1X3JlYWRfbG9jaygmZG9t bGlzdF9yZWFkX2xvY2spOworCisgICAgcHJpbnRrKCJNZW1vcnkgbG9jYXRpb24gb2YgZWFjaCBk b21haW46XG4iKTsKKyAgICBmb3JfZWFjaF9kb21haW4gKCBkICkKKyAgICB7CisgICAgICAgIHBy b2Nlc3NfcGVuZGluZ19zb2Z0aXJxcygpOworCisgICAgICAgIHByaW50aygiRG9tYWluICV1ICh0 b3RhbDogJXUpOlxuIiwgZC0+ZG9tYWluX2lkLCBkLT50b3RfcGFnZXMpOworCisgICAgICAgIGZv cl9lYWNoX29ubGluZV9ub2RlICggaSApCisgICAgICAgICAgICBwYWdlX251bV9ub2RlW2ldID0g MDsKKworICAgICAgICBzcGluX2xvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgICAgIHBh Z2VfbGlzdF9mb3JfZWFjaChwYWdlLCAmZC0+cGFnZV9saXN0KQorICAgICAgICB7CisgICAgICAg ICAgICBpID0gcGh5c190b19uaWQoKHBhZGRyX3QpcGFnZV90b19tZm4ocGFnZSkgPDwgUEFHRV9T SElGVCk7CisgICAgICAgICAgICBwYWdlX251bV9ub2RlW2ldKys7CisgICAgICAgIH0KKyAgICAg ICAgc3Bpbl91bmxvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7CisKKyAgICAgICAgZm9yX2VhY2hf b25saW5lX25vZGUgKCBpICkKKyAgICAgICAgICAgIHByaW50aygiICAgIE5vZGUgJXU6ICV1XG4i LCBpLCBwYWdlX251bV9ub2RlW2ldKTsKKworICAgICAgICBpZiAoICFyZWFkX3RyeWxvY2soJmQt PnZudW1hX3J3bG9jaykgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCAh ZC0+dm51bWEgKQorICAgICAgICB7CisgICAgICAgICAgICByZWFkX3VubG9jaygmZC0+dm51bWFf cndsb2NrKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgdm51 bWEgPSBkLT52bnVtYTsKKyAgICAgICAgcHJpbnRrKCIgICAgICV1IHZub2RlcywgJXUgdmNwdXMs IGd1ZXN0IHBoeXNpY2FsIGxheW91dDpcbiIsCisgICAgICAgICAgICAgICB2bnVtYS0+bnJfdm5v ZGVzLCBkLT5tYXhfdmNwdXMpOworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHZudW1hLT5ucl92 bm9kZXM7IGkrKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGFydF9j cHUgPSB+MFU7CisKKyAgICAgICAgICAgIGVyciA9IHNucHJpbnRmKGtleWhhbmRsZXJfc2NyYXRj aCwgMTIsICIlM3UiLAorICAgICAgICAgICAgICAgICAgICB2bnVtYS0+dm5vZGVfdG9fcG5vZGVb aV0pOworICAgICAgICAgICAgaWYgKCBlcnIgPCAwIHx8IHZudW1hLT52bm9kZV90b19wbm9kZVtp XSA9PSBOVU1BX05PX05PREUgKQorICAgICAgICAgICAgICAgIHN0cmxjcHkoa2V5aGFuZGxlcl9z Y3JhdGNoLCAiPz8/Iiwgc2l6ZW9mKGtleWhhbmRsZXJfc2NyYXRjaCkpOworCisgICAgICAgICAg ICBwcmludGsoIiAgICAgICAlM3U6IHBub2RlICVzLCIsIGksIGtleWhhbmRsZXJfc2NyYXRjaCk7 CisKKyAgICAgICAgICAgIHByaW50aygiIHZjcHVzICIpOworCisgICAgICAgICAgICBmb3IgKCBq ID0gMDsgaiA8IGQtPm1heF92Y3B1czsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpZiAoICEoaiAmIDB4M2YpICkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc19wZW5k aW5nX3NvZnRpcnFzKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHZudW1hLT52Y3B1X3RvX3Zu b2RlW2pdID09IGkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCBzdGFydF9jcHUgPT0gfjBVICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRrKCIlZCIsIGopOworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnRfY3B1ID0gajsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBlbHNlIGlmICggc3RhcnRfY3B1ICE9IH4wVSApCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGogLSAxICE9IHN0YXJ0X2NwdSApCisgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGsoIi0lZCAiLCBqIC0gMSk7CisgICAgICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiICIpOworICAgICAg ICAgICAgICAgICAgICBzdGFydF9jcHUgPSB+MFU7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHN0YXJ0X2NwdSAhPSB+MFUgICYmIHN0YXJ0X2Nw dSAhPSBqIC0gMSApCisgICAgICAgICAgICAgICAgcHJpbnRrKCItJWQiLCBqIC0gMSk7CisKKyAg ICAgICAgICAgIHByaW50aygiXG4iKTsKKworICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB2 bnVtYS0+bnJfdm1lbXJhbmdlczsgaisrICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBpZiAoIHZudW1hLT52bWVtcmFuZ2Vbal0ubmlkID09IGkgKQorICAgICAgICAgICAgICAgICAg ICBwcmludGsoIiAgICAgICAgICAgJTAxNiJQUkl4NjQiIC0gJTAxNiJQUkl4NjQiXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm51bWEtPnZtZW1yYW5nZVtqXS5zdGFydCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZudW1hLT52bWVtcmFuZ2Vbal0uZW5kKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJlYWRfdW5sb2NrKCZkLT52bnVtYV9yd2xvY2sp OworICAgIH0KKworICAgIHJjdV9yZWFkX3VubG9jaygmZG9tbGlzdF9yZWFkX2xvY2spOworfQor CitzdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9udW1hX3RyaWdnZXIodm9pZCkKK3sKKyAgICBy ZWdpc3Rlcl9rZXloYW5kbGVyKCd1JywgZHVtcF9udW1hLCAiZHVtcCBOVU1BIGluZm8iLCAxKTsK KyAgICByZXR1cm4gMDsKK30KK19faW5pdGNhbGwocmVnaXN0ZXJfbnVtYV90cmlnZ2VyKTsKKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVu ZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmggYi94ZW4vaW5j bHVkZS9hc20teDg2L251bWEuaAppbmRleCA3MjM3YWQxLi40MjFlOGI3IDEwMDY0NAotLS0gYS94 ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEu aApAQCAtMTcsMjcgKzE3LDEyIEBAIGV4dGVybiBjcHVtYXNrX3QgICAgIG5vZGVfdG9fY3B1bWFz a1tdOwogI2RlZmluZSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKSAgKF9fZmZzKG5vZGVfdG9fY3B1 bWFza1tub2RlXSkpCiAjZGVmaW5lIG5vZGVfdG9fY3B1bWFzayhub2RlKSAgICAobm9kZV90b19j cHVtYXNrW25vZGVdKQogCi1zdHJ1Y3Qgbm9kZSB7Ci0gICAgcGFkZHJfdCBzdGFydDsKLSAgICBw YWRkcl90IGVuZDsKLX07Ci0KLWV4dGVybiBpbnQgY29tcHV0ZV9tZW1ub2RlX3NoaWZ0KHN0cnVj dCBub2RlICpub2RlcywgaW50IG51bW5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbm9kZWlkX3QgKm5vZGVpZHMsIHVuc2lnbmVkIGludCAqc2hpZnQpOwogZXh0ZXJuIG5v ZGVpZF90IHB4bV90b19ub2RlKHVuc2lnbmVkIGludCBweG0pOwogCiAjZGVmaW5lIFpPTkVfQUxJ R04gKDFVTCA8PCAoTUFYX09SREVSK1BBR0VfU0hJRlQpKQogCiBleHRlcm4gdm9pZCBudW1hX2Fk ZF9jcHUoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBudW1hX2luaXRfYXJyYXkodm9pZCk7Ci1leHRl cm4gYm9vbCBzcmF0X2Rpc2FibGVkKHZvaWQpOwotZXh0ZXJuIHZvaWQgbnVtYV9zZXRfbm9kZShp bnQgY3B1LCBub2RlaWRfdCBub2RlKTsKLWV4dGVybiBub2RlaWRfdCBhY3BpX3NldHVwX25vZGUo dW5zaWduZWQgaW50IHB4bSk7Ci1leHRlcm4gdm9pZCBzcmF0X2RldGVjdF9ub2RlKGludCBjcHUp OwotCi1leHRlcm4gdm9pZCBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qgbm9kZWlkLCBwYWRk cl90IHN0YXJ0LCBwYWRkcl90IGVuZCk7CiBleHRlcm4gbm9kZWlkX3QgYXBpY2lkX3RvX25vZGVb XTsKLWV4dGVybiB2b2lkIGluaXRfY3B1X3RvX25vZGUodm9pZCk7CiAKIC8qIFNpbXBsZSBwZXJm ZWN0IGhhc2ggdG8gbWFwIHBkeCB0byBub2RlIG51bWJlcnMgKi8KIGV4dGVybiB1bnNpZ25lZCBp bnQgbWVtbm9kZV9zaGlmdDsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9udW1hLmggYi94 ZW4vaW5jbHVkZS94ZW4vbnVtYS5oCmluZGV4IDkyMmZiZDguLmVlZDQwYWYgMTAwNjQ0Ci0tLSBh L3hlbi9pbmNsdWRlL3hlbi9udW1hLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL251bWEuaApAQCAt MTQsNiArMTQsMjEgQEAKIAogI2RlZmluZSBNQVhfTlVNTk9ERVMgICAgKDEgPDwgTk9ERVNfU0hJ RlQpCiAKK3N0cnVjdCBub2RlIHsKKyAgICBwYWRkcl90IHN0YXJ0OworICAgIHBhZGRyX3QgZW5k OworfTsKKworZXh0ZXJuIGludCBjb21wdXRlX21lbW5vZGVfc2hpZnQoc3RydWN0IG5vZGUgKm5v ZGVzLCBpbnQgbnVtbm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl aWRfdCAqbm9kZWlkcywgdW5zaWduZWQgaW50ICpzaGlmdCk7CitleHRlcm4gdm9pZCBudW1hX2lu aXRfYXJyYXkodm9pZCk7CitleHRlcm4gYm9vbF90IHNyYXRfZGlzYWJsZWQodm9pZCk7CitleHRl cm4gdm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIG5vZGVpZF90IG5vZGUpOworZXh0ZXJuIG5v ZGVpZF90IGFjcGlfc2V0dXBfbm9kZSh1bnNpZ25lZCBpbnQgcHhtKTsKK2V4dGVybiB2b2lkIHNy YXRfZGV0ZWN0X25vZGUoaW50IGNwdSk7CitleHRlcm4gdm9pZCBzZXR1cF9ub2RlX2Jvb3RtZW0o bm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCk7CitleHRlcm4gdm9p ZCBpbml0X2NwdV90b19ub2RlKHZvaWQpOworCiAjZGVmaW5lIHZjcHVfdG9fbm9kZSh2KSAoY3B1 X3RvX25vZGUoKHYpLT5wcm9jZXNzb3IpKQogCiAjZGVmaW5lIGRvbWFpbl90b19ub2RlKGQpIFwK QEAgLTIzLDQgKzM4LDcgQEAKIGJvb2wgaXNfbnVtYV9vZmYodm9pZCk7CiBib29sIGdldF9hY3Bp X251bWEodm9pZCk7CiB2b2lkIHNldF9hY3BpX251bWEoYm9vbCB2YWwpOworaW50IGdldF9udW1h X2Zha2Uodm9pZCk7CitleHRlcm4gaW50IG51bWFfZW11bGF0aW9uKHVpbnQ2NF90IHN0YXJ0X3Bm biwgdWludDY0X3QgZW5kX3Bmbik7CitleHRlcm4gdm9pZCBudW1hX2R1bW15X2luaXQodWludDY0 X3Qgc3RhcnRfcGZuLCB1aW50NjRfdCBlbmRfcGZuKTsKICNlbmRpZiAvKiBfWEVOX05VTUFfSCAq LwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK