This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>Number: 5714 >Category: other >Synopsis: Wrong assembly code generated! >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Sun Feb 17 09:26:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: Carlos Duclos >Release: gcc-2.95.3 (cross compiler for ColdFire from x86) >Organization: >Environment: Linux SuSE 7.2, linux 2.2.20, binutils 020202, gcc-3.0.3, m68k-elf-gcc 2.95.3, m68k-binutils 2.10 >Description: THe cross compiler generates invalid assembler code. It generates code for 68000 and not for coldfire on some cases. I'm aware that probably you don't manage the coldfire port of gcc but maybe. This happens when you try to compile the uClinux kernel with framebuffer support enabled. I don't know why but in these files it generates a "dbra" instruction. which is not supported on ColdFire processors. >How-To-Repeat: >Fix: Edit the assembly code and fix it manually, then use as and run ld. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="fbcon-cfb16.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="fbcon-cfb16.i" IyAxICJkcml2ZXJzL3ZpZGVvL2ZiY29uLWNmYjE2LmMiCiAKCgoKCgoKCgoKCiMgMSAiL2hvbWUv Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbW9k dWxlLmgiIDEKIAoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11 Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKCgoKIyAxICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9hdXRvY29u Zi5oIiAxCiAKCgoKCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgogCgoKCgog CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCgoKCiAKCgoK CiAKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKCgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wt dWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAyCgoKCiMgMTAgIi9ob21lL2Nh cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21vZHVs ZS5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAgdHlwZWRlZiBzdHJ1Y3QgeyBpbnQg Z2NjX2lzX2J1Z2d5OyB9IHNwaW5sb2NrX3Q7CiAgCgoKCgoKCgoKCiMgMTA1ICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zcGlubG9j ay5oIgoKCiAKCgoKCgoKCgoKCgoKCgoKICB0eXBlZGVmIHN0cnVjdCB7IGludCBnY2NfaXNfYnVn Z3k7IH0gcndsb2NrX3Q7CiAgCgoKCgoKCgoKCgogCgoKCgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIiAy CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2xpbnV4L2xpc3QuaCIgMQoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMQogCgoKCgoKCgoK CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9hc20vcHJvY2Vzc29yLmgiIDEKIAoKCgoKCgoKCiAKCgoKCgoKIyAxICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2VnbWVudC5o IiAxCgoKCiAKIAoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcg c2VnOwp9IG1tX3NlZ21lbnRfdDsKCgoKCgogCgoKCnN0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90 IGdldF9mcyh2b2lkKQp7CiAgICByZXR1cm4gKChtbV9zZWdtZW50X3QpIHsgKCAoKDEpICkgICkg fSkgIDsKfQoKc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCnsKICAgICAK ICAgIHJldHVybiAoKG1tX3NlZ21lbnRfdCkgeyAoICgoNSkgKSAgKSB9KSAgOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCB2YWwpCnsKfQoKCgoKCgojIDE3ICIvaG9t ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcHJv Y2Vzc29yLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4 LTIuNC54L2luY2x1ZGUvYXNtL2ZwdS5oIiAxCgoKCgoKIAoKCgogCgoKIyAyMyAiL2hvbWUvY2Fy bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2ZwdS5oIgoK CgojIDE4ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3B0cmFjZS5oIiAxCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKc3RydWN0IHB0X3JlZ3MgewogIGxvbmcgICAgIGQxOwogIGxvbmcgICAg IGQyOwogIGxvbmcgICAgIGQzOwogIGxvbmcgICAgIGQ0OwogIGxvbmcgICAgIGQ1OwogIGxvbmcg ICAgIGEwOwogIGxvbmcgICAgIGExOwogIGxvbmcgICAgIGEyOwogIGxvbmcgICAgIGQwOwogIGxv bmcgICAgIG9yaWdfZDA7CiAgbG9uZyAgICAgc3RrYWRqOwoKICB1bnNpZ25lZCBmb3JtYXQgOiAg NDsgIAogIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAgCiAgdW5zaWduZWQgc2hvcnQgc3I7CiAgdW5z aWduZWQgbG9uZyAgcGM7CgoKCgoKCgoKfTsKCiAKCgoKc3RydWN0IHN3aXRjaF9zdGFjayB7Cgl1 bnNpZ25lZCBsb25nICBkNjsKCXVuc2lnbmVkIGxvbmcgIGQ3OwoJdW5zaWduZWQgbG9uZyAgYTM7 Cgl1bnNpZ25lZCBsb25nICBhNDsKCXVuc2lnbmVkIGxvbmcgIGE1OwoJdW5zaWduZWQgbG9uZyAg YTY7Cgl1bnNpZ25lZCBsb25nICByZXRwYzsKfTsKCiAKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2 b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKCgoKIyAxOSAiL2hvbWUvY2FybG9zL0J1 aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAy CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2FzbS9jdXJyZW50LmgiIDEKCgogCgoKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVj dCAqX2N1cnJlbnRfdGFzazsKCgoKCiMgMjAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgoKCmV4dGVybiBpbmxp bmUgdW5zaWduZWQgbG9uZyByZHVzcCh2b2lkKSB7CgoJZXh0ZXJuIHVuc2lnbmVkIGludAlzd191 c3A7CglyZXR1cm4oc3dfdXNwKTsKCgoKCgoKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHdydXNwKHVu c2lnbmVkIGxvbmcgdXNwKSB7CgoJZXh0ZXJuIHVuc2lnbmVkIGludAlzd191c3A7Cglzd191c3Ag PSB1c3A7CgoKCn0KCiAKCgoKCgogCgoKCgoKIAoKCgogICAKc3RydWN0IHRocmVhZF9zdHJ1Y3Qg ewoJdW5zaWduZWQgbG9uZyAga3NwOwkJIAoJdW5zaWduZWQgbG9uZyAgdXNwOwkJIAoJdW5zaWdu ZWQgc2hvcnQgc3I7CQkgCgl1bnNpZ25lZCBzaG9ydCBmczsJCSAKCXVuc2lnbmVkIGxvbmcgIGNy cFsyXTsJCSAKCXVuc2lnbmVkIGxvbmcgIGVzcDA7CQkgCgl1bnNpZ25lZCBsb25nICBmcFs4KjNd OwoJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkgCgl1bnNpZ25lZCBjaGFyICBmcHN0YXRlWygy KSBdOyAgIAp9OwoKCgoKCgoKIAoKCgoKCgojIDkzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCgogCnN0cnVjdCB0 YXNrX3N0cnVjdDsKCiAKc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0 YXNrX3N0cnVjdCAqZGVhZF90YXNrKQp7Cn0KCmV4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQg KCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CgoKCgoKIAoK CnN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3RocmVhZCh2b2lkKQp7Cn0KCiAKCgpleHRlcm4gaW5s aW5lIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0 KQp7CglleHRlcm4gdm9pZCBzY2hlZHVsaW5nX2Z1bmN0aW9uc19zdGFydF9oZXJlKHZvaWQpOwoJ ZXh0ZXJuIHZvaWQgc2NoZWR1bGluZ19mdW5jdGlvbnNfZW5kX2hlcmUodm9pZCk7CglzdHJ1Y3Qg c3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopdC0+a3NwOwoJIAoJaWYg KHN3LT5yZXRwYyA+ICh1bnNpZ25lZCBsb25nKXNjaGVkdWxpbmdfZnVuY3Rpb25zX3N0YXJ0X2hl cmUgJiYKCSAgICBzdy0+cmV0cGMgPCAodW5zaWduZWQgbG9uZylzY2hlZHVsaW5nX2Z1bmN0aW9u c19lbmRfaGVyZSkKCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nICopc3ctPmE2KVsxXTsKCWVsc2UK CQlyZXR1cm4gc3ctPnJldHBjOwp9Cgp1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnApOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIyAxMyAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv cHJlZmV0Y2guaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQoKCgogCgoKIAoKCgoKCiMgMTQgIi9ob21l L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3By ZWZldGNoLmgiIDIKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgpzdGF0aWMgaW5saW5l IHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkgezt9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg cHJlZmV0Y2h3KGNvbnN0IHZvaWQgKngpIHs7fQoKCgoKCgoKCgoKCgojIDYgIi9ob21lL2Nhcmxv cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIg MgoKCiAKCgoKCgoKCgoKc3RydWN0IGxpc3RfaGVhZCB7CglzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0 LCAqcHJldjsKfTsKCgoKCgoKCgoKCiAKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fbGlz dF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqIG5ldywKCXN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAoJ c3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCnsKCW5leHQtPnByZXYgPSBuZXc7CgluZXctPm5leHQg PSBuZXh0OwoJbmV3LT5wcmV2ID0gcHJldjsKCXByZXYtPm5leHQgPSBuZXc7Cn0KCiAKCgoKCgoK CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBz dHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CglfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVhZC0+bmV4 dCk7Cn0KCiAKCgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1 Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKCV9fbGlzdF9hZGQo bmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKfQoKIAoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lk IF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCgkJCQkgIHN0cnVjdCBsaXN0X2hl YWQgKiBuZXh0KQp7CgluZXh0LT5wcmV2ID0gcHJldjsKCXByZXYtPm5leHQgPSBuZXh0Owp9Cgog CgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVu dHJ5KQp7CglfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7Cn0KCiAKCgoKc3Rh dGljIF9faW5saW5lX18gdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5 KQp7CglfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CglkbyB7ICggZW50cnkg KS0+bmV4dCA9ICggZW50cnkgKTsgKCBlbnRyeSApLT5wcmV2ID0gKCBlbnRyeSApOyB9IHdoaWxl ICgwKSA7IAp9CgogCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBs aXN0X2hlYWQgKmhlYWQpCnsKCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cn0KCiAKCgoKCnN0 YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwg c3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewoJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0 LT5uZXh0OwoKCWlmIChmaXJzdCAhPSBsaXN0KSB7CgkJc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9 IGxpc3QtPnByZXY7CgkJc3RydWN0IGxpc3RfaGVhZCAqYXQgPSBoZWFkLT5uZXh0OwoKCQlmaXJz dC0+cHJldiA9IGhlYWQ7CgkJaGVhZC0+bmV4dCA9IGZpcnN0OwoKCQlsYXN0LT5uZXh0ID0gYXQ7 CgkJYXQtPnByZXYgPSBsYXN0OwoJfQp9CgogCgoKCgoKCgoKIAoKCgoKCgoKICAgICAgICAJCiAK CgoKCgoKCgoKIAoKCgoKCgoKICAgICAgICAJCgoKCgojIDEyICIvaG9tZS9jYXJsb3MvQnVpbGRz L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMgoKCgoK CgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKCgoKCiMgMSAi L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu dXgvbGlua2FnZS5oIiAxCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ4ICIv aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51 eC9saW5rYWdlLmgiCgoKCiMgNjEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIKCgoKIyA1ICIvaG9tZS9jYXJsb3Mv QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIK CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2FzbS9lbnRyeS5oIiAxCgoKCgojIDE0NyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2VudHJ5LmgiCgoKIyA3ICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgi IDIKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogICB2b2lkIHJlc3VtZSh2b2lkKTsK CiMgNTEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2FzbS9zeXN0ZW0uaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfX3hjaGdfZHVtbXkgeyB1bnNp Z25lZCBsb25nIGFbMTAwXTsgfTsKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNo Zyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQp7CiAgdW5z aWduZWQgbG9uZyB0bXAsIGZsYWdzOwoKICBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoi PWQiICggIGZsYWdzICApIDogOiAibWVtb3J5IikgIDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo ICJtb3ZlICUvc3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVk MCwlL3NyXG4iIDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsKCiAgc3dpdGNoIChzaXpl KSB7CiAgY2FzZSAxOgogICAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgibW92ZWIgJTIsJTBc blx0IgogICAgICJtb3ZlYiAlMSwlMiIKICAgIDogIj0mZCIgKHRtcCkgOiAiZCIgKHgpLCAibSIg KCogKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKCBwdHIgKSkgKSA6ICJtZW1vcnki KTsKICAgIGJyZWFrOwogIGNhc2UgMjoKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIm1v dmV3ICUyLCUwXG5cdCIKICAgICAibW92ZXcgJTEsJTIiCiAgICA6ICI9JmQiICh0bXApIDogImQi ICh4KSwgIm0iICgqICgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSggcHRyICkpICkg OiAibWVtb3J5Iik7CiAgICBicmVhazsKICBjYXNlIDQ6CiAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XwogICAgKCJtb3ZlbCAlMiwlMFxuXHQiCiAgICAgIm1vdmVsICUxLCUyIgogICAgOiAiPSZkIiAo dG1wKSA6ICJkIiAoeCksICJtIiAoKiAoKHZvbGF0aWxlIHN0cnVjdCBfX3hjaGdfZHVtbXkgKiko IHB0ciApKSApIDogIm1lbW9yeSIpOwogICAgYnJlYWs7CiAgfQogIGFzbSB2b2xhdGlsZSAoIm1v dmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CiAgcmV0dXJuIHRt cDsKfQojIDE4NCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgoKCgoKIyAyMDMgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKCgojIDIxNyAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N5 c3RlbS5oIgoKCgojIDI0NSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4 LTIuNC54L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgoKCgoKCgoKCgoKCgoKIyA0ICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vYXRvbWljLmgi IDIKCgogCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7 CgoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190 ICp2KQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkibW92ZWwgJTEsJSVkMFx0XG4iCgkJImFk ZGwgJSVkMCwlMCIKCQk6CgkJOiAibSIgKCp2KSwgImlkIiAoaSkKCQk6ICJkMCIpOwp9CgpzdGF0 aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CglfX2Fz bV9fIF9fdm9sYXRpbGVfXygKCQkibW92ZWwgJTEsJSVkMFx0XG4iCgkJInN1YmwgJSVkMCwlMCIK CQk6CgkJOiAibSIgKCp2KSwgImlkIiAoaSkKCQk6ICJkMCIpOwp9CgojIDU1ICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vYXRvbWljLmgi CgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKHZvbGF0aWxlIGF0b21pY190ICp2 KQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkcWwgIzEsJTAiIDogIj1tIiAoKnYpOiAiMCIg KCp2KSk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyh2b2xhdGlsZSBhdG9t aWNfdCAqdikKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YnFsICMxLCUwIiA6ICI9bSIgKCp2 KTogIjAiICgqdikpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVz dCh2b2xhdGlsZSBhdG9taWNfdCAqdikKewoJY2hhciBjOwoJX19hc21fXyBfX3ZvbGF0aWxlX18o InN1YnFsICMxLCUxOyBzZXEgJTAiIDogIj1kIiAoYyksICI9bSIgKCp2KTogIjEiICgqdikpOwoJ cmV0dXJuIGMgIT0gMDsKfQoKCgoKCgoKIAoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBhdG9t aWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQp7Cgl1bnNpZ25lZCBsb25nIHRlbXAs IGZsYWdzOwoKCWRvIHsgYXNtIHZvbGF0aWxlICgibW92ZXcgJSVzciwlMCI6Ij1kIiAoICAgIGZs YWdzICAgICkgOiA6ICJtZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUv c3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4i IDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsgfSB3aGlsZSgwKSAgOwoJdGVtcCA9ICoo bG9uZyAqKXY7Cgl0ZW1wICs9IGk7CgkqKGxvbmcgKil2ID0gdGVtcDsKCWFzbSB2b2xhdGlsZSAo Im1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJu IHRlbXA7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwg YXRvbWljX3QgKiB2KQp7Cgl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwoKCWRvIHsgYXNtIHZv bGF0aWxlICgibW92ZXcgJSVzciwlMCI6Ij1kIiAoICAgIGZsYWdzICAgICkgOiA6ICJtZW1vcnki KSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUvc3IsJSVkMFxuXHQiICJvcmkubCAg IzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4iIDogOiA6ICJjYyIsICIlZDAiLCAi bWVtb3J5IikgIDsgfSB3aGlsZSgwKSAgOwoJdGVtcCA9ICoobG9uZyAqKXY7Cgl0ZW1wIC09IGk7 CgkqKGxvbmcgKil2ID0gdGVtcDsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQi ICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJuIHRlbXA7Cn0KCgoKCgoKCgojIDI1 ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s aW51eC9tb2R1bGUuaCIgMgoKCiAKc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeTsKCiAKc3Ry dWN0IGtlcm5lbF9zeW0KewoJdW5zaWduZWQgbG9uZyB2YWx1ZTsKCWNoYXIgbmFtZVs2MF07CQkg Cn07CgpzdHJ1Y3QgbW9kdWxlX3N5bWJvbAp7Cgl1bnNpZ25lZCBsb25nIHZhbHVlOwoJY29uc3Qg Y2hhciAqbmFtZTsKfTsKCnN0cnVjdCBtb2R1bGVfcmVmCnsKCXN0cnVjdCBtb2R1bGUgKmRlcDsJ IAoJc3RydWN0IG1vZHVsZSAqcmVmOwkgCglzdHJ1Y3QgbW9kdWxlX3JlZiAqbmV4dF9yZWY7Cn07 CgogCnN0cnVjdCBtb2R1bGVfcGVyc2lzdDsKCnN0cnVjdCBtb2R1bGUKewoJdW5zaWduZWQgbG9u ZyBzaXplX29mX3N0cnVjdDsJIAoJc3RydWN0IG1vZHVsZSAqbmV4dDsKCWNvbnN0IGNoYXIgKm5h bWU7Cgl1bnNpZ25lZCBsb25nIHNpemU7CgoJdW5pb24KCXsKCQlhdG9taWNfdCB1c2Vjb3VudDsK CQlsb25nIHBhZDsKCX0gdWM7CQkJCSAKCgl1bnNpZ25lZCBsb25nIGZsYWdzOwkJIAoKCXVuc2ln bmVkIG5zeW1zOwoJdW5zaWduZWQgbmRlcHM7CgoJc3RydWN0IG1vZHVsZV9zeW1ib2wgKnN5bXM7 CglzdHJ1Y3QgbW9kdWxlX3JlZiAqZGVwczsKCXN0cnVjdCBtb2R1bGVfcmVmICpyZWZzOwoJaW50 ICgqaW5pdCkodm9pZCk7Cgl2b2lkICgqY2xlYW51cCkodm9pZCk7Cgljb25zdCBzdHJ1Y3QgZXhj ZXB0aW9uX3RhYmxlX2VudHJ5ICpleF90YWJsZV9zdGFydDsKCWNvbnN0IHN0cnVjdCBleGNlcHRp b25fdGFibGVfZW50cnkgKmV4X3RhYmxlX2VuZDsKCgoKCSAKCgoJY29uc3Qgc3RydWN0IG1vZHVs ZV9wZXJzaXN0ICpwZXJzaXN0X3N0YXJ0OwoJY29uc3Qgc3RydWN0IG1vZHVsZV9wZXJzaXN0ICpw ZXJzaXN0X2VuZDsKCWludCAoKmNhbl91bmxvYWQpKHZvaWQpOwoJaW50IHJ1bnNpemU7CQkJIAoJ Y29uc3QgY2hhciAqa2FsbHN5bXNfc3RhcnQ7CSAKCWNvbnN0IGNoYXIgKmthbGxzeW1zX2VuZDsK CWNvbnN0IGNoYXIgKmFyY2hkYXRhX3N0YXJ0OwkgCgljb25zdCBjaGFyICphcmNoZGF0YV9lbmQ7 Cgljb25zdCBjaGFyICprZXJuZWxfZGF0YTsJIAp9OwoKc3RydWN0IG1vZHVsZV9pbmZvCnsKCXVu c2lnbmVkIGxvbmcgYWRkcjsKCXVuc2lnbmVkIGxvbmcgc2l6ZTsKCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cglsb25nIHVzZWNvdW50Owp9OwoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgoKCgoK CiAKCgoKCgoKCgkgCgogCgoKCiAKCgoKIAoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoK CgpleHRlcm4gdm9pZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qg bW9kdWxlICosIGNvbnN0IHZvaWQgKik7CmV4dGVybiB2b2lkIGludGVyX21vZHVsZV91bnJlZ2lz dGVyKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0KGNv bnN0IGNoYXIgKik7CmV4dGVybiBjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3Qo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBpbnRlcl9tb2R1bGVfcHV0 KGNvbnN0IGNoYXIgKik7CgpzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5IHsKCXN0cnVjdCBsaXN0 X2hlYWQgbGlzdDsKCWNvbnN0IGNoYXIgKmltX25hbWU7CglzdHJ1Y3QgbW9kdWxlICpvd25lcjsK CWNvbnN0IHZvaWQgKnVzZXJkYXRhOwp9OwoKZXh0ZXJuIGludCB0cnlfaW5jX21vZF9jb3VudChz dHJ1Y3QgbW9kdWxlICptb2QpOwoKCiMgMzA1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgpleHRlcm4gc3RydWN0IG1vZHVsZSAqbW9kdWxlX2xpc3Q7CgoKCgoKCgoKIAoK CgoKCgoKCiMgMzU5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoKCgoKCiMgMzk5ICIvaG9tZS9jYXJsb3MvQnVp bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoK CgoKCgoKCgoKCgoKCiMgMTIgImRyaXZlcnMvdmlkZW8vZmJjb24tY2ZiMTYuYyIgMgoKIyAxICIv aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51 eC90dHkuaCIgMQoKCgogCgoKCiAKCgoKCgoKCQkgCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKCgoKIAoK CgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p bmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExICIvaG9tZS9j YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5o IiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p bmNsdWRlL2xpbnV4L3dhaXQuaCIgMQoKCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCgoK CiAKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbTY4ay1lbGYvMi45NS4zL2luY2x1 ZGUvc3RkYXJnLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHZvaWQgKl9fZ251Y192YV9s aXN0OwoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp2b2lkIHZhX2VuZCAoX19nbnVjX3ZhX2xp c3QpOwkJIAoKCiAKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAog CgoKCgoKCgoKCgoKCgojIDE3NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9tNjhrLWVsZi8yLjk1 LjMvaW5jbHVkZS9zdGRhcmcuaCIKCgogCgoKCgogCgogCgogCgp0eXBlZGVmIF9fZ251Y192YV9s aXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTAgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAy CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9saW51eC9zdGRkZWYuaCIgMQoKCgoKCgoKCgoKCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAy CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiIDEKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMQoKCgoK CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWdu ZWQgbG9uZyBmZHNfYml0cyBbKDEwMjQgLyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkgKSBd Owp9IF9fa2VybmVsX2ZkX3NldDsKCiAKdHlwZWRlZiB2b2lkICgqX19rZXJuZWxfc2lnaGFuZGxl cl90KShpbnQpOwoKIAp0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlfdDsKCiMgMSAiL2hvbWUvY2Fy bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Bvc2l4X3R5 cGVzLmgiIDEKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9hc20tbTY4ay9wb3NpeF90eXBlcy5oIiAxCgoKCiAKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIHNob3J0CV9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJu ZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxf b2ZmX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dAlfX2tlcm5lbF9pcGNfcGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlk X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50CV9fa2VybmVsX3NpemVfdDsKdHlwZWRlZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7CnR5 cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGlt ZV90Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcJCV9f a2VybmVsX2Nsb2NrX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNo YXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91 aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7CnR5cGVkZWYg dW5zaWduZWQgaW50CV9fa2VybmVsX3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CV9fa2Vy bmVsX2dpZDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF91aWRfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZ2lkX3Q7CgoKdHlwZWRlZiBsb25n IGxvbmcJX19rZXJuZWxfbG9mZl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCglpbnQJdmFsWzJdOwoK Cgp9IF9fa2VybmVsX2ZzaWRfdDsKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3Mv QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMu aCIgMgoKIyA0NiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgoKCgojIDggIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDIKCiMg MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv YXNtL3R5cGVzLmgiIDEKCgoKIAoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90 OwoKIAoKCgoKdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIF9fdTg7Cgp0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgX191MTY7Cgp0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwp0eXBlZGVmIHVu c2lnbmVkIGludCBfX3UzMjsKCgp0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKCgogCgoKCgp0eXBlZGVmIHNpZ25lZCBj aGFyIHM4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cgp0eXBlZGVmIHNpZ25lZCBzaG9ydCBz MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwoKdHlwZWRlZiBzaWduZWQgaW50IHMzMjsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwoKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwoKCgogCgp0eXBlZGVmIHUzMiBkbWFfYWRk cl90OwoKCgoKIyA5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyCgoKCgp0eXBlZGVmIF9fa2VybmVsX2ZkX3NldAkJ ZmRfc2V0Owp0eXBlZGVmIF9fa2VybmVsX2Rldl90CQlkZXZfdDsKdHlwZWRlZiBfX2tlcm5lbF9p bm9fdAkJaW5vX3Q7CnR5cGVkZWYgX19rZXJuZWxfbW9kZV90CQltb2RlX3Q7CnR5cGVkZWYgX19r ZXJuZWxfbmxpbmtfdAlubGlua190Owp0eXBlZGVmIF9fa2VybmVsX29mZl90CQlvZmZfdDsKdHlw ZWRlZiBfX2tlcm5lbF9waWRfdAkJcGlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZGFkZHJfdAlkYWRk cl90Owp0eXBlZGVmIF9fa2VybmVsX2tleV90CQlrZXlfdDsKdHlwZWRlZiBfX2tlcm5lbF9zdXNl Y29uZHNfdAlzdXNlY29uZHNfdDsKCgp0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QJdWlkX3Q7CnR5 cGVkZWYgX19rZXJuZWxfZ2lkMzJfdAlnaWRfdDsKdHlwZWRlZiBfX2tlcm5lbF91aWQxNl90ICAg ICAgICB1aWQxNl90Owp0eXBlZGVmIF9fa2VybmVsX2dpZDE2X3QgICAgICAgIGdpZDE2X3Q7CgoK IAp0eXBlZGVmIF9fa2VybmVsX29sZF91aWRfdAlvbGRfdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxf b2xkX2dpZF90CW9sZF9naWRfdDsKCgogCgoKCgoKCgoKdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QJ CWxvZmZfdDsKCgogCgoKCgoKdHlwZWRlZiBfX2tlcm5lbF9zaXplX3QJCXNpemVfdDsKCgoKCnR5 cGVkZWYgX19rZXJuZWxfc3NpemVfdAlzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9wdHJk aWZmX3QJcHRyZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QJCXRpbWVfdDsKCgoK CnR5cGVkZWYgX19rZXJuZWxfY2xvY2tfdAljbG9ja190OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9j YWRkcl90CWNhZGRyX3Q7CgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVfY2hhcjsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydAkJdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVfaW50Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcJCXVfbG9uZzsKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1 bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQJCXVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwkJdWxvbmc7CgoKCgp0eXBlZGVmCQlfX3U4 CQl1X2ludDhfdDsKdHlwZWRlZgkJX19zOAkJaW50OF90Owp0eXBlZGVmCQlfX3UxNgkJdV9pbnQx Nl90Owp0eXBlZGVmCQlfX3MxNgkJaW50MTZfdDsKdHlwZWRlZgkJX191MzIJCXVfaW50MzJfdDsK dHlwZWRlZgkJX19zMzIJCWludDMyX3Q7CgoKCnR5cGVkZWYJCV9fdTgJCXVpbnQ4X3Q7CnR5cGVk ZWYJCV9fdTE2CQl1aW50MTZfdDsKdHlwZWRlZgkJX191MzIJCXVpbnQzMl90OwoKCnR5cGVkZWYJ CV9fdTY0CQl1aW50NjRfdDsKdHlwZWRlZgkJX191NjQJCXVfaW50NjRfdDsKdHlwZWRlZgkJX19z NjQJCWludDY0X3Q7CgoKCgogCgoKCgpzdHJ1Y3QgdXN0YXQgewoJX19rZXJuZWxfZGFkZHJfdAlm X3RmcmVlOwoJX19rZXJuZWxfaW5vX3QJCWZfdGlub2RlOwoJY2hhcgkJCWZfZm5hbWVbNl07Cglj aGFyCQkJZl9mcGFja1s2XTsKfTsKCgojIDEzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgoKCiAKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBjb21wbGV0aW9uOwoKZXh0ZXJuIHN0cnVj dCBub3RpZmllcl9ibG9jayAqcGFuaWNfbm90aWZpZXJfbGlzdDsKICB2b2lkIHBhbmljKGNvbnN0 IGNoYXIgKiBmbXQsIC4uLikKCV9fYXR0cmlidXRlX18gKChub3JldHVybiwgIGZvcm1hdCAocHJp bnRmLCAxLCAyKSkpOwogICAgIHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCglfX2F0dHJp YnV0ZV9fKChub3JldHVybikpIDsKICB2b2lkIGNvbXBsZXRlX2FuZF9leGl0KHN0cnVjdCBjb21w bGV0aW9uICosIGxvbmcpCglfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIDsKZXh0ZXJuIGludCBh YnMoaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAq LGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBj aGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNp bXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4g bG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGlu dCk7CmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICogYnVmLCBjb25zdCBjaGFyICogZm10LCAuLi4p CglfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CmV4dGVybiBpbnQgdnNw cmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IHNucHJp bnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICogZm10LCAuLi4pCglfX2F0 dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiBpbnQgdnNucHJpbnRm KGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsK CmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCglfX2F0 dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgdnNzY2FuZihjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9vcHRpb24o Y2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNoYXIgKnN0 ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1lbXBh cnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CmV4dGVybiB2b2lkIGRldl9wcm9iZV9sb2Nr KHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJuIGludCBz ZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoKICAgaW50IHByaW50ayhjb25zdCBjaGFyICogZm10 LCAuLi4pCglfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CgpleHRlcm4g aW50IGNvbnNvbGVfbG9nbGV2ZWw7CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQo dm9pZCkKewoJY29uc29sZV9sb2dsZXZlbCA9IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjb25z b2xlX3ZlcmJvc2Uodm9pZCkKewoJaWYgKGNvbnNvbGVfbG9nbGV2ZWwpCgkJY29uc29sZV9sb2ds ZXZlbCA9IDE1Owp9CgpleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsKZXh0ZXJu IGludCBvb3BzX2luX3Byb2dyZXNzOwkJIAoKZXh0ZXJuIGludCB0YWludGVkOwpleHRlcm4gY29u c3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgpzdHJ1Y3Qgc3lzaW5mbyB7Cglsb25n IHVwdGltZTsJCQkgCgl1bnNpZ25lZCBsb25nIGxvYWRzWzNdOwkJIAoJdW5zaWduZWQgbG9uZyB0 b3RhbHJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgZnJlZXJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgc2hh cmVkcmFtOwkgCgl1bnNpZ25lZCBsb25nIGJ1ZmZlcnJhbTsJIAoJdW5zaWduZWQgbG9uZyB0b3Rh bHN3YXA7CSAKCXVuc2lnbmVkIGxvbmcgZnJlZXN3YXA7CQkgCgl1bnNpZ25lZCBzaG9ydCBwcm9j czsJCSAKCXVuc2lnbmVkIHNob3J0IHBhZDsJCSAKCXVuc2lnbmVkIGxvbmcgdG90YWxoaWdoOwkg Cgl1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwkJIAoJdW5zaWduZWQgaW50IG1lbV91bml0OwkJIAoJ Y2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CSAKfTsKCgojIDEzICIvaG9t ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC93 YWl0LmgiIDIKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9hc20vcGFnZS5oIiAxCgoKCgoKIAoKCgoKCgoKIyAxICIvaG9tZS9j YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2V0dXAu aCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p bmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog ICAgIAoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21hY2h0eXBl OwoKCgoKIyA2MiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCiMgNzUgIi9ob21lL2Nhcmxvcy9CdWlsZHMv VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiCgoKCgoj IDg4ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk ZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKCgoKCgoKCgojIDEwOSAiL2hvbWUvY2FybG9zL0J1aWxk cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoK CiMgMTIyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKIyAxMzUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiCgoKCgojIDE0 OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv YXNtLW02OGsvc2V0dXAuaCIKCgoKCiMgMTYxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKIyAxNzQgIi9o b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1t NjhrL3NldHVwLmgiCgoKCgojIDE4NyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11 Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCgoKCgoKICAgICAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB1bnNp Z25lZCBsb25nIG02OGtfY3B1dHlwZTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19mcHV0eXBl OwpleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7CQkgCgoKCgogICAgIAoKCgoKZXh0 ZXJuIGludCBtNjhrX2lzMDQwb3IwNjA7CgoKCgoKCiMgMjc5ICIvaG9tZS9jYXJsb3MvQnVpbGRz L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMjcgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgi CgoKCgojIDMzOSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCgoKCgoKCgoKCgoKICAgICAKCgoKCgoKCmV4 dGVybiBpbnQgbTY4a19udW1fbWVtb3J5OwkJIApleHRlcm4gaW50IG02OGtfcmVhbG51bV9tZW1v cnk7CQkgCmV4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbNCBdOyAKCnN0cnVjdCBt ZW1faW5mbyB7Cgl1bnNpZ25lZCBsb25nIGFkZHI7CQkgCgl1bnNpZ25lZCBsb25nIHNpemU7CQkg Cn07CgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9hc20vc2V0dXAuaCIgMgoKIyAxNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMgoKCgoKCgoKIAoKIAoK CgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsK dHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZFsxNl07IH0gcG1kX3Q7CnR5cGVkZWYg c3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5z aWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CgoKCgoKCgoKCgoKIAoKCiAKZXh0ZXJuIF9f aW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCnsKCWludCBvcmRlcjsK CglzaXplID0gKHNpemUtMSkgPj4gKCgxMikgLTEpOwoJb3JkZXIgPSAtMTsKCWRvIHsKCQlzaXpl ID4+PSAxOwoJCW9yZGVyKys7Cgl9IHdoaWxlIChzaXplKTsKCXJldHVybiBvcmRlcjsKfQoKCgoj IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl L2FzbS9wYWdlX29mZnNldC5oIiAxCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2hnbGNvcmUuaCIgMQoKIAoKCgoKCgoKIyA2 MyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv YXNtL3NoZ2xjb3JlLmgiCgoKCiMgMyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11 Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgiIDIKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDcwICIvaG9tZS9jYXJsb3MvQnVp bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcGFnZS5oIiAyCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMTkgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgoK CgogCgoKCgoKCgoKc3RydWN0IF9fd2FpdF9xdWV1ZSB7Cgl1bnNpZ25lZCBpbnQgZmxhZ3M7CgoJ c3RydWN0IHRhc2tfc3RydWN0ICogdGFzazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoK CgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHdhaXRfcXVldWVfdDsKCiAKCgoKCgoK CiMgNjMgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2xpbnV4L3dhaXQuaCIKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQg ewoJc3BpbmxvY2tfdCAgbG9jazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoKCgoKfTsK dHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQgd2FpdF9xdWV1ZV9oZWFkX3Q7CgoKIAoK CgojIDExOSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu Y2x1ZGUvbGludXgvd2FpdC5oIgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK c3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3Qg KnEpCnsKCgoKCglxLT5sb2NrID0gKHNwaW5sb2NrX3QpIHsgMCB9ICA7CglkbyB7ICggJnEtPnRh c2tfbGlzdCApLT5uZXh0ID0gKCAmcS0+dGFza19saXN0ICk7ICggJnEtPnRhc2tfbGlzdCApLT5w cmV2ID0gKCAmcS0+dGFza19saXN0ICk7IH0gd2hpbGUgKDApIDsKCgoKCn0KCnN0YXRpYyBpbmxp bmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9lbnRyeSh3YWl0X3F1ZXVlX3QgKnEsIHN0cnVjdCB0YXNr X3N0cnVjdCAqcCkKewoKCgoKCXEtPmZsYWdzID0gMDsKCXEtPnRhc2sgPSBwOwoKCgp9CgpzdGF0 aWMgaW5saW5lIGludCB3YWl0cXVldWVfYWN0aXZlKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoK CgoKCglyZXR1cm4gIWxpc3RfZW1wdHkoJnEtPnRhc2tfbGlzdCk7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCBfX2FkZF93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpoZWFkLCB3YWl0X3F1ZXVl X3QgKm5ldykKewoKCgoKCgoKCglsaXN0X2FkZCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNr X2xpc3QpOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX3dhaXRfcXVldWVfdGFpbCh3 YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwKCQkJCQkJd2FpdF9xdWV1ZV90ICpuZXcpCnsKCgoKCgoK CgoJbGlzdF9hZGRfdGFpbCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNrX2xpc3QpOwp9Cgpz dGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAq aGVhZCwKCQkJCQkJCXdhaXRfcXVldWVfdCAqb2xkKQp7CgoKCgoKCWxpc3RfZGVsKCZvbGQtPnRh c2tfbGlzdCk7Cn0KCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAxCgoKCiMg MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv YXNtL3N0YXRmcy5oIiAxCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp bnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc3RhdGZzLmgiIDEKCgoKCgoKCnR5cGVkZWYgX19r ZXJuZWxfZnNpZF90CWZzaWRfdDsKCgoKc3RydWN0IHN0YXRmcyB7Cglsb25nIGZfdHlwZTsKCWxv bmcgZl9ic2l6ZTsKCWxvbmcgZl9ibG9ja3M7Cglsb25nIGZfYmZyZWU7Cglsb25nIGZfYmF2YWls OwoJbG9uZyBmX2ZpbGVzOwoJbG9uZyBmX2ZmcmVlOwoJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsK CWxvbmcgZl9uYW1lbGVuOwoJbG9uZyBmX3NwYXJlWzZdOwp9OwoKCiMgMSAiL2hvbWUvY2FybG9z L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAy CgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2xpbnV4L3Zmcy5oIiAyCgoKCiMgMTQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbmV0LmgiIDEK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKCgoKCgojIDEgIi9ob21l L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zb2Nr ZXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2FzbS1tNjhrL3NvY2tldC5oIiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxk cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMQojIDEg Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz bS1tNjhrL3NvY2tpb3MuaCIgMQoKCgogCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRz L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAyCgojIDQg Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz bS1tNjhrL3NvY2tldC5oIiAyCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgog CgoKCgoKCgoKCiAKCiAKCgoKCgoKCQkJCQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgoKCgojIDEg Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz bS9zb2NrZXQuaCIgMgoKIyA2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NraW9zLmgiIDEK IAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs LXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxCgojIDIxICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NraW9z LmgiIDIKCgogCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoJCSAgICAgCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgogCgoKCgoK CgoJCQkKIAoKIAoKCgoKCgoKIAoKCiAKCgogCgoKIyA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKIyAxICIv aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51 eC91aW8uaCIgMQoKCgoKCiAKCgoKCgoKCgoKIAoKCnN0cnVjdCBpb3ZlYwp7Cgl2b2lkICppb3Zf YmFzZTsJCSAKCV9fa2VybmVsX3NpemVfdCBpb3ZfbGVuOyAgCn07CgogCgoKIAoKCgoKCgoKCgoj IDggIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl L2xpbnV4L3NvY2tldC5oIiAyCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJc2FfZmFtaWx5X3Q7 CgogCgoKIApzdHJ1Y3Qgc29ja2FkZHIgewoJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OwkgCgljaGFy CQlzYV9kYXRhWzE0XTsJIAp9OwoKc3RydWN0IGxpbmdlciB7CglpbnQJCWxfb25vZmY7CSAKCWlu dAkJbF9saW5nZXI7CSAKfTsKCiAKCgoKCiAKc3RydWN0IG1zZ2hkciB7Cgl2b2lkCSoJbXNnX25h bWU7CSAKCWludAkJbXNnX25hbWVsZW47CSAKCXN0cnVjdCBpb3ZlYyAqCW1zZ19pb3Y7CSAKCV9f a2VybmVsX3NpemVfdAltc2dfaW92bGVuOwkgCgl2b2lkIAkqCW1zZ19jb250cm9sOwkgCglfX2tl cm5lbF9zaXplX3QJbXNnX2NvbnRyb2xsZW47CSAKCXVuc2lnbmVkCW1zZ19mbGFnczsKfTsKCiAK CgoKCgpzdHJ1Y3QgY21zZ2hkciB7CglfX2tlcm5lbF9zaXplX3QJY21zZ19sZW47CSAKICAgICAg ICBpbnQJCWNtc2dfbGV2ZWw7CSAKICAgICAgICBpbnQJCWNtc2dfdHlwZTsJIAp9OwoKIAoKCgoK CgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCnN0YXRpYyBpbmxp bmUgIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxf c2l6ZV90IF9fc2l6ZSwKCQkJCQkgICAgICAgc3RydWN0IGNtc2doZHIgKl9fY21zZykKewoJc3Ry dWN0IGNtc2doZHIgKiBfX3B0cjsKCglfX3B0ciA9IChzdHJ1Y3QgY21zZ2hkciopKCgodW5zaWdu ZWQgY2hhciAqKSBfX2Ntc2cpICsgICggKCggX19jbXNnLT5jbXNnX2xlbiApK3NpemVvZihsb25n KS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpICkgKTsKCWlmICgodW5zaWduZWQgbG9uZykoKGNoYXIq KShfX3B0cisxKSAtIChjaGFyICopIF9fY3RsKSA+IF9fc2l6ZSkKCQlyZXR1cm4gKHN0cnVjdCBj bXNnaGRyICopMDsKCglyZXR1cm4gX19wdHI7Cn0KCnN0YXRpYyBpbmxpbmUgIHN0cnVjdCBjbXNn aGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbXNnLCBzdHJ1Y3QgY21zZ2hkciAq X19jbXNnKQp7CglyZXR1cm4gX19jbXNnX254dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNn LT5tc2dfY29udHJvbGxlbiwgX19jbXNnKTsKfQoKIAoKCgoKCnN0cnVjdCB1Y3JlZCB7CglfX3Uz MglwaWQ7CglfX3UzMgl1aWQ7CglfX3UzMglnaWQ7Cn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50 IG1lbWNweV9mcm9taW92ZWModW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92 LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIg KmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCgkJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKZXh0 ZXJuIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2Rh dGEsIAoJCQkJCSAgc3RydWN0IGlvdmVjICppb3YsIAoJCQkJCSAgaW50IG9mZnNldCwgCgkJCQkJ ICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgKmNzdW1wKTsKCmV4dGVybiBpbnQgdmVyaWZ5X2lvdmVj KHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNzLCBpbnQg bW9kZSk7CmV4dGVybiBpbnQgbWVtY3B5X3RvaW92ZWMoc3RydWN0IGlvdmVjICp2LCB1bnNpZ25l ZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVybiB2b2lkIG1lbWNweV90b2tlcm5lbGlvdmVj KHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVy biBpbnQgbW92ZV9hZGRyX3RvX3VzZXIodm9pZCAqa2FkZHIsIGludCBrbGVuLCB2b2lkICp1YWRk ciwgaW50ICp1bGVuKTsKZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQgKnVhZGRy LCBpbnQgdWxlbiwgdm9pZCAqa2FkZHIpOwpleHRlcm4gaW50IHB1dF9jbXNnKHN0cnVjdCBtc2do ZHIqLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKCgoKIyAyMiAi L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu dXgvbmV0LmgiIDIKCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCnR5cGVkZWYgZW51bSB7CiAgU1NfRlJFRSA9IDAsCQkJCSAKICBTU19VTkNPTk5FQ1RF RCwJCQkgCiAgU1NfQ09OTkVDVElORywJCQkgCiAgU1NfQ09OTkVDVEVELAkJCQkgCiAgU1NfRElT Q09OTkVDVElORwkJCSAKfSBzb2NrZXRfc3RhdGU7CgoKCgoKCgoKCnN0cnVjdCBzb2NrZXQKewoJ c29ja2V0X3N0YXRlCQlzdGF0ZTsKCgl1bnNpZ25lZCBsb25nCQlmbGFnczsKCXN0cnVjdCBwcm90 b19vcHMJKm9wczsKCXN0cnVjdCBpbm9kZQkJKmlub2RlOwoJc3RydWN0IGZhc3luY19zdHJ1Y3QJ KmZhc3luY19saXN0OwkgCglzdHJ1Y3QgZmlsZQkJKmZpbGU7CQkgCglzdHJ1Y3Qgc29jawkJKnNr OwoJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKCglzaG9ydAkJCXR5cGU7Cgl1bnNpZ25lZCBjaGFy CQlwYXNzY3JlZDsKfTsKCgoKc3RydWN0IHNjbV9jb29raWU7CnN0cnVjdCB2bV9hcmVhX3N0cnVj dDsKc3RydWN0IHBhZ2U7CgpzdHJ1Y3QgcHJvdG9fb3BzIHsKICBpbnQJZmFtaWx5OwoKICBpbnQJ KCpyZWxlYXNlKQkoc3RydWN0IHNvY2tldCAqc29jayk7CiAgaW50CSgqYmluZCkJCShzdHJ1Y3Qg c29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVteWFkZHIsCgkJCSBpbnQgc29ja2FkZHJf bGVuKTsKICBpbnQJKCpjb25uZWN0KQkoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2th ZGRyICp1c2VydmFkZHIsCgkJCSBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpOwogIGludAko KnNvY2tldHBhaXIpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrMSwgc3RydWN0IHNvY2tldCAqc29jazIp OwogIGludAkoKmFjY2VwdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5l d3NvY2ssCgkJCSBpbnQgZmxhZ3MpOwogIGludAkoKmdldG5hbWUpCShzdHJ1Y3Qgc29ja2V0ICpz b2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAoJCQkgaW50ICp1c29ja2FkZHJfbGVuLCBpbnQg cGVlcik7CiAgdW5zaWduZWQgaW50ICgqcG9sbCkJKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qg c29ja2V0ICpzb2NrLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogIGludAkoKmlv Y3RsKQkoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKCQkJIHVuc2lnbmVk IGxvbmcgYXJnKTsKICBpbnQJKCpsaXN0ZW4pCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVu KTsKICBpbnQJKCpzaHV0ZG93bikJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAg aW50CSgqc2V0c29ja29wdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9w dG5hbWUsCgkJCSBjaGFyICpvcHR2YWwsIGludCBvcHRsZW4pOwogIGludAkoKmdldHNvY2tvcHQp CShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAoJCQkgY2hhciAq b3B0dmFsLCBpbnQgKm9wdGxlbik7CiAgaW50ICAgKCpzZW5kbXNnKQkoc3RydWN0IHNvY2tldCAq c29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgc3RydWN0IHNjbV9jb29raWUg KnNjbSk7CiAgaW50ICAgKCpyZWN2bXNnKQkoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1z Z2hkciAqbSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2Nt KTsKICBpbnQJKCptbWFwKQkJKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2Nr LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwogIHNzaXplX3QgKCpzZW5kcGFnZSkJKHN0 cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LCBzaXplX3Qg c2l6ZSwgaW50IGZsYWdzKTsKfTsKCnN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IAp7CglpbnQJZmFt aWx5OwoJaW50CSgqY3JlYXRlKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpOwoJ IAoKCXNob3J0CWF1dGhlbnRpY2F0aW9uOwoJc2hvcnQJZW5jcnlwdGlvbjsKCXNob3J0CWVuY3J5 cHRfbmV0Owp9OwoKc3RydWN0IG5ldF9wcm90byAKewoJY29uc3QgY2hhciAqbmFtZTsJCSAKCXZv aWQgKCppbml0X2Z1bmMpKHN0cnVjdCBuZXRfcHJvdG8gKik7CSAKfTsKCmV4dGVybiBpbnQJc29j a193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CmV4dGVy biBpbnQJc29ja19yZWdpc3RlcihzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKZXh0ZXJu IGludAlzb2NrX3VucmVnaXN0ZXIoaW50IGZhbWlseSk7CmV4dGVybiBzdHJ1Y3Qgc29ja2V0ICpz b2NrX2FsbG9jKHZvaWQpOwpleHRlcm4gaW50CXNvY2tfY3JlYXRlKGludCBmYW1pbHksIGludCB0 eXBlLCBpbnQgcHJvdG8sIHN0cnVjdCBzb2NrZXQgKiopOwpleHRlcm4gdm9pZAlzb2NrX3JlbGVh c2Uoc3RydWN0IHNvY2tldCAqKTsKZXh0ZXJuIGludCAgIAlzb2NrX3NlbmRtc2coc3RydWN0IHNv Y2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuKTsKZXh0ZXJuIGludAlzb2NrX3JlY3Zt c2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuLCBpbnQgZmxhZ3Mp OwpleHRlcm4gaW50CXNvY2tfcmVhZHZfd3JpdGV2KGludCB0eXBlLCBzdHJ1Y3QgaW5vZGUgKiBp bm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAoJCQkJICBjb25zdCBzdHJ1Y3QgaW92ZWMgKiBpb3Ys IGxvbmcgY291bnQsIGxvbmcgc2l6ZSk7CgpleHRlcm4gaW50CW5ldF9yYXRlbGltaXQodm9pZCk7 CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldF9yYW5kb20odm9pZCk7CmV4dGVybiB2b2lkIG5ldF9z cmFuZG9tKHVuc2lnbmVkIGxvbmcpOwoKCgoKIyAyMjQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25ldC5oIgoKCgoKCiMgMTUgIi9o b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu NC54L2luY2x1ZGUvbGludXgva2Rldl90LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGtkZXZfdDsKCgoKCgoKCgpleHRlcm4gY29uc3QgY2hhciAqIGtkZXZuYW1lKGtkZXZf dCk7CSAKCiAKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtkZXZfdF90b19ucihrZGV2 X3QgZGV2KSB7CglyZXR1cm4gKCgodW5zaWduZWQgaW50KSAoKCBkZXYgKSA+PiA4ICkpIDw8OCkg fCAoKHVuc2lnbmVkIGludCkgKCggZGV2ICkgJiAoKDFVIDw8IDggKSAtIDEpICkpIDsKfQoKc3Rh dGljIGlubGluZSBrZGV2X3QgdG9fa2Rldl90KGludCBkZXYpCnsKCWludCBtYWpvciwgbWlub3I7 CgoKCgoKCgoKCW1ham9yID0gKGRldiA+PiA4KTsKCW1pbm9yID0gKGRldiAmIDB4ZmYpOwoKCXJl dHVybiAoKCggbWFqb3IgKSA8PCA4ICkgfCAoICBtaW5vciApKSA7Cn0KCiMgMTEzICIvaG9tZS9j YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9rZGV2 X3QuaCIKCgojIDE2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDEKCgoKIyAxICIvaG9t ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vaW9j dGwuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2FzbS1tNjhrL2lvY3RsLmgiIDEKIAoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoK CgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu Y2x1ZGUvYXNtL2lvY3RsLmgiIDIKCiMgNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvaW9jdGwuaCIgMgoKCgoKIyAxNyAiL2hvbWUv Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMu aCIgMgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDEKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRz L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiAKCgoK CgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdmZzbW91bnQKewoJc3RydWN0IGxpc3RfaGVhZCBtbnRfaGFz aDsKCXN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudDsJIAoJc3RydWN0IGRlbnRyeSAqbW50X21v dW50cG9pbnQ7CSAKCXN0cnVjdCBkZW50cnkgKm1udF9yb290OwkgCglzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKm1udF9zYjsJIAoJc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwkgCglzdHJ1Y3QgbGlz dF9oZWFkIG1udF9jaGlsZDsJIAoJYXRvbWljX3QgbW50X2NvdW50OwoJaW50IG1udF9mbGFnczsK CWNoYXIgKm1udF9kZXZuYW1lOwkJIAoJc3RydWN0IGxpc3RfaGVhZCBtbnRfbGlzdDsKfTsKCnN0 YXRpYyBpbmxpbmUgc3RydWN0IHZmc21vdW50ICptbnRnZXQoc3RydWN0IHZmc21vdW50ICptbnQp CnsKCWlmIChtbnQpCgkJYXRvbWljX2luYygmbW50LT5tbnRfY291bnQpOwoJcmV0dXJuIG1udDsK fQoKZXh0ZXJuIHZvaWQgX19tbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpOwoKc3RhdGljIGlu bGluZSB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKewoJaWYgKG1udCkgewoJCWlm ICgoYXRvbWljX3N1Yl9yZXR1cm4oMSwgKCAmbW50LT5tbnRfY291bnQgKSkgPT0gMCkgKQoJCQlf X21udHB1dChtbnQpOwoJfQp9CgoKCiMgNyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDIKCgogCgoKCgoKCgoKCgog CgoKCnN0cnVjdCBxc3RyIHsKCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lOwoJdW5zaWduZWQg aW50IGxlbjsKCXVuc2lnbmVkIGludCBoYXNoOwp9OwoKc3RydWN0IGRlbnRyeV9zdGF0X3QgewoJ aW50IG5yX2RlbnRyeTsKCWludCBucl91bnVzZWQ7CglpbnQgYWdlX2xpbWl0OyAgICAgICAgICAg CglpbnQgd2FudF9wYWdlczsgICAgICAgICAgCglpbnQgZHVtbXlbMl07Cn07CmV4dGVybiBzdHJ1 Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3RhdDsKCiAKIAoKCiAKc3RhdGljIF9faW5saW5lX18g dW5zaWduZWQgbG9uZyBwYXJ0aWFsX25hbWVfaGFzaCh1bnNpZ25lZCBsb25nIGMsIHVuc2lnbmVk IGxvbmcgcHJldmhhc2gpCnsKCXJldHVybiAocHJldmhhc2ggKyAoYyA8PCA0KSArIChjID4+IDQp KSAqIDExOwp9CgogCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZW5kX25hbWVfaGFz aCh1bnNpZ25lZCBsb25nIGhhc2gpCnsKCXJldHVybiAodW5zaWduZWQgaW50KSBoYXNoOwp9Cgog CnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBmdWxsX25hbWVfaGFzaChjb25zdCB1bnNp Z25lZCBjaGFyICogbmFtZSwgdW5zaWduZWQgaW50IGxlbikKewoJdW5zaWduZWQgbG9uZyBoYXNo ID0gMCA7Cgl3aGlsZSAobGVuLS0pCgkJaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNoKCpuYW1lKyss IGhhc2gpOwoJcmV0dXJuIGVuZF9uYW1lX2hhc2goaGFzaCk7Cn0KCgoKc3RydWN0IGRlbnRyeSB7 CglhdG9taWNfdCBkX2NvdW50OwoJdW5zaWduZWQgaW50IGRfZmxhZ3M7CglzdHJ1Y3QgaW5vZGUg ICogZF9pbm9kZTsJIAoJc3RydWN0IGRlbnRyeSAqIGRfcGFyZW50OwkgCglzdHJ1Y3QgbGlzdF9o ZWFkIGRfaGFzaDsJIAoJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCSAKCXN0cnVjdCBsaXN0X2hl YWQgZF9jaGlsZDsJIAoJc3RydWN0IGxpc3RfaGVhZCBkX3N1YmRpcnM7CSAKCXN0cnVjdCBsaXN0 X2hlYWQgZF9hbGlhczsJIAoJaW50IGRfbW91bnRlZDsKCXN0cnVjdCBxc3RyIGRfbmFtZTsKCXVu c2lnbmVkIGxvbmcgZF90aW1lOwkJIAoJc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICAqZF9vcDsK CXN0cnVjdCBzdXBlcl9ibG9jayAqIGRfc2I7CSAKCXVuc2lnbmVkIGxvbmcgZF92ZnNfZmxhZ3M7 Cgl2b2lkICogZF9mc2RhdGE7CQkgCgl1bnNpZ25lZCBjaGFyIGRfaW5hbWVbMTYgXTsgIAp9OwoK c3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHsKCWludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRl bnRyeSAqLCBpbnQpOwoJaW50ICgqZF9oYXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0 ciAqKTsKCWludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwg c3RydWN0IHFzdHIgKik7CglpbnQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKCXZvaWQg KCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7Cgl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKfTsKCiAKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKZXh0ZXJuIHNwaW5sb2NrX3QgZGNhY2hlX2xvY2s7CgogCgoKCgoKCgoKCgoKCgoKCgpz dGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfZHJvcChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQp7Cgko dm9pZCkoICZkY2FjaGVfbG9jayApIDsKCWxpc3RfZGVsKCZkZW50cnktPmRfaGFzaCk7CglkbyB7 ICggJmRlbnRyeS0+ZF9oYXNoICktPm5leHQgPSAoICZkZW50cnktPmRfaGFzaCApOyAoICZkZW50 cnktPmRfaGFzaCApLT5wcmV2ID0gKCAmZGVudHJ5LT5kX2hhc2ggKTsgfSB3aGlsZSAoMCkgOwoJ ZG8geyB9IHdoaWxlKDApIDsKfQoKc3RhdGljIF9faW5saW5lX18gaW50IGRuYW1lX2V4dGVybmFs KHN0cnVjdCBkZW50cnkgKmQpCnsKCXJldHVybiBkLT5kX25hbWUubmFtZSAhPSBkLT5kX2luYW1l OyAKfQoKIAoKCmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1 Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CgogCmV4 dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVj dCBxc3RyICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9j ayAqKTsKZXh0ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsK ZXh0ZXJuIGludCBkX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqKTsKCgpzdHJ1Y3Qgem9uZV9z dHJ1Y3Q7CiAKZXh0ZXJuIGludCBzaHJpbmtfZGNhY2hlX21lbW9yeShpbnQsIHVuc2lnbmVkIGlu dCk7CmV4dGVybiB2b2lkIHBydW5lX2RjYWNoZShpbnQpOwoKIApleHRlcm4gaW50IHNocmlua19p Y2FjaGVfbWVtb3J5KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfaWNhY2hlKGludCk7Cgog CmV4dGVybiBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKCiAK ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3Jvb3Qoc3RydWN0IGlub2RlICopOwoKIApl eHRlcm4gdm9pZCBkX2dlbm9jaWRlKHN0cnVjdCBkZW50cnkgKik7CgpleHRlcm4gc3RydWN0IGRl bnRyeSAqZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZF9wcnVuZV9h bGlhc2VzKHN0cnVjdCBpbm9kZSAqKTsKCiAKZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50cyhzdHJ1 Y3QgZGVudHJ5ICopOwoKIAoKCmV4dGVybiB2b2lkIGRfcmVoYXNoKHN0cnVjdCBkZW50cnkgKik7 CgogCgoKCgoKCgogCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgZF9hZGQoc3RydWN0IGRlbnRyeSAq IGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewoJZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5v ZGUpOwoJZF9yZWhhc2goZW50cnkpOwp9CgogCmV4dGVybiB2b2lkIGRfbW92ZShzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CgogCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29r dXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKCiAKZXh0ZXJuIGludCBkX3ZhbGlk YXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKCmV4dGVybiBjaGFyICogX19k X3BhdGgoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAq LAoJc3RydWN0IHZmc21vdW50ICosIGNoYXIgKiwgaW50KTsKICAKIAoKIAoKCgoKCgoKCgoKCiAK c3RhdGljIF9faW5saW5lX18gc3RydWN0IGRlbnRyeSAqIGRnZXQoc3RydWN0IGRlbnRyeSAqZGVu dHJ5KQp7CglpZiAoZGVudHJ5KSB7CgkJaWYgKCEgKCggJmRlbnRyeS0+ZF9jb3VudCApLT5jb3Vu dGVyKSApCgkJCWRvIHsgIDsgcGFuaWMoIkJVRyEiKSA7IH0gd2hpbGUgKDApIDsKCQlhdG9taWNf aW5jKCZkZW50cnktPmRfY291bnQpOwoJfQoJcmV0dXJuIGRlbnRyeTsKfQoKZXh0ZXJuIHN0cnVj dCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICopOwoKIAoKCgoKCiAKc3RhdGlj IF9faW5saW5lX18gaW50IGRfdW5oYXNoZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CglyZXR1 cm4gbGlzdF9lbXB0eSgmZGVudHJ5LT5kX2hhc2gpOwp9CgpleHRlcm4gdm9pZCBkcHV0KHN0cnVj dCBkZW50cnkgKik7CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZF9tb3VudHBvaW50KHN0cnVjdCBk ZW50cnkgKmRlbnRyeSkKewoJcmV0dXJuIGRlbnRyeS0+ZF9tb3VudGVkOwp9CgpleHRlcm4gc3Ry dWN0IHZmc21vdW50ICpsb29rdXBfbW50KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5 ICopOwoKCgojIDE5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMQoKCgoKCiMgMSAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N0 YXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2FzbS1tNjhrL3N0YXQuaCIgMQoKCgpzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQg ewoJdW5zaWduZWQgc2hvcnQgc3RfZGV2OwoJdW5zaWduZWQgc2hvcnQgc3RfaW5vOwoJdW5zaWdu ZWQgc2hvcnQgc3RfbW9kZTsKCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOwoJdW5zaWduZWQgc2hv cnQgc3RfdWlkOwoJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwoJdW5zaWduZWQgc2hvcnQgc3RfcmRl djsKCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Cgl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKCXVu c2lnbmVkIGxvbmcgIHN0X210aW1lOwoJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cn07CgpzdHJ1 Y3Qgc3RhdCB7Cgl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7 Cgl1bnNpZ25lZCBsb25nIHN0X2lubzsKCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7Cgl1bnNpZ25l ZCBzaG9ydCBzdF9ubGluazsKCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKCXVuc2lnbmVkIHNob3J0 IHN0X2dpZDsKCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7 Cgl1bnNpZ25lZCBsb25nICBzdF9zaXplOwoJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKCXVu c2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOwoJdW5zaWdu ZWQgbG9uZyAgX191bnVzZWQxOwoJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Cgl1bnNpZ25lZCBs b25nICBfX3VudXNlZDI7Cgl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKCXVuc2lnbmVkIGxvbmcg IF9fdW51c2VkMzsKCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKCXVuc2lnbmVkIGxvbmcgIF9f dW51c2VkNTsKfTsKCiAKCgpzdHJ1Y3Qgc3RhdDY0IHsKCXVuc2lnbmVkIGNoYXIJX19wYWQwWzZd OwoJdW5zaWduZWQgc2hvcnQJc3RfZGV2OwoJdW5zaWduZWQgY2hhcglfX3BhZDFbMl07CgoKCXVu c2lnbmVkIGxvbmcJX19zdF9pbm87CgoJdW5zaWduZWQgaW50CXN0X21vZGU7Cgl1bnNpZ25lZCBp bnQJc3Rfbmxpbms7CgoJdW5zaWduZWQgbG9uZwlzdF91aWQ7Cgl1bnNpZ25lZCBsb25nCXN0X2dp ZDsKCgl1bnNpZ25lZCBjaGFyCV9fcGFkMls2XTsKCXVuc2lnbmVkIHNob3J0CXN0X3JkZXY7Cgl1 bnNpZ25lZCBjaGFyCV9fcGFkM1syXTsKCglsb25nIGxvbmcJc3Rfc2l6ZTsKCXVuc2lnbmVkIGxv bmcJc3RfYmxrc2l6ZTsKCgl1bnNpZ25lZCBsb25nCV9fcGFkNDsJCSAKCXVuc2lnbmVkIGxvbmcJ c3RfYmxvY2tzOwkgCgoJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKCXVuc2lnbmVkIGxvbmcJX19w YWQ1OwoKCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7Cgl1bnNpZ25lZCBsb25nCV9fcGFkNjsKCgl1 bnNpZ25lZCBsb25nCXN0X2N0aW1lOwoJdW5zaWduZWQgbG9uZwlfX3BhZDc7CQkgCgoJdW5zaWdu ZWQgbG9uZyBsb25nCXN0X2lubzsKfTsKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdGF0LmgiIDIKCiMgNiAiL2hvbWUvY2Fy bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc3RhdC5o IiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj IDIwICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk ZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgojIDM1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv aW5jbHVkZS9saW51eC9jYWNoZS5oIgoKCgoKCgoKCgoKCiMgMjEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEg Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xp bnV4L3N0cmluZy5oIiAxCgoKCiAKCgoKCgoKCgoKCgogCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3RyaW5nLmgiIDEKCgoK CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2FzbS9zZXR1cC5oIiAxCgojIDYgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wt dWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIgMgoKCgoKc3RhdGljIGlubGluZSBj aGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKewogIGNoYXIgKnhkZXN0 ID0gZGVzdDsKCiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICAgICgiMTpcdG1vdmViICUxQCss JTBAK1xuXHQiCiAgICAgICAgImpuZSAxYiIKCTogIj1hIiAoZGVzdCksICI9YSIgKHNyYykKICAg ICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSA6ICJtZW1vcnkiKTsKICByZXR1cm4geGRlc3Q7 Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIg KnNyYywgc2l6ZV90IG4pCnsKICBjaGFyICp4ZGVzdCA9IGRlc3Q7CgogIGlmIChuID09IDApCiAg ICByZXR1cm4geGRlc3Q7CgogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICAoIjE6XHRtb3Zl YiAlMUArLCUwQCtcblx0IgoJImplcSAyZlxuXHQiCiAgICAgICAgInN1YnFsICMxLCUyXG5cdCIK ICAgICAgICAiam5lIDFiXG5cdCIKICAgICAgICAiMjoiCiAgICAgICAgOiAiPWEiIChkZXN0KSwg Ij1hIiAoc3JjKSwgIj1kIiAobikKICAgICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSwgIjIi IChuKQogICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiB4ZGVzdDsKfQoKCiMgODkgIi9ob21l L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdHJp bmcuaCIKCgoKZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqIHMsIGludCBjLCBzaXplX3QgY291 bnQpOwoKCmV4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVf dCBjb3VudCk7CgojIDEyNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4 LTIuNC54L2luY2x1ZGUvYXNtL3N0cmluZy5oIgoKCgojIDE5ICIvaG9tZS9jYXJsb3MvQnVpbGRz L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMgoKCgpl eHRlcm4gY2hhciAqIF9fX3N0cnRvazsKZXh0ZXJuIGNoYXIgKiBzdHJwYnJrKGNvbnN0IGNoYXIg Kixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cnRvayhjaGFyICosY29uc3QgY2hhciAq KTsKZXh0ZXJuIGNoYXIgKiBzdHJzZXAoY2hhciAqKixjb25zdCBjaGFyICopOwpleHRlcm4gX19r ZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKCgoKCgoKCgoK ZXh0ZXJuIGNoYXIgKiBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwoKCmV4dGVybiBjaGFy ICogc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKCgpleHRl cm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IHN0 cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVy biBpbnQgc3RybmljbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVf dCk7CgoKZXh0ZXJuIGNoYXIgKiBzdHJjaHIoY29uc3QgY2hhciAqLGludCk7CgoKZXh0ZXJuIGNo YXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOwoKCmV4dGVybiBjaGFyICogc3Ryc3RyKGNv bnN0IGNoYXIgKixjb25zdCBjaGFyICopOwoKCmV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RybGVu KGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJubGVuKGNvbnN0IGNo YXIgKixfX2tlcm5lbF9zaXplX3QpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbW1vdmUodm9p ZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVybiB2b2lkICogbWVtc2Nh bih2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CgoKZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qg dm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVybiB2b2lkICogbWVt Y2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKCgoKCgoKCgojIDIzICIvaG9t ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9m cy5oIiAyCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu NC54L2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAxCgoKCiAKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1 aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAx CgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y LjQueC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgiIDEKCgoKCgoKCgoKCiMg MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv bGludXgvYnl0ZW9yZGVyL3N3YWIuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK IyAzOCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1 ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIKCgojIDUyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgoK CgoKCgoKCgoKCgojIDczICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt Mi40LngvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdGF0aWMgX19pbmxpbmVf XyBfX2NvbnN0X18gX191MTYgX19mc3dhYjE2KF9fdTE2IHgpCnsKCXJldHVybiAoeyBfX3UxNiBf X3RtcCA9ICggeCApIDsgKHsgX191MTYgX194ID0gKCBfX3RtcCApOyAoKF9fdTE2KSggKCgoX191 MTYpKF9feCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3Ux NikweGZmMDBVKSA+PiA4KSApKTsgfSkgOyB9KSA7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MTYg X19zd2FiMTZwKF9fdTE2ICp4KQp7CglyZXR1cm4gKHsgX191MTYgX190bXAgPSAoICooIHggKSAp IDsgKHsgX191MTYgX194ID0gKCBfX3RtcCApOyAoKF9fdTE2KSggKCgoX191MTYpKF9feCkgJiAo X191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+ PiA4KSApKTsgfSkgOyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMTZzKF9f dTE2ICphZGRyKQp7CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTE2IF9fdG1wID0gKCAqKCAoIGFk ZHIgKSApICkgOyAoeyBfX3UxNiBfX3ggPSAoIF9fdG1wICk7ICgoX191MTYpKCAoKChfX3UxNiko X194KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8ICgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4 ZmYwMFUpID4+IDgpICkpOyB9KSA7IH0pICA7IH0gd2hpbGUgKDApIDsKfQoKc3RhdGljIF9faW5s aW5lX18gX19jb25zdF9fIF9fdTMyIF9fZnN3YWIzMihfX3UzMiB4KQp7CglyZXR1cm4gKHsgX191 MzIgX190bXAgPSAoIHggKSA7ICh7IF9fdTMyIF9feCA9ICggX190bXAgKTsgKChfX3UzMikoICgo KF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKF9f eCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAw MDBVTCkgPj4gMjQpICkpOyB9KSA7IH0pIDsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3 YWIzMnAoX191MzIgKngpCnsKCXJldHVybiAoeyBfX3UzMiBfX3RtcCA9ICggKiggeCApICkgOyAo eyBfX3UzMiBfX3ggPSAoIF9fdG1wICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZm MDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAg OCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgfSkg OyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMyICphZGRyKQp7 CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTMyIF9fdG1wID0gKCAqKCAoIGFkZHIgKSApICkgOyAo eyBfX3UzMiBfX3ggPSAoIF9fdG1wICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZm MDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAg OCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgfSkg OyB9KSAgOyB9IHdoaWxlICgwKSA7Cn0KCgpzdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191 NjQgX19mc3dhYjY0KF9fdTY0IHgpCnsKCglfX3UzMiBoID0geCA+PiAzMjsKICAgICAgICBfX3Uz MiBsID0geCAmICgoMVVMTDw8MzIpLTEpOwogICAgICAgIHJldHVybiAoKChfX3U2NCkoX19idWls dGluX2NvbnN0YW50X3AoKF9fdTMyKSggbCApKSA/ICh7IF9fdTMyIF9feCA9ICggKCBsICkgKTsg KChfX3UzMikoICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwg KCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMiko X194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9f dTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSAgOiBfX2Zzd2FiMzIoKCBsICkpKSApIDw8 IDMyKSB8ICgoX191NjQpKChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKCBoICkpID8gKHsg X191MzIgX194ID0gKCAoIGggKSApOyAoKF9fdTMyKSggKCgoX191MzIpKF9feCkgJiAoX191MzIp MHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAw VUwpIDw8ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gIDgp IHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pICA6 IF9fZnN3YWIzMigoIGggKSkpICkpOwoKCgp9CnN0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fc3dh YjY0cChfX3U2NCAqeCkKewoJcmV0dXJuICh7IF9fdTY0IF9fdG1wID0gKCAqKCB4ICkgKSA7ICh7 IF9fdTY0IF9feCA9ICggX190bXAgKTsgKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoX194KSAm IChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2NCko X194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCkoKChf X3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChfX3U2 NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8 IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+ ICA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBV TEwpID4+IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAw MDAwMDBVTEwpID4+IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAw MDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgfSkgOyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9f IHZvaWQgX19zd2FiNjRzKF9fdTY0ICphZGRyKQp7CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTY0 IF9fdG1wID0gKCAqKCAoIGFkZHIgKSApICkgOyAoeyBfX3U2NCBfX3ggPSAoIF9fdG1wICk7ICgo X191NjQpKCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZm VUxMKSA8PCA1NikgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAw MDBmZjAwVUxMKSA8PCA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAw MDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQp MHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAo X191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCAoX191NjQpKCgoX191NjQpKF9f eCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191 NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAoX191NjQp KCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSk7 IH0pIDsgfSkgIDsgfSB3aGlsZSAoMCkgOwp9CgoKCgoKCgoKCgoKCgoKCiMgMTEgIi9ob21lL2Nh cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2J5dGVv cmRlci9iaWdfZW5kaWFuLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11 Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQoKCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIF9fdTMyCQkJbnRvaGwoX191 MzIpOwpleHRlcm4gX191MzIJCQlodG9ubChfX3UzMik7CgoKCgpleHRlcm4gdW5zaWduZWQgc2hv cnQgaW50CW50b2hzKHVuc2lnbmVkIHNob3J0IGludCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBp bnQJaHRvbnModW5zaWduZWQgc2hvcnQgaW50KTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDY2 ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s aW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oIiAyCgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMgoK CgojIDkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2FzbS9iaXRvcHMuaCIgMgoKCgoKIAoKCgogCgoKCmV4dGVybiB2b2lkIHNldF9iaXQoaW50 IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiB2b2lkIF9fc2V0X2JpdChpbnQgbnIs IHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9s YXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGls ZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2 b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBu ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0 KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IHRlc3RfYW5kX2NoYW5n ZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgX190ZXN0X2Fu ZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IF9f Y29uc3RhbnRfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4 dGVybiBpbnQgX190ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJu IGludCBmaW5kX2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKTsKZXh0 ZXJuIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9m ZnNldCk7CgogCgoKCmV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVk IGxvbmcgd29yZCkKewoJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwoKCXdoaWxlKHdvcmQgJiAx KSB7CgkJcmVzdWx0Kys7CgkJd29yZCA+Pj0gMTsKCX0KCXJldHVybiByZXN1bHQ7Cn0KCgpleHRl cm4gX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikK ewoJaW50IAkqIGEgPSAoaW50ICopIGFkZHI7CglpbnQJbWFzazsKCXVuc2lnbmVkIGxvbmcgZmxh Z3M7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Cglhc20gdm9sYXRp bGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggIGZsYWdzICApIDogOiAibWVtb3J5IikgIDsgX19h c21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3NyLCUlZDBcblx0IiAib3JpLmwgICMweDA3MDAs JSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6IDogOiAiY2MiLCAiJWQwIiwgIm1lbW9yeSIp ICA7CgkqYSB8PSBtYXNrOwoJYXNtIHZvbGF0aWxlICgibW92ZXcgJTAsJSVzciI6IDoiZCIgKCAg ZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKfQoKZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3NldF9i aXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50IAkqIGEgPSAoaW50ICopIGFk ZHI7CglpbnQJbWFzazsKCglhICs9IG5yID4+IDU7CgltYXNrID0gMSA8PCAobnIgJiAweDFmKTsK CSphIHw9IG1hc2s7Cn0KCiAKCgoKCgpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChp bnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglpbnQgCSogYSA9IChpbnQgKikgYWRkcjsK CWludAltYXNrOwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglhICs9IG5yID4+IDU7CgltYXNrID0g MSA8PCAobnIgJiAweDFmKTsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAg ZmxhZ3MgICkgOiA6ICJtZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUv c3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4i IDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsKCSphICY9IH5tYXNrOwoJYXNtIHZvbGF0 aWxlICgibW92ZXcgJTAsJSVzciI6IDoiZCIgKCAgZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKfQoK ZXh0ZXJuIF9faW5saW5lX18gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq IGFkZHIpCnsKCWludCBtYXNrLCBmbGFnczsKCXVuc2lnbmVkIGxvbmcgKkFERFIgPSAodW5zaWdu ZWQgbG9uZyAqKSBhZGRyOwoKCUFERFIgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDMx KTsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgZmxhZ3MgICkgOiA6ICJt ZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUvc3IsJSVkMFxuXHQiICJv cmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4iIDogOiA6ICJjYyIsICIl ZDAiLCAibWVtb3J5IikgIDsKCSpBRERSIF49IG1hc2s7Cglhc20gdm9sYXRpbGUgKCJtb3ZldyAl MCwlJXNyIjogOiJkIiAoICBmbGFncyAgKSA6ICJtZW1vcnkiKSAgOwp9CgpleHRlcm4gX19pbmxp bmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cglp bnQgbWFzazsKCXVuc2lnbmVkIGxvbmcgKkFERFIgPSAodW5zaWduZWQgbG9uZyAqKSBhZGRyOwoK CUFERFIgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKCSpBRERSIF49IG1hc2s7 Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7Cgl1bnNpZ25lZCBsb25nIGZs YWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJZG8geyBhc20g dm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggICAgZmxhZ3MgICAgKSA6IDogIm1lbW9y eSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIgIm9yaS5s ICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwgIiVkMCIs ICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOwoJ KmEgfD0gbWFzazsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdz ICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJuIHJldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lX18g aW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cglp bnQJbWFzaywgcmV0dmFsOwoJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSBhZGRyOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4 MWYpOwoJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKCSphIHw9IG1hc2s7CglyZXR1cm4gcmV0 dmFsOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwg dm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNp Z25lZCBpbnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7Cgl1bnNpZ25lZCBs b25nIGZsYWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJZG8g eyBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggICAgZmxhZ3MgICAgKSA6IDog Im1lbW9yeSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIg Im9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwg IiVkMCIsICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2YWwgPSAobWFzayAmICphKSAh PSAwOwoJKmEgJj0gfm1hc2s7Cglhc20gdm9sYXRpbGUgKCJtb3ZldyAlMCwlJXNyIjogOiJkIiAo ICBmbGFncyAgKSA6ICJtZW1vcnkiKSAgOwoKCXJldHVybiByZXR2YWw7Cn0KCmV4dGVybiBfX2lu bGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBh ZGRyKQp7CglpbnQJbWFzaywgcmV0dmFsOwoJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gKHZv bGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8 IChuciAmIDB4MWYpOwoJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKCSphICY9IH5tYXNrOwoJ cmV0dXJuIHJldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9i aXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50CW1hc2ssIHJldHZhbDsKCXZv bGF0aWxlIHVuc2lnbmVkIGludCAqYSA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcjsK CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYg MHgxZik7CglkbyB7IGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgICBmbGFn cyAgICApIDogOiAibWVtb3J5IikgIDsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3Ny LCUlZDBcblx0IiAib3JpLmwgICMweDA3MDAsJSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6 IDogOiAiY2MiLCAiJWQwIiwgIm1lbW9yeSIpICA7IH0gd2hpbGUoMCkgIDsKCXJldHZhbCA9ICht YXNrICYgKmEpICE9IDA7CgkqYSBePSBtYXNrOwoJYXNtIHZvbGF0aWxlICgibW92ZXcgJTAsJSVz ciI6IDoiZCIgKCAgZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKCglyZXR1cm4gcmV0dmFsOwp9Cgpl eHRlcm4gX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7CgoJYSArPSBuciA+PiA1OwoJ bWFzayA9IDEgPDwgKG5yICYgMHgxZik7CglyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOwoJKmEg Xj0gbWFzazsKCXJldHVybiByZXR2YWw7Cn0KCiAKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgX19j b25zdGFudF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cgly ZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGlu dCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCBfX3Rl c3RfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludCAJKiBhID0gKGludCAq KSBhZGRyOwoJaW50CW1hc2s7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYgMHgx Zik7CglyZXR1cm4gKChtYXNrICYgKmEpICE9IDApOwp9CgoKCgoKCgoKCmV4dGVybiBfX2lubGlu ZV9fIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9m ZnNldCkKewoJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChv ZmZzZXQgPj4gNSk7Cgl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOwoJdW5z aWduZWQgbG9uZyB0bXA7CgoJaWYgKG9mZnNldCA+PSBzaXplKQoJCXJldHVybiBzaXplOwoJc2l6 ZSAtPSByZXN1bHQ7CglvZmZzZXQgJj0gMzFVTDsKCWlmIChvZmZzZXQpIHsKCQl0bXAgPSAqKHAr Kyk7CgkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CgkJaWYgKHNpemUgPCAzMikKCQkJZ290 byBmb3VuZF9maXJzdDsKCQlpZiAofnRtcCkKCQkJZ290byBmb3VuZF9taWRkbGU7CgkJc2l6ZSAt PSAzMjsKCQlyZXN1bHQgKz0gMzI7Cgl9Cgl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CgkJaWYgKH4o dG1wID0gKihwKyspKSkKCQkJZ290byBmb3VuZF9taWRkbGU7CgkJcmVzdWx0ICs9IDMyOwoJCXNp emUgLT0gMzI7Cgl9CglpZiAoIXNpemUpCgkJcmV0dXJuIHJlc3VsdDsKCXRtcCA9ICpwOwoKZm91 bmRfZmlyc3Q6Cgl0bXAgfD0gfjBVTCA+PiBzaXplOwpmb3VuZF9taWRkbGU6CglyZXR1cm4gcmVz dWx0ICsgZmZ6KHRtcCk7Cn0KCgoKIAoKCgoKCgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZXh0 Ml9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludAkJbWFzaywgcmV0 dmFsOwoJdW5zaWduZWQgbG9uZwlmbGFnczsKCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKkFERFIg PSAodW5zaWduZWQgY2hhciAqKSBhZGRyOwoKCUFERFIgKz0gbnIgPj4gMzsKCW1hc2sgPSAxIDw8 IChuciAmIDB4MDcpOwoJZG8geyBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICgg ICAgZmxhZ3MgICAgKSA6IDogIm1lbW9yeSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1v dmUgJS9zciwlJWQwXG5cdCIgIm9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUv c3JcbiIgOiA6IDogImNjIiwgIiVkMCIsICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2 YWwgPSAobWFzayAmICpBRERSKSAhPSAwOwoJKkFERFIgfD0gbWFzazsKCWFzbSB2b2xhdGlsZSAo Im1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CglyZXR1cm4g cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZXh0Ml9jbGVhcl9iaXQoaW50IG5yLCB2 b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50CQltYXNrLCByZXR2YWw7Cgl1bnNpZ25lZCBsb25n CWZsYWdzOwoJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICop IGFkZHI7CgoJQUREUiArPSBuciA+PiAzOwoJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CglkbyB7 IGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgICBmbGFncyAgICApIDogOiAi bWVtb3J5IikgIDsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3NyLCUlZDBcblx0IiAi b3JpLmwgICMweDA3MDAsJSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6IDogOiAiY2MiLCAi JWQwIiwgIm1lbW9yeSIpICA7IH0gd2hpbGUoMCkgIDsKCXJldHZhbCA9IChtYXNrICYgKkFERFIp ICE9IDA7CgkqQUREUiAmPSB+bWFzazsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6 ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CglyZXR1cm4gcmV0dmFsOwp9CgpleHRlcm4g X19pbmxpbmVfXyBpbnQgZXh0Ml90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQg KiBhZGRyKQp7CglpbnQJCQltYXNrOwoJY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQURE UiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CgoJQUREUiArPSBuciA+PiAzOwoJbWFz ayA9IDEgPDwgKG5yICYgMHgwNyk7CglyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOwp9CgoK CgpleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0 KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCnsK CXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+ IDUpOwoJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKCXVuc2lnbmVkIGxv bmcgdG1wOwoKCWlmIChvZmZzZXQgPj0gc2l6ZSkKCQlyZXR1cm4gc2l6ZTsKCXNpemUgLT0gcmVz dWx0OwoJb2Zmc2V0ICY9IDMxVUw7CglpZihvZmZzZXQpIHsKCQkgCgoKCgoKCgoKCgkJdG1wID0g KihwKyspOwoJCXRtcCB8PSAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggfjBVTCA+PiAo MzItb2Zmc2V0KSApKSA/ICh7IF9fdTMyIF9feCA9ICggKCB+MFVMID4+ICgzMi1vZmZzZXQpICkg KTsgKChfX3UzMikoICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQp IHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3Uz MikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYg KF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSAgOiBfX2Zzd2FiMzIoKCB+MFVMID4+ ICgzMi1vZmZzZXQpICkpKSA7CgkJaWYoc2l6ZSA8IDMyKQoJCQlnb3RvIGZvdW5kX2ZpcnN0OwoJ CWlmKH50bXApCgkJCWdvdG8gZm91bmRfbWlkZGxlOwoJCXNpemUgLT0gMzI7CgkJcmVzdWx0ICs9 IDMyOwoJfQoJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CgkJaWYofih0bXAgPSAqKHArKykpKQoJCQln b3RvIGZvdW5kX21pZGRsZTsKCQlyZXN1bHQgKz0gMzI7CgkJc2l6ZSAtPSAzMjsKCX0KCWlmKCFz aXplKQoJCXJldHVybiByZXN1bHQ7Cgl0bXAgPSAqcDsKCmZvdW5kX2ZpcnN0OgoJIAoKCgoJcmV0 dXJuIHJlc3VsdCArIGZmeigoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggdG1wICkpID8g KHsgX191MzIgX194ID0gKCAoIHRtcCApICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChf X3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAw MGZmMDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+ PiAgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsg fSkgIDogX19mc3dhYjMyKCggdG1wICkpKSAgfCAofjBVTCA8PCBzaXplKSk7CmZvdW5kX21pZGRs ZToKCXJldHVybiByZXN1bHQgKyBmZnooKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoIHRt cCApKSA/ICh7IF9fdTMyIF9feCA9ICggKCB0bXAgKSApOyAoKF9fdTMyKSggKCgoX191MzIpKF9f eCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwMDBmZjAwVUwpIDw8ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAw MDBVTCkgPj4gIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAy NCkgKSk7IH0pICA6IF9fZnN3YWIzMigoIHRtcCApKSkgKTsKfQoKIAoKCgoKCgogCgoKCgoKCgoK CgoKCgojIDI2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv aW5jbHVkZS9saW51eC9mcy5oIiAyCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwoKCiAKCgoK CgoKCgoKIAoKCgoKCgoKIApzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgewoJaW50IG5yX2ZpbGVz OwkJIAoJaW50IG5yX2ZyZWVfZmlsZXM7CSAKCWludCBtYXhfZmlsZXM7CQkgCn07CmV4dGVybiBz dHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgZmlsZXNfc3RhdDsKCnN0cnVjdCBpbm9kZXNfc3RhdF90 IHsKCWludCBucl9pbm9kZXM7CglpbnQgbnJfdW51c2VkOwoJaW50IGR1bW15WzVdOwp9OwpleHRl cm4gc3RydWN0IGlub2Rlc19zdGF0X3QgaW5vZGVzX3N0YXQ7CgpleHRlcm4gaW50IGxlYXNlc19l bmFibGUsIGRpcl9ub3RpZnlfZW5hYmxlLCBsZWFzZV9icmVha190aW1lOwoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEKCgoKCgoKCgoKCiMgMSAiL2hvbWUv Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcndz ZW0uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHJ3X3NlbWFwaG9yZTsKCgojIDEg Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xp bnV4L3J3c2VtLXNwaW5sb2NrLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCByd3Nl bV93YWl0ZXI7CgogCgoKCgoKCnN0cnVjdCByd19zZW1hcGhvcmUgewoJX19zMzIJCQlhY3Rpdml0 eTsKCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwoK Cgp9OwoKIAoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICBpbml0X3J3c2VtKHN0cnVjdCByd19z ZW1hcGhvcmUgKnNlbSkgIDsKZXh0ZXJuIHZvaWQgIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1h cGhvcmUgKnNlbSkgIDsKZXh0ZXJuIHZvaWQgIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBo b3JlICpzZW0pICA7CmV4dGVybiB2b2lkICBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAq c2VtKSAgOwpleHRlcm4gdm9pZCAgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0p ICA7CgoKCiMgMjUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKCgoKCgoKCgoKCgoKCiAKCgpzdGF0aWMgaW5saW5l IHZvaWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoJIDsKCV9fZG93bl9y ZWFkKHNlbSk7CgkgOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIGRvd25fd3JpdGUoc3RydWN0 IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CgkgOwoJX19kb3duX3dyaXRlKHNlbSk7CgkgOwp9CgogCgoK c3RhdGljIGlubGluZSB2b2lkIHVwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7Cgkg OwoJX191cF9yZWFkKHNlbSk7CgkgOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3dyaXRl KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoJIDsKCV9fdXBfd3JpdGUoc2VtKTsKCSA7Cn0K CgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p bmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgoKCgoKCiAKCgoKCgoKCgpzdHJ1Y3Qgc2VtYXBob3Jl IHsKCWF0b21pY190IGNvdW50OwoJYXRvbWljX3Qgd2FraW5nOwoJd2FpdF9xdWV1ZV9oZWFkX3Qg d2FpdDsKCgoKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHNlbWFf aW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQp7Cgkqc2VtID0gKHN0cnVjdCBz ZW1hcGhvcmUpeyB7ICggICB2YWwgICkgfSAsIHsgKCAwICkgfSAsIHsJbG9jazoJCShzcGlubG9j a190KSB7IDAgfSAgLAl0YXNrX2xpc3Q6CXsgJiggKCAqc2VtICkud2FpdCApLnRhc2tfbGlzdCwg JiggKCAqc2VtICkud2FpdCApLnRhc2tfbGlzdCB9LAkgfSAgICB9IDsKfQoKc3RhdGljIGlubGlu ZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKewoJc2VtYV9pbml0KHNl bSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNl bWFwaG9yZSAqc2VtKQp7CglzZW1hX2luaXQoc2VtLCAwKTsKfQoKICAgdm9pZCBfX2Rvd25fZmFp bGVkKHZvaWQgICk7CiAgIGludCAgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHZvaWQgICAp OwogICBpbnQgIF9fZG93bl9mYWlsZWRfdHJ5bG9jayh2b2lkICAgKTsKICAgdm9pZCBfX3VwX3dh a2V1cCh2b2lkICApOwoKICAgdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAg IGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgIGlu dCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgIHZvaWQgX191cChz dHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKCmV4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtl X2xvY2s7CgogCgoKCgpleHRlcm4gaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICog c2VtKQp7CgoKCgoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJInwgYXRvbWljIGRvd24gb3BlcmF0 aW9uXG5cdCIKCQkibW92ZWwJJTAsICUlYTFcblx0IgoJCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5c dCIKCQkic3VicWwJIzEsICUlYTFAXG5cdCIKCQkiam1pICIgIl9fZG93bl9mYWlsZWQiICAiXG4i CgkJIjE6IgoJCTogIAoJCTogImciIChzZW0pCgkJOiAiY2MiLCAiJWEwIiwgIiVhMSIsICJtZW1v cnkiKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1h cGhvcmUgKiBzZW0pCnsKCWludCByZXQ7CgoKCgoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSJ8 IGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCgkJIm1vdmVsCSUxLCAlJWExXG5cdCIKCQkibGVh CSUlcGNAKDFmKSwgJSVhMFxuXHQiCgkJInN1YnFsCSMxLCAlJWExQFxuXHQiCgkJImptaSAiICJf X2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUiICAiXG5cdCIKCQkiY2xybAklJWQwXG4iCgkJIjE6 IG1vdmVsCSUlZDAsICUwXG4iCgkJOiAiPWQiIChyZXQpCgkJOiAiZyIgKHNlbSkKCQk6ICJjYyIs ICIlZDAiLCAiJWEwIiwgIiVhMSIsICJtZW1vcnkiKTsKCXJldHVybihyZXQpOwp9CgogCmV4dGVy biBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CglyZWdp c3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKCXJlZ2lz dGVyIGludCByZXN1bHQgX19hc21fXyAoIiVkMCIpOwoKCgoKCglfX2FzbV9fIF9fdm9sYXRpbGVf XygKCQkifCBhdG9taWMgZG93biB0cnlsb2NrIG9wZXJhdGlvblxuXHQiCgkJInN1YnFsICMxLCUx QFxuXHQiCgkJImptaSAyZlxuXHQiCgkJImNscmwgJTBcbiIKCQkiMTpcbiIKCQkiLnNlY3Rpb24g LnRleHQubG9jayxcImF4XCJcbiIKCQkiLmV2ZW5cbiIKCQkiMjpcdHBlYSAxYlxuXHQiCgkJImpi cmEgX19kb3duX2ZhaWxlZF90cnlsb2NrXG4iCgkJIi5wcmV2aW91cyIKCQk6ICI9ZCIgKHJlc3Vs dCkKCQk6ICJhIiAoc2VtMSkKCQk6ICIlZDAiLCAibWVtb3J5Iik7CglyZXR1cm4gcmVzdWx0Owp9 CgogCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsK CgoKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkifCBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIK CQkibW92ZWwJJTAsICUlYTFcblx0IgoJCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5cdCIKCQkiYWRk cWwJIzEsICUlYTFAXG5cdCIKCQkiamxlICIgIl9fdXBfd2FrZXVwIiAgIlxuIgoJCSIxOiIKCQk6 ICAKCQk6ICJnIiAoc2VtKQoJCTogImNjIiwgIiVhMCIsICIlYTEiLCAibWVtb3J5Iik7Cn0KCgoK CiMgMTk5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9saW51eC9mcy5oIiAyCgoKCmV4dGVybiB2b2lkIHVwZGF0ZV9hdGltZSAoc3RydWN0IGlu b2RlICopOwoKCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4g dm9pZCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdm9pZCBtbnRfaW5pdCh1bnNp Z25lZCBsb25nKTsKCiAKZW51bSBiaF9zdGF0ZV9iaXRzIHsKCUJIX1VwdG9kYXRlLAkgCglCSF9E aXJ0eSwJIAoJQkhfTG9jaywJIAoJQkhfUmVxLAkJIAoJQkhfTWFwcGVkLAkgCglCSF9OZXcsCQkg CglCSF9Bc3luYywJIAoJQkhfV2FpdF9JTywJIAoJQkhfbGF1bmRlciwJIAoJQkhfSkJELAkJIAoK CUJIX1ByaXZhdGVTdGFydCwgCgoKfTsKCiAKCgoKCgoKCgoKCnN0cnVjdCBidWZmZXJfaGVhZCB7 CgkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfbmV4dDsJIAoJdW5zaWduZWQgbG9uZyBiX2Jsb2Nr bnI7CSAKCXVuc2lnbmVkIHNob3J0IGJfc2l6ZTsJCSAKCXVuc2lnbmVkIHNob3J0IGJfbGlzdDsJ CSAKCWtkZXZfdCBiX2RldjsJCQkgCgoJYXRvbWljX3QgYl9jb3VudDsJCSAKCWtkZXZfdCBiX3Jk ZXY7CQkJIAoJdW5zaWduZWQgbG9uZyBiX3N0YXRlOwkJIAoJdW5zaWduZWQgbG9uZyBiX2ZsdXNo dGltZTsJIAoKCXN0cnVjdCBidWZmZXJfaGVhZCAqYl9uZXh0X2ZyZWU7IAoJc3RydWN0IGJ1ZmZl cl9oZWFkICpiX3ByZXZfZnJlZTsgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOyAK CXN0cnVjdCBidWZmZXJfaGVhZCAqYl9yZXFuZXh0OwkgCgoJc3RydWN0IGJ1ZmZlcl9oZWFkICoq Yl9wcHJldjsJIAoJY2hhciAqIGJfZGF0YTsJCQkgCglzdHJ1Y3QgcGFnZSAqYl9wYWdlOwkJIAoJ dm9pZCAoKmJfZW5kX2lvKShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOyAg CiAJdm9pZCAqYl9wcml2YXRlOwkJIAoKCXVuc2lnbmVkIGxvbmcgYl9yc2VjdG9yOwkgCgl3YWl0 X3F1ZXVlX2hlYWRfdCBiX3dhaXQ7CgoJc3RydWN0IGlub2RlICoJICAgICBiX2lub2RlOwoJc3Ry dWN0IGxpc3RfaGVhZCAgICAgYl9pbm9kZV9idWZmZXJzOwkgCn07Cgp0eXBlZGVmIHZvaWQgKGJo X2VuZF9pb190KShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOwp2b2lkIGlu aXRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBiaF9lbmRfaW9fdCAqLCB2b2lkICopOwoK CgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0X2JoX3BhZ2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpi aCwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKCgoKCiMgMSAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv cGlwZV9mc19pLmgiIDEKCgoKCnN0cnVjdCBwaXBlX2lub2RlX2luZm8gewoJd2FpdF9xdWV1ZV9o ZWFkX3Qgd2FpdDsKCWNoYXIgKmJhc2U7Cgl1bnNpZ25lZCBpbnQgbGVuOwoJdW5zaWduZWQgaW50 IHN0YXJ0OwoJdW5zaWduZWQgaW50IHJlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd3JpdGVyczsKCXVu c2lnbmVkIGludCB3YWl0aW5nX3JlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJz OwoJdW5zaWduZWQgaW50IHJfY291bnRlcjsKCXVuc2lnbmVkIGludCB3X2NvdW50ZXI7Cn07Cgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCnZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlu b2RlKTsKCnN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7CgoKIyAy ODkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp bnV4LTIuNC54L2luY2x1ZGUvbGludXgvbWluaXhfZnNfaS5oIiAxCgoKCiAKCgpzdHJ1Y3QgbWlu aXhfaW5vZGVfaW5mbyB7Cgl1bmlvbiB7CgkJX191MTYgaTFfZGF0YVsxNl07CgkJX191MzIgaTJf ZGF0YVsxNl07Cgl9IHU7Cn07CgoKIyAyOTAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZXh0Ml9mc19p LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvIHsKCV9f dTMyCWlfZGF0YVsxNV07CglfX3UzMglpX2ZsYWdzOwoJX191MzIJaV9mYWRkcjsKCV9fdTgJaV9m cmFnX25vOwoJX191OAlpX2ZyYWdfc2l6ZTsKCV9fdTE2CWlfb3N5bmM7CglfX3UzMglpX2ZpbGVf YWNsOwoJX191MzIJaV9kaXJfYWNsOwoJX191MzIJaV9kdGltZTsKCV9fdTMyCWlfYmxvY2tfZ3Jv dXA7CglfX3UzMglpX25leHRfYWxsb2NfYmxvY2s7CglfX3UzMglpX25leHRfYWxsb2NfZ29hbDsK CV9fdTMyCWlfcHJlYWxsb2NfYmxvY2s7CglfX3UzMglpX3ByZWFsbG9jX2NvdW50OwoJX191MzIJ aV9kaXJfc3RhcnRfbG9va3VwOwoJaW50CWlfbmV3X2lub2RlOjE7CSAKfTsKCgojIDI5MSAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv ZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK c3RydWN0IGV4dDNfaW5vZGVfaW5mbyB7CglfX3UzMglpX2RhdGFbMTVdOwoJX191MzIJaV9mbGFn czsKCgoKCgoKCV9fdTMyCWlfZmlsZV9hY2w7CglfX3UzMglpX2Rpcl9hY2w7CglfX3UzMglpX2R0 aW1lOwoJX191MzIJaV9ibG9ja19ncm91cDsKCV9fdTMyCWlfc3RhdGU7CQkgCglfX3UzMglpX25l eHRfYWxsb2NfYmxvY2s7CglfX3UzMglpX25leHRfYWxsb2NfZ29hbDsKCgoKCglfX3UzMglpX2Rp cl9zdGFydF9sb29rdXA7CgkKCXN0cnVjdCBsaXN0X2hlYWQgaV9vcnBoYW47CSAKCgkgCgoKCgoK CgoKCgoKCgoKCWxvZmZfdAlpX2Rpc2tzaXplOwoKCSAKCgoKCgoKCgoKCXN0cnVjdCByd19zZW1h cGhvcmUgdHJ1bmNhdGVfc2VtOwp9OwoKCiMgMjkyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nh cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hwZnNf ZnNfaS5oIiAxCgoKCnN0cnVjdCBocGZzX2lub2RlX2luZm8gewoJdW5zaWduZWQgbG9uZyBtbXVf cHJpdmF0ZTsKCWlub190IGlfcGFyZW50X2RpcjsJIAoJdW5zaWduZWQgaV9kbm87CQkgCgl1bnNp Z25lZCBpX2Rwb3M7CSAKCXVuc2lnbmVkIGlfZHN1YmRubzsJIAoJdW5zaWduZWQgaV9maWxlX3Nl YzsJIAoJdW5zaWduZWQgaV9kaXNrX3NlYzsJIAoJdW5zaWduZWQgaV9uX3NlY3M7CSAKCXVuc2ln bmVkIGlfZWFfc2l6ZTsJIAoJdW5zaWduZWQgaV9jb252IDogMjsJIAoJdW5zaWduZWQgaV9lYV9t b2RlIDogMTsJIAoJdW5zaWduZWQgaV9lYV91aWQgOiAxOwkgCgl1bnNpZ25lZCBpX2VhX2dpZCA6 IDE7CSAKCXVuc2lnbmVkIGlfZGlydHkgOiAxOwoJc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsJIAoJ bG9mZl90ICoqaV9yZGRpcl9vZmY7Cn07CgoKCgoKCgoKCgoKCgogCiAKCgoKCgojIDI5MyAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv ZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40 LngvaW5jbHVkZS9saW51eC9udGZzX2ZzX2kuaCIgMQoKCgoKCiAKc3RydWN0IG50ZnNfYXR0cmli dXRlOwpzdHJ1Y3QgbnRmc19zYl9pbmZvOwoKIAoKCnR5cGVkZWYgdTggIG50ZnNfdTg7CnR5cGVk ZWYgdTE2IG50ZnNfdTE2Owp0eXBlZGVmIHUzMiBudGZzX3UzMjsKdHlwZWRlZiB1NjQgbnRmc191 NjQ7CnR5cGVkZWYgczggIG50ZnNfczg7CnR5cGVkZWYgczE2IG50ZnNfczE2Owp0eXBlZGVmIHMz MiBudGZzX3MzMjsKdHlwZWRlZiBzNjQgbnRmc19zNjQ7CgoKCgp0eXBlZGVmIF9fa2VybmVsX21v ZGVfdCBudG1vZGVfdDsKCgoKdHlwZWRlZiB1aWRfdCBudGZzX3VpZF90OwoKCgp0eXBlZGVmIGdp ZF90IG50ZnNfZ2lkX3Q7CgoKCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90IG50ZnNfc2l6ZV90OwoK Cgp0eXBlZGVmIF9fa2VybmVsX3RpbWVfdCBudGZzX3RpbWVfdDsKCgogCgoKdHlwZWRlZiB1MTYg bnRmc193Y2hhcl90OwoKIAoKCnR5cGVkZWYgczY0IG50ZnNfb2Zmc2V0X3Q7CgogCgoKdHlwZWRl ZiB1NjQgbnRmc190aW1lNjRfdDsKCiAKCgoKCgoKCgoKdHlwZWRlZiBzMzIgbnRmc19jbHVzdGVy X3Q7CgoKIApzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvIHsKCXN0cnVjdCBudGZzX3NiX2luZm8gKnZv bDsKCXVuc2lnbmVkIGxvbmcgaV9udW1iZXI7CQkgCglfX3UxNiBzZXF1ZW5jZV9udW1iZXI7CQkg Cgl1bnNpZ25lZCBjaGFyICphdHRyOwkJIAoJaW50IGF0dHJfY291bnQ7CQkJIAoJc3RydWN0IG50 ZnNfYXR0cmlidXRlICphdHRyczsKCWludCByZWNvcmRfY291bnQ7CQkgCglpbnQgKnJlY29yZHM7 ICAKCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJaW50IHJlY29yZHNpemU7CgkJCWludCBjbHVzdGVy c19wZXJfcmVjb3JkOwoJCX0gaW5kZXg7Cgl9IHU7CQp9OwoKCiMgMjk0ICIvaG9tZS9jYXJsb3Mv QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoj IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl L2xpbnV4L21zZG9zX2ZzX2kuaCIgMQoKCgogCgoKCnN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIHsK CXVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7CglpbnQgaV9zdGFydDsJIAoJaW50IGlfbG9nc3Rh cnQ7CSAKCWludCBpX2F0dHJzOwkgCglpbnQgaV9jdGltZV9tczsJIAoJaW50IGlfbG9jYXRpb247 CSAKCXN0cnVjdCBpbm9kZSAqaV9mYXRfaW5vZGU7CSAKCXN0cnVjdCBsaXN0X2hlYWQgaV9mYXRf aGFzaDsJIAp9OwoKCiMgMjk1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3Vtc2Rvc19mc19pLmgiIDEK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IGRpcl9sb2NraW5n X2luZm8gewoJd2FpdF9xdWV1ZV9oZWFkX3QgcDsKCXNob3J0IGludCBsb29raW5nOwkgCglzaG9y dCBpbnQgY3JlYXRpbmc7CSAKCgoKCWxvbmcgcGlkOwkJIAoKfTsKCnN0cnVjdCB1bXNkb3NfaW5v ZGVfaW5mbyB7CglzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19pbmZvOwoJc3RydWN0IGRp cl9sb2NraW5nX2luZm8gZGlyX2luZm87CglpbnQgaV9wYXRjaGVkOwkJCSAKCWludCBpX2lzX2hs aW5rOwkJCSAKCW9mZl90IHBvczsJCQkgCn07CgoKIyAyOTYgIi9ob21lL2Nhcmxvcy9CdWlsZHMv VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv aXNvX2ZzX2kuaCIgMQoKCgplbnVtIGlzb2ZzX2ZpbGVfZm9ybWF0IHsKCWlzb2ZzX2ZpbGVfbm9y bWFsID0gMCwKCWlzb2ZzX2ZpbGVfc3BhcnNlID0gMSwKCWlzb2ZzX2ZpbGVfY29tcHJlc3NlZCA9 IDIsCn07CgkKIAoKCnN0cnVjdCBpc29faW5vZGVfaW5mbyB7Cgl1bnNpZ25lZCBpbnQgaV9maXJz dF9leHRlbnQ7Cgl1bnNpZ25lZCBjaGFyIGlfZmlsZV9mb3JtYXQ7Cgl1bnNpZ25lZCBjaGFyIGlf Zm9ybWF0X3Bhcm1bM107Cgl1bnNpZ25lZCBsb25nIGlfbmV4dF9zZWN0aW9uX2lubzsKCW9mZl90 IGlfc2VjdGlvbl9zaXplOwp9OwoKCiMgMjk3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxv cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25mc19mc19p LmgiIDEKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y LjQueC9pbmNsdWRlL2xpbnV4L25mcy5oIiAxCiAKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9C dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2df cHJvdC5oIiAxCiAKCgoKCgoKCgoKCgoKZW51bSBycGNfYXV0aF9mbGF2b3IgewoJUlBDX0FVVEhf TlVMTCAgPSAwLAoJUlBDX0FVVEhfVU5JWCAgPSAxLAoJUlBDX0FVVEhfU0hPUlQgPSAyLAoJUlBD X0FVVEhfREVTICAgPSAzLAoJUlBDX0FVVEhfS1JCICAgPSA0LAp9OwoKZW51bSBycGNfbXNnX3R5 cGUgewoJUlBDX0NBTEwgPSAwLAoJUlBDX1JFUExZID0gMQp9OwoKZW51bSBycGNfcmVwbHlfc3Rh dCB7CglSUENfTVNHX0FDQ0VQVEVEID0gMCwKCVJQQ19NU0dfREVOSUVEID0gMQp9OwoKZW51bSBy cGNfYWNjZXB0X3N0YXQgewoJUlBDX1NVQ0NFU1MgPSAwLAoJUlBDX1BST0dfVU5BVkFJTCA9IDEs CglSUENfUFJPR19NSVNNQVRDSCA9IDIsCglSUENfUFJPQ19VTkFWQUlMID0gMywKCVJQQ19HQVJC QUdFX0FSR1MgPSA0LAoJUlBDX1NZU1RFTV9FUlIgPSA1Cn07CgplbnVtIHJwY19yZWplY3Rfc3Rh dCB7CglSUENfTUlTTUFUQ0ggPSAwLAoJUlBDX0FVVEhfRVJST1IgPSAxCn07CgplbnVtIHJwY19h dXRoX3N0YXQgewoJUlBDX0FVVEhfT0sgPSAwLAoJUlBDX0FVVEhfQkFEQ1JFRCA9IDEsCglSUENf QVVUSF9SRUpFQ1RFRENSRUQgPSAyLAoJUlBDX0FVVEhfQkFEVkVSRiA9IDMsCglSUENfQVVUSF9S RUpFQ1RFRFZFUkYgPSA0LAoJUlBDX0FVVEhfVE9PV0VBSyA9IDUKfTsKCgoKCgoKCgoKIyAxMCAi L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu dXgvbmZzLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogZW51bSBuZnNfc3Rh dCB7CglORlNfT0sgPSAwLAkJCSAKCU5GU0VSUl9QRVJNID0gMSwJCSAKCU5GU0VSUl9OT0VOVCA9 IDIsCQkgCglORlNFUlJfSU8gPSA1LAkJCSAKCU5GU0VSUl9OWElPID0gNiwJCSAKCU5GU0VSUl9F QUdBSU4gPSAxMSwJCSAKCU5GU0VSUl9BQ0NFUyA9IDEzLAkJIAoJTkZTRVJSX0VYSVNUID0gMTcs CQkgCglORlNFUlJfWERFViA9IDE4LAkJIAoJTkZTRVJSX05PREVWID0gMTksCQkgCglORlNFUlJf Tk9URElSID0gMjAsCQkgCglORlNFUlJfSVNESVIgPSAyMSwJCSAKCU5GU0VSUl9JTlZBTCA9IDIy LAkJIAoJTkZTRVJSX0ZCSUcgPSAyNywJCSAKCU5GU0VSUl9OT1NQQyA9IDI4LAkJIAoJTkZTRVJS X1JPRlMgPSAzMCwJCSAKCU5GU0VSUl9NTElOSyA9IDMxLAkJIAoJTkZTRVJSX09QTk9UU1VQUCA9 IDQ1LAkJIAoJTkZTRVJSX05BTUVUT09MT05HID0gNjMsCSAKCU5GU0VSUl9OT1RFTVBUWSA9IDY2 LAkJIAoJTkZTRVJSX0RRVU9UID0gNjksCQkgCglORlNFUlJfU1RBTEUgPSA3MCwJCSAKCU5GU0VS Ul9SRU1PVEUgPSA3MSwJCSAKCU5GU0VSUl9XRkxVU0ggPSA5OSwJCSAKCU5GU0VSUl9CQURIQU5E TEUgPSAxMDAwMSwJIAoJTkZTRVJSX05PVF9TWU5DID0gMTAwMDIsCSAKCU5GU0VSUl9CQURfQ09P S0lFID0gMTAwMDMsCSAKCU5GU0VSUl9OT1RTVVBQID0gMTAwMDQsCQkgCglORlNFUlJfVE9PU01B TEwgPSAxMDAwNSwJIAoJTkZTRVJSX1NFUlZFUkZBVUxUID0gMTAwMDYsCSAKCU5GU0VSUl9CQURU WVBFID0gMTAwMDcsCQkgCglORlNFUlJfSlVLRUJPWCA9IDEwMDA4CQkgCiB9OwogCiAKCmVudW0g bmZzX2Z0eXBlIHsKCU5GTk9OID0gMCwKCU5GUkVHID0gMSwKCU5GRElSID0gMiwKCU5GQkxLID0g MywKCU5GQ0hSID0gNCwKCU5GTE5LID0gNSwKCU5GU09DSyA9IDYsCglORkJBRCA9IDcsCglORkZJ Rk8gPSA4Cn07CgoKIAoKCgpzdHJ1Y3QgbmZzX2ZoIHsKCXVuc2lnbmVkIHNob3J0CQlzaXplOwoJ dW5zaWduZWQgY2hhcgkJZGF0YVs2NCBdOwp9OwoKIAoKCgoKCgplbnVtIG5mczNfc3RhYmxlX2hv dyB7CglORlNfVU5TVEFCTEUgPSAwLAoJTkZTX0RBVEFfU1lOQyA9IDEsCglORlNfRklMRV9TWU5D ID0gMgp9OwoKCiMgNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu NC54L2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMgoKCiAKCgpzdHJ1Y3QgbmZzX2lub2RlX2lu Zm8gewoJIAoKCglfX3U2NCBmc2lkOwoJX191NjQgZmlsZWlkOwoKCSAKCgoJc3RydWN0IG5mc19m aAkJZmg7CgoJIAoKCgl1bnNpZ25lZCBzaG9ydAkJZmxhZ3M7CgoJIAoKCgoKCgoKCgoKCgoKCgoK CXVuc2lnbmVkIGxvbmcJCXJlYWRfY2FjaGVfamlmZmllczsKCV9fdTY0CQkJcmVhZF9jYWNoZV9j dGltZTsKCV9fdTY0CQkJcmVhZF9jYWNoZV9tdGltZTsKCV9fdTY0CQkJcmVhZF9jYWNoZV9pc2l6 ZTsKCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lbzsKCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lb190 aW1lc3RhbXA7CgoJIAoKCgoJX191MzIJCQljb29raWV2ZXJmWzJdOwoKCSAKCgoJc3RydWN0IGxp c3RfaGVhZAlyZWFkOwoJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eTsKCXN0cnVjdCBsaXN0X2hlYWQJ Y29tbWl0OwoJc3RydWN0IGxpc3RfaGVhZAl3cml0ZWJhY2s7CgoJdW5zaWduZWQgaW50CQlucmVh ZCwKCQkJCW5kaXJ0eSwKCQkJCW5jb21taXQsCgkJCQlucGFnZXM7CgoJIAoJc3RydWN0IGlub2Rl CQkqaGFzaF9uZXh0LAoJCQkJKmhhc2hfcHJldjsKCXVuc2lnbmVkIGxvbmcJCW5leHRzY2FuOwoK CSAKCXN0cnVjdCBycGNfY3JlZAkJKm1tX2NyZWQ7Cn07CgogCgoKCgoKCgoKIAoKCnN0cnVjdCBu ZnNfbG9ja19pbmZvIHsKCXUzMgkJc3RhdGU7Cgl1MzIJCWZsYWdzOwoJc3RydWN0IG5sbV9ob3N0 CSpob3N0Owp9OwoKIAoKCgoKCgojIDI5OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3Mv QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zeXN2X2ZzX2ku aCIgMQoKCgogCgoKc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyB7Cgl1MzIgaV9kYXRhWzEwKzErMSsx XTsJIAoKCgoKCXUzMiBpX2Rpcl9zdGFydF9sb29rdXA7Cn07CgoKCiMgMjk5ICIvaG9tZS9jYXJs b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAy CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs dWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYS5vdXQuaCIgMQoKCgoKCgoKIyAx ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9h c20vYS5vdXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51 eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL2Eub3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewogIHVu c2lnbmVkIGxvbmcgYV9pbmZvOwkJIAogIHVuc2lnbmVkIGFfdGV4dDsJCSAKICB1bnNpZ25lZCBh X2RhdGE7CQkgCiAgdW5zaWduZWQgYV9ic3M7CQkgCiAgdW5zaWduZWQgYV9zeW1zOwkJIAogIHVu c2lnbmVkIGFfZW50cnk7CQkgCiAgdW5zaWduZWQgYV90cnNpemU7CQkgCiAgdW5zaWduZWQgYV9k cnNpemU7CQkgCn07CgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2Eub3V0LmgiIDIKCiMgOCAiL2hvbWUvY2Fy bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYS5vdXQu aCIgMgoKCgoKIAplbnVtIG1hY2hpbmVfdHlwZSB7CgoKCiAgTV9PTERTVU4yID0gMCwKCgoKCiAg TV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAyLAoKCgoKICBNX1NQQVJDID0gMywKCiAgIAog IE1fMzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCSAKICBNX01JUFMyID0gMTUyCQkgCn07CgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiAKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIyAxMzkgIi9ob21lL2Nhcmxv cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Eub3V0Lmgi CgoKCgoKCgoKCgoKCiAKCgoKDAoKc3RydWN0IG5saXN0IHsKICB1bmlvbiB7CiAgICBjaGFyICpu X25hbWU7CiAgICBzdHJ1Y3Qgbmxpc3QgKm5fbmV4dDsKICAgIGxvbmcgbl9zdHJ4OwogIH0gbl91 bjsKICB1bnNpZ25lZCBjaGFyIG5fdHlwZTsKICBjaGFyIG5fb3RoZXI7CiAgc2hvcnQgbl9kZXNj OwogIHVuc2lnbmVkIGxvbmcgbl92YWx1ZTsKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgwKCiAKCgoKCnN0cnVjdCByZWxv Y2F0aW9uX2luZm8KewogICAKICBpbnQgcl9hZGRyZXNzOwogICAKICB1bnNpZ25lZCBpbnQgcl9z eW1ib2xudW06MjQ7CiAgIAoKCiAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKICAgCgogIHVuc2ln bmVkIGludCByX2xlbmd0aDoyOwogICAKCgoKCgogIHVuc2lnbmVkIGludCByX2V4dGVybjoxOwog ICAKCgoKCgoKICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKCn07CgoKCgojIDQgIi9ob21lL2Nhcmxv cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNf aS5oIiAyCgoKIAojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y LjQueC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0ICIvaG9tZS9j YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC90aW1l LmgiIDIKCgoKCgpzdHJ1Y3QgdGltZXNwZWMgewoJdGltZV90CXR2X3NlYzsJCSAKCWxvbmcJdHZf bnNlYzsJIAp9OwoKCgoKIAoKCgoKCgoKCgoKCgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQg bG9uZwp0aW1lc3BlY190b19qaWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsKCXVuc2ln bmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKCWxvbmcgbnNlYyA9IHZhbHVlLT50dl9uc2Vj OwoKCWlmIChzZWMgPj0gKCgofjBVTCA+PiAxKS0xKSAgLyAxMDAgKSkKCQlyZXR1cm4gKCh+MFVM ID4+IDEpLTEpIDsKCW5zZWMgKz0gMTAwMDAwMDAwMEwgLyAxMDAgIC0gMTsKCW5zZWMgLz0gMTAw MDAwMDAwMEwgLyAxMDAgOwoJcmV0dXJuIDEwMCAgKiBzZWMgKyBuc2VjOwp9CgpzdGF0aWMgX19p bmxpbmVfXyB2b2lkCmppZmZpZXNfdG9fdGltZXNwZWModW5zaWduZWQgbG9uZyBqaWZmaWVzLCBz dHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7Cgl2YWx1ZS0+dHZfbnNlYyA9IChqaWZmaWVzICUgMTAw ICkgKiAoMTAwMDAwMDAwMEwgLyAxMDAgKTsKCXZhbHVlLT50dl9zZWMgPSBqaWZmaWVzIC8gMTAw IDsKfQoKCiAKCgoKCgoKCgoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKbWt0aW1l ICh1bnNpZ25lZCBpbnQgeWVhciwgdW5zaWduZWQgaW50IG1vbiwKCXVuc2lnbmVkIGludCBkYXks IHVuc2lnbmVkIGludCBob3VyLAoJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykK ewoJaWYgKDAgPj0gKGludCkgKG1vbiAtPSAyKSkgewkgCgkJbW9uICs9IDEyOwkJIAoJCXllYXIg LT0gMTsKCX0KCglyZXR1cm4gKCgoCgkJKHVuc2lnbmVkIGxvbmcpICh5ZWFyLzQgLSB5ZWFyLzEw MCArIHllYXIvNDAwICsgMzY3Km1vbi8xMiArIGRheSkgKwoJCQl5ZWFyKjM2NSAtIDcxOTQ5OQoJ ICAgICkqMjQgKyBob3VyICAKCSAgKSo2MCArIG1pbiAgCgkpKjYwICsgc2VjOyAgCn0KCgoKCnN0 cnVjdCB0aW1ldmFsIHsKCXRpbWVfdAkJdHZfc2VjOwkJIAoJc3VzZWNvbmRzX3QJdHZfdXNlYzsJ IAp9OwoKc3RydWN0IHRpbWV6b25lIHsKCWludAl0el9taW51dGVzd2VzdDsJIAoJaW50CXR6X2Rz dHRpbWU7CSAKfTsKCgoKCmV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZh bCAqdHYpOwpleHRlcm4gdm9pZCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsK ZXh0ZXJuIHZvaWQgZ2V0X2Zhc3RfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9p ZCAoKmRvX2dldF9mYXN0X3RpbWUpKHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgoKCiAKCgoKCgoK CnN0cnVjdCAgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0ICB0aW1lc3BlYyBpdF9pbnRlcnZh bDsgICAgIAogICAgICAgIHN0cnVjdCAgdGltZXNwZWMgaXRfdmFsdWU7ICAgICAgICAKfTsKCnN0 cnVjdAlpdGltZXJ2YWwgewoJc3RydWN0CXRpbWV2YWwgaXRfaW50ZXJ2YWw7CSAKCXN0cnVjdAl0 aW1ldmFsIGl0X3ZhbHVlOwkgCn07CgoKIyA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgoKCgogCgoKCgoK CnN0cnVjdCBhZmZzX2V4dF9rZXkgewoJdTMyCWV4dDsJCQkJIAoJdTMyCWtleTsJCQkJIAp9OwoK IAoKCnN0cnVjdCBhZmZzX2lub2RlX2luZm8gewoJdTMyCSBpX29wZW5jbnQ7CglzdHJ1Y3Qgc2Vt YXBob3JlIGlfbGlua19sb2NrOwkJIAoJc3RydWN0IHNlbWFwaG9yZSBpX2V4dF9sb2NrOwkJIAoK CXUzMgkgaV9ibGtjbnQ7CQkJIAoJdTMyCSBpX2V4dGNudDsJCQkgCgl1MzIJKmlfbGM7CQkJCSAK CXUzMgkgaV9sY19zaXplOwoJdTMyCSBpX2xjX3NoaWZ0OwoJdTMyCSBpX2xjX21hc2s7CglzdHJ1 Y3QgYWZmc19leHRfa2V5ICppX2FjOwkJIAoJdTMyCSBpX2V4dF9sYXN0OwkJCSAKCXN0cnVjdCBi dWZmZXJfaGVhZCAqaV9leHRfYmg7CQkgCgl1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwoJdTMy CSBpX3Byb3RlY3Q7CQkJIAoJdTMyCSBpX2xhc3RhbGxvYzsJCQkgCglpbnQJIGlfcGFfY250OwkJ CSAKCgoKCgoKCgp9OwoKIAoKCgoKIyAzMDAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdWZzX2ZzX2ku aCIgMQogCgoKCgoKCgoKCgoKCgoKc3RydWN0IHVmc19pbm9kZV9pbmZvIHsKCXVuaW9uIHsKCQlf X3UzMglpX2RhdGFbMTVdOwoJCV9fdTgJaV9zeW1saW5rWzQqMTVdOwoJfSBpX3UxOwoJX191MzIJ aV9mbGFnczsKCV9fdTMyCWlfZ2VuOwoJX191MzIJaV9zaGFkb3c7CglfX3UzMglpX3VudXNlZDE7 CglfX3UzMglpX3VudXNlZDI7CglfX3UzMglpX29lZnRmbGFnOwoJX191MTYJaV9vc3luYzsKCV9f dTMyCWlfbGFzdGZyYWc7Cn07CgoKIyAzMDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZWZzX2ZzX2ku aCIgMQogCgoKCgoKCgoKCgp0eXBlZGVmCWludDMyX3QJCWVmc19ibG9ja190Owp0eXBlZGVmIHVp bnQzMl90CWVmc19pbm9fdDsKCgoKIAoKCnR5cGVkZWYgdW5pb24gZXh0ZW50X3UgewoJdW5zaWdu ZWQgY2hhciByYXdbOF07CglzdHJ1Y3QgZXh0ZW50X3MgewoJCXVuc2lnbmVkIGludAlleF9tYWdp Yzo4OwkgCgkJdW5zaWduZWQgaW50CWV4X2JuOjI0OwkgCgkJdW5zaWduZWQgaW50CWV4X2xlbmd0 aDo4OwkgCgkJdW5zaWduZWQgaW50CWV4X29mZnNldDoyNDsJIAoJfSBjb29rZWQ7Cn0gZWZzX2V4 dGVudDsKCnR5cGVkZWYgc3RydWN0IGVkZXZzIHsKCXNob3J0CQlvZGV2OwoJdW5zaWduZWQgaW50 CW5kZXY7Cn0gZWZzX2RldnM7CgogCgoKCnN0cnVjdAllZnNfZGlub2RlIHsKCXVfc2hvcnQJCWRp X21vZGU7CSAKCXNob3J0CQlkaV9ubGluazsJIAoJdV9zaG9ydAkJZGlfdWlkOwkJIAoJdV9zaG9y dAkJZGlfZ2lkOwkJIAoJaW50MzJfdAkJZGlfc2l6ZTsJIAoJaW50MzJfdAkJZGlfYXRpbWU7CSAK CWludDMyX3QJCWRpX210aW1lOwkgCglpbnQzMl90CQlkaV9jdGltZTsJIAoJdWludDMyX3QJZGlf Z2VuOwkJIAoJc2hvcnQJCWRpX251bWV4dGVudHM7CSAKCXVfY2hhcgkJZGlfdmVyc2lvbjsJIAoJ dV9jaGFyCQlkaV9zcGFyZTsJIAoJdW5pb24gZGlfYWRkciB7CgkJZWZzX2V4dGVudAlkaV9leHRl bnRzWzEyIF07CgkJZWZzX2RldnMJZGlfZGV2OwkgCgl9IGRpX3U7Cn07CgogCnN0cnVjdCBlZnNf aW5vZGVfaW5mbyB7CglpbnQJCW51bWV4dGVudHM7CglpbnQJCWxhc3RleHRlbnQ7CgoJZWZzX2V4 dGVudAlleHRlbnRzWzEyIF07Cn07CgoKCiMgMzAyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nh cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NvZGFf ZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9jb2RhLmgiIDEKIAoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKIyA5OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvbGludXgvY29kYS5oIgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIHVfcXVhZF90OwoKCgoKCgoKCgoKCgojIDEzMCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvY29kYS5oIgoKCgogCgoKCgoKCiAK CgoKCgoKCgogIAoKCgogCgoKCgoKCgoKCgpzdHJ1Y3QgdmVudXNfZGlyZW50IHsKICAgICAgICB1 bnNpZ25lZCBsb25nCWRfZmlsZW5vOwkJIAogICAgICAgIHVuc2lnbmVkIHNob3J0CWRfcmVjbGVu OwkJIAogICAgICAgIHVuc2lnbmVkIGNoYXIgCWRfdHlwZTsJCQkgCiAgICAgICAgdW5zaWduZWQg Y2hhcglkX25hbWxlbjsJCSAKICAgICAgICBjaGFyCQlkX25hbWVbMjU1ICArIDFdOyAKfTsKCgoK CiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgp0eXBlZGVmIHVfbG9uZyBWb2x1bWVJZDsKdHlwZWRl ZiB1X2xvbmcgVm5vZGVJZDsKdHlwZWRlZiB1X2xvbmcgVW5pcXVlX3Q7CnR5cGVkZWYgdV9sb25n IEZpbGVWZXJzaW9uOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgVmljZUZpZCB7CiAgICBWb2x1bWVJZCBW b2x1bWU7CiAgICBWbm9kZUlkIFZub2RlOwogICAgVW5pcXVlX3QgVW5pcXVlOwp9IFZpY2VGaWQ7 CgoKCgpzdGF0aWMgX19pbmxpbmVfXyBpbm9fdCAgY29kYV9mMmkoc3RydWN0IFZpY2VGaWQgKmZp ZCkKewoJaWYgKCAhIGZpZCApIAoJCXJldHVybiAwOyAKCWlmIChmaWQtPlZub2RlID09IDB4ZmZm ZmZmZmUgfHwgZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZmKQoJCXJldHVybiAoKGZpZC0+Vm9sdW1l IDw8IDIwKSB8IChmaWQtPlVuaXF1ZSAmIDB4ZmZmZmYpKTsKCWVsc2UKCQlyZXR1cm4gKGZpZC0+ VW5pcXVlICsgKGZpZC0+Vm5vZGU8PDEwKSArIChmaWQtPlZvbHVtZTw8MjApKTsKfQoJCgoKCgoK CgoKdHlwZWRlZiB1X2ludDMyX3QgdnVpZF90Owp0eXBlZGVmIHVfaW50MzJfdCB2Z2lkX3Q7CgoK CgpzdHJ1Y3QgY29kYV9jcmVkIHsKICAgIHZ1aWRfdCBjcl91aWQsIGNyX2V1aWQsIGNyX3N1aWQs IGNyX2ZzdWlkOyAgCiAgICB2Z2lkX3QgY3JfZ3JvdXBpZCwgICAgIGNyX2VnaWQsIGNyX3NnaWQs IGNyX2ZzZ2lkOyAgCn07CgoKCgogCgoKZW51bSBjb2RhX3Z0eXBlCXsgQ19WTk9OLCBDX1ZSRUcs IENfVkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09DSywgQ19WRklGTywgQ19WQkFE IH07CgpzdHJ1Y3QgY29kYV92YXR0ciB7Cglsb25nICAgICAJdmFfdHlwZTsJIAoJdV9zaG9ydAkJ dmFfbW9kZTsJIAoJc2hvcnQJCXZhX25saW5rOwkgCgl2dWlkX3QJCXZhX3VpZDsJCSAKCXZnaWRf dAkJdmFfZ2lkOwkJIAoJbG9uZwkJdmFfZmlsZWlkOwkgCgl1X3F1YWRfdAl2YV9zaXplOwkgCgls b25nCQl2YV9ibG9ja3NpemU7CSAKCXN0cnVjdCB0aW1lc3BlYwl2YV9hdGltZTsJIAoJc3RydWN0 IHRpbWVzcGVjCXZhX210aW1lOwkgCglzdHJ1Y3QgdGltZXNwZWMJdmFfY3RpbWU7CSAKCXVfbG9u ZwkJdmFfZ2VuOwkJIAoJdV9sb25nCQl2YV9mbGFnczsJIAoJdV9xdWFkX3QgCSAgICAgICAgdmFf cmRldjsJIAoJdV9xdWFkX3QJdmFfYnl0ZXM7CSAKCXVfcXVhZF90CXZhX2ZpbGVyZXY7CSAKfTsK CgoKIApzdHJ1Y3QgY29kYV9zdGF0ZnMgewogICAgaW50MzJfdCBmX2Jsb2NrczsKICAgIGludDMy X3QgZl9iZnJlZTsKICAgIGludDMyX3QgZl9iYXZhaWw7CiAgICBpbnQzMl90IGZfZmlsZXM7CiAg ICBpbnQzMl90IGZfZmZyZWU7Cn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QgY29kYV9pbl9oZHIgewogICAgdW5zaWduZWQg bG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsJICAgICAKICAgIHVfc2hvcnQg cGlkOwkJICAgICAKICAgIHVfc2hvcnQgcGdpZDsJCSAgICAgCiAgICB1X3Nob3J0IHNpZDsgICAg ICAgICAgICAgICAgICAgICAKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsJICAgICAKfTsKCiAK c3RydWN0IGNvZGFfb3V0X2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29kZTsKICAgIHVuc2ln bmVkIGxvbmcgdW5pcXVlOwkKICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0Owp9OwoKIApzdHJ1Y3Qg Y29kYV9yb290X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBW RmlkOwp9OwoKc3RydWN0IGNvZGFfcm9vdF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47 Cn07CgogCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog ICAgVmljZUZpZAlWRmlkOwogICAgaW50CWZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9vdXQg ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHVfcXVhZF90IAlkZXY7CiAgICBpbm9f dAlpbm9kZTsKfTsKCgogCnN0cnVjdCBjb2RhX3N0b3JlX2luIHsKICAgIHN0cnVjdCBjb2RhX2lu X2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2Rh X3N0b3JlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNv ZGFfcmVsZWFzZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZG aWQ7CiAgICBpbnQJZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAgICBzdHJ1 Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfY2xvc2VfaW4gewogICAgc3Ry dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50CWZsYWdzOwp9OwoK c3RydWN0IGNvZGFfY2xvc2Vfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoK IApzdHJ1Y3QgY29kYV9pb2N0bF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBW aWNlRmlkIFZGaWQ7CiAgICBpbnQJY21kOwogICAgaW50CWxlbjsKICAgIGludAlyd2ZsYWc7CiAg ICBjaGFyICpkYXRhOwkJCSAKfTsKCnN0cnVjdCBjb2RhX2lvY3RsX291dCB7CiAgICBzdHJ1Y3Qg Y29kYV9vdXRfaGRyIG9oOwogICAgaW50CWxlbjsKICAgIGNhZGRyX3QJZGF0YTsJCSAKfTsKCgog CnN0cnVjdCBjb2RhX2dldGF0dHJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAg VmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNv ZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKIApzdHJ1Y3Qg Y29kYV9zZXRhdHRyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg VkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgpzdHJ1Y3QgY29kYV9zZXRhdHRy X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfYWNj ZXNzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAg IGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vzc19vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvdXQ7Cn07CgoKIAoKCgogCnN0cnVjdCAgY29kYV9sb29rdXBfaW4gewogICAgc3Ry dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50ICAgICAgICAgbmFt ZTsJCSAKICAgIGludCAgICAgICAgIGZsYWdzOwkKfTsKCnN0cnVjdCBjb2RhX2xvb2t1cF9vdXQg ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludAl2 dHlwZTsKfTsKCgogCnN0cnVjdCBjb2RhX2NyZWF0ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9o ZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAg aW50IGV4Y2w7CiAgICBpbnQgbW9kZTsKICAgIGludCAJbmFtZTsJCSAKfTsKCnN0cnVjdCBjb2Rh X2NyZWF0ZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZp ZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKIApzdHJ1Y3QgY29kYV9yZW1vdmVf aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50 IG5hbWU7CQkgCn07CgpzdHJ1Y3QgY29kYV9yZW1vdmVfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291 dF9oZHIgb3V0Owp9OwoKIApzdHJ1Y3QgY29kYV9saW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2lu X2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNlRmlkOyAgICAgICAgICAgCiAgICBWaWNlRmlkIGRl c3RGaWQ7ICAgICAgICAgICAgIAogICAgaW50IHRuYW1lOwkJIAp9OwoKc3RydWN0IGNvZGFfbGlu a19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKIApzdHJ1Y3QgY29kYV9y ZW5hbWVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlzb3VyY2VG aWQ7CiAgICBpbnQgCXNyY25hbWU7CiAgICBWaWNlRmlkIGRlc3RGaWQ7CiAgICBpbnQgCWRlc3Ru YW1lOwp9OwoKc3RydWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG91dDsKfTsKCiAKc3RydWN0IGNvZGFfbWtkaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRy IGloOwogICAgVmljZUZpZAlWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKICAgIGlu dAkgICBuYW1lOwkJIAp9OwoKc3RydWN0IGNvZGFfbWtkaXJfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRy Owp9OwoKCiAKc3RydWN0IGNvZGFfcm1kaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGlo OwogICAgVmljZUZpZAlWRmlkOwogICAgaW50IG5hbWU7CQkgCn07CgpzdHJ1Y3QgY29kYV9ybWRp cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBjb2RhX3N5 bWxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOyAg ICAgICAgICAgCiAgICBpbnQgc3JjbmFtZTsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAg ICBpbnQgdG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9zeW1saW5rX291dCB7CiAgICBzdHJ1Y3QgY29k YV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gewogICAgc3RydWN0 IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfcmVhZGxp bmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQJY291bnQ7CiAgICBj YWRkcl90CWRhdGE7CQkgCn07CgoKIApzdHJ1Y3QgY29kYV9mc3luY19pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9mc3luY19v dXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBjb2RhX3ZnZXRf aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3Ry dWN0IGNvZGFfdmdldF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VG aWQgVkZpZDsKICAgIGludAl2dHlwZTsKfTsKCgogCiAKIAoKIAogCnN0cnVjdCBjb2RhX3B1cmdl dXNlcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX2Ny ZWQgY3JlZDsKfTsKCiAKIApzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB7ICAKICAgIHN0cnVjdCBj b2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7Cn07CgogCiAJCnN0cnVjdCBjb2Rh X3phcGRpcl9vdXQgewkgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQg Q29kYUZpZDsKfTsKCiAKIAkKc3RydWN0IGNvZGFfemFwdm5vZGVfb3V0IHsgCiAgICBzdHJ1Y3Qg Y29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwogICAgVmljZUZpZCBW RmlkOwp9OwoKIAogCQpzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgeyAKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7Cn07CgogCiAJCnN0cnVjdCBjb2RhX3Jl cGxhY2Vfb3V0IHsgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgTmV3 RmlkOwogICAgVmljZUZpZCBPbGRGaWQ7Cn07CgogCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4g ewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCAgICBWRmlkOwogICAgaW50 ICAgICAgICBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IHsKICAgIHN0cnVj dCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQgZmQ7CgoKICAgIHN0cnVjdCBmaWxlICpmaDsgIAoK fTsKCiAKc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hk ciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29w ZW5fYnlfcGF0aF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKCWludCBwYXRoOwp9 OwoKIApzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGluOwp9 OwoKc3RydWN0IGNvZGFfc3RhdGZzX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwog ICAgc3RydWN0IGNvZGFfc3RhdGZzIHN0YXQ7Cn07CgogCgoKCgoKCnVuaW9uIGlucHV0QXJncyB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CQkgCiAgICBzdHJ1Y3QgY29kYV9vcGVuX2luIGNv ZGFfb3BlbjsKICAgIHN0cnVjdCBjb2RhX3N0b3JlX2luIGNvZGFfc3RvcmU7CiAgICBzdHJ1Y3Qg Y29kYV9yZWxlYXNlX2luIGNvZGFfcmVsZWFzZTsKICAgIHN0cnVjdCBjb2RhX2Nsb3NlX2luIGNv ZGFfY2xvc2U7CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9pbiBjb2RhX2lvY3RsOwogICAgc3RydWN0 IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9zZXRhdHRyX2lu IGNvZGFfc2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2FjY2Vzc19pbiBjb2RhX2FjY2VzczsKICAg IHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsKICAgIHN0cnVjdCBjb2RhX2NyZWF0 ZV9pbiBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBjb2RhX3JlbW92ZV9pbiBjb2RhX3JlbW92ZTsK ICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOwogICAgc3RydWN0IGNvZGFfcmVuYW1l X2luIGNvZGFfcmVuYW1lOwogICAgc3RydWN0IGNvZGFfbWtkaXJfaW4gY29kYV9ta2RpcjsKICAg IHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CiAgICBzdHJ1Y3QgY29kYV9zeW1saW5r X2luIGNvZGFfc3ltbGluazsKICAgIHN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIGNvZGFfcmVhZGxp bms7CiAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOwogICAgc3RydWN0IGNvZGFf dmdldF9pbiBjb2RhX3ZnZXQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX2luIGNvZGFfb3Bl bl9ieV9mZDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiBjb2RhX29wZW5fYnlfcGF0 aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19pbiBjb2RhX3N0YXRmczsKfTsKCnVuaW9uIG91dHB1 dEFyZ3MgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsJCSAKICAgIHN0cnVjdCBjb2RhX3Jv b3Rfb3V0IGNvZGFfcm9vdDsKICAgIHN0cnVjdCBjb2RhX29wZW5fb3V0IGNvZGFfb3BlbjsKICAg IHN0cnVjdCBjb2RhX2lvY3RsX291dCBjb2RhX2lvY3RsOwogICAgc3RydWN0IGNvZGFfZ2V0YXR0 cl9vdXQgY29kYV9nZXRhdHRyOwogICAgc3RydWN0IGNvZGFfbG9va3VwX291dCBjb2RhX2xvb2t1 cDsKICAgIHN0cnVjdCBjb2RhX2NyZWF0ZV9vdXQgY29kYV9jcmVhdGU7CiAgICBzdHJ1Y3QgY29k YV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKICAgIHN0cnVjdCBjb2RhX3JlYWRsaW5rX291dCBjb2Rh X3JlYWRsaW5rOwogICAgc3RydWN0IGNvZGFfdmdldF9vdXQgY29kYV92Z2V0OwogICAgc3RydWN0 IGNvZGFfcHVyZ2V1c2VyX291dCBjb2RhX3B1cmdldXNlcjsKICAgIHN0cnVjdCBjb2RhX3phcGZp bGVfb3V0IGNvZGFfemFwZmlsZTsKICAgIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgY29kYV96YXBk aXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgY29kYV96YXB2bm9kZTsKICAgIHN0cnVj dCBjb2RhX3B1cmdlZmlkX291dCBjb2RhX3B1cmdlZmlkOwogICAgc3RydWN0IGNvZGFfcmVwbGFj ZV9vdXQgY29kYV9yZXBsYWNlOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgY29kYV9v cGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCBjb2RhX29wZW5fYnlf cGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19vdXQgY29kYV9zdGF0ZnM7Cn07ICAgIAoKdW5p b24gY29kYV9kb3duY2FsbHMgewogICAgIAogICAgIAogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2Vy X291dCBwdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogICAg c3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9v dXQgemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAgICBz dHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCiAKCgoKCnN0cnVjdCBWaWNlSW9j dGwgewogICAgICAgIGNhZGRyX3QgaW4sIG91dDsgICAgICAgICAKICAgICAgICBzaG9ydCBpbl9z aXplOyAgICAgICAgICAgCiAgICAgICAgc2hvcnQgb3V0X3NpemU7ICAgICAgICAgIAp9OwoKc3Ry dWN0IFBpb2N0bERhdGEgewogICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7CiAgICAgICAgaW50IGZv bGxvdzsKICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOwp9OwoKCgoKCgoKCgoKCgoKCiAKCgoK c3RydWN0IGNvZGFfbW91bnRfZGF0YSB7CglpbnQJCXZlcnNpb247CglpbnQJCWZkOyAgICAgICAg Cn07CgoKCiMgMTQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCgoKIAoKCnN0cnVjdCBjb2RhX2lub2RlX2lu Zm8gewogICAgICAgIHN0cnVjdCBWaWNlRmlkICAgICBjX2ZpZDsJIAogICAgICAgIHVfc2hvcnQJ ICAgICAgICAgICBjX2ZsYWdzOyAgICAgIAoJc3RydWN0IGxpc3RfaGVhZCAgIGNfY2lsaXN0OyAg ICAgCglzdHJ1Y3QgZmlsZQkgICpjX2NvbnRhaW5lcjsgIAoJdW5zaWduZWQgaW50ICAgICAgIGNf Y29udGNvdW50OyAgCiAgICAgICAgc3RydWN0IGNvZGFfY3JlZCAgIGNfY2FjaGVkX2NyZWQ7ICAK ICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY19jYWNoZWRfcGVybTsgIAp9OwoKIAoKCgoKCmlu dCBjb2RhX2Nub2RlX21ha2Uoc3RydWN0IGlub2RlICoqLCBzdHJ1Y3QgVmljZUZpZCAqLCBzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKik7CmludCBjb2RhX2Nub2RlX21ha2VjdGwoc3RydWN0IGlub2RlICoq aW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpzdHJ1Y3QgaW5vZGUgKmNvZGFfZmlkX3Rv X2lub2RlKFZpY2VGaWQgKmZpZCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnZvaWQgY29kYV9y ZXBsYWNlX2ZpZChzdHJ1Y3QgaW5vZGUgKiwgVmljZUZpZCAqLCBWaWNlRmlkICopOwoKCgojIDMw MyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv bGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu dXgtMi40LngvaW5jbHVkZS9saW51eC9yb21mc19mc19pLmgiIDEKCgoKIAoKc3RydWN0IHJvbWZz X2lub2RlX2luZm8gewoJdW5zaWduZWQgbG9uZyBpX21ldGFzaXplOwkgCgl1bnNpZ25lZCBsb25n IGlfZGF0YW9mZnNldDsJIAp9OwoKCiMgMzA0ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxv cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NobWVtX2Zz LmgiIDEKCgoKIAoKCgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNpZ25lZCBsb25nIHZh bDsKfSBzd3BfZW50cnlfdDsKCmV4dGVybiBhdG9taWNfdCBzaG1lbV9ucnBhZ2VzOwoKc3RydWN0 IHNobWVtX2lub2RlX2luZm8gewoJc3BpbmxvY2tfdAkJbG9jazsKCXN0cnVjdCBzZW1hcGhvcmUg CXNlbTsKCXVuc2lnbmVkIGxvbmcJCW5leHRfaW5kZXg7Cglzd3BfZW50cnlfdAkJaV9kaXJlY3Rb MTYgXTsgIAoJdm9pZAkJICAgICAgKippX2luZGlyZWN0OyAgCgl1bnNpZ25lZCBsb25nCQlzd2Fw cGVkOwoJaW50CQkJbG9ja2VkOyAgICAgIAoJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwoJc3RydWN0 IGlub2RlCSAgICAgICAqaW5vZGU7Cn07CgpzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7Cgl1bnNpZ25l ZCBsb25nIG1heF9ibG9ja3M7ICAgIAoJdW5zaWduZWQgbG9uZyBmcmVlX2Jsb2NrczsgICAKCXVu c2lnbmVkIGxvbmcgbWF4X2lub2RlczsgICAgCgl1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOyAg IAoJc3BpbmxvY2tfdCAgICBzdGF0X2xvY2s7Cn07CgoKCgojIDMwNSAiL2hvbWUvY2FybG9zL0J1 aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAx ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s aW51eC9zbWJfZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3Qgc21iX2lub2RlX2lu Zm8gewoKCSAKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgb3BlbjsJIAoJX191MTYgZmlsZWlkOwkJ IAoJX191MTYgYXR0cjsJCSAKCglfX3UxNiBhY2Nlc3M7CQkgCglfX3UxNiBmbGFnczsKCXVuc2ln bmVkIGxvbmcgb2xkbXRpbWU7CSAKCXVuc2lnbmVkIGxvbmcgY2xvc2VkOwkgCgl1bnNpZ25lZCBv cGVuZXJzOwkgCn07CgoKCiMgMzA2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVj bGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiIDEK IAoKCgoKCgoKCgoKCgogCgoKCgpzdHJ1Y3QgaGZzX2lub2RlX2luZm8gewoJaW50CQkJCW1hZ2lj OyAgICAgIAoKCXVuc2lnbmVkIGxvbmcJCQltbXVfcHJpdmF0ZTsKCXN0cnVjdCBoZnNfY2F0X2Vu dHJ5CQkqZW50cnk7CgoJIAoJc3RydWN0IGhmc19mb3JrIAkJKmZvcms7CglpbnQJCQkJY29udmVy dDsKCgkgCglpbm9fdAkJCQlmaWxlX3R5cGU7CgljaGFyCQkJCWRpcl9zaXplOwoKCSAKCWNvbnN0 IHN0cnVjdCBoZnNfaGRyX2xheW91dAkqZGVmYXVsdF9sYXlvdXQ7CglzdHJ1Y3QgaGZzX2hkcl9s YXlvdXQJCSpsYXlvdXQ7CgoJIAoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0el9z ZWNvbmRzd2VzdDsKCiAgICAgICAgIAogICAgICAgIHZvaWQgKCpkX2Ryb3Bfb3ApKHN0cnVjdCBk ZW50cnkgKiwgY29uc3QgaW5vX3QpOwp9OwoKCiMgMzA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21l L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Fk ZnNfZnNfaS5oIiAxCiAKCgoKCgoKCgogCgoKc3RydWN0IGFkZnNfaW5vZGVfaW5mbyB7Cgl1bnNp Z25lZCBsb25nCW1tdV9wcml2YXRlOwoJdW5zaWduZWQgbG9uZwlwYXJlbnRfaWQ7CSAKCV9fdTMy CQlsb2FkYWRkcjsJIAoJX191MzIJCWV4ZWNhZGRyOwkgCgl1bnNpZ25lZCBpbnQJZmlsZXR5cGU7 CSAKCXVuc2lnbmVkIGludAlhdHRyOwkJIAoJaW50CQlzdGFtcGVkOjE7CSAKfTsKCgojIDMwOCAi L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu dXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt Mi40LngvaW5jbHVkZS9saW51eC9xbng0X2ZzX2kuaCIgMQogCgoKCgoKCgoKCgoKCiMgMSAiL2hv bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv cW54dHlwZXMuaCIgMQogCgoKCgoKCgoKCgoKCgp0eXBlZGVmIF9fdTE2IHFueDRfbnh0bnRfdDsK dHlwZWRlZiBfX3U4ICBxbng0X2Z0eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglfX3UzMiB4dG50 X2JsazsKCV9fdTMyIHh0bnRfc2l6ZTsKfSBxbng0X3h0bnRfdDsKCnR5cGVkZWYgX191MTYgcW54 NF9tb2RlX3Q7CnR5cGVkZWYgX191MTYgcW54NF9tdWlkX3Q7CnR5cGVkZWYgX191MTYgcW54NF9t Z2lkX3Q7CnR5cGVkZWYgX191MzIgcW54NF9vZmZfdDsKdHlwZWRlZiBfX3UxNiBxbng0X25saW5r X3Q7CgoKIyAxNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDIKCgogCgoKc3RydWN0IHFueDRfaW5vZGVfaW5m byB7CgljaGFyCQlpX3Jlc2VydmVkWzE2XTsJIAoJcW54NF9vZmZfdAlpX3NpemU7CQkgCglxbng0 X3h0bnRfdAlpX2ZpcnN0X3h0bnQ7CSAKCV9fdTMyCQlpX3hibGs7CQkgCglfX3MzMgkJaV9mdGlt ZTsJIAoJX19zMzIJCWlfbXRpbWU7CSAKCV9fczMyCQlpX2F0aW1lOwkgCglfX3MzMgkJaV9jdGlt ZTsJIAoJcW54NF9ueHRudF90CWlfbnVtX3h0bnRzOwkgCglxbng0X21vZGVfdAlpX21vZGU7CQkg Cglxbng0X211aWRfdAlpX3VpZDsJCSAKCXFueDRfbWdpZF90CWlfZ2lkOwkJIAoJcW54NF9ubGlu a190CWlfbmxpbms7CSAKCV9fdTgJCWlfemVyb1s0XTsJIAoJcW54NF9mdHlwZV90CWlfdHlwZTsJ CSAKCV9fdTgJCWlfc3RhdHVzOwkgCgl1bnNpZ25lZCBsb25nCW1tdV9wcml2YXRlOwp9OwoKCiMg MzA5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk ZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIgMQoKCgoKCiAKdHlwZWRl ZiBlbnVtIHsKICAgICAKCgogICAgaV9pdGVtX2tleV92ZXJzaW9uX21hc2sgICAgPSAgMHgwMDAx LAogICAgIAoKICAgIGlfc3RhdF9kYXRhX3ZlcnNpb25fbWFzayAgID0gIDB4MDAwMiwKICAgICAK ICAgIGlfcGFja19vbl9jbG9zZV9tYXNrICAgICAgID0gIDB4MDAwNCwKICAgICAKICAgIGlfbm9w YWNrX21hc2sgICAgICAgICAgICAgID0gIDB4MDAwOCwKICAgICAKCgogICAgaV9saW5rX3NhdmVk X3VubGlua19tYXNrICAgPSAgMHgwMDEwLAogICAgaV9saW5rX3NhdmVkX3RydW5jYXRlX21hc2sg PSAgMHgwMDIwCn0gcmVpc2VyZnNfaW5vZGVfZmxhZ3M7CgoKc3RydWN0IHJlaXNlcmZzX2lub2Rl X2luZm8gewogICAgX191MzIgaV9rZXkgWzRdOyAKICAKICAgICAKCiAgICBfX3UzMiBpX2ZsYWdz OwoKICAgIF9fdTMyIGlfZmlyc3RfZGlyZWN0X2J5dGU7ICAKCiAgICBpbnQgaV9wcmVhbGxvY19i bG9jazsgIAogICAgaW50IGlfcHJlYWxsb2NfY291bnQ7ICAKICAgIHN0cnVjdCBsaXN0X2hlYWQg aV9wcmVhbGxvY19saXN0OwkgCgogIAogICAgIAoKCiAgICB1bnNpZ25lZCBsb25nIGlfdHJhbnNf aWQgOwogICAgdW5zaWduZWQgbG9uZyBpX3RyYW5zX2luZGV4IDsKfTsKCgoKIyAzMTAgIi9ob21l L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54 L2luY2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIgMQogCgoKCgoKCgogCgoKc3RydWN0IGJmc19pbm9k ZV9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAgCgl1bnNpZ25lZCBsb25nIGlfc2Js b2NrOwoJdW5zaWduZWQgbG9uZyBpX2VibG9jazsKfTsKCgojIDMxMSAiL2hvbWUvY2FybG9zL0J1 aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAx ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s aW51eC91ZGZfZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0 CnsKCV9fdTMyIGxvZ2ljYWxCbG9ja051bTsKCV9fdTE2IHBhcnRpdGlvblJlZmVyZW5jZU51bTsK fSBsYl9hZGRyOwoKCnN0cnVjdCB1ZGZfaW5vZGVfaW5mbwp7Cglsb25nIGlfdW10aW1lOwoJbG9u ZyBpX3VjdGltZTsKCWxvbmcgaV9jcnRpbWU7Cglsb25nIGlfdWNydGltZTsKCSAKCWxiX2FkZHIg aV9sb2NhdGlvbjsKCV9fdTY0IGlfdW5pcXVlOwoJX191MzIgaV9sZW5FQXR0cjsKCV9fdTMyIGlf bGVuQWxsb2M7CglfX3U2NCBpX2xlbkV4dGVudHM7CglfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7 CglfX3UzMiBpX25leHRfYWxsb2NfZ29hbDsKCXVuc2lnbmVkIGlfYWxsb2NfdHlwZSA6IDM7Cgl1 bnNpZ25lZCBpX2V4dGVuZGVkX2ZlIDogMTsKCXVuc2lnbmVkIGlfc3RyYXRfNDA5NiA6IDE7Cgl1 bnNpZ25lZCBpX25ld19pbm9kZSA6IDE7Cgl1bnNpZ25lZCByZXNlcnZlZCA6IDI2Owp9OwoKCgog CgoKCgoKCgojIDMxMiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu NC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIiAxCiAKCgoKCgoK CgoKCgogCgoKCnN0cnVjdCBuY3BfaW5vZGVfaW5mbyB7CglfX3UzMglkaXJFbnROdW0gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CglfX3UzMglEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CglfX3UzMgl2b2xOdW1iZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMglud2F0 dHI7CglzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwoJYXRvbWljX3QJb3BlbmVkOwoJaW50CWFj Y2VzczsKCV9fdTMyCXNlcnZlcl9maWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK CV9fdTgJb3Blbl9jcmVhdGVfYWN0aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OAlm aWxlX2hhbmRsZVs2XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKCiMgMzEzICIvaG9t ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9m cy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu eC9pbmNsdWRlL2xpbnV4L3Byb2NfZnNfaS5oIiAxCnN0cnVjdCBwcm9jX2lub2RlX2luZm8gewoJ c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwoJaW50IHR5cGU7Cgl1bmlvbiB7CgkJaW50ICgqcHJv Y19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiosIHN0cnVjdCB2ZnNt b3VudCAqKik7CgkJaW50ICgqcHJvY19yZWFkKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNo YXIgKnBhZ2UpOwoJfSBvcDsKCXN0cnVjdCBmaWxlICpmaWxlOwp9OwojIDMxNCAiL2hvbWUvY2Fy bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIg MgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j bHVkZS9saW51eC91c2JkZXZfZnNfaS5oIiAxCnN0cnVjdCB1c2JfZGV2aWNlOwpzdHJ1Y3QgdXNi X2J1czsKCnN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB7CglzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0 OwoJc3RydWN0IGxpc3RfaGVhZCBzbGlzdDsKCXVuaW9uIHsKCQlzdHJ1Y3QgdXNiX2RldmljZSAq ZGV2OwoJCXN0cnVjdCB1c2JfYnVzICpidXM7Cgl9IHA7Cn07CiMgMzE1ICIvaG9tZS9jYXJsb3Mv QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoj IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl L2xpbnV4L2pmZnMyX2ZzX2kuaCIgMQogCgoKCgogCgoKCgoKCgoKCnN0cnVjdCBqZmZzMl9pbm9k ZV9pbmZvIHsKCgoKCSAKCgoKCgoJc3RydWN0IHNlbWFwaG9yZSBzZW07CgoJIAoJX191MzIgaGln aGVzdF92ZXJzaW9uOwoKCSAKCXN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0OwoKCSAK CgoJIAoKCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICptZXRhZGF0YTsKCgkgCglzdHJ1Y3QgamZm czJfZnVsbF9kaXJlbnQgKmRlbnRzOwoKCSAKCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaW5v Y2FjaGU7CgoJIAoKCgkgCglfX3UxNiBmbGFnczsKCV9fdTggdXNlcmNvbXByOwp9OwoKCgoKCgoK CgojIDMxNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu Y2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs LXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9jcmFtZnNfZnNfc2IuaCIgMQoKCgogCgoKc3Ry dWN0IGNyYW1mc19zYl9pbmZvIHsKCQkJdW5zaWduZWQgbG9uZyBtYWdpYzsKCQkJdW5zaWduZWQg bG9uZyBzaXplOwoJCQl1bnNpZ25lZCBsb25nIGJsb2NrczsKCQkJdW5zaWduZWQgbG9uZyBmaWxl czsKCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKfTsKCgojIDMxNyAiL2hvbWUvY2FybG9zL0J1aWxk cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCiAKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCnN0cnVjdCBpYXR0ciB7Cgl1bnNpZ25lZCBpbnQJaWFfdmFs aWQ7Cgl1bW9kZV90CQlpYV9tb2RlOwoJdWlkX3QJCWlhX3VpZDsKCWdpZF90CQlpYV9naWQ7Cgls b2ZmX3QJCWlhX3NpemU7Cgl0aW1lX3QJCWlhX2F0aW1lOwoJdGltZV90CQlpYV9tdGltZTsKCXRp bWVfdAkJaWFfY3RpbWU7Cgl1bnNpZ25lZCBpbnQJaWFfYXR0cl9mbGFnczsKfTsKCiAKCgoKCgoK CgogCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv aW5jbHVkZS9saW51eC9xdW90YS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu NC54L2luY2x1ZGUvbGludXgvZXJybm8uaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9lcnJuby5