From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: fix s_server with new glibc when no global IPv6 address (#839031) Date: Tue, 09 Jun 2026 12:42:40 GMT Message-ID: <178100896050.1.16650149501262620866.rpms-openssl-254f85a5c003@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 254f85a5c003c6687ea07695373f3770fdbe3832 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IDI1NGY4NWE1YzAwM2M2Njg3ZWEwNzY5NTM3M2Yz NzcwZmRiZTM4MzIKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTItMDctMTJUMDA6MDU6MTErMDI6MDAKU3RhdHMgIDogKzUxNi8tNTExIGlu IDIgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL29w ZW5zc2wvYy8yNTRmODVhNWMwMDNjNjY4N2VhMDc2OTUzNzNmMzc3MGZkYmUzODMyP2JyYW5jaD1y ZWJhc2VfNDBiZXRhCgpMb2c6CmZpeCBzX3NlcnZlciB3aXRoIG5ldyBnbGliYyB3aGVuIG5vIGds b2JhbCBJUHY2IGFkZHJlc3MgKCM4MzkwMzEpCgotLS0KZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4w LjEtYmV0YTItaXB2Ni1hcHBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMS1iZXRhMi1pcHY2LWFwcHMu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMmY2MGMuLjAwMDAwMDAKLS0t IGEvb3BlbnNzbC0xLjAuMS1iZXRhMi1pcHY2LWFwcHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSw1MTEgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3NfYXBwcy5o LmlwdjYtYXBwcyBvcGVuc3NsLTEuMC4xLWJldGEyL2FwcHMvc19hcHBzLmgKLS0tLSBvcGVuc3Ns LTEuMC4xLWJldGEyL2FwcHMvc19hcHBzLmguaXB2Ni1hcHBzCTIwMTItMDItMDIgMTI6NTY6Mjcu MjE2ODg5MTk4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3NfYXBwcy5oCTIw MTItMDItMDIgMTI6NTY6MjcuMjU3ODg5NTUyICswMTAwCi1AQCAtMTQ4LDcgKzE0OCw3IEBAIHR5 cGVkZWYgZmRfbWFzayBmZF9zZXQ7Ci0gI2RlZmluZSBQT1JUX1NUUiAgICAgICAgIjQ0MzMiCi0g I2RlZmluZSBQUk9UT0NPTCAgICAgICAgInRjcCIKLSAKLS1pbnQgZG9fc2VydmVyKGludCBwb3J0 LCBpbnQgdHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1 bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCk7Ci0raW50IGRv X3NlcnZlcihjaGFyICpwb3J0LCBpbnQgdHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAq aG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAq Y29udGV4dCk7Ci0gI2lmZGVmIEhFQURFUl9YNTA5X0gKLSBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5 X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7Ci0gI2VuZGlmCi1AQCAtMTU2 LDEwICsxNTYsOSBAQCBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywKLSBp bnQgc2V0X2NlcnRfc3R1ZmYoU1NMX0NUWCAqY3R4LCBjaGFyICpjZXJ0X2ZpbGUsIGNoYXIgKmtl eV9maWxlKTsKLSBpbnQgc2V0X2NlcnRfa2V5X3N0dWZmKFNTTF9DVFggKmN0eCwgWDUwOSAqY2Vy dCwgRVZQX1BLRVkgKmtleSk7Ci0gI2VuZGlmCi0taW50IGluaXRfY2xpZW50KGludCAqc29jaywg Y2hhciAqc2VydmVyLCBpbnQgcG9ydCwgaW50IHR5cGUpOwotK2ludCBpbml0X2NsaWVudChpbnQg KnNvY2ssIGNoYXIgKnNlcnZlciwgY2hhciAqcG9ydCwgaW50IHR5cGUpOwotIGludCBzaG91bGRf cmV0cnkoaW50IGkpOwotLWludCBleHRyYWN0X3BvcnQoY2hhciAqc3RyLCBzaG9ydCAqcG9ydF9w dHIpOwotLWludCBleHRyYWN0X2hvc3RfcG9ydChjaGFyICpzdHIsY2hhciAqKmhvc3RfcHRyLHVu c2lnbmVkIGNoYXIgKmlwLHNob3J0ICpwKTsKLStpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAq c3RyLGNoYXIgKipob3N0X3B0cixjaGFyICoqcG9ydF9wdHIpOwotIAotIGxvbmcgTVNfQ0FMTEJB Q0sgYmlvX2R1bXBfY2FsbGJhY2soQklPICpiaW8sIGludCBjbWQsIGNvbnN0IGNoYXIgKmFyZ3As Ci0gCQkJCSAgIGludCBhcmdpLCBsb25nIGFyZ2wsIGxvbmcgcmV0KTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjEtYmV0YTIvYXBwcy9zX2NsaWVudC5jLmlwdjYtYXBwcyBvcGVuc3NsLTEuMC4xLWJl dGEyL2FwcHMvc19jbGllbnQuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX2NsaWVu dC5jLmlwdjYtYXBwcwkyMDEyLTAyLTAyIDEyOjU2OjI3LjIzODg4OTM4OCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX2NsaWVudC5jCTIwMTItMDItMDIgMTI6NTY6MjcuMjU4 ODg5NTYxICswMTAwCi1AQCAtNTYzLDcgKzU2Myw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSAJaW50IGNidWZfbGVuLGNidWZfb2ZmOwotIAlpbnQgc2J1Zl9sZW4sc2J1Zl9v ZmY7Ci0gCWZkX3NldCByZWFkZmRzLHdyaXRlZmRzOwotLQlzaG9ydCBwb3J0PVBPUlQ7Ci0rCWNo YXIgKnBvcnRfc3RyID0gUE9SVF9TVFI7Ci0gCWludCBmdWxsX2xvZz0xOwotIAljaGFyICpob3N0 PVNTTF9IT1NUX05BTUU7Ci0gCWNoYXIgKmNlcnRfZmlsZT1OVUxMLCprZXlfZmlsZT1OVUxMOwot QEAgLTY3MCwxMyArNjcwLDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAJ CWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLXBvcnQiKSA9PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1h cmdjIDwgMSkgZ290byBiYWQ7Ci0tCQkJcG9ydD1hdG9pKCooKythcmd2KSk7Ci0tCQkJaWYgKHBv cnQgPT0gMCkgZ290byBiYWQ7Ci0rCQkJcG9ydF9zdHI9ICooKythcmd2KTsKLSAJCQl9Ci0gCQll bHNlIGlmIChzdHJjbXAoKmFyZ3YsIi1jb25uZWN0IikgPT0gMCkKLSAJCQl7Ci0gCQkJaWYgKC0t YXJnYyA8IDEpIGdvdG8gYmFkOwotLQkJCWlmICghZXh0cmFjdF9ob3N0X3BvcnQoKigrK2FyZ3Yp LCZob3N0LE5VTEwsJnBvcnQpKQotKwkJCWlmICghZXh0cmFjdF9ob3N0X3BvcnQoKigrK2FyZ3Yp LCZob3N0LCZwb3J0X3N0cikpCi0gCQkJCWdvdG8gYmFkOwotIAkJCX0KLSAJCWVsc2UgaWYJKHN0 cmNtcCgqYXJndiwiLXZlcmlmeSIpID09IDApCi1AQCAtMTI2MCw3ICsxMjU5LDcgQEAgYmFkOgot IAotIHJlX3N0YXJ0OgotIAotLQlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0LHNvY2tldF90 eXBlKSA9PSAwKQotKwlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0X3N0cixzb2NrZXRfdHlw ZSkgPT0gMCkKLSAJCXsKLSAJCUJJT19wcmludGYoYmlvX2VyciwiY29ubmVjdDplcnJubz0lZFxu IixnZXRfbGFzdF9zb2NrZXRfZXJyb3IoKSk7Ci0gCQlTSFVURE9XTihzKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NlcnZlci5jLmlwdjYtYXBwcyBvcGVuc3NsLTEuMC4x LWJldGEyL2FwcHMvc19zZXJ2ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3Nl cnZlci5jLmlwdjYtYXBwcwkyMDEyLTAyLTAyIDEyOjU2OjI3LjIzOTg4OTM5NyArMDEwMAotKysr IG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NlcnZlci5jCTIwMTItMDItMDIgMTI6NTY6Mjcu MjU5ODg5NTcwICswMTAwCi1AQCAtOTI5LDcgKzkyOSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBj aGFyICphcmd2W10pCi0gCXsKLSAJWDUwOV9WRVJJRllfUEFSQU0gKnZwbSA9IE5VTEw7Ci0gCWlu dCBiYWRhcmcgPSAwOwotLQlzaG9ydCBwb3J0PVBPUlQ7Ci0rCWNoYXIgKnBvcnRfc3RyID0gUE9S VF9TVFI7Ci0gCWNoYXIgKkNBcGF0aD1OVUxMLCpDQWZpbGU9TlVMTDsKLSAJdW5zaWduZWQgY2hh ciAqY29udGV4dCA9IE5VTEw7Ci0gCWNoYXIgKmRoZmlsZSA9IE5VTEw7Ci1AQCAtMTAxMCw4ICsx MDEwLDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJCQkgKHN0cmNtcCgq YXJndiwiLWFjY2VwdCIpID09IDApKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBi YWQ7Ci0tCQkJaWYgKCFleHRyYWN0X3BvcnQoKigrK2FyZ3YpLCZwb3J0KSkKLS0JCQkJZ290byBi YWQ7Ci0rCQkJcG9ydF9zdHI9ICooKythcmd2KTsKLSAJCQl9Ci0gCQllbHNlIGlmCShzdHJjbXAo KmFyZ3YsIi12ZXJpZnkiKSA9PSAwKQotIAkJCXsKLUBAIC0xODg4LDkgKzE4ODcsOSBAQCBiYWQ6 Ci0gCUJJT19wcmludGYoYmlvX3Nfb3V0LCJBQ0NFUFRcbiIpOwotIAkodm9pZClCSU9fZmx1c2go YmlvX3Nfb3V0KTsKLSAJaWYgKHd3dykKLS0JCWRvX3NlcnZlcihwb3J0LHNvY2tldF90eXBlLCZh Y2NlcHRfc29ja2V0LHd3d19ib2R5LCBjb250ZXh0KTsKLSsJCWRvX3NlcnZlcihwb3J0X3N0cixz b2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCx3d3dfYm9keSwgY29udGV4dCk7Ci0gCWVsc2UKLS0J CWRvX3NlcnZlcihwb3J0LHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0LHN2X2JvZHksIGNvbnRl eHQpOwotKwkJZG9fc2VydmVyKHBvcnRfc3RyLHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0LHN2 X2JvZHksIGNvbnRleHQpOwotIAlwcmludF9zdGF0cyhiaW9fc19vdXQsY3R4KTsKLSAJcmV0PTA7 Ci0gZW5kOgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3Nfc29ja2V0LmMuaXB2 Ni1hcHBzIG9wZW5zc2wtMS4wLjEtYmV0YTIvYXBwcy9zX3NvY2tldC5jCi0tLS0gb3BlbnNzbC0x LjAuMS1iZXRhMi9hcHBzL3Nfc29ja2V0LmMuaXB2Ni1hcHBzCTIwMTEtMTItMDIgMTU6Mzk6NDAu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMS1iZXRhMi9hcHBzL3Nfc29ja2V0LmMJ MjAxMi0wMS0xOSAxNDo1MzozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMDIsOSArMTAyLDcgQEAg c3RhdGljIHN0cnVjdCBob3N0ZW50ICpHZXRIb3N0QnlOYW1lKGNoYQotIHN0YXRpYyB2b2lkIHNz bF9zb2NrX2NsZWFudXAodm9pZCk7Ci0gI2VuZGlmCi0gc3RhdGljIGludCBzc2xfc29ja19pbml0 KHZvaWQpOwotLXN0YXRpYyBpbnQgaW5pdF9jbGllbnRfaXAoaW50ICpzb2NrLHVuc2lnbmVkIGNo YXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSk7Ci0tc3RhdGljIGludCBpbml0X3NlcnZlcihp bnQgKnNvY2ssIGludCBwb3J0LCBpbnQgdHlwZSk7Ci0tc3RhdGljIGludCBpbml0X3NlcnZlcl9s b25nKGludCAqc29jaywgaW50IHBvcnQsY2hhciAqaXAsIGludCB0eXBlKTsKLStzdGF0aWMgaW50 IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5cGUpOwotIHN0YXRpYyBp bnQgZG9fYWNjZXB0KGludCBhY2Nfc29jaywgaW50ICpzb2NrLCBjaGFyICoqaG9zdCk7Ci0gc3Rh dGljIGludCBob3N0X2lwKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciBpcFs0XSk7Ci0gCi1AQCAt MjM0LDU3ICsyMzIsNzAgQEAgc3RhdGljIGludCBzc2xfc29ja19pbml0KHZvaWQpCi0gCXJldHVy bigxKTsKLSAJfQotIAotLWludCBpbml0X2NsaWVudChpbnQgKnNvY2ssIGNoYXIgKmhvc3QsIGlu dCBwb3J0LCBpbnQgdHlwZSkKLStpbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpob3N0 LCBjaGFyICpwb3J0LCBpbnQgdHlwZSkKLSAJewotLQl1bnNpZ25lZCBjaGFyIGlwWzRdOwotLQot LQltZW1zZXQoaXAsICdcMCcsIHNpemVvZiBpcCk7Ci0tCWlmICghaG9zdF9pcChob3N0LCYoaXBb MF0pKSkKLS0JCXJldHVybiAwOwotLQlyZXR1cm4gaW5pdF9jbGllbnRfaXAoc29jayxpcCxwb3J0 LHR5cGUpOwotLQl9Ci0tCi0tc3RhdGljIGludCBpbml0X2NsaWVudF9pcChpbnQgKnNvY2ssIHVu c2lnbmVkIGNoYXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSkKLS0JewotLQl1bnNpZ25lZCBs b25nIGFkZHI7Ci0tCXN0cnVjdCBzb2NrYWRkcl9pbiB0aGVtOwotLQlpbnQgcyxpOwotKwlzdHJ1 Y3QgYWRkcmluZm8gKnJlcywgKnJlczAsIGhpbnRzOwotKwljaGFyICogZmFpbGVkX2NhbGwgPSBO VUxMOwotKwlpbnQgczsKLSsJaW50IGU7Ci0gCi0gCWlmICghc3NsX3NvY2tfaW5pdCgpKSByZXR1 cm4oMCk7Ci0gCi0tCW1lbXNldCgoY2hhciAqKSZ0aGVtLDAsc2l6ZW9mKHRoZW0pKTsKLS0JdGhl bS5zaW5fZmFtaWx5PUFGX0lORVQ7Ci0tCXRoZW0uc2luX3BvcnQ9aHRvbnMoKHVuc2lnbmVkIHNo b3J0KXBvcnQpOwotLQlhZGRyPSh1bnNpZ25lZCBsb25nKQotLQkJKCh1bnNpZ25lZCBsb25nKWlw WzBdPDwyNEwpfAotLQkJKCh1bnNpZ25lZCBsb25nKWlwWzFdPDwxNkwpfAotLQkJKCh1bnNpZ25l ZCBsb25nKWlwWzJdPDwgOEwpfAotLQkJKCh1bnNpZ25lZCBsb25nKWlwWzNdKTsKLS0JdGhlbS5z aW5fYWRkci5zX2FkZHI9aHRvbmwoYWRkcik7Ci0tCi0tCWlmICh0eXBlID09IFNPQ0tfU1RSRUFN KQotLQkJcz1zb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOwotLQll bHNlIC8qICggdHlwZSA9PSBTT0NLX0RHUkFNKSAqLwotLQkJcz1zb2NrZXQoQUZfSU5FVCxTT0NL X0RHUkFNLElQUFJPVE9fVURQKTsKLS0JCQkKLS0JaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsg cGVycm9yKCJzb2NrZXQiKTsgcmV0dXJuKDApOyB9Ci0rCW1lbXNldCgmaGludHMsICdcMCcsIHNp emVvZihoaW50cykpOwotKwloaW50cy5haV9zb2NrdHlwZSA9IHR5cGU7Ci0rCWhpbnRzLmFpX2Zs YWdzID0gQUlfQUREUkNPTkZJRzsKLSsKLSsJZSA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICZo aW50cywgJnJlcyk7Ci0rCWlmIChlKQotKwl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJp bmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGUpKTsKLSsJCWlmIChlID09IEVBSV9TWVNURU0pCi0r CQkJcGVycm9yKCJnZXRhZGRyaW5mbyIpOwotKwkJcmV0dXJuICgwKTsKLSsJCX0KLSAKLSsJcmVz MCA9IHJlczsKLSsJd2hpbGUgKHJlcykKLSsJCXsKLSsJCXMgPSBzb2NrZXQocmVzLT5haV9mYW1p bHksIHJlcy0+YWlfc29ja3R5cGUsIHJlcy0+YWlfcHJvdG9jb2wpOwotKwkJaWYgKHMgPT0gSU5W QUxJRF9TT0NLRVQpCi0rCQkJewotKwkJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7Ci0rCQkJZ290 byBuZXh0cmVzOwotKwkJCX0KLSAjaWYgZGVmaW5lZChTT19LRUVQQUxJVkUpICYmICFkZWZpbmVk KE9QRU5TU0xfU1lTX01QRSkKLSAJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCi0gCQl7Ci0tCQlp PTA7Ci0tCQlpPXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tFRVBBTElWRSwoY2hhciAqKSZp LHNpemVvZihpKSk7Ci0tCQlpZiAoaSA8IDApIHsgcGVycm9yKCJrZWVwYWxpdmUiKTsgcmV0dXJu KDApOyB9Ci0rCQkJaW50IGk9MDsKLSsJCQlpPXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tF RVBBTElWRSwKLSsJCQkJKGNoYXIgKikmaSxzaXplb2YoaSkpOwotKwkJCWlmIChpIDwgMCkgewot KwkJCQlmYWlsZWRfY2FsbCA9ICJrZWVwYWxpdmUiOwotKwkJCQlnb3RvIG5leHRyZXM7Ci0rCQkJ CX0KLSAJCX0KLSAjZW5kaWYKLS0KLS0JaWYgKGNvbm5lY3Qocywoc3RydWN0IHNvY2thZGRyICop JnRoZW0sc2l6ZW9mKHRoZW0pKSA9PSAtMSkKLS0JCXsgY2xvc2Vzb2NrZXQocyk7IHBlcnJvcigi Y29ubmVjdCIpOyByZXR1cm4oMCk7IH0KLSsJCWlmIChjb25uZWN0KHMsKHN0cnVjdCBzb2NrYWRk ciAqKXJlcy0+YWlfYWRkciwKLSsJCQlyZXMtPmFpX2FkZHJsZW4pID09IDApCi0rCQkJewotKwkJ CWZyZWVhZGRyaW5mbyhyZXMwKTsKLSAJKnNvY2s9czsKLSAJcmV0dXJuKDEpOwotIAl9Ci0gCi0t aW50IGRvX3NlcnZlcihpbnQgcG9ydCwgaW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikoY2hh ciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hh ciAqY29udGV4dCkKLSsJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7Ci0rbmV4dHJlczoKLSsJCWlm IChzICE9IElOVkFMSURfU09DS0VUKQotKwkJCWNsb3NlKHMpOwotKwkJcmVzID0gcmVzLT5haV9u ZXh0OwotKwkJfQotKwlmcmVlYWRkcmluZm8ocmVzMCk7Ci0rCi0rCXBlcnJvcihmYWlsZWRfY2Fs bCk7Ci0rCXJldHVybigwKTsKLSsJfQotKwotK2ludCBkb19zZXJ2ZXIoY2hhciAqcG9ydCwgaW50 IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25l ZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCkKLSAJewotIAlpbnQgc29j azsKLSAJY2hhciAqbmFtZSA9IE5VTEw7Ci1AQCAtMzIyLDMzICszMzMsNDUgQEAgaW50IGRvX3Nl cnZlcihpbnQgcG9ydCwgaW50IHR5cGUsIGludCAqcgotIAkJfQotIAl9Ci0gCi0tc3RhdGljIGlu dCBpbml0X3NlcnZlcl9sb25nKGludCAqc29jaywgaW50IHBvcnQsIGNoYXIgKmlwLCBpbnQgdHlw ZSkKLStzdGF0aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5 cGUpCi0gCXsKLS0JaW50IHJldD0wOwotLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOwotLQlp bnQgcz0gLTE7Ci0rCXN0cnVjdCBhZGRyaW5mbyAqcmVzLCAqcmVzMCA9IE5VTEwsIGhpbnRzOwot KwljaGFyICogZmFpbGVkX2NhbGwgPSBOVUxMOwotKwlpbnQgczsKLSsJaW50IGU7Ci0gCi0gCWlm ICghc3NsX3NvY2tfaW5pdCgpKSByZXR1cm4oMCk7Ci0gCi0tCW1lbXNldCgoY2hhciAqKSZzZXJ2 ZXIsMCxzaXplb2Yoc2VydmVyKSk7Ci0tCXNlcnZlci5zaW5fZmFtaWx5PUFGX0lORVQ7Ci0tCXNl cnZlci5zaW5fcG9ydD1odG9ucygodW5zaWduZWQgc2hvcnQpcG9ydCk7Ci0tCWlmIChpcCA9PSBO VUxMKQotLQkJc2VydmVyLnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5ZOwotLQllbHNlCi0tLyog QWRkZWQgZm9yIFQzRSwgYWRkcmVzcy1vZiBmYWlscyBvbiBiaXQgZmllbGQgKGJlY2ttYW5AYWNs LmxhbmwuZ292KSAqLwotLSNpZm5kZWYgQklUX0ZJRUxEX0xJTUlUUwotLQkJbWVtY3B5KCZzZXJ2 ZXIuc2luX2FkZHIuc19hZGRyLGlwLDQpOwotLSNlbHNlCi0tCQltZW1jcHkoJnNlcnZlci5zaW5f YWRkcixpcCw0KTsKLS0jZW5kaWYKLSsJbWVtc2V0KCZoaW50cywgJ1wwJywgc2l6ZW9mKGhpbnRz KSk7Ci0rICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKLSt0cnlpcHY0OgotKwlo aW50cy5haV9zb2NrdHlwZSA9IHR5cGU7Ci0rCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8 IEFJX0FERFJDT05GSUc7Ci0gCQotLQkJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCi0tCQkJcz1z b2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOwotLQkJZWxzZSAvKiB0 eXBlID09IFNPQ0tfREdSQU0gKi8KLS0JCQlzPXNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLElQ UFJPVE9fVURQKTsKLSsJZSA9IGdldGFkZHJpbmZvKE5VTEwsIHBvcnQsICZoaW50cywgJnJlcyk7 Ci0rCWlmIChlKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJnZXRhZGRyaW5mbzogJXNcbiIs IGdhaV9zdHJlcnJvcihlKSk7Ci0rCQlpZiAoZSA9PSBFQUlfU1lTVEVNKQotKwkJCXBlcnJvcigi Z2V0YWRkcmluZm8iKTsKLSsJCXJldHVybiAoMCk7Ci0rCQl9Ci0gCi0tCWlmIChzID09IElOVkFM SURfU09DS0VUKSBnb3RvIGVycjsKLSsJcmVzMCA9IHJlczsKLSsJd2hpbGUgKHJlcykKLSsJCXsK LSsJCXMgPSBzb2NrZXQocmVzLT5haV9mYW1pbHksIHJlcy0+YWlfc29ja3R5cGUsIHJlcy0+YWlf cHJvdG9jb2wpOwotKwkJaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpCi0rCQkJewotKwkJCWZhaWxl ZF9jYWxsID0gInNvY2tldCI7Ci0rCQkJZ290byBuZXh0cmVzOwotKwkJCX0KLSsJCWlmIChoaW50 cy5haV9mYW1pbHkgPT0gQUZfSU5FVDYpCi0rCQkJewotKwkJCWludCBqID0gMDsKLSsJCQlzZXRz b2Nrb3B0KHMsIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksCi0rCQkJCSAgICh2b2lkICopICZq LCBzaXplb2Ygaik7Ci0rCQkJfQotICNpZiBkZWZpbmVkIFNPTF9TT0NLRVQgJiYgZGVmaW5lZCBT T19SRVVTRUFERFIKLSAJCXsKLSAJCWludCBqID0gMTsKLUBAIC0zNTYsMzUgKzM3OSw0OSBAQCBz dGF0aWMgaW50IGluaXRfc2VydmVyX2xvbmcoaW50ICpzb2NrLCBpCi0gCQkJICAgKHZvaWQgKikg JmosIHNpemVvZiBqKTsKLSAJCX0KLSAjZW5kaWYKLS0JaWYgKGJpbmQocywoc3RydWN0IHNvY2th ZGRyICopJnNlcnZlcixzaXplb2Yoc2VydmVyKSkgPT0gLTEpCi0rCi0rCQlpZiAoYmluZChzLChz dHJ1Y3Qgc29ja2FkZHIgKilyZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbikgPT0gLTEpCi0g CQl7Ci0tI2lmbmRlZiBPUEVOU1NMX1NZU19XSU5ET1dTCi0tCQlwZXJyb3IoImJpbmQiKTsKLS0j ZW5kaWYKLS0JCWdvdG8gZXJyOwotKwkJCWZhaWxlZF9jYWxsID0gImJpbmQiOwotKwkJCWdvdG8g bmV4dHJlczsKLSAJCX0KLS0JLyogTWFrZSBpdCAxMjggZm9yIGxpbnV4ICovCi0tCWlmICh0eXBl PT1TT0NLX1NUUkVBTSAmJiBsaXN0ZW4ocywxMjgpID09IC0xKSBnb3RvIGVycjsKLS0JKnNvY2s9 czsKLS0JcmV0PTE7Ci0tZXJyOgotLQlpZiAoKHJldCA9PSAwKSAmJiAocyAhPSAtMSkpCi0rCQlp ZiAodHlwZT09U09DS19TVFJFQU0gJiYgbGlzdGVuKHMsMTI4KSA9PSAtMSkKLSAJCXsKLS0JCVNI VVRET1dOKHMpOwotKwkJCWZhaWxlZF9jYWxsID0gImxpc3RlbiI7Ci0rCQkJZ290byBuZXh0cmVz OwotIAkJfQotLQlyZXR1cm4ocmV0KTsKLSsKLSsJCSpzb2NrPXM7Ci0rCQlyZXR1cm4oMSk7Ci0r Ci0rbmV4dHJlczoKLSsJCWlmIChzICE9IElOVkFMSURfU09DS0VUKQotKwkJCWNsb3NlKHMpOwot KwkJcmVzID0gcmVzLT5haV9uZXh0OwotIAl9Ci0rCWlmIChyZXMwKQotKwkJZnJlZWFkZHJpbmZv KHJlczApOwotIAotLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50ICpzb2NrLCBpbnQgcG9ydCwg aW50IHR5cGUpCi0rCWlmIChzID09IElOVkFMSURfU09DS0VUKQotIAl7Ci0tCXJldHVybihpbml0 X3NlcnZlcl9sb25nKHNvY2ssIHBvcnQsIE5VTEwsIHR5cGUpKTsKLSsJCWlmIChoaW50cy5haV9m YW1pbHkgPT0gQUZfSU5FVDYpCi0rCQl7Ci0rCQkJaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDsK LSsJCQlnb3RvIHRyeWlwdjQ7Ci0rCQl9Ci0rCQlwZXJyb3IoInNvY2tldCIpOwotKwkJcmV0dXJu KDApOwotKwl9Ci0rCi0rCXBlcnJvcihmYWlsZWRfY2FsbCk7Ci0rCXJldHVybigwKTsKLSAJfQot IAotIHN0YXRpYyBpbnQgZG9fYWNjZXB0KGludCBhY2Nfc29jaywgaW50ICpzb2NrLCBjaGFyICoq aG9zdCkKLSAJewotKwlzdGF0aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKLSsJY2hh ciBidWZmZXJbTklfTUFYSE9TVF07Ci0gCWludCByZXQ7Ci0tCXN0cnVjdCBob3N0ZW50ICpoMSwq aDI7Ci0tCXN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gZnJvbTsKLSAJaW50IGxlbjsKLSAvKglz dHJ1Y3QgbGluZ2VyIGxpbmc7ICovCi0gCi1AQCAtNDMxLDEzNSArNDY4LDU4IEBAIHJlZG9pdDoK LSAqLwotIAotIAlpZiAoaG9zdCA9PSBOVUxMKSBnb3RvIGVuZDsKLS0jaWZuZGVmIEJJVF9GSUVM RF9MSU1JVFMKLS0JLyogSSBzaG91bGQgdXNlIFdTQUFzeW5jR2V0SG9zdEJ5TmFtZSgpIHVuZGVy IHdpbmRvd3MgKi8KLS0JaDE9Z2V0aG9zdGJ5YWRkcigoY2hhciAqKSZmcm9tLnNpbl9hZGRyLnNf YWRkciwKLS0JCXNpemVvZihmcm9tLnNpbl9hZGRyLnNfYWRkciksQUZfSU5FVCk7Ci0tI2Vsc2UK LS0JaDE9Z2V0aG9zdGJ5YWRkcigoY2hhciAqKSZmcm9tLnNpbl9hZGRyLAotLQkJc2l6ZW9mKHN0 cnVjdCBpbl9hZGRyKSxBRl9JTkVUKTsKLS0jZW5kaWYKLS0JaWYgKGgxID09IE5VTEwpCi0rCi0r CWlmIChnZXRuYW1laW5mbygoc3RydWN0IHNvY2thZGRyICopJmZyb20sIHNpemVvZihmcm9tKSwK LSsJCWJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0rCQlOVUxMLCAwLCAwKSkKLSAJCXsKLS0JCUJJ T19wcmludGYoYmlvX2VyciwiYmFkIGdldGhvc3RieWFkZHJcbiIpOwotKwkJQklPX3ByaW50Zihi aW9fZXJyLCJnZXRuYW1laW5mbyBmYWlsZWRcbiIpOwotIAkJKmhvc3Q9TlVMTDsKLSAJCS8qIHJl dHVybigwKTsgKi8KLSAJCX0KLSAJZWxzZQotIAkJewotLQkJaWYgKCgqaG9zdD0oY2hhciAqKU9Q RU5TU0xfbWFsbG9jKHN0cmxlbihoMS0+aF9uYW1lKSsxKSkgPT0gTlVMTCkKLSsJCWlmICgoKmhv c3Q9KGNoYXIgKilPUEVOU1NMX21hbGxvYyhzdHJsZW4oYnVmZmVyKSsxKSkgPT0gTlVMTCkKLSAJ CQl7Ci0gCQkJcGVycm9yKCJPUEVOU1NMX21hbGxvYyIpOwotIAkJCXJldHVybigwKTsKLSAJCQl9 Ci0tCQlCVUZfc3RybGNweSgqaG9zdCxoMS0+aF9uYW1lLHN0cmxlbihoMS0+aF9uYW1lKSsxKTsK LS0KLS0JCWgyPUdldEhvc3RCeU5hbWUoKmhvc3QpOwotLQkJaWYgKGgyID09IE5VTEwpCi0tCQkJ ewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBmYWlsdXJlXG4iKTsKLS0J CQlyZXR1cm4oMCk7Ci0tCQkJfQotLQkJaWYgKGgyLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpCi0t CQkJewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBhZGRyIGlzIG5vdCBB Rl9JTkVUXG4iKTsKLS0JCQlyZXR1cm4oMCk7Ci0tCQkJfQotKwkJc3RyY3B5KCpob3N0LCBidWZm ZXIpOwotIAkJfQotIGVuZDoKLSAJKnNvY2s9cmV0OwotIAlyZXR1cm4oMSk7Ci0gCX0KLSAKLS1p bnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLCBjaGFyICoqaG9zdF9wdHIsIHVuc2lnbmVk IGNoYXIgKmlwLAotLQkgICAgIHNob3J0ICpwb3J0X3B0cikKLStpbnQgZXh0cmFjdF9ob3N0X3Bv cnQoY2hhciAqc3RyLCBjaGFyICoqaG9zdF9wdHIsIAotKwkgICAgIGNoYXIgKipwb3J0X3B0cikK LSAJewotLQljaGFyICpoLCpwOwotKwljaGFyICpoLCpwLCp4OwotIAotLQloPXN0cjsKLS0JcD1z dHJjaHIoc3RyLCc6Jyk7Ci0rCXg9aD1zdHI7Ci0rCWlmICgqaCA9PSAnWycpCi0rCQl7Ci0rCQlo Kys7Ci0rCQlwPXN0cmNocihoLCddJyk7Ci0gCWlmIChwID09IE5VTEwpCi0gCQl7Ci0tCQlCSU9f cHJpbnRmKGJpb19lcnIsIm5vIHBvcnQgZGVmaW5lZFxuIik7Ci0rCQkJQklPX3ByaW50ZihiaW9f ZXJyLCJubyBlbmRpbmcgYnJhY2tldCBmb3IgSVB2NiBhZGRyZXNzXG4iKTsKLSAJCXJldHVybigw KTsKLSAJCX0KLSAJKihwKyspPSdcMCc7Ci0tCi0tCWlmICgoaXAgIT0gTlVMTCkgJiYgIWhvc3Rf aXAoc3RyLGlwKSkKLS0JCWdvdG8gZXJyOwotLQlpZiAoaG9zdF9wdHIgIT0gTlVMTCkgKmhvc3Rf cHRyPWg7Ci0tCi0tCWlmICghZXh0cmFjdF9wb3J0KHAscG9ydF9wdHIpKQotLQkJZ290byBlcnI7 Ci0tCXJldHVybigxKTsKLS1lcnI6Ci0tCXJldHVybigwKTsKLSsJCXggPSBwOwotIAl9Ci0tCi0t c3RhdGljIGludCBob3N0X2lwKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciBpcFs0XSkKLS0Jewot LQl1bnNpZ25lZCBpbnQgaW5bNF07IAotLQlpbnQgaTsKLS0KLS0JaWYgKHNzY2FuZihzdHIsIiV1 LiV1LiV1LiV1IiwmKGluWzBdKSwmKGluWzFdKSwmKGluWzJdKSwmKGluWzNdKSkgPT0gNCkKLS0J CXsKLS0JCWZvciAoaT0wOyBpPDQ7IGkrKykKLS0JCQlpZiAoaW5baV0gPiAyNTUpCi0tCQkJCXsK LS0JCQkJQklPX3ByaW50ZihiaW9fZXJyLCJpbnZhbGlkIElQIGFkZHJlc3NcbiIpOwotLQkJCQln b3RvIGVycjsKLS0JCQkJfQotLQkJaXBbMF09aW5bMF07Ci0tCQlpcFsxXT1pblsxXTsKLS0JCWlw WzJdPWluWzJdOwotLQkJaXBbM109aW5bM107Ci0tCQl9Ci0tCWVsc2UKLS0JCXsgLyogZG8gYSBn ZXRob3N0YnluYW1lICovCi0tCQlzdHJ1Y3QgaG9zdGVudCAqaGU7Ci0tCi0tCQlpZiAoIXNzbF9z b2NrX2luaXQoKSkgcmV0dXJuKDApOwotLQotLQkJaGU9R2V0SG9zdEJ5TmFtZShzdHIpOwotLQkJ aWYgKGhlID09IE5VTEwpCi0tCQkJewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5 bmFtZSBmYWlsdXJlXG4iKTsKLS0JCQlnb3RvIGVycjsKLS0JCQl9Ci0tCQkvKiBjYXN0IHRvIHNo b3J0IGJlY2F1c2Ugb2Ygd2luMTYgd2luc29jayBkZWZpbml0aW9uICovCi0tCQlpZiAoKHNob3J0 KWhlLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQpCi0rCXA9c3RyY2hyKHgsJzonKTsKLSsJaWYgKHAg PT0gTlVMTCkKLSAJCQl7Ci0tCQkJQklPX3ByaW50ZihiaW9fZXJyLCJnZXRob3N0YnluYW1lIGFk ZHIgaXMgbm90IEFGX0lORVRcbiIpOwotLQkJCXJldHVybigwKTsKLS0JCQl9Ci0tCQlpcFswXT1o ZS0+aF9hZGRyX2xpc3RbMF1bMF07Ci0tCQlpcFsxXT1oZS0+aF9hZGRyX2xpc3RbMF1bMV07Ci0t CQlpcFsyXT1oZS0+aF9hZGRyX2xpc3RbMF1bMl07Ci0tCQlpcFszXT1oZS0+aF9hZGRyX2xpc3Rb MF1bM107Ci0tCQl9Ci0tCXJldHVybigxKTsKLS1lcnI6Ci0rCQlCSU9fcHJpbnRmKGJpb19lcnIs Im5vIHBvcnQgZGVmaW5lZFxuIik7Ci0gCXJldHVybigwKTsKLSAJfQotKwkqKHArKyk9J1wwJzsK LSAKLS1pbnQgZXh0cmFjdF9wb3J0KGNoYXIgKnN0ciwgc2hvcnQgKnBvcnRfcHRyKQotLQl7Ci0t CWludCBpOwotLQlzdHJ1Y3Qgc2VydmVudCAqczsKLSsJaWYgKGhvc3RfcHRyICE9IE5VTEwpICpo b3N0X3B0cj1oOwotKwlpZiAocG9ydF9wdHIgIT0gTlVMTCkgKnBvcnRfcHRyPXA7Ci0gCi0tCWk9 YXRvaShzdHIpOwotLQlpZiAoaSAhPSAwKQotLQkJKnBvcnRfcHRyPSh1bnNpZ25lZCBzaG9ydClp OwotLQllbHNlCi0tCQl7Ci0tCQlzPWdldHNlcnZieW5hbWUoc3RyLCJ0Y3AiKTsKLS0JCWlmIChz ID09IE5VTEwpCi0tCQkJewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0c2VydmJ5bmFtZSBm YWlsdXJlIGZvciAlc1xuIixzdHIpOwotLQkJCXJldHVybigwKTsKLS0JCQl9Ci0tCQkqcG9ydF9w dHI9bnRvaHMoKHVuc2lnbmVkIHNob3J0KXMtPnNfcG9ydCk7Ci0tCQl9Ci0gCXJldHVybigxKTsK LSAJfQotIAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjFjLWlwdjYtYXBwcy5wYXRjaCBiL29w ZW5zc2wtMS4wLjFjLWlwdjYtYXBwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi40MWUwYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMWMtaXB2Ni1h cHBzLnBhdGNoCkBAIC0wLDAgKzEsNTE2IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9hcHBz L3NfYXBwcy5oLmlwdjYtYXBwcyBvcGVuc3NsLTEuMC4xYy9hcHBzL3NfYXBwcy5oCistLS0gb3Bl bnNzbC0xLjAuMWMvYXBwcy9zX2FwcHMuaC5pcHY2LWFwcHMJMjAxMi0wNy0xMSAyMjo0NjowMi40 MDkyMjEyMDYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9hcHBzL3NfYXBwcy5oCTIwMTItMDct MTEgMjI6NDY6MDIuNDUxMjIyMTY1ICswMjAwCitAQCAtMTQ4LDcgKzE0OCw3IEBAIHR5cGVkZWYg ZmRfbWFzayBmZF9zZXQ7CisgI2RlZmluZSBQT1JUX1NUUiAgICAgICAgIjQ0MzMiCisgI2RlZmlu ZSBQUk9UT0NPTCAgICAgICAgInRjcCIKKyAKKy1pbnQgZG9fc2VydmVyKGludCBwb3J0LCBpbnQg dHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25l ZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCk7CisraW50IGRvX3NlcnZl cihjaGFyICpwb3J0LCBpbnQgdHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5h bWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4 dCk7CisgI2lmZGVmIEhFQURFUl9YNTA5X0gKKyBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxi YWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7CisgI2VuZGlmCitAQCAtMTU2LDEwICsx NTYsOSBAQCBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywKKyBpbnQgc2V0 X2NlcnRfc3R1ZmYoU1NMX0NUWCAqY3R4LCBjaGFyICpjZXJ0X2ZpbGUsIGNoYXIgKmtleV9maWxl KTsKKyBpbnQgc2V0X2NlcnRfa2V5X3N0dWZmKFNTTF9DVFggKmN0eCwgWDUwOSAqY2VydCwgRVZQ X1BLRVkgKmtleSk7CisgI2VuZGlmCistaW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAq c2VydmVyLCBpbnQgcG9ydCwgaW50IHR5cGUpOworK2ludCBpbml0X2NsaWVudChpbnQgKnNvY2ss IGNoYXIgKnNlcnZlciwgY2hhciAqcG9ydCwgaW50IHR5cGUpOworIGludCBzaG91bGRfcmV0cnko aW50IGkpOworLWludCBleHRyYWN0X3BvcnQoY2hhciAqc3RyLCBzaG9ydCAqcG9ydF9wdHIpOwor LWludCBleHRyYWN0X2hvc3RfcG9ydChjaGFyICpzdHIsY2hhciAqKmhvc3RfcHRyLHVuc2lnbmVk IGNoYXIgKmlwLHNob3J0ICpwKTsKKytpbnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNo YXIgKipob3N0X3B0cixjaGFyICoqcG9ydF9wdHIpOworIAorIGxvbmcgTVNfQ0FMTEJBQ0sgYmlv X2R1bXBfY2FsbGJhY2soQklPICpiaW8sIGludCBjbWQsIGNvbnN0IGNoYXIgKmFyZ3AsCisgCQkJ CSAgIGludCBhcmdpLCBsb25nIGFyZ2wsIGxvbmcgcmV0KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjFjL2FwcHMvc19jbGllbnQuYy5pcHY2LWFwcHMgb3BlbnNzbC0xLjAuMWMvYXBwcy9zX2NsaWVu dC5jCistLS0gb3BlbnNzbC0xLjAuMWMvYXBwcy9zX2NsaWVudC5jLmlwdjYtYXBwcwkyMDEyLTA3 LTExIDIyOjQ2OjAyLjQzMzIyMTc1NCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjFjL2FwcHMvc19j bGllbnQuYwkyMDEyLTA3LTExIDIyOjQ2OjAyLjQ1MjIyMjE4NyArMDIwMAorQEAgLTU2Myw3ICs1 NjMsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWludCBjYnVmX2xlbixj YnVmX29mZjsKKyAJaW50IHNidWZfbGVuLHNidWZfb2ZmOworIAlmZF9zZXQgcmVhZGZkcyx3cml0 ZWZkczsKKy0Jc2hvcnQgcG9ydD1QT1JUOworKwljaGFyICpwb3J0X3N0ciA9IFBPUlRfU1RSOwor IAlpbnQgZnVsbF9sb2c9MTsKKyAJY2hhciAqaG9zdD1TU0xfSE9TVF9OQU1FOworIAljaGFyICpj ZXJ0X2ZpbGU9TlVMTCwqa2V5X2ZpbGU9TlVMTDsKK0BAIC02NjQsMTMgKzY2NCwxMiBAQCBpbnQg TUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1w b3J0IikgPT0gMCkKKyAJCQl7CisgCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworLQkJCXBv cnQ9YXRvaSgqKCsrYXJndikpOworLQkJCWlmIChwb3J0ID09IDApIGdvdG8gYmFkOworKwkJCXBv cnRfc3RyPSAqKCsrYXJndik7CisgCQkJfQorIAkJZWxzZSBpZiAoc3RyY21wKCphcmd2LCItY29u bmVjdCIpID09IDApCisgCQkJeworIAkJCWlmICgtLWFyZ2MgPCAxKSBnb3RvIGJhZDsKKy0JCQlp ZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwmaG9zdCxOVUxMLCZwb3J0KSkKKysJCQlp ZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwmaG9zdCwmcG9ydF9zdHIpKQorIAkJCQln b3RvIGJhZDsKKyAJCQl9CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi12ZXJpZnkiKSA9PSAw KQorQEAgLTEyNTMsNyArMTI1Miw3IEBAIGJhZDoKKyAKKyByZV9zdGFydDoKKyAKKy0JaWYgKGlu aXRfY2xpZW50KCZzLGhvc3QscG9ydCxzb2NrZXRfdHlwZSkgPT0gMCkKKysJaWYgKGluaXRfY2xp ZW50KCZzLGhvc3QscG9ydF9zdHIsc29ja2V0X3R5cGUpID09IDApCisgCQl7CisgCQlCSU9fcHJp bnRmKGJpb19lcnIsImNvbm5lY3Q6ZXJybm89JWRcbiIsZ2V0X2xhc3Rfc29ja2V0X2Vycm9yKCkp OworIAkJU0hVVERPV04ocyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9hcHBzL3Nfc2VydmVy LmMuaXB2Ni1hcHBzIG9wZW5zc2wtMS4wLjFjL2FwcHMvc19zZXJ2ZXIuYworLS0tIG9wZW5zc2wt MS4wLjFjL2FwcHMvc19zZXJ2ZXIuYy5pcHY2LWFwcHMJMjAxMi0wNy0xMSAyMjo0NjowMi40MzQy MjE3NzcgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9hcHBzL3Nfc2VydmVyLmMJMjAxMi0wNy0x MSAyMjo0NjowMi40NTMyMjIyMTAgKzAyMDAKK0BAIC05MjksNyArOTI5LDcgQEAgaW50IE1BSU4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJeworIAlYNTA5X1ZFUklGWV9QQVJBTSAqdnBtID0g TlVMTDsKKyAJaW50IGJhZGFyZyA9IDA7CistCXNob3J0IHBvcnQ9UE9SVDsKKysJY2hhciAqcG9y dF9zdHIgPSBQT1JUX1NUUjsKKyAJY2hhciAqQ0FwYXRoPU5VTEwsKkNBZmlsZT1OVUxMOworIAl1 bnNpZ25lZCBjaGFyICpjb250ZXh0ID0gTlVMTDsKKyAJY2hhciAqZGhmaWxlID0gTlVMTDsKK0BA IC0xMDAwLDggKzEwMDAsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJ CSAoc3RyY21wKCphcmd2LCItYWNjZXB0IikgPT0gMCkpCisgCQkJeworIAkJCWlmICgtLWFyZ2Mg PCAxKSBnb3RvIGJhZDsKKy0JCQlpZiAoIWV4dHJhY3RfcG9ydCgqKCsrYXJndiksJnBvcnQpKQor LQkJCQlnb3RvIGJhZDsKKysJCQlwb3J0X3N0cj0gKigrK2FyZ3YpOworIAkJCX0KKyAJCWVsc2Ug aWYJKHN0cmNtcCgqYXJndiwiLXZlcmlmeSIpID09IDApCisgCQkJeworQEAgLTE4NzgsOSArMTg3 Nyw5IEBAIGJhZDoKKyAJQklPX3ByaW50ZihiaW9fc19vdXQsIkFDQ0VQVFxuIik7CisgCSh2b2lk KUJJT19mbHVzaChiaW9fc19vdXQpOworIAlpZiAod3d3KQorLQkJZG9fc2VydmVyKHBvcnQsc29j a2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsd3d3X2JvZHksIGNvbnRleHQpOworKwkJZG9fc2VydmVy KHBvcnRfc3RyLHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0LHd3d19ib2R5LCBjb250ZXh0KTsK KyAJZWxzZQorLQkJZG9fc2VydmVyKHBvcnQsc29ja2V0X3R5cGUsJmFjY2VwdF9zb2NrZXQsc3Zf Ym9keSwgY29udGV4dCk7CisrCQlkb19zZXJ2ZXIocG9ydF9zdHIsc29ja2V0X3R5cGUsJmFjY2Vw dF9zb2NrZXQsc3ZfYm9keSwgY29udGV4dCk7CisgCXByaW50X3N0YXRzKGJpb19zX291dCxjdHgp OworIAlyZXQ9MDsKKyBlbmQ6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4xYy9hcHBzL3Nfc29ja2V0 LmMuaXB2Ni1hcHBzIG9wZW5zc2wtMS4wLjFjL2FwcHMvc19zb2NrZXQuYworLS0tIG9wZW5zc2wt MS4wLjFjL2FwcHMvc19zb2NrZXQuYy5pcHY2LWFwcHMJMjAxMS0xMi0wMiAxNTozOTo0MC4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9hcHBzL3Nfc29ja2V0LmMJMjAxMi0wNy0x MSAyMjo0OTowNS40MTE0MDA0NTAgKzAyMDAKK0BAIC0xMDIsOSArMTAyLDcgQEAgc3RhdGljIHN0 cnVjdCBob3N0ZW50ICpHZXRIb3N0QnlOYW1lKGNoYQorIHN0YXRpYyB2b2lkIHNzbF9zb2NrX2Ns ZWFudXAodm9pZCk7CisgI2VuZGlmCisgc3RhdGljIGludCBzc2xfc29ja19pbml0KHZvaWQpOwor LXN0YXRpYyBpbnQgaW5pdF9jbGllbnRfaXAoaW50ICpzb2NrLHVuc2lnbmVkIGNoYXIgaXBbNF0s IGludCBwb3J0LCBpbnQgdHlwZSk7Cistc3RhdGljIGludCBpbml0X3NlcnZlcihpbnQgKnNvY2ss IGludCBwb3J0LCBpbnQgdHlwZSk7Cistc3RhdGljIGludCBpbml0X3NlcnZlcl9sb25nKGludCAq c29jaywgaW50IHBvcnQsY2hhciAqaXAsIGludCB0eXBlKTsKKytzdGF0aWMgaW50IGluaXRfc2Vy dmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5cGUpOworIHN0YXRpYyBpbnQgZG9fYWNj ZXB0KGludCBhY2Nfc29jaywgaW50ICpzb2NrLCBjaGFyICoqaG9zdCk7Cisgc3RhdGljIGludCBo b3N0X2lwKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciBpcFs0XSk7CisgCitAQCAtMjM0LDU3ICsy MzIsNzAgQEAgc3RhdGljIGludCBzc2xfc29ja19pbml0KHZvaWQpCisgCXJldHVybigxKTsKKyAJ fQorIAorLWludCBpbml0X2NsaWVudChpbnQgKnNvY2ssIGNoYXIgKmhvc3QsIGludCBwb3J0LCBp bnQgdHlwZSkKKytpbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpob3N0LCBjaGFyICpw b3J0LCBpbnQgdHlwZSkKKyAJeworLQl1bnNpZ25lZCBjaGFyIGlwWzRdOworLQorLQltZW1zZXQo aXAsICdcMCcsIHNpemVvZiBpcCk7CistCWlmICghaG9zdF9pcChob3N0LCYoaXBbMF0pKSkKKy0J CXJldHVybiAwOworLQlyZXR1cm4gaW5pdF9jbGllbnRfaXAoc29jayxpcCxwb3J0LHR5cGUpOwor LQl9CistCistc3RhdGljIGludCBpbml0X2NsaWVudF9pcChpbnQgKnNvY2ssIHVuc2lnbmVkIGNo YXIgaXBbNF0sIGludCBwb3J0LCBpbnQgdHlwZSkKKy0JeworLQl1bnNpZ25lZCBsb25nIGFkZHI7 CistCXN0cnVjdCBzb2NrYWRkcl9pbiB0aGVtOworLQlpbnQgcyxpOworKwlzdHJ1Y3QgYWRkcmlu Zm8gKnJlcywgKnJlczAsIGhpbnRzOworKwljaGFyICogZmFpbGVkX2NhbGwgPSBOVUxMOworKwlp bnQgczsKKysJaW50IGU7CisgCisgCWlmICghc3NsX3NvY2tfaW5pdCgpKSByZXR1cm4oMCk7Cisg CistCW1lbXNldCgoY2hhciAqKSZ0aGVtLDAsc2l6ZW9mKHRoZW0pKTsKKy0JdGhlbS5zaW5fZmFt aWx5PUFGX0lORVQ7CistCXRoZW0uc2luX3BvcnQ9aHRvbnMoKHVuc2lnbmVkIHNob3J0KXBvcnQp OworLQlhZGRyPSh1bnNpZ25lZCBsb25nKQorLQkJKCh1bnNpZ25lZCBsb25nKWlwWzBdPDwyNEwp fAorLQkJKCh1bnNpZ25lZCBsb25nKWlwWzFdPDwxNkwpfAorLQkJKCh1bnNpZ25lZCBsb25nKWlw WzJdPDwgOEwpfAorLQkJKCh1bnNpZ25lZCBsb25nKWlwWzNdKTsKKy0JdGhlbS5zaW5fYWRkci5z X2FkZHI9aHRvbmwoYWRkcik7CistCistCWlmICh0eXBlID09IFNPQ0tfU1RSRUFNKQorLQkJcz1z b2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOworLQllbHNlIC8qICgg dHlwZSA9PSBTT0NLX0RHUkFNKSAqLworLQkJcz1zb2NrZXQoQUZfSU5FVCxTT0NLX0RHUkFNLElQ UFJPVE9fVURQKTsKKy0JCQkKKy0JaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsgcGVycm9yKCJz b2NrZXQiKTsgcmV0dXJuKDApOyB9CisrCW1lbXNldCgmaGludHMsICdcMCcsIHNpemVvZihoaW50 cykpOworKwloaW50cy5haV9zb2NrdHlwZSA9IHR5cGU7CisrCWhpbnRzLmFpX2ZsYWdzID0gQUlf QUREUkNPTkZJRzsKKysKKysJZSA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICZoaW50cywgJnJl cyk7CisrCWlmIChlKQorKwl7CisrCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xu IiwgZ2FpX3N0cmVycm9yKGUpKTsKKysJCWlmIChlID09IEVBSV9TWVNURU0pCisrCQkJcGVycm9y KCJnZXRhZGRyaW5mbyIpOworKwkJcmV0dXJuICgwKTsKKysJCX0KKyAKKysJcmVzMCA9IHJlczsK KysJd2hpbGUgKHJlcykKKysJCXsKKysJCXMgPSBzb2NrZXQocmVzLT5haV9mYW1pbHksIHJlcy0+ YWlfc29ja3R5cGUsIHJlcy0+YWlfcHJvdG9jb2wpOworKwkJaWYgKHMgPT0gSU5WQUxJRF9TT0NL RVQpCisrCQkJeworKwkJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7CisrCQkJZ290byBuZXh0cmVz OworKwkJCX0KKyAjaWYgZGVmaW5lZChTT19LRUVQQUxJVkUpICYmICFkZWZpbmVkKE9QRU5TU0xf U1lTX01QRSkKKyAJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCisgCQl7CistCQlpPTA7CistCQlp PXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tFRVBBTElWRSwoY2hhciAqKSZpLHNpemVvZihp KSk7CistCQlpZiAoaSA8IDApIHsgcGVycm9yKCJrZWVwYWxpdmUiKTsgcmV0dXJuKDApOyB9Cisr CQkJaW50IGk9MDsKKysJCQlpPXNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX0tFRVBBTElWRSwK KysJCQkJKGNoYXIgKikmaSxzaXplb2YoaSkpOworKwkJCWlmIChpIDwgMCkgeworKwkJCQlmYWls ZWRfY2FsbCA9ICJrZWVwYWxpdmUiOworKwkJCQlnb3RvIG5leHRyZXM7CisrCQkJCX0KKyAJCX0K KyAjZW5kaWYKKy0KKy0JaWYgKGNvbm5lY3Qocywoc3RydWN0IHNvY2thZGRyICopJnRoZW0sc2l6 ZW9mKHRoZW0pKSA9PSAtMSkKKy0JCXsgY2xvc2Vzb2NrZXQocyk7IHBlcnJvcigiY29ubmVjdCIp OyByZXR1cm4oMCk7IH0KKysJCWlmIChjb25uZWN0KHMsKHN0cnVjdCBzb2NrYWRkciAqKXJlcy0+ YWlfYWRkciwKKysJCQlyZXMtPmFpX2FkZHJsZW4pID09IDApCisrCQkJeworKwkJCWZyZWVhZGRy aW5mbyhyZXMwKTsKKyAJKnNvY2s9czsKKyAJcmV0dXJuKDEpOworIAl9CisgCistaW50IGRvX3Nl cnZlcihpbnQgcG9ydCwgaW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikoY2hhciAqaG9zdG5h bWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4 dCkKKysJCWZhaWxlZF9jYWxsID0gInNvY2tldCI7CisrbmV4dHJlczoKKysJCWlmIChzICE9IElO VkFMSURfU09DS0VUKQorKwkJCWNsb3NlKHMpOworKwkJcmVzID0gcmVzLT5haV9uZXh0OworKwkJ fQorKwlmcmVlYWRkcmluZm8ocmVzMCk7CisrCisrCXBlcnJvcihmYWlsZWRfY2FsbCk7CisrCXJl dHVybigwKTsKKysJfQorKworK2ludCBkb19zZXJ2ZXIoY2hhciAqcG9ydCwgaW50IHR5cGUsIGlu dCAqcmV0LCBpbnQgKCpjYikoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBjaGFyICpj b250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCkKKyAJeworIAlpbnQgc29jazsKKyAJY2hh ciAqbmFtZSA9IE5VTEw7CitAQCAtMzIyLDMzICszMzMsNTAgQEAgaW50IGRvX3NlcnZlcihpbnQg cG9ydCwgaW50IHR5cGUsIGludCAqcgorIAkJfQorIAl9CisgCistc3RhdGljIGludCBpbml0X3Nl cnZlcl9sb25nKGludCAqc29jaywgaW50IHBvcnQsIGNoYXIgKmlwLCBpbnQgdHlwZSkKKytzdGF0 aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywgY2hhciAqcG9ydCwgaW50IHR5cGUpCisgCXsK Ky0JaW50IHJldD0wOworLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworLQlpbnQgcz0gLTE7 CisrCXN0cnVjdCBhZGRyaW5mbyAqcmVzLCAqcmVzMCA9IE5VTEwsIGhpbnRzOworKwljaGFyICog ZmFpbGVkX2NhbGwgPSBOVUxMOworKwlpbnQgcyA9IElOVkFMSURfU09DS0VUOworKwlpbnQgZTsK KyAKKyAJaWYgKCFzc2xfc29ja19pbml0KCkpIHJldHVybigwKTsKKyAKKy0JbWVtc2V0KChjaGFy ICopJnNlcnZlciwwLHNpemVvZihzZXJ2ZXIpKTsKKy0Jc2VydmVyLnNpbl9mYW1pbHk9QUZfSU5F VDsKKy0Jc2VydmVyLnNpbl9wb3J0PWh0b25zKCh1bnNpZ25lZCBzaG9ydClwb3J0KTsKKy0JaWYg KGlwID09IE5VTEwpCistCQlzZXJ2ZXIuc2luX2FkZHIuc19hZGRyPUlOQUREUl9BTlk7CistCWVs c2UKKy0vKiBBZGRlZCBmb3IgVDNFLCBhZGRyZXNzLW9mIGZhaWxzIG9uIGJpdCBmaWVsZCAoYmVj a21hbkBhY2wubGFubC5nb3YpICovCistI2lmbmRlZiBCSVRfRklFTERfTElNSVRTCistCQltZW1j cHkoJnNlcnZlci5zaW5fYWRkci5zX2FkZHIsaXAsNCk7CistI2Vsc2UKKy0JCW1lbWNweSgmc2Vy dmVyLnNpbl9hZGRyLGlwLDQpOworLSNlbmRpZgorKwltZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXpl b2YoaGludHMpKTsKKysJaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrdHJ5aXB2NDoKKysJ aGludHMuYWlfc29ja3R5cGUgPSB0eXBlOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkU7 CisgCQorLQkJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCistCQkJcz1zb2NrZXQoQUZfSU5FVCxT T0NLX1NUUkVBTSxTT0NLRVRfUFJPVE9DT0wpOworLQkJZWxzZSAvKiB0eXBlID09IFNPQ0tfREdS QU0gKi8KKy0JCQlzPXNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLElQUFJPVE9fVURQKTsKKysJ ZSA9IGdldGFkZHJpbmZvKE5VTEwsIHBvcnQsICZoaW50cywgJnJlcyk7CisrCWlmIChlKQorKwkJ eworKwkJaWYgKGhpbnRzLmFpX2ZhbWlseSA9PSBBRl9JTkVUKQorKwkJCXsKKysJCQlmcHJpbnRm KHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGUpKTsKKysJCQlpZiAo ZSA9PSBFQUlfU1lTVEVNKQorKwkJCQlwZXJyb3IoImdldGFkZHJpbmZvIik7CisrCQkJcmV0dXJu ICgwKTsKKysJCQl9CisrCQkJZWxzZQorKwkJCQlyZXMgPSBOVUxMOworKwkJfQorIAorLQlpZiAo cyA9PSBJTlZBTElEX1NPQ0tFVCkgZ290byBlcnI7CisrCXJlczAgPSByZXM7CisrCXdoaWxlIChy ZXMpCisrCQl7CisrCQlzID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5LCByZXMtPmFpX3NvY2t0eXBl LCByZXMtPmFpX3Byb3RvY29sKTsKKysJCWlmIChzID09IElOVkFMSURfU09DS0VUKQorKwkJCXsK KysJCQlmYWlsZWRfY2FsbCA9ICJzb2NrZXQiOworKwkJCWdvdG8gbmV4dHJlczsKKysJCQl9Cisr CQlpZiAoaGludHMuYWlfZmFtaWx5ID09IEFGX0lORVQ2KQorKwkJCXsKKysJCQlpbnQgaiA9IDA7 CisrCQkJc2V0c29ja29wdChzLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLAorKwkJCQkgICAo dm9pZCAqKSAmaiwgc2l6ZW9mIGopOworKwkJCX0KKyAjaWYgZGVmaW5lZCBTT0xfU09DS0VUICYm IGRlZmluZWQgU09fUkVVU0VBRERSCisgCQl7CisgCQlpbnQgaiA9IDE7CitAQCAtMzU2LDM1ICsz ODQsNDkgQEAgc3RhdGljIGludCBpbml0X3NlcnZlcl9sb25nKGludCAqc29jaywgaQorIAkJCSAg ICh2b2lkICopICZqLCBzaXplb2Ygaik7CisgCQl9CisgI2VuZGlmCistCWlmIChiaW5kKHMsKHN0 cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsc2l6ZW9mKHNlcnZlcikpID09IC0xKQorKworKwkJaWYg KGJpbmQocywoc3RydWN0IHNvY2thZGRyICopcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4p ID09IC0xKQorIAkJeworLSNpZm5kZWYgT1BFTlNTTF9TWVNfV0lORE9XUworLQkJcGVycm9yKCJi aW5kIik7CistI2VuZGlmCistCQlnb3RvIGVycjsKKysJCQlmYWlsZWRfY2FsbCA9ICJiaW5kIjsK KysJCQlnb3RvIG5leHRyZXM7CisgCQl9CistCS8qIE1ha2UgaXQgMTI4IGZvciBsaW51eCAqLwor LQlpZiAodHlwZT09U09DS19TVFJFQU0gJiYgbGlzdGVuKHMsMTI4KSA9PSAtMSkgZ290byBlcnI7 CistCSpzb2NrPXM7CistCXJldD0xOworLWVycjoKKy0JaWYgKChyZXQgPT0gMCkgJiYgKHMgIT0g LTEpKQorKwkJaWYgKHR5cGU9PVNPQ0tfU1RSRUFNICYmIGxpc3RlbihzLDEyOCkgPT0gLTEpCisg CQl7CistCQlTSFVURE9XTihzKTsKKysJCQlmYWlsZWRfY2FsbCA9ICJsaXN0ZW4iOworKwkJCWdv dG8gbmV4dHJlczsKKyAJCX0KKy0JcmV0dXJuKHJldCk7CisrCisrCQkqc29jaz1zOworKwkJcmV0 dXJuKDEpOworKworK25leHRyZXM6CisrCQlpZiAocyAhPSBJTlZBTElEX1NPQ0tFVCkKKysJCQlj bG9zZShzKTsKKysJCXJlcyA9IHJlcy0+YWlfbmV4dDsKKyAJfQorKwlpZiAocmVzMCkKKysJCWZy ZWVhZGRyaW5mbyhyZXMwKTsKKyAKKy1zdGF0aWMgaW50IGluaXRfc2VydmVyKGludCAqc29jaywg aW50IHBvcnQsIGludCB0eXBlKQorKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKyAJeworLQly ZXR1cm4oaW5pdF9zZXJ2ZXJfbG9uZyhzb2NrLCBwb3J0LCBOVUxMLCB0eXBlKSk7CisrCQlpZiAo aGludHMuYWlfZmFtaWx5ID09IEFGX0lORVQ2KQorKwkJeworKwkJCWhpbnRzLmFpX2ZhbWlseSA9 IEFGX0lORVQ7CisrCQkJZ290byB0cnlpcHY0OworKwkJfQorKwkJcGVycm9yKCJzb2NrZXQiKTsK KysJCXJldHVybigwKTsKKysJfQorKworKwlwZXJyb3IoZmFpbGVkX2NhbGwpOworKwlyZXR1cm4o MCk7CisgCX0KKyAKKyBzdGF0aWMgaW50IGRvX2FjY2VwdChpbnQgYWNjX3NvY2ssIGludCAqc29j aywgY2hhciAqKmhvc3QpCisgCXsKKysJc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGZy b207CisrCWNoYXIgYnVmZmVyW05JX01BWEhPU1RdOworIAlpbnQgcmV0OworLQlzdHJ1Y3QgaG9z dGVudCAqaDEsKmgyOworLQlzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGZyb207CisgCWludCBs ZW47CisgLyoJc3RydWN0IGxpbmdlciBsaW5nOyAqLworIAorQEAgLTQzMSwxMzUgKzQ3Myw1OCBA QCByZWRvaXQ6CisgKi8KKyAKKyAJaWYgKGhvc3QgPT0gTlVMTCkgZ290byBlbmQ7CistI2lmbmRl ZiBCSVRfRklFTERfTElNSVRTCistCS8qIEkgc2hvdWxkIHVzZSBXU0FBc3luY0dldEhvc3RCeU5h bWUoKSB1bmRlciB3aW5kb3dzICovCistCWgxPWdldGhvc3RieWFkZHIoKGNoYXIgKikmZnJvbS5z aW5fYWRkci5zX2FkZHIsCistCQlzaXplb2YoZnJvbS5zaW5fYWRkci5zX2FkZHIpLEFGX0lORVQp OworLSNlbHNlCistCWgxPWdldGhvc3RieWFkZHIoKGNoYXIgKikmZnJvbS5zaW5fYWRkciwKKy0J CXNpemVvZihzdHJ1Y3QgaW5fYWRkciksQUZfSU5FVCk7CistI2VuZGlmCistCWlmIChoMSA9PSBO VUxMKQorKworKwlpZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCBzaXpl b2YoZnJvbSksCisrCQlidWZmZXIsIHNpemVvZihidWZmZXIpLAorKwkJTlVMTCwgMCwgMCkpCisg CQl7CistCQlCSU9fcHJpbnRmKGJpb19lcnIsImJhZCBnZXRob3N0YnlhZGRyXG4iKTsKKysJCUJJ T19wcmludGYoYmlvX2VyciwiZ2V0bmFtZWluZm8gZmFpbGVkXG4iKTsKKyAJCSpob3N0PU5VTEw7 CisgCQkvKiByZXR1cm4oMCk7ICovCisgCQl9CisgCWVsc2UKKyAJCXsKKy0JCWlmICgoKmhvc3Q9 KGNoYXIgKilPUEVOU1NMX21hbGxvYyhzdHJsZW4oaDEtPmhfbmFtZSkrMSkpID09IE5VTEwpCisr CQlpZiAoKCpob3N0PShjaGFyICopT1BFTlNTTF9tYWxsb2Moc3RybGVuKGJ1ZmZlcikrMSkpID09 IE5VTEwpCisgCQkJeworIAkJCXBlcnJvcigiT1BFTlNTTF9tYWxsb2MiKTsKKyAJCQlyZXR1cm4o MCk7CisgCQkJfQorLQkJQlVGX3N0cmxjcHkoKmhvc3QsaDEtPmhfbmFtZSxzdHJsZW4oaDEtPmhf bmFtZSkrMSk7CistCistCQloMj1HZXRIb3N0QnlOYW1lKCpob3N0KTsKKy0JCWlmIChoMiA9PSBO VUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgZmFpbHVy ZVxuIik7CistCQkJcmV0dXJuKDApOworLQkJCX0KKy0JCWlmIChoMi0+aF9hZGRydHlwZSAhPSBB Rl9JTkVUKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgYWRk ciBpcyBub3QgQUZfSU5FVFxuIik7CistCQkJcmV0dXJuKDApOworLQkJCX0KKysJCXN0cmNweSgq aG9zdCwgYnVmZmVyKTsKKyAJCX0KKyBlbmQ6CisgCSpzb2NrPXJldDsKKyAJcmV0dXJuKDEpOwor IAl9CisgCistaW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRy LCB1bnNpZ25lZCBjaGFyICppcCwKKy0JICAgICBzaG9ydCAqcG9ydF9wdHIpCisraW50IGV4dHJh Y3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRyLCAKKysJICAgICBjaGFyICoq cG9ydF9wdHIpCisgCXsKKy0JY2hhciAqaCwqcDsKKysJY2hhciAqaCwqcCwqeDsKKyAKKy0JaD1z dHI7CistCXA9c3RyY2hyKHN0ciwnOicpOworKwl4PWg9c3RyOworKwlpZiAoKmggPT0gJ1snKQor KwkJeworKwkJaCsrOworKwkJcD1zdHJjaHIoaCwnXScpOworIAlpZiAocCA9PSBOVUxMKQorIAkJ eworLQkJQklPX3ByaW50ZihiaW9fZXJyLCJubyBwb3J0IGRlZmluZWRcbiIpOworKwkJCUJJT19w cmludGYoYmlvX2Vyciwibm8gZW5kaW5nIGJyYWNrZXQgZm9yIElQdjYgYWRkcmVzc1xuIik7Cisg CQlyZXR1cm4oMCk7CisgCQl9CisgCSoocCsrKT0nXDAnOworLQorLQlpZiAoKGlwICE9IE5VTEwp ICYmICFob3N0X2lwKHN0cixpcCkpCistCQlnb3RvIGVycjsKKy0JaWYgKGhvc3RfcHRyICE9IE5V TEwpICpob3N0X3B0cj1oOworLQorLQlpZiAoIWV4dHJhY3RfcG9ydChwLHBvcnRfcHRyKSkKKy0J CWdvdG8gZXJyOworLQlyZXR1cm4oMSk7CistZXJyOgorLQlyZXR1cm4oMCk7CisrCQl4ID0gcDsK KyAJfQorLQorLXN0YXRpYyBpbnQgaG9zdF9pcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBb NF0pCistCXsKKy0JdW5zaWduZWQgaW50IGluWzRdOyAKKy0JaW50IGk7CistCistCWlmIChzc2Nh bmYoc3RyLCIldS4ldS4ldS4ldSIsJihpblswXSksJihpblsxXSksJihpblsyXSksJihpblszXSkp ID09IDQpCistCQl7CistCQlmb3IgKGk9MDsgaTw0OyBpKyspCistCQkJaWYgKGluW2ldID4gMjU1 KQorLQkJCQl7CistCQkJCUJJT19wcmludGYoYmlvX2VyciwiaW52YWxpZCBJUCBhZGRyZXNzXG4i KTsKKy0JCQkJZ290byBlcnI7CistCQkJCX0KKy0JCWlwWzBdPWluWzBdOworLQkJaXBbMV09aW5b MV07CistCQlpcFsyXT1pblsyXTsKKy0JCWlwWzNdPWluWzNdOworLQkJfQorLQllbHNlCistCQl7 IC8qIGRvIGEgZ2V0aG9zdGJ5bmFtZSAqLworLQkJc3RydWN0IGhvc3RlbnQgKmhlOworLQorLQkJ aWYgKCFzc2xfc29ja19pbml0KCkpIHJldHVybigwKTsKKy0KKy0JCWhlPUdldEhvc3RCeU5hbWUo c3RyKTsKKy0JCWlmIChoZSA9PSBOVUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIs ImdldGhvc3RieW5hbWUgZmFpbHVyZVxuIik7CistCQkJZ290byBlcnI7CistCQkJfQorLQkJLyog Y2FzdCB0byBzaG9ydCBiZWNhdXNlIG9mIHdpbjE2IHdpbnNvY2sgZGVmaW5pdGlvbiAqLworLQkJ aWYgKChzaG9ydCloZS0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKQorKwlwPXN0cmNocih4LCc6Jyk7 CisrCWlmIChwID09IE5VTEwpCisgCQkJeworLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9z dGJ5bmFtZSBhZGRyIGlzIG5vdCBBRl9JTkVUXG4iKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQor LQkJaXBbMF09aGUtPmhfYWRkcl9saXN0WzBdWzBdOworLQkJaXBbMV09aGUtPmhfYWRkcl9saXN0 WzBdWzFdOworLQkJaXBbMl09aGUtPmhfYWRkcl9saXN0WzBdWzJdOworLQkJaXBbM109aGUtPmhf YWRkcl9saXN0WzBdWzNdOworLQkJfQorLQlyZXR1cm4oMSk7CistZXJyOgorKwkJQklPX3ByaW50 ZihiaW9fZXJyLCJubyBwb3J0IGRlZmluZWRcbiIpOworIAlyZXR1cm4oMCk7CisgCX0KKysJKihw KyspPSdcMCc7CisgCistaW50IGV4dHJhY3RfcG9ydChjaGFyICpzdHIsIHNob3J0ICpwb3J0X3B0 cikKKy0JeworLQlpbnQgaTsKKy0Jc3RydWN0IHNlcnZlbnQgKnM7CisrCWlmIChob3N0X3B0ciAh PSBOVUxMKSAqaG9zdF9wdHI9aDsKKysJaWYgKHBvcnRfcHRyICE9IE5VTEwpICpwb3J0X3B0cj1w OworIAorLQlpPWF0b2koc3RyKTsKKy0JaWYgKGkgIT0gMCkKKy0JCSpwb3J0X3B0cj0odW5zaWdu ZWQgc2hvcnQpaTsKKy0JZWxzZQorLQkJeworLQkJcz1nZXRzZXJ2YnluYW1lKHN0ciwidGNwIik7 CistCQlpZiAocyA9PSBOVUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldHNl cnZieW5hbWUgZmFpbHVyZSBmb3IgJXNcbiIsc3RyKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQor LQkJKnBvcnRfcHRyPW50b2hzKCh1bnNpZ25lZCBzaG9ydClzLT5zX3BvcnQpOworLQkJfQorIAly ZXR1cm4oMSk7CisgCX0KKyAK