Date: Wed, 19 Apr 2006 13:39:52 -0700 From: "David Kirchner" <dpk@dpk.net> To: arch@freebsd.org Subject: Add some more information in the ktrace(1)/kdump(1) output Message-ID: <35c231bf0604191339m598d9b7n6681421403d5d4e1@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
------=_Part_14898_9999084.1145479192476 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Please Cc: me on replies as I am not a member of this list. I'm working with Alexander Leidinger <netchild@freebsd.org> on the ktrace project mentioned on the ideas page. I've attached a patch, made against 6.1-RC (and should work against -CURRENT). The patch modifies kdump output to use strings instead of numbers for every(I believe) relevant syscall. For example, the output before: 32229 telnet CALL mmap(0,0x8000,0x3,0x1002,0xffffffff,0,0,0) 32229 telnet CALL open(0x2807bc28,0,0x1b6) 32229 telnet CALL socket(0x2,0x2,0) is now: 32229 telnet CALL=20 mmap(0,0x8000,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,0xffffffff,0,0,0) 32229 telnet CALL open(0x2807bc28,O_RDONLY,<unused>0x1b6) 32229 telnet CALL socket(PF_INET,SOCK_DGRAM,0) I'd appreciate any feedback you may have. This is just one half of the project; the other half will involve updating the kernel to include more data in the dump output. I'm thinking, specifically, adding KTR_STAT for stat() results and KTR_SOCKADDR for connect(), bind() arguments, and accept() results. ------=_Part_14898_9999084.1145479192476 Content-Type: text/x-patch; name="kdump.20060419.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kdump.20060419.patch" X-Attachment-Id: f_em84qbwt ZGlmZiAtdXJOIGtkdW1wLm9yaWcvTWFrZWZpbGUga2R1bXAvTWFrZWZpbGUKLS0tIGtkdW1wLm9y aWcvTWFrZWZpbGUJVHVlIEp1bCAyMyAwMjoxNTo0NSAyMDAyCisrKyBrZHVtcC9NYWtlZmlsZQlU dWUgQXByIDE4IDE0OjE1OjI5IDIwMDYKQEAgLTQsMTIgKzQsMTUgQEAKIC5QQVRIOiAkey5DVVJE SVJ9Ly4uL2t0cmFjZQogCiBQUk9HPQkJa2R1bXAKLVNSQ1M9CQlrZHVtcC5jIGlvY3RsLmMgc3Vi ci5jCi1DRkxBR1MrPQktSSR7LkNVUkRJUn0vLi4va3RyYWNlIC1JJHsuQ1VSRElSfS8uLi8uLgor U1JDUz0JCWtkdW1wLmMgaW9jdGwuYyBrZHVtcF9zdWJyLmMgc3Vici5jCitDRkxBR1MrPQktSSR7 LkNVUkRJUn0vLi4va3RyYWNlIC1JJHsuQ1VSRElSfSAtSSR7LkNVUkRJUn0vLi4vLi4KIAotQ0xF QU5GSUxFUz0JaW9jdGwuYworQ0xFQU5GSUxFUz0JaW9jdGwuYyBrZHVtcF9zdWJyLmMKIAogaW9j dGwuYzogbWtpb2N0bHMKIAlzaCAkey5DVVJESVJ9L21raW9jdGxzICR7REVTVERJUn0vdXNyL2lu Y2x1ZGUgPiAkey5UQVJHRVR9CisKK2tkdW1wX3N1YnIuYzogbWtzdWJyCisJc2ggJHsuQ1VSRElS fS9ta3N1YnIgJHtERVNURElSfS91c3IvaW5jbHVkZSA+ICR7LlRBUkdFVH0KIAogLmluY2x1ZGUg PGJzZC5wcm9nLm1rPgpkaWZmIC11ck4ga2R1bXAub3JpZy9rZHVtcC5jIGtkdW1wL2tkdW1wLmMK LS0tIGtkdW1wLm9yaWcva2R1bXAuYwlNb24gRmViIDEzIDE5OjI4OjMxIDIwMDYKKysrIGtkdW1w L2tkdW1wLmMJVHVlIEFwciAxOCAxNDowNjoyNiAyMDA2CkBAIC02Niw2ICs2Niw3IEBACiAjaW5j bHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8dmlzLmg+CiAjaW5jbHVkZSAia3RyYWNlLmgiCisj aW5jbHVkZSAia2R1bXBfc3Vici5oIgogCiBpbnQgZnJlYWRfdGFpbCh2b2lkICosIGludCwgaW50 KTsKIHZvaWQgZHVtcGhlYWRlcihzdHJ1Y3Qga3RyX2hlYWRlciAqKTsKQEAgLTMyMCwxNCArMzIx LDIwIEBACiAJaWYgKG5hcmcpIHsKIAkJY2hhciBjID0gJygnOwogCQlpZiAoZmFuY3kpIHsKKwor I2RlZmluZSBwcmludF9udW1iZXIoaSxuLGMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgXAor CWlmIChkZWNpbWFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSh2b2lk KXByaW50ZigiJWMlbGQiLCBjLCAobG9uZykqaSk7ICAgXAorCWVsc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSh2b2lkKXByaW50ZigiJWMlI2x4IiwgYywg KGxvbmcpKmkpOyAgXAorCWkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisJbi0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KwljID0gJywnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hp bGUgKDApOworCiAJCQlpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfaW9jdGwpIHsKIAkJCQljb25z dCBjaGFyICpjcDsKLQkJCQlpZiAoZGVjaW1hbCkKLQkJCQkJKHZvaWQpcHJpbnRmKCIoJWxkIiwg KGxvbmcpKmlwKTsKLQkJCQllbHNlCi0JCQkJCSh2b2lkKXByaW50ZigiKCUjbHgiLCAobG9uZykq aXApOwotCQkJCWlwKys7Ci0JCQkJbmFyZy0tOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMp OwogCQkJCWlmICgoY3AgPSBpb2N0bG5hbWUoKmlwKSkgIT0gTlVMTCkKIAkJCQkJKHZvaWQpcHJp bnRmKCIsJXMiLCBjcCk7CiAJCQkJZWxzZSB7CkBAIC0zNzIsMTYgKzM3OSwzODQgQEAKIAkJCQlj ID0gJywnOwogCQkJCWlwKys7CiAJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9j b2RlID09IFNZU19hY2Nlc3MgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19lYWNjZXNz KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcp OworCQkJCWFjY2Vzc21vZGVuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07 CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX29wZW4pIHsKKwkJCQlpbnQJZmxh Z3M7CisJCQkJaW50CW1vZGU7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJZmxh Z3MgPSAqaXA7CisJCQkJbW9kZSA9ICorK2lwOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJ CQlmbGFnc2FuZG1vZGVuYW1lIChmbGFncywgbW9kZSwgZGVjaW1hbCk7CisJCQkJaXArKzsKKwkJ CQluYXJnLT0yOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU193YWl0NCkgewor CQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMp OworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQl3YWl0NG9wdG5hbWUgKChpbnQpKmlwKTsK KwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBT WVNfY2htb2QgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19mY2htb2QgfHwKKwkJCQkg ICBrdHItPmt0cl9jb2RlID09IFNZU19sY2htb2QpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFy ZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJbW9kZW5hbWUgKChpbnQpKmlwKTsK KwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBT WVNfbWtub2QpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRj aGFyKCcsJyk7CisJCQkJbW9kZW5hbWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmct LTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfZ2V0ZnNzdGF0KSB7CisJCQkJ cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ CQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCWdldGZzc3RhdGZsYWdzbmFtZSAoKGludCkqaXAp OworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09 IFNZU19tb3VudCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251 bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb3VudGZsYWdz bmFtZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChr dHItPmt0cl9jb2RlID09IFNZU191bm1vdW50KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcs Yyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1vdW50ZmxhZ3NuYW1lICgoaW50KSpp cCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUg PT0gU1lTX3JlY3Ztc2cgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19zZW5kbXNnKSB7 CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcs Yyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCXNlbmRyZWN2ZmxhZ3NuYW1lICgoaW50 KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2Nv ZGUgPT0gU1lTX3JlY3Zmcm9tIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfc2VuZHRv KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5h cmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcign LCcpOworCQkJCXNlbmRyZWN2ZmxhZ3NuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQlu YXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2NoZmxhZ3MgfHwKKwkJ CQkgICBrdHItPmt0cl9jb2RlID09IFNZU19mY2hmbGFncyB8fAorCQkJCSAgIGt0ci0+a3RyX2Nv ZGUgPT0gU1lTX2xjaGZsYWdzKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJ KHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1vZGVuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOwor CQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfa2lsbCkgewor CQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJ CQlzaWduYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBp ZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfcmVib290KSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcp OworCQkJCXJlYm9vdG9wdG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU191bWFzaykgeworCQkJCSh2b2lkKXB1 dGNoYXIoJygnKTsKKwkJCQltb2RlbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJn LS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX21zeW5jKSB7CisJCQkJcHJp bnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJ KHZvaWQpcHV0Y2hhcignLCcpOworCQkJCW1zeW5jZmxhZ3NuYW1lKChpbnQpKmlwKTsKKwkJCQlp cCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbW1h cCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxu YXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltbWFwcHJvdG5hbWUgKChpbnQp KmlwKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJ CQkJbW1hcGZsYWdzbmFtZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJ fSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19tcHJvdGVjdCkgeworCQkJCXByaW50X251 bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lk KXB1dGNoYXIoJywnKTsKKwkJCQltbWFwcHJvdG5hbWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOwor CQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbWFkdmlzZSkg eworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJn LGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltYWR2aXNlYmVoYXZuYW1lKChpbnQp KmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29k ZSA9PSBTWVNfc2V0cHJpb3JpdHkpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJ CQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJCQkJ cHJpb25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlm IChrdHItPmt0cl9jb2RlID09IFNZU19mY250bCkgeworCQkJCWludCBjbWQ7CisJCQkJaW50IGFy ZzsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQljbWQgPSAqaXA7CisJCQkJYXJn ID0gKisraXA7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCWZjbnRsY21kbmFtZShjbWQs IGFyZywgZGVjaW1hbCk7CisJCQkJaXArKzsKKwkJCQluYXJnLT0yOworCQkJfSBlbHNlIGlmIChr dHItPmt0cl9jb2RlID09IFNZU19zb2NrZXQpIHsKKwkJCQkodm9pZClwdXRjaGFyKCcoJyk7CisJ CQkJc29ja2RvbWFpbm5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJ CSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2NrdHlwZW5hbWUoKGludCkqaXApOworCQkJCWlw Kys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2Nv ZGUgPT0gU1lTX3NldHNvY2tvcHQgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09IFNZU19nZXRz b2Nrb3B0KSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hh cignLCcpOworCQkJCXNvY2tvcHRsZXZlbG5hbWUoKGludCkqaXAsIGRlY2ltYWwpOworCQkJCWlw Kys7CisJCQkJbmFyZy0tOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2Nrb3B0bmFt ZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+ a3RyX2NvZGUgPT0gU1lTX2xzZWVrKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ CQkJLyogSGlkZGVuICdwYWQnIGFyZ3VtZW50LCBub3QgaW4gbHNlZWsoMikgKi8KKwkJCQlwcmlu dF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQko dm9pZClwdXRjaGFyKCcsJyk7CisJCQkJd2hlbmNlbmFtZSAoKGludCkqaXApOworCQkJCWlwKys7 CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19mbG9jaykg eworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsK KwkJCQlmbG9ja25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBl bHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19ta2ZpZm8gfHwKKwkJCQkgICBrdHItPmt0cl9j b2RlID09IFNZU19ta2RpcikgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCSh2 b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb2RlbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJ CQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NodXRkb3duKSB7 CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOwor CQkJCXNodXRkb3duaG93bmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJ CQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NvY2tldHBhaXIpIHsKKwkJCQkodm9p ZClwdXRjaGFyKCcoJyk7CisJCQkJc29ja2RvbWFpbm5hbWUoKGludCkqaXApOworCQkJCWlwKys7 CisJCQkJbmFyZy0tOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlzb2NrdHlwZW5hbWUo KGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJCQl9IGVs c2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2dldHJsaW1pdCB8fAorCQkJCSAgIGt0ci0+a3Ry X2NvZGUgPT0gU1lTX3NldHJsaW1pdCkgeworCQkJCSh2b2lkKXB1dGNoYXIoJygnKTsKKwkJCQly bGltaXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCQljID0gJywn OworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19xdW90YWN0bCkgeworCQkJCXBy aW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXF1b3RhY3RsbmFtZSgoaW50KSppcCk7CisJCQkJ aXArKzsKKwkJCQluYXJnLS07CisJCQkJYyA9ICcsJzsKKwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJf Y29kZSA9PSBTWVNfbmZzc3ZjKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCW5mc3N2 Y25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7CisJ CQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3J0cHJpbykgeworCQkJCSh2b2lkKXB1 dGNoYXIoJygnKTsKKwkJCQlydHByaW9uYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5h cmctLTsKKwkJCQljID0gJywnOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19f X3NlbWN0bCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJl cihpcCxuYXJnLGMpOworCQkJCXNlbWN0bG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJ bmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zZW1nZXQpIHsKKwkJ CQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsK KwkJCQlzZW1nZXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0g ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfbXNnY3RsKSB7CisJCQkJcHJpbnRfbnVtYmVy KGlwLG5hcmcsYyk7CisJCQkJc2htY3RsbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQlu YXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NobWF0KSB7CisJCQkJ cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ CQkJc2htYXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxz ZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfc2htY3RsKSB7CisJCQkJcHJpbnRfbnVtYmVyKGlw LG5hcmcsYyk7CisJCQkJc2htY3RsbmFtZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJn LS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX21pbmhlcml0KSB7CisJCQkJ cHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJcHJpbnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJ CQkJbWluaGVyaXRuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0g ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfcmZvcmspIHsKKwkJCQkodm9pZClwdXRjaGFy KCcoJyk7CisJCQkJcmZvcmtuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsK KwkJCQljID0gJywnOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19saW9fbGlz dGlvKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCWxpb19saXN0aW9uYW1lKChpbnQp KmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCQljID0gJywnOworCQkJfSBlbHNlIGlm IChrdHItPmt0cl9jb2RlID09IFNZU19tbG9ja2FsbCkgeworCQkJCSh2b2lkKXB1dGNoYXIoJygn KTsKKwkJCQltbG9ja2FsbG5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zY2hlZF9zZXRzY2hlZHVsZXIpIHsK KwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlzY2hlZHBvbGljeW5hbWUoKGludCkq aXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2Rl ID09IFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9 PSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikgeworCQkJCSh2b2lkKXB1dGNoYXIoJygnKTsK KwkJCQlzY2hlZHBvbGljeW5hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOwor CQkJfSBlbHNlIGlmIChrdHItPmt0cl9jb2RlID09IFNZU19zZW5kZmlsZSkgeworCQkJCXByaW50 X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXBy aW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJ CXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOwor CQkJCXNlbmRmaWxlZmxhZ3NuYW1lKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsK KwkJCX0gZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfa2xkc3ltKSB7CisJCQkJcHJpbnRf bnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJa2xkc3ltY21kbmFtZSgoaW50KSppcCk7CisJCQkJaXAr KzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3NpZ3By b2NtYXNrKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJCXNpZ3Byb2NtYXNraG93bmFt ZSgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQkJYyA9ICcsJzsKKwkJCX0g ZWxzZSBpZiAoa3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfZ2V0X2ZpbGUgfHwKKwkJCQkgICBr dHItPmt0cl9jb2RlID09IFNZU19fX2FjbF9zZXRfZmlsZSB8fAorCQkJCSAgIGt0ci0+a3RyX2Nv ZGUgPT0gU1lTX19fYWNsX2dldF9mZCB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19f YWNsX3NldF9mZCB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNsX2RlbGV0ZV9m aWxlIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfZGVsZXRlX2ZkIHx8CisJ CQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfYWNsY2hlY2tfZmlsZSB8fAorCQkJCSAg IGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNsX2FjbGNoZWNrX2ZkIHx8CisJCQkJICAga3RyLT5r dHJfY29kZSA9PSBTWVNfX19hY2xfZ2V0X2xpbmsgfHwKKwkJCQkgICBrdHItPmt0cl9jb2RlID09 IFNZU19fX2FjbF9zZXRfbGluayB8fAorCQkJCSAgIGt0ci0+a3RyX2NvZGUgPT0gU1lTX19fYWNs X2RlbGV0ZV9saW5rIHx8CisJCQkJICAga3RyLT5rdHJfY29kZSA9PSBTWVNfX19hY2xfYWNsY2hl Y2tfbGluaykgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCWFjbHR5cGVuYW1l KChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3RyLT5r dHJfY29kZSA9PSBTWVNfc2lnYWN0aW9uKSB7CisJCQkJKHZvaWQpcHV0Y2hhcignKCcpOworCQkJ CXNpZ25hbWUoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJCWMgPSAnLCc7 CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX2V4dGF0dHJjdGwpIHsKKwkJCQlw cmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQlleHRhdHRyY3RsbmFtZSgoaW50KSppcCk7CisJ CQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lT X25tb3VudCkgeworCQkJCXByaW50X251bWJlcihpcCxuYXJnLGMpOworCQkJCXByaW50X251bWJl cihpcCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQltb3VudGZsYWdzbmFt ZSAoKGludCkqaXApOworCQkJCWlwKys7CisJCQkJbmFyZy0tOworCQkJfSBlbHNlIGlmIChrdHIt Pmt0cl9jb2RlID09IFNZU19rc2VfdGhyX2ludGVycnVwdCkgeworCQkJCXByaW50X251bWJlcihp cCxuYXJnLGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlrc2V0aHJjbWRuYW1lICgo aW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CisJCQl9IGVsc2UgaWYgKGt0ci0+a3Ry X2NvZGUgPT0gU1lTX3Rocl9jcmVhdGUpIHsKKwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsK KwkJCQlwcmludF9udW1iZXIoaXAsbmFyZyxjKTsKKwkJCQkodm9pZClwdXRjaGFyKCcsJyk7CisJ CQkJdGhyY3JlYXRlZmxhZ3NuYW1lICgoaW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07 CisJCQl9IGVsc2UgaWYgKGt0ci0+a3RyX2NvZGUgPT0gU1lTX3Rocl9raWxsKSB7CisJCQkJcHJp bnRfbnVtYmVyKGlwLG5hcmcsYyk7CisJCQkJKHZvaWQpcHV0Y2hhcignLCcpOworCQkJCXNpZ25h bWUgKChpbnQpKmlwKTsKKwkJCQlpcCsrOworCQkJCW5hcmctLTsKKwkJCX0gZWxzZSBpZiAoa3Ry LT5rdHJfY29kZSA9PSBTWVNfa2xkdW5sb2FkZikgeworCQkJCXByaW50X251bWJlcihpcCxuYXJn LGMpOworCQkJCSh2b2lkKXB1dGNoYXIoJywnKTsKKwkJCQlrbGR1bmxvYWRmZmxhZ3NuYW1lICgo aW50KSppcCk7CisJCQkJaXArKzsKKwkJCQluYXJnLS07CiAJCQl9CiAJCX0KIAkJd2hpbGUgKG5h cmcpIHsKLQkJCWlmIChkZWNpbWFsKQotCQkJCSh2b2lkKXByaW50ZigiJWMlbGQiLCBjLCAobG9u ZykqaXApOwotCQkJZWxzZQotCQkJCSh2b2lkKXByaW50ZigiJWMlI2x4IiwgYywgKGxvbmcpKmlw KTsKLQkJCWMgPSAnLCc7Ci0JCQlpcCsrOwotCQkJbmFyZy0tOworCQkJcHJpbnRfbnVtYmVyKGlw LG5hcmcsYyk7CiAJCX0KIAkJKHZvaWQpcHV0Y2hhcignKScpOwogCX0KZGlmZiAtdXJOIGtkdW1w Lm9yaWcva2R1bXBfc3Vici5oIGtkdW1wL2tkdW1wX3N1YnIuaAotLS0ga2R1bXAub3JpZy9rZHVt cF9zdWJyLmgJV2VkIERlYyAzMSAxNjowMDowMCAxOTY5CisrKyBrZHVtcC9rZHVtcF9zdWJyLmgJ VHVlIEFwciAxOCAxNDowMjoxNSAyMDA2CkBAIC0wLDAgKzEsNDYgQEAKKy8qICRGcmVlQlNEJCAq LworCit2b2lkIHNpZ25hbWUgKGludCk7Cit2b2lkIHNlbWN0bG5hbWUgKGludCk7Cit2b2lkIHNo bWN0bG5hbWUgKGludCk7Cit2b2lkIHNlbWdldG5hbWUgKGludCk7Cit2b2lkIGZjbnRsY21kbmFt ZSAoaW50LCBpbnQsIGludCk7Cit2b2lkIHJ0cHJpb25hbWUgKGludCk7Cit2b2lkIG1vZGVuYW1l IChpbnQpOwordm9pZCBmbGFnc25hbWUgKGludCk7Cit2b2lkIGZsYWdzYW5kbW9kZW5hbWUgKGlu dCwgaW50LCBpbnQpOwordm9pZCBhY2Nlc3Ntb2RlbmFtZSAoaW50KTsKK3ZvaWQgbW1hcHByb3Ru YW1lIChpbnQpOwordm9pZCBtbWFwZmxhZ3NuYW1lIChpbnQpOwordm9pZCB3YWl0NG9wdG5hbWUg KGludCk7Cit2b2lkIHNlbmRyZWN2ZmxhZ3NuYW1lIChpbnQpOwordm9pZCBnZXRmc3N0YXRmbGFn c25hbWUgKGludCk7Cit2b2lkIG1vdW50ZmxhZ3NuYW1lIChpbnQpOwordm9pZCByZWJvb3RvcHRu YW1lIChpbnQpOwordm9pZCBmbG9ja25hbWUgKGludCk7Cit2b2lkIHNvY2tvcHRuYW1lIChpbnQp Owordm9pZCBzb2Nrb3B0bGV2ZWxuYW1lIChpbnQsIGludCk7Cit2b2lkIHNvY2tkb21haW5uYW1l IChpbnQpOwordm9pZCBzb2NrdHlwZW5hbWUgKGludCk7Cit2b2lkIHRocmNyZWF0ZWZsYWdzbmFt ZSAoaW50KTsKK3ZvaWQgbWxvY2thbGxuYW1lIChpbnQpOwordm9pZCBzaG1hdG5hbWUgKGludCk7 Cit2b2lkIHJmb3JrbmFtZSAoaW50KTsKK3ZvaWQgbmZzc3ZjbmFtZSAoaW50KTsKK3ZvaWQgd2hl bmNlbmFtZSAoaW50KTsKK3ZvaWQgcmxpbWl0bmFtZSAoaW50KTsKK3ZvaWQgc2h1dGRvd25ob3du YW1lIChpbnQpOwordm9pZCBwcmlvbmFtZSAoaW50KTsKK3ZvaWQgbWFkdmlzZWJlaGF2bmFtZSAo aW50KTsKK3ZvaWQgbXN5bmNmbGFnc25hbWUgKGludCk7Cit2b2lkIHNjaGVkcG9saWN5bmFtZSAo aW50KTsKK3ZvaWQga2xkdW5sb2FkZmZsYWdzbmFtZSAoaW50KTsKK3ZvaWQga3NldGhyY21kbmFt ZSAoaW50KTsKK3ZvaWQgZXh0YXR0cmN0bG5hbWUgKGludCk7Cit2b2lkIGtsZHN5bWNtZG5hbWUg KGludCk7Cit2b2lkIHNlbmRmaWxlZmxhZ3NuYW1lIChpbnQpOwordm9pZCBhY2x0eXBlbmFtZSAo aW50KTsKK3ZvaWQgc2lncHJvY21hc2tob3duYW1lIChpbnQpOwordm9pZCBsaW9fbGlzdGlvbmFt ZSAoaW50KTsKK3ZvaWQgbWluaGVyaXRuYW1lIChpbnQpOwordm9pZCBxdW90YWN0bG5hbWUgKGlu dCk7CmRpZmYgLXVyTiBrZHVtcC5vcmlnL21rc3ViciBrZHVtcC9ta3N1YnIKLS0tIGtkdW1wLm9y aWcvbWtzdWJyCVdlZCBEZWMgMzEgMTY6MDA6MDAgMTk2OQorKysga2R1bXAvbWtzdWJyCVR1ZSBB cHIgMTggMTQ6MTM6NTEgMjAwNgpAQCAtMCwwICsxLDQwNyBAQAorc2V0IC1lCisKKyMgR2VuZXJh dGVzIGtkdW1wX3N1YnIuYworIyBta2lvY3RscyBpcyBhIHNwZWNpYWwtcHVycG9zZSBzY3JpcHQs IGFuZCB3b3JrcyBmaW5lIGFzIGl0IGlzCisjIG5vdywgc28gaXQgcmVtYWlucyBpbmRlcGVuZGVu dC4gVGhlIGlkZWEgYmVoaW5kIGhvdyBpdCBnZW5lcmF0ZXMKKyMgaXRzIGxpc3Qgd2FzIGhlYXZp bHkgYm9ycm93ZWQgaGVyZS4KKyMKKyMgU29tZSBmdW5jdGlvbnMgaGVyZSBhcmUgYXV0b21hdGlj YWxseSBnZW5lcmF0ZWQuIFRoaXMgY2FuIG1lYW4KKyMgdGhlIHVzZXIgd2lsbCBzZWUgdW51c3Vh bCBrZHVtcCBvdXRwdXQgb3IgZXJyb3JzIHdoaWxlIGJ1aWxkaW5nCisjIGlmIHRoZSB1bmRlcmx5 aW5nIC5oIGZpbGVzIGFyZSBjaGFuZ2VkIHNpZ25pZmljYW50bHkuCisjCisjIEtleToKKyMgQVVU TzogQ29tcGxldGVseSBhdXRvLWdlbmVyYXRlZCB3aXRoIGVpdGhlciB0aGUgIm9yIiBvciB0aGUg InN3aXRjaCIKKyMgbWV0aG9kLgorIyBBVVRPIC0gU3BlY2lhbDogR2VuZXJhdGVkIGF1dG9tYXRp Y2FsbHksIGJ1dCB3aXRoIHNvbWUgZXh0cmEgY29tbWFuZHMKKyMgdGhhdCB0aGUgYXV0b18qX3R5 cGUoKSBmdW5jdGlvbnMgYXJlIGluYXBwcm9wcmlhdGUgZm9yLgorIyBNQU5VQUw6IE1hbnVhbGx5 IGVudGVyZWQgYW5kIG11c3QgdGhlcmVmb3JlIGJlIG1hbnVhbGx5IHVwZGF0ZWQuCisKKyMgJEZy ZWVCU0QkCisKK0xDX0FMTD1DOyBleHBvcnQgTENfQUxMCisKK2lmIFsgLXogIiQxIiBdCit0aGVu CisJZWNobyAidXNhZ2U6IHNoICQwIGluY2x1ZGUtZGlyIgorCWV4aXQgMQorZmkKK2luY2x1ZGVf ZGlyPSQxCisKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYSBDIGZ1bmN0aW9uIHRoYXQg d2lsbCBwcmludCBvdXQgdGhlCisjIG51bWVyaWMgaW5wdXQgYXMgYSBwaXBlLWRlbGltaXRlZCBz dHJpbmcgb2YgdGhlIGFwcHJvcHJpYXRlCisjICNkZWZpbmUga2V5cy4gZXg6CisjIFNfSVJVU1J8 U19JV1VTUnxTX0lSR1JQfFNfSVJPVEgKKyMgVGhlIFhPUiBpcyBuZWNlc3NhcnkgdG8gcHJldmVu dCBpbmNsdWRpbmcgdGhlICIwIi12YWx1ZSBpbiBldmVyeQorIyBsaW5lLgorIworYXV0b19vcl90 eXBlICgpIHsKKwlsb2NhbCBuYW1lIGdyZXAgZmlsZQorCW5hbWU9JDEKKwlncmVwPSQyCisJZmls ZT0kMworCisJY2F0IDw8X0VPRl8KKy8qIEFVVE8gKi8KK3ZvaWQKKyRuYW1lIChpbnQgYXJnKQor eworCWludAlvciA9IDA7CitfRU9GXworCWVncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNw YWNlOl1dKyIke2dyZXB9IltbOnNwYWNlOl1dKiIgXAorCQkkaW5jbHVkZV9kaXIvJGZpbGUgfCBc CisJYXdrICd7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlpZiAoJGkgfiAvZGVmaW5l LykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRpZighKChhcmc+MCleKCgl cyk+MCkpKVxuXHRcdGlmX3ByaW50X29yKGFyZywgJXMsIG9yKTtcbiIsICRpLCAkaSB9JworY2F0 IDw8X0VPRl8KKwlpZiAob3IgPT0gMCkKKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD4lbGQiLCAo bG9uZylhcmcpOworfQorCitfRU9GXworfQorCisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVz IGEgQyBmdW5jdGlvbiB1c2VkIHdoZW4gdGhlIGFyZ3VtZW50CisjIG1hcHMgdG8gYSBzaW5nbGUs IHNwZWNpZmljICNkZWZpbml0aW9uCisjCithdXRvX3N3aXRjaF90eXBlICgpIHsKKwlsb2NhbCBu YW1lIGdyZXAgZmlsZQorCW5hbWU9JDEKKwlncmVwPSQyCisJZmlsZT0kMworCisJY2F0IDw8X0VP Rl8KKy8qIEFVVE8gKi8KK3ZvaWQKKyRuYW1lIChpbnQgYXJnKQoreworCXN3aXRjaCAoYXJnKSB7 CitfRU9GXworCWVncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dKyIke2dyZXB9 IltbOnNwYWNlOl1dKiIgXAorCQkkaW5jbHVkZV9kaXIvJGZpbGUgfCBcCisJYXdrICd7IGZvciAo aSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlpZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7 IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRjYXNlICVzOlxuXHRcdCh2b2lkKXByaW50ZihcIiVz XCIpO1xuXHRcdGJyZWFrO1xuIiwgJGksICRpIH0nCitjYXQgPDxfRU9GXworCWRlZmF1bHQ6IC8q IFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxv bmcpYXJnKTsKKwl9Cit9CisKK19FT0ZfCit9CisKKyMgQyBzdGFydAorCitjYXQgPDxfRU9GXwor I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lz L3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4K KyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2RlZmluZSBfS0VSTkVMCisjaW5jbHVkZSA8c3lzL3Nv Y2tldC5oPgorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl IDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMv cmVib290Lmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyLmg+Cisj ZGVmaW5lIF9LRVJORUwKKyNpbmNsdWRlIDxzeXMvdGhyLmg+CisjdW5kZWYgX0tFUk5FTAorI2lu Y2x1ZGUgPHN5cy9rc2UuaD4KKyNpbmNsdWRlIDxzeXMvZXh0YXR0ci5oPgorI2luY2x1ZGUgPHN5 cy9hY2wuaD4KKyNpbmNsdWRlIDxhaW8uaD4KKyNpbmNsdWRlIDxzeXMvc2VtLmg+CisjaW5jbHVk ZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9ydHByaW8uaD4KKyNpbmNsdWRlIDxzeXMvc2ht Lmg+CisjaW5jbHVkZSA8bmZzc2VydmVyL25mcy5oPgorI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEu aD4KKworI2luY2x1ZGUgImtkdW1wX3N1YnIuaCIKKworLyoKKyAqIFRoZXNlIGFyZSBzaW1wbGUg c3VwcG9ydCBtYWNyb3MuIHByaW50X29yIHV0aWxpemVzIGEgdmFyaWFibGUKKyAqIGRlZmluZWQg aW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24gdG8gdHJhY2sgd2hldGhlciBvciBub3QgaXQgc2hvdWxk CisgKiBwcmludCBhIGxvZ2ljYWwtT1IgY2hhcmFjdGVyICgnfCcpIGJlZm9yZSBhIHN0cmluZy4g aWZfcHJpbnRfb3IKKyAqIHNpbXBseSBoYW5kbGVzIHRoZSBuZWNlc3NhcnkgImlmIiBzdGF0ZW1l bnQgdXNlZCBpbiBtYW55IGxpbmVzCisgKiBvZiB0aGlzIGZpbGUuCisgKi8KKyNkZWZpbmUgcHJp bnRfb3Ioc3RyLG9yZmxhZykgZG8geyAgICAgICAgICAgICAgICAgIFxcCisJaWYgKG9yZmxhZykg cHV0Y2hhcignfCcpOyBlbHNlIG9yZmxhZyA9IDE7IFxcCisJcHJpbnRmIChzdHIpOyB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFxcCisJd2hpbGUgKDApCisjZGVmaW5lIGlmX3ByaW50X29y KGksZmxhZyxvcmZsYWcpIGRvIHsgICAgICAgICAgICBcXAorCWlmICgoaSAmIGZsYWcpID09IGZs YWcpICAgICAgICAgICAgICAgICAgICBcXAorCXByaW50X29yKCNmbGFnLG9yZmxhZyk7IH0gICAg ICAgICAgICAgICAgICBcXAorCXdoaWxlICgwKQorCisvKiBNQU5VQUwgKi8KK2V4dGVybiBjaGFy ICpzaWduYW1lc1tdOyAvKiBmcm9tIGtkdW1wLmMgKi8KK3ZvaWQKK3NpZ25hbWUgKGludCBzaWcp Cit7CisJKHZvaWQpcHJpbnRmKCJTSUclcyIsc2lnbmFtZXNbc2lnXSk7Cit9CisKKy8qIE1BTlVB TCAqLwordm9pZAorc2VtY3RsbmFtZSAoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNh c2UgR0VUTkNOVDoKKwkJKHZvaWQpcHJpbnRmKCJHRVROQ05UIik7CisJCWJyZWFrOworCWNhc2Ug R0VUUElEOgorCQkodm9pZClwcmludGYoIkdFVFBJRCIpOworCQlicmVhazsKKwljYXNlIEdFVFZB TDoKKwkJKHZvaWQpcHJpbnRmKCJHRVRWQUwiKTsKKwkJYnJlYWs7CisJY2FzZSBHRVRBTEw6CisJ CSh2b2lkKXByaW50ZigiR0VUQUxMIik7CisJCWJyZWFrOworCWNhc2UgR0VUWkNOVDoKKwkJKHZv aWQpcHJpbnRmKCJHRVRaQ05UIik7CisJCWJyZWFrOworCWNhc2UgU0VUVkFMOgorCQkodm9pZClw cmludGYoIlNFVFZBTCIpOworCQlicmVhazsKKwljYXNlIFNFVEFMTDoKKwkJKHZvaWQpcHJpbnRm KCJTRVRBTEwiKTsKKwkJYnJlYWs7CisJY2FzZSBJUENfUk1JRDoKKwkJKHZvaWQpcHJpbnRmKCJJ UENfUk1JRCIpOworCQlicmVhazsKKwljYXNlIElQQ19TRVQ6CisJCSh2b2lkKXByaW50ZigiSVBD X1NFVCIpOworCQlicmVhazsKKwljYXNlIElQQ19TVEFUOgorCQkodm9pZClwcmludGYoIklQQ19T VEFUIik7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZv aWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxvbmcpY21kKTsKKwl9Cit9CisKKy8qIE1BTlVB TCAqLwordm9pZAorc2htY3RsbmFtZSAoaW50IGNtZCkgeworCXN3aXRjaCAoY21kKSB7CisJY2Fz ZSBJUENfUk1JRDoKKwkJKHZvaWQpcHJpbnRmKCJJUENfUk1JRCIpOworCQlicmVhazsKKwljYXNl IElQQ19TRVQ6CisJCSh2b2lkKXByaW50ZigiSVBDX1NFVCIpOworCQlicmVhazsKKwljYXNlIElQ Q19TVEFUOgorCQkodm9pZClwcmludGYoIklQQ19TVEFUIik7CisJCWJyZWFrOworCWRlZmF1bHQ6 IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZvaWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+Iiwg KGxvbmcpY21kKTsKKwl9Cit9CisKKy8qIE1BTlVBTCAqLwordm9pZAorc2VtZ2V0bmFtZSAoaW50 IGZsYWcpIHsKKwlpbnQJb3IgPSAwOworCWlmX3ByaW50X29yKGZsYWcsIFNFTV9SLCBvcik7CisJ aWZfcHJpbnRfb3IoZmxhZywgU0VNX0EsIG9yKTsKKwlpZl9wcmludF9vcihmbGFnLCAoU0VNX1I+ PjMpLCBvcik7CisJaWZfcHJpbnRfb3IoZmxhZywgKFNFTV9BPj4zKSwgb3IpOworCWlmX3ByaW50 X29yKGZsYWcsIChTRU1fUj4+NiksIG9yKTsKKwlpZl9wcmludF9vcihmbGFnLCAoU0VNX0E+PjYp LCBvcik7Cit9CisKKy8qCisgKiBNQU5VQUwKKyAqCisgKiBPbmx5IHVzZWQgYnkgU1lTX29wZW4u IFVubGVzcyBPX0NSRUFUIGlzIHNldCBpbiBmbGFncywgdGhlCisgKiBtb2RlIGFyZ3VtZW50IGlz IHVudXNlZCAoYW5kIG9mdGVuIGJvZ3VzIGFuZCBtaXNsZWFkaW5nKS4KKyAqLwordm9pZAorZmxh Z3NhbmRtb2RlbmFtZSAoaW50IGZsYWdzLCBpbnQgbW9kZSwgaW50IGRlY2ltYWwpIHsKKwlmbGFn c25hbWUgKGZsYWdzKTsKKwkodm9pZClwdXRjaGFyKCcsJyk7CisJaWYgKChmbGFncyAmIE9fQ1JF QVQpID09IE9fQ1JFQVQpIHsKKwkJbW9kZW5hbWUgKG1vZGUpOworCX0gZWxzZSB7CisJCWlmIChk ZWNpbWFsKSB7CisJCQkodm9pZClwcmludGYoIjx1bnVzZWQ+JWxkIiwgKGxvbmcpbW9kZSk7CisJ CX0gZWxzZSB7CisJCQkodm9pZClwcmludGYoIjx1bnVzZWQ+JSNseCIsIChsb25nKW1vZGUpOwor CQl9CisJfQorfQorCisvKgorICogTUFOVUFMCisgKgorICogW2d8c11ldHNvY2tvcHQncyBsZXZl bCBhcmd1bWVudCBjYW4gZWl0aGVyIGJlIFNPTF9TT0NLRVQgb3IgYSB2YWx1ZQorICogcmVmZXJy aW5nIHRvIGEgbGluZSBpbiAvZXRjL3Byb3RvY29scyAuIEl0IG1pZ2h0IGJlIGFwcHJvcHJpYXRl CisgKiB0byB1c2UgZ2V0cHJvdG9lbnQoMykgaGVyZS4KKyAqLwordm9pZAorc29ja29wdGxldmVs bmFtZSAoaW50IGxldmVsLCBpbnQgZGVjaW1hbCkKK3sKKwlpZiAobGV2ZWwgPT0gU09MX1NPQ0tF VCkgeworCQkodm9pZClwcmludGYoIlNPTF9TT0NLRVQiKTsKKwl9IGVsc2UgeworCQlpZiAoZGVj aW1hbCkgeworCQkJKHZvaWQpcHJpbnRmKCIlbGQiLCAobG9uZylsZXZlbCk7CisJCX0gZWxzZSB7 CisJCQkodm9pZClwcmludGYoIiUjbHgiLCAobG9uZylsZXZlbCk7CisJCX0KKwl9Cit9CisKK19F T0ZfCisKK2F1dG9fb3JfdHlwZSAibW9kZW5hbWUiICJTX1tBLVpdK1tbOnNwYWNlOl1dK1swLTZd ezd9IiAic3lzL3N0YXQuaCIKK2F1dG9fb3JfdHlwZSAiZmxhZ3NuYW1lIiAiT19bQS1aXStbWzpz cGFjZTpdXSsweFswLTlBLUZhLWZdKyIgInN5cy9mY250bC5oIgorYXV0b19vcl90eXBlICJhY2Nl c3Ntb2RlbmFtZSIgIltBLVpdX09LW1s6c3BhY2U6XV0rMD94P1swLTlBLUZhLWZdKyIgInN5cy91 bmlzdGQuaCIKK2F1dG9fb3JfdHlwZSAibW1hcHByb3RuYW1lIiAiUFJPVF9bQS1aXStbWzpzcGFj ZTpdXSsweFswLTlBLUZhLWZdKyIgInN5cy9tbWFuLmgiCithdXRvX29yX3R5cGUgIm1tYXBmbGFn c25hbWUiICJNQVBfW0EtWl0rW1s6c3BhY2U6XV0rMHhbMC05QS1GYS1mXSsiICJzeXMvbW1hbi5o IgorYXV0b19vcl90eXBlICJ3YWl0NG9wdG5hbWUiICJXW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0r IiAic3lzL3dhaXQuaCIKK2F1dG9fb3JfdHlwZSAiZ2V0ZnNzdGF0ZmxhZ3NuYW1lIiAiTU5UX1tB LVpdK1tbOnNwYWNlOl1dK1sxLTldWzAtOV0qIiAic3lzL21vdW50LmgiCithdXRvX29yX3R5cGUg Im1vdW50ZmxhZ3NuYW1lIiAiTU5UX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL21v dW50LmgiCithdXRvX29yX3R5cGUgInJlYm9vdG9wdG5hbWUiICJSQl9bQS1aXStbWzpzcGFjZTpd XSsweFswLTldKyIgInN5cy9yZWJvb3QuaCIKK2F1dG9fb3JfdHlwZSAiZmxvY2tuYW1lIiAiTE9D S19bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9mY250bC5oIgorYXV0b19vcl90eXBl ICJzb2Nrb3B0bmFtZSIgIlNPX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL3NvY2tl dC5oIgorYXV0b19vcl90eXBlICJzb2NrZG9tYWlubmFtZSIgIlBGX1tBLVpdK1tbOnNwYWNlOl1d KyIgInN5cy9zb2NrZXQuaCIKK2F1dG9fb3JfdHlwZSAic29ja3R5cGVuYW1lIiAiU09DS19bQS1a XStbWzpzcGFjZTpdXStbMS05XStbMC05XSoiICJzeXMvc29ja2V0LmgiCithdXRvX29yX3R5cGUg InRocmNyZWF0ZWZsYWdzbmFtZSIgIlRIUl9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5 cy90aHIuaCIKK2F1dG9fb3JfdHlwZSAibWxvY2thbGxuYW1lIiAiTUNMX1tBLVpdK1tbOnNwYWNl Ol1dKzB4WzAtOV0rIiAic3lzL21tYW4uaCIKK2F1dG9fb3JfdHlwZSAic2htYXRuYW1lIiAiU0hN X1tBLVpdK1tbOnNwYWNlOl1dK1swLTldezZ9KyIgInN5cy9zaG0uaCIKK2F1dG9fb3JfdHlwZSAi cmZvcmtuYW1lIiAiUkZbQS1aXStbWzpzcGFjZTpdXStcKFswLTldKzw8WzAtOV0rXCkiICJzeXMv dW5pc3RkLmgiCithdXRvX29yX3R5cGUgIm5mc3N2Y25hbWUiICJORlNTVkNfW0EtWl0rW1s6c3Bh Y2U6XV0rMHhbMC05XSsiICJuZnNzZXJ2ZXIvbmZzLmgiCisKK2F1dG9fc3dpdGNoX3R5cGUgIndo ZW5jZW5hbWUiICJTRUVLX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy91bmlzdGQuaCIK K2F1dG9fc3dpdGNoX3R5cGUgInJsaW1pdG5hbWUiICJSTElNSVRfW0EtWl0rW1s6c3BhY2U6XV0r WzAtOV0rIiAic3lzL3Jlc291cmNlLmgiCithdXRvX3N3aXRjaF90eXBlICJzaHV0ZG93bmhvd25h bWUiICJTSFVUX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lzL3NvY2tldC5oIgorYXV0 b19zd2l0Y2hfdHlwZSAicHJpb25hbWUiICJQUklPX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldIiAi c3lzL3Jlc291cmNlLmgiCithdXRvX3N3aXRjaF90eXBlICJtYWR2aXNlYmVoYXZuYW1lIiAiXz9N QURWX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy9tbWFuLmgiCithdXRvX3N3aXRjaF90 eXBlICJtc3luY2ZsYWdzbmFtZSIgIk1TX1tBLVpdK1tbOnNwYWNlOl1dKzB4WzAtOV0rIiAic3lz L21tYW4uaCIKK2F1dG9fc3dpdGNoX3R5cGUgInNjaGVkcG9saWN5bmFtZSIgIlNDSEVEX1tBLVpd K1tbOnNwYWNlOl1dK1swLTldKyIgInNjaGVkLmgiCithdXRvX3N3aXRjaF90eXBlICJrbGR1bmxv YWRmZmxhZ3NuYW1lIiAiTElOS0VSX1VOTE9BRF9bQS1aXStbWzpzcGFjZTpdXStbMC05XSsiICJz eXMvbGlua2VyLmgiCithdXRvX3N3aXRjaF90eXBlICJrc2V0aHJjbWRuYW1lIiAiS1NFX0lOVFJf W0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL2tzZS5oIgorYXV0b19zd2l0Y2hfdHlwZSAi ZXh0YXR0cmN0bG5hbWUiICJFWFRBVFRSX05BTUVTUEFDRV9bQS1aXStbWzpzcGFjZTpdXSsweFsw LTldKyIgInN5cy9leHRhdHRyLmgiCithdXRvX3N3aXRjaF90eXBlICJrbGRzeW1jbWRuYW1lIiAi S0xEU1lNX1tBLVpdK1tbOnNwYWNlOl1dK1swLTldKyIgInN5cy9saW5rZXIuaCIKK2F1dG9fc3dp dGNoX3R5cGUgInNlbmRmaWxlZmxhZ3NuYW1lIiAiU0ZfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0r IiAic3lzL3NvY2tldC5oIgorYXV0b19zd2l0Y2hfdHlwZSAiYWNsdHlwZW5hbWUiICJBQ0xfVFlQ RV9bQS1aXStbWzpzcGFjZTpdXSsweFswLTldKyIgInN5cy9hY2wuaCIKK2F1dG9fc3dpdGNoX3R5 cGUgInNpZ3Byb2NtYXNraG93bmFtZSIgIlNJR19bQS1aXStbWzpzcGFjZTpdXStbMC05XSsiICJz eXMvc2lnbmFsLmgiCithdXRvX3N3aXRjaF90eXBlICJsaW9fbGlzdGlvbmFtZSIgIkxJT18oTk8p P1dBSVRbWzpzcGFjZTpdXStbMC05XSsiICJhaW8uaCIKK2F1dG9fc3dpdGNoX3R5cGUgIm1pbmhl cml0bmFtZSIgIklOSEVSSVRfW0EtWl0rW1s6c3BhY2U6XV0rWzAtOV0rIiAic3lzL21tYW4uaCIK K2F1dG9fc3dpdGNoX3R5cGUgInF1b3RhY3RsbmFtZSIgIlFfW0EtWl0rW1s6c3BhY2U6XV0rMHhb MC05XSsiICJ1ZnMvdWZzL3F1b3RhLmgiCisKK2NhdCA8PF9FT0ZfCisvKgorICogQVVUTyAtIFNw ZWNpYWwKKyAqIEZfIGlzIHVzZWQgdG8gc3BlY2lmeSBmY250bCBjb21tYW5kcyBhcyB3ZWxsIGFz IGFyZ3VtZW50cy4gQm90aCBzZXRzIGFyZQorICogZ3JvdXBlZCBpbiBmY250bC5oLCBhbmQgdGhp cyBhd2sgc2NyaXB0IGdyYWJzIHRoZSBmaXJzdCBncm91cC4KKyAqLwordm9pZAorZmNudGxjbWRu YW1lIChpbnQgY21kLCBpbnQgYXJnLCBpbnQgZGVjaW1hbCkKK3sKKwlzd2l0Y2ggKGNtZCkgewor X0VPRl8KK2VncmVwICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dK0ZfW0EtWl0rW1s6 c3BhY2U6XV0rWzAtOV0rW1s6c3BhY2U6XV0qIiBcCisJJGluY2x1ZGVfZGlyL3N5cy9mY250bC5o IHwgXAorCWF3ayAnQkVHSU4geyBvPTAgfSB7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAor CQlpZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCWlmIChvIDw9 ICQoaSsxKSkgXAorCQkJcHJpbnRmICJcdGNhc2UgJXM6XG5cdFx0KHZvaWQpcHJpbnRmKFwiJXNc Iik7XG5cdFx0YnJlYWs7XG4iLCAkaSwgJGk7IFwKKwkJZWxzZSBcCisJCQlleGl0OyBcCisJCW8g PSAkKGkrMSkgfScKK2NhdCA8PF9FT0ZfCisJZGVmYXVsdDogLyogU2hvdWxkIG5vdCByZWFjaCAq LworCQkodm9pZClwcmludGYoIjxpbnZhbGlkPSVsZD4iLCAobG9uZyljbWQpOworCX0KKwkodm9p ZClwdXRjaGFyKCcsJyk7CisJaWYgKGNtZCA9PSBGX0dFVEZEIHx8IGNtZCA9PSBGX1NFVEZEKSB7 CisJCWlmIChhcmcgPT0gRkRfQ0xPRVhFQykKKwkJCSh2b2lkKXByaW50ZigiRkRfQ0xPRVhFQyIp OworCQllbHNlIGlmIChhcmcgPT0gMCkKKwkJCSh2b2lkKXByaW50ZigiMCIpOworCQllbHNlIHsK KwkJCWlmIChkZWNpbWFsKQorCQkJCSh2b2lkKXByaW50ZigiPGludmFsaWQ+JWxkIiwgKGxvbmcp YXJnKTsKKwkJCWVsc2UKKwkJCQkodm9pZClwcmludGYoIjxpbnZhbGlkPiUjbHgiLCAobG9uZylh cmcpOworCQl9CisJfSBlbHNlIGlmIChjbWQgPT0gRl9TRVRGTCkgeworCQlmbGFnc25hbWUoYXJn KTsKKwl9IGVsc2UgeworCQlpZiAoZGVjaW1hbCkKKwkJCSh2b2lkKXByaW50ZigiJWxkIiwgKGxv bmcpYXJnKTsKKwkJZWxzZQorCQkJKHZvaWQpcHJpbnRmKCIlI2x4IiwgKGxvbmcpYXJnKTsKKwl9 Cit9CisKKy8qCisgKiBBVVRPIC0gU3BlY2lhbAorICoKKyAqIFRoZSBvbmx5IHJlYXNvbiB0aGlz IGlzIG5vdCBmdWxseSBhdXRvbWF0ZWQgaXMgZHVlIHRvIHRoZQorICogZ3JlcCAtdiBSVFBfUFJJ TyBzdGF0ZW1lbnQuIEEgYmV0dGVyIGVncmVwIGxpbmUgc2hvdWxkCisgKiBtYWtlIHRoaXMgY2Fw YWJsZSBvZiBiZWluZyBhIGF1dG9fc3dpdGNoX3R5cGUoKSBmdW5jdGlvbi4KKyAqLwordm9pZAor cnRwcmlvbmFtZSAoaW50IGZ1bmMpCit7CisJc3dpdGNoIChmdW5jKSB7CitfRU9GXworZWdyZXAg Il4jW1s6c3BhY2U6XV0qZGVmaW5lW1s6c3BhY2U6XV0rUlRQX1tBLVpdK1tbOnNwYWNlOl1dKzB4 WzAtOV0rW1s6c3BhY2U6XV0qIiBcCisJJGluY2x1ZGVfZGlyL3N5cy9ydHByaW8uaCB8IGdyZXAg LXYgUlRQX1BSSU8gfCBcCisJYXdrICd7IGZvciAoaSA9IDE7IGkgPD0gTkY7IGkrKykgXAorCQlp ZiAoJGkgfiAvZGVmaW5lLykgXAorCQkJYnJlYWs7IFwKKwkJKytpOyBcCisJCXByaW50ZiAiXHRj YXNlICVzOlxuXHRcdCh2b2lkKXByaW50ZihcIiVzXCIpO1xuXHRcdGJyZWFrO1xuIiwgJGksICRp IH0nCitjYXQgPDxfRU9GXworCWRlZmF1bHQ6IC8qIFNob3VsZCBub3QgcmVhY2ggKi8KKwkJKHZv aWQpcHJpbnRmKCI8aW52YWxpZD0lbGQ+IiwgKGxvbmcpZnVuYyk7CisJfQorfQorCisvKgorICog QVVUTyAtIFNwZWNpYWwKKyAqCisgKiBUaGUgc2VuZCBhbmQgcmVjdiBmdW5jdGlvbnMgaGF2ZSBh IGZsYWdzIGFyZ3VtZW50IHdoaWNoIGNhbiBiZQorICogc2V0IHRvIDAuIFRoZXJlIGlzIG5vIGNv cnJlc3BvbmRpbmcgI2RlZmluZS4gVGhlIGF1dG9fIGZ1bmN0aW9ucworICogZGV0ZWN0IHRoaXMg YXMgImludmFsaWQiLCB3aGljaCBpcyBpbmNvcnJlY3QgaGVyZS4KKyAqLwordm9pZAorc2VuZHJl Y3ZmbGFnc25hbWUgKGludCBmbGFncykKK3sKKwlpbnQJb3IgPSAwOworCQorCWlmIChmbGFncyA9 PSAwKSB7CisJCSh2b2lkKXByaW50ZigiMCIpOworCQlyZXR1cm47CisJfQorX0VPRl8KK2VncmVw ICJeI1tbOnNwYWNlOl1dKmRlZmluZVtbOnNwYWNlOl1dK01TR19bQS1aXStbWzpzcGFjZTpdXSsw eFswLTldK1tbOnNwYWNlOl1dKiIgJGluY2x1ZGVfZGlyL3N5cy9zb2NrZXQuaCB8IFwKKwlhd2sg J3sgZm9yIChpID0gMTsgaSA8PSBORjsgaSsrKSBcCisJCWlmICgkaSB+IC9kZWZpbmUvKSBcCisJ CQlicmVhazsgXAorCQkrK2k7IFwKKwkJcHJpbnRmICJcdGlmKCEoKGZsYWdzPjApXigoJXMpPjAp KSlcblx0XHRpZl9wcmludF9vcihmbGFncywgJXMsIG9yKTtcbiIsICRpLCAkaSB9JworY2F0IDw8 X0VPRl8KK30KKworX0VPRl8K ------=_Part_14898_9999084.1145479192476--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?35c231bf0604191339m598d9b7n6681421403d5d4e1>