From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Sat, 13 Nov 1999 20:22:03 +0100 (CET) From: Ingo Molnar Subject: [patch] zoned-2.3.28-G4, zone-allocator, highmem, bootmem fixes Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="650352740-790050170-942520923=:4346" Sender: owner-linux-mm@kvack.org Return-Path: To: Linus Torvalds Cc: MM mailing list , linux-kernel@vger.rutgers.edu, "Stephen C. Tweedie" , Christoph Rohland List-ID: --650352740-790050170-942520923=:4346 Content-Type: TEXT/PLAIN; charset=US-ASCII Changes: - implemented 'zone chains' zonelist_t and gfp_mask indexed zonelists[] speedups (Linus' idea) to handle fallback zones. This should enable advanced NUMA-style allocations as well. [fallback to different CPUs is possible via changing build_zonelists().] - <=16MB RAM boxes should boot just fine now. - added page->zone for easier deallocation and generic cleanliness. This also helps NUMA. - cleaned up the page-allocator namespace, there are only two 'core' page-allocation functions left: __alloc_pages() and __free_pages_ok(). - modules should compile again. - we are now inlining the 'put_page_testzero()' part of __free_page_ok. This is subtle as page->count for reserved pages is now 'rotating' - this is fine though and lets us to put the rare PageReserved() branch into __free_page_ok(). - cleaned up pgtable.h, split into lowlevel and highlevel parts, this fixes dependencies in mm.h & misc.c. - serial.c didnt clear freshly allocated bootmem - as a result now all bootmem allocations are explicitly cleared, it's not performance critical anyway. - fixed code,data,initmem reporting. - fixed boot task's swapper_pg_dir clearing comments, reports welcome. -- mingo --650352740-790050170-942520923=:4346 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="zoned-2.3.28-G4" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="zoned-2.3.28-G4" LS0tIGxpbnV4L2ZzL2V4ZWMuYy5vcmlnCVNhdCBOb3YgMTMgMDU6NDY6MTIg MTk5OQ0KKysrIGxpbnV4L2ZzL2V4ZWMuYwlTYXQgTm92IDEzIDA1OjQ2OjE3 IDE5OTkNCkBAIC0zNSw3ICszNSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2hp Z2htZW0uaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5j bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu aD4NCiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+DQogDQogI2lmZGVm IENPTkZJR19LTU9EDQotLS0gbGludXgvZnMvYmluZm10X2VsZi5jLm9yaWcJ U2F0IE5vdiAxMyAwNTo0OTo0MyAxOTk5DQorKysgbGludXgvZnMvYmluZm10 X2VsZi5jCVNhdCBOb3YgMTMgMDU6NDk6NDkgMTk5OQ0KQEAgLTMxLDcgKzMx LDcgQEANCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KIA0KICNpbmNsdWRl IDxhc20vdWFjY2Vzcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpbmNsdWRlIDxsaW51 eC9jb25maWcuaD4NCiANCi0tLSBsaW51eC9pbml0L21haW4uYy5vcmlnCVNh dCBOb3YgMTMgMDE6NTY6NDAgMTk5OQ0KKysrIGxpbnV4L2luaXQvbWFpbi5j CVNhdCBOb3YgMTMgMDI6MTE6MjEgMTk5OQ0KQEAgLTQ3OSw3ICs0NzksNiBA QA0KIAkJDQogCQlzaXplID0gcHJvZl9sZW4gKiBzaXplb2YodW5zaWduZWQg aW50KSArIFBBR0VfU0laRS0xOw0KIAkJcHJvZl9idWZmZXIgPSAodW5zaWdu ZWQgaW50ICopIGFsbG9jX2Jvb3RtZW0oc2l6ZSk7DQotCQltZW1zZXQocHJv Zl9idWZmZXIsIDAsIHNpemUpOw0KIAl9DQogDQogCWttZW1fY2FjaGVfaW5p dCgpOw0KLS0tIGxpbnV4L2tlcm5lbC9mb3JrLmMub3JpZwlTYXQgTm92IDEz IDA1OjEwOjM0IDE5OTkNCisrKyBsaW51eC9rZXJuZWwvZm9yay5jCVNhdCBO b3YgMTMgMDU6MTA6MzYgMTk5OQ0KQEAgLTE5LDYgKzE5LDcgQEANCiAjaW5j bHVkZSA8bGludXgvdm1hbGxvYy5oPg0KIA0KICNpbmNsdWRlIDxhc20vcGd0 YWJsZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRl IDxhc20vdWFjY2Vzcy5oPg0KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQu aD4NCiANCi0tLSBsaW51eC9rZXJuZWwva3N5bXMuYy5vcmlnCVNhdCBOb3Yg MTMgMTE6MDU6MjcgMTk5OQ0KKysrIGxpbnV4L2tlcm5lbC9rc3ltcy5jCVNh dCBOb3YgMTMgMTE6MDU6MjggMTk5OQ0KQEAgLTkyLDkgKzkyLDggQEANCiBF WFBPUlRfU1lNQk9MKGV4aXRfc2lnaGFuZCk7DQogDQogLyogaW50ZXJuYWwg a2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50ICovDQotRVhQT1JUX1NZTUJPTChf X2dldF9mcmVlX3BhZ2VzKTsNCi1FWFBPUlRfU1lNQk9MKGZyZWVfcGFnZXMp Ow0KLUVYUE9SVF9TWU1CT0woX19mcmVlX3BhZ2UpOw0KK0VYUE9SVF9TWU1C T0woX19hbGxvY2F0ZV9wYWdlcyk7DQorRVhQT1JUX1NZTUJPTChfX2ZyZWVf cGFnZXNfb2spOw0KIEVYUE9SVF9TWU1CT0woa21lbV9maW5kX2dlbmVyYWxf Y2FjaGVwKTsNCiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY3JlYXRlKTsN CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZGVzdHJveSk7DQotLS0gbGlu dXgvbW0vYm9vdG1lbS5jLm9yaWcJU2F0IE5vdiAxMyAwMTo1Njo0NiAxOTk5 DQorKysgbGludXgvbW0vYm9vdG1lbS5jCVNhdCBOb3YgMTMgMDk6MjQ6MzMg MTk5OQ0KQEAgLTE5Niw3ICsxOTYsNyBAQA0KIAlmb3IgKGkgPSBzdGFydDsg aSA8IHN0YXJ0K2FyZWFzaXplOyBpKyspDQogCQlpZiAodGVzdF9hbmRfc2V0 X2JpdChpLCBib290bWVtX21hcCkpDQogCQkJQlVHKCk7DQotDQorCW1lbXNl dChyZXQsIDAsIHNpemUpOw0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCi0tLSBs aW51eC9tbS9wYWdlX2FsbG9jLmMub3JpZwlTYXQgTm92IDEzIDAxOjU2OjQ2 IDE5OTkNCisrKyBsaW51eC9tbS9wYWdlX2FsbG9jLmMJU2F0IE5vdiAxMyAx MDo1MzowNCAxOTk5DQpAQCAtMjYsNTcgKzI2LDE1IEBADQogaW50IG5yX2xy dV9wYWdlczsNCiBMSVNUX0hFQUQobHJ1X2NhY2hlKTsNCiANCi0vKg0KLSAq IEZyZWUgYXJlYSBtYW5hZ2VtZW50DQotICoNCi0gKiBUaGUgZnJlZV9hcmVh X2xpc3QgYXJyYXlzIHBvaW50IHRvIHRoZSBxdWV1ZSBoZWFkcyBvZiB0aGUg ZnJlZSBhcmVhcw0KLSAqIG9mIGRpZmZlcmVudCBzaXplcw0KLSAqLw0KLQ0K LSNpZiBDT05GSUdfQVAxMDAwDQotLyogdGhlIEFQKyBuZWVkcyB0byBhbGxv Y2F0ZSA4TUIgY29udGlndW91cywgYWxpZ25lZCBjaHVua3Mgb2YgcmFtDQot ICAgZm9yIHRoZSByaW5nIGJ1ZmZlcnMgKi8NCi0jZGVmaW5lIE1BWF9PUkRF UiAxMg0KLSNlbHNlDQotI2RlZmluZSBNQVhfT1JERVIgMTANCi0jZW5kaWYN Ci0NCi10eXBlZGVmIHN0cnVjdCBmcmVlX2FyZWFfc3RydWN0IHsNCi0Jc3Ry dWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7DQotCXVuc2lnbmVkIGludCAqIG1h cDsNCi19IGZyZWVfYXJlYV90Ow0KLQ0KLSNkZWZpbmUgWk9ORV9ETUEJCTAN Ci0jZGVmaW5lIFpPTkVfTk9STUFMCQkxDQotDQotI2lmZGVmIENPTkZJR19I SUdITUVNDQotIyBkZWZpbmUgWk9ORV9ISUdITUVNCQkyDQotIyBkZWZpbmUg TlJfWk9ORVMJCTMNCi0jZWxzZQ0KLSMgZGVmaW5lIE5SX1pPTkVTCQkyDQot I2VuZGlmDQotDQotdHlwZWRlZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3Qgew0KLQlz cGlubG9ja190IGxvY2s7DQotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Ow0KLQl1 bnNpZ25lZCBsb25nIHNpemU7DQotCWZyZWVfYXJlYV90IGZyZWVfYXJlYVtN QVhfT1JERVJdOw0KLQ0KLQl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7DQot CXVuc2lnbmVkIGxvbmcgcGFnZXNfbG93LCBwYWdlc19oaWdoOw0KLQlpbnQg bG93X29uX21lbW9yeTsNCi0JY2hhciAqIG5hbWU7DQotfSB6b25lX3Q7DQot DQotc3RhdGljIHpvbmVfdCB6b25lc1tOUl9aT05FU10gPQ0KK3N0YXRpYyB6 b25lX3Qgem9uZXMgW01BWF9OUl9aT05FU10gPQ0KIAl7DQogCQl7IG5hbWU6 ICJETUEiIH0sDQogCQl7IG5hbWU6ICJOb3JtYWwiIH0sDQotI2lmZGVmIENP TkZJR19ISUdITUVNDQogCQl7IG5hbWU6ICJIaWdoTWVtIiB9DQotI2VuZGlm DQogCX07DQogDQorem9uZWxpc3RfdCB6b25lbGlzdHMgW05SX0dGUElOREVY XTsNCisNCiAvKg0KICAqIEZyZWVfcGFnZSgpIGFkZHMgdGhlIHBhZ2UgdG8g dGhlIGZyZWUgbGlzdHMuIFRoaXMgaXMgb3B0aW1pemVkIGZvcg0KICAqIGZh c3Qgbm9ybWFsIGNhc2VzIChubyBlcnJvciBqdW1wcyB0YWtlbiBub3JtYWxs eSkuDQpAQCAtMTA4LDI4ICs2NiwxMyBAQA0KICAqIEhpbnQ6IC1tYXNrID0g MSt+bWFzaw0KICAqLw0KIA0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3Bh Z2VzX29rIChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBtYXBf bnIsIHVuc2lnbmVkIGxvbmcgb3JkZXIpDQorc3RhdGljIGlubGluZSB2b2lk IGFkZHF1ZXVlICh6b25lX3QgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlLA0K KwkJCQl1bnNpZ25lZCBsb25nIG1hcF9uciwgdW5zaWduZWQgbG9uZyBvcmRl cikNCiB7DQotCXN0cnVjdCBmcmVlX2FyZWFfc3RydWN0ICphcmVhOw0KIAl1 bnNpZ25lZCBsb25nIGluZGV4LCBwYWdlX2lkeCwgbWFzaywgb2Zmc2V0Ow0K KwlzdHJ1Y3QgZnJlZV9hcmVhX3N0cnVjdCAqYXJlYTsNCiAJdW5zaWduZWQg bG9uZyBmbGFnczsNCiAJc3RydWN0IHBhZ2UgKmJ1ZGR5Ow0KLQl6b25lX3Qg KnpvbmU7DQotCWludCBpOw0KLQ0KLQkvKg0KLQkgKiBXaGljaCB6b25lIGlz IHRoaXMgcGFnZSBiZWxvbmdpbmcgdG8uDQotCSAqDQotCSAqIChOUl9aT05F UyBpcyBsb3csIGFuZCB3ZSBkbyBub3Qgd2FudCAoeWV0KSB0byBpbnRyb2R1 Y2UNCi0JICogcHV0IHBhZ2UtPnpvbmUsIGl0IGluY3JlYXNlcyB0aGUgc2l6 ZSBvZiBtZW1fbWFwW10NCi0JICogdW5uZWNlc3NlcmlseS4gVGhpcyBzbWFs bCBsb29wIGlzIGJhc2ljYWxseSBlcXVpdmFsZW50DQotCSAqIHRvIHRoZSBw cmV2aW91cyAjaWZkZWYganVuZ2xlLCBzcGVlZC13aXNlLikNCi0JICovDQot CWkgPSBOUl9aT05FUy0xOw0KLQl6b25lID0gem9uZXMgKyBpOw0KLQlmb3Ig KCA7IGkgPj0gMDsgaS0tLCB6b25lLS0pDQotCQlpZiAobWFwX25yID49IHpv bmUtPm9mZnNldCkNCi0JCQlicmVhazsNCiANCiAJbWFzayA9ICh+MFVMKSA8 PCBvcmRlcjsNCiAJb2Zmc2V0ID0gem9uZS0+b2Zmc2V0Ow0KQEAgLTE3OCwz NiArMTIxLDM3IEBADQogCWNoYW5nZV9iaXQoKGluZGV4KSA+PiAoMSsob3Jk ZXIpKSwgKGFyZWEpLT5tYXApDQogI2RlZmluZSBBRERSRVNTKHgpIChQQUdF X09GRlNFVCArICgoeCkgPDwgUEFHRV9TSElGVCkpDQogDQotaW50IF9fZnJl ZV9wYWdlIChzdHJ1Y3QgcGFnZSAqcGFnZSkNCit2b2lkIF9fZnJlZV9wYWdl c19vayAoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb3JkZXIp DQogew0KLQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJiBwdXRfcGFnZV90 ZXN0emVybyhwYWdlKSkgew0KLQkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkp DQotCQkJUEFHRV9CVUcocGFnZSk7DQotCQlpZiAoUGFnZUxvY2tlZChwYWdl KSkNCi0JCQlQQUdFX0JVRyhwYWdlKTsNCisJdW5zaWduZWQgbG9uZyBtYXBf bnI7DQorCXpvbmVfdCAqem9uZTsNCiANCi0JCWZyZWVfcGFnZXNfb2socGFn ZSwgcGFnZS1tZW1fbWFwLCAwKTsNCi0JCXJldHVybiAxOw0KLQl9DQotCXJl dHVybiAwOw0KLX0NCisJLyoNCisJICogU3VidGxlLg0KKwkgKi8NCisJaWYg KFBhZ2VSZXNlcnZlZChwYWdlKSkNCisJCXJldHVybjsNCiANCi1pbnQgZnJl ZV9wYWdlcyAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG9y ZGVyKQ0KLXsNCi0JdW5zaWduZWQgbG9uZyBtYXBfbnIgPSBNQVBfTlIoYWRk cik7DQorCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQ0KKwkJUEFHRV9CVUco cGFnZSk7DQorCWlmIChQYWdlTG9ja2VkKHBhZ2UpKQ0KKwkJUEFHRV9CVUco cGFnZSk7DQogDQotCWlmIChtYXBfbnIgPCBtYXhfbWFwbnIpIHsNCi0JCW1l bV9tYXBfdCAqIG1hcCA9IG1lbV9tYXAgKyBtYXBfbnI7DQotCQlpZiAoIVBh Z2VSZXNlcnZlZChtYXApICYmIHB1dF9wYWdlX3Rlc3R6ZXJvKG1hcCkpIHsN Ci0JCQlpZiAoUGFnZVN3YXBDYWNoZShtYXApKQ0KLQkJCQlQQUdFX0JVRyht YXApOw0KLQkJCWlmIChQYWdlTG9ja2VkKG1hcCkpDQotCQkJCVBBR0VfQlVH KG1hcCk7DQotCQkJZnJlZV9wYWdlc19vayhtYXAsIG1hcF9uciwgb3JkZXIp Ow0KLQkJCXJldHVybiAxOw0KLQkJfQ0KLQl9DQotCXJldHVybiAwOw0KKwkv Kg0KKwkgKiBXaGljaCB6b25lIGRvZXMgdGhpcyBwYWdlIGJlbG9uZyB0by4N CisJICoNCisJICogKE1BWF9OUl9aT05FUyBpcyBsb3csIGFuZCB3ZSBkbyBu b3Qgd2FudCAoeWV0KSB0byBpbnRyb2R1Y2UNCisJICogcHV0IHBhZ2UtPnpv bmUsIGl0IGluY3JlYXNlcyB0aGUgc2l6ZSBvZiBtZW1fbWFwW10NCisJICog dW5uZWNlc3NlcmlseS4gVGhpcyBzbWFsbCBsb29wIGlzIGJhc2ljYWxseSBl cXVpdmFsZW50DQorCSAqIHRvIHRoZSBwcmV2aW91cyAjaWZkZWYganVuZ2xl LCBzcGVlZC13aXNlLikNCisJICovDQorCW1hcF9uciA9IHBhZ2UtbWVtX21h cDsNCisJaWYgKG1hcF9uciA+PSBtYXhfbWFwbnIpDQorCQlCVUcoKTsNCisN CisJem9uZSA9IHBhZ2UtPnpvbmU7DQorDQorCWFkZHF1ZXVlKHpvbmUsIHBh Z2UsIG1hcF9uciwgb3JkZXIpOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGxvbmcgRVhQQU5EICh6b25lX3QgKnpvbmUsIHN0cnVjdCBwYWdl ICptYXAsIHVuc2lnbmVkIGxvbmcgaW5kZXgsDQpAQCAtMjY4LDYgKzIxMiw5 IEBADQogCXJldHVybiBOVUxMOw0KIH0NCiANCisjZGVmaW5lIFpPTkVfQkFM QU5DRUQoem9uZSkgXA0KKwkoKCh6b25lKS0+ZnJlZV9wYWdlcyA+ICh6b25l KS0+cGFnZXNfbG93KSAmJiAoISh6b25lKS0+bG93X29uX21lbW9yeSkpDQor DQogc3RhdGljIGlubGluZSBpbnQgYmFsYW5jZV9tZW1vcnkgKHpvbmVfdCAq em9uZSwgaW50IGdmcF9tYXNrKQ0KIHsNCiAJaW50IGZyZWVkOw0KQEAgLTI4 Niw2ICsyMzMsMTQgQEANCiAJfQ0KIAl6b25lLT5sb3dfb25fbWVtb3J5ID0g MTsNCiANCisJLyoNCisJICogSW4gdGhlIGF0b21pYyBhbGxvY2F0aW9uIGNh c2Ugd2Ugb25seSAna2ljaycgdGhlDQorCSAqIHN0YXRlIG1hY2hpbmUsIGJ1 dCBkbyBub3QgdHJ5IHRvIGZyZWUgcGFnZXMNCisJICogb3Vyc2VsdmVzLg0K KwkgKi8NCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkNCisJCXJl dHVybiAxOw0KKw0KIAljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsN CiAJZnJlZWQgPSB0cnlfdG9fZnJlZV9wYWdlcyhnZnBfbWFzayk7DQogCWN1 cnJlbnQtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsNCkBAIC0yOTUsMTAgKzI1 MCwxNCBAQA0KIAlyZXR1cm4gMTsNCiB9DQogDQotc3RhdGljIGlubGluZSBz dHJ1Y3QgcGFnZSAqIF9fZ2V0X3BhZ2VzICh6b25lX3QgKnpvbmUsIHVuc2ln bmVkIGludCBnZnBfbWFzaywNCi0JCQl1bnNpZ25lZCBsb25nIG9yZGVyKQ0K Ky8qDQorICogVGhpcyBpcyB0aGUgJ2hlYXJ0JyBvZiB0aGUgem9uZWQgYnVk ZHkgYWxsb2NhdG9yOg0KKyAqLw0KK3N0cnVjdCBwYWdlICogX19hbGxvY19w YWdlcyAoem9uZWxpc3RfdCAqem9uZWxpc3QsIHVuc2lnbmVkIGxvbmcgb3Jk ZXIpDQogew0KKwl6b25lX3QgKip6b25lOw0KIAlzdHJ1Y3QgcGFnZSAqcGFn ZTsNCisJaW50IGdmcF9tYXNrOw0KIA0KIAlpZiAob3JkZXIgPj0gTUFYX09S REVSKQ0KIAkJZ290byBub3BhZ2U7DQpAQCAtMzA2LDI4ICsyNjUsMzEgQEAN CiAJLyoNCiAJICogSWYgYW55b25lIGNhbGxzIGdmcCBmcm9tIGludGVycnVw dHMgbm9uYXRvbWljYWxseSB0aGVuIGl0DQogCSAqIHdpbGwgc29vbmVyIG9y IGxhdGVyIHRyaXBwZWQgdXAgYnkgYSBzY2hlZHVsZSgpLg0KLQkgKi8NCi0N Ci0JLyoNCi0JICogSWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCB3ZSdk IGJldHRlcg0KLQkgKiBkbyBvdXIgYmVzdCB0byBqdXN0IGFsbG9jYXRlIHRo aW5ncyB3aXRob3V0DQotCSAqIGZ1cnRoZXIgdGhvdWdodC4NCi0JICovDQot CWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQ0KLQkJaWYg KCFiYWxhbmNlX21lbW9yeSh6b25lLCBnZnBfbWFzaykpDQotCQkJZ290byBu b3BhZ2U7DQotCS8qDQorCSAqDQogCSAqIFdlIGFyZSBmYWxsaW5nIGJhY2sg dG8gbG93ZXItbGV2ZWwgem9uZXMgaWYgYWxsb2NhdGlvbg0KLQkgKiBpbiBh IGhpZ2hlciB6b25lIGZhaWxzLiBUaGlzIGFzc3VtZXMgYSBoaWVyYXJjaGlj YWwNCi0JICogZGVwZW5kZW5jeSBiZXR3ZWVuIHpvbmVzLCB3aGljaCBpcyB0 cnVlIGN1cnJlbnRseS4gSWYNCi0JICogeW91IG5lZWQgc29tZXRoaW5nIGVs c2UgdGhlbiBtb3ZlIHRoaXMgbG9vcCBvdXRzaWRlDQotCSAqIHRoaXMgZnVu Y3Rpb24sIGludG8gdGhlIHpvbmUtc3BlY2lmaWMgYWxsb2NhdG9yLg0KKwkg KiBpbiBhIGhpZ2hlciB6b25lIGZhaWxzLg0KIAkgKi8NCisJem9uZSA9IHpv bmVsaXN0LT56b25lczsNCisJZ2ZwX21hc2sgPSB6b25lbGlzdC0+Z2ZwX21h c2s7DQogCWRvIHsNCi0JCXBhZ2UgPSBybXF1ZXVlKHpvbmUsIG9yZGVyKTsN CisJCWlmICghKCp6b25lKS0+c2l6ZSkNCisJCQlCVUcoKTsNCisJCS8qDQor CQkgKiBJZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIHdlJ2QgYmV0dGVy DQorCQkgKiBkbyBvdXIgYmVzdCB0byBqdXN0IGFsbG9jYXRlIHRoaW5ncyB3 aXRob3V0DQorCQkgKiBmdXJ0aGVyIHRob3VnaHQuDQorCQkgKi8NCisJCWlm ICghKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQ0KKwkJCS8qDQor CQkJICogZmFzdHBhdGgNCisJCQkgKi8NCisJCQlpZiAoIVpPTkVfQkFMQU5D RUQoKnpvbmUpKQ0KKwkJCQlnb3RvIGJhbGFuY2U7DQorcmVhZHk6DQorCQlw YWdlID0gcm1xdWV1ZSgqem9uZSwgb3JkZXIpOw0KIAkJaWYgKHBhZ2UpDQog CQkJcmV0dXJuIHBhZ2U7DQotCX0gd2hpbGUgKHpvbmUtLSAhPSB6b25lcykg Ow0KKwl9IHdoaWxlICgqKCsrem9uZSkpIDsNCiANCiAJLyoNCiAJICogSWYg d2UgY2FuIHNjaGVkdWxlLCBkbyBzbywgYW5kIG1ha2Ugc3VyZSB0byB5aWVs ZC4NCkBAIC0zNDEsMzcgKzMwMywxNCBAQA0KIA0KIG5vcGFnZToNCiAJcmV0 dXJuIE5VTEw7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgem9uZV90ICogZ2Zw X21hc2tfdG9fem9uZSAoaW50IGdmcF9tYXNrKQ0KLXsNCi0Jem9uZV90ICp6 b25lOw0KLQ0KLSNpZiBDT05GSUdfSElHSE1FTQ0KLQlpZiAoZ2ZwX21hc2sg JiBfX0dGUF9ISUdITUVNKQ0KLQkJem9uZSA9IHpvbmVzICsgWk9ORV9ISUdI TUVNOw0KLQllbHNlDQotI2VuZGlmDQotCQlpZiAoZ2ZwX21hc2sgJiBfX0dG UF9ETUEpDQotCQkJem9uZSA9IHpvbmVzICsgWk9ORV9ETUE7DQotCQllbHNl DQotCQkJem9uZSA9IHpvbmVzICsgWk9ORV9OT1JNQUw7DQotCXJldHVybiB6 b25lOw0KLX0NCi0NCi11bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXMg KGludCBnZnBfbWFzaywgdW5zaWduZWQgbG9uZyBvcmRlcikNCi17DQotCXN0 cnVjdCBwYWdlICpwYWdlOw0KIA0KLQlwYWdlID0gX19nZXRfcGFnZXMoZ2Zw X21hc2tfdG9fem9uZShnZnBfbWFzayksIGdmcF9tYXNrLCBvcmRlcik7DQot CWlmICghcGFnZSkNCi0JCXJldHVybiAwOw0KLQlyZXR1cm4gcGFnZV9hZGRy ZXNzKHBhZ2UpOw0KLX0NCi0NCi1zdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2Vz IChpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgb3JkZXIpDQotew0KLQly ZXR1cm4gX19nZXRfcGFnZXMoZ2ZwX21hc2tfdG9fem9uZShnZnBfbWFzayks IGdmcF9tYXNrLCBvcmRlcik7DQorLyoNCisgKiBUaGUgbWFpbiBjaHVuayBv ZiB0aGUgYmFsYW5jaW5nIGNvZGUgaXMgaW4gdGhpcyBvZmZsaW5lIGJyYW5j aDoNCisgKi8NCitiYWxhbmNlOg0KKwlpZiAoIWJhbGFuY2VfbWVtb3J5KCp6 b25lLCBnZnBfbWFzaykpDQorCQlnb3RvIG5vcGFnZTsNCisJZ290byByZWFk eTsNCiB9DQogDQogLyoNCkBAIC0zODMsNyArMzIyLDcgQEANCiAJem9uZV90 ICp6b25lOw0KIA0KIAlzdW0gPSAwOw0KLQlmb3IgKHpvbmUgPSB6b25lczsg em9uZSA8IHpvbmVzK05SX1pPTkVTOyB6b25lKyspDQorCWZvciAoem9uZSA9 IHpvbmVzOyB6b25lIDwgem9uZXMgKyBNQVhfTlJfWk9ORVM7IHpvbmUrKykN CiAJCXN1bSArPSB6b25lLT5mcmVlX3BhZ2VzOw0KIAlyZXR1cm4gc3VtOw0K IH0NCkBAIC00MjksNyArMzY4LDcgQEANCiAJCWZyZWVwYWdlcy5sb3csDQog CQlmcmVlcGFnZXMuaGlnaCk7DQogDQotCWZvciAodHlwZSA9IDA7IHR5cGUg PCBOUl9aT05FUzsgdHlwZSsrKSB7DQorCWZvciAodHlwZSA9IDA7IHR5cGUg PCBNQVhfTlJfWk9ORVM7IHR5cGUrKykgew0KIAkJem9uZV90ICp6b25lID0g em9uZXMgKyB0eXBlOw0KICAJCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwOw0K IA0KQEAgLTQ1NSw2ICszOTQsNTUgQEANCiAjZW5kaWYJDQogfQ0KIA0KKy8q DQorICogQnVpbGRzIGFsbG9jYXRpb24gZmFsbGJhY2sgem9uZSBsaXN0cy4g V2UgYXJlIGJhc2ljYWxseSByZWFkeQ0KKyAqIHRvIGRvIE5VTUEtYWxsb2Nh dGlvbnMsIG9ubHkgdGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgbW9kaWZpZWQN CisgKiBhbmQgdGhlIHpvbmVsaXN0cyBhcnJheSBiZSBtYWRlIHBlci1DUFUu DQorICovDQorc3RhdGljIGlubGluZSB2b2lkIGJ1aWxkX3pvbmVsaXN0cyAo dm9pZCkNCit7DQorCWludCBpLCBqLCBrOw0KKw0KKwlmb3IgKGkgPSAwOyBp IDwgTlJfR0ZQSU5ERVg7IGkrKykgew0KKwkJem9uZWxpc3RfdCAqem9uZWxp c3Q7DQorCQl6b25lX3QgKnpvbmU7DQorDQorCQl6b25lbGlzdCA9IHpvbmVs aXN0cyArIGk7DQorCQltZW1zZXQoem9uZWxpc3QsIDAsIHNpemVvZigqem9u ZWxpc3QpKTsNCisNCisJCXpvbmVsaXN0LT5nZnBfbWFzayA9IGk7DQorCQlq ID0gMDsNCisJCWsgPSBaT05FX05PUk1BTDsNCisJCWlmIChpICYgX19HRlBf SElHSE1FTSkNCisJCQlrID0gWk9ORV9ISUdITUVNOw0KKwkJaWYgKGkgJiBf X0dGUF9ETUEpDQorCQkJayA9IFpPTkVfRE1BOw0KKw0KKwkJc3dpdGNoIChr KSB7DQorCQkJZGVmYXVsdDoNCisJCQkJQlVHKCk7DQorCQkJLyoNCisJCQkg KiBmYWxsdGhyb3VnaDoNCisJCQkgKi8NCisJCQljYXNlIFpPTkVfSElHSE1F TToNCisJCQkJem9uZSA9IHpvbmVzICsgWk9ORV9ISUdITUVNOw0KKwkJCQlp ZiAoem9uZS0+c2l6ZSkgew0KKyNpZm5kZWYgQ09ORklHX0hJR0hNRU0NCisJ CQkJCUJVRygpOw0KKyNlbmRpZg0KKwkJCQkJem9uZWxpc3QtPnpvbmVzW2or K10gPSB6b25lOw0KKwkJCQl9DQorCQkJY2FzZSBaT05FX05PUk1BTDoNCisJ CQkJem9uZSA9IHpvbmVzICsgWk9ORV9OT1JNQUw7DQorCQkJCWlmICh6b25l LT5zaXplKQ0KKwkJCQkJem9uZWxpc3QtPnpvbmVzW2orK10gPSB6b25lOw0K KwkJCWNhc2UgWk9ORV9ETUE6DQorCQkJCXpvbmVsaXN0LT56b25lc1tqKytd ID0gem9uZXMgKyBaT05FX0RNQTsNCisJCX0NCisJCXpvbmVsaXN0LT56b25l c1tqKytdID0gTlVMTDsNCisJfSANCit9DQorDQogI2RlZmluZSBMT05HX0FM SUdOKHgpICgoKHgpKyhzaXplb2YobG9uZykpLTEpJn4oKHNpemVvZihsb25n KSktMSkpDQogDQogLyoNCkBAIC00NzEsNyArNDU5LDcgQEANCiAJdW5zaWdu ZWQgaW50IHRvdGFscGFnZXMsIG9mZnNldDsNCiANCiAJdG90YWxwYWdlcyA9 IDA7DQotCWZvciAoaSA9IDA7IGkgPCBOUl9aT05FUzsgaSsrKQ0KKwlmb3Ig KGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspDQogCQl0b3RhbHBhZ2Vz ICs9IHpvbmVzX3NpemVbaV07DQogCXByaW50aygidG90YWxwYWdlczogJTA4 eFxuIiwgdG90YWxwYWdlcyk7DQogDQpAQCAtNDk4LDcgKzQ4Niw2IEBADQog CSAqLw0KIAltYXBfc2l6ZSA9IHRvdGFscGFnZXMqc2l6ZW9mKHN0cnVjdCBw YWdlKTsNCiAJbWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSBhbGxvY19ib290 bWVtKG1hcF9zaXplKTsNCi0JbWVtc2V0KG1lbV9tYXAsIDAsIG1hcF9zaXpl KTsNCiANCiAJLyoNCiAJICogSW5pdGlhbGx5IGFsbCBwYWdlcyBhcmUgcmVz ZXJ2ZWQgLSBmcmVlIG9uZXMgYXJlIGZyZWVkDQpAQCAtNTE0LDE4ICs1MDEs MjcgQEANCiAJfQ0KIA0KIAlvZmZzZXQgPSAwOwkNCi0JZm9yIChqID0gMDsg aiA8IE5SX1pPTkVTOyBqKyspIHsNCisJZm9yIChqID0gMDsgaiA8IE1BWF9O Ul9aT05FUzsgaisrKSB7DQogCQl6b25lX3QgKnpvbmUgPSB6b25lcyArIGo7 DQogCQl1bnNpZ25lZCBsb25nIG1hc2sgPSAtMTsNCiAJCXVuc2lnbmVkIGxv bmcgc2l6ZTsNCiANCiAJCXNpemUgPSB6b25lc19zaXplW2pdOw0KKwkJcHJp bnRrKCJ6b25lKCVsZCk6ICVsZCBwYWdlcy5cbiIsIGosIHNpemUpOw0KIAkJ em9uZS0+c2l6ZSA9IHNpemU7DQorCQlpZiAoIXNpemUpDQorCQkJY29udGlu dWU7DQorDQogCQl6b25lLT5vZmZzZXQgPSBvZmZzZXQ7DQogCQl6b25lLT5w YWdlc19sb3cgPSBmcmVlcGFnZXMubG93Ow0KIAkJem9uZS0+cGFnZXNfaGln aCA9IGZyZWVwYWdlcy5oaWdoOw0KIAkJem9uZS0+bG93X29uX21lbW9yeSA9 IDA7DQogDQorCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7DQorCQkJ c3RydWN0IHBhZ2UgKnBhZ2UgPSBtZW1fbWFwICsgb2Zmc2V0ICsgaTsNCisJ CQlwYWdlLT56b25lID0gem9uZTsNCisJCX0NCisNCiAJCW9mZnNldCArPSBz aXplOw0KIAkJZm9yIChpID0gMDsgaSA8IE1BWF9PUkRFUjsgaSsrKSB7DQog CQkJdW5zaWduZWQgbG9uZyBiaXRtYXBfc2l6ZTsNCkBAIC01NDEsNCArNTM3 LDUgQEANCiAJCQltZW1zZXQoKHZvaWQgKikgbWFwLCAwLCBiaXRtYXBfc2l6 ZSk7DQogCQl9DQogCX0NCisJYnVpbGRfem9uZWxpc3RzKCk7DQogfQ0KLS0t IGxpbnV4L21tL21wcm90ZWN0LmMub3JpZwlTYXQgTm92IDEzIDA1OjM5OjEx IDE5OTkNCisrKyBsaW51eC9tbS9tcHJvdGVjdC5jCVNhdCBOb3YgMTMgMDU6 NDQ6MzMgMTk5OQ0KQEAgLTksNyArOSw3IEBADQogI2luY2x1ZGUgPGxpbnV4 L21tYW4uaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5j bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu aD4NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQgY2hhbmdlX3B0ZV9yYW5nZShw bWRfdCAqIHBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLA0KIAl1bnNpZ25l ZCBsb25nIHNpemUsIHBncHJvdF90IG5ld3Byb3QpDQotLS0gbGludXgvbW0v bW1hcC5jLm9yaWcJU2F0IE5vdiAxMyAwNTo0Mzo1NSAxOTk5DQorKysgbGlu dXgvbW0vbW1hcC5jCVNhdCBOb3YgMTMgMDU6NDM6NTkgMTk5OQ0KQEAgLTE0 LDcgKzE0LDcgQEANCiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPg0KIA0KICNp bmNsdWRlIDxhc20vdWFjY2Vzcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJs ZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KIC8qIGRlc2Ny aXB0aW9uIG9mIGVmZmVjdHMgb2YgbWFwcGluZyB0eXBlIGFuZCBwcm90IGlu IGN1cnJlbnQgaW1wbGVtZW50YXRpb24uDQogICogdGhpcyBpcyBkdWUgdG8g dGhlIGxpbWl0ZWQgeDg2IHBhZ2UgcHJvdGVjdGlvbiBoYXJkd2FyZS4gIFRo ZSBleHBlY3RlZA0KLS0tIGxpbnV4L21tL21lbW9yeS5jLm9yaWcJU2F0IE5v diAxMyAwNTowMjoyNyAxOTk5DQorKysgbGludXgvbW0vbWVtb3J5LmMJU2F0 IE5vdiAxMyAwNTo0NDoyOSAxOTk5DQpAQCAtMzksMTQgKzM5LDE0IEBADQog I2luY2x1ZGUgPGxpbnV4L21tLmg+DQogI2luY2x1ZGUgPGxpbnV4L21tYW4u aD4NCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPg0KLSNpbmNsdWRlIDxsaW51 eC9wYWdlbWFwLmg+DQogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+DQog I2luY2x1ZGUgPGxpbnV4L3N3YXBjdGwuaD4NCiAjaW5jbHVkZSA8bGludXgv aW9idWYuaD4NCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCisjaW5jbHVk ZSA8YXNtL3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+DQogDQotI2luY2x1ZGUg PGFzbS91YWNjZXNzLmg+DQotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQog DQogdW5zaWduZWQgbG9uZyBtYXhfbWFwbnIgPSAwOw0KIHVuc2lnbmVkIGxv bmcgbnVtX3BoeXNwYWdlcyA9IDA7DQotLS0gbGludXgvbW0vZmlsZW1hcC5j Lm9yaWcJU2F0IE5vdiAxMyAwNTo0Mjo0MCAxOTk5DQorKysgbGludXgvbW0v ZmlsZW1hcC5jCVNhdCBOb3YgMTMgMDU6NDI6NDYgMTk5OQ0KQEAgLTIzLDcg KzIzLDcgQEANCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KICNpbmNsdWRl IDxsaW51eC9tbS5oPg0KIA0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRlIDxhc20vdWFj Y2Vzcy5oPg0KIA0KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+DQotLS0g bGludXgvbW0vbXJlbWFwLmMub3JpZwlTYXQgTm92IDEzIDA1OjA4OjEwIDE5 OTkNCisrKyBsaW51eC9tbS9tcmVtYXAuYwlTYXQgTm92IDEzIDA1OjQ0OjM1 IDE5OTkNCkBAIC0xMSw3ICsxMSw3IEBADQogI2luY2x1ZGUgPGxpbnV4L3N3 YXAuaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCi0jaW5jbHVk ZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4N CiANCiBleHRlcm4gaW50IHZtX2Vub3VnaF9tZW1vcnkobG9uZyBwYWdlcyk7 DQogDQotLS0gbGludXgvbW0vdm1hbGxvYy5jLm9yaWcJU2F0IE5vdiAxMyAw NTowNzo0MiAxOTk5DQorKysgbGludXgvbW0vdm1hbGxvYy5jCVNhdCBOb3Yg MTMgMDU6MDc6NDkgMTk5OQ0KQEAgLTksNiArOSw3IEBADQogI2luY2x1ZGUg PGxpbnV4L3ZtYWxsb2MuaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu aD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4NCiANCiBzdHJ1Y3Qgdm1f c3RydWN0ICogdm1saXN0ID0gTlVMTDsNCiANCi0tLSBsaW51eC9tbS9zbGFi LmMub3JpZwlTYXQgTm92IDEzIDA4OjA5OjQ4IDE5OTkNCisrKyBsaW51eC9t bS9zbGFiLmMJU2F0IE5vdiAxMyAwODoxMDo0NiAxOTk5DQpAQCAtMTA0Mywy MCArMTA0MywxMiBAQA0KIGludA0KIGttZW1fY2FjaGVfc2hyaW5rKGttZW1f Y2FjaGVfdCAqY2FjaGVwKQ0KIHsNCi0JaWYgKCFjYWNoZXApIHsNCi0JCXBy aW50ayhLRVJOX0VSUiAia21lbV9zaHJpbms6IE5VTEwgcHRyXG4iKTsNCi0J CXJldHVybiAyOw0KLQl9DQotCWlmIChpbl9pbnRlcnJ1cHQoKSkgew0KLQkJ cHJpbnRrKEtFUk5fRVJSICJrbWVtX3NocmluazogQ2FsbGVkIGR1cmluZyBp bnQgLSAlc1xuIiwgY2FjaGVwLT5jX25hbWUpOw0KLQkJcmV0dXJuIDI7DQot CX0NCi0NCi0JaWYgKCFpc19jaGFpbmVkX2ttZW1fY2FjaGUoY2FjaGVwKSkg ew0KLQkJcHJpbnRrKEtFUk5fRVJSICJrbWVtX3NocmluazogSW52YWxpZCBj YWNoZSBhZGRyICVwXG4iLA0KLQkJICAgICAgIGNhY2hlcCk7DQotCQlyZXR1 cm4gMjsNCi0JfQ0KKwlpZiAoIWNhY2hlcCkNCisJCUJVRygpOw0KKwlpZiAo aW5faW50ZXJydXB0KCkpDQorCQlCVUcoKTsNCisJaWYgKCFpc19jaGFpbmVk X2ttZW1fY2FjaGUoY2FjaGVwKSkNCisJCUJVRygpOw0KIA0KIAlyZXR1cm4g X19rbWVtX2NhY2hlX3NocmluayhjYWNoZXApOw0KIH0NCi0tLSBsaW51eC9p bmNsdWRlL2xpbnV4L21tLmgub3JpZwlTYXQgTm92IDEzIDAyOjM4OjM5IDE5 OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L21tLmgJU2F0IE5vdiAxMyAx MDozNjoyMSAxOTk5DQpAQCAtMTYsNiArMTYsNyBAQA0KIGV4dGVybiBpbnQg cGFnZV9jbHVzdGVyOw0KIA0KICNpbmNsdWRlIDxhc20vcGFnZS5oPg0KKyNp bmNsdWRlIDxhc20vcGd0YWJsZS5oPg0KICNpbmNsdWRlIDxhc20vYXRvbWlj Lmg+DQogDQogLyoNCkBAIC0xMTgsNiArMTE5LDggQEANCiAJdW5zaWduZWQg bG9uZyB2YWw7DQogfSBzd3BfZW50cnlfdDsNCiANCitzdHJ1Y3Qgem9uZV9z dHJ1Y3Q7DQorDQogLyoNCiAgKiBUcnkgdG8ga2VlcCB0aGUgbW9zdCBjb21t b25seSBhY2Nlc3NlZCBmaWVsZHMgaW4gc2luZ2xlIGNhY2hlIGxpbmVzDQog ICogaGVyZSAoMTYgYnl0ZXMgb3IgZ3JlYXRlcikuICBUaGlzIG9yZGVyaW5n IHNob3VsZCBiZSBwYXJ0aWN1bGFybHkNCkBAIC0xMjcsNyArMTMwLDYgQEAN CiAgKiBpcyB1c2VkIGZvciBsaW5lYXIgc2VhcmNoZXMgKGVnLiBjbG9jayBh bGdvcml0aG0gc2NhbnMpLiANCiAgKi8NCiB0eXBlZGVmIHN0cnVjdCBwYWdl IHsNCi0JLyogdGhlc2UgbXVzdCBiZSBmaXJzdCAoZnJlZSBhcmVhIGhhbmRs aW5nKSAqLw0KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQogCXN0cnVjdCBh ZGRyZXNzX3NwYWNlICptYXBwaW5nOw0KIAl1bnNpZ25lZCBsb25nIGluZGV4 Ow0KQEAgLTEzOSw2ICsxNDEsNyBAQA0KIAlzdHJ1Y3QgcGFnZSAqKnBwcmV2 X2hhc2g7DQogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZmZlcnM7DQogCXVu c2lnbmVkIGxvbmcgdmlydHVhbDsgLyogbm9uemVybyBpZiBrbWFwcGVkICov DQorCXN0cnVjdCB6b25lX3N0cnVjdCAqem9uZTsNCiB9IG1lbV9tYXBfdDsN CiANCiAjZGVmaW5lIGdldF9wYWdlKHApCQlhdG9taWNfaW5jKCYocCktPmNv dW50KQ0KQEAgLTI4MywxOSArMjg2LDEwOSBAQA0KIGV4dGVybiBtZW1fbWFw X3QgKiBtZW1fbWFwOw0KIA0KIC8qDQotICogVGhpcyBpcyB0aW1pbmctY3Jp dGljYWwgLSBtb3N0IG9mIHRoZSB0aW1lIGluIGdldHRpbmcgYSBuZXcgcGFn ZQ0KLSAqIGdvZXMgdG8gY2xlYXJpbmcgdGhlIHBhZ2UuIElmIHlvdSB3YW50 IGEgcGFnZSB3aXRob3V0IHRoZSBjbGVhcmluZw0KLSAqIG92ZXJoZWFkLCBq dXN0IHVzZSBfX2dldF9mcmVlX3BhZ2UoKSBkaXJlY3RseS4uDQotICoNCi0g KiBXZSBoYXZlIHR3byBhbGxvY2F0aW9uIG5hbWVzcGFjZXMgLSB0aGUgKmdl dCpwYWdlKigpIHZhcmlhbnRzDQotICogcmV0dXJuIHZpcnR1YWwga2VybmVs IGFkZHJlc3NlcyB0byB0aGUgYWxsb2NhdGVkIHBhZ2UocyksIHRoZQ0KLSAq IGFsbG9jX3BhZ2UqKCkgdmFyaWFudHMgcmV0dXJuICdzdHJ1Y3QgcGFnZSAq Jy4NCi0gKi8NCi0jZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzaykg X19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLDApDQotI2RlZmluZSBfX2dl dF9kbWFfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSBfX2dldF9mcmVlX3BhZ2Vz KChnZnBfbWFzaykgfCBHRlBfRE1BLChvcmRlcikpDQotZXh0ZXJuIHVuc2ln bmVkIGxvbmcgRkFTVENBTEwoX19nZXRfZnJlZV9wYWdlcyhpbnQgZ2ZwX21h c2ssIHVuc2lnbmVkIGxvbmcgb3JkZXIpKTsNCi1leHRlcm4gc3RydWN0IHBh Z2UgKiBGQVNUQ0FMTChhbGxvY19wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2ln bmVkIGxvbmcgb3JkZXIpKTsNCi0jZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21h c2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQ0KKyAqIEZyZWUgbWVtb3J5 IG1hbmFnZW1lbnQgLSB6b25lZCBidWRkeSBhbGxvY2F0b3IuDQorICovDQor DQorI2lmIENPTkZJR19BUDEwMDANCisvKiB0aGUgQVArIG5lZWRzIHRvIGFs bG9jYXRlIDhNQiBjb250aWd1b3VzLCBhbGlnbmVkIGNodW5rcyBvZiByYW0N CisgICBmb3IgdGhlIHJpbmcgYnVmZmVycyAqLw0KKyNkZWZpbmUgTUFYX09S REVSIDEyDQorI2Vsc2UNCisjZGVmaW5lIE1BWF9PUkRFUiAxMA0KKyNlbmRp Zg0KKw0KK3R5cGVkZWYgc3RydWN0IGZyZWVfYXJlYV9zdHJ1Y3Qgew0KKwlz dHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsNCisJdW5zaWduZWQgaW50ICog bWFwOw0KK30gZnJlZV9hcmVhX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3Qgem9u ZV9zdHJ1Y3Qgew0KKwkvKg0KKwkgKiBDb21tb25seSBhY2Nlc3NlZCBmaWVs ZHM6DQorCSAqLw0KKwlzcGlubG9ja190IGxvY2s7DQorCXVuc2lnbmVkIGxv bmcgb2Zmc2V0Ow0KKwl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7DQorCWlu dCBsb3dfb25fbWVtb3J5Ow0KKwl1bnNpZ25lZCBsb25nIHBhZ2VzX2xvdywg cGFnZXNfaGlnaDsNCisNCisJLyoNCisJICogZnJlZSBhcmVhcyBvZiBkaWZm ZXJlbnQgc2l6ZXMNCisJICovDQorCWZyZWVfYXJlYV90IGZyZWVfYXJlYVtN QVhfT1JERVJdOw0KKw0KKwkvKg0KKwkgKiByYXJlbHkgdXNlZCBmaWVsZHM6 DQorCSAqLw0KKwljaGFyICogbmFtZTsNCisJdW5zaWduZWQgbG9uZyBzaXpl Ow0KK30gem9uZV90Ow0KKw0KKyNkZWZpbmUgWk9ORV9ETUEJCTANCisjZGVm aW5lIFpPTkVfTk9STUFMCQkxDQorI2RlZmluZSBaT05FX0hJR0hNRU0JCTIN CisNCisvKg0KKyAqIE5VTUEgYXJjaGl0ZWN0dXJlcyB3aWxsIGhhdmUgbW9y ZToNCisgKi8NCisjZGVmaW5lIE1BWF9OUl9aT05FUwkJMw0KKw0KKy8qDQor ICogT25lIGFsbG9jYXRpb24gcmVxdWVzdCBvcGVyYXRlcyBvbiBhIHpvbmVs aXN0LiBBIHpvbmVsaXN0DQorICogaXMgYSBsaXN0IG9mIHpvbmVzLCB0aGUg Zmlyc3Qgb25lIGlzIHRoZSAnZ29hbCcgb2YgdGhlDQorICogYWxsb2NhdGlv biwgdGhlIG90aGVyIHpvbmVzIGFyZSBmYWxsYmFjayB6b25lcywgaW4gZGVj cmVhc2luZw0KKyAqIHByaW9yaXR5LiBPbiBOVU1BIHdlIHdhbnQgdG8gZmFs bCBiYWNrIG9uIG90aGVyIENQVSdzIHpvbmVzDQorICogYXMgd2VsbC4NCisg Kg0KKyAqIFJpZ2h0IG5vdyBhIHpvbmVsaXN0IHRha2VzIHVwIGxlc3MgdGhh biBhIGNhY2hlbGluZS4gV2UgbmV2ZXINCisgKiBtb2RpZnkgaXQgYXBhcnQg ZnJvbSBib290LXVwLCBhbmQgb25seSBhIGZldyBpbmRpY2VzIGFyZSB1c2Vk LA0KKyAqIHNvIGRlc3BpdGUgdGhlIHpvbmVsaXN0IHRhYmxlIGJlaW5nIHJl bGF0aXZlbHkgYmlnLCB0aGUgY2FjaGUNCisgKiBmb290cHJpbnQgb2YgdGhp cyBjb25zdHJ1Y3QgaXMgdmVyeSBzbWFsbC4NCisgKi8NCit0eXBlZGVmIHN0 cnVjdCB6b25lbGlzdF9zdHJ1Y3Qgew0KKwl6b25lX3QgKiB6b25lcyBbTUFY X05SX1pPTkVTKzFdOyAvLyBOVUxMIGRlbGltaXRlZA0KKwlpbnQgZ2ZwX21h c2s7DQorfSB6b25lbGlzdF90Ow0KKw0KKyNkZWZpbmUgTlJfR0ZQSU5ERVgJ CTB4MTAwDQorDQorZXh0ZXJuIHpvbmVsaXN0X3Qgem9uZWxpc3RzIFtOUl9H RlBJTkRFWF07DQorDQorLyoNCisgKiBUaGVyZSBpcyBvbmx5IG9uZSBwYWdl LWFsbG9jYXRvciBmdW5jdGlvbiwgYW5kIHR3byBtYWluIG5hbWVzcGFjZXMg dG8NCisgKiBpdC4gVGhlIGFsbG9jX3BhZ2UqKCkgdmFyaWFudHMgcmV0dXJu ICdzdHJ1Y3QgcGFnZSAqJyBhbmQgYXMgc3VjaA0KKyAqIGNhbiBhbGxvY2F0 ZSBoaWdobWVtIHBhZ2VzLCB0aGUgKmdldCpwYWdlKigpIHZhcmlhbnRzIHJl dHVybg0KKyAqIHZpcnR1YWwga2VybmVsIGFkZHJlc3NlcyB0byB0aGUgYWxs b2NhdGVkIHBhZ2UocykuDQorICovDQorZXh0ZXJuIHN0cnVjdCBwYWdlICog RkFTVENBTEwoX19hbGxvY19wYWdlcyh6b25lbGlzdF90ICp6b25lbGlzdCwg dW5zaWduZWQgbG9uZyBvcmRlcikpOw0KKw0KK2V4dGVybiBpbmxpbmUgc3Ry dWN0IHBhZ2UgKiBhbGxvY19wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk IGxvbmcgb3JkZXIpDQorew0KKwlzdHJ1Y3QgcGFnZSAqX19yZXQ7DQorCWlm ICh6b25lbGlzdHNbZ2ZwX21hc2tdLmdmcF9tYXNrICE9IChnZnBfbWFzaykp DQorCQlCVUcoKTsNCisJX19yZXQgPSBfX2FsbG9jX3BhZ2VzKHpvbmVsaXN0 cysoZ2ZwX21hc2spLCBvcmRlcik7DQorCXJldHVybiBfX3JldDsNCit9DQor DQorI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBcDQorCQlhbGxvY19w YWdlcyhnZnBfbWFzaywgMCkNCisNCitleHRlcm4gaW5saW5lIHVuc2lnbmVk IGxvbmcgX19nZXRfZnJlZV9wYWdlcyAoaW50IGdmcF9tYXNrLCB1bnNpZ25l ZCBsb25nIG9yZGVyKQ0KK3sNCisJc3RydWN0IHBhZ2UgKiBwYWdlOw0KKw0K KwlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTsNCisJaWYg KCFwYWdlKQ0KKwkJcmV0dXJuIDA7DQorCXJldHVybiBwYWdlX2FkZHJlc3Mo cGFnZSk7DQorfQ0KKw0KKyNkZWZpbmUgX19nZXRfZnJlZV9wYWdlKGdmcF9t YXNrKSBcDQorCQlfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzayksMCkNCisN CisjZGVmaW5lIF9fZ2V0X2RtYV9wYWdlcyhnZnBfbWFzaywgb3JkZXIpIFwN CisJCV9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSB8IEdGUF9ETUEsKG9y ZGVyKSkNCiANCiBleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3pl cm9lZF9wYWdlKGludCBnZnBfbWFzaykNCiB7DQpAQCAtMzEyLDExICs0MDUs MjkgQEANCiAgKi8NCiAjZGVmaW5lIGdldF9mcmVlX3BhZ2UgZ2V0X3plcm9l ZF9wYWdlDQogDQotLyogbWVtb3J5LmMgJiBzd2FwLmMqLw0KKy8qDQorICog VGhlcmUgaXMgb25seSBvbmUgJ2NvcmUnIHBhZ2UtZnJlZWluZyBmdW5jdGlv bi4NCisgKi8NCitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX2ZyZWVfcGFnZXNf b2soc3RydWN0IHBhZ2UgKiBwYWdlLCB1bnNpZ25lZCBsb25nIG9yZGVyKSk7 DQorDQorZXh0ZXJuIGlubGluZSB2b2lkIF9fZnJlZV9wYWdlcyhzdHJ1Y3Qg cGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcikNCit7DQorCWlmICgh cHV0X3BhZ2VfdGVzdHplcm8ocGFnZSkpDQorCQlyZXR1cm47DQorCV9fZnJl ZV9wYWdlc19vayhwYWdlLCBvcmRlcik7DQorfQ0KKw0KKyNkZWZpbmUgX19m cmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKHBhZ2UsIDApDQorDQorZXh0 ZXJuIGlubGluZSB2b2lkIGZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRy LCB1bnNpZ25lZCBsb25nIG9yZGVyKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBt YXBfbnIgPSBNQVBfTlIoYWRkcik7DQorDQorCWlmIChtYXBfbnIgPCBtYXhf bWFwbnIpDQorCQlfX2ZyZWVfcGFnZXMobWVtX21hcCArIG1hcF9uciwgb3Jk ZXIpOw0KK30NCiANCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3Bh Z2VzKChhZGRyKSwwKQ0KLWV4dGVybiBpbnQgRkFTVENBTEwoZnJlZV9wYWdl cyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgb3JkZXIpKTsN Ci1leHRlcm4gaW50IEZBU1RDQUxMKF9fZnJlZV9wYWdlKHN0cnVjdCBwYWdl ICopKTsNCiANCiBleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCk7 DQogZXh0ZXJuIHN0cnVjdCBwYWdlICogcHV0X2RpcnR5X3BhZ2Uoc3RydWN0 IHRhc2tfc3RydWN0ICogdHNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwNCkBAIC0z OTgsNyArNTA5LDcgQEANCiAjZGVmaW5lIEdGUF9ETUEJCV9fR0ZQX0RNQQ0K IA0KIC8qIEZsYWcgLSBpbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIGNhbiBi ZSB0YWtlbiBmcm9tIGhpZ2ggbWVtb3J5IHdoaWNoIGlzIG5vdA0KLSAgIGRp cmVjdGx5IGFkZHJlc3NhYmxlIGJ5IHRoZSBrZXJuZWwgKi8NCisgICBwZXJt YW5lbnRseSBtYXBwZWQgYnkgdGhlIGtlcm5lbCAqLw0KIA0KICNkZWZpbmUg R0ZQX0hJR0hNRU0JX19HRlBfSElHSE1FTQ0KIA0KQEAgLTQ0Niw3ICs1NTcs NiBAQA0KICNkZWZpbmUgdm1saXN0X2FjY2Vzc191bmxvY2sobW0pCXNwaW5f dW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKQ0KICNkZWZpbmUgdm1saXN0 X21vZGlmeV9sb2NrKG1tKQkJdm1saXN0X2FjY2Vzc19sb2NrKG1tKQ0KICNk ZWZpbmUgdm1saXN0X21vZGlmeV91bmxvY2sobW0pCXZtbGlzdF9hY2Nlc3Nf dW5sb2NrKG1tKQ0KLQ0KIA0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQog DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9oaWdobWVtLmgub3JpZwlTYXQg Tm92IDEzIDA1OjM5OjM5IDE5OTkNCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4 L2hpZ2htZW0uaAlTYXQgTm92IDEzIDEwOjM2OjIzIDE5OTkNCkBAIC0zLDcg KzMsNyBAQA0KIA0KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCiAjaW5j bHVkZSA8bGludXgvcGFnZW1hcC5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJs ZS5oPg0KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpZmRlZiBD T05GSUdfSElHSE1FTQ0KIA0KLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYv cGd0YWJsZS0zbGV2ZWwuaC5vcmlnCVNhdCBOb3YgMTMgMDE6NTY6NDEgMTk5 OQ0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwu aAlTYXQgTm92IDEzIDA1OjA1OjAxIDE5OTkNCkBAIC0yNywxMSArMjcsMTEg QEANCiAjZGVmaW5lIFBUUlNfUEVSX1BURQk1MTINCiANCiAjZGVmaW5lIHB0 ZV9FUlJPUihlKSBcDQotCXByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTAxNkx4 LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQ0KKwlwcmlu dGsoIiVzOiVkOiBiYWQgcHRlICVwKCUwMTZMeCkuXG4iLCBfX0ZJTEVfXywg X19MSU5FX18sICYoZSksIHB0ZV92YWwoZSkpDQogI2RlZmluZSBwbWRfRVJS T1IoZSkgXA0KLQlwcmludGsoIiVzOiVkOiBiYWQgcG1kICUwMTZMeC5cbiIs IF9fRklMRV9fLCBfX0xJTkVfXywgcG1kX3ZhbChlKSkNCisJcHJpbnRrKCIl czolZDogYmFkIHBtZCAlcCglMDE2THgpLlxuIiwgX19GSUxFX18sIF9fTElO RV9fLCAmKGUpLCBwbWRfdmFsKGUpKQ0KICNkZWZpbmUgcGdkX0VSUk9SKGUp IFwNCi0JcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDE2THguXG4iLCBfX0ZJ TEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpDQorCXByaW50aygiJXM6JWQ6 IGJhZCBwZ2QgJXAoJTAxNkx4KS5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywg JihlKSwgcGdkX3ZhbChlKSkNCiANCiAvKg0KICAqIFN1YnRsZSwgaW4gUEFF IG1vZGUgd2UgY2Fubm90IGhhdmUgemVyb2VzIGluIHRoZSB0b3AgbGV2ZWwN CkBAIC02Myw2MiArNjMsNSBAQA0KIC8qIEZpbmQgYW4gZW50cnkgaW4gdGhl IHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLi4gKi8NCiAjZGVmaW5lIHBtZF9v ZmZzZXQoZGlyLCBhZGRyZXNzKSAoKHBtZF90ICopIHBnZF9wYWdlKCooZGly KSkgKyBcDQogCQkJX19wbWRfb2Zmc2V0KGFkZHJlc3MpKQ0KLQ0KLWV4dGVy biBfX2lubGluZV9fIHBtZF90ICpnZXRfcG1kX3Nsb3codm9pZCkNCi17DQot CXBtZF90ICpyZXQgPSAocG1kX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tF Uk5FTCk7DQotDQotCWlmIChyZXQpDQotCQltZW1zZXQocmV0LCAwLCBQQUdF X1NJWkUpOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1leHRlcm4gX19pbmxp bmVfXyBwbWRfdCAqZ2V0X3BtZF9mYXN0KHZvaWQpDQotew0KLQl1bnNpZ25l ZCBsb25nICpyZXQ7DQotDQotCWlmICgocmV0ID0gcG1kX3F1aWNrbGlzdCkg IT0gTlVMTCkgew0KLQkJcG1kX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25n ICopKCpyZXQpOw0KLQkJcmV0WzBdID0gMDsNCi0JCXBndGFibGVfY2FjaGVf c2l6ZS0tOw0KLQl9IGVsc2UNCi0JCXJldCA9ICh1bnNpZ25lZCBsb25nICop Z2V0X3BtZF9zbG93KCk7DQotCXJldHVybiAocG1kX3QgKilyZXQ7DQotfQ0K LQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRf dCAqcG1kKQ0KLXsNCi0JKih1bnNpZ25lZCBsb25nICopcG1kID0gKHVuc2ln bmVkIGxvbmcpIHBtZF9xdWlja2xpc3Q7DQotCXBtZF9xdWlja2xpc3QgPSAo dW5zaWduZWQgbG9uZyAqKSBwbWQ7DQotCXBndGFibGVfY2FjaGVfc2l6ZSsr Ow0KLX0NCi0NCi1leHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX3Ns b3cocG1kX3QgKnBtZCkNCi17DQotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9u ZylwbWQpOw0KLX0NCi0NCi1leHRlcm4gaW5saW5lIHBtZF90ICogcG1kX2Fs bG9jKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCi17DQot CWlmICghcGdkKQ0KLQkJQlVHKCk7DQotCWFkZHJlc3MgPSAoYWRkcmVzcyA+ PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOw0KLQlpZiAocGdk X25vbmUoKnBnZCkpIHsNCi0JCXBtZF90ICpwYWdlID0gZ2V0X3BtZF9mYXN0 KCk7DQotDQotCQlpZiAoIXBhZ2UpDQotCQkJcGFnZSA9IGdldF9wbWRfc2xv dygpOw0KLQkJaWYgKHBhZ2UpIHsNCi0JCQlpZiAocGdkX25vbmUoKnBnZCkp IHsNCi0JCQkJcGdkX3ZhbCgqcGdkKSA9IDEgKyBfX3BhKHBhZ2UpOw0KLQkJ CQlfX2ZsdXNoX3RsYigpOw0KLQkJCQlyZXR1cm4gcGFnZSArIGFkZHJlc3M7 DQotCQkJfSBlbHNlDQotCQkJCWZyZWVfcG1kX2Zhc3QocGFnZSk7DQotCQl9 IGVsc2UNCi0JCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQlyZXR1cm4gKHBtZF90 ICopcGdkX3BhZ2UoKnBnZCkgKyBhZGRyZXNzOw0KLX0NCiANCiAjZW5kaWYg LyogX0kzODZfUEdUQUJMRV8zTEVWRUxfSCAqLw0KLS0tIGxpbnV4L2luY2x1 ZGUvYXNtLWkzODYvcGd0YWJsZS5oLm9yaWcJU2F0IE5vdiAxMyAwNDo0Mjoz MiAxOTk5DQorKysgbGludXgvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgJ U2F0IE5vdiAxMyAxMDozNjoyMSAxOTk5DQpAQCAtMTksMjcgKzE5LDYgQEAN CiANCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbMTAyNF07DQogDQot LyogQ2FjaGVzIGFyZW4ndCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8N Ci0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgw KQ0KLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxl ICgwKQ0KLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2UobW0sIHN0YXJ0LCBl bmQpCWRvIHsgfSB3aGlsZSAoMCkNCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Bh Z2Uodm1hLCB2bWFkZHIpCQlkbyB7IH0gd2hpbGUgKDApDQotI2RlZmluZSBm bHVzaF9wYWdlX3RvX3JhbShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkNCi0j ZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9 IHdoaWxlICgwKQ0KLQ0KLS8qDQotICogVExCIGZsdXNoaW5nOg0KLSAqDQot ICogIC0gZmx1c2hfdGxiKCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1 Y3QgVExCcw0KLSAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBw cm9jZXNzZXMgVExCcw0KLSAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hl cyB0aGUgc3BlY2lmaWVkIG1tIGNvbnRleHQgVExCJ3MNCi0gKiAgLSBmbHVz aF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQ0KLSAq ICAtIGZsdXNoX3RsYl9yYW5nZShtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBh IHJhbmdlIG9mIHBhZ2VzDQotICoNCi0gKiAuLmJ1dCB0aGUgaTM4NiBoYXMg c29tZXdoYXQgbGltaXRlZCB0bGIgZmx1c2hpbmcgY2FwYWJpbGl0aWVzLA0K LSAqIGFuZCBwYWdlLWdyYW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBv bmx5IG9uIGk0ODYgYW5kIHVwLg0KLSAqLw0KLQ0KICNkZWZpbmUgX19mbHVz aF90bGIoKSBcDQogZG8geyB1bnNpZ25lZCBsb25nIHRtcHJlZzsgX19hc21f XyBfX3ZvbGF0aWxlX18oIm1vdmwgJSVjcjMsJTBcblx0bW92bCAlMCwlJWNy MyI6Ij1yIiAodG1wcmVnKSA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApDQog DQpAQCAtNDksNjUgKzI4LDkgQEANCiAjZGVmaW5lIF9fZmx1c2hfdGxiX29u ZShhZGRyKSBcDQogX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAlMCI6 IDoibSIgKCooY2hhciAqKSBhZGRyKSkNCiAjZW5kaWYNCi0gDQotI2lmbmRl ZiBfX1NNUF9fDQotDQotI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3Rs YigpDQotI2RlZmluZSBmbHVzaF90bGJfYWxsKCkgX19mbHVzaF90bGIoKQ0K LSNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQ0KLQ0K LXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0 cnVjdCAqbW0pDQotew0KLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21t KQ0KLQkJX19mbHVzaF90bGIoKTsNCi19DQotDQotc3RhdGljIGlubGluZSB2 b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h LA0KLQl1bnNpZ25lZCBsb25nIGFkZHIpDQotew0KLQlpZiAodm1hLT52bV9t bSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pDQotCQlfX2ZsdXNoX3RsYl9vbmUo YWRkcik7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJf cmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sDQotCXVuc2lnbmVkIGxvbmcg c3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQ0KLXsNCi0JaWYgKG1tID09IGN1 cnJlbnQtPmFjdGl2ZV9tbSkNCi0JCV9fZmx1c2hfdGxiKCk7DQotfQ0KLQ0K LSNlbHNlDQotDQotLyoNCi0gKiBXZSBhcmVuJ3QgdmVyeSBjbGV2ZXIgYWJv dXQgdGhpcyB5ZXQgLSAgU01QIGNvdWxkIGNlcnRhaW5seQ0KLSAqIGF2b2lk IHNvbWUgZ2xvYmFsIGZsdXNoZXMuLg0KLSAqLw0KLQ0KLSNpbmNsdWRlIDxh c20vc21wLmg+DQotDQotI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBcDQot CV9fZmx1c2hfdGxiKCkNCi0NCi1leHRlcm4gdm9pZCBmbHVzaF90bGJfYWxs KHZvaWQpOw0KLWV4dGVybiB2b2lkIGZsdXNoX3RsYl9jdXJyZW50X3Rhc2so dm9pZCk7DQotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9z dHJ1Y3QgKik7DQotZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOw0KLQ0KLSNkZWZp bmUgZmx1c2hfdGxiKCkJZmx1c2hfdGxiX2N1cnJlbnRfdGFzaygpDQogDQot c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgbW1f c3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxv bmcgZW5kKQ0KLXsNCi0JZmx1c2hfdGxiX21tKG1tKTsNCi19DQotDQotI2Vu ZGlmDQogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8NCiANCi0jZGVmaW5l IHBnZF9xdWlja2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucGdkX3F1aWNrKQ0K LSNkZWZpbmUgcG1kX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wbWRf cXVpY2spDQotI2RlZmluZSBwdGVfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9k YXRhLnB0ZV9xdWljaykNCi0jZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAo Y3VycmVudF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KQ0KLQ0KIC8qDQog ICogVGhlIExpbnV4IHg4NiBwYWdpbmcgYXJjaGl0ZWN0dXJlIGlzICdjb21w aWxlLXRpbWUgZHVhbC1tb2RlJywgaXQNCiAgKiBpbXBsZW1lbnRzIGJvdGgg dGhlIHRyYWRpdGlvbmFsIDItbGV2ZWwgeDg2IHBhZ2UgdGFibGVzIGFuZCB0 aGUNCkBAIC0yNzcsMTQgKzIwMCwxNCBAQA0KICAqIGFuZCBhIHBhZ2UgZW50 cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIg dG8uDQogICovDQogDQotZXh0ZXJuIGlubGluZSBwdGVfdCBta19wdGUoc3Ry dWN0IHBhZ2UgKnBhZ2UsIHBncHJvdF90IHBncHJvdCkNCi17DQotCXB0ZV90 IF9fcHRlOw0KLQ0KLQlwdGVfdmFsKF9fcHRlKSA9IChwYWdlLW1lbV9tYXAp Kih1bnNpZ25lZCBsb25nIGxvbmcpUEFHRV9TSVpFICsNCi0JCQkJcGdwcm90 X3ZhbChwZ3Byb3QpOw0KLQlyZXR1cm4gX19wdGU7DQotfQ0KKyNkZWZpbmUg bWtfcHRlKHBhZ2UscGdwcm90KSBcDQorKHsJCQkJCQkJCQlcDQorCXB0ZV90 IF9fcHRlOwkJCQkJCQlcDQorCQkJCQkJCQkJXA0KKwlwdGVfdmFsKF9fcHRl KSA9ICgocGFnZSktbWVtX21hcCkqKHVuc2lnbmVkIGxvbmcgbG9uZylQQUdF X1NJWkUgKyBcDQorCQkJCXBncHJvdF92YWwocGdwcm90KTsJCQlcDQorCV9f cHRlOwkJCQkJCQkJXA0KK30pDQogDQogLyogVGhpcyB0YWtlcyBhIHBoeXNp Y2FsIHBhZ2UgYWRkcmVzcyB0aGF0IGlzIHVzZWQgYnkgdGhlIHJlbWFwcGlu ZyBmdW5jdGlvbnMgKi8NCiAjZGVmaW5lIG1rX3B0ZV9waHlzKHBoeXNwYWdl LCBwZ3Byb3QpIFwNCkBAIC0zMTcsMTgyICsyNDAsMTAgQEANCiAJCQlfX3B0 ZV9vZmZzZXQoYWRkcmVzcykpDQogDQogLyoNCi0gKiBBbGxvY2F0ZSBhbmQg ZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBh cmUNCi0gKiB1c2VkIHRvIGFsbG9jYXRlIGEga2VybmVsIHBhZ2UgdGFibGUg LSB0aGlzIHR1cm5zIG9uIEFTTiBiaXRzDQotICogaWYgYW55Lg0KLSAqLw0K LQ0KLWV4dGVybiBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX3Nsb3codm9p ZCkNCi17DQotCXBnZF90ICpyZXQgPSAocGdkX3QgKilfX2dldF9mcmVlX3Bh Z2UoR0ZQX0tFUk5FTCk7DQotDQotCWlmIChyZXQpIHsNCi0jaWYgMA0KLQkJ LyoNCi0JCSAqIE9uIFBBRSBhbGxvY2F0aW5nIGEgd2hvbGUgcGFnZSBpcyBv dmVya2lsbCAtIHdlIHdpbGwNCi0JCSAqIGVpdGhlciBlbWJlZGQgdGhpcyBp biBtbV9zdHJ1Y3QsIG9yIGRvIGEgU0xBQiBjYWNoZS4NCi0JCSAqLw0KLQkJ bWVtY3B5KHJldCwgc3dhcHBlcl9wZ19kaXIsIFBUUlNfUEVSX1BHRCAqIHNp emVvZihwZ2RfdCkpOw0KLSNlbmRpZg0KLSNpZiBDT05GSUdfWDg2X1BBRQ0K LQkJaW50IGk7DQotCQlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9Q R0Q7IGkrKykNCi0JCQlfX3BnZF9jbGVhcihyZXQgKyBpKTsNCi0jZWxzZQ0K LQkJbWVtc2V0KHJldCwgMCwgVVNFUl9QVFJTX1BFUl9QR0QgKiBzaXplb2Yo cGdkX3QpKTsNCi0jZW5kaWYNCi0JCW1lbWNweShyZXQgKyBVU0VSX1BUUlNf UEVSX1BHRCwgc3dhcHBlcl9wZ19kaXIgKyBVU0VSX1BUUlNfUEVSX1BHRCwg KFBUUlNfUEVSX1BHRCAtIFVTRVJfUFRSU19QRVJfUEdEKSAqIHNpemVvZihw Z2RfdCkpOw0KLQl9DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLWV4dGVybiBf X2lubGluZV9fIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkNCi17DQotCXVu c2lnbmVkIGxvbmcgKnJldDsNCi0NCi0JaWYgKChyZXQgPSBwZ2RfcXVpY2ts aXN0KSAhPSBOVUxMKSB7DQotCQlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVk IGxvbmcgKikoKnJldCk7DQotCQlyZXRbMF0gPSAwOw0KLQkJcGd0YWJsZV9j YWNoZV9zaXplLS07DQotCX0gZWxzZQ0KLQkJcmV0ID0gKHVuc2lnbmVkIGxv bmcgKilnZXRfcGdkX3Nsb3coKTsNCi0JcmV0dXJuIChwZ2RfdCAqKXJldDsN Ci19DQotDQotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9mYXN0 KHBnZF90ICpwZ2QpDQotew0KLQkqKHVuc2lnbmVkIGxvbmcgKilwZ2QgPSAo dW5zaWduZWQgbG9uZykgcGdkX3F1aWNrbGlzdDsNCi0JcGdkX3F1aWNrbGlz dCA9ICh1bnNpZ25lZCBsb25nICopIHBnZDsNCi0JcGd0YWJsZV9jYWNoZV9z aXplKys7DQotfQ0KLQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9w Z2Rfc2xvdyhwZ2RfdCAqcGdkKQ0KLXsNCi0JZnJlZV9wYWdlKCh1bnNpZ25l ZCBsb25nKXBnZCk7DQotfQ0KLQ0KLWV4dGVybiBwdGVfdCAqZ2V0X3B0ZV9z bG93KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1 c3RlZCk7DQotZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX2tlcm5lbF9zbG93KHBt ZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzc19wcmVhZGp1c3RlZCk7 DQotDQotZXh0ZXJuIF9faW5saW5lX18gcHRlX3QgKmdldF9wdGVfZmFzdCh2 b2lkKQ0KLXsNCi0JdW5zaWduZWQgbG9uZyAqcmV0Ow0KLQ0KLQlpZigocmV0 ID0gKHVuc2lnbmVkIGxvbmcgKilwdGVfcXVpY2tsaXN0KSAhPSBOVUxMKSB7 DQotCQlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7 DQotCQlyZXRbMF0gPSByZXRbMV07DQotCQlwZ3RhYmxlX2NhY2hlX3NpemUt LTsNCi0JfQ0KLQlyZXR1cm4gKHB0ZV90ICopcmV0Ow0KLX0NCi0NCi1leHRl cm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSkN Ci17DQotCSoodW5zaWduZWQgbG9uZyAqKXB0ZSA9ICh1bnNpZ25lZCBsb25n KSBwdGVfcXVpY2tsaXN0Ow0KLQlwdGVfcXVpY2tsaXN0ID0gKHVuc2lnbmVk IGxvbmcgKikgcHRlOw0KLQlwZ3RhYmxlX2NhY2hlX3NpemUrKzsNCi19DQot DQotZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3B0ZV9zbG93KHB0ZV90 ICpwdGUpDQotew0KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcHRlKTsN Ci19DQotDQotI2RlZmluZSBwdGVfZnJlZV9rZXJuZWwocHRlKSAgICBmcmVl X3B0ZV9zbG93KHB0ZSkNCi0jZGVmaW5lIHB0ZV9mcmVlKHB0ZSkJICAgZnJl ZV9wdGVfc2xvdyhwdGUpDQotI2RlZmluZSBwZ2RfZnJlZShwZ2QpCSAgIGZy ZWVfcGdkX3Nsb3cocGdkKQ0KLSNkZWZpbmUgcGdkX2FsbG9jKCkJICAgICBn ZXRfcGdkX2Zhc3QoKQ0KLQ0KLWV4dGVybiBpbmxpbmUgcHRlX3QgKiBwdGVf YWxsb2Nfa2VybmVsKHBtZF90ICogcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJl c3MpDQotew0KLQlpZiAoIXBtZCkNCi0JCUJVRygpOw0KLQlhZGRyZXNzID0g KGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7 DQotCWlmIChwbWRfbm9uZSgqcG1kKSkgew0KLQkJcHRlX3QgKiBwYWdlID0g KHB0ZV90ICopIGdldF9wdGVfZmFzdCgpOw0KLQkJDQotCQlpZiAoIXBhZ2Up DQotCQkJcmV0dXJuIGdldF9wdGVfa2VybmVsX3Nsb3cocG1kLCBhZGRyZXNz KTsNCi0JCXBtZF92YWwoKnBtZCkgPSBfS0VSTlBHX1RBQkxFICsgX19wYShw YWdlKTsNCi0JCXJldHVybiBwYWdlICsgYWRkcmVzczsNCi0JfQ0KLQlpZiAo cG1kX2JhZCgqcG1kKSkgew0KLQkJX19oYW5kbGVfYmFkX3BtZF9rZXJuZWwo cG1kKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiAocHRlX3Qg KikgcG1kX3BhZ2UoKnBtZCkgKyBhZGRyZXNzOw0KLX0NCi0NCi1leHRlcm4g aW5saW5lIHB0ZV90ICogcHRlX2FsbG9jKHBtZF90ICogcG1kLCB1bnNpZ25l ZCBsb25nIGFkZHJlc3MpDQotew0KLQlhZGRyZXNzID0gKGFkZHJlc3MgPj4g UEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSk7DQotDQotCWlmIChw bWRfbm9uZSgqcG1kKSkNCi0JCWdvdG8gZ2V0bmV3Ow0KLQlpZiAocG1kX2Jh ZCgqcG1kKSkNCi0JCWdvdG8gZml4Ow0KLQlyZXR1cm4gKHB0ZV90ICopcG1k X3BhZ2UoKnBtZCkgKyBhZGRyZXNzOw0KLWdldG5ldzoNCi17DQotCXVuc2ln bmVkIGxvbmcgcGFnZSA9ICh1bnNpZ25lZCBsb25nKSBnZXRfcHRlX2Zhc3Qo KTsNCi0JDQotCWlmICghcGFnZSkNCi0JCXJldHVybiBnZXRfcHRlX3Nsb3co cG1kLCBhZGRyZXNzKTsNCi0JcG1kX3ZhbCgqcG1kKSA9IF9QQUdFX1RBQkxF ICsgX19wYShwYWdlKTsNCi0JcmV0dXJuIChwdGVfdCAqKXBhZ2UgKyBhZGRy ZXNzOw0KLX0NCi1maXg6DQotCV9faGFuZGxlX2JhZF9wbWQocG1kKTsNCi0J cmV0dXJuIE5VTEw7DQotfQ0KLQ0KLS8qDQotICogYWxsb2NhdGluZyBhbmQg ZnJlZWluZyBhIHBtZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwbWQgaXMN Ci0gKiBpbnNpZGUgdGhlIHBnZCwgc28gaGFzIG5vIGV4dHJhIG1lbW9yeSBh c3NvY2lhdGVkIHdpdGggaXQuDQotICogKEluIHRoZSBQQUUgY2FzZSB3ZSBm cmVlIHRoZSBwYWdlLikNCi0gKi8NCi0jZGVmaW5lIHBtZF9mcmVlKHBtZCkJ ICAgZnJlZV9wbWRfc2xvdyhwbWQpDQotDQotI2RlZmluZSBwbWRfZnJlZV9r ZXJuZWwJCXBtZF9mcmVlDQotI2RlZmluZSBwbWRfYWxsb2Nfa2VybmVsCXBt ZF9hbGxvYw0KLQ0KLWV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGlu dCwgaW50KTsNCi0NCi1leHRlcm4gaW5saW5lIHZvaWQgc2V0X3BnZGlyKHVu c2lnbmVkIGxvbmcgYWRkcmVzcywgcGdkX3QgZW50cnkpDQotew0KLQlzdHJ1 Y3QgdGFza19zdHJ1Y3QgKiBwOw0KLQlwZ2RfdCAqcGdkOw0KLSNpZmRlZiBf X1NNUF9fDQotCWludCBpOw0KLSNlbmRpZgkNCi0NCi0JcmVhZF9sb2NrKCZ0 YXNrbGlzdF9sb2NrKTsNCi0JZm9yX2VhY2hfdGFzayhwKSB7DQotCQlpZiAo IXAtPm1tKQ0KLQkJCWNvbnRpbnVlOw0KLQkJKnBnZF9vZmZzZXQocC0+bW0s YWRkcmVzcykgPSBlbnRyeTsNCi0JfQ0KLQlyZWFkX3VubG9jaygmdGFza2xp c3RfbG9jayk7DQotI2lmbmRlZiBfX1NNUF9fDQotCWZvciAocGdkID0gKHBn ZF90ICopcGdkX3F1aWNrbGlzdDsgcGdkOyBwZ2QgPSAocGdkX3QgKikqKHVu c2lnbmVkIGxvbmcgKilwZ2QpDQotCQlwZ2RbYWRkcmVzcyA+PiBQR0RJUl9T SElGVF0gPSBlbnRyeTsNCi0jZWxzZQ0KLQkvKiBUbyBwZ2RfYWxsb2MvcGdk X2ZyZWUsIG9uZSBob2xkcyBtYXN0ZXIga2VybmVsIGxvY2sgYW5kIHNvIGRv ZXMgb3VyIGNhbGxlZSwgc28gd2UgY2FuDQotCSAgIG1vZGlmeSBwZ2QgY2Fj aGVzIG9mIG90aGVyIENQVXMgYXMgd2VsbC4gLWpqICovDQotCWZvciAoaSA9 IDA7IGkgPCBOUl9DUFVTOyBpKyspDQotCQlmb3IgKHBnZCA9IChwZ2RfdCAq KWNwdV9kYXRhW2ldLnBnZF9xdWljazsgcGdkOyBwZ2QgPSAocGdkX3QgKikq KHVuc2lnbmVkIGxvbmcgKilwZ2QpDQotCQkJcGdkW2FkZHJlc3MgPj4gUEdE SVJfU0hJRlRdID0gZW50cnk7DQotI2VuZGlmDQotfQ0KLQ0KLS8qDQogICog VGhlIGkzODYgZG9lc24ndCBoYXZlIGFueSBleHRlcm5hbCBNTVUgaW5mbzog dGhlIGtlcm5lbCBwYWdlDQogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBu ZWNlc3NhcnkgaW5mb3JtYXRpb24uDQogICovDQotZXh0ZXJuIGlubGluZSB2 b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICog dm1hLA0KLQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSkNCi17 DQotfQ0KKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsYWRkcmVzcyxw dGUpIGRvIHsgfSB3aGlsZSAoMCkNCiANCiAvKiBFbmNvZGUgYW5kIGRlLWNv ZGUgYSBzd2FwIGVudHJ5ICovDQogI2RlZmluZSBTV1BfVFlQRSh4KQkJCSgo KHgpLnZhbCA+PiAxKSAmIDB4M2YpDQotLS0gbGludXgvaW5jbHVkZS9hc20t aTM4Ni9wZ2FsbG9jLmgub3JpZwlTYXQgTm92IDEzIDA1OjAwOjIwIDE5OTkN CisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAlTYXQgTm92 IDEzIDEwOjM2OjIxIDE5OTkNCkBAIC0wLDAgKzEsMjU1IEBADQorI2lmbmRl ZiBfSTM4Nl9QR0FMTE9DX0gNCisjZGVmaW5lIF9JMzg2X1BHQUxMT0NfSA0K Kw0KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4NCisjaW5jbHVkZSA8YXNt L3Byb2Nlc3Nvci5oPg0KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4NCisNCisjZGVmaW5lIHBnZF9xdWlj a2xpc3QgKGN1cnJlbnRfY3B1X2RhdGEucGdkX3F1aWNrKQ0KKyNkZWZpbmUg cG1kX3F1aWNrbGlzdCAoY3VycmVudF9jcHVfZGF0YS5wbWRfcXVpY2spDQor I2RlZmluZSBwdGVfcXVpY2tsaXN0IChjdXJyZW50X2NwdV9kYXRhLnB0ZV9x dWljaykNCisjZGVmaW5lIHBndGFibGVfY2FjaGVfc2l6ZSAoY3VycmVudF9j cHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KQ0KKw0KKyNpZiBDT05GSUdfWDg2 X1BBRQ0KKyMgaW5jbHVkZSA8YXNtL3BnYWxsb2MtM2xldmVsLmg+DQorI2Vs c2UNCisjIGluY2x1ZGUgPGFzbS9wZ2FsbG9jLTJsZXZlbC5oPg0KKyNlbmRp Zg0KKw0KKy8qDQorICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMu IFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlDQorICogdXNlZCB0byBh bGxvY2F0ZSBhIGtlcm5lbCBwYWdlIHRhYmxlIC0gdGhpcyB0dXJucyBvbiBB U04gYml0cw0KKyAqIGlmIGFueS4NCisgKi8NCisNCitleHRlcm4gX19pbmxp bmVfXyBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpDQorew0KKwlwZ2RfdCAq cmV0ID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOw0K Kw0KKwlpZiAocmV0KSB7DQorI2lmIENPTkZJR19YODZfUEFFDQorCQlpbnQg aTsNCisJCWZvciAoaSA9IDA7IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsr KQ0KKwkJCV9fcGdkX2NsZWFyKHJldCArIGkpOw0KKyNlbHNlDQorCQltZW1z ZXQocmV0LCAwLCBVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkp Ow0KKyNlbmRpZg0KKwkJbWVtY3B5KHJldCArIFVTRVJfUFRSU19QRVJfUEdE LCBzd2FwcGVyX3BnX2RpciArIFVTRVJfUFRSU19QRVJfUEdELCAoUFRSU19Q RVJfUEdEIC0gVVNFUl9QVFJTX1BFUl9QR0QpICogc2l6ZW9mKHBnZF90KSk7 DQorCX0NCisJcmV0dXJuIHJldDsNCit9DQorDQorZXh0ZXJuIF9faW5saW5l X18gcGdkX3QgKmdldF9wZ2RfZmFzdCh2b2lkKQ0KK3sNCisJdW5zaWduZWQg bG9uZyAqcmV0Ow0KKw0KKwlpZiAoKHJldCA9IHBnZF9xdWlja2xpc3QpICE9 IE5VTEwpIHsNCisJCXBnZF9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAq KSgqcmV0KTsNCisJCXJldFswXSA9IDA7DQorCQlwZ3RhYmxlX2NhY2hlX3Np emUtLTsNCisJfSBlbHNlDQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyAqKWdl dF9wZ2Rfc2xvdygpOw0KKwlyZXR1cm4gKHBnZF90ICopcmV0Ow0KK30NCisN CitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX2Zhc3QocGdkX3Qg KnBnZCkNCit7DQorCSoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNpZ25l ZCBsb25nKSBwZ2RfcXVpY2tsaXN0Ow0KKwlwZ2RfcXVpY2tsaXN0ID0gKHVu c2lnbmVkIGxvbmcgKikgcGdkOw0KKwlwZ3RhYmxlX2NhY2hlX3NpemUrKzsN Cit9DQorDQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BnZF9zbG93 KHBnZF90ICpwZ2QpDQorew0KKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcp cGdkKTsNCit9DQorDQorZXh0ZXJuIHB0ZV90ICpnZXRfcHRlX3Nsb3cocG1k X3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsN CitleHRlcm4gcHRlX3QgKmdldF9wdGVfa2VybmVsX3Nsb3cocG1kX3QgKnBt ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzX3ByZWFkanVzdGVkKTsNCisNCitl eHRlcm4gX19pbmxpbmVfXyBwdGVfdCAqZ2V0X3B0ZV9mYXN0KHZvaWQpDQor ew0KKwl1bnNpZ25lZCBsb25nICpyZXQ7DQorDQorCWlmKChyZXQgPSAodW5z aWduZWQgbG9uZyAqKXB0ZV9xdWlja2xpc3QpICE9IE5VTEwpIHsNCisJCXB0 ZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsNCisJCXJl dFswXSA9IHJldFsxXTsNCisJCXBndGFibGVfY2FjaGVfc2l6ZS0tOw0KKwl9 DQorCXJldHVybiAocHRlX3QgKilyZXQ7DQorfQ0KKw0KK2V4dGVybiBfX2lu bGluZV9fIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKQ0KK3sNCisJ Kih1bnNpZ25lZCBsb25nICopcHRlID0gKHVuc2lnbmVkIGxvbmcpIHB0ZV9x dWlja2xpc3Q7DQorCXB0ZV9xdWlja2xpc3QgPSAodW5zaWduZWQgbG9uZyAq KSBwdGU7DQorCXBndGFibGVfY2FjaGVfc2l6ZSsrOw0KK30NCisNCitleHRl cm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcHRlX3Nsb3cocHRlX3QgKnB0ZSkN Cit7DQorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylwdGUpOw0KK30NCisN CisjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChwdGUpICAgIGZyZWVfcHRlX3Ns b3cocHRlKQ0KKyNkZWZpbmUgcHRlX2ZyZWUocHRlKQkgICBmcmVlX3B0ZV9z bG93KHB0ZSkNCisjZGVmaW5lIHBnZF9mcmVlKHBnZCkJICAgZnJlZV9wZ2Rf c2xvdyhwZ2QpDQorI2RlZmluZSBwZ2RfYWxsb2MoKQkgICAgIGdldF9wZ2Rf ZmFzdCgpDQorDQorZXh0ZXJuIGlubGluZSBwdGVfdCAqIHB0ZV9hbGxvY19r ZXJuZWwocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCit7 DQorCWlmICghcG1kKQ0KKwkJQlVHKCk7DQorCWFkZHJlc3MgPSAoYWRkcmVz cyA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsNCisJaWYg KHBtZF9ub25lKCpwbWQpKSB7DQorCQlwdGVfdCAqIHBhZ2UgPSAocHRlX3Qg KikgZ2V0X3B0ZV9mYXN0KCk7DQorCQkNCisJCWlmICghcGFnZSkNCisJCQly ZXR1cm4gZ2V0X3B0ZV9rZXJuZWxfc2xvdyhwbWQsIGFkZHJlc3MpOw0KKwkJ cG1kX3ZhbCgqcG1kKSA9IF9LRVJOUEdfVEFCTEUgKyBfX3BhKHBhZ2UpOw0K KwkJcmV0dXJuIHBhZ2UgKyBhZGRyZXNzOw0KKwl9DQorCWlmIChwbWRfYmFk KCpwbWQpKSB7DQorCQlfX2hhbmRsZV9iYWRfcG1kX2tlcm5lbChwbWQpOw0K KwkJcmV0dXJuIE5VTEw7DQorCX0NCisJcmV0dXJuIChwdGVfdCAqKSBwbWRf cGFnZSgqcG1kKSArIGFkZHJlc3M7DQorfQ0KKw0KK2V4dGVybiBpbmxpbmUg cHRlX3QgKiBwdGVfYWxsb2MocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcg YWRkcmVzcykNCit7DQorCWFkZHJlc3MgPSAoYWRkcmVzcyA+PiBQQUdFX1NI SUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKTsNCisNCisJaWYgKHBtZF9ub25l KCpwbWQpKQ0KKwkJZ290byBnZXRuZXc7DQorCWlmIChwbWRfYmFkKCpwbWQp KQ0KKwkJZ290byBmaXg7DQorCXJldHVybiAocHRlX3QgKilwbWRfcGFnZSgq cG1kKSArIGFkZHJlc3M7DQorZ2V0bmV3Og0KK3sNCisJdW5zaWduZWQgbG9u ZyBwYWdlID0gKHVuc2lnbmVkIGxvbmcpIGdldF9wdGVfZmFzdCgpOw0KKwkN CisJaWYgKCFwYWdlKQ0KKwkJcmV0dXJuIGdldF9wdGVfc2xvdyhwbWQsIGFk ZHJlc3MpOw0KKwlwbWRfdmFsKCpwbWQpID0gX1BBR0VfVEFCTEUgKyBfX3Bh KHBhZ2UpOw0KKwlyZXR1cm4gKHB0ZV90ICopcGFnZSArIGFkZHJlc3M7DQor fQ0KK2ZpeDoNCisJX19oYW5kbGVfYmFkX3BtZChwbWQpOw0KKwlyZXR1cm4g TlVMTDsNCit9DQorDQorLyoNCisgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5n IGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcw0KKyAqIGlu c2lkZSB0aGUgcGdkLCBzbyBoYXMgbm8gZXh0cmEgbWVtb3J5IGFzc29jaWF0 ZWQgd2l0aCBpdC4NCisgKiAoSW4gdGhlIFBBRSBjYXNlIHdlIGZyZWUgdGhl IHBhZ2UuKQ0KKyAqLw0KKyNkZWZpbmUgcG1kX2ZyZWUocG1kKQkgICBmcmVl X3BtZF9zbG93KHBtZCkNCisNCisjZGVmaW5lIHBtZF9mcmVlX2tlcm5lbAkJ cG1kX2ZyZWUNCisjZGVmaW5lIHBtZF9hbGxvY19rZXJuZWwJcG1kX2FsbG9j DQorDQorZXh0ZXJuIGludCBkb19jaGVja19wZ3RfY2FjaGUoaW50LCBpbnQp Ow0KKw0KK2V4dGVybiBpbmxpbmUgdm9pZCBzZXRfcGdkaXIodW5zaWduZWQg bG9uZyBhZGRyZXNzLCBwZ2RfdCBlbnRyeSkNCit7DQorCXN0cnVjdCB0YXNr X3N0cnVjdCAqIHA7DQorCXBnZF90ICpwZ2Q7DQorI2lmZGVmIF9fU01QX18N CisJaW50IGk7DQorI2VuZGlmCQ0KKw0KKwlyZWFkX2xvY2soJnRhc2tsaXN0 X2xvY2spOw0KKwlmb3JfZWFjaF90YXNrKHApIHsNCisJCWlmICghcC0+bW0p DQorCQkJY29udGludWU7DQorCQkqcGdkX29mZnNldChwLT5tbSxhZGRyZXNz KSA9IGVudHJ5Ow0KKwl9DQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2Nr KTsNCisjaWZuZGVmIF9fU01QX18NCisJZm9yIChwZ2QgPSAocGdkX3QgKilw Z2RfcXVpY2tsaXN0OyBwZ2Q7IHBnZCA9IChwZ2RfdCAqKSoodW5zaWduZWQg bG9uZyAqKXBnZCkNCisJCXBnZFthZGRyZXNzID4+IFBHRElSX1NISUZUXSA9 IGVudHJ5Ow0KKyNlbHNlDQorCS8qIFRvIHBnZF9hbGxvYy9wZ2RfZnJlZSwg b25lIGhvbGRzIG1hc3RlciBrZXJuZWwgbG9jayBhbmQgc28gZG9lcyBvdXIg Y2FsbGVlLCBzbyB3ZSBjYW4NCisJICAgbW9kaWZ5IHBnZCBjYWNoZXMgb2Yg b3RoZXIgQ1BVcyBhcyB3ZWxsLiAtamogKi8NCisJZm9yIChpID0gMDsgaSA8 IE5SX0NQVVM7IGkrKykNCisJCWZvciAocGdkID0gKHBnZF90ICopY3B1X2Rh dGFbaV0ucGdkX3F1aWNrOyBwZ2Q7IHBnZCA9IChwZ2RfdCAqKSoodW5zaWdu ZWQgbG9uZyAqKXBnZCkNCisJCQlwZ2RbYWRkcmVzcyA+PiBQR0RJUl9TSElG VF0gPSBlbnRyeTsNCisjZW5kaWYNCit9DQorDQorLyogQ2FjaGVzIGFyZW4n dCBicmFpbi1kZWFkIG9uIHRoZSBpbnRlbC4gKi8NCisjZGVmaW5lIGZsdXNo X2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUgZmx1 c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUg Zmx1c2hfY2FjaGVfcmFuZ2UobW0sIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGls ZSAoMCkNCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIp CQlkbyB7IH0gd2hpbGUgKDApDQorI2RlZmluZSBmbHVzaF9wYWdlX3RvX3Jh bShwYWdlKQkJCWRvIHsgfSB3aGlsZSAoMCkNCisjZGVmaW5lIGZsdXNoX2lj YWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQ0KKw0K Ky8qDQorICogVExCIGZsdXNoaW5nOg0KKyAqDQorICogIC0gZmx1c2hfdGxi KCkgZmx1c2hlcyB0aGUgY3VycmVudCBtbSBzdHJ1Y3QgVExCcw0KKyAqICAt IGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcw0K KyAqICAtIGZsdXNoX3RsYl9tbShtbSkgZmx1c2hlcyB0aGUgc3BlY2lmaWVk IG1tIGNvbnRleHQgVExCJ3MNCisgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEs IHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQ0KKyAqICAtIGZsdXNoX3RsYl9y YW5nZShtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2Vz DQorICoNCisgKiAuLmJ1dCB0aGUgaTM4NiBoYXMgc29tZXdoYXQgbGltaXRl ZCB0bGIgZmx1c2hpbmcgY2FwYWJpbGl0aWVzLA0KKyAqIGFuZCBwYWdlLWdy YW51bGFyIGZsdXNoZXMgYXJlIGF2YWlsYWJsZSBvbmx5IG9uIGk0ODYgYW5k IHVwLg0KKyAqLw0KKw0KKyNpZm5kZWYgX19TTVBfXw0KKw0KKyNkZWZpbmUg Zmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQ0KKyNkZWZpbmUgZmx1c2hfdGxi X2FsbCgpIF9fZmx1c2hfdGxiKCkNCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3Rs YigpIF9fZmx1c2hfdGxiKCkNCisNCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1 c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KK3sNCisJaWYgKG1t ID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkNCisJCV9fZmx1c2hfdGxiKCk7DQor fQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwNCisJdW5zaWduZWQgbG9uZyBhZGRy KQ0KK3sNCisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21t KQ0KKwkJX19mbHVzaF90bGJfb25lKGFkZHIpOw0KK30NCisNCitzdGF0aWMg aW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLA0KKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVu ZCkNCit7DQorCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pDQorCQlf X2ZsdXNoX3RsYigpOw0KK30NCisNCisjZWxzZQ0KKw0KKy8qDQorICogV2Ug YXJlbid0IHZlcnkgY2xldmVyIGFib3V0IHRoaXMgeWV0IC0gIFNNUCBjb3Vs ZCBjZXJ0YWlubHkNCisgKiBhdm9pZCBzb21lIGdsb2JhbCBmbHVzaGVzLi4N CisgKi8NCisNCisjaW5jbHVkZSA8YXNtL3NtcC5oPg0KKw0KKyNkZWZpbmUg bG9jYWxfZmx1c2hfdGxiKCkgXA0KKwlfX2ZsdXNoX3RsYigpDQorDQorZXh0 ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsNCitleHRlcm4gdm9pZCBm bHVzaF90bGJfY3VycmVudF90YXNrKHZvaWQpOw0KK2V4dGVybiB2b2lkIGZs dXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICopOw0KK2V4dGVybiB2b2lk IGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNp Z25lZCBsb25nKTsNCisNCisjZGVmaW5lIGZsdXNoX3RsYigpCWZsdXNoX3Rs Yl9jdXJyZW50X3Rhc2soKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVz aF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBs b25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkNCit7DQorCWZsdXNoX3Rs Yl9tbShtbSk7DQorfQ0KKw0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfSTM4 Nl9QR0FMTE9DX0ggKi8NCi0tLSBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3Bn YWxsb2MtM2xldmVsLmgub3JpZwlTYXQgTm92IDEzIDA1OjAzOjQ3IDE5OTkN CisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MtM2xldmVsLmgJ U2F0IE5vdiAxMyAwNTowNDo0MyAxOTk5DQpAQCAtMCwwICsxLDY4IEBADQor I2lmbmRlZiBfSTM4Nl9QR0FMTE9DXzNMRVZFTF9IDQorI2RlZmluZSBfSTM4 Nl9QR0FMTE9DXzNMRVZFTF9IDQorDQorLyoNCisgKiBJbnRlbCBQaHlzaWNh bCBBZGRyZXNzIEV4dGVuc2lvbiAoUEFFKSBNb2RlIC0gdGhyZWUtbGV2ZWwg cGFnZQ0KKyAqIHRhYmxlcyBvbiBQUHJvKyBDUFVzLiBQYWdlLXRhYmxlIGFs bG9jYXRpb24gcm91dGluZXMuDQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDE5 OTkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+DQorICovDQorDQor ZXh0ZXJuIF9faW5saW5lX18gcG1kX3QgKmdldF9wbWRfc2xvdyh2b2lkKQ0K K3sNCisJcG1kX3QgKnJldCA9IChwbWRfdCAqKV9fZ2V0X2ZyZWVfcGFnZShH RlBfS0VSTkVMKTsNCisNCisJaWYgKHJldCkNCisJCW1lbXNldChyZXQsIDAs IFBBR0VfU0laRSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2V4dGVybiBf X2lubGluZV9fIHBtZF90ICpnZXRfcG1kX2Zhc3Qodm9pZCkNCit7DQorCXVu c2lnbmVkIGxvbmcgKnJldDsNCisNCisJaWYgKChyZXQgPSBwbWRfcXVpY2ts aXN0KSAhPSBOVUxMKSB7DQorCQlwbWRfcXVpY2tsaXN0ID0gKHVuc2lnbmVk IGxvbmcgKikoKnJldCk7DQorCQlyZXRbMF0gPSAwOw0KKwkJcGd0YWJsZV9j YWNoZV9zaXplLS07DQorCX0gZWxzZQ0KKwkJcmV0ID0gKHVuc2lnbmVkIGxv bmcgKilnZXRfcG1kX3Nsb3coKTsNCisJcmV0dXJuIChwbWRfdCAqKXJldDsN Cit9DQorDQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9mYXN0 KHBtZF90ICpwbWQpDQorew0KKwkqKHVuc2lnbmVkIGxvbmcgKilwbWQgPSAo dW5zaWduZWQgbG9uZykgcG1kX3F1aWNrbGlzdDsNCisJcG1kX3F1aWNrbGlz dCA9ICh1bnNpZ25lZCBsb25nICopIHBtZDsNCisJcGd0YWJsZV9jYWNoZV9z aXplKys7DQorfQ0KKw0KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9w bWRfc2xvdyhwbWRfdCAqcG1kKQ0KK3sNCisJZnJlZV9wYWdlKCh1bnNpZ25l ZCBsb25nKXBtZCk7DQorfQ0KKw0KK2V4dGVybiBpbmxpbmUgcG1kX3QgKiBw bWRfYWxsb2MocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQ0K K3sNCisJaWYgKCFwZ2QpDQorCQlCVUcoKTsNCisJYWRkcmVzcyA9IChhZGRy ZXNzID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1EIC0gMSk7DQorCWlm IChwZ2Rfbm9uZSgqcGdkKSkgew0KKwkJcG1kX3QgKnBhZ2UgPSBnZXRfcG1k X2Zhc3QoKTsNCisNCisJCWlmICghcGFnZSkNCisJCQlwYWdlID0gZ2V0X3Bt ZF9zbG93KCk7DQorCQlpZiAocGFnZSkgew0KKwkJCWlmIChwZ2Rfbm9uZSgq cGdkKSkgew0KKwkJCQlwZ2RfdmFsKCpwZ2QpID0gMSArIF9fcGEocGFnZSk7 DQorCQkJCV9fZmx1c2hfdGxiKCk7DQorCQkJCXJldHVybiBwYWdlICsgYWRk cmVzczsNCisJCQl9IGVsc2UNCisJCQkJZnJlZV9wbWRfZmFzdChwYWdlKTsN CisJCX0gZWxzZQ0KKwkJCXJldHVybiBOVUxMOw0KKwl9DQorCXJldHVybiAo cG1kX3QgKilwZ2RfcGFnZSgqcGdkKSArIGFkZHJlc3M7DQorfQ0KKw0KKyNl bmRpZiAvKiBfSTM4Nl9QR0FMTE9DXzNMRVZFTF9IICovDQotLS0gbGludXgv aW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oLm9yaWcJU2F0IE5v diAxMyAwNTowNToxNyAxOTk5DQorKysgbGludXgvaW5jbHVkZS9hc20taTM4 Ni9wZ3RhYmxlLTJsZXZlbC5oCVNhdCBOb3YgMTMgMDU6MDY6MzYgMTk5OQ0K QEAgLTQyLDE5ICs0Miw0IEBADQogCXJldHVybiAocG1kX3QgKikgZGlyOw0K IH0NCiANCi1leHRlcm4gX19pbmxpbmVfXyBwbWRfdCAqZ2V0X3BtZF9mYXN0 KHZvaWQpDQotew0KLQlyZXR1cm4gKHBtZF90ICopMDsNCi19DQotDQotZXh0 ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9mYXN0KHBtZF90ICpwbWQp IHsgfQ0KLWV4dGVybiBfX2lubGluZV9fIHZvaWQgZnJlZV9wbWRfc2xvdyhw bWRfdCAqcG1kKSB7IH0NCi0NCi1leHRlcm4gaW5saW5lIHBtZF90ICogcG1k X2FsbG9jKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykNCi17 DQotCWlmICghcGdkKQ0KLQkJQlVHKCk7DQotCXJldHVybiAocG1kX3QgKikg cGdkOw0KLX0NCi0NCiAjZW5kaWYgLyogX0kzODZfUEdUQUJMRV8yTEVWRUxf SCAqLw0KLS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy0ybGV2 ZWwuaC5vcmlnCVNhdCBOb3YgMTMgMDU6MDU6MjggMTk5OQ0KKysrIGxpbnV4 L2luY2x1ZGUvYXNtLWkzODYvcGdhbGxvYy0ybGV2ZWwuaAlTYXQgTm92IDEz IDA1OjA2OjA3IDE5OTkNCkBAIC0wLDAgKzEsMjMgQEANCisjaWZuZGVmIF9J Mzg2X1BHQUxMT0NfMkxFVkVMX0gNCisjZGVmaW5lIF9JMzg2X1BHQUxMT0Nf MkxFVkVMX0gNCisNCisvKg0KKyAqIHRyYWRpdGlvbmFsIGkzODYgdHdvLWxl dmVsIHBhZ2luZywgcGFnZSB0YWJsZSBhbGxvY2F0aW9uIHJvdXRpbmVzOg0K KyAqLw0KKw0KK2V4dGVybiBfX2lubGluZV9fIHBtZF90ICpnZXRfcG1kX2Zh c3Qodm9pZCkNCit7DQorCXJldHVybiAocG1kX3QgKikwOw0KK30NCisNCitl eHRlcm4gX19pbmxpbmVfXyB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKnBt ZCkgeyB9DQorZXh0ZXJuIF9faW5saW5lX18gdm9pZCBmcmVlX3BtZF9zbG93 KHBtZF90ICpwbWQpIHsgfQ0KKw0KK2V4dGVybiBpbmxpbmUgcG1kX3QgKiBw bWRfYWxsb2MocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQ0K K3sNCisJaWYgKCFwZ2QpDQorCQlCVUcoKTsNCisJcmV0dXJuIChwbWRfdCAq KSBwZ2Q7DQorfQ0KKw0KKyNlbmRpZiAvKiBfSTM4Nl9QR0FMTE9DXzJMRVZF TF9IICovDQotLS0gbGludXgvaW5jbHVkZS9hc20taTM4Ni9pby5oLm9yaWcJ U2F0IE5vdiAxMyAwNToyMTozOSAxOTk5DQorKysgbGludXgvaW5jbHVkZS9h c20taTM4Ni9pby5oCVNhdCBOb3YgMTMgMTA6MzY6MjEgMTk5OQ0KQEAgLTEw Myw3ICsxMDMsNiBAQA0KIA0KICNpZmRlZiBfX0tFUk5FTF9fDQogDQotI2lu Y2x1ZGUgPGFzbS9wYWdlLmg+DQogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2Mu aD4NCiANCiAvKg0KLS0tIGxpbnV4L2RyaXZlcnMvY2hhci9tZW0uYy5vcmln CVNhdCBOb3YgMTMgMDU6NDU6NDIgMTk5OQ0KKysrIGxpbnV4L2RyaXZlcnMv Y2hhci9tZW0uYwlTYXQgTm92IDEzIDA1OjQ1OjQ4IDE5OTkNCkBAIC0yMSw3 ICsyMSw3IEBADQogDQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+DQogI2lu Y2x1ZGUgPGFzbS9pby5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KIA0KICNpZmRlZiBDT05GSUdf U09VTkQNCiB2b2lkIHNvdW5kY29yZV9pbml0KHZvaWQpOw0KLS0tIGxpbnV4 L2FyY2gvaTM4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jLm9yaWcJU2F0IE5v diAxMyAwNToxMzo0MiAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2Jvb3Qv Y29tcHJlc3NlZC9taXNjLmMJU2F0IE5vdiAxMyAxMToxMzoyNCAxOTk5DQpA QCAtOSwxMCArOSw4IEBADQogICogSGlnaCBsb2FkZWQgc3R1ZmYgYnkgSGFu cyBMZXJtZW4gJiBXZXJuZXIgQWxtZXNiZXJnZXIsIEZlYi4gMTk5Ng0KICAq Lw0KIA0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPg0KLSNpbmNsdWRlIDxhc20v c2VnbWVudC5oPg0KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQogI2lu Y2x1ZGUgPGFzbS9pby5oPg0KLQ0KIC8qDQogICogZ3ppcCBkZWNsYXJhdGlv bnMNCiAgKi8NCi0tLSBsaW51eC9hcmNoL2kzODYvYm9vdC9NYWtlZmlsZS5v cmlnCVNhdCBOb3YgMTMgMDE6NTY6NDYgMTk5OQ0KKysrIGxpbnV4L2FyY2gv aTM4Ni9ib290L01ha2VmaWxlCVNhdCBOb3YgMTMgMDg6MzU6MjEgMTk5OQ0K QEAgLTUxLDggKzUxLDExIEBADQogYm9vdHNlY3QuczogYm9vdHNlY3QuUyBN YWtlZmlsZSAkKEJPT1RfSU5DTCkNCiAJJChDUFApIC10cmFkaXRpb25hbCAk KFNWR0FfTU9ERSkgJChSQU1ESVNLKSAkPCAtbyAkQA0KIA0KLWJib290c2Vj dDogYmJvb3RzZWN0Lm8gYnNldHVwLm8NCi0JJChMRCkgLVR0ZXh0IDB4MCAt UiBic2V0dXAubyAtcyAtb2Zvcm1hdCBiaW5hcnkgJDwgLW8gJEANCitiYm9v dHNlY3Q6IGJib290c2VjdC5vIGJib290c2VjdF9rbHVkZ2Uubw0KKwkkKExE KSAtVHRleHQgMHgwIC1SIGJib290c2VjdF9rbHVkZ2UubyAtcyAtb2Zvcm1h dCBiaW5hcnkgJDwgLW8gJEANCisNCitiYm9vdHNlY3Rfa2x1ZGdlLm86CWJi b290c2VjdC5vIGJzZXR1cC5vDQorCSQoTEQpIC1yICReIC1vICRADQogDQog YmJvb3RzZWN0Lm86IGJib290c2VjdC5zDQogCSQoQVMpIC1vICRAICQ8DQpA QCAtODQsNCArODcsNSBAQA0KIAlybSAtZiB0b29scy9idWlsZA0KIAlybSAt ZiBzZXR1cCBib290c2VjdCB6SW1hZ2UgY29tcHJlc3NlZC92bWxpbnV4Lm91 dA0KIAlybSAtZiBic2V0dXAgYmJvb3RzZWN0IGJ6SW1hZ2UgY29tcHJlc3Nl ZC9idm1saW51eC5vdXQNCisJcm0gLWYgYmJvb3RzZWN0X2tsdWRnZS5vDQog CUAkKE1BS0UpIC1DIGNvbXByZXNzZWQgY2xlYW4NCi0tLSBsaW51eC9hcmNo L2kzODYvbW0vaW5pdC5jLm9yaWcJU2F0IE5vdiAxMyAwMTo1Njo0NSAxOTk5 DQorKysgbGludXgvYXJjaC9pMzg2L21tL2luaXQuYwlTYXQgTm92IDEzIDEx OjAxOjI2IDE5OTkNCkBAIC0zMCw2ICszMCw3IEBADQogI2luY2x1ZGUgPGFz bS9zeXN0ZW0uaD4NCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4NCiAjaW5j bHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNtL3BnYWxsb2Mu aD4NCiAjaW5jbHVkZSA8YXNtL2RtYS5oPg0KICNpbmNsdWRlIDxhc20vZml4 bWFwLmg+DQogI2luY2x1ZGUgPGFzbS9lODIwLmg+DQpAQCAtMjg1LDcgKzI4 Niw2IEBADQogI2lmIENPTkZJR19YODZfUEFFDQogCQlpZiAocGdkX25vbmUo KnBnZCkpIHsNCiAJCQlwbWQgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9s b3dfcGFnZXMoUEFHRV9TSVpFKTsNCi0JCQltZW1zZXQoKHZvaWQqKXBtZCwg MCwgUEFHRV9TSVpFKTsNCiAJCQlwZ2RfdmFsKCpwZ2QpID0gX19wYShwbWQp ICsgMHgxOw0KIAkJCWlmIChwbWQgIT0gcG1kX29mZnNldChwZ2QsIHN0YXJ0 KSkNCiAJCQkJQlVHKCk7DQpAQCAtMjk3LDcgKzI5Nyw2IEBADQogCQlmb3Ig KDsgKGogPCBQVFJTX1BFUl9QTUQpICYmIHN0YXJ0OyBwbWQrKywgaisrKSB7 DQogCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7DQogCQkJCXB0ZSA9IChwdGVf dCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOw0KLQkJ CQltZW1zZXQoKHZvaWQqKXB0ZSwgMCwgUEFHRV9TSVpFKTsNCiAJCQkJcG1k X3ZhbCgqcG1kKSA9IF9LRVJOUEdfVEFCTEUgKyBfX3BhKHB0ZSk7DQogCQkJ CWlmIChwdGUgIT0gcHRlX29mZnNldChwbWQsIDApKQ0KIAkJCQkJQlVHKCk7 DQpAQCAtMzI3LDcgKzMyNiw2IEBADQogCQl2YWRkciA9IGkqUEdESVJfU0la RTsNCiAjaWYgQ09ORklHX1g4Nl9QQUUNCiAJCXBtZCA9IChwbWRfdCAqKSBh bGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOw0KLQkJbWVtc2V0 KCh2b2lkKilwbWQsIDAsIFBBR0VfU0laRSk7DQogCQlwZ2RfdmFsKCpwZ2Qp ID0gX19wYShwbWQpICsgMHgxOw0KICNlbHNlDQogCQlwbWQgPSAocG1kX3Qg KilwZ2Q7DQpAQCAtMzUyLDcgKzM1MCw2IEBADQogCQkJfQ0KIA0KIAkJCXB0 ZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJ WkUpOw0KLQkJCW1lbXNldCgodm9pZCopcHRlLCAwLCBQQUdFX1NJWkUpOw0K IAkJCXBtZF92YWwoKnBtZCkgPSBfS0VSTlBHX1RBQkxFICsgX19wYShwdGUp Ow0KIA0KIAkJCWlmIChwdGUgIT0gcHRlX29mZnNldChwbWQsIDApKQ0KQEAg LTQxMiw3ICs0MDksMTEgQEANCiAJICogdGhhdCBjYXNlKS4NCiAJICovDQog CWZvciAoaSA9IDA7IGkgPCBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrKQ0KKyNp ZiBDT05GSUdfWDg2X1BBRQ0KKwkJcGdkX2NsZWFyKHN3YXBwZXJfcGdfZGly K2kpOw0KKyNlbHNlDQogCQlwZ2RfdmFsKHN3YXBwZXJfcGdfZGlyW2ldKSA9 IDA7DQorI2VuZGlmDQogCWZsdXNoX3RsYl9hbGwoKTsNCiB9DQogDQpAQCAt NDQ4LDEzICs0NDksMjEgQEANCiAJa21hcF9pbml0KCk7DQogI2VuZGlmDQog CXsNCi0JCXVuc2lnbmVkIGludCB6b25lc19zaXplWzNdOw0KKwkJdW5zaWdu ZWQgaW50IHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswLCAwLCAwfTsN CisJCXVuc2lnbmVkIGludCBtYXhfZG1hOw0KIA0KLQkJem9uZXNfc2l6ZVsw XSA9IHZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQUREUkVTUykNCi0J CQkJCSA+PiBQQUdFX1NISUZUOw0KLQkJem9uZXNfc2l6ZVsxXSA9IG1heF9s b3dfcGZuIC0gem9uZXNfc2l6ZVswXTsNCi0JCXpvbmVzX3NpemVbMl0gPSBo aWdoZW5kX3BmbiAtIHpvbmVzX3NpemVbMF0gLSB6b25lc19zaXplWzFdOw0K KwkJbWF4X2RtYSA9IHZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQURE UkVTUykgPj4gUEFHRV9TSElGVDsNCiANCisJCWlmIChtYXhfbG93X3BmbiA8 IG1heF9kbWEpDQorCQkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfbG93 X3BmbjsNCisJCWVsc2Ugew0KKwkJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0g bWF4X2RtYTsNCisJCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IG1heF9s b3dfcGZuIC0gem9uZXNfc2l6ZVswXTsNCisjaWZkZWYgQ09ORklHX0hJR0hN RU0NCisJCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPQ0KKwkJCQloaWdo ZW5kX3BmbiAtIHpvbmVzX3NpemVbMF0gLSB6b25lc19zaXplWzFdOw0KKyNl bmRpZg0KKwkJfQ0KIAkJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7DQog CX0NCiAJcmV0dXJuOw0KQEAgLTUyOCwxNSArNTM3LDEzIEBADQogDQogdm9p ZCBfX2luaXQgbWVtX2luaXQodm9pZCkNCiB7DQotCWludCBjb2RlcGFnZXMg PSAwOw0KLQlpbnQgcmVzZXJ2ZWRwYWdlcyA9IDA7DQotCWludCBkYXRhcGFn ZXMgPSAwOw0KLQlpbnQgaW5pdHBhZ2VzID0gMDsNCi0jaWZkZWYgQ09ORklH X0hJR0hNRU0NCisJaW50IGNvZGVzaXplLCByZXNlcnZlZHBhZ2VzLCBkYXRh c2l6ZSwgaW5pdHNpemU7DQogCWludCB0bXA7DQogDQogCWlmICghbWVtX21h cCkNCiAJCUJVRygpOw0KKw0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQ0KIAlo aWdobWVtX3N0YXJ0X3BhZ2UgPSBtZW1fbWFwICsgaGlnaHN0YXJ0X3BmbjsN CiAJLyogY2FjaGUgdGhlIGhpZ2htZW1fbWFwbnIgKi8NCiAJaGlnaG1lbV9t YXBuciA9IGhpZ2hzdGFydF9wZm47DQpAQCAtNTUyLDYgKzU1OSwxMyBAQA0K IAkvKiB0aGlzIHdpbGwgcHV0IGFsbCBsb3cgbWVtb3J5IG9udG8gdGhlIGZy ZWVsaXN0cyAqLw0KIAl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290 bWVtKCk7DQogDQorCXJlc2VydmVkcGFnZXMgPSAwOw0KKwlmb3IgKHRtcCA9 IDA7IHRtcCA8IG1heF9sb3dfcGZuOyB0bXArKykNCisJCS8qDQorCQkgKiBP bmx5IGNvdW50IHJlc2VydmVkIFJBTSBwYWdlcw0KKwkJICovDQorCQlpZiAo cGFnZV9pc19yYW0odG1wKSAmJiBQYWdlUmVzZXJ2ZWQobWVtX21hcCt0bXAp KQ0KKwkJCXJlc2VydmVkcGFnZXMrKzsNCiAjaWZkZWYgQ09ORklHX0hJR0hN RU0NCiAJZm9yICh0bXAgPSBoaWdoc3RhcnRfcGZuOyB0bXAgPCBoaWdoZW5k X3BmbjsgdG1wKyspIHsNCiAJCXN0cnVjdCBwYWdlICpwYWdlID0gbWVtX21h cCArIHRtcDsNCkBAIC01NjgsMTkgKzU4MiwyMyBAQA0KIAl9DQogCXRvdGFs cmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsNCiAjZW5kaWYNCisJY29k ZXNpemUgPSAgKHVuc2lnbmVkIGxvbmcpICZfZXRleHQgLSAodW5zaWduZWQg bG9uZykgJl90ZXh0Ow0KKwlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykg Jl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0Ow0KKwlpbml0c2l6 ZSA9ICAodW5zaWduZWQgbG9uZykgJl9faW5pdF9lbmQgLSAodW5zaWduZWQg bG9uZykgJl9faW5pdF9iZWdpbjsNCisNCiAJcHJpbnRrKCJNZW1vcnk6ICVs dWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2Vy dmVkLCAlZGsgZGF0YSwgJWRrIGluaXQsICVsZGsgaGlnaG1lbSlcbiIsDQog CQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NI SUZULTEwKSwNCiAJCW1heF9tYXBuciA8PCAoUEFHRV9TSElGVC0xMCksDQot CQljb2RlcGFnZXMgPDwgKFBBR0VfU0hJRlQtMTApLA0KKwkJY29kZXNpemUg Pj4gMTAsDQogCQlyZXNlcnZlZHBhZ2VzIDw8IChQQUdFX1NISUZULTEwKSwN Ci0JCWRhdGFwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksDQotCQlpbml0cGFn ZXMgPDwgKFBBR0VfU0hJRlQtMTApLA0KKwkJZGF0YXNpemUgPj4gMTAsDQor CQlpbml0c2l6ZSA+PiAxMCwNCiAJCSh1bnNpZ25lZCBsb25nKSAodG90YWxo aWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkNCiAJICAgICAgICk7DQog DQogI2lmIENPTkZJR19YODZfUEFFDQogCWlmICghY3B1X2hhc19wYWUpDQot CQlwYW5pYygiY2Fubm90IGV4ZWN1dGUgYSBQQUUtZW5hYmxlZCBrZXJuZWwg b24gYSBQQUUtaW5jYXBhYmxlIENQVSEiKTsNCisJCXBhbmljKCJjYW5ub3Qg ZXhlY3V0ZSBhIFBBRS1lbmFibGVkIGtlcm5lbCBvbiBhIFBBRS1sZXNzIENQ VSEiKTsNCiAjZW5kaWYNCiAJaWYgKGJvb3RfY3B1X2RhdGEud3Bfd29ya3Nf b2sgPCAwKQ0KIAkJdGVzdF93cF9iaXQoKTsNCi0tLSBsaW51eC9hcmNoL2kz ODYvbW0vaW9yZW1hcC5jLm9yaWcJU2F0IE5vdiAxMyAwNToxMToxMCAxOTk5 DQorKysgbGludXgvYXJjaC9pMzg2L21tL2lvcmVtYXAuYwlTYXQgTm92IDEz IDA1OjExOjE2IDE5OTkNCkBAIC0xMCw2ICsxMCw3IEBADQogDQogI2luY2x1 ZGUgPGxpbnV4L3ZtYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2lvLmg+DQor I2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogDQogc3RhdGljIGlubGluZSB2 b2lkIHJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25n IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwNCiAJdW5zaWduZWQgbG9u ZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpDQotLS0gbGludXgv YXJjaC9pMzg2L21tL2ZhdWx0LmMub3JpZwlTYXQgTm92IDEzIDA1OjUwOjEw IDE5OTkNCisrKyBsaW51eC9hcmNoL2kzODYvbW0vZmF1bHQuYwlTYXQgTm92 IDEzIDA1OjUwOjE0IDE5OTkNCkBAIC0xOSw3ICsxOSw3IEBADQogDQogI2lu Y2x1ZGUgPGFzbS9zeXN0ZW0uaD4NCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu aD4NCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8YXNt L3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4NCiANCiBl eHRlcm4gdm9pZCBkaWUoY29uc3QgY2hhciAqLHN0cnVjdCBwdF9yZWdzICos bG9uZyk7DQotLS0gbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMu b3JpZwlTYXQgTm92IDEzIDAxOjU2OjQxIDE5OTkNCisrKyBsaW51eC9hcmNo L2kzODYva2VybmVsL3NtcGJvb3QuYwlTYXQgTm92IDEzIDA1OjQ4OjQxIDE5 OTkNCkBAIC00NCw2ICs0NCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+DQogI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+DQogI2luY2x1 ZGUgPGFzbS9tdHJyLmg+DQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQog DQogLyogU2V0IGlmIHdlIGZpbmQgYSBCIHN0ZXBwaW5nIENQVQkJCSovDQog c3RhdGljIGludCBzbXBfYl9zdGVwcGluZyA9IDA7DQpAQCAtNjQ5LDEwICs2 NTAsMTEgQEANCiANCiB2b2lkIF9faW5pdCBzbXBfc3RvcmVfY3B1X2luZm8o aW50IGlkKQ0KIHsNCi0Jc3RydWN0IGNwdWluZm9feDg2ICpjPSZjcHVfZGF0 YVtpZF07DQorCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsg aWQ7DQogDQogCSpjID0gYm9vdF9jcHVfZGF0YTsNCiAJYy0+cHRlX3F1aWNr ID0gMDsNCisJYy0+cG1kX3F1aWNrID0gMDsNCiAJYy0+cGdkX3F1aWNrID0g MDsNCiAJYy0+cGd0YWJsZV9jYWNoZV9zeiA9IDA7DQogCWlkZW50aWZ5X2Nw dShjKTsNCkBAIC03MTksNyArNzIxLDcgQEANCiAJICogRW5hYmxlIEFQSUMN CiAJICovDQogIAl2YWx1ZSB8PSAoMTw8OCk7DQotI2lmIDANCisjaWYgMQ0K IAkvKiBFbmFibGUgZm9jdXMgcHJvY2Vzc29yIChiaXQ9PTApICovDQogIAl2 YWx1ZSAmPSB+KDE8PDkpOw0KICNlbHNlDQpAQCAtODIxLDggKzgyMyw3IEBA DQogCQkgKiBjb3VsZCB1c2UgdGhlIHJlYWwgemVyby1wYWdlLCBidXQgaXQn cyBzYWZlcg0KIAkJICogdGhpcyB3YXkgaWYgc29tZSBidWdneSBjb2RlIHdy aXRlcyB0byB0aGlzIHBhZ2UgLi4uDQogCQkgKi8NCi0JCWFwaWNfcGh5cyA9 ICh1bnNpZ25lZCBsb25nKWFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpF KTsNCi0JCW1lbXNldCgodm9pZCAqKWFwaWNfcGh5cywgMCwgUEFHRV9TSVpF KTsNCisJCWFwaWNfcGh5cyA9ICh1bnNpZ25lZCBsb25nKSBhbGxvY19ib290 bWVtX3BhZ2VzKFBBR0VfU0laRSk7DQogCQlhcGljX3BoeXMgPSBfX3BhKGFw aWNfcGh5cyk7DQogCX0NCiAJc2V0X2ZpeG1hcChGSVhfQVBJQ19CQVNFLCBh cGljX3BoeXMpOw0KQEAgLTgzNyw4ICs4MzgsNyBAQA0KIAkJCWlmIChzbXBf Zm91bmRfY29uZmlnKSB7DQogCQkJCWlvYXBpY19waHlzID0gbXBfaW9hcGlj c1tpXS5tcGNfYXBpY2FkZHI7DQogCQkJfSBlbHNlIHsNCi0JCQkJaW9hcGlj X3BoeXMgPSAodW5zaWduZWQgbG9uZylhbGxvY19ib290bWVtX3BhZ2VzKFBB R0VfU0laRSk7DQotCQkJCW1lbXNldCgodm9pZCAqKWlvYXBpY19waHlzLCAw LCBQQUdFX1NJWkUpOw0KKwkJCQlpb2FwaWNfcGh5cyA9ICh1bnNpZ25lZCBs b25nKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7DQogCQkJCWlv YXBpY19waHlzID0gX19wYShpb2FwaWNfcGh5cyk7DQogCQkJfQ0KIAkJCXNl dF9maXhtYXAoaWR4LGlvYXBpY19waHlzKTsNCi0tLSBsaW51eC9hcmNoL2kz ODYva2VybmVsL3ZtODYuYy5vcmlnCVNhdCBOb3YgMTMgMDU6NDc6NDIgMTk5 OQ0KKysrIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvdm04Ni5jCVNhdCBOb3Yg MTMgMDU6NDc6NDcgMTk5OQ0KQEAgLTE0LDcgKzE0LDcgQEANCiAjaW5jbHVk ZSA8bGludXgvc21wX2xvY2suaD4NCiANCiAjaW5jbHVkZSA8YXNtL3VhY2Nl c3MuaD4NCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4NCisjaW5jbHVkZSA8 YXNtL3BnYWxsb2MuaD4NCiAjaW5jbHVkZSA8YXNtL2lvLmg+DQogDQogLyoN Ci0tLSBsaW51eC9hcmNoL2kzODYva2VybmVsL3NtcC5jLm9yaWcJU2F0IE5v diAxMyAwNTo0ODoxMCAxOTk5DQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5l bC9zbXAuYwlTYXQgTm92IDEzIDA1OjQ4OjEyIDE5OTkNCkBAIC0xOCw2ICsx OCw3IEBADQogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQogI2luY2x1ZGUg PGxpbnV4L21jMTQ2ODE4cnRjLmg+DQogI2luY2x1ZGUgPGFzbS9tdHJyLmg+ DQorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogDQogLyoNCiAgKglTb21l IG5vdGVzIG9uIHByb2Nlc3NvciBidWdzOg0KLS0tIGxpbnV4L2FyY2gvaTM4 Ni9rZXJuZWwvaXJxLmMub3JpZwlTYXQgTm92IDEzIDA1OjQ3OjIwIDE5OTkN CisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL2lycS5jCVNhdCBOb3YgMTMg MDU6NDc6MjIgMTk5OQ0KQEAgLTM3LDcgKzM3LDcgQEANCiAjaW5jbHVkZSA8 YXNtL3N5c3RlbS5oPg0KICNpbmNsdWRlIDxhc20vaW8uaD4NCiAjaW5jbHVk ZSA8YXNtL2JpdG9wcy5oPg0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K KyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPg0KICNpbmNsdWRlIDxhc20vZGVs YXkuaD4NCiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4NCiAjaW5jbHVkZSA8YXNt L2lycS5oPg0KLS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYy5v cmlnCVNhdCBOb3YgMTMgMTA6NDg6MDggMTk5OQ0KKysrIGxpbnV4L2FyY2gv aTM4Ni9rZXJuZWwvc2V0dXAuYwlTYXQgTm92IDEzIDEwOjQ4OjE4IDE5OTkN CkBAIC02MzQsNyArNjM0LDYgQEANCiAJaGlnaHN0YXJ0X3BmbiA9IGhpZ2hl bmRfcGZuID0gbWF4X3BmbjsNCiAJaWYgKG1heF9wZm4gPiBNQVhNRU1fUEZO KSB7DQogCQloaWdoc3RhcnRfcGZuID0gTUFYTUVNX1BGTjsNCi0JCWhpZ2hl bmRfcGZuID0gbWF4X3BmbjsNCiAJCXByaW50ayhLRVJOX05PVElDRSAiJWxk TUIgSElHSE1FTSBhdmFpbGFibGUuXG4iLA0KIAkJCXBhZ2VzX3RvX21iKGhp Z2hlbmRfcGZuIC0gaGlnaHN0YXJ0X3BmbikpOw0KIAl9DQo= --650352740-790050170-942520923=:4346-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://humbolt.geo.uu.nl/Linux-MM/