NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/53846: ftp doesn't verify certificates for https:// requests



The following reply was made to PR bin/53846; it has been noted by GNATS.

From: Kimihiro Nonaka <nonakap%gmail.com@localhost>
To: "gnats-bugs%NetBSD.org@localhost" <gnats-bugs%netbsd.org@localhost>
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: bin/53846: ftp doesn't verify certificates for https:// requests
Date: Sat, 2 Feb 2019 01:52:15 +0900

 --000000000000b5acf30580d7f704
 Content-Type: text/plain; charset="UTF-8"
 
 On Wed, Jan 9, 2019 at 5:50 PM Michael van Elst <mlelstv%serpens.de@localhost> wrote:
 
 >  >>Synopsis:       ftp doesn't verify certificates for https:// requests
 >  >>Fix:
 >  >add the call to the verify option, but also add some error checking to detail a failure
 >
 >  Also add a possibility to ignore the cert like curl --insecure.
 
 I ported it from FreeBSD.
 Please try attached patch.
 
 # the patch is available at
 https://gist.githubusercontent.com/nonakap/8e504fec4f70a4cea27308e1e0a4b982/raw/f2b9e39991b3484344c410742c633f778681cb7c/nbsd-ftp-verify-https-server-cert.diff
 too.
 
 Regards,
 --
 Kimihiro Nonaka
 
 --000000000000b5acf30580d7f704
 Content-Type: application/octet-stream; 
 	name="nbsd-ftp-verify-https-server-cert.diff"
 Content-Disposition: attachment; 
 	filename="nbsd-ftp-verify-https-server-cert.diff"
 Content-Transfer-Encoding: base64
 Content-ID: <f_jrma8f7k0>
 X-Attachment-Id: f_jrma8f7k0
 
 SW5kZXg6IHVzci5iaW4vZnRwL2NtZHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9z
 cmMvdXNyLmJpbi9mdHAvY21kcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNwpkaWZmIC11
 IC1wIC1yMS4xMzcgY21kcy5jCi0tLSB1c3IuYmluL2Z0cC9jbWRzLmMJMjcgRmViIDIwMTYgMTY6
 MzE6MzEgLTAwMDAJMS4xMzcKKysrIHVzci5iaW4vZnRwL2NtZHMuYwkxIEZlYiAyMDE5IDAzOjIy
 OjE4IC0wMDAwCkBAIC0yNjY3LDcgKzI2NjcsNyBAQCBzZXR4ZmVyYnVmKGludCBhcmdjLCBjaGFy
 ICphcmd2W10pCiB2b2lkCiBzZXRvcHRpb24oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLQlz
 dHJ1Y3Qgb3B0aW9uICpvOworCXN0cnVjdCBmdHBvcHRpb24gKm87CiAKIAljb2RlID0gLTE7CiAJ
 aWYgKGFyZ2MgPT0gMCB8fCAoYXJnYyAhPSAxICYmIGFyZ2MgIT0gMykpIHsKQEAgLTI2OTAsNyAr
 MjY5MCw3IEBAIHNldG9wdGlvbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogdm9pZAogc2V0X29w
 dGlvbihjb25zdCBjaGFyICogb3B0aW9uLCBjb25zdCBjaGFyICogdmFsdWUsIGludCBkb3ZlcmJv
 c2UpCiB7Ci0Jc3RydWN0IG9wdGlvbiAqbzsKKwlzdHJ1Y3QgZnRwb3B0aW9uICpvOwogCiAJbyA9
 IGdldG9wdGlvbihvcHRpb24pOwogCWlmIChvID09IE5VTEwpIHsKQEAgLTI3MTAsNyArMjcxMCw3
 IEBAIHNldF9vcHRpb24oY29uc3QgY2hhciAqIG9wdGlvbiwgY29uc3QgY2gKIHZvaWQKIHVuc2V0
 b3B0aW9uKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0Jc3RydWN0IG9wdGlvbiAqbzsKKwlz
 dHJ1Y3QgZnRwb3B0aW9uICpvOwogCiAJY29kZSA9IC0xOwogCWlmIChhcmdjID09IDAgfHwgYXJn
 YyAhPSAyKSB7CkluZGV4OiB1c3IuYmluL2Z0cC9jbWR0YWIuYwo9PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
 OiAvY3Zzcm9vdC9zcmMvdXNyLmJpbi9mdHAvY21kdGFiLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9u
 IDEuNTIKZGlmZiAtdSAtcCAtcjEuNTIgY21kdGFiLmMKLS0tIHVzci5iaW4vZnRwL2NtZHRhYi5j
 CTIyIERlYyAyMDEyIDE2OjU3OjA5IC0wMDAwCTEuNTIKKysrIHVzci5iaW4vZnRwL2NtZHRhYi5j
 CTEgRmViIDIwMTkgMDM6MjI6MTggLTAwMDAKQEAgLTI5NCw3ICsyOTQsNyBAQCBzdHJ1Y3QgY21k
 IGNtZHRhYltdID0gewogCXsgTlVMTCwJCU5VTEwsCQkwLCAwLCAwLCBDTVBMMAkJTlVMTCB9LAog
 fTsKIAotc3RydWN0IG9wdGlvbiBvcHRpb250YWJbXSA9IHsKK3N0cnVjdCBmdHBvcHRpb24gb3B0
 aW9udGFiW10gPSB7CiAJeyAiYW5vbnBhc3MiLAlOVUxMIH0sCiAJeyAiZnRwX3Byb3h5IiwJTlVM
 TCB9LAogCXsgImh0dHBfcHJveHkiLAlOVUxMIH0sCkluZGV4OiB1c3IuYmluL2Z0cC9jb21wbGV0
 ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L3NyYy91c3IuYmluL2Z0cC9jb21wbGV0
 ZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ2CmRpZmYgLXUgLXAgLXIxLjQ2IGNvbXBsZXRl
 LmMKLS0tIHVzci5iaW4vZnRwL2NvbXBsZXRlLmMJMTIgQXByIDIwMDkgMTA6MTg6NTIgLTAwMDAJ
 MS40NgorKysgdXNyLmJpbi9mdHAvY29tcGxldGUuYwkxIEZlYiAyMDE5IDAzOjIyOjE4IC0wMDAw
 CkBAIC0yNDMsNyArMjQzLDcgQEAgY29tcGxldGVfbG9jYWwoY2hhciAqd29yZCwgaW50IGxpc3Qp
 CiBzdGF0aWMgdW5zaWduZWQgY2hhcgogY29tcGxldGVfb3B0aW9uKGNoYXIgKndvcmQsIGludCBs
 aXN0KQogewotCXN0cnVjdCBvcHRpb24gKm87CisJc3RydWN0IGZ0cG9wdGlvbiAqbzsKIAlTdHJp
 bmdMaXN0ICp3b3JkczsKIAlzaXplX3Qgd29yZGxlbjsKIAl1bnNpZ25lZCBjaGFyIHJ2OwpJbmRl
 eDogdXNyLmJpbi9mdHAvZXh0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
 L3Vzci5iaW4vZnRwL2V4dGVybi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgwCmRpZmYgLXUg
 LXAgLXIxLjgwIGV4dGVybi5oCi0tLSB1c3IuYmluL2Z0cC9leHRlcm4uaAk0IEp1bCAyMDEyIDA2
 OjA5OjM3IC0wMDAwCTEuODAKKysrIHVzci5iaW4vZnRwL2V4dGVybi5oCTEgRmViIDIwMTkgMDM6
 MjI6MTggLTAwMDAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkCWdldChpbnQsIGNoYXIgKiopOwog
 c3RydWN0IGNtZCAqZ2V0Y21kKGNvbnN0IGNoYXIgKik7CiBpbnQJZ2V0aXQoaW50LCBjaGFyICoq
 LCBpbnQsIGNvbnN0IGNoYXIgKik7CiBpbnQJZ2V0X2xpbmUoRklMRSAqLCBjaGFyICosIHNpemVf
 dCwgY29uc3QgY2hhciAqKik7Ci1zdHJ1Y3Qgb3B0aW9uICpnZXRvcHRpb24oY29uc3QgY2hhciAq
 KTsKK3N0cnVjdCBmdHBvcHRpb24gKmdldG9wdGlvbihjb25zdCBjaGFyICopOwogY2hhciAgICpn
 ZXRvcHRpb252YWx1ZShjb25zdCBjaGFyICopOwogdm9pZAlnZXRyZW1vdGVpbmZvKHZvaWQpOwog
 aW50CWdldHJlcGx5KGludCk7CkluZGV4OiB1c3IuYmluL2Z0cC9mdHAuMQo9PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
 UyBmaWxlOiAvY3Zzcm9vdC9zcmMvdXNyLmJpbi9mdHAvZnRwLjEsdgpyZXRyaWV2aW5nIHJldmlz
 aW9uIDEuMTM1CmRpZmYgLXUgLXAgLXIxLjEzNSBmdHAuMQotLS0gdXNyLmJpbi9mdHAvZnRwLjEJ
 MjMgQXByIDIwMTUgMjM6MzE6MjMgLTAwMDAJMS4xMzUKKysrIHVzci5iaW4vZnRwL2Z0cC4xCTEg
 RmViIDIwMTkgMDM6MjI6MTggLTAwMDAKQEAgLTg1LDYgKzg1LDE2IEBACiAuT2MKIC5FawogLk9w
 IEZsIHggQXIgeGZlcmJ1ZnNpemUKKy5PcCBGbCAtY2EtY2VydCBBciBmaWxlCisuT3AgRmwgLWNh
 LXBhdGggQXIgZGlyCisuT3AgRmwgLWNlcnQgQXIgZmlsZQorLk9wIEZsIC1jcmwgQXIgZmlsZQor
 Lk9wIEZsIC1rZXkgQXIgZmlsZQorLk9wIEZsIC1uby10bHN2MQorLk9wIEZsIC1uby10bHN2MV8x
 CisuT3AgRmwgLW5vLXRsc3YxXzIKKy5PcCBGbCAtbm8tdmVyaWZ5LWhvc3RuYW1lCisuT3AgRmwg
 LW5vLXZlcmlmeS1wZWVyCiAuQmsgLXdvcmRzCiAuXCIgW1t1c2VyQF1ob3N0IFtwb3J0XV0KIC5P
 bwpAQCAtMTI3LDEwICsxMzcsMTAgQEAKIC5TbSBvbgogLkVrCiAuQmsgLXdvcmRzCi0uXCIgW2h0
 dHA6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0Wzpwb3J0XS9wYXRoXQorLlwiIFtodHRwW3NdOi8v
 W3VzZXJbOnBhc3N3b3JkXUBdaG9zdFs6cG9ydF0vcGF0aF0KIC5TbSBvZmYKIC5PbwotLkxpIGh0
 dHA6Ly8KKy5MaSBodHRwW3NdOi8vCiAuT28gQXIgdXNlcgogLk9wIExpIFwmOiBBciBwYXNzd29y
 ZAogLkxpIFwmQCBPYwpAQCAtMzE4LDYgKzMyOCw0MSBAQCBTZXQgdGhlIHNpemUgb2YgdGhlIHNv
 Y2tldCBzZW5kIGFuZCByZWNlCiBSZWZlciB0bwogLkljIHhmZXJidWYKIGZvciBtb3JlIGluZm9y
 bWF0aW9uLgorLkl0IEZsIC1jYS1jZXJ0IEFyIGZpbGUKK1BhdGggdG8gY2VydGlmaWNhdGUgYnVu
 ZGxlIGNvbnRhaW5pbmcgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuCitJZiBub3Qgc3BlY2lmaWVk
 LAorLlBhIC9ldGMvb3BlbnNzbC9jZXJ0LnBlbQoraXMgdXNlZC4KK0lmIHRoaXMgZmlsZSBkb2Vz
 IG5vdCBleGlzdCBhbmQgbm8gQ0EgcGF0aCBoYXMgYmVlbiBjb25maWd1cmVkLAorT3BlblNTTCdz
 IGRlZmF1bHQgQ0EgY2VydCBhbmQgcGF0aCBzZXR0aW5ncyBhcHBseS4KKy5JdCBGbCAtY2EtcGF0
 aCBBciBkaXIKK1RoZSBkaXJlY3RvcnkKKy5BciBkaXIKK2NvbnRhaW5zIHRydXN0ZWQgQ0EgaGFz
 aGVzLgorLkl0IEZsIC1jZXJ0IEFyIGZpbGUKKy5BciBmaWxlCitpcyBhIFBFTSBlbmNvZGVkIGNs
 aWVudCBjZXJ0aWZpY2F0ZS9rZXkgd2hpY2ggd2lsbCBiZSB1c2VkIGluCitjbGllbnQgY2VydGlm
 aWNhdGUgYXV0aGVudGljYXRpb24uCisuSXQgRmwgLWNybCBBciBmaWxlCitQb2ludHMgdG8gY2Vy
 dGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0CisuQXIgZmlsZSAsCit3aGljaCBoYXMgdG8gYmUgaW4g
 UEVNIGZvcm1hdCBhbmQgbWF5IGNvbnRhaW4gcGVlciBjZXJ0aWZpY2F0ZXMgdGhhdCBoYXZlCiti
 ZWVuIHJldm9rZWQuCisuSXQgRmwgLWtleSBBciBmaWxlCisuQXIgZmlsZQoraXMgYSBQRU0gZW5j
 b2RlZCBjbGllbnQga2V5IHRoYXQgd2lsbCBiZSB1c2VkIGluIGNsaWVudCBjZXJ0aWZpY2F0ZQor
 YXV0aGVudGljYXRpb24gaW4gY2FzZSBrZXkgYW5kIGNsaWVudCBjZXJ0aWZpY2F0ZSBhcmUgc3Rv
 cmVkIHNlcGFyYXRlbHkuCisuSXQgRmwgLW5vLXRsc3YxCitEbyBub3QgYWxsb3cgVExTIHZlcnNp
 b24gMSB3aGVuIG5lZ290aWF0aW5nIHRoZSBjb25uZWN0aW9uLgorLkl0IEZsIC1uby10bHN2MV8x
 CitEbyBub3QgYWxsb3cgVExTIHZlcnNpb24gMS4xIHdoZW4gbmVnb3RpYXRpbmcgdGhlIGNvbm5l
 Y3Rpb24uCisuSXQgRmwgLW5vLXRsc3YxXzIKK0RvIG5vdCBhbGxvdyBUTFMgdmVyc2lvbiAxLjIg
 d2hlbiBuZWdvdGlhdGluZyB0aGUgY29ubmVjdGlvbi4KKy5JdCBGbCAtbm8tdmVyaWZ5LWhvc3Ru
 YW1lCitEbyBub3QgdmVyaWZ5IHRoYXQgdGhlIGhvc3RuYW1lIG1hdGNoZXMgdGhlIHN1YmplY3Qg
 b2YgdGhlCitjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQgYnkgdGhlIHNlcnZlci4KKy5JdCBGbCAtbm8t
 dmVyaWZ5LXBlZXIKK0RvIG5vdCB2ZXJpZnkgdGhlIHBlZXIgY2VydGlmaWNhdGUgYWdhaW5zdCB0
 cnVzdGVkIENBcy4KIC5FbAogLlBwCiBUaGUgY2xpZW50IGhvc3Qgd2l0aCB3aGljaApAQCAtMjMy
 Myw2ICsyMzY4LDE2IEBAIG1heSBiZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBwcm9ncmFtcyAK
 IC5FbSBOT1RFIDoKIHRoaXMgaXMgbm90IHVzZWQgZm9yIGludGVyYWN0aXZlIHNlc3Npb25zLCBv
 bmx5IGZvciBjb21tYW5kLWxpbmUKIGZldGNoZXMuCisuSXQgRXYgaHR0cHNfcHJveHkKK1VSTCBv
 ZgorLlRuIEhUVFBTCitwcm94eSB0byB1c2Ugd2hlbiBtYWtpbmcKKy5UbiBIVFRQUworVVJMIHJl
 cXVlc3RzLiBJZiBub3QgZGVmaW5lZCwgdXNlIGh0dHBfcHJveHkuCisuUHAKK1NlZQorLkV2IGh0
 dHBfcHJveHkKK2ZvciBmdXJ0aGVyIG5vdGVzIGFib3V0IHByb3h5IHVzZS4KIC5JdCBFdiBub19w
 cm94eQogQSBzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBob3N0cyAob3IgZG9tYWlu
 cykgZm9yIHdoaWNoCiBwcm94eWluZyBpcyBub3QgdG8gYmUgdXNlZC4KSW5kZXg6IHVzci5iaW4v
 ZnRwL2Z0cF92YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMvdXNyLmJpbi9m
 dHAvZnRwX3Zhci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg0CmRpZmYgLXUgLXAgLXIxLjg0
 IGZ0cF92YXIuaAotLS0gdXNyLmJpbi9mdHAvZnRwX3Zhci5oCTE2IERlYyAyMDE1IDIzOjAwOjM5
 IC0wMDAwCTEuODQKKysrIHVzci5iaW4vZnRwL2Z0cF92YXIuaAkxIEZlYiAyMDE5IDAzOjIyOjE4
 IC0wMDAwCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RydWN0IG1hY2VsIHsKIC8qCiAgKiBGb3JtYXQg
 b2Ygb3B0aW9uIHRhYmxlCiAgKi8KLXN0cnVjdCBvcHRpb24geworc3RydWN0IGZ0cG9wdGlvbiB7
 CiAJY29uc3QgY2hhcgkqbmFtZTsKIAljaGFyCQkqdmFsdWU7CiB9OwpAQCAtMzEzLDE0ICszMTMs
 MjggQEAgR0xPQkFMCXZvaWQJKCpyZXBseV9jYWxsYmFjaykoY29uc3QgY2hhcgogCQkJCQkgKiBm
 aXJzdCAoYHh4eC0nKSBhbmQgbGFzdCAoYHh4eCAnKQogCQkJCQkgKi8KIAorI2lmZGVmIFdJVEhf
 U1NMCitHTE9CQUwJaW50CSBzc2xfdmVyaWZ5X2hvc3RuYW1lOwkvKiBpZiAhPSAwLCB0aGVuIHZl
 cmlmeSBob3N0bmFtZSAqLworR0xPQkFMCWludAkgc3NsX3ZlcmlmeV9wZWVyOwkvKiBpZiAhPSAw
 LCB0aGVuIHZlcmlmeSBwZWVyICovCitHTE9CQUwJaW50CSBzc2xfdXNlX3NzbHYzOwkJLyogaWYg
 IT0gMCwgdGhlbiB1c2UgU1NMdjMgKi8KK0dMT0JBTAlpbnQJIHNzbF91c2VfdGxzdjE7CQkvKiBp
 ZiAhPSAwLCB0aGVuIHVzZSBUTFN2MSAqLworR0xPQkFMCWludAkgc3NsX3VzZV90bHN2MV8xOwkv
 KiBpZiAhPSAwLCB0aGVuIHVzZSBUTFN2MS4xICovCitHTE9CQUwJaW50CSBzc2xfdXNlX3Rsc3Yx
 XzI7CS8qIGlmICE9IDAsIHRoZW4gdXNlIFRMU3YxLjIgKi8KK0dMT0JBTAljb25zdCBjaGFyICpz
 c2xfY2FfY2VydF9maWxlOwkvKiBDQSBjZXJ0aWZpY2F0ZSBmaWxlIHBhdGggKi8KK0dMT0JBTAlj
 b25zdCBjaGFyICpzc2xfY2FfY2VydF9wYXRoOwkvKiBDQSBjZXJ0aWZpY2F0ZSBkaXJlY3Rvcnkg
 cGF0aCAqLworR0xPQkFMCWNvbnN0IGNoYXIgKnNzbF9jbGllbnRfY2VydF9maWxlOyAvKiBjbGll
 bnQgY2VydGlmaWNhdGUgZmlsZSBwYXRoICovCitHTE9CQUwJY29uc3QgY2hhciAqc3NsX2NsaWVu
 dF9rZXlfZmlsZTsgLyogY2xpZW50IGtleSBmaWxlIHBhdGggKi8KK0dMT0JBTAljb25zdCBjaGFy
 ICpzc2xfY3JsX2ZpbGU7CS8qIENSTCBmaWxlIHBhdGggKi8KKyNlbmRpZgorCiBHTE9CQUwJdm9s
 YXRpbGUgc2lnX2F0b21pY190CXNpZ2ludF9yYWlzZWQ7CiAKIEdMT0JBTAlGSUxFCSpjaW47CiBH
 TE9CQUwJRklMRQkqY291dDsKIEdMT0JBTAlpbnQJIGRhdGE7CiAKLWV4dGVybglzdHJ1Y3QgY21k
 CWNtZHRhYltdOwotZXh0ZXJuCXN0cnVjdCBvcHRpb24Jb3B0aW9udGFiW107CitleHRlcm4Jc3Ry
 dWN0IGNtZAkJY21kdGFiW107CitleHRlcm4Jc3RydWN0IGZ0cG9wdGlvbglvcHRpb250YWJbXTsK
 IAogCiAjZGVmaW5lCUVNUFRZU1RSSU5HKHgpCSgoeCkgPT0gTlVMTCB8fCAoKih4KSA9PSAnXDAn
 KSkKSW5kZXg6IHVzci5iaW4vZnRwL21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9v
 dC9zcmMvdXNyLmJpbi9mdHAvbWFpbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMwpkaWZm
 IC11IC1wIC1yMS4xMjMgbWFpbi5jCi0tLSB1c3IuYmluL2Z0cC9tYWluLmMJMjMgQXByIDIwMTUg
 MjM6MzE6MjMgLTAwMDAJMS4xMjMKKysrIHVzci5iaW4vZnRwL21haW4uYwkxIEZlYiAyMDE5IDAz
 OjIyOjE4IC0wMDAwCkBAIC0xMjAsNiArMTIwLDcgQEAgX19SQ1NJRCgiJE5ldEJTRDogbWFpbi5j
 LHYgMS4xMjMgMjAxNS8wNAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K
 ICNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KIAogI2RlZmluZQlHTE9C
 QUwJCS8qIGZvcmNlIEdMT0JBTCBkZWNscyBpbiBmdHBfdmFyLmggdG8gYmUgZGVjbGFyZWQgKi8K
 ICNpbmNsdWRlICJmdHBfdmFyLmgiCkBAIC0xMzMsNiArMTM0LDM2IEBAIF9fUkNTSUQoIiROZXRC
 U0Q6IG1haW4uYyx2IDEuMTIzIDIwMTUvMDQKIF9fZGVhZCBzdGF0aWMgdm9pZAl1c2FnZSh2b2lk
 KTsKIHN0YXRpYyB2b2lkCXNldHVwb3B0aW9uKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBj
 b25zdCBjaGFyICopOwogCitlbnVtIG9wdGlvbnMgeworCU9QVElPTl9TU0xfQ0FfQ0VSVF9GSUxF
 ID0gMjU2LAorCU9QVElPTl9TU0xfQ0FfQ0VSVF9QQVRILAorCU9QVElPTl9TU0xfQ0xJRU5UX0NF
 UlRfRklMRSwKKwlPUFRJT05fU1NMX0NMSUVOVF9LRVlfRklMRSwKKwlPUFRJT05fU1NMX0NSTF9G
 SUxFLAorCU9QVElPTl9TU0xfTk9fVExTMSwKKwlPUFRJT05fU1NMX05PX1RMUzFfMSwKKwlPUFRJ
 T05fU1NMX05PX1RMUzFfMiwKKwlPUFRJT05fU1NMX05PX1ZFUklGWV9IT1NUTkFNRSwKKwlPUFRJ
 T05fU1NMX05PX1ZFUklGWV9QRUVSCit9OworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nb3B0
 c1tdID0geworI2lmZGVmIFdJVEhfU1NMCisJeyAiY2EtY2VydCIsIHJlcXVpcmVkX2FyZ3VtZW50
 LCBOVUxMLCBPUFRJT05fU1NMX0NBX0NFUlRfRklMRSB9LAorCXsgImNhLXBhdGgiLCByZXF1aXJl
 ZF9hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1NTTF9DQV9DRVJUX1BBVEggfSwKKwl7ICJjZXJ0Iiwg
 cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIE9QVElPTl9TU0xfQ0xJRU5UX0NFUlRfRklMRSB9LAor
 CXsgImtleSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1NMX0NMSUVOVF9LRVlf
 RklMRSB9LAorCXsgImNybCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1NMX0NS
 TF9GSUxFIH0sCisJeyAibm8tdGxzdjEiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1NTTF9O
 T19UTFMxIH0sCisJeyAibm8tdGxzdjFfMSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1NM
 X05PX1RMUzFfMSB9LAorCXsgIm5vLXRsc3YxXzIiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9O
 X1NTTF9OT19UTFMxXzIgfSwKKwl7ICJuby12ZXJpZnktaG9zdG5hbWUiLCBub19hcmd1bWVudCwg
 TlVMTCwgT1BUSU9OX1NTTF9OT19WRVJJRllfSE9TVE5BTUUgfSwKKwl7ICJuby12ZXJpZnktcGVl
 ciIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fU1NMX05PX1ZFUklGWV9QRUVSIH0sCisjZW5k
 aWYKKworCXsgTlVMTCwgMCwgTlVMTCwgMCB9Cit9OworCiBpbnQKIG1haW4oaW50IHZvbGF0aWxl
 IGFyZ2MsIGNoYXIgKip2b2xhdGlsZSBhcmd2KQogewpAQCAtMjAxLDYgKzIzMiwxOSBAQCBtYWlu
 KGludCB2b2xhdGlsZSBhcmdjLCBjaGFyICoqdm9sYXRpbGUgCiAjZWxzZQogCWZhbWlseSA9IEFG
 X0lORVQ7CS8qIGZvcmNlIEFGX0lORVQgaWYgbm8gSU5FVDYgc3VwcG9ydCAqLwogI2VuZGlmCisj
 aWZkZWYgV0lUSF9TU0wKKwlzc2xfdmVyaWZ5X2hvc3RuYW1lID0gMTsKKwlzc2xfdmVyaWZ5X3Bl
 ZXIgPSAxOworCXNzbF91c2Vfc3NsdjMgPSAwOworCXNzbF91c2VfdGxzdjEgPSAxOworCXNzbF91
 c2VfdGxzdjFfMSA9IDE7CisJc3NsX3VzZV90bHN2MV8yID0gMTsKKwlzc2xfY2FfY2VydF9maWxl
 ID0gTlVMTDsKKwlzc2xfY2FfY2VydF9wYXRoID0gTlVMTDsKKwlzc2xfY2xpZW50X2NlcnRfZmls
 ZSA9IE5VTEw7CisJc3NsX2NsaWVudF9rZXlfZmlsZSA9IE5VTEw7CisJc3NsX2NybF9maWxlID0g
 TlVMTDsKKyNlbmRpZgogCiAJbmV0cmNbMF0gPSAnXDAnOwogCWNwID0gZ2V0ZW52KCJORVRSQyIp
 OwpAQCAtMjY2LDcgKzMxMCw5IEBAIG1haW4oaW50IHZvbGF0aWxlIGFyZ2MsIGNoYXIgKip2b2xh
 dGlsZSAKIAkJfQogCX0KIAotCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIjQ2QWFk
 ZWZnaW5OOm86cFA6cTpyOlJzOnRUOnU6dlZ4OiIpKSAhPSAtMSkgeworCXdoaWxlICgoY2ggPSBn
 ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAorCSAgICAiNDZBYWRlZmdpbk46bzpwUDpxOnI6UnM6dFQ6
 dTp2Vng6IiwKKwkgICAgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGNoKSB7
 CiAJCWNhc2UgJzQnOgogCQkJZmFtaWx5ID0gQUZfSU5FVDsKQEAgLTQxNSw2ICs0NjEsNDggQEAg
 bWFpbihpbnQgdm9sYXRpbGUgYXJnYywgY2hhciAqKnZvbGF0aWxlIAogCQkJcmN2YnVmX3NpemUg
 PSBzbmRidWZfc2l6ZTsKIAkJCWJyZWFrOwogCisjaWZkZWYgV0lUSF9TU0wKKwkJY2FzZSBPUFRJ
 T05fU1NMX0NBX0NFUlRfRklMRToKKwkJCXNzbF9jYV9jZXJ0X2ZpbGUgPSBvcHRhcmc7CisJCQli
 cmVhazsKKworCQljYXNlIE9QVElPTl9TU0xfQ0FfQ0VSVF9QQVRIOgorCQkJc3NsX2NhX2NlcnRf
 cGF0aCA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BUSU9OX1NTTF9DTElFTlRfQ0VS
 VF9GSUxFOgorCQkJc3NsX2NsaWVudF9jZXJ0X2ZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKwor
 CQljYXNlIE9QVElPTl9TU0xfQ0xJRU5UX0tFWV9GSUxFOgorCQkJc3NsX2NsaWVudF9rZXlfZmls
 ZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BUSU9OX1NTTF9DUkxfRklMRToKKwkJ
 CXNzbF9jcmxfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BUSU9OX1NTTF9O
 T19UTFMxOgorCQkJc3NsX3VzZV90bHN2MSA9IDA7CisJCQlicmVhazsKKworCQljYXNlIE9QVElP
 Tl9TU0xfTk9fVExTMV8xOgorCQkJc3NsX3VzZV90bHN2MV8xID0gMDsKKwkJCWJyZWFrOworCisJ
 CWNhc2UgT1BUSU9OX1NTTF9OT19UTFMxXzI6CisJCQlzc2xfdXNlX3Rsc3YxXzIgPSAwOworCQkJ
 YnJlYWs7CisKKwkJY2FzZSBPUFRJT05fU1NMX05PX1ZFUklGWV9IT1NUTkFNRToKKwkJCXNzbF92
 ZXJpZnlfaG9zdG5hbWUgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUFRJT05fU1NMX05PX1ZF
 UklGWV9QRUVSOgorCQkJc3NsX3ZlcmlmeV9wZWVyID0gMDsKKwkJCWJyZWFrOworI2VuZGlmCisK
 IAkJZGVmYXVsdDoKIAkJCXVzYWdlKCk7CiAJCX0KQEAgLTU5Nyw3ICs2ODUsNyBAQCBwcm9tcHQo
 dm9pZCkKIAlzdGF0aWMgY2hhcgkgIGJ1ZltNQVhQQVRITEVOXTsKIAogCWlmIChwcm9tcHRvcHQg
 PT0gTlVMTCkgewotCQlzdHJ1Y3Qgb3B0aW9uICpvOworCQlzdHJ1Y3QgZnRwb3B0aW9uICpvOwog
 CiAJCW8gPSBnZXRvcHRpb24oInByb21wdCIpOwogCQlpZiAobyA9PSBOVUxMKQpAQCAtNjE4LDcg
 KzcwNiw3IEBAIHJwcm9tcHQodm9pZCkKIAlzdGF0aWMgY2hhcgkgIGJ1ZltNQVhQQVRITEVOXTsK
 IAogCWlmIChycHJvbXB0b3B0ID09IE5VTEwpIHsKLQkJc3RydWN0IG9wdGlvbiAqbzsKKwkJc3Ry
 dWN0IGZ0cG9wdGlvbiAqbzsKIAogCQlvID0gZ2V0b3B0aW9uKCJycHJvbXB0Iik7CiAJCWlmIChv
 ID09IE5VTEwpCkBAIC0xMDEwLDExICsxMDk4LDExIEBAIGhlbHAoaW50IGFyZ2MsIGNoYXIgKmFy
 Z3ZbXSkKIAl9CiB9CiAKLXN0cnVjdCBvcHRpb24gKgorc3RydWN0IGZ0cG9wdGlvbiAqCiBnZXRv
 cHRpb24oY29uc3QgY2hhciAqbmFtZSkKIHsKIAljb25zdCBjaGFyICpwOwotCXN0cnVjdCBvcHRp
 b24gKmM7CisJc3RydWN0IGZ0cG9wdGlvbiAqYzsKIAogCWlmIChuYW1lID09IE5VTEwpCiAJCXJl
 dHVybiAoTlVMTCk7CkBAIC0xMDI4LDcgKzExMTYsNyBAQCBnZXRvcHRpb24oY29uc3QgY2hhciAq
 bmFtZSkKIGNoYXIgKgogZ2V0b3B0aW9udmFsdWUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1
 Y3Qgb3B0aW9uICpjOworCXN0cnVjdCBmdHBvcHRpb24gKmM7CiAKIAlpZiAobmFtZSA9PSBOVUxM
 KQogCQllcnJ4KDEsICJnZXRvcHRpb252YWx1ZTogaW52b2tlZCB3aXRoIE5VTEwgbmFtZSIpOwpA
 QCAtMTA1Myw2ICsxMTQxLDExIEBAIHVzYWdlKHZvaWQpCiAJKHZvaWQpZnByaW50ZihzdGRlcnIs
 CiAidXNhZ2U6ICVzIFstNDZBYWRlZmdpbnBSdFZ2XSBbLU4gbmV0cmNdIFstbyBvdXRmaWxlXSBb
 LVAgcG9ydF0gWy1xIHF1aXR0aW1lXVxuIgogIiAgICAgICAgICAgWy1yIHJldHJ5XSBbLXMgc3Jj
 YWRkcl0gWy1UIGRpcixtYXhbLGluY11dIFsteCB4ZmVyYnVmc2l6ZV1cbiIKKyNpZmRlZiBXSVRI
 X1NTTAorIiAgICAgICAgICAgWy0tY2EtY2VydD1maWxlXSBbLS1jYS1wYXRoPWRpcl0gWy0tY2Vy
 dD1maWxlXSBbLS1jcmw9ZmlsZV1cbiIKKyIgICAgICAgICAgIFstLWtleT1maWxlXSBbLS1uby10
 bHN2MV0gWy0tbm8tdGxzdjFfMV0gWy0tbm8tdGxzdjFfMl1cbiIKKyIgICAgICAgICAgIFstLW5v
 LXZlcmlmeS1ob3N0bmFtZV0gWy0tbm8tdmVyaWZ5LXBlZXJdXG4iCisjZW5kaWYKICIgICAgICAg
 ICAgIFtbdXNlckBdaG9zdCBbcG9ydF1dIFtob3N0OnBhdGhbL11dIFtmaWxlOi8vL2ZpbGVdXG4i
 CiAiICAgICAgICAgICBbZnRwOi8vW3VzZXJbOnBhc3NdQF1ob3N0Wzpwb3J0XS9wYXRoWy9dXVxu
 IgogIiAgICAgICAgICAgW2h0dHA6Ly9bdXNlcls6cGFzc11AXWhvc3RbOnBvcnRdL3BhdGhdIFsu
 Li5dXG4iCkluZGV4OiB1c3IuYmluL2Z0cC9zc2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
 cm9vdC9zcmMvdXNyLmJpbi9mdHAvc3NsLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZm
 IC11IC1wIC1yMS41IHNzbC5jCi0tLSB1c3IuYmluL2Z0cC9zc2wuYwkxNiBTZXAgMjAxNSAxNToz
 Mjo1MyAtMDAwMAkxLjUKKysrIHVzci5iaW4vZnRwL3NzbC5jCTEgRmViIDIwMTkgMDM6MjI6MTgg
 LTAwMDAKQEAgLTEsNyArMSwxMCBAQAogLyoJJE5ldEJTRDogc3NsLmMsdiAxLjUgMjAxNS8wOS8x
 NiAxNTozMjo1MyBqb2VyZyBFeHAgJAkqLwogCiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OC0y
 MDA0IERhZy1FcmxpbmcgQ2/Dr2RhbiBTbcO4cmdyYXYKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlm
 aWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxNiBEYWctRXJs
 aW5nIENvw69kYW4gU23DuHJncmF2CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWljaGFlbCBHbWVs
 aW4gPGZyZWVic2RAZ3JlbS5kZT4KICAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCBKb2VyZyBT
 b25uZW5iZXJnZXIgPGpvZXJnQE5ldEJTRC5vcmc+CiAgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhv
 bWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBA
 IC0yOSw3ICszMiw3IEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
 UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVW
 RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKgotICog
 JEZyZWVCU0Q6IGNvbW1vbi5jLHYgMS41MyAyMDA3LzEyLzE5IDAwOjI2OjM2IGRlcyBFeHAgJAor
 ICogJEZyZWVCU0Q6IGhlYWQvbGliL2xpYmZldGNoL2NvbW1vbi5jIDM0MTAxMyAyMDE4LTExLTI3
 IDEwOjQ1OjE0WiBkZXMgJAogICovCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KQEAgLTQwLDYg
 KzQzLDggQEAgX19SQ1NJRCgiJE5ldEJTRDogc3NsLmMsdiAxLjUgMjAxNS8wOS8xNgogI2luY2x1
 ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxmY250bC5oPgorI2lu
 Y2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KIAogI2luY2x1ZGUgPHN5cy9wYXJh
 bS5oPgogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KQEAgLTQ5LDExICs1NCwxMyBAQCBfX1JDU0lE
 KCIkTmV0QlNEOiBzc2wuYyx2IDEuNSAyMDE1LzA5LzE2CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5o
 PgogI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+
 CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL3BlbS5oPgog
 I2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CiAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KIAogI2lu
 Y2x1ZGUgInNzbC5oIgorI2luY2x1ZGUgImZ0cF92YXIuaCIKIAogZXh0ZXJuIGludCBxdWl0X3Rp
 bWUsIHZlcmJvc2UsIGZ0cF9kZWJ1ZzsKIGV4dGVybiBGSUxFICp0dHlvdXQ7CkBAIC01NDUsMTEg
 KzU1Miw0OTYgQEAgZmV0Y2hfZ2V0bGluZShzdHJ1Y3QgZmV0Y2hfY29ubmVjdCAqY29ubgogCXJl
 dHVybiBsZW47CiB9CiAKKy8qCisgKiBDb252ZXJ0IGNoYXJhY3RlcnMgQS1aIHRvIGxvd2VyY2Fz
 ZSAoaW50ZW50aW9uYWxseSBhdm9pZCBhbnkgbG9jYWxlCisgKiBzcGVjaWZpYyBjb252ZXJzaW9u
 cykuCisgKi8KK3N0YXRpYyBpbnQKK2ZldGNoX3NzbF90b2xvd2VyKGludCBpbikKK3sKKwlpZiAo
 aW4gPj0gJ0EnICYmIGluIDw9ICdaJykKKwkJcmV0dXJuIGluICsgMzI7CisJcmV0dXJuIGluOwor
 fQorCisvKgorICogaXNhbHBoYSBpbXBsZW1lbnRhdGlvbiB0aGF0IGludGVudGlvbmFsbHkgYXZv
 aWRzIGFueSBsb2NhbGUgc3BlY2lmaWMKKyAqIGNvbnZlcnNpb25zLgorICovCitzdGF0aWMgaW50
 CitmZXRjaF9zc2xfaXNhbHBoYShpbnQgaW4pCit7CisKKwlyZXR1cm4gKGluID49ICdBJyAmJiBp
 biA8PSAnWicpIHx8IChpbiA+PSAnYScgJiYgaW4gPD0gJ3onKTsKK30KKworLyoKKyAqIENoZWNr
 IGlmIHBhc3NlZCBob3N0bmFtZXMgYSBhbmQgYiBhcmUgZXF1YWwuCisgKi8KK3N0YXRpYyBpbnQK
 K2ZldGNoX3NzbF9obmFtZV9lcXVhbChjb25zdCBjaGFyICphLCBzaXplX3QgYWxlbiwgY29uc3Qg
 Y2hhciAqYiwKKyAgICBzaXplX3QgYmxlbikKK3sKKwlzaXplX3QgaTsKKworCWlmIChhbGVuICE9
 IGJsZW4pCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBhbGVuOyArK2kpIHsKKwkJaWYg
 KGZldGNoX3NzbF90b2xvd2VyKGFbaV0pICE9IGZldGNoX3NzbF90b2xvd2VyKGJbaV0pKQorCQkJ
 cmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgaWYgZG9tYWluIGxh
 YmVsIGlzIHRyYWRpdGlvbmFsLCBtZWFuaW5nIHRoYXQgb25seSBBLVosIGEteiwgMC05CisgKiBh
 bmQgJy0nIChoeXBoZW4pIGFyZSBhbGxvd2VkLiBIeXBoZW5zIGhhdmUgdG8gYmUgc3Vycm91bmRl
 ZCBieSBhbHBoYS0KKyAqIG51bWVyaWMgY2hhcmFjdGVycy4gRG91YmxlIGh5cGhlbnMgKGxpa2Ug
 dGhleSdyZSBmb3VuZCBpbiBJRE4gYS1sYWJlbHMKKyAqICd4bi0tJykgYXJlIG5vdCBhbGxvd2Vk
 LiBFbXB0eSBsYWJlbHMgYXJlIGludmFsaWQuCisgKi8KK3N0YXRpYyBpbnQKK2ZldGNoX3NzbF9p
 c190cmFkX2RvbWFpbl9sYWJlbChjb25zdCBjaGFyICpsLCBzaXplX3QgbGVuLCBpbnQgd2NvaykK
 K3sKKwlzaXplX3QgaTsKKworCWlmICghbGVuIHx8IGxbMF0gPT0gJy0nIHx8IGxbbGVuLTFdID09
 ICctJykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWlmICgh
 aXNkaWdpdCgoaW50KWxbaV0pICYmCisJCSAgICAhZmV0Y2hfc3NsX2lzYWxwaGEoKGludClsW2ld
 KSAmJgorCQkgICAgIShsW2ldID09ICcqJyAmJiB3Y29rKSAmJgorCQkgICAgIShsW2ldID09ICct
 JyAmJiBsW2kgLSAxXSAhPSAnLScpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQor
 CisvKgorICogQ2hlY2sgaWYgaG9zdCBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgbnVtYmVycy4gVGhp
 cyBtaWdodCBpbmRpY2F0ZSBhbiBJUAorICogYWRkcmVzcywgd2hpY2ggaXMgbm90IGEgZ29vZCBp
 ZGVhIGZvciBDTiB3aWxkY2FyZCBjb21wYXJpc29uLgorICovCitzdGF0aWMgaW50CitmZXRjaF9z
 c2xfaG5hbWVfaXNfb25seV9udW1iZXJzKGNvbnN0IGNoYXIgKmhuYW1lLCBzaXplX3QgbGVuKQor
 eworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWlmICghKCho
 bmFtZVtpXSA+PSAnMCcgJiYgaG5hbWVbaV0gPD0gJzknKSB8fAorCQkgICAgaG5hbWVbaV0gPT0g
 Jy4nKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENoZWNrIGlm
 IHRoZSBob3N0IG5hbWUgaCBwYXNzZWQgbWF0Y2hlcyB0aGUgcGF0dGVybiBwYXNzZWQgaW4gbSB3
 aGljaAorICogaXMgdXN1YWxseSBwYXJ0IG9mIHN1YmplY3RBbHROYW1lIG9yIENOIG9mIGEgY2Vy
 dGlmaWNhdGUgcHJlc2VudGVkIHRvCisgKiB0aGUgY2xpZW50LiBUaGlzIGluY2x1ZGVzIHdpbGRj
 YXJkIG1hdGNoaW5nLiBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uCisgKiBSRkM2MTI1LCBzZWN0
 aW9ucyA2LjQuMyBhbmQgNy4yLCB3aGljaCBjbGFyaWZpZXMgUkZDMjgxOCBhbmQgUkZDMzI4MC4K
 KyAqLworc3RhdGljIGludAorZmV0Y2hfc3NsX2huYW1lX21hdGNoKGNvbnN0IGNoYXIgKmgsIHNp
 emVfdCBobGVuLCBjb25zdCBjaGFyICptLAorICAgIHNpemVfdCBtbGVuKQoreworCWludCBkZWx0
 YSwgaGRvdGlkeCwgbWRvdDFpZHgsIHdjaWR4OworCWNvbnN0IGNoYXIgKmhkb3QsICptZG90MSwg
 Km1kb3QyOworCWNvbnN0IGNoYXIgKndjOyAvKiB3aWxkY2FyZCAqLworCisJaWYgKCEoaCAmJiAq
 aCAmJiBtICYmICptKSkKKwkJcmV0dXJuIDA7CisJaWYgKCh3YyA9IHN0cm5zdHIobSwgIioiLCBt
 bGVuKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGZldGNoX3NzbF9obmFtZV9lcXVhbChoLCBobGVuLCBt
 LCBtbGVuKTsKKwl3Y2lkeCA9IHdjIC0gbTsKKwkvKiBob3N0bmFtZSBzaG91bGQgbm90IGJlIGp1
 c3QgZG90cyBhbmQgbnVtYmVycyAqLworCWlmIChmZXRjaF9zc2xfaG5hbWVfaXNfb25seV9udW1i
 ZXJzKGgsIGhsZW4pKQorCQlyZXR1cm4gMDsKKwkvKiBvbmx5IG9uZSB3aWxkY2FyZCBhbGxvd2Vk
 IGluIHBhdHRlcm4gKi8KKwlpZiAoc3RybnN0cih3YyArIDEsICIqIiwgbWxlbiAtIHdjaWR4IC0g
 MSkgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0
 IHR3byBtb3JlIGRvbWFpbiBsYWJlbHMgYW5kCisJICogd2lsZGNhcmQgaGFzIHRvIGJlIGluIHRo
 ZSBsZWZ0bW9zdCBsYWJlbCAoUkZDNjEyNSkKKwkgKi8KKwltZG90MSA9IHN0cm5zdHIobSwgIi4i
 LCBtbGVuKTsKKwlpZiAobWRvdDEgPT0gTlVMTCB8fCBtZG90MSA8IHdjIHx8IChtbGVuIC0gKG1k
 b3QxIC0gbSkpIDwgNCkKKwkJcmV0dXJuIDA7CisJbWRvdDFpZHggPSBtZG90MSAtIG07CisJbWRv
 dDIgPSBzdHJuc3RyKG1kb3QxICsgMSwgIi4iLCBtbGVuIC0gbWRvdDFpZHggLSAxKTsKKwlpZiAo
 bWRvdDIgPT0gTlVMTCB8fCAobWxlbiAtIChtZG90MiAtIG0pKSA8IDIpCisJCXJldHVybiAwOwor
 CS8qIGhvc3RuYW1lIG11c3QgY29udGFpbiBhIGRvdCBhbmQgbm90IGJlIHRoZSAxc3QgY2hhciAq
 LworCWhkb3QgPSBzdHJuc3RyKGgsICIuIiwgaGxlbik7CisJaWYgKGhkb3QgPT0gTlVMTCB8fCBo
 ZG90ID09IGgpCisJCXJldHVybiAwOworCWhkb3RpZHggPSBoZG90IC0gaDsKKwkvKgorCSAqIGhv
 c3QgcGFydCBvZiBob3N0bmFtZSBtdXN0IGJlIGF0IGxlYXN0IGFzIGxvbmcgYXMKKwkgKiBwYXR0
 ZXJuIGl0J3Mgc3VwcG9zZWQgdG8gbWF0Y2gKKwkgKi8KKwlpZiAoaGRvdGlkeCA8IG1kb3QxaWR4
 KQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIGRvbid0IGFsbG93IHdpbGRjYXJkcyBpbiBub24tdHJh
 ZGl0aW9uYWwgZG9tYWluIG5hbWVzCisJICogKElETiwgQS1sYWJlbCwgVS1sYWJlbC4uLikKKwkg
 Ki8KKwlpZiAoIWZldGNoX3NzbF9pc190cmFkX2RvbWFpbl9sYWJlbChoLCBoZG90aWR4LCAwKSB8
 fAorCSAgICAhZmV0Y2hfc3NsX2lzX3RyYWRfZG9tYWluX2xhYmVsKG0sIG1kb3QxaWR4LCAxKSkK
 KwkJcmV0dXJuIDA7CisJLyogbWF0Y2ggZG9tYWluIHBhcnQgKHBhcnQgYWZ0ZXIgZmlyc3QgZG90
 KSAqLworCWlmICghZmV0Y2hfc3NsX2huYW1lX2VxdWFsKGhkb3QsIGhsZW4gLSBoZG90aWR4LCBt
 ZG90MSwgbWxlbiAtIG1kb3QxaWR4KSkKKwkJcmV0dXJuIDA7CisJLyogbWF0Y2ggcGFydCBsZWZ0
 IG9mIHdpbGRjYXJkICovCisJaWYgKCFmZXRjaF9zc2xfaG5hbWVfZXF1YWwoaCwgd2NpZHgsIG0s
 IHdjaWR4KSkKKwkJcmV0dXJuIDA7CisJLyogbWF0Y2ggcGFydCByaWdodCBvZiB3aWxkY2FyZCAq
 LworCWRlbHRhID0gbWRvdDFpZHggLSB3Y2lkeCAtIDE7CisJaWYgKCFmZXRjaF9zc2xfaG5hbWVf
 ZXF1YWwoaGRvdCAtIGRlbHRhLCBkZWx0YSwgbWRvdDEgLSBkZWx0YSwgZGVsdGEpKQorCQlyZXR1
 cm4gMDsKKwkvKiBhbGwgdGVzdHMgc3VjY2VlZGVkLCBpdCdzIGEgbWF0Y2ggKi8KKwlyZXR1cm4g
 MTsKK30KKworLyoKKyAqIEdldCBudW1lcmljIGhvc3QgYWRkcmVzcyBpbmZvIC0gcmV0dXJucyBO
 VUxMIGlmIGhvc3Qgd2FzIG5vdCBhbiBJUAorICogYWRkcmVzcy4gVGhlIGNhbGxlciBpcyByZXNw
 b25zaWJsZSBmb3IgZGVhbGxvY2F0aW9uIHVzaW5nCisgKiBmcmVlYWRkcmluZm8oMykuCisgKi8K
 K3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorZmV0Y2hfc3NsX2dldF9udW1lcmljX2FkZHJpbmZv
 KGNvbnN0IGNoYXIgKmhuYW1lLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhZGRyaW5mbyBoaW50
 cywgKnJlczsKKwljaGFyICpob3N0OworCisJaG9zdCA9IChjaGFyICopbWFsbG9jKGxlbiArIDEp
 OworCW1lbWNweShob3N0LCBobmFtZSwgbGVuKTsKKwlob3N0W2xlbl0gPSAnXDAnOworCW1lbXNl
 dCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BF
 QzsKKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCWhpbnRzLmFpX3Byb3RvY29s
 ID0gMDsKKwloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCS8qIHBvcnQgaXMgbm90
 IHJlbGV2YW50IGZvciB0aGlzIHB1cnBvc2UgKi8KKwlpZiAoZ2V0YWRkcmluZm8oaG9zdCwgIjQ0
 MyIsICZoaW50cywgJnJlcykgIT0gMCkKKwkJcmVzID0gTlVMTDsKKwlmcmVlKGhvc3QpOworCXJl
 dHVybiByZXM7Cit9CisKKy8qCisgKiBDb21wYXJlIGlwIGFkZHJlc3MgaW4gYWRkcmluZm8gd2l0
 aCBhZGRyZXNzIHBhc3Nlcy4KKyAqLworc3RhdGljIGludAorZmV0Y2hfc3NsX2lwYWRkcl9tYXRj
 aF9iaW4oY29uc3Qgc3RydWN0IGFkZHJpbmZvICpsaG9zdCwgY29uc3QgY2hhciAqcmhvc3QsCisg
 ICAgc2l6ZV90IHJob3N0bGVuKQoreworCWNvbnN0IHZvaWQgKmxlZnQ7CisKKwlpZiAobGhvc3Qt
 PmFpX2ZhbWlseSA9PSBBRl9JTkVUICYmIHJob3N0bGVuID09IDQpIHsKKwkJbGVmdCA9ICh2b2lk
 ICopJigoc3RydWN0IHNvY2thZGRyX2luKikodm9pZCAqKQorCQkgICAgbGhvc3QtPmFpX2FkZHIp
 LT5zaW5fYWRkci5zX2FkZHI7CisjaWZkZWYgSU5FVDYKKwl9IGVsc2UgaWYgKGxob3N0LT5haV9m
 YW1pbHkgPT0gQUZfSU5FVDYgJiYgcmhvc3RsZW4gPT0gMTYpIHsKKwkJbGVmdCA9ICh2b2lkICop
 Jigoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopCisJCSAgICBsaG9zdC0+YWlfYWRkcikt
 PnNpbjZfYWRkcjsKKyNlbmRpZgorCX0gZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbWVtY21w
 KGxlZnQsIChjb25zdCB2b2lkICopcmhvc3QsIHJob3N0bGVuKSA9PSAwID8gMSA6IDA7Cit9CisK
 Ky8qCisgKiBDb21wYXJlIGlwIGFkZHJlc3MgaW4gYWRkcmluZm8gd2l0aCBob3N0IHBhc3NlZC4g
 SWYgaG9zdCBpcyBub3QgYW4gSVAKKyAqIGFkZHJlc3MsIGNvbXBhcmlzb24gd2lsbCBmYWlsLgor
 ICovCitzdGF0aWMgaW50CitmZXRjaF9zc2xfaXBhZGRyX21hdGNoKGNvbnN0IHN0cnVjdCBhZGRy
 aW5mbyAqbGFkZHIsIGNvbnN0IGNoYXIgKnIsIHNpemVfdCBybGVuKQoreworCXN0cnVjdCBhZGRy
 aW5mbyAqcmFkZHI7CisJaW50IHJldDsKKwljaGFyICpyaXA7CisKKwlyZXQgPSAwOworCWlmICgo
 cmFkZHIgPSBmZXRjaF9zc2xfZ2V0X251bWVyaWNfYWRkcmluZm8ociwgcmxlbikpID09IE5VTEwp
 CisJCXJldHVybiAwOyAvKiBub3QgYSBudW1lcmljIGhvc3QgKi8KKworCWlmIChsYWRkci0+YWlf
 ZmFtaWx5ID09IHJhZGRyLT5haV9mYW1pbHkpIHsKKwkJaWYgKGxhZGRyLT5haV9mYW1pbHkgPT0g
 QUZfSU5FVCkgeworCQkJcmlwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9p
 ZCAqKQorCQkJICAgIHJhZGRyLT5haV9hZGRyKS0+c2luX2FkZHIuc19hZGRyOworCQkJcmV0ID0g
 ZmV0Y2hfc3NsX2lwYWRkcl9tYXRjaF9iaW4obGFkZHIsIHJpcCwgNCk7CisjaWZkZWYgSU5FVDYK
 KwkJfSBlbHNlIGlmIChsYWRkci0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlyaXAgPSAo
 Y2hhciAqKSYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKQorCQkJICAgIHJhZGRyLT5h
 aV9hZGRyKS0+c2luNl9hZGRyOworCQkJcmV0ID0gZmV0Y2hfc3NsX2lwYWRkcl9tYXRjaF9iaW4o
 bGFkZHIsIHJpcCwgMTYpOworI2VuZGlmCisJCX0KKworCX0KKwlmcmVlYWRkcmluZm8ocmFkZHIp
 OworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIFZlcmlmeSBzZXJ2ZXIgY2VydGlmaWNhdGUg
 Ynkgc3ViamVjdEFsdE5hbWUuCisgKi8KK3N0YXRpYyBpbnQKK2ZldGNoX3NzbF92ZXJpZnlfYWx0
 bmFtZShTVEFDS19PRihHRU5FUkFMX05BTUUpICphbHRuYW1lcywgY29uc3QgY2hhciAqaG9zdCwK
 KyAgICBzdHJ1Y3QgYWRkcmluZm8gKmlwKQoreworCWNvbnN0IEdFTkVSQUxfTkFNRSAqbmFtZTsK
 KwlzaXplX3QgbnNsZW47CisJaW50IGk7CisJY29uc3QgY2hhciAqbnM7CisKKwlmb3IgKGkgPSAw
 OyBpIDwgc2tfR0VORVJBTF9OQU1FX251bShhbHRuYW1lcyk7ICsraSkgeworI2lmIE9QRU5TU0xf
 VkVSU0lPTl9OVU1CRVIgPCAweDEwMDAwMDAwTAorCQkvKgorCQkgKiBUaGlzIGlzIGEgd29ya2Fy
 b3VuZCwgc2luY2UgdGhlIGZvbGxvd2luZyBsaW5lIGNhdXNlcworCQkgKiBhbGlnbm1lbnQgaXNz
 dWVzIGluIGNsYW5nOgorCQkgKiBuYW1lID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGFsdG5hbWVz
 LCBpKTsKKwkJICogT3BlblNTTCBleHBsaWNpdGx5IHdhcm5zIG5vdCB0byB1c2UgdGhvc2UgbWFj
 cm9zCisJCSAqIGRpcmVjdGx5LCBidXQgdGhlcmUgaXNuJ3QgbXVjaCBjaG9pY2UgKGFuZCB0aGVy
 ZQorCQkgKiBzaG91bGRuJ3QgYmUgYW55IGlsbCBzaWRlIGVmZmVjdHMpCisJCSAqLworCQluYW1l
 ID0gKEdFTkVSQUxfTkFNRSAqKVNLTV9za192YWx1ZSh2b2lkLCBhbHRuYW1lcywgaSk7CisjZWxz
 ZQorCQluYW1lID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGFsdG5hbWVzLCBpKTsKKyNlbmRpZgor
 I2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMTAwMDAwTAorCQlucyA9IChjb25zdCBj
 aGFyICopQVNOMV9TVFJJTkdfZGF0YShuYW1lLT5kLmlhNSk7CisjZWxzZQorCQlucyA9IChjb25z
 dCBjaGFyICopQVNOMV9TVFJJTkdfZ2V0MF9kYXRhKG5hbWUtPmQuaWE1KTsKKyNlbmRpZgorCQlu
 c2xlbiA9IChzaXplX3QpQVNOMV9TVFJJTkdfbGVuZ3RoKG5hbWUtPmQuaWE1KTsKKworCQlpZiAo
 bmFtZS0+dHlwZSA9PSBHRU5fRE5TICYmIGlwID09IE5VTEwgJiYKKwkJICAgIGZldGNoX3NzbF9o
 bmFtZV9tYXRjaChob3N0LCBzdHJsZW4oaG9zdCksIG5zLCBuc2xlbikpCisJCQlyZXR1cm4gMTsK
 KwkJZWxzZSBpZiAobmFtZS0+dHlwZSA9PSBHRU5fSVBBREQgJiYgaXAgIT0gTlVMTCAmJgorCQkg
 ICAgZmV0Y2hfc3NsX2lwYWRkcl9tYXRjaF9iaW4oaXAsIG5zLCBuc2xlbikpCisJCQlyZXR1cm4g
 MTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBWZXJpZnkgc2VydmVyIGNlcnRpZmljYXRl
 IGJ5IENOLgorICovCitzdGF0aWMgaW50CitmZXRjaF9zc2xfdmVyaWZ5X2NuKFg1MDlfTkFNRSAq
 c3ViamVjdCwgY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IGFkZHJpbmZvICppcCkKK3sKKwlBU04x
 X1NUUklORyAqbmFtZWRhdGE7CisJWDUwOV9OQU1FX0VOVFJZICpuYW1lZW50cnk7CisJaW50IGNu
 bGVuLCBsYXN0cG9zLCBsb2MsIHJldDsKKwl1bnNpZ25lZCBjaGFyICpjbjsKKworCXJldCA9IDA7
 CisJbGFzdHBvcyA9IC0xOworCWxvYyA9IC0xOworCWNuID0gTlVMTDsKKwkvKiBnZXQgbW9zdCBz
 cGVjaWZpYyBDTiAobGFzdCBlbnRyeSBpbiBsaXN0KSBhbmQgY29tcGFyZSAqLworCXdoaWxlICgo
 bGFzdHBvcyA9IFg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEKHN1YmplY3QsCisJICAgIE5JRF9j
 b21tb25OYW1lLCBsYXN0cG9zKSkgIT0gLTEpCisJCWxvYyA9IGxhc3Rwb3M7CisKKwlpZiAobG9j
 ID4gLTEpIHsKKwkJbmFtZWVudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShzdWJqZWN0LCBsb2Mp
 OworCQluYW1lZGF0YSA9IFg1MDlfTkFNRV9FTlRSWV9nZXRfZGF0YShuYW1lZW50cnkpOworCQlj
 bmxlbiA9IEFTTjFfU1RSSU5HX3RvX1VURjgoJmNuLCBuYW1lZGF0YSk7CisJCWlmIChpcCA9PSBO
 VUxMICYmCisJCSAgICBmZXRjaF9zc2xfaG5hbWVfbWF0Y2goaG9zdCwgc3RybGVuKGhvc3QpLCAo
 Y29uc3QgY2hhciAqKWNuLAorCQkgICAgY25sZW4pKQorCQkJcmV0ID0gMTsKKwkJZWxzZSBpZiAo
 aXAgIT0gTlVMTCAmJiBmZXRjaF9zc2xfaXBhZGRyX21hdGNoKGlwLAorCQkgICAgKGNvbnN0IGNo
 YXIgKiljbiwgY25sZW4pKQorCQkJcmV0ID0gMTsKKwkJT1BFTlNTTF9mcmVlKGNuKTsKKwl9CisJ
 cmV0dXJuIHJldDsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IHNlcnZlciBjZXJ0aWZpY2F0ZSBz
 dWJqZWN0QWx0TmFtZS9DTiBtYXRjaGVzCisgKiBob3N0bmFtZS4gRmlyc3QgY2hlY2ssIGlmIHRo
 ZXJlIGFyZSBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWVzLiBJZiB5ZXMsCisgKiB0aG9zZSBoYXZl
 IHRvIG1hdGNoLiBPbmx5IGlmIHRob3NlIGRvbid0IGV4aXN0IGl0IGZhbGxzIGJhY2sgdG8KKyAq
 IGNoZWNraW5nIHRoZSBzdWJqZWN0J3MgQ04uCisgKi8KK3N0YXRpYyBpbnQKK2ZldGNoX3NzbF92
 ZXJpZnlfaG5hbWUoWDUwOSAqY2VydCwgY29uc3QgY2hhciAqaG9zdCkKK3sKKwlzdHJ1Y3QgYWRk
 cmluZm8gKmlwOworCVNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmFsdG5hbWVzOworCVg1MDlfTkFN
 RSAqc3ViamVjdDsKKwlpbnQgcmV0ID0gMDsKKworCWlwID0gZmV0Y2hfc3NsX2dldF9udW1lcmlj
 X2FkZHJpbmZvKGhvc3QsIHN0cmxlbihob3N0KSk7CisJYWx0bmFtZXMgPSBYNTA5X2dldF9leHRf
 ZDJpKGNlcnQsIE5JRF9zdWJqZWN0X2FsdF9uYW1lLCBOVUxMLCBOVUxMKTsKKworCWlmIChhbHRu
 YW1lcyAhPSBOVUxMKSB7CisJCXJldCA9IGZldGNoX3NzbF92ZXJpZnlfYWx0bmFtZShhbHRuYW1l
 cywgaG9zdCwgaXApOworCX0gZWxzZSB7CisJCXN1YmplY3QgPSBYNTA5X2dldF9zdWJqZWN0X25h
 bWUoY2VydCk7CisJCWlmIChzdWJqZWN0ICE9IE5VTEwpCisJCQlyZXQgPSBmZXRjaF9zc2xfdmVy
 aWZ5X2NuKHN1YmplY3QsIGhvc3QsIGlwKTsKKwl9CisKKwlpZiAoaXAgIT0gTlVMTCkKKwkJZnJl
 ZWFkZHJpbmZvKGlwKTsKKwlpZiAoYWx0bmFtZXMgIT0gTlVMTCkKKwkJR0VORVJBTF9OQU1FU19m
 cmVlKGFsdG5hbWVzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ29uZmlndXJlIHRyYW5z
 cG9ydCBzZWN1cml0eSBsYXllciBiYXNlZCBvbiBlbnZpcm9ubWVudC4KKyAqLworc3RhdGljIHZv
 aWQKK2ZldGNoX3NzbF9zZXR1cF90cmFuc3BvcnRfbGF5ZXIoU1NMX0NUWCAqY3R4KQoreworCWxv
 bmcgc3NsX2N0eF9vcHRpb25zOworCisJc3NsX2N0eF9vcHRpb25zID0gU1NMX09QX0FMTCB8IFNT
 TF9PUF9OT19TU0x2MiB8IFNTTF9PUF9OT19USUNLRVQ7CisJaWYgKCFzc2xfdXNlX3NzbHYzKQor
 CQlzc2xfY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOworCWlmICghc3NsX3VzZV90bHN2
 MSkKKwkJc3NsX2N0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MTsKKwlpZiAoIXNzbF91c2Vf
 dGxzdjFfMSkKKwkJc3NsX2N0eF9vcHRpb25zIHw9IFNTTF9PUF9OT19UTFN2MV8xOworCWlmICgh
 c3NsX3VzZV90bHN2MV8yKQorCQlzc2xfY3R4X29wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzI7
 CisJaWYgKGZ0cF9kZWJ1ZyAmJiB2ZXJib3NlKQorCQlmcHJpbnRmKHR0eW91dCwgIlNTTCBvcHRp
 b25zOiAlbHhcbiIsIHNzbF9jdHhfb3B0aW9ucyk7CisJU1NMX0NUWF9zZXRfb3B0aW9ucyhjdHgs
 IHNzbF9jdHhfb3B0aW9ucyk7Cit9CisKKy8qCisgKiBDYWxsYmFjayBmb3IgU1NMIGNlcnRpZmlj
 YXRlIHZlcmlmaWNhdGlvbiwgdGhpcyBpcyBjYWxsZWQgb24gc2VydmVyCisgKiBjZXJ0IHZlcmlm
 aWNhdGlvbi4gSXQgdGFrZXMgbm8gZGVjaXNpb24sIGJ1dCBpbmZvcm1zIHRoZSB1c2VyIGluIGNh
 c2UKKyAqIHZlcmlmaWNhdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyBpbnQKK2ZldGNoX3NzbF9j
 Yl92ZXJpZnlfY3J0KGludCB2ZXJpZmllZCwgWDUwOV9TVE9SRV9DVFggKmN0eCkKK3sKKwlYNTA5
 ICpjcnQ7CisJWDUwOV9OQU1FICpuYW1lOworCWNoYXIgKnN0cjsKKworCXN0ciA9IE5VTEw7CisJ
 aWYgKCF2ZXJpZmllZCkgeworCQlpZiAoKGNydCA9IFg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50
 X2NlcnQoY3R4KSkgIT0gTlVMTCAmJgorCQkgICAgKG5hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25h
 bWUoY3J0KSkgIT0gTlVMTCkKKwkJCXN0ciA9IFg1MDlfTkFNRV9vbmVsaW5lKG5hbWUsIDAsIDAp
 OworCQlmcHJpbnRmKHR0eW91dCwgIkNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBmYWlsZWQgZm9y
 ICVzXG4iLAorCQkgICAgc3RyICE9IE5VTEwgPyBzdHIgOiAibm8gcmVsZXZhbnQgY2VydGlmaWNh
 dGUiKTsKKwkJT1BFTlNTTF9mcmVlKHN0cik7CisJfQorCXJldHVybiB2ZXJpZmllZDsKK30KKwor
 LyoKKyAqIENvbmZpZ3VyZSBwZWVyIHZlcmlmaWNhdGlvbiBiYXNlZCBvbiBlbnZpcm9ubWVudC4K
 KyAqLworI2lmbmRlZiBCQVNFX0NFUlRfRklMRQorI2lmZGVmIF9fTmV0QlNEX18KKyNkZWZpbmUg
 QkFTRV9DRVJUX0ZJTEUgICIvZXRjL29wZW5zc2wvY2VydC5wZW0iCisjZWxzZQkvKiAhX19OZXRC
 U0RfXyAqLworI2RlZmluZSBCQVNFX0NFUlRfRklMRSAgIi9ldGMvc3NsL2NlcnQucGVtIgorI2Vu
 ZGlmCS8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZgkvKiBCQVNFX0NFUlRfRklMRSAqLworc3RhdGlj
 IGludAorZmV0Y2hfc3NsX3NldHVwX3BlZXJfdmVyaWZpY2F0aW9uKFNTTF9DVFggKmN0eCkKK3sK
 KwlYNTA5X0xPT0tVUCAqY3JsX2xvb2t1cDsKKwlYNTA5X1NUT1JFICpjcmxfc3RvcmU7CisJY29u
 c3QgY2hhciAqY2FfY2VydF9maWxlOworCisJaWYgKHNzbF92ZXJpZnlfcGVlcikgeworCQljYV9j
 ZXJ0X2ZpbGUgPSBzc2xfY2FfY2VydF9maWxlOworCQlpZiAoY2FfY2VydF9maWxlID09IE5VTEwg
 JiYKKwkJICAgIGFjY2VzcyhCQVNFX0NFUlRfRklMRSwgUl9PSykgPT0gMCkKKwkJCWNhX2NlcnRf
 ZmlsZSA9IEJBU0VfQ0VSVF9GSUxFOworCQlpZiAoZnRwX2RlYnVnICYmIHZlcmJvc2UpIHsKKwkJ
 CWZwcmludGYodHR5b3V0LCAiUGVlciB2ZXJpZmljYXRpb24gZW5hYmxlZFxuIik7CisJCQlpZiAo
 c3NsX2NhX2NlcnRfZmlsZSAhPSBOVUxMKQorCQkJCWZwcmludGYodHR5b3V0LCAiVXNpbmcgQ0Eg
 Y2VydCBmaWxlOiAlc1xuIiwKKwkJCQkgICAgY2FfY2VydF9maWxlKTsKKwkJCWlmIChzc2xfY2Ff
 Y2VydF9wYXRoICE9IE5VTEwpCisJCQkJZnByaW50Zih0dHlvdXQsICJVc2luZyBDQSBjZXJ0IHBh
 dGg6ICVzXG4iLAorCQkJCSAgICBzc2xfY2FfY2VydF9wYXRoKTsKKwkJCWlmIChjYV9jZXJ0X2Zp
 bGUgPT0gTlVMTCAmJiBzc2xfY2FfY2VydF9wYXRoID09IE5VTEwpCisJCQkJZnByaW50Zih0dHlv
 dXQsICJVc2luZyBPcGVuU1NMIGRlZmF1bHQgIgorCQkJCSAgICAiQ0EgY2VydCBmaWxlIGFuZCBw
 YXRoXG4iKTsKKwkJfQorCQlTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBTU0xfVkVSSUZZX1BFRVIs
 CisJCSAgICBmZXRjaF9zc2xfY2JfdmVyaWZ5X2NydCk7CisJCWlmIChjYV9jZXJ0X2ZpbGUgIT0g
 TlVMTCB8fCBzc2xfY2FfY2VydF9wYXRoICE9IE5VTEwpCisJCQlTU0xfQ1RYX2xvYWRfdmVyaWZ5
 X2xvY2F0aW9ucyhjdHgsIGNhX2NlcnRfZmlsZSwKKwkJCSAgICBzc2xfY2FfY2VydF9wYXRoKTsK
 KwkJZWxzZQorCQkJU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoY3R4KTsKKwkJaWYg
 KHNzbF9jcmxfZmlsZSAhPSBOVUxMKSB7CisJCQlpZiAoZnRwX2RlYnVnICYmIHZlcmJvc2UpCisJ
 CQkJZnByaW50Zih0dHlvdXQsICJVc2luZyBDUkwgZmlsZTogJXNcbiIsCisJCQkJICAgIHNzbF9j
 cmxfZmlsZSk7CisJCQljcmxfc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKGN0eCk7CisJ
 CQljcmxfbG9va3VwID0gWDUwOV9TVE9SRV9hZGRfbG9va3VwKGNybF9zdG9yZSwKKwkJCSAgICBY
 NTA5X0xPT0tVUF9maWxlKCkpOworCQkJaWYgKGNybF9sb29rdXAgPT0gTlVMTCB8fAorCQkJICAg
 ICFYNTA5X2xvYWRfY3JsX2ZpbGUoY3JsX2xvb2t1cCwgc3NsX2NybF9maWxlLAorCQkJCVg1MDlf
 RklMRVRZUEVfUEVNKSkgeworCQkJCWZwcmludGYodHR5b3V0LCAiQ291bGQgbm90IGxvYWQgQ1JM
 IGZpbGUgJXNcbiIsCisJCQkJICAgIHNzbF9jcmxfZmlsZSk7CisJCQkJcmV0dXJuIDA7CisJCQl9
 CisJCQlYNTA5X1NUT1JFX3NldF9mbGFncyhjcmxfc3RvcmUsCisJCQkgICAgWDUwOV9WX0ZMQUdf
 Q1JMX0NIRUNLIHwgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLX0FMTCk7CisJCX0KKwl9CisJcmV0dXJu
 IDE7Cit9CisKKy8qCisgKiBDb25maWd1cmUgY2xpZW50IGNlcnRpZmljYXRlIGJhc2VkIG9uIGVu
 dmlyb25tZW50LgorICovCitzdGF0aWMgaW50CitmZXRjaF9zc2xfc2V0dXBfY2xpZW50X2NlcnRp
 ZmljYXRlKFNTTF9DVFggKmN0eCkKK3sKKwljb25zdCBjaGFyICpjbGllbnRfa2V5X2ZpbGU7CisK
 KwlpZiAoc3NsX2NsaWVudF9jZXJ0X2ZpbGUgIT0gTlVMTCkgeworCQlpZiAoc3NsX2NsaWVudF9r
 ZXlfZmlsZSAhPSBOVUxMKQorCQkJY2xpZW50X2tleV9maWxlID0gc3NsX2NsaWVudF9rZXlfZmls
 ZTsKKwkJZWxzZQorCQkJY2xpZW50X2tleV9maWxlID0gc3NsX2NsaWVudF9jZXJ0X2ZpbGU7CisJ
 CWlmIChmdHBfZGVidWcgJiYgdmVyYm9zZSkgeworCQkJZnByaW50Zih0dHlvdXQsICJVc2luZyBj
 bGllbnQgY2VydCBmaWxlOiAlc1xuIiwKKwkJCSAgICBzc2xfY2xpZW50X2NlcnRfZmlsZSk7CisJ
 CQlmcHJpbnRmKHR0eW91dCwgIlVzaW5nIGNsaWVudCBrZXkgZmlsZTogJXNcbiIsCisJCQkgICAg
 Y2xpZW50X2tleV9maWxlKTsKKwkJfQorCQlpZiAoU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hh
 aW5fZmlsZShjdHgsCisJCQlzc2xfY2xpZW50X2NlcnRfZmlsZSkgIT0gMSkgeworCQkJZnByaW50
 Zih0dHlvdXQsICJDb3VsZCBub3QgbG9hZCBjbGllbnQgY2VydGlmaWNhdGUgJXNcbiIsCisJCQkg
 ICAgc3NsX2NsaWVudF9jZXJ0X2ZpbGUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKFNTTF9D
 VFhfdXNlX1ByaXZhdGVLZXlfZmlsZShjdHgsIGNsaWVudF9rZXlfZmlsZSwKKwkJCVNTTF9GSUxF
 VFlQRV9QRU0pICE9IDEpIHsKKwkJCWZwcmludGYodHR5b3V0LCAiQ291bGQgbm90IGxvYWQgY2xp
 ZW50IGtleSAlc1xuIiwKKwkJCSAgICBjbGllbnRfa2V5X2ZpbGUpOworCQkJcmV0dXJuIDA7CisJ
 CX0KKwl9CisJcmV0dXJuIDE7Cit9CisKIHZvaWQgKgogZmV0Y2hfc3RhcnRfc3NsKGludCBzb2Nr
 LCBjb25zdCBjaGFyICpzZXJ2ZXJuYW1lKQogewogCVNTTCAqc3NsOwogCVNTTF9DVFggKmN0eDsK
 KwlYNTA5ICpjZXJ0OwogCWludCByZXQsIHNzbF9lcnI7CiAKIAkvKiBJbml0IHRoZSBTU0wgbGli
 cmFyeSBhbmQgY29udGV4dCAqLwpAQCAtNTYxLDggKzEwNTMsMjIgQEAgZmV0Y2hfc3RhcnRfc3Ns
 KGludCBzb2NrLCBjb25zdCBjaGFyICpzZQogCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKIAog
 CWN0eCA9IFNTTF9DVFhfbmV3KFNTTHYyM19jbGllbnRfbWV0aG9kKCkpOworCWlmIChjdHggPT0g
 TlVMTCkgeworCQlmcHJpbnRmKHR0eW91dCwgIlNTTCBjb250ZXh0IGNyZWF0aW9uIGZhaWxlZFxu
 Iik7CisJCXJldHVybiBOVUxMOworCX0KIAlTU0xfQ1RYX3NldF9tb2RlKGN0eCwgU1NMX01PREVf
 QVVUT19SRVRSWSk7CiAKKwlmZXRjaF9zc2xfc2V0dXBfdHJhbnNwb3J0X2xheWVyKGN0eCk7CisJ
 aWYgKCFmZXRjaF9zc2xfc2V0dXBfcGVlcl92ZXJpZmljYXRpb24oY3R4KSkgeworCQlTU0xfQ1RY
 X2ZyZWUoY3R4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICghZmV0Y2hfc3NsX3NldHVwX2Ns
 aWVudF9jZXJ0aWZpY2F0ZShjdHgpKSB7CisJCVNTTF9DVFhfZnJlZShjdHgpOworCQlyZXR1cm4g
 TlVMTDsKKwl9CisKIAlzc2wgPSBTU0xfbmV3KGN0eCk7CiAJaWYgKHNzbCA9PSBOVUxMKXsKIAkJ
 ZnByaW50Zih0dHlvdXQsICJTU0wgY29udGV4dCBjcmVhdGlvbiBmYWlsZWRcbiIpOwpAQCAtNTcy
 LDcgKzEwNzgsNyBAQCBmZXRjaF9zdGFydF9zc2woaW50IHNvY2ssIGNvbnN0IGNoYXIgKnNlCiAJ
 U1NMX3NldF9mZChzc2wsIHNvY2spOwogCWlmICghU1NMX3NldF90bHNleHRfaG9zdF9uYW1lKHNz
 bCwgX19VTkNPTlNUKHNlcnZlcm5hbWUpKSkgewogCQlmcHJpbnRmKHR0eW91dCwgIlNTTCBob3N0
 bmFtZSBzZXR0aW5nIGZhaWxlZFxuIik7Ci0JCVNTTF9DVFhfZnJlZShjdHgpOworCQlTU0xfZnJl
 ZShzc2wpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJd2hpbGUgKChyZXQgPSBTU0xfY29ubmVjdChz
 c2wpKSA9PSAtMSkgewpAQCAtNTg1LDIzICsxMDkxLDI1IEBAIGZldGNoX3N0YXJ0X3NzbChpbnQg
 c29jaywgY29uc3QgY2hhciAqc2UKIAkJfQogCX0KIAotCWlmIChmdHBfZGVidWcgJiYgdmVyYm9z
 ZSkgewotCQlYNTA5ICpjZXJ0OwotCQlYNTA5X05BTUUgKm5hbWU7Ci0JCWNoYXIgKnN0cjsKLQot
 CQlmcHJpbnRmKHR0eW91dCwgIlNTTCBjb25uZWN0aW9uIGVzdGFibGlzaGVkIHVzaW5nICVzXG4i
 LAotCQkgICAgU1NMX2dldF9jaXBoZXIoc3NsKSk7Ci0JCWNlcnQgPSBTU0xfZ2V0X3BlZXJfY2Vy
 dGlmaWNhdGUoc3NsKTsKLQkJbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjZXJ0KTsKLQkJ
 c3RyID0gWDUwOV9OQU1FX29uZWxpbmUobmFtZSwgMCwgMCk7Ci0JCWZwcmludGYodHR5b3V0LCAi
 Q2VydGlmaWNhdGUgc3ViamVjdDogJXNcbiIsIHN0cik7Ci0JCWZyZWUoc3RyKTsKLQkJbmFtZSA9
 IFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGNlcnQpOwotCQlzdHIgPSBYNTA5X05BTUVfb25lbGluZShu
 YW1lLCAwLCAwKTsKLQkJZnByaW50Zih0dHlvdXQsICJDZXJ0aWZpY2F0ZSBpc3N1ZXI6ICVzXG4i
 LCBzdHIpOwotCQlmcmVlKHN0cik7CisJY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShz
 c2wpOworCWlmIChjZXJ0ID09IE5VTEwpIHsKKwkJZnByaW50Zih0dHlvdXQsICJObyBzZXJ2ZXIg
 U1NMIGNlcnRpZmljYXRlXG4iKTsKKwkJU1NMX2ZyZWUoc3NsKTsKKwkJcmV0dXJuIE5VTEw7CisJ
 fQorCWlmIChzc2xfdmVyaWZ5X2hvc3RuYW1lKSB7CisJCWlmIChmdHBfZGVidWcgJiYgdmVyYm9z
 ZSkKKwkJCWZwcmludGYodHR5b3V0LCAiVmVyaWZ5IGhvc3RuYW1lXG4iKTsKKwkJaWYgKCFmZXRj
 aF9zc2xfdmVyaWZ5X2huYW1lKGNlcnQsIHNlcnZlcm5hbWUpKSB7CisJCQlmcHJpbnRmKHR0eW91
 dCwKKwkJCSAgICAiU1NMIGNlcnRpZmljYXRlIHN1YmplY3QgZG9lc24ndCBtYXRjaCBob3N0ICVz
 XG4iLAorCQkJICAgIHNlcnZlcm5hbWUpOworCQkJWDUwOV9mcmVlKGNlcnQpOworCQkJU1NMX2Zy
 ZWUoc3NsKTsKKwkJCXJldHVybiBOVUxMOworCQl9CiAJfQorCVg1MDlfZnJlZShjZXJ0KTsKIAog
 CXJldHVybiBzc2w7CiB9Cg==
 --000000000000b5acf30580d7f704--
 



Home | Main Index | Thread Index | Old Index