From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B569F458CB for ; Sat, 22 Jun 2024 01:37:15 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7F1EB68D720; Sat, 22 Jun 2024 04:37:11 +0300 (EEST) Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BF50A68D363 for ; Sat, 22 Jun 2024 04:37:04 +0300 (EEST) X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.11.12] ([95.33.107.89]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N2V0H-1sUcgy3gp5-00wmQk for ; Sat, 22 Jun 2024 03:37:03 +0200 Content-Type: multipart/mixed; boundary="------------T1bjGO0XgYzQPb2Sn2o6L6yw" Message-ID: Date: Sat, 22 Jun 2024 03:37:03 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: de-DE, en-US To: ffmpeg-devel@ffmpeg.org X-Provags-ID: V03:K1:IkqHQ1hWrttKa0BHTMNsdU22b/6hzDfQ0y3T+NMT9lde0VnH8Tt 1GhgVNYGAmI69L1gacLDSnZpuZinUJbi9pWkS+bIFjaXSrag5hbk3UQ6GNA9wC/3xNBXwPA 8mJbSgifoBR5TWcOWntvo99SvDAIGBwzXU/lzyQtSsg57xoo/X59I9qkmh1QRhqPGDc/QbO bbnxQsvrZmj2ocFV3Wq8w== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Kr5G+TPt8es=;6hvGx/gFwFFQYc8KZ+qs7rGXGjK nXuuTCBoQq8/cQwAYh25lJqTZLKknSXGJIJc7ktzjTXhalpPFgtp7h4OhIdeWvtKbDx95BBgp zCZrDPGZMPf/U7aufsaXfJf7pEZ3cOg1Bz+KbOElkLdw6ZN/qcQf/755d9lt30c9m+XahIFf9 dcpoeJpBRq8xi/+vB5kYovKt3X6pJ9AzWUzuZ0WP7P/gFZv9eAhmXAHN5kh/ZNZzKPSkzejEA o4zUsTZPZZBxaNzroe29n7MQHXxt4ujd/7Gl+d+H85WuROHs7sdQRtHCml30Vv9xk5TEqgEU8 /EhheBSKfhboEmHFjU9dk9k3LZo9Q3AbkF3SlFTe8+u/aOjzVcyygXzfhHxRwbCaKt/EN3Urj X55aUk0rKOuzT+y4gZyyC5d6tqQecHe0iJLwIu7SgxNWEG36gbcQq3KYuE8Qtu/qc1xlfLhbr dCD1vr6moNk/cDmXwHZSkmu3vn0V56JHKNB/aXD/o2vacXhAUaOld6+yI1oCQZjw7F7FDdDFI M+u0x2B2dF+G4F/rRbXkizE34uxM19aVtAYXIWM2sG8aLdObBinGsMXNC67AiCfAwJHCNo1C2 IULBKlRlF3AecgZL1Qg3R8suwQzkoyBelFOv31Txi1Diy1P9v5zZNbBYbeo4IKueAdyl0EyyL g1s5zVfeCNqWM7O9JQsgPPqO8xCALM+YnEUUXtGezqbTMDSrwNkVjRb6IhDW9CgNkyrGiltK/ /FZGXTJLaDr2OaK+2AjRX3s5SDXn2RraAS1xROicV6PQIpDf0xUlooV1Bs9I1TmGTULmRXyXK G+vdu7tpfzZnQcOVDIGz58hoCHwJe2Ez7qYocSigrcHBo= Subject: [FFmpeg-devel] [PATCH] libavformat/vapoursynth: Update to API version 4, load library at runtime X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Stefan Oltmanns via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Stefan Oltmanns Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------T1bjGO0XgYzQPb2Sn2o6L6yw Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hello, this is my first patch, I hope I got all the formalities correct. The current VapourSynth implementation is rarely used, as it links the VapourSynth library at build time, making the resulting build unable to run when VapourSynth is not installed. Therefore barely anyone compiles with VapourSynth activated. I changed it, so that it loads the library at runtime when a VapourSynth script should be opened, just like AviSynth does. On Windows the DLL from VapourSynth is not installed in the system directory, but the location is stored in the Registry. Therefore I added some code to read that information from the registry. As the V4 API is designed with dynamic loading in mind (only a single import), I updated the implementation to V4 (changes are mostly superficial, no structural changes). The V4 API is already several years old, fully supported since R55 released in 2021. I copied the two needed header files directly in a vapoursynth.h, removing the need to install VapourSynth on the build machine (VapourSynth is also LGPL 2.1 or later, so no license issue). I updated the configure so that it checks for the ability to load libraries at runtime for VapourSynth, just like AviSynth and activate it if not disable= d. make fate runs without any issue. I tested VapourSynth input scripts with various color formats on different platforms: Ubuntu 22.04 macOS 13 (x86_64) macOS 13 (arm64) Windows 10 (msys2/gcc) It compiles on these platforms without any warning and runs without any issues. Best regards Stefan --------------T1bjGO0XgYzQPb2Sn2o6L6yw Content-Type: text/x-patch; charset=UTF-8; name="0001-libavformat-vapoursynth-Update-to-API-version-4-load.patch" Content-Disposition: attachment; filename*0="0001-libavformat-vapoursynth-Update-to-API-version-4-load.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjMTNmYWY0NmY1ZDIxMGM2NzZiMjM3Zjg1NWQ1NmE5YjhhMGExMjdkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIERvZSA8am9obmRvZUBleGFtcGxlLmNvbT4K RGF0ZTogU2F0LCAyMiBKdW4gMjAyNCAwMjo1MzowNyArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IGxpYmF2Zm9ybWF0L3ZhcG91cnN5bnRoOiBVcGRhdGUgdG8gQVBJIHZlcnNpb24gNCwgbG9h ZAogbGlicmFyeSBhdCBydW50aW1lCgpUaGUgVmFwb3VyU3ludGggVjQgQVBJIGlzIGRlc2ln bmVkIGZvciBsb2FkaW5nIGF0IHJ1bnRpbWUgaW5zdGVhZCBvZiBsaW5raW5nIHRvIGl0IGR1 cmluZyBidWlsZCB0aW1lLAp0aGlzIGlzIG5vdyBkb25lIGluIGZmbXBlZywgc2ltaWxhciB0 byBob3cgQXZpU3ludGggc3VwcG9ydCBpcyBpbXBsZW1lbnRlZC4KVGhpcyBhbGxvd3MgYnVp bGRpbmcgd2l0aCBWYXBvdXJTeW50aCBzdXBwb3J0IGVuYWJsZWQsCmJ1dCBmZm1wZWcgc3Rp bGwgd29ya2luZyBmaW5lIHdpdGhvdXQgVmFwb3VyU3ludGggaW5zdGFsbGVkIG9uIHRhcmdl dCBtYWNoaW5lLgotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIGxp YmF2Zm9ybWF0L3ZhcG91cnN5bnRoLmMgfCAxNjcgKysrKysrKy0tLQogbGliYXZmb3JtYXQv dmFwb3Vyc3ludGguaCB8IDYzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3NjggaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvdmFwb3Vyc3ludGguaAoKZGlm ZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCAzYmNhNjM4NDU5Li5hNTRk Mjk3NmY1IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0zMzMs NyArMzMzLDcgQEAgRXh0ZXJuYWwgbGlicmFyeSBzdXBwb3J0OgogICAtLWRpc2FibGUtc2Rs MiAgICAgICAgICAgZGlzYWJsZSBzZGwyIFthdXRvZGV0ZWN0XQogICAtLWRpc2FibGUtc2Vj dXJldHJhbnNwb3J0IGRpc2FibGUgU2VjdXJlIFRyYW5zcG9ydCwgbmVlZGVkIGZvciBUTFMg c3VwcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gT1NYIGlmIG9wZW5zc2wg YW5kIGdudXRscyBhcmUgbm90IHVzZWQgW2F1dG9kZXRlY3RdCi0gIC0tZW5hYmxlLXZhcG91 cnN5bnRoICAgICBlbmFibGUgVmFwb3VyU3ludGggZGVtdXhlciBbbm9dCisgIC0tZGlzYWJs ZS12YXBvdXJzeW50aCAgICBkaXNhYmxlIFZhcG91clN5bnRoIGRlbXV4ZXIgW2F1dG9kZXRl Y3RdCiAgIC0tZGlzYWJsZS14bGliICAgICAgICAgICBkaXNhYmxlIHhsaWIgW2F1dG9kZXRl Y3RdCiAgIC0tZGlzYWJsZS16bGliICAgICAgICAgICBkaXNhYmxlIHpsaWIgW2F1dG9kZXRl Y3RdCiAKQEAgLTE4NTMsNiArMTg1Myw3IEBAIEVYVEVSTkFMX0FVVE9ERVRFQ1RfTElCUkFS WV9MSVNUPSIKICAgICBzZGwyCiAgICAgc2VjdXJldHJhbnNwb3J0CiAgICAgc25kaW8KKyAg ICB2YXBvdXJzeW50aAogICAgIHhsaWIKICAgICB6bGliCiAiCkBAIC0xOTgxLDcgKzE5ODIs NiBAQCBFWFRFUk5BTF9MSUJSQVJZX0xJU1Q9IgogICAgIG9wZW5nbAogICAgIG9wZW5zc2wK ICAgICBwb2NrZXRzcGhpbngKLSAgICB2YXBvdXJzeW50aAogIgogCiBIV0FDQ0VMX0FVVE9E RVRFQ1RfTElCUkFSWV9MSVNUPSIKQEAgLTM1NzIsNiArMzU3Miw3IEBAIGxpYnhldmRfZGVj b2Rlcl9kZXBzPSJsaWJ4ZXZkIgogbGlieGV2ZV9lbmNvZGVyX2RlcHM9ImxpYnhldmUiCiBs aWJ4dmlkX2VuY29kZXJfZGVwcz0ibGlieHZpZCIKIGxpYnp2YmlfdGVsZXRleHRfZGVjb2Rl cl9kZXBzPSJsaWJ6dmJpIgordmFwb3Vyc3ludGhfZGVwc19hbnk9ImxpYmRsIExvYWRMaWJy YXJ5IgogdmFwb3Vyc3ludGhfZGVtdXhlcl9kZXBzPSJ2YXBvdXJzeW50aCIKIHZpZGVvdG9v bGJveF9zdWdnZXN0PSJjb3Jlc2VydmljZXMiCiB2aWRlb3Rvb2xib3hfZGVwcz0iY29yZWZv dW5kYXRpb24gY29yZW1lZGlhIGNvcmV2aWRlbyIKQEAgLTcwNjgsOCArNzA2OSw2IEBAIGVu YWJsZWQgcmttcHAgICAgICAgICAgICAgJiYgeyByZXF1aXJlX3BrZ19jb25maWcgcmttcHAg cm9ja2NoaXBfbXBwICByb2NrY2hpcC9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeyBlbmFibGVkIGxpYmRybSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGllICJFUlJPUjogcmttcHAgcmVxdWlyZXMgLS1lbmFibGUtbGliZHJtIjsgfQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci1lbmFibGVkIHZhcG91cnN5bnRoICAgICAg ICYmIHJlcXVpcmVfcGtnX2NvbmZpZyB2YXBvdXJzeW50aCAidmFwb3Vyc3ludGgtc2NyaXB0 ID49IDQyIiBWU1NjcmlwdC5oIHZzc2NyaXB0X2luaXQKLQogCiBpZiBlbmFibGVkIGdjcnlw dDsgdGhlbgogICAgIEdDUllQVF9DT05GSUc9IiR7Y3Jvc3NfcHJlZml4fWxpYmdjcnlwdC1j b25maWciCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC92YXBvdXJzeW50aC5jIGIvbGliYXZm b3JtYXQvdmFwb3Vyc3ludGguYwppbmRleCA4YTI1MTllMTlhLi44Y2YzMDkwMDJiIDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC92YXBvdXJzeW50aC5jCisrKyBiL2xpYmF2Zm9ybWF0L3Zh cG91cnN5bnRoLmMKQEAgLTI1LDkgKzI1LDYgQEAKIAogI2luY2x1ZGUgPGxpbWl0cy5oPgog Ci0jaW5jbHVkZSA8VmFwb3VyU3ludGguaD4KLSNpbmNsdWRlIDxWU1NjcmlwdC5oPgotCiAj aW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCiAjaW5jbHVkZSAibGliYXZ1dGlsL2F2 c3RyaW5nLmgiCiAjaW5jbHVkZSAibGliYXZ1dGlsL2V2YWwuaCIKQEAgLTM5LDIwICszNiw2 NSBAQAogI2luY2x1ZGUgImF2Zm9ybWF0LmgiCiAjaW5jbHVkZSAiZGVtdXguaCIKICNpbmNs dWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInZhcG91cnN5bnRoLmgiCisKKy8qIFBsYXRm b3JtLXNwZWNpZmljIGRpcmVjdGl2ZXMuICovCisjaWZkZWYgX1dJTjMyCisgICNpbmNsdWRl IDx3aW5kb3dzLmg+CisgICNpbmNsdWRlICJjb21wYXQvdzMyZGxmY24uaCIKKyAgI2luY2x1 ZGUgImxpYmF2dXRpbC93Y2hhcl9maWxlbmFtZS5oIgorICBzdGF0aWMgYXZfY29sZCBjaGFy KiBnZXRfdnNfc2NyaXB0X2RsbF9uYW1lKHZvaWQpIHsKKyAgICAgICBMT05HIHI7CisgICAg ICAgV0NIQVIgdnNzX3BhdGhbNTEyXTsKKyAgICAgICBjaGFyICp2c3NfcGF0aF91dGY4Owor ICAgICAgIERXT1JEIGJ1Zl9zaXplID0gc2l6ZW9mKHZzc19wYXRoKSAtIDI7CisgICAgICAg ciA9IFJlZ0dldFZhbHVlVyhIS0VZX0NVUlJFTlRfVVNFUiwgTCJTT0ZUV0FSRVxcVmFwb3Vy U3ludGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgTCJWU1NjcmlwdERMTCIsIFJSRl9S VF9SRUdfU1osIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAmdnNzX3BhdGgsICZi dWZfc2l6ZSk7CisgICAgICAgaWYgKHIgPT0gRVJST1JfU1VDQ0VTUyAmJiB3Y2hhcnRvdXRm OCh2c3NfcGF0aCwgJnZzc19wYXRoX3V0ZjgpID09IDApCisgICAgICAgICAgIHJldHVybiB2 c3NfcGF0aF91dGY4OworICAgICAgIHIgPSBSZWdHZXRWYWx1ZVcoSEtFWV9MT0NBTF9NQUNI SU5FLCBMIlNPRlRXQVJFXFxWYXBvdXJTeW50aCIsCisgICAgICAgICAgICAgICAgICAgICAg ICBMIlZTU2NyaXB0RExMIiwgUlJGX1JUX1JFR19TWiwgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICZ2c3NfcGF0aCwgJmJ1Zl9zaXplKTsKKyAgICAgICBpZiAociA9PSBFUlJP Ul9TVUNDRVNTICYmIHdjaGFydG91dGY4KHZzc19wYXRoLCAmdnNzX3BhdGhfdXRmOCkgPT0g MCkKKyAgICAgICAgICAgcmV0dXJuIHZzc19wYXRoX3V0Zjg7CisgICAgICAgaWYgKHdjaGFy dG91dGY4KEwiVlNTY3JpcHQuZGxsIiwgJnZzc19wYXRoX3V0ZjgpID09IDApCisgICAgICAg ICAgIHJldHVybiB2c3NfcGF0aF91dGY4OworICAgICAgIHJldHVybiAwOworICB9CisgICN1 bmRlZiBFWFRFUk5fQworICAjZGVmaW5lIFZTU0NSSVBUX0xJQiAiVlNTY3JpcHQuZGxsIgor ICAjZGVmaW5lIFZTX0RMT1BFTigpICh7IHZvaWQgKmhhbmRsZSA9IE5VTEw7IFwKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKmRsbF9uYW1lID0gZ2V0X3ZzX3NjcmlwdF9kbGxf bmFtZSgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSBkbG9wZW4oZGxs X25hbWUsIFJUTERfTk9XIHwgUlRMRF9HTE9CQUwpOyBcCisgICAgICAgICAgICAgICAgICAg ICAgICBhdl9mcmVlKGRsbF9uYW1lKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgaGFu ZGxlOyB9KQorI2Vsc2UKKyAgI2luY2x1ZGUgPGRsZmNuLmg+CisgICNkZWZpbmUgVlNTQ1JJ UFRfTkFNRSAibGlidmFwb3Vyc3ludGgtc2NyaXB0IgorICAjZGVmaW5lIFZTU0NSSVBUX0xJ QiBWU1NDUklQVF9OQU1FIFNMSUJTVUYKKyAgI2RlZmluZSBWU19ETE9QRU4oKSBkbG9wZW4o VlNTQ1JJUFRfTElCLCBSVExEX05PVyB8IFJUTERfR0xPQkFMKQorI2VuZGlmCiAKIHN0cnVj dCBWU1N0YXRlIHsKICAgICBWU1NjcmlwdCAqdnNzOwogfTsKIAordHlwZWRlZiBjb25zdCBW U1NDUklQVEFQSSAqKCpWU1NjcmlwdEdldEFQSUZ1bmMpKGludCB2ZXJzaW9uKTsKKwordHlw ZWRlZiBzdHJ1Y3QgVlNTY3JpcHRMaWJyYXJ5IHsKKyAgICB2b2lkICpsaWJyYXJ5OworICAg IGNvbnN0IFZTU0NSSVBUQVBJICp2c3NhcGk7Cit9IFZTU2NyaXB0TGlicmFyeTsKKwogdHlw ZWRlZiBzdHJ1Y3QgVlNDb250ZXh0IHsKICAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKIAog ICAgIEFWQnVmZmVyUmVmICp2c3Nfc3RhdGU7CiAKICAgICBjb25zdCBWU0FQSSAqdnNhcGk7 Ci0gICAgVlNDb3JlICp2c2NvcmU7CiAKLSAgICBWU05vZGVSZWYgKm91dG5vZGU7CisgICAg VlNOb2RlICpvdXRub2RlOwogICAgIGludCBpc19jZnI7CiAgICAgaW50IGN1cnJlbnRfZnJh bWU7CiAKQEAgLTcwLDE5ICsxMTIsNTAgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIG9wdGlv bnNbXSA9IHsKICAgICB7TlVMTH0KIH07CiAKK3N0YXRpYyBWU1NjcmlwdExpYnJhcnkgdnNf c2NyaXB0X2xpYnJhcnk7CisKK3N0YXRpYyBpbnQgdnNfYXRleGl0X2NhbGxlZCA9IDA7CisK K3N0YXRpYyBhdl9jb2xkIHZvaWQgdnNfYXRleGl0X2hhbmRsZXIodm9pZCk7CisKK3N0YXRp YyBhdl9jb2xkIGludCB2c19sb2FkX2xpYnJhcnkodm9pZCkKK3sKKyAgICBWU1NjcmlwdEdl dEFQSUZ1bmMgZ2V0X3ZzX3NjcmlwdF9hcGk7CisgICAgdnNfc2NyaXB0X2xpYnJhcnkubGli cmFyeSA9IFZTX0RMT1BFTigpOworICAgIGlmICghdnNfc2NyaXB0X2xpYnJhcnkubGlicmFy eSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGdldF92c19zY3JpcHRfYXBpID0gKFZTU2Ny aXB0R2V0QVBJRnVuYylkbHN5bSh2c19zY3JpcHRfbGlicmFyeS5saWJyYXJ5LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0VlNTY3Jp cHRBUEkiKTsKKyAgICBpZiAoIWdldF92c19zY3JpcHRfYXBpKSB7CisgICAgICAgIGRsY2xv c2UodnNfc2NyaXB0X2xpYnJhcnkubGlicmFyeSk7CisgICAgICAgIHJldHVybiAtMjsKKyAg ICB9CisgICAgdnNfc2NyaXB0X2xpYnJhcnkudnNzYXBpID0gZ2V0X3ZzX3NjcmlwdF9hcGko VlNTQ1JJUFRfQVBJX1ZFUlNJT04pOworICAgIGlmICghdnNfc2NyaXB0X2xpYnJhcnkudnNz YXBpKSB7CisgICAgICAgIGRsY2xvc2UodnNfc2NyaXB0X2xpYnJhcnkubGlicmFyeSk7Cisg ICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgYXRleGl0KHZzX2F0ZXhpdF9oYW5kbGVy KTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZnJlZV92c3Nfc3RhdGUodm9p ZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQogewogICAgIHN0cnVjdCBWU1N0YXRlICp2c3Mg PSBvcGFxdWU7CiAKICAgICBpZiAodnNzLT52c3MpIHsKLSAgICAgICAgdnNzY3JpcHRfZnJl ZVNjcmlwdCh2c3MtPnZzcyk7Ci0gICAgICAgIHZzc2NyaXB0X2ZpbmFsaXplKCk7CisgICAg ICAgIHZzX3NjcmlwdF9saWJyYXJ5LnZzc2FwaS0+ZnJlZVNjcmlwdCh2c3MtPnZzcyk7CiAg ICAgfQogfQogCiBzdGF0aWMgYXZfY29sZCBpbnQgcmVhZF9jbG9zZV92cyhBVkZvcm1hdENv bnRleHQgKnMpCiB7Ci0gICAgVlNDb250ZXh0ICp2cyA9IHMtPnByaXZfZGF0YTsKKyAgICBW U0NvbnRleHQgKnZzOworCisgICAgaWYgKHZzX2F0ZXhpdF9jYWxsZWQpCisgICAgICAgIHJl dHVybiAwOworCisgICAgdnMgPSBzLT5wcml2X2RhdGE7CiAKICAgICBpZiAodnMtPm91dG5v ZGUpCiAgICAgICAgIHZzLT52c2FwaS0+ZnJlZU5vZGUodnMtPm91dG5vZGUpOwpAQCAtOTAs MTIgKzE2MywxNyBAQCBzdGF0aWMgYXZfY29sZCBpbnQgcmVhZF9jbG9zZV92cyhBVkZvcm1h dENvbnRleHQgKnMpCiAgICAgYXZfYnVmZmVyX3VucmVmKCZ2cy0+dnNzX3N0YXRlKTsKIAog ICAgIHZzLT52c2FwaSA9IE5VTEw7Ci0gICAgdnMtPnZzY29yZSA9IE5VTEw7CiAgICAgdnMt Pm91dG5vZGUgPSBOVUxMOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBhdl9jb2xk IHZvaWQgdnNfYXRleGl0X2hhbmRsZXIodm9pZCkKK3sKKyAgICBkbGNsb3NlKHZzX3Njcmlw dF9saWJyYXJ5LmxpYnJhcnkpOworICAgIHZzX2F0ZXhpdF9jYWxsZWQgPSAxOworfQorCiBz dGF0aWMgYXZfY29sZCBpbnQgaXNfbmF0aXZlX2VuZGlhbihlbnVtIEFWUGl4ZWxGb3JtYXQg cGl4Zm10KQogewogICAgIGVudW0gQVZQaXhlbEZvcm1hdCBvdGhlciA9IGF2X3BpeF9mbXRf c3dhcF9lbmRpYW5uZXNzKHBpeGZtdCk7CkBAIC0xMDYsNyArMTg0LDcgQEAgc3RhdGljIGF2 X2NvbGQgaW50IGlzX25hdGl2ZV9lbmRpYW4oZW51bSBBVlBpeGVsRm9ybWF0IHBpeGZtdCkK ICAgICByZXR1cm4gcGQgJiYgKCEhSEFWRV9CSUdFTkRJQU4gPT0gISEocGQtPmZsYWdzICYg QVZfUElYX0ZNVF9GTEFHX0JFKSk7CiB9CiAKLXN0YXRpYyBhdl9jb2xkIGVudW0gQVZQaXhl bEZvcm1hdCBtYXRjaF9waXhmbXQoY29uc3QgVlNGb3JtYXQgKnZzZiwgaW50IGNfb3JkZXJb NF0pCitzdGF0aWMgYXZfY29sZCBlbnVtIEFWUGl4ZWxGb3JtYXQgbWF0Y2hfcGl4Zm10KGNv bnN0IFZTVmlkZW9Gb3JtYXQgKnZzZiwgaW50IGNfb3JkZXJbNF0pCiB7CiAgICAgc3RhdGlj IGNvbnN0IGludCB5dXZfb3JkZXJbNF0gPSB7MCwgMSwgMiwgMH07CiAgICAgc3RhdGljIGNv bnN0IGludCByZ2Jfb3JkZXJbNF0gPSB7MSwgMiwgMCwgMH07CkBAIC0xMjgsMTMgKzIwNiwx MiBAQCBzdGF0aWMgYXZfY29sZCBlbnVtIEFWUGl4ZWxGb3JtYXQgbWF0Y2hfcGl4Zm10KGNv bnN0IFZTRm9ybWF0ICp2c2YsIGludCBjX29yZGVyWwogICAgICAgICAgICAgcGQtPmxvZzJf Y2hyb21hX2ggIT0gdnNmLT5zdWJTYW1wbGluZ0gpCiAgICAgICAgICAgICBjb250aW51ZTsK IAotICAgICAgICBpc19yZ2IgPSB2c2YtPmNvbG9yRmFtaWx5ID09IGNtUkdCOworICAgICAg ICBpc19yZ2IgPSB2c2YtPmNvbG9yRmFtaWx5ID09IGNmUkdCOwogICAgICAgICBpZiAoaXNf cmdiICE9ICEhKHBkLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpKQogICAgICAgICAg ICAgY29udGludWU7CiAKLSAgICAgICAgaXNfeXV2ID0gdnNmLT5jb2xvckZhbWlseSA9PSBj bVlVViB8fAotICAgICAgICAgICAgICAgICB2c2YtPmNvbG9yRmFtaWx5ID09IGNtWUNvQ2cg fHwKLSAgICAgICAgICAgICAgICAgdnNmLT5jb2xvckZhbWlseSA9PSBjbUdyYXk7CisgICAg ICAgIGlzX3l1diA9IHZzZi0+Y29sb3JGYW1pbHkgPT0gY2ZZVVYgfHwKKyAgICAgICAgICAg ICAgICAgdnNmLT5jb2xvckZhbWlseSA9PSBjZkdyYXk7CiAgICAgICAgIGlmICghaXNfcmdi ICYmICFpc195dXYpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTc2LDYgKzI1Myw3 IEBAIHN0YXRpYyBhdl9jb2xkIGludCByZWFkX2hlYWRlcl92cyhBVkZvcm1hdENvbnRleHQg KnMpCiAgICAgaW50NjRfdCBzeiA9IGF2aW9fc2l6ZShwYik7CiAgICAgY2hhciAqYnVmID0g TlVMTDsKICAgICBjaGFyIGR1bW15OworICAgIGNoYXIgdnNmbXRbMzJdOwogICAgIGNvbnN0 IFZTVmlkZW9JbmZvICppbmZvOwogICAgIHN0cnVjdCBWU1N0YXRlICp2c3Nfc3RhdGU7CiAg ICAgaW50IGVyciA9IDA7CkBAIC0xOTMsMTYgKzI3MSwzMCBAQCBzdGF0aWMgYXZfY29sZCBp bnQgcmVhZF9oZWFkZXJfdnMoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgICAgICBnb3RvIGRv bmU7CiAgICAgfQogCi0gICAgaWYgKCF2c3NjcmlwdF9pbml0KCkpIHsKLSAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFZTU2NyaXB0IChw b3NzaWJseSBQWVRIT05QQVRIIG5vdCBzZXQpLlxuIik7CisgICAgaWYgKGVyciA9IHZzX2xv YWRfbGlicmFyeSgpKSB7CisgICAgICAgIGlmIChlcnIgPT0gLTEpIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJDb3VsZCBub3Qgb3BlbiAiIFZTU0NSSVBUX0xJQgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi4gQ2hlY2sgVmFwb3VyU3ludGggaW5zdGFsbGF0aW9uLlxu Iik7CisgICAgICAgIGVsc2UgaWYgKGVyciA9PSAtMikgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2Fk IFZhcG91clN5bnRoIGxpYnJhcnkuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlZhcG91clN5bnRoIGluc3RhbGxhdGlvbiBtYXkgYmUgb3V0ZGF0ZWQgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3IgYnJva2VuLlxuIik7CisgICAg ICAgIGVsc2UgaWYgKGVyciA9PSAtMykgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbml0aWFsaXplIFZT U2NyaXB0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihwb3NzaWJs eSBQWVRIT05QQVRIIG5vdCBzZXQpLlxuIik7CiAgICAgICAgIGVyciA9IEFWRVJST1JfRVhU RVJOQUw7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBpZiAodnNzY3JpcHRf Y3JlYXRlU2NyaXB0KCZ2c3Nfc3RhdGUtPnZzcykpIHsKKyAgICBpZiAoISh2cy0+dnNhcGkg PSB2c19zY3JpcHRfbGlicmFyeS52c3NhcGktPmdldFZTQVBJKFZBUE9VUlNZTlRIX0FQSV9W RVJTSU9OKSkpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkNvdWxkIG5v dCBnZXQgVlNBUEkuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNr IFZhcG91clN5bnRoIGluc3RhbGxhdGlvbi5cbiIpOworICAgICAgICBlcnIgPSBBVkVSUk9S X0VYVEVSTkFMOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKCEodnNz X3N0YXRlLT52c3MgPSB2c19zY3JpcHRfbGlicmFyeS52c3NhcGktPmNyZWF0ZVNjcmlwdChO VUxMKSkpIHsKICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBj cmVhdGUgc2NyaXB0IGluc3RhbmNlLlxuIik7CiAgICAgICAgIGVyciA9IEFWRVJST1JfRVhU RVJOQUw7Ci0gICAgICAgIHZzc2NyaXB0X2ZpbmFsaXplKCk7CiAgICAgICAgIGdvdG8gZG9u ZTsKICAgICB9CiAKQEAgLTIzNSwxNyArMzI3LDE0IEBAIHN0YXRpYyBhdl9jb2xkIGludCBy ZWFkX2hlYWRlcl92cyhBVkZvcm1hdENvbnRleHQgKnMpCiAgICAgfQogCiAgICAgYnVmW3N6 XSA9ICdcMCc7Ci0gICAgaWYgKHZzc2NyaXB0X2V2YWx1YXRlU2NyaXB0KCZ2c3Nfc3RhdGUt PnZzcywgYnVmLCBzLT51cmwsIDApKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IHZz c2NyaXB0X2dldEVycm9yKHZzc19zdGF0ZS0+dnNzKTsKKyAgICBpZiAodnNfc2NyaXB0X2xp YnJhcnkudnNzYXBpLT5ldmFsdWF0ZUJ1ZmZlcih2c3Nfc3RhdGUtPnZzcywgYnVmLCBzLT51 cmwpKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IHZzX3NjcmlwdF9saWJyYXJ5LnZz c2FwaS0+Z2V0RXJyb3IodnNzX3N0YXRlLT52c3MpOwogICAgICAgICBhdl9sb2cocywgQVZf TE9HX0VSUk9SLCAiRmFpbGVkIHRvIHBhcnNlIHNjcmlwdDogJXNcbiIsIG1zZyA/IG1zZyA6 ICIodW5rbm93bikiKTsKICAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKICAgICAg ICAgZ290byBkb25lOwogICAgIH0KIAotICAgIHZzLT52c2FwaSA9IHZzc2NyaXB0X2dldFZT QXBpKCk7Ci0gICAgdnMtPnZzY29yZSA9IHZzc2NyaXB0X2dldENvcmUodnNzX3N0YXRlLT52 c3MpOwotCi0gICAgdnMtPm91dG5vZGUgPSB2c3NjcmlwdF9nZXRPdXRwdXQodnNzX3N0YXRl LT52c3MsIDApOworICAgIHZzLT5vdXRub2RlID0gdnNfc2NyaXB0X2xpYnJhcnkudnNzYXBp LT5nZXRPdXRwdXROb2RlKHZzc19zdGF0ZS0+dnNzLCAwKTsKICAgICBpZiAoIXZzLT5vdXRu b2RlKSB7CiAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb3VsZCBub3QgZ2V0 IHNjcmlwdCBvdXRwdXQgbm9kZS5cbiIpOwogICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVS TkFMOwpAQCAtMjYwLDcgKzM0OSw3IEBAIHN0YXRpYyBhdl9jb2xkIGludCByZWFkX2hlYWRl cl92cyhBVkZvcm1hdENvbnRleHQgKnMpCiAKICAgICBpbmZvID0gdnMtPnZzYXBpLT5nZXRW aWRlb0luZm8odnMtPm91dG5vZGUpOwogCi0gICAgaWYgKCFpbmZvLT5mb3JtYXQgfHwgIWlu Zm8tPndpZHRoIHx8ICFpbmZvLT5oZWlnaHQpIHsKKyAgICBpZiAoIWluZm8tPmZvcm1hdC5j b2xvckZhbWlseSB8fCAhaW5mby0+d2lkdGggfHwgIWluZm8tPmhlaWdodCkgewogICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiTm9uLWNvbnN0YW50IGlucHV0IGZvcm1hdCBu b3Qgc3VwcG9ydGVkLlxuIik7CiAgICAgICAgIGVyciA9IEFWRVJST1JfUEFUQ0hXRUxDT01F OwogICAgICAgICBnb3RvIGRvbmU7CkBAIC0yODAsMTggKzM2OSwyMiBAQCBzdGF0aWMgYXZf Y29sZCBpbnQgcmVhZF9oZWFkZXJfdnMoQVZGb3JtYXRDb250ZXh0ICpzKQogICAgIHN0LT5j b2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9XUkFQUEVEX0FWRlJBTUU7CiAgICAg c3QtPmNvZGVjcGFyLT53aWR0aCA9IGluZm8tPndpZHRoOwogICAgIHN0LT5jb2RlY3Bhci0+ aGVpZ2h0ID0gaW5mby0+aGVpZ2h0OwotICAgIHN0LT5jb2RlY3Bhci0+Zm9ybWF0ID0gbWF0 Y2hfcGl4Zm10KGluZm8tPmZvcm1hdCwgdnMtPmNfb3JkZXIpOworICAgIHN0LT5jb2RlY3Bh ci0+Zm9ybWF0ID0gbWF0Y2hfcGl4Zm10KCZpbmZvLT5mb3JtYXQsIHZzLT5jX29yZGVyKTsK IAogICAgIGlmIChzdC0+Y29kZWNwYXItPmZvcm1hdCA9PSBBVl9QSVhfRk1UX05PTkUpIHsK LSAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIFZTIHBpeGVs IGZvcm1hdCAlc1xuIiwgaW5mby0+Zm9ybWF0LT5uYW1lKTsKKyAgICAgICAgaWYodnMtPnZz YXBpLT5nZXRWaWRlb0Zvcm1hdE5hbWUoJmluZm8tPmZvcm1hdCwgdnNmbXQpKQorICAgICAg ICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIFZTIHBpeGVsIGZv cm1hdCAlc1xuIiwgdnNmbXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgVlMgcGl4ZWwgZm9ybWF0XG4iKTsKICAg ICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKICAgICAgICAgZ290byBkb25lOwogICAg IH0KLSAgICBhdl9sb2cocywgQVZfTE9HX1ZFUkJPU0UsICJWUyBmb3JtYXQgJXMgLT4gcGl4 Zm10ICVzXG4iLCBpbmZvLT5mb3JtYXQtPm5hbWUsCi0gICAgICAgICAgIGF2X2dldF9waXhf Zm10X25hbWUoc3QtPmNvZGVjcGFyLT5mb3JtYXQpKTsKLQotICAgIGlmIChpbmZvLT5mb3Jt YXQtPmNvbG9yRmFtaWx5ID09IGNtWUNvQ2cpCi0gICAgICAgIHN0LT5jb2RlY3Bhci0+Y29s b3Jfc3BhY2UgPSBBVkNPTF9TUENfWUNHQ087CisgICAgaWYgKHZzLT52c2FwaS0+Z2V0Vmlk ZW9Gb3JtYXROYW1lKCZpbmZvLT5mb3JtYXQsIHZzZm10KSkKKyAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19WRVJCT1NFLCAiVlMgZm9ybWF0ICVzIC0+IHBpeGZtdCAlc1xuIiwKKyAgICAg ICAgICAgICAgIHZzZm10LCBhdl9nZXRfcGl4X2ZtdF9uYW1lKHN0LT5jb2RlY3Bhci0+Zm9y bWF0KSk7CisgICAgZWxzZQorICAgICAgICBhdl9sb2cocywgQVZfTE9HX1ZFUkJPU0UsICJW UyBmb3JtYXQgLT4gcGl4Zm10ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9m bXRfbmFtZShzdC0+Y29kZWNwYXItPmZvcm1hdCkpOwogCiBkb25lOgogICAgIGF2X2ZyZWUo YnVmKTsKQEAgLTMxMSwxMyArNDA0LDEzIEBAIHN0YXRpYyBpbnQgZ2V0X3ZzX3Byb3BfaW50 KEFWRm9ybWF0Q29udGV4dCAqcywgY29uc3QgVlNNYXAgKm1hcCwgY29uc3QgY2hhciAqbmFt CiAgICAgaW50NjRfdCByZXM7CiAgICAgaW50IGVyciA9IDE7CiAKLSAgICByZXMgPSB2cy0+ dnNhcGktPnByb3BHZXRJbnQobWFwLCBuYW1lLCAwLCAmZXJyKTsKKyAgICByZXMgPSB2cy0+ dnNhcGktPm1hcEdldEludChtYXAsIG5hbWUsIDAsICZlcnIpOwogICAgIHJldHVybiBlcnIg fHwgcmVzIDwgSU5UX01JTiB8fCByZXMgPiBJTlRfTUFYID8gZGVmIDogcmVzOwogfQogCiBz dHJ1Y3QgdnNmcmFtZV9yZWZfZGF0YSB7CiAgICAgY29uc3QgVlNBUEkgKnZzYXBpOwotICAg IGNvbnN0IFZTRnJhbWVSZWYgKmZyYW1lOworICAgIGNvbnN0IFZTRnJhbWUgKmZyYW1lOwog ICAgIEFWQnVmZmVyUmVmICp2c3Nfc3RhdGU7CiB9OwogCkBAIC0zMzksNyArNDMyLDcgQEAg c3RhdGljIGludCByZWFkX3BhY2tldF92cyhBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0 ICpwa3QpCiAgICAgQVZTdHJlYW0gKnN0ID0gcy0+c3RyZWFtc1swXTsKICAgICBBVkZyYW1l ICpmcmFtZSA9IE5VTEw7CiAgICAgY2hhciB2c2Vycls4MF07Ci0gICAgY29uc3QgVlNGcmFt ZVJlZiAqdnNmcmFtZTsKKyAgICBjb25zdCBWU0ZyYW1lICp2c2ZyYW1lOwogICAgIGNvbnN0 IFZTVmlkZW9JbmZvICppbmZvID0gdnMtPnZzYXBpLT5nZXRWaWRlb0luZm8odnMtPm91dG5v ZGUpOwogICAgIGNvbnN0IFZTTWFwICpwcm9wczsKICAgICBjb25zdCBBVlBpeEZtdERlc2Ny aXB0b3IgKmRlc2M7CkBAIC0zODEsNyArNDc0LDcgQEAgc3RhdGljIGludCByZWFkX3BhY2tl dF92cyhBVkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QpCiAgICAgICAgIGdvdG8g ZW5kOwogICAgIH0KIAotICAgIHByb3BzID0gdnMtPnZzYXBpLT5nZXRGcmFtZVByb3BzUk8o dnNmcmFtZSk7CisgICAgcHJvcHMgPSB2cy0+dnNhcGktPmdldEZyYW1lUHJvcGVydGllc1JP KHZzZnJhbWUpOwogCiAgICAgZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpOwogICAgIGlmICgh ZnJhbWUpIHsKQEAgLTQxMCw3ICs1MDMsNyBAQCBzdGF0aWMgaW50IHJlYWRfcGFja2V0X3Zz KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKIAogICAgIGRlc2MgPSBhdl9w aXhfZm10X2Rlc2NfZ2V0KGZyYW1lLT5mb3JtYXQpOwogCi0gICAgZm9yIChpID0gMDsgaSA8 IGluZm8tPmZvcm1hdC0+bnVtUGxhbmVzOyBpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwg aW5mby0+Zm9ybWF0Lm51bVBsYW5lczsgaSsrKSB7CiAgICAgICAgIGludCBwID0gdnMtPmNf b3JkZXJbaV07CiAgICAgICAgIHB0cmRpZmZfdCBwbGFuZV9oID0gZnJhbWUtPmhlaWdodDsK IApkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdmFwb3Vyc3ludGguaCBiL2xpYmF2Zm9ybWF0 L3ZhcG91cnN5bnRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u NWI1YmIyNzZlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L3ZhcG91cnN5bnRo LmgKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisq IEBmaWxlCisqIFZhcG91clN5bnRoIGhlYWRlcnMKKyoKKyogQ29udGFpbnMgdGhlIHR3byBu ZWVkZWQgaGVhZGVyIGZpbGVzIHRha2VuIGZyb20gVmFwb3VyU3ludGguCisqLworCisKKwor LyogVmFwb3VyU3ludGg0LmggKi8KKy8qCisqIENvcHlyaWdodCAoYykgMjAxMi0yMDIxIEZy ZWRyaWsgTWVsbGJpbgorKgorKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBWYXBvdXJTeW50aC4K KyoKKyogVmFwb3VyU3ludGggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKgorKiBW YXBvdXJTeW50aCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKiBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisqIExp Y2Vuc2UgYWxvbmcgd2l0aCBWYXBvdXJTeW50aDsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisqLworCisjaWZuZGVmIFZB UE9VUlNZTlRINF9ICisjZGVmaW5lIFZBUE9VUlNZTlRINF9ICisKKyNpbmNsdWRlIDxzdGRp bnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2RlZmluZSBWU19NQUtFX1ZFUlNJT04o bWFqb3IsIG1pbm9yKSAoKChtYWpvcikgPDwgMTYpIHwgKG1pbm9yKSkKKyNkZWZpbmUgVkFQ T1VSU1lOVEhfQVBJX01BSk9SIDQKKyNpZiBkZWZpbmVkKFZTX1VTRV9MQVRFU1RfQVBJKSB8 fCBkZWZpbmVkKFZTX1VTRV9BUElfNDEpCisjZGVmaW5lIFZBUE9VUlNZTlRIX0FQSV9NSU5P UiAxCisjZWxzZQorI2RlZmluZSBWQVBPVVJTWU5USF9BUElfTUlOT1IgMAorI2VuZGlmCisj ZGVmaW5lIFZBUE9VUlNZTlRIX0FQSV9WRVJTSU9OIFZTX01BS0VfVkVSU0lPTihWQVBPVVJT WU5USF9BUElfTUFKT1IsIFZBUE9VUlNZTlRIX0FQSV9NSU5PUikKKworI2RlZmluZSBWU19B VURJT19GUkFNRV9TQU1QTEVTIDMwNzIKKworLyogQ29udmVuaWVuY2UgZm9yIEMrKyB1c2Vy cy4gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgVlNfRVhURVJOX0MgZXh0 ZXJuICJDIgorIyAgICBpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMIHx8IChkZWZpbmVkKF9N U1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPj0gMjAxMTAzTCkKKyMgICAgICAgIGRlZmluZSBW U19OT0VYQ0VQVCBub2V4Y2VwdAorIyAgICBlbHNlCisjICAgICAgICBkZWZpbmUgVlNfTk9F WENFUFQKKyMgICAgZW5kaWYKKyNlbHNlCisjICAgIGRlZmluZSBWU19FWFRFUk5fQworIyAg ICBkZWZpbmUgVlNfTk9FWENFUFQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYm ICFkZWZpbmVkKF9XSU42NCkKKyMgICAgZGVmaW5lIFZTX0NDIF9fc3RkY2FsbAorI2Vsc2UK KyMgICAgZGVmaW5lIFZTX0NDCisjZW5kaWYKKworLyogQW5kIG5vdyBmb3Igc29tZSBzeW1i b2wgaGlkZS1hbmQtc2Vlay4uLiAqLworI2lmIGRlZmluZWQoX1dJTjMyKSAvKiBXaW5kb3dz IGJlaW5nIHNwZWNpYWwgKi8KKyMgICAgZGVmaW5lIFZTX0VYVEVSTkFMX0FQSShyZXQpIFZT X0VYVEVSTl9DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSByZXQgVlNfQ0MKKyNlbGlmIGRlZmlu ZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDQKKyMgICAgZGVmaW5lIFZTX0VYVEVSTkFM X0FQSShyZXQpIFZTX0VYVEVSTl9DIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1 bHQiKSkpIHJldCBWU19DQworI2Vsc2UKKyMgICAgZGVmaW5lIFZTX0VYVEVSTkFMX0FQSShy ZXQpIFZTX0VYVEVSTl9DIHJldCBWU19DQworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChWU19D T1JFX0VYUE9SVFMpICYmIGRlZmluZWQoX1dJTjMyKQorIyAgICBkZWZpbmUgVlNfQVBJKHJl dCkgVlNfRVhURVJOX0MgX19kZWNsc3BlYyhkbGxpbXBvcnQpIHJldCBWU19DQworI2Vsc2UK KyMgICAgZGVmaW5lIFZTX0FQSShyZXQpIFZTX0VYVEVSTkFMX0FQSShyZXQpCisjZW5kaWYK KwordHlwZWRlZiBzdHJ1Y3QgVlNGcmFtZSBWU0ZyYW1lOwordHlwZWRlZiBzdHJ1Y3QgVlNO b2RlIFZTTm9kZTsKK3R5cGVkZWYgc3RydWN0IFZTQ29yZSBWU0NvcmU7Cit0eXBlZGVmIHN0 cnVjdCBWU1BsdWdpbiBWU1BsdWdpbjsKK3R5cGVkZWYgc3RydWN0IFZTUGx1Z2luRnVuY3Rp b24gVlNQbHVnaW5GdW5jdGlvbjsKK3R5cGVkZWYgc3RydWN0IFZTRnVuY3Rpb24gVlNGdW5j dGlvbjsKK3R5cGVkZWYgc3RydWN0IFZTTWFwIFZTTWFwOwordHlwZWRlZiBzdHJ1Y3QgVlNM b2dIYW5kbGUgVlNMb2dIYW5kbGU7Cit0eXBlZGVmIHN0cnVjdCBWU0ZyYW1lQ29udGV4dCBW U0ZyYW1lQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IFZTUExVR0lOQVBJIFZTUExVR0lOQVBJ OwordHlwZWRlZiBzdHJ1Y3QgVlNBUEkgVlNBUEk7CisKK3R5cGVkZWYgZW51bSBWU0NvbG9y RmFtaWx5IHsKKyAgICBjZlVuZGVmaW5lZCA9IDAsCisgICAgY2ZHcmF5ICAgICAgPSAxLAor ICAgIGNmUkdCICAgICAgID0gMiwKKyAgICBjZllVViAgICAgICA9IDMKK30gVlNDb2xvckZh bWlseTsKKwordHlwZWRlZiBlbnVtIFZTU2FtcGxlVHlwZSB7CisgICAgc3RJbnRlZ2VyID0g MCwKKyAgICBzdEZsb2F0ID0gMQorfSBWU1NhbXBsZVR5cGU7CisKKyNkZWZpbmUgVlNfTUFL RV9WSURFT19JRChjb2xvckZhbWlseSwgc2FtcGxlVHlwZSwgYml0c1BlclNhbXBsZSwgc3Vi U2FtcGxpbmdXLCBzdWJTYW1wbGluZ0gpICgoY29sb3JGYW1pbHkgPDwgMjgpIHwgKHNhbXBs ZVR5cGUgPDwgMjQpIHwgKGJpdHNQZXJTYW1wbGUgPDwgMTYpIHwgKHN1YlNhbXBsaW5nVyA8 PCA4KSB8IChzdWJTYW1wbGluZ0ggPDwgMCkpCisKK3R5cGVkZWYgZW51bSBWU1ByZXNldFZp ZGVvRm9ybWF0IHsKKyAgICBwZk5vbmUgPSAwLAorCisgICAgcGZHcmF5OCA9IFZTX01BS0Vf VklERU9fSUQoY2ZHcmF5LCBzdEludGVnZXIsIDgsIDAsIDApLAorICAgIHBmR3JheTkgPSBW U19NQUtFX1ZJREVPX0lEKGNmR3JheSwgc3RJbnRlZ2VyLCA5LCAwLCAwKSwKKyAgICBwZkdy YXkxMCA9IFZTX01BS0VfVklERU9fSUQoY2ZHcmF5LCBzdEludGVnZXIsIDEwLCAwLCAwKSwK KyAgICBwZkdyYXkxMiA9IFZTX01BS0VfVklERU9fSUQoY2ZHcmF5LCBzdEludGVnZXIsIDEy LCAwLCAwKSwKKyAgICBwZkdyYXkxNCA9IFZTX01BS0VfVklERU9fSUQoY2ZHcmF5LCBzdElu dGVnZXIsIDE0LCAwLCAwKSwKKyAgICBwZkdyYXkxNiA9IFZTX01BS0VfVklERU9fSUQoY2ZH cmF5LCBzdEludGVnZXIsIDE2LCAwLCAwKSwKKyAgICBwZkdyYXkzMiA9IFZTX01BS0VfVklE RU9fSUQoY2ZHcmF5LCBzdEludGVnZXIsIDMyLCAwLCAwKSwKKworICAgIHBmR3JheUggPSBW U19NQUtFX1ZJREVPX0lEKGNmR3JheSwgc3RGbG9hdCwgMTYsIDAsIDApLAorICAgIHBmR3Jh eVMgPSBWU19NQUtFX1ZJREVPX0lEKGNmR3JheSwgc3RGbG9hdCwgMzIsIDAsIDApLAorCisg ICAgcGZZVVY0MTBQOCA9IFZTX01BS0VfVklERU9fSUQoY2ZZVVYsIHN0SW50ZWdlciwgOCwg MiwgMiksCisgICAgcGZZVVY0MTFQOCA9IFZTX01BS0VfVklERU9fSUQoY2ZZVVYsIHN0SW50 ZWdlciwgOCwgMiwgMCksCisgICAgcGZZVVY0NDBQOCA9IFZTX01BS0VfVklERU9fSUQoY2ZZ VVYsIHN0SW50ZWdlciwgOCwgMCwgMSksCisKKyAgICBwZllVVjQyMFA4ID0gVlNfTUFLRV9W SURFT19JRChjZllVViwgc3RJbnRlZ2VyLCA4LCAxLCAxKSwKKyAgICBwZllVVjQyMlA4ID0g VlNfTUFLRV9WSURFT19JRChjZllVViwgc3RJbnRlZ2VyLCA4LCAxLCAwKSwKKyAgICBwZllV VjQ0NFA4ID0gVlNfTUFLRV9WSURFT19JRChjZllVViwgc3RJbnRlZ2VyLCA4LCAwLCAwKSwK KworICAgIHBmWVVWNDIwUDkgPSBWU19NQUtFX1ZJREVPX0lEKGNmWVVWLCBzdEludGVnZXIs IDksIDEsIDEpLAorICAgIHBmWVVWNDIyUDkgPSBWU19NQUtFX1ZJREVPX0lEKGNmWVVWLCBz dEludGVnZXIsIDksIDEsIDApLAorICAgIHBmWVVWNDQ0UDkgPSBWU19NQUtFX1ZJREVPX0lE KGNmWVVWLCBzdEludGVnZXIsIDksIDAsIDApLAorCisgICAgcGZZVVY0MjBQMTAgPSBWU19N QUtFX1ZJREVPX0lEKGNmWVVWLCBzdEludGVnZXIsIDEwLCAxLCAxKSwKKyAgICBwZllVVjQy MlAxMCA9IFZTX01BS0VfVklERU9fSUQoY2ZZVVYsIHN0SW50ZWdlciwgMTAsIDEsIDApLAor ICAgIHBmWVVWNDQ0UDEwID0gVlNfTUFLRV9WSURFT19JRChjZllVViwgc3RJbnRlZ2VyLCAx MCwgMCwgMCksCisKKyAgICBwZllVVjQyMFAxMiA9IFZTX01BS0VfVklERU9fSUQoY2ZZVVYs IHN0SW50ZWdlciwgMTIsIDEsIDEpLAorICAgIHBmWVVWNDIyUDEyID0gVlNfTUFLRV9WSURF T19JRChjZllVViwgc3RJbnRlZ2VyLCAxMiwgMSwgMCksCisgICAgcGZZVVY0NDRQMTIgPSBW U19NQUtFX1ZJREVPX0lEKGNmWVVWLCBzdEludGVnZXIsIDEyLCAwLCAwKSwKKworICAgIHBm WVVWNDIwUDE0ID0gVlNfTUFLRV9WSURFT19JRChjZllVViwgc3RJbnRlZ2VyLCAxNCwgMSwg MSksCisgICAgcGZZVVY0MjJQMTQgPSBWU19NQUtFX1ZJREVPX0lEKGNmWVVWLCBzdEludGVn ZXIsIDE0LCAxLCAwKSwKKyAgICBwZllVVjQ0NFAxNCA9IFZTX01BS0VfVklERU9fSUQoY2ZZ VVYsIHN0SW50ZWdlciwgMTQsIDAsIDApLAorCisgICAgcGZZVVY0MjBQMTYgPSBWU19NQUtF X1ZJREVPX0lEKGNmWVVWLCBzdEludGVnZXIsIDE2LCAxLCAxKSwKKyAgICBwZllVVjQyMlAx NiA9IFZTX01BS0VfVklERU9fSUQoY2ZZVVYsIHN0SW50ZWdlciwgMTYsIDEsIDApLAorICAg IHBmWVVWNDQ0UDE2ID0gVlNfTUFLRV9WSURFT19JRChjZllVViwgc3RJbnRlZ2VyLCAxNiwg MCwgMCksCisKKyAgICBwZllVVjQ0NFBIID0gVlNfTUFLRV9WSURFT19JRChjZllVViwgc3RG bG9hdCwgMTYsIDAsIDApLAorICAgIHBmWVVWNDQ0UFMgPSBWU19NQUtFX1ZJREVPX0lEKGNm WVVWLCBzdEZsb2F0LCAzMiwgMCwgMCksCisKKyAgICBwZlJHQjI0ID0gVlNfTUFLRV9WSURF T19JRChjZlJHQiwgc3RJbnRlZ2VyLCA4LCAwLCAwKSwKKyAgICBwZlJHQjI3ID0gVlNfTUFL RV9WSURFT19JRChjZlJHQiwgc3RJbnRlZ2VyLCA5LCAwLCAwKSwKKyAgICBwZlJHQjMwID0g VlNfTUFLRV9WSURFT19JRChjZlJHQiwgc3RJbnRlZ2VyLCAxMCwgMCwgMCksCisgICAgcGZS R0IzNiA9IFZTX01BS0VfVklERU9fSUQoY2ZSR0IsIHN0SW50ZWdlciwgMTIsIDAsIDApLAor ICAgIHBmUkdCNDIgPSBWU19NQUtFX1ZJREVPX0lEKGNmUkdCLCBzdEludGVnZXIsIDE0LCAw LCAwKSwKKyAgICBwZlJHQjQ4ID0gVlNfTUFLRV9WSURFT19JRChjZlJHQiwgc3RJbnRlZ2Vy LCAxNiwgMCwgMCksCisKKyAgICBwZlJHQkggPSBWU19NQUtFX1ZJREVPX0lEKGNmUkdCLCBz dEZsb2F0LCAxNiwgMCwgMCksCisgICAgcGZSR0JTID0gVlNfTUFLRV9WSURFT19JRChjZlJH Qiwgc3RGbG9hdCwgMzIsIDAsIDApLAorfSBWU1ByZXNldFZpZGVvRm9ybWF0OworCisjdW5k ZWYgVlNfTUFLRV9WSURFT19JRAorCisKK3R5cGVkZWYgZW51bSBWU0ZpbHRlck1vZGUgewor ICAgIGZtUGFyYWxsZWwgPSAwLCAvKiBjb21wbGV0ZWx5IHBhcmFsbGVsIGV4ZWN1dGlvbiAq LworICAgIGZtUGFyYWxsZWxSZXF1ZXN0cyA9IDEsIC8qIGZvciBmaWx0ZXJzIHRoYXQgYXJl IHNlcmlhbCBpbiBuYXR1cmUgYnV0IGNhbiByZXF1ZXN0IG9uZSBvciBtb3JlIGZyYW1lcyB0 aGV5IG5lZWQgaW4gYWR2YW5jZSAqLworICAgIGZtVW5vcmRlcmVkID0gMiwgLyogZm9yIGZp bHRlcnMgdGhhdCBtb2RpZnkgdGhlaXIgaW50ZXJuYWwgc3RhdGUgZXZlcnkgcmVxdWVzdCBs aWtlIHNvdXJjZSBmaWx0ZXJzIHRoYXQgcmVhZCBhIGZpbGUgKi8KKyAgICBmbUZyYW1lU3Rh dGUgPSAzIC8qIERPIE5PVCBVU0UgVU5MRVNTIEFCU09MVVRFTFkgTkVDRVNTQVJZLCBmb3Ig Y29tcGF0aWJpbGl0eSB3aXRoIGV4dGVybmFsIGNvZGUgdGhhdCBjYW4gb25seSBrZWVwIHRo ZSBwcm9jZXNzaW5nIHN0YXRlIG9mIGEgc2luZ2xlIGZyYW1lIGF0IGEgdGltZSAqLworfSBW U0ZpbHRlck1vZGU7CisKK3R5cGVkZWYgZW51bSBWU01lZGlhVHlwZSB7CisgICAgbXRWaWRl byA9IDEsCisgICAgbXRBdWRpbyA9IDIKK30gVlNNZWRpYVR5cGU7CisKK3R5cGVkZWYgc3Ry dWN0IFZTVmlkZW9Gb3JtYXQgeworICAgIGludCBjb2xvckZhbWlseTsgLyogc2VlIFZTQ29s b3JGYW1pbHkgKi8KKyAgICBpbnQgc2FtcGxlVHlwZTsgLyogc2VlIFZTU2FtcGxlVHlwZSAq LworICAgIGludCBiaXRzUGVyU2FtcGxlOyAvKiBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0 cyAqLworICAgIGludCBieXRlc1BlclNhbXBsZTsgLyogYWN0dWFsIHN0b3JhZ2UgaXMgYWx3 YXlzIGluIGEgcG93ZXIgb2YgMiBhbmQgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHRoYXQgY2Fu IGZpdCB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBwZXIgc2FtcGxlICovCisKKyAgICBpbnQg c3ViU2FtcGxpbmdXOyAvKiBsb2cyIHN1YnNhbXBsaW5nIGZhY3RvciwgYXBwbGllZCB0byBz ZWNvbmQgYW5kIHRoaXJkIHBsYW5lICovCisgICAgaW50IHN1YlNhbXBsaW5nSDsgLyogbG9n MiBzdWJzYW1wbGluZyBmYWN0b3IsIGFwcGxpZWQgdG8gc2Vjb25kIGFuZCB0aGlyZCBwbGFu ZSAqLworCisgICAgaW50IG51bVBsYW5lczsgLyogaW1wbGljaXQgZnJvbSBjb2xvckZhbWls eSAqLworfSBWU1ZpZGVvRm9ybWF0OworCit0eXBlZGVmIGVudW0gVlNBdWRpb0NoYW5uZWxz IHsKKyAgICBhY0Zyb250TGVmdCAgICAgICAgICAgPSAwLAorICAgIGFjRnJvbnRSaWdodCAg ICAgICAgICA9IDEsCisgICAgYWNGcm9udENlbnRlciAgICAgICAgID0gMiwKKyAgICBhY0xv d0ZyZXF1ZW5jeSAgICAgICAgPSAzLAorICAgIGFjQmFja0xlZnQgICAgICAgICAgICA9IDQs CisgICAgYWNCYWNrUmlnaHQgICAgICAgICAgID0gNSwKKyAgICBhY0Zyb250TGVmdE9GQ2Vu dGVyICAgPSA2LAorICAgIGFjRnJvbnRSaWdodE9GQ2VudGVyICA9IDcsCisgICAgYWNCYWNr Q2VudGVyICAgICAgICAgID0gOCwKKyAgICBhY1NpZGVMZWZ0ICAgICAgICAgICAgPSA5LAor ICAgIGFjU2lkZVJpZ2h0ICAgICAgICAgICA9IDEwLAorICAgIGFjVG9wQ2VudGVyICAgICAg ICAgICA9IDExLAorICAgIGFjVG9wRnJvbnRMZWZ0ICAgICAgICA9IDEyLAorICAgIGFjVG9w RnJvbnRDZW50ZXIgICAgICA9IDEzLAorICAgIGFjVG9wRnJvbnRSaWdodCAgICAgICA9IDE0 LAorICAgIGFjVG9wQmFja0xlZnQgICAgICAgICA9IDE1LAorICAgIGFjVG9wQmFja0NlbnRl ciAgICAgICA9IDE2LAorICAgIGFjVG9wQmFja1JpZ2h0ICAgICAgICA9IDE3LAorICAgIGFj U3RlcmVvTGVmdCAgICAgICAgICA9IDI5LAorICAgIGFjU3RlcmVvUmlnaHQgICAgICAgICA9 IDMwLAorICAgIGFjV2lkZUxlZnQgICAgICAgICAgICA9IDMxLAorICAgIGFjV2lkZVJpZ2h0 ICAgICAgICAgICA9IDMyLAorICAgIGFjU3Vycm91bmREaXJlY3RMZWZ0ICA9IDMzLAorICAg IGFjU3Vycm91bmREaXJlY3RSaWdodCA9IDM0LAorICAgIGFjTG93RnJlcXVlbmN5MiAgICAg ICA9IDM1Cit9IFZTQXVkaW9DaGFubmVsczsKKwordHlwZWRlZiBzdHJ1Y3QgVlNBdWRpb0Zv cm1hdCB7CisgICAgaW50IHNhbXBsZVR5cGU7CisgICAgaW50IGJpdHNQZXJTYW1wbGU7Cisg ICAgaW50IGJ5dGVzUGVyU2FtcGxlOyAvKiBpbXBsaWNpdCBmcm9tIGJpdHNQZXJTYW1wbGUg Ki8KKyAgICBpbnQgbnVtQ2hhbm5lbHM7IC8qIGltcGxpY2l0IGZyb20gY2hhbm5lbExheW91 dCAqLworICAgIHVpbnQ2NF90IGNoYW5uZWxMYXlvdXQ7Cit9IFZTQXVkaW9Gb3JtYXQ7CisK K3R5cGVkZWYgZW51bSBWU1Byb3BlcnR5VHlwZSB7CisgICAgcHRVbnNldCA9IDAsCisgICAg cHRJbnQgPSAxLAorICAgIHB0RmxvYXQgPSAyLAorICAgIHB0RGF0YSA9IDMsCisgICAgcHRG dW5jdGlvbiA9IDQsCisgICAgcHRWaWRlb05vZGUgPSA1LAorICAgIHB0QXVkaW9Ob2RlID0g NiwKKyAgICBwdFZpZGVvRnJhbWUgPSA3LAorICAgIHB0QXVkaW9GcmFtZSA9IDgKK30gVlNQ cm9wZXJ0eVR5cGU7CisKK3R5cGVkZWYgZW51bSBWU01hcFByb3BlcnR5RXJyb3IgeworICAg IHBlU3VjY2VzcyA9IDAsCisgICAgcGVVbnNldCAgID0gMSwgLyogbm8ga2V5IGV4aXN0cyAq LworICAgIHBlVHlwZSAgICA9IDIsIC8qIGtleSBleGlzdHMgYnV0IG5vdCBvZiBhIGNvbXBh dGlibGUgdHlwZSAqLworICAgIHBlSW5kZXggICA9IDQsIC8qIGluZGV4IG91dCBvZiBib3Vu ZHMgKi8KKyAgICBwZUVycm9yICAgPSAzICAvKiBtYXAgaGFzIGVycm9yIHN0YXRlIHNldCAq LworfSBWU01hcFByb3BlcnR5RXJyb3I7CisKK3R5cGVkZWYgZW51bSBWU01hcEFwcGVuZE1v ZGUgeworICAgIG1hUmVwbGFjZSA9IDAsCisgICAgbWFBcHBlbmQgID0gMQorfSBWU01hcEFw cGVuZE1vZGU7CisKK3R5cGVkZWYgc3RydWN0IFZTQ29yZUluZm8geworICAgIGNvbnN0IGNo YXIgKnZlcnNpb25TdHJpbmc7CisgICAgaW50IGNvcmU7CisgICAgaW50IGFwaTsKKyAgICBp bnQgbnVtVGhyZWFkczsKKyAgICBpbnQ2NF90IG1heEZyYW1lYnVmZmVyU2l6ZTsKKyAgICBp bnQ2NF90IHVzZWRGcmFtZWJ1ZmZlclNpemU7Cit9IFZTQ29yZUluZm87CisKK3R5cGVkZWYg c3RydWN0IFZTVmlkZW9JbmZvIHsKKyAgICBWU1ZpZGVvRm9ybWF0IGZvcm1hdDsKKyAgICBp bnQ2NF90IGZwc051bTsKKyAgICBpbnQ2NF90IGZwc0RlbjsKKyAgICBpbnQgd2lkdGg7Cisg ICAgaW50IGhlaWdodDsKKyAgICBpbnQgbnVtRnJhbWVzOworfSBWU1ZpZGVvSW5mbzsKKwor dHlwZWRlZiBzdHJ1Y3QgVlNBdWRpb0luZm8geworICAgIFZTQXVkaW9Gb3JtYXQgZm9ybWF0 OworICAgIGludCBzYW1wbGVSYXRlOworICAgIGludDY0X3QgbnVtU2FtcGxlczsKKyAgICBp bnQgbnVtRnJhbWVzOyAvKiB0aGUgdG90YWwgbnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBuZWVk ZWQgdG8gaG9sZCBudW1TYW1wbGVzLCBpbXBsaWNpdCBmcm9tIG51bVNhbXBsZXMgd2hlbiBj YWxsaW5nIGNyZWF0ZUF1ZGlvRmlsdGVyICovCit9IFZTQXVkaW9JbmZvOworCit0eXBlZGVm IGVudW0gVlNBY3RpdmF0aW9uUmVhc29uIHsKKyAgICBhckluaXRpYWwgPSAwLAorICAgIGFy QWxsRnJhbWVzUmVhZHkgPSAxLAorICAgIGFyRXJyb3IgPSAtMQorfSBWU0FjdGl2YXRpb25S ZWFzb247CisKK3R5cGVkZWYgZW51bSBWU01lc3NhZ2VUeXBlIHsKKyAgICBtdERlYnVnID0g MCwKKyAgICBtdEluZm9ybWF0aW9uID0gMSwgCisgICAgbXRXYXJuaW5nID0gMiwKKyAgICBt dENyaXRpY2FsID0gMywKKyAgICBtdEZhdGFsID0gNCAvKiBhbHNvIHRlcm1pbmF0ZXMgdGhl IHByb2Nlc3MsIHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIHVzZWQgYnkgbm9ybWFsIGZpbHRl cnMgKi8KK30gVlNNZXNzYWdlVHlwZTsKKwordHlwZWRlZiBlbnVtIFZTQ29yZUNyZWF0aW9u RmxhZ3MgeworICAgIGNjZkVuYWJsZUdyYXBoSW5zcGVjdGlvbiA9IDEsCisgICAgY2NmRGlz YWJsZUF1dG9Mb2FkaW5nID0gMiwKKyAgICBjY2ZEaXNhYmxlTGlicmFyeVVubG9hZGluZyA9 IDQKK30gVlNDb3JlQ3JlYXRpb25GbGFnczsKKwordHlwZWRlZiBlbnVtIFZTUGx1Z2luQ29u ZmlnRmxhZ3MgeworICAgIHBjTW9kaWZpYWJsZSA9IDEKK30gVlNQbHVnaW5Db25maWdGbGFn czsKKwordHlwZWRlZiBlbnVtIFZTRGF0YVR5cGVIaW50IHsKKyAgICBkdFVua25vd24gPSAt MSwKKyAgICBkdEJpbmFyeSA9IDAsCisgICAgZHRVdGY4ID0gMQorfSBWU0RhdGFUeXBlSGlu dDsKKwordHlwZWRlZiBlbnVtIFZTUmVxdWVzdFBhdHRlcm4geworICAgIHJwR2VuZXJhbCA9 IDAsIC8qIEdlbmVyYWwgcGF0dGVybiAqLworICAgIHJwTm9GcmFtZVJldXNlID0gMSwgLyog V2hlbiByZXF1ZXN0aW5nIGFsbCBvdXRwdXQgZnJhbWVzIGZyb20gdGhlIGZpbHRlciBubyBm cmFtZSB3aWxsIGJlIHJlcXVlc3RlZCBtb3JlIHRoYW4gb25jZSBmcm9tIHRoaXMgaW5wdXQg Y2xpcCwgbmV2ZXIgcmVxdWVzdHMgZnJhbWVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBjbGlw ICovCisgICAgcnBTdHJpY3RTcGF0aWFsID0gMiAvKiBBbHdheXMgKGFuZCBvbmx5KSByZXF1 ZXN0cyBmcmFtZSBuIGZyb20gdGhlIGlucHV0IGNsaXAgd2hlbiBnZW5lcmF0aW5nIG91dHB1 dCBmcmFtZSBuLCBuZXZlciByZXF1ZXN0cyBmcmFtZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhl IGNsaXAgKi8KKyNpZiBWQVBPVVJTWU5USF9BUElfTUlOT1IgPj0gMSAgIAorICAgICwKKyAg ICBycEZyYW1lUmV1c2VMYXN0T25seSA9IDMgLyogQWRkZWQgaW4gQVBJIDQuMSwgVGhpcyBt b2RlcyBpcyBiYXNpY2FsbHkgaWRlbnRpY2FsIHJwTm9GcmFtZVJldXNlIGV4Y2VwdCB0aGF0 IGl0IGhpbnRzIHRoZSBsYXN0IGZyYW1lIG1heSBiZSByZXF1ZXN0ZWQgbXVsdGlwbGUgdGlt ZXMgKi8KKyNlbmRpZgorfSBWU1JlcXVlc3RQYXR0ZXJuOworCit0eXBlZGVmIGVudW0gVlND YWNoZU1vZGUgeworICAgIGNtQXV0byA9IC0xLAorICAgIGNtRm9yY2VEaXNhYmxlID0gMCwK KyAgICBjbUZvcmNlRW5hYmxlID0gMQorfSBWU0NhY2hlTW9kZTsKKworLyogQ29yZSBlbnRy eSBwb2ludCAqLwordHlwZWRlZiBjb25zdCBWU0FQSSAqKFZTX0NDICpWU0dldFZhcG91clN5 bnRoQVBJKShpbnQgdmVyc2lvbik7CisKKy8qIFBsdWdpbiwgZnVuY3Rpb24gYW5kIGZpbHRl ciByZWxhdGVkICovCit0eXBlZGVmIHZvaWQgKFZTX0NDICpWU1B1YmxpY0Z1bmN0aW9uKShj b25zdCBWU01hcCAqaW4sIFZTTWFwICpvdXQsIHZvaWQgKnVzZXJEYXRhLCBWU0NvcmUgKmNv cmUsIGNvbnN0IFZTQVBJICp2c2FwaSk7Cit0eXBlZGVmIHZvaWQgKFZTX0NDICpWU0luaXRQ bHVnaW4pKFZTUGx1Z2luICpwbHVnaW4sIGNvbnN0IFZTUExVR0lOQVBJICp2c3BhcGkpOwor dHlwZWRlZiB2b2lkIChWU19DQyAqVlNGcmVlRnVuY3Rpb25EYXRhKSh2b2lkICp1c2VyRGF0 YSk7Cit0eXBlZGVmIGNvbnN0IFZTRnJhbWUgKihWU19DQyAqVlNGaWx0ZXJHZXRGcmFtZSko aW50IG4sIGludCBhY3RpdmF0aW9uUmVhc29uLCB2b2lkICppbnN0YW5jZURhdGEsIHZvaWQg KipmcmFtZURhdGEsIFZTRnJhbWVDb250ZXh0ICpmcmFtZUN0eCwgVlNDb3JlICpjb3JlLCBj b25zdCBWU0FQSSAqdnNhcGkpOwordHlwZWRlZiB2b2lkIChWU19DQyAqVlNGaWx0ZXJGcmVl KSh2b2lkICppbnN0YW5jZURhdGEsIFZTQ29yZSAqY29yZSwgY29uc3QgVlNBUEkgKnZzYXBp KTsKKworLyogT3RoZXIgKi8KK3R5cGVkZWYgdm9pZCAoVlNfQ0MgKlZTRnJhbWVEb25lQ2Fs bGJhY2spKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBWU0ZyYW1lICpmLCBpbnQgbiwgVlNOb2Rl ICpub2RlLCBjb25zdCBjaGFyICplcnJvck1zZyk7Cit0eXBlZGVmIHZvaWQgKFZTX0NDICpW U0xvZ0hhbmRsZXIpKGludCBtc2dUeXBlLCBjb25zdCBjaGFyICptc2csIHZvaWQgKnVzZXJE YXRhKTsKK3R5cGVkZWYgdm9pZCAoVlNfQ0MgKlZTTG9nSGFuZGxlckZyZWUpKHZvaWQgKnVz ZXJEYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgVlNQTFVHSU5BUEkgeworICAgIGludCAoVlNf Q0MgKmdldEFQSVZlcnNpb24pKHZvaWQpIFZTX05PRVhDRVBUOyAvKiByZXR1cm5zIFZBUE9V UlNZTlRIX0FQSV9WRVJTSU9OIG9mIHRoZSBsaWJyYXJ5ICovCisgICAgaW50IChWU19DQyAq Y29uZmlnUGx1Z2luKShjb25zdCBjaGFyICppZGVudGlmaWVyLCBjb25zdCBjaGFyICpwbHVn aW5OYW1lc3BhY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBwbHVnaW5WZXJzaW9uLCBpbnQg YXBpVmVyc2lvbiwgaW50IGZsYWdzLCBWU1BsdWdpbiAqcGx1Z2luKSBWU19OT0VYQ0VQVDsg LyogdXNlIHRoZSBWU19NQUtFX1ZFUlNJT04gbWFjcm8gZm9yIHBsdWdpblZlcnNpb24gKi8K KyAgICBpbnQgKFZTX0NDICpyZWdpc3RlckZ1bmN0aW9uKShjb25zdCBjaGFyICpuYW1lLCBj b25zdCBjaGFyICphcmdzLCBjb25zdCBjaGFyICpyZXR1cm5UeXBlLCBWU1B1YmxpY0Z1bmN0 aW9uIGFyZ3NGdW5jLCB2b2lkICpmdW5jdGlvbkRhdGEsIFZTUGx1Z2luICpwbHVnaW4pIFZT X05PRVhDRVBUOyAvKiBub24temVybyByZXR1cm4gdmFsdWUgb24gc3VjY2VzcyAgKi8KK30g VlNQTFVHSU5BUEk7CisKK3R5cGVkZWYgc3RydWN0IFZTRmlsdGVyRGVwZW5kZW5jeSB7Cisg ICAgVlNOb2RlICpzb3VyY2U7CisgICAgaW50IHJlcXVlc3RQYXR0ZXJuOyAvKiBWU1JlcXVl c3RQYXR0ZXJuICovCit9IFZTRmlsdGVyRGVwZW5kZW5jeTsKKworc3RydWN0IFZTQVBJIHsK KyAgICAvKiBBdWRpbyBhbmQgdmlkZW8gZmlsdGVyIHJlbGF0ZWQgaW5jbHVkaW5nIG5vZGVz ICovCisgICAgdm9pZCAoVlNfQ0MgKmNyZWF0ZVZpZGVvRmlsdGVyKShWU01hcCAqb3V0LCBj b25zdCBjaGFyICpuYW1lLCBjb25zdCBWU1ZpZGVvSW5mbyAqdmksIFZTRmlsdGVyR2V0RnJh bWUgZ2V0RnJhbWUsIFZTRmlsdGVyRnJlZSBmcmVlLCBpbnQgZmlsdGVyTW9kZSwgY29uc3Qg VlNGaWx0ZXJEZXBlbmRlbmN5ICpkZXBlbmRlbmNpZXMsIGludCBudW1EZXBzLCB2b2lkICpp bnN0YW5jZURhdGEsIFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7IC8qIG91dHB1dCBub2Rl cyBhcmUgYXBwZW5kZWQgdG8gdGhlIGNsaXAga2V5IGluIHRoZSBvdXQgbWFwICovCisgICAg VlNOb2RlICooVlNfQ0MgKmNyZWF0ZVZpZGVvRmlsdGVyMikoY29uc3QgY2hhciAqbmFtZSwg Y29uc3QgVlNWaWRlb0luZm8gKnZpLCBWU0ZpbHRlckdldEZyYW1lIGdldEZyYW1lLCBWU0Zp bHRlckZyZWUgZnJlZSwgaW50IGZpbHRlck1vZGUsIGNvbnN0IFZTRmlsdGVyRGVwZW5kZW5j eSAqZGVwZW5kZW5jaWVzLCBpbnQgbnVtRGVwcywgdm9pZCAqaW5zdGFuY2VEYXRhLCBWU0Nv cmUgKmNvcmUpIFZTX05PRVhDRVBUOyAvKiBzYW1lIGFzIGNyZWF0ZVZpZGVvRmlsdGVyIGJ1 dCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgVlNOb2RlIGRpcmVjdGx5IG9yIE5VTEwgb24g ZmFpbHVyZSAqLworICAgIHZvaWQgKFZTX0NDICpjcmVhdGVBdWRpb0ZpbHRlcikoVlNNYXAg Km91dCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgVlNBdWRpb0luZm8gKmFpLCBWU0ZpbHRl ckdldEZyYW1lIGdldEZyYW1lLCBWU0ZpbHRlckZyZWUgZnJlZSwgaW50IGZpbHRlck1vZGUs IGNvbnN0IFZTRmlsdGVyRGVwZW5kZW5jeSAqZGVwZW5kZW5jaWVzLCBpbnQgbnVtRGVwcywg dm9pZCAqaW5zdGFuY2VEYXRhLCBWU0NvcmUgKmNvcmUpIFZTX05PRVhDRVBUOyAvKiBvdXRw dXQgbm9kZXMgYXJlIGFwcGVuZGVkIHRvIHRoZSBjbGlwIGtleSBpbiB0aGUgb3V0IG1hcCAq LworICAgIFZTTm9kZSAqKFZTX0NDICpjcmVhdGVBdWRpb0ZpbHRlcjIpKGNvbnN0IGNoYXIg Km5hbWUsIGNvbnN0IFZTQXVkaW9JbmZvICphaSwgVlNGaWx0ZXJHZXRGcmFtZSBnZXRGcmFt ZSwgVlNGaWx0ZXJGcmVlIGZyZWUsIGludCBmaWx0ZXJNb2RlLCBjb25zdCBWU0ZpbHRlckRl cGVuZGVuY3kgKmRlcGVuZGVuY2llcywgaW50IG51bURlcHMsIHZvaWQgKmluc3RhbmNlRGF0 YSwgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsgLyogc2FtZSBhcyBjcmVhdGVBdWRpb0Zp bHRlciBidXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFZTTm9kZSBkaXJlY3RseSBvciBO VUxMIG9uIGZhaWx1cmUgKi8KKyAgICBpbnQgKFZTX0NDICpzZXRMaW5lYXJGaWx0ZXIpKFZT Tm9kZSAqbm9kZSkgVlNfTk9FWENFUFQ7IC8qIFVzZSByaWdodCBhZnRlciBjcmVhdGUqRmls dGVyKiwgc2V0cyB0aGUgY29ycmVjdCBjYWNoZSBtb2RlIGZvciB1c2luZyB0aGUgY2FjaGVG cmFtZSBBUEkgYW5kIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIHVwcGVyIG51bWJlciBvZiBh ZGRpdGlvbmFsIGZyYW1lcyB0byBjYWNoZSBwZXIgcmVxdWVzdCAqLworICAgIHZvaWQgKFZT X0NDICpzZXRDYWNoZU1vZGUpKFZTTm9kZSAqbm9kZSwgaW50IG1vZGUpIFZTX05PRVhDRVBU OyAvKiBWU0NhY2hlTW9kZSwgY2hhbmdpbmcgdGhlIGNhY2hlIG1vZGUgYWxzbyByZXNldHMg YWxsIG9wdGlvbnMgdG8gdGhlaXIgZGVmYXVsdCAqLworICAgIHZvaWQgKFZTX0NDICpzZXRD YWNoZU9wdGlvbnMpKFZTTm9kZSAqbm9kZSwgaW50IGZpeGVkU2l6ZSwgaW50IG1heFNpemUs IGludCBtYXhIaXN0b3J5U2l6ZSkgVlNfTk9FWENFUFQ7IC8qIHBhc3NpbmcgLTEgbWVhbnMg bm8gY2hhbmdlICovCisKKyAgICB2b2lkIChWU19DQyAqZnJlZU5vZGUpKFZTTm9kZSAqbm9k ZSkgVlNfTk9FWENFUFQ7CisgICAgVlNOb2RlICooVlNfQ0MgKmFkZE5vZGVSZWYpKFZTTm9k ZSAqbm9kZSkgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19DQyAqZ2V0Tm9kZVR5cGUpKFZT Tm9kZSAqbm9kZSkgVlNfTk9FWENFUFQ7IC8qIHJldHVybnMgVlNNZWRpYVR5cGUgKi8KKyAg ICBjb25zdCBWU1ZpZGVvSW5mbyAqKFZTX0NDICpnZXRWaWRlb0luZm8pKFZTTm9kZSAqbm9k ZSkgVlNfTk9FWENFUFQ7CisgICAgY29uc3QgVlNBdWRpb0luZm8gKihWU19DQyAqZ2V0QXVk aW9JbmZvKShWU05vZGUgKm5vZGUpIFZTX05PRVhDRVBUOworCisgICAgLyogRnJhbWUgcmVs YXRlZCBmdW5jdGlvbnMgKi8KKyAgICBWU0ZyYW1lICooVlNfQ0MgKm5ld1ZpZGVvRnJhbWUp KGNvbnN0IFZTVmlkZW9Gb3JtYXQgKmZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBj b25zdCBWU0ZyYW1lICpwcm9wU3JjLCBWU0NvcmUgKmNvcmUpIFZTX05PRVhDRVBUOworICAg IFZTRnJhbWUgKihWU19DQyAqbmV3VmlkZW9GcmFtZTIpKGNvbnN0IFZTVmlkZW9Gb3JtYXQg KmZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBWU0ZyYW1lICoqcGxhbmVT cmMsIGNvbnN0IGludCAqcGxhbmVzLCBjb25zdCBWU0ZyYW1lICpwcm9wU3JjLCBWU0NvcmUg KmNvcmUpIFZTX05PRVhDRVBUOyAvKiBzYW1lIGFzIG5ld1ZpZGVvRnJhbWUgYnV0IGFsbG93 cyB0aGUgc3BlY2lmaWVkIHBsYW5lcyB0byBiZSBlZmZlY3RpdmVseSBjb3BpZWQgZnJvbSB0 aGUgc291cmNlIGZyYW1lcyAqLworICAgIFZTRnJhbWUgKihWU19DQyAqbmV3QXVkaW9GcmFt ZSkoY29uc3QgVlNBdWRpb0Zvcm1hdCAqZm9ybWF0LCBpbnQgbnVtU2FtcGxlcywgY29uc3Qg VlNGcmFtZSAqcHJvcFNyYywgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsKKyAgICBWU0Zy YW1lICooVlNfQ0MgKm5ld0F1ZGlvRnJhbWUyKShjb25zdCBWU0F1ZGlvRm9ybWF0ICpmb3Jt YXQsIGludCBudW1TYW1wbGVzLCBjb25zdCBWU0ZyYW1lICoqY2hhbm5lbFNyYywgY29uc3Qg aW50ICpjaGFubmVscywgY29uc3QgVlNGcmFtZSAqcHJvcFNyYywgVlNDb3JlICpjb3JlKSBW U19OT0VYQ0VQVDsgLyogc2FtZSBhcyBuZXdBdWRpb0ZyYW1lIGJ1dCBhbGxvd3MgdGhlIHNw ZWNpZmllZCBjaGFubmVscyB0byBiZSBlZmZlY3RpdmVseSBjb3BpZWQgZnJvbSB0aGUgc291 cmNlIGZyYW1lcyAqLworICAgIHZvaWQgKFZTX0NDICpmcmVlRnJhbWUpKGNvbnN0IFZTRnJh bWUgKmYpIFZTX05PRVhDRVBUOworICAgIGNvbnN0IFZTRnJhbWUgKihWU19DQyAqYWRkRnJh bWVSZWYpKGNvbnN0IFZTRnJhbWUgKmYpIFZTX05PRVhDRVBUOworICAgIFZTRnJhbWUgKihW U19DQyAqY29weUZyYW1lKShjb25zdCBWU0ZyYW1lICpmLCBWU0NvcmUgKmNvcmUpIFZTX05P RVhDRVBUOworICAgIGNvbnN0IFZTTWFwICooVlNfQ0MgKmdldEZyYW1lUHJvcGVydGllc1JP KShjb25zdCBWU0ZyYW1lICpmKSBWU19OT0VYQ0VQVDsKKyAgICBWU01hcCAqKFZTX0NDICpn ZXRGcmFtZVByb3BlcnRpZXNSVykoVlNGcmFtZSAqZikgVlNfTk9FWENFUFQ7CisKKyAgICBw dHJkaWZmX3QgKFZTX0NDICpnZXRTdHJpZGUpKGNvbnN0IFZTRnJhbWUgKmYsIGludCBwbGFu ZSkgVlNfTk9FWENFUFQ7CisgICAgY29uc3QgdWludDhfdCAqKFZTX0NDICpnZXRSZWFkUHRy KShjb25zdCBWU0ZyYW1lICpmLCBpbnQgcGxhbmUpIFZTX05PRVhDRVBUOworICAgIHVpbnQ4 X3QgKihWU19DQyAqZ2V0V3JpdGVQdHIpKFZTRnJhbWUgKmYsIGludCBwbGFuZSkgVlNfTk9F WENFUFQ7IC8qIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpbnZhbGlkYXRlcyBwcmV2aW91c2x5 IGdvdHRlbiByZWFkIHBvaW50ZXJzIHRvIHRoZSBzYW1lIGZyYW1lICovCisKKyAgICBjb25z dCBWU1ZpZGVvRm9ybWF0ICooVlNfQ0MgKmdldFZpZGVvRnJhbWVGb3JtYXQpKGNvbnN0IFZT RnJhbWUgKmYpIFZTX05PRVhDRVBUOworICAgIGNvbnN0IFZTQXVkaW9Gb3JtYXQgKihWU19D QyAqZ2V0QXVkaW9GcmFtZUZvcm1hdCkoY29uc3QgVlNGcmFtZSAqZikgVlNfTk9FWENFUFQ7 CisgICAgaW50IChWU19DQyAqZ2V0RnJhbWVUeXBlKShjb25zdCBWU0ZyYW1lICpmKSBWU19O T0VYQ0VQVDsgLyogcmV0dXJucyBWU01lZGlhVHlwZSAqLworICAgIGludCAoVlNfQ0MgKmdl dEZyYW1lV2lkdGgpKGNvbnN0IFZTRnJhbWUgKmYsIGludCBwbGFuZSkgVlNfTk9FWENFUFQ7 CisgICAgaW50IChWU19DQyAqZ2V0RnJhbWVIZWlnaHQpKGNvbnN0IFZTRnJhbWUgKmYsIGlu dCBwbGFuZSkgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19DQyAqZ2V0RnJhbWVMZW5ndGgp KGNvbnN0IFZTRnJhbWUgKmYpIFZTX05PRVhDRVBUOyAvKiByZXR1cm5zIHRoZSBudW1iZXIg b2Ygc2FtcGxlcyBmb3IgYXVkaW8gZnJhbWVzICovCisKKyAgICAvKiBHZW5lcmFsIGZvcm1h dCBmdW5jdGlvbnMgICovCisgICAgaW50IChWU19DQyAqZ2V0VmlkZW9Gb3JtYXROYW1lKShj b25zdCBWU1ZpZGVvRm9ybWF0ICpmb3JtYXQsIGNoYXIgKmJ1ZmZlcikgVlNfTk9FWENFUFQ7 IC8qIHVwIHRvIDMyIGNoYXJhY3RlcnMgaW5jbHVkaW5nIHRlcm1pbmF0aW5nIG51bGwgbWF5 IGJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciwgbm9uLXplcm8gcmV0dXJuIHZhbHVlIG9uIHN1 Y2Nlc3MgKi8KKyAgICBpbnQgKFZTX0NDICpnZXRBdWRpb0Zvcm1hdE5hbWUpKGNvbnN0IFZT QXVkaW9Gb3JtYXQgKmZvcm1hdCwgY2hhciAqYnVmZmVyKSBWU19OT0VYQ0VQVDsgLyogdXAg dG8gMzIgY2hhcmFjdGVycyBpbmNsdWRpbmcgdGVybWluYXRpbmcgbnVsbCBtYXkgYmUgd3Jp dHRlbiB0byB0aGUgYnVmZmVyLCBub24temVybyByZXR1cm4gdmFsdWUgb24gc3VjY2VzcyAq LworICAgIGludCAoVlNfQ0MgKnF1ZXJ5VmlkZW9Gb3JtYXQpKFZTVmlkZW9Gb3JtYXQgKmZv cm1hdCwgaW50IGNvbG9yRmFtaWx5LCBpbnQgc2FtcGxlVHlwZSwgaW50IGJpdHNQZXJTYW1w bGUsIGludCBzdWJTYW1wbGluZ1csIGludCBzdWJTYW1wbGluZ0gsIFZTQ29yZSAqY29yZSkg VlNfTk9FWENFUFQ7IC8qIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBvbiBzdWNjZXNzICovCisg ICAgaW50IChWU19DQyAqcXVlcnlBdWRpb0Zvcm1hdCkoVlNBdWRpb0Zvcm1hdCAqZm9ybWF0 LCBpbnQgc2FtcGxlVHlwZSwgaW50IGJpdHNQZXJTYW1wbGUsIHVpbnQ2NF90IGNoYW5uZWxM YXlvdXQsIFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7IC8qIG5vbi16ZXJvIHJldHVybiB2 YWx1ZSBvbiBzdWNjZXNzICovCisgICAgdWludDMyX3QgKFZTX0NDICpxdWVyeVZpZGVvRm9y bWF0SUQpKGludCBjb2xvckZhbWlseSwgaW50IHNhbXBsZVR5cGUsIGludCBiaXRzUGVyU2Ft cGxlLCBpbnQgc3ViU2FtcGxpbmdXLCBpbnQgc3ViU2FtcGxpbmdILCBWU0NvcmUgKmNvcmUp IFZTX05PRVhDRVBUOyAvKiByZXR1cm5zIDAgb24gZmFpbHVyZSAqLworICAgIGludCAoVlNf Q0MgKmdldFZpZGVvRm9ybWF0QnlJRCkoVlNWaWRlb0Zvcm1hdCAqZm9ybWF0LCB1aW50MzJf dCBpZCwgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsgLyogbm9uLXplcm8gcmV0dXJuIHZh bHVlIG9uIHN1Y2Nlc3MgKi8KKworICAgIC8qIEZyYW1lIHJlcXVlc3QgYW5kIGZpbHRlciBn ZXRmcmFtZSBmdW5jdGlvbnMgKi8KKyAgICBjb25zdCBWU0ZyYW1lICooVlNfQ0MgKmdldEZy YW1lKShpbnQgbiwgVlNOb2RlICpub2RlLCBjaGFyICplcnJvck1zZywgaW50IGJ1ZlNpemUp IFZTX05PRVhDRVBUOyAvKiBvbmx5IGZvciBleHRlcm5hbCBhcHBsaWNhdGlvbnMgdXNpbmcg dGhlIGNvcmUgYXMgYSBsaWJyYXJ5IG9yIGZvciByZXF1ZXN0aW5nIGZyYW1lcyBpbiBhIGZp bHRlciBjb25zdHJ1Y3RvciwgZG8gbm90IHVzZSBpbnNpZGUgYSBmaWx0ZXIncyBnZXRmcmFt ZSBmdW5jdGlvbiAqLworICAgIHZvaWQgKFZTX0NDICpnZXRGcmFtZUFzeW5jKShpbnQgbiwg VlNOb2RlICpub2RlLCBWU0ZyYW1lRG9uZUNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICp1c2Vy RGF0YSkgVlNfTk9FWENFUFQ7IC8qIG9ubHkgZm9yIGV4dGVybmFsIGFwcGxpY2F0aW9ucyB1 c2luZyB0aGUgY29yZSBhcyBhIGxpYnJhcnkgb3IgZm9yIHJlcXVlc3RpbmcgZnJhbWVzIGlu IGEgZmlsdGVyIGNvbnN0cnVjdG9yLCBkbyBub3QgdXNlIGluc2lkZSBhIGZpbHRlcidzIGdl dGZyYW1lIGZ1bmN0aW9uICovCisgICAgY29uc3QgVlNGcmFtZSAqKFZTX0NDICpnZXRGcmFt ZUZpbHRlcikoaW50IG4sIFZTTm9kZSAqbm9kZSwgVlNGcmFtZUNvbnRleHQgKmZyYW1lQ3R4 KSBWU19OT0VYQ0VQVDsgLyogb25seSB1c2UgaW5zaWRlIGEgZmlsdGVyJ3MgZ2V0ZnJhbWUg ZnVuY3Rpb24gKi8KKyAgICB2b2lkIChWU19DQyAqcmVxdWVzdEZyYW1lRmlsdGVyKShpbnQg biwgVlNOb2RlICpub2RlLCBWU0ZyYW1lQ29udGV4dCAqZnJhbWVDdHgpIFZTX05PRVhDRVBU OyAvKiBvbmx5IHVzZSBpbnNpZGUgYSBmaWx0ZXIncyBnZXRmcmFtZSBmdW5jdGlvbiAqLwor ICAgIHZvaWQgKFZTX0NDICpyZWxlYXNlRnJhbWVFYXJseSkoVlNOb2RlICpub2RlLCBpbnQg biwgVlNGcmFtZUNvbnRleHQgKmZyYW1lQ3R4KSBWU19OT0VYQ0VQVDsgLyogb25seSB1c2Ug aW5zaWRlIGEgZmlsdGVyJ3MgZ2V0ZnJhbWUgZnVuY3Rpb24sIHVubGVzcyB0aGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBhIHJlcXVlc3RlZCBmcmFtZSBpcyBrZXB0IGluIG1lbW9yeSB1bnRp bCB0aGUgZW5kIG9mIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgZnJhbWUgKi8KKyAgICB2b2lk IChWU19DQyAqY2FjaGVGcmFtZSkoY29uc3QgVlNGcmFtZSAqZnJhbWUsIGludCBuLCBWU0Zy YW1lQ29udGV4dCAqZnJhbWVDdHgpIFZTX05PRVhDRVBUOyAvKiB1c2VkIHRvIHN0b3JlIGlu dGVybWVkaWF0ZSBmcmFtZXMgaW4gY2FjaGUsIHVzZWZ1bCBmb3IgZmlsdGVycyB3aGVyZSBy YW5kb20gYWNjZXNzIGlzIHNsb3csIG11c3QgY2FsbCBzZXRMaW5lYXJGaWx0ZXIgb24gdGhl IG5vZGUgYmVmb3JlIHVzaW5nIG9yIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkICAqLworICAg IHZvaWQgKFZTX0NDICpzZXRGaWx0ZXJFcnJvcikoY29uc3QgY2hhciAqZXJyb3JNZXNzYWdl LCBWU0ZyYW1lQ29udGV4dCAqZnJhbWVDdHgpIFZTX05PRVhDRVBUOyAvKiB1c2VkIHRvIHNp Z25hbCBlcnJvcnMgaW4gdGhlIGZpbHRlciBnZXRmcmFtZSBmdW5jdGlvbiAqLworCisgICAg LyogRXh0ZXJuYWwgZnVuY3Rpb25zICovCisgICAgVlNGdW5jdGlvbiAqKFZTX0NDICpjcmVh dGVGdW5jdGlvbikoVlNQdWJsaWNGdW5jdGlvbiBmdW5jLCB2b2lkICp1c2VyRGF0YSwgVlNG cmVlRnVuY3Rpb25EYXRhIGZyZWUsIFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7CisgICAg dm9pZCAoVlNfQ0MgKmZyZWVGdW5jdGlvbikoVlNGdW5jdGlvbiAqZikgVlNfTk9FWENFUFQ7 CisgICAgVlNGdW5jdGlvbiAqKFZTX0NDICphZGRGdW5jdGlvblJlZikoVlNGdW5jdGlvbiAq ZikgVlNfTk9FWENFUFQ7CisgICAgdm9pZCAoVlNfQ0MgKmNhbGxGdW5jdGlvbikoVlNGdW5j dGlvbiAqZnVuYywgY29uc3QgVlNNYXAgKmluLCBWU01hcCAqb3V0KSBWU19OT0VYQ0VQVDsK KworICAgIC8qIE1hcCBhbmQgcHJvcGVydHkgYWNjZXNzIGZ1bmN0aW9ucyAqLworICAgIFZT TWFwICooVlNfQ0MgKmNyZWF0ZU1hcCkodm9pZCkgVlNfTk9FWENFUFQ7CisgICAgdm9pZCAo VlNfQ0MgKmZyZWVNYXApKFZTTWFwICptYXApIFZTX05PRVhDRVBUOworICAgIHZvaWQgKFZT X0NDICpjbGVhck1hcCkoVlNNYXAgKm1hcCkgVlNfTk9FWENFUFQ7CisgICAgdm9pZCAoVlNf Q0MgKmNvcHlNYXApKGNvbnN0IFZTTWFwICpzcmMsIFZTTWFwICpkc3QpIFZTX05PRVhDRVBU OyAvKiBjb3BpZXMgYWxsIHZhbHVlcyBpbiBzcmMgdG8gZHN0LCBpZiBhIGtleSBhbHJlYWR5 IGV4aXN0cyBpbiBkc3QgaXQncyByZXBsYWNlZCAqLworCisgICAgdm9pZCAoVlNfQ0MgKm1h cFNldEVycm9yKShWU01hcCAqbWFwLCBjb25zdCBjaGFyICplcnJvck1lc3NhZ2UpIFZTX05P RVhDRVBUOyAvKiB1c2VkIHRvIHNpZ25hbCBlcnJvcnMgb3V0c2lkZSBmaWx0ZXIgZ2V0ZnJh bWUgZnVuY3Rpb24gKi8KKyAgICBjb25zdCBjaGFyICooVlNfQ0MgKm1hcEdldEVycm9yKShj b25zdCBWU01hcCAqbWFwKSBWU19OT0VYQ0VQVDsgLyogdXNlZCB0byBxdWVyeSBlcnJvcnMs IHJldHVybnMgMCBpZiBubyBlcnJvciAqLworCisgICAgaW50IChWU19DQyAqbWFwTnVtS2V5 cykoY29uc3QgVlNNYXAgKm1hcCkgVlNfTk9FWENFUFQ7CisgICAgY29uc3QgY2hhciAqKFZT X0NDICptYXBHZXRLZXkpKGNvbnN0IFZTTWFwICptYXAsIGludCBpbmRleCkgVlNfTk9FWENF UFQ7CisgICAgaW50IChWU19DQyAqbWFwRGVsZXRlS2V5KShWU01hcCAqbWFwLCBjb25zdCBj aGFyICprZXkpIFZTX05PRVhDRVBUOworICAgIGludCAoVlNfQ0MgKm1hcE51bUVsZW1lbnRz KShjb25zdCBWU01hcCAqbWFwLCBjb25zdCBjaGFyICprZXkpIFZTX05PRVhDRVBUOyAvKiBy ZXR1cm5zIC0xIGlmIGEga2V5IGRvZXNuJ3QgZXhpc3QgKi8KKyAgICBpbnQgKFZTX0NDICpt YXBHZXRUeXBlKShjb25zdCBWU01hcCAqbWFwLCBjb25zdCBjaGFyICprZXkpIFZTX05PRVhD RVBUOyAvKiByZXR1cm5zIFZTUHJvcGVydHlUeXBlICovCisgICAgaW50IChWU19DQyAqbWFw U2V0RW1wdHkpKFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgaW50IHR5cGUpIFZTX05P RVhDRVBUOworCisgICAgaW50NjRfdCAoVlNfQ0MgKm1hcEdldEludCkoY29uc3QgVlNNYXAg Km1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgaW5kZXgsIGludCAqZXJyb3IpIFZTX05PRVhD RVBUOworICAgIGludCAoVlNfQ0MgKm1hcEdldEludFNhdHVyYXRlZCkoY29uc3QgVlNNYXAg Km1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgaW5kZXgsIGludCAqZXJyb3IpIFZTX05PRVhD RVBUOworICAgIGNvbnN0IGludDY0X3QgKihWU19DQyAqbWFwR2V0SW50QXJyYXkpKGNvbnN0 IFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgaW50ICplcnJvcikgVlNfTk9FWENFUFQ7 CisgICAgaW50IChWU19DQyAqbWFwU2V0SW50KShWU01hcCAqbWFwLCBjb25zdCBjaGFyICpr ZXksIGludDY0X3QgaSwgaW50IGFwcGVuZCkgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19D QyAqbWFwU2V0SW50QXJyYXkpKFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3Qg aW50NjRfdCAqaSwgaW50IHNpemUpIFZTX05PRVhDRVBUOworCisgICAgZG91YmxlIChWU19D QyAqbWFwR2V0RmxvYXQpKGNvbnN0IFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgaW50 IGluZGV4LCBpbnQgKmVycm9yKSBWU19OT0VYQ0VQVDsKKyAgICBmbG9hdCAoVlNfQ0MgKm1h cEdldEZsb2F0U2F0dXJhdGVkKShjb25zdCBWU01hcCAqbWFwLCBjb25zdCBjaGFyICprZXks IGludCBpbmRleCwgaW50ICplcnJvcikgVlNfTk9FWENFUFQ7CisgICAgY29uc3QgZG91Ymxl ICooVlNfQ0MgKm1hcEdldEZsb2F0QXJyYXkpKGNvbnN0IFZTTWFwICptYXAsIGNvbnN0IGNo YXIgKmtleSwgaW50ICplcnJvcikgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19DQyAqbWFw U2V0RmxvYXQpKFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgZG91YmxlIGQsIGludCBh cHBlbmQpIFZTX05PRVhDRVBUOworICAgIGludCAoVlNfQ0MgKm1hcFNldEZsb2F0QXJyYXkp KFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgZG91YmxlICpkLCBpbnQgc2l6 ZSkgVlNfTk9FWENFUFQ7CisKKyAgICBjb25zdCBjaGFyICooVlNfQ0MgKm1hcEdldERhdGEp KGNvbnN0IFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgaW50IGluZGV4LCBpbnQgKmVy cm9yKSBWU19OT0VYQ0VQVDsKKyAgICBpbnQgKFZTX0NDICptYXBHZXREYXRhU2l6ZSkoY29u c3QgVlNNYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgaW5kZXgsIGludCAqZXJyb3Ip IFZTX05PRVhDRVBUOworICAgIGludCAoVlNfQ0MgKm1hcEdldERhdGFUeXBlSGludCkoY29u c3QgVlNNYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCBpbnQgaW5kZXgsIGludCAqZXJyb3Ip IFZTX05PRVhDRVBUOyAvKiByZXR1cm5zIFZTRGF0YVR5cGVIaW50ICovCisgICAgaW50IChW U19DQyAqbWFwU2V0RGF0YSkoVlNNYXAgKm1hcCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBj aGFyICpkYXRhLCBpbnQgc2l6ZSwgaW50IHR5cGUsIGludCBhcHBlbmQpIFZTX05PRVhDRVBU OworCisgICAgVlNOb2RlICooVlNfQ0MgKm1hcEdldE5vZGUpKGNvbnN0IFZTTWFwICptYXAs IGNvbnN0IGNoYXIgKmtleSwgaW50IGluZGV4LCBpbnQgKmVycm9yKSBWU19OT0VYQ0VQVDsK KyAgICBpbnQgKFZTX0NDICptYXBTZXROb2RlKShWU01hcCAqbWFwLCBjb25zdCBjaGFyICpr ZXksIFZTTm9kZSAqbm9kZSwgaW50IGFwcGVuZCkgVlNfTk9FWENFUFQ7IC8qIHJldHVybnMg MCBvbiBzdWNjZXNzICovCisgICAgaW50IChWU19DQyAqbWFwQ29uc3VtZU5vZGUpKFZTTWFw ICptYXAsIGNvbnN0IGNoYXIgKmtleSwgVlNOb2RlICpub2RlLCBpbnQgYXBwZW5kKSBWU19O T0VYQ0VQVDsgLyogYWx3YXlzIGNvbnN1bWVzIHRoZSByZWZlcmVuY2UsIGV2ZW4gb24gZXJy b3IgKi8KKworICAgIGNvbnN0IFZTRnJhbWUgKihWU19DQyAqbWFwR2V0RnJhbWUpKGNvbnN0 IFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgaW50IGluZGV4LCBpbnQgKmVycm9yKSBW U19OT0VYQ0VQVDsKKyAgICBpbnQgKFZTX0NDICptYXBTZXRGcmFtZSkoVlNNYXAgKm1hcCwg Y29uc3QgY2hhciAqa2V5LCBjb25zdCBWU0ZyYW1lICpmLCBpbnQgYXBwZW5kKSBWU19OT0VY Q0VQVDsgLyogcmV0dXJucyAwIG9uIHN1Y2Nlc3MgKi8KKyAgICBpbnQgKFZTX0NDICptYXBD b25zdW1lRnJhbWUpKFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgVlNGcmFt ZSAqZiwgaW50IGFwcGVuZCkgVlNfTk9FWENFUFQ7IC8qIGFsd2F5cyBjb25zdW1lcyB0aGUg cmVmZXJlbmNlLCBldmVuIG9uIGVycm9yICovCisKKyAgICBWU0Z1bmN0aW9uICooVlNfQ0Mg Km1hcEdldEZ1bmN0aW9uKShjb25zdCBWU01hcCAqbWFwLCBjb25zdCBjaGFyICprZXksIGlu dCBpbmRleCwgaW50ICplcnJvcikgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19DQyAqbWFw U2V0RnVuY3Rpb24pKFZTTWFwICptYXAsIGNvbnN0IGNoYXIgKmtleSwgVlNGdW5jdGlvbiAq ZnVuYywgaW50IGFwcGVuZCkgVlNfTk9FWENFUFQ7IC8qIHJldHVybnMgMCBvbiBzdWNjZXNz ICovCisgICAgaW50IChWU19DQyAqbWFwQ29uc3VtZUZ1bmN0aW9uKShWU01hcCAqbWFwLCBj b25zdCBjaGFyICprZXksIFZTRnVuY3Rpb24gKmZ1bmMsIGludCBhcHBlbmQpIFZTX05PRVhD RVBUOyAvKiBhbHdheXMgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgZXZlbiBvbiBlcnJvciAq LworCisgICAgLyogUGx1Z2luIGFuZCBwbHVnaW4gZnVuY3Rpb24gcmVsYXRlZCAqLworICAg IGludCAoVlNfQ0MgKnJlZ2lzdGVyRnVuY3Rpb24pKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0 IGNoYXIgKmFyZ3MsIGNvbnN0IGNoYXIgKnJldHVyblR5cGUsIFZTUHVibGljRnVuY3Rpb24g YXJnc0Z1bmMsIHZvaWQgKmZ1bmN0aW9uRGF0YSwgVlNQbHVnaW4gKnBsdWdpbikgVlNfTk9F WENFUFQ7IC8qIG5vbi16ZXJvIHJldHVybiB2YWx1ZSBvbiBzdWNjZXNzICAqLworICAgIFZT UGx1Z2luICooVlNfQ0MgKmdldFBsdWdpbkJ5SUQpKGNvbnN0IGNoYXIgKmlkZW50aWZpZXIs IFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7CisgICAgVlNQbHVnaW4gKihWU19DQyAqZ2V0 UGx1Z2luQnlOYW1lc3BhY2UpKGNvbnN0IGNoYXIgKm5zLCBWU0NvcmUgKmNvcmUpIFZTX05P RVhDRVBUOworICAgIFZTUGx1Z2luICooVlNfQ0MgKmdldE5leHRQbHVnaW4pKFZTUGx1Z2lu ICpwbHVnaW4sIFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7IC8qIHBhc3MgTlVMTCB0byBn ZXQgdGhlIGZpcnN0IHBsdWdpbiAgKi8KKyAgICBjb25zdCBjaGFyICooVlNfQ0MgKmdldFBs dWdpbk5hbWUpKFZTUGx1Z2luICpwbHVnaW4pIFZTX05PRVhDRVBUOworICAgIGNvbnN0IGNo YXIgKihWU19DQyAqZ2V0UGx1Z2luSUQpKFZTUGx1Z2luICpwbHVnaW4pIFZTX05PRVhDRVBU OworICAgIGNvbnN0IGNoYXIgKihWU19DQyAqZ2V0UGx1Z2luTmFtZXNwYWNlKShWU1BsdWdp biAqcGx1Z2luKSBWU19OT0VYQ0VQVDsKKyAgICBWU1BsdWdpbkZ1bmN0aW9uICooVlNfQ0Mg KmdldE5leHRQbHVnaW5GdW5jdGlvbikoVlNQbHVnaW5GdW5jdGlvbiAqZnVuYywgVlNQbHVn aW4gKnBsdWdpbikgVlNfTk9FWENFUFQ7IC8qIHBhc3MgTlVMTCB0byBnZXQgdGhlIGZpcnN0 IHBsdWdpbiBmdW5jdGlvbiAgKi8KKyAgICBWU1BsdWdpbkZ1bmN0aW9uICooVlNfQ0MgKmdl dFBsdWdpbkZ1bmN0aW9uQnlOYW1lKShjb25zdCBjaGFyICpuYW1lLCBWU1BsdWdpbiAqcGx1 Z2luKSBWU19OT0VYQ0VQVDsKKyAgICBjb25zdCBjaGFyICooVlNfQ0MgKmdldFBsdWdpbkZ1 bmN0aW9uTmFtZSkoVlNQbHVnaW5GdW5jdGlvbiAqZnVuYykgVlNfTk9FWENFUFQ7CisgICAg Y29uc3QgY2hhciAqKFZTX0NDICpnZXRQbHVnaW5GdW5jdGlvbkFyZ3VtZW50cykoVlNQbHVn aW5GdW5jdGlvbiAqZnVuYykgVlNfTk9FWENFUFQ7IC8qIHJldHVybnMgYW4gYXJndW1lbnQg Zm9ybWF0IHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKihWU19DQyAqZ2V0UGx1Z2luRnVu Y3Rpb25SZXR1cm5UeXBlKShWU1BsdWdpbkZ1bmN0aW9uICpmdW5jKSBWU19OT0VYQ0VQVDsg LyogcmV0dXJucyBhbiBhcmd1bWVudCBmb3JtYXQgc3RyaW5nICovCisgICAgY29uc3QgY2hh ciAqKFZTX0NDICpnZXRQbHVnaW5QYXRoKShjb25zdCBWU1BsdWdpbiAqcGx1Z2luKSBWU19O T0VYQ0VQVDsgLyogdGhlIGZ1bGwgcGF0aCB0byB0aGUgbG9hZGVkIGxpYnJhcnkgZmlsZSBj b250YWluaW5nIHRoZSBwbHVnaW4gZW50cnkgcG9pbnQgKi8KKyAgICBpbnQgKFZTX0NDICpn ZXRQbHVnaW5WZXJzaW9uKShjb25zdCBWU1BsdWdpbiAqcGx1Z2luKSBWU19OT0VYQ0VQVDsK KyAgICBWU01hcCAqKFZTX0NDICppbnZva2UpKFZTUGx1Z2luICpwbHVnaW4sIGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IFZTTWFwICphcmdzKSBWU19OT0VYQ0VQVDsgLyogdXNlciBtdXN0 IGZyZWUgdGhlIHJldHVybmVkIFZTTWFwICovCisKKyAgICAvKiBDb3JlIGFuZCBpbmZvcm1h dGlvbiAqLworICAgIFZTQ29yZSAqKFZTX0NDICpjcmVhdGVDb3JlKShpbnQgZmxhZ3MpIFZT X05PRVhDRVBUOyAvKiBmbGFncyB1c2VzIHRoZSBWU0NvcmVDcmVhdGlvbkZsYWdzIGVudW0g Ki8KKyAgICB2b2lkIChWU19DQyAqZnJlZUNvcmUpKFZTQ29yZSAqY29yZSkgVlNfTk9FWENF UFQ7IC8qIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGFsbCBub2RlLCBmcmFtZSBh bmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBiZWxvbmdpbmcgdG8gdGhlIGNvcmUgaGF2ZSBiZWVu IGZyZWVkICovCisgICAgaW50NjRfdCAoVlNfQ0MgKnNldE1heENhY2hlU2l6ZSkoaW50NjRf dCBieXRlcywgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsgLyogdGhlIHRvdGFsIGNhY2hl IHNpemUgYXQgd2hpY2ggdmFwb3Vyc3ludGggbW9yZSBhZ2dyZXNzaXZlbHkgdHJpZXMgdG8g cmVjbGFpbSBtZW1vcnksIGl0IGlzIG5vdCBhIGhhcmQgbGltaXQgKi8KKyAgICBpbnQgKFZT X0NDICpzZXRUaHJlYWRDb3VudCkoaW50IHRocmVhZHMsIFZTQ29yZSAqY29yZSkgVlNfTk9F WENFUFQ7IC8qIHNldHRpbmcgdGhyZWFkcyB0byAwIG1lYW5zIGF1dG9tYXRpYyBkZXRlY3Rp b24gKi8KKyAgICB2b2lkIChWU19DQyAqZ2V0Q29yZUluZm8pKFZTQ29yZSAqY29yZSwgVlND b3JlSW5mbyAqaW5mbykgVlNfTk9FWENFUFQ7CisgICAgaW50IChWU19DQyAqZ2V0QVBJVmVy c2lvbikodm9pZCkgVlNfTk9FWENFUFQ7CisKKyAgICAvKiBNZXNzYWdlIGhhbmRsZXIgKi8K KyAgICB2b2lkIChWU19DQyAqbG9nTWVzc2FnZSkoaW50IG1zZ1R5cGUsIGNvbnN0IGNoYXIg Km1zZywgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsKKyAgICBWU0xvZ0hhbmRsZSAqKFZT X0NDICphZGRMb2dIYW5kbGVyKShWU0xvZ0hhbmRsZXIgaGFuZGxlciwgVlNMb2dIYW5kbGVy RnJlZSBmcmVlLCB2b2lkICp1c2VyRGF0YSwgVlNDb3JlICpjb3JlKSBWU19OT0VYQ0VQVDsg LyogZnJlZSBhbmQgdXNlckRhdGEgY2FuIGJlIE5VTEwsIHJldHVybnMgYSBoYW5kbGUgdGhh dCBjYW4gYmUgcGFzc2VkIHRvIHJlbW92ZUxvZ0hhbmRsZXIgKi8KKyAgICBpbnQgKFZTX0ND ICpyZW1vdmVMb2dIYW5kbGVyKShWU0xvZ0hhbmRsZSAqaGFuZGxlLCBWU0NvcmUgKmNvcmUp IFZTX05PRVhDRVBUOyAvKiByZXR1cm5zIG5vbi16ZXJvIGlmIHN1Y2Nlc3NmdWxseSByZW1v dmVkICovCisgICAgCisgICAgLyogQWRkZWQgaW4gQVBJIDQuMSwgbW9zdGx5IGdyYXBoIGFu ZCBub2RlIGluc3BlY3Rpb24sIFBMRUFTRSBET04nVCBVU0UgSU5TSURFIEZJTFRFUlMgKi8K KyNpZiBWQVBPVVJTWU5USF9BUElfTUlOT1IgPj0gMQorICAgIC8qIEFkZGl0aW9uYWwgY2Fj aGUgbWFuYWdlbWVudCB0byBmcmVlIG1lbW9yeSAqLworICAgIHZvaWQgKFZTX0NDICpjbGVh ck5vZGVDYWNoZSkoVlNOb2RlICpub2RlKSBWU19OT0VYQ0VQVDsgLyogY2xlYXJzIHRoZSBj YWNoZSBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgKi8KKyAgICB2b2lkIChWU19DQyAqY2xlYXJD b3JlQ2FjaGVzKShWU0NvcmUgKmNvcmUpIFZTX05PRVhDRVBUOyAvKiBjbGVhcnMgYWxsIGNh Y2hlcyBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmllZCBjb3JlICovCisKKyAgICAvKiBCYXNp YyBub2RlIGluZm9ybWF0aW9uICovCisgICAgY29uc3QgY2hhciAqKFZTX0NDICpnZXROb2Rl TmFtZSkoVlNOb2RlICpub2RlKSBWU19OT0VYQ0VQVDsgLyogdGhlIG5hbWUgcGFzc2VkIHRv IGNyZWF0ZSpGaWx0ZXIgKi8KKyAgICBpbnQgKFZTX0NDICpnZXROb2RlRmlsdGVyTW9kZSko VlNOb2RlICpub2RlKSBWU19OT0VYQ0VQVDsgLyogcmV0dXJucyBWU0ZpbHRlck1vZGUgKi8K KyAgICBpbnQgKFZTX0NDICpnZXROdW1Ob2RlRGVwZW5kZW5jaWVzKShWU05vZGUgKm5vZGUp IFZTX05PRVhDRVBUOworICAgIGNvbnN0IFZTRmlsdGVyRGVwZW5kZW5jeSAqKFZTX0NDICpn ZXROb2RlRGVwZW5kZW5jeSkoVlNOb2RlICpub2RlLCBpbnQgaW5kZXgpIFZTX05PRVhDRVBU OworCisgICAgLyogTm9kZSB0aW1pbmcgZnVuY3Rpb25zICovCisgICAgaW50IChWU19DQyAq Z2V0Q29yZU5vZGVUaW1pbmcpKFZTQ29yZSAqY29yZSkgVlNfTk9FWENFUFQ7IC8qIG5vbi16 ZXJvIHdoZW4gZmlsdGVyIHRpbWluZyBpcyBlbmFibGVkICovCisgICAgdm9pZCAoVlNfQ0Mg KnNldENvcmVOb2RlVGltaW5nKShWU0NvcmUgKmNvcmUsIGludCBlbmFibGUpIFZTX05PRVhD RVBUOyAvKiBub24temVybyBlbmFibGVzIGZpbHRlciB0aW1pbmcsIG5vdGUgdGhhdCBkaXNh Ymxpbmcgc2ltcGx5IHN0b3BzIHRoZSBjb3VudGVycyBmcm9tIGluY3JlbWVudGluZyAqLwor ICAgIGludDY0X3QgKFZTX0NDICpnZXROb2RlUHJvY2Vzc2luZ1RpbWUpKFZTTm9kZSAqbm9k ZSwgaW50IHJlc2V0KSBWU19OT0VYQ0VQVDsgLyogdGltZSBzcGVudCBwcm9jZXNzaW5nIGZy YW1lcyBpbiBuYW5vc2Vjb25kcywgcmVzZXQgc2V0cyB0aGUgY291bnRlciB0byAwIGFnYWlu ICovCisgICAgaW50NjRfdCAoVlNfQ0MgKmdldEZyZWVkTm9kZVByb2Nlc3NpbmdUaW1lKShW U0NvcmUgKmNvcmUsIGludCByZXNldCkgVlNfTk9FWENFUFQ7IC8qIHRpbWUgc3BlbnQgcHJv Y2Vzc2luZyBmcmFtZXMgaW4gbmFub3NlY29uZHMgaW4gYWxsIGRlc3Ryb3llZCBub2Rlcywg cmVzZXQgc2V0cyB0aGUgY291bnRlciB0byAwIGFnYWluICovCisKKyNpZiBkZWZpbmVkKFZT X0dSQVBIX0FQSSkKKyAgICAvKiAhISEgRXhwZXJpbWVudGFsL2V4cGVuc2l2ZSBncmFwaCBp bmZvcm1hdGlvbiwgdGhlc2UgZnVuY3Rpb24gcmVxdWlyZSBib3RoIHRoZSBtYWpvciBhbmQg bWlub3IgdmVyc2lvbiB0byBtYXRjaCBleGFjdGx5IHdoZW4gdXNpbmcgdGhlbSAhISEKKyAg ICAgKiAKKyAgICAgKiBUaGVzZSBmdW5jdGlvbnMgb25seSBleGlzdCB0byByZXRyaWV2ZSBp bnRlcm5hbCBkZXRhaWxzIGZvciBkZWJ1ZyBwdXJwb3NlcyBhbmQgZ3JhcGggdmlzdWFsaXph dGlvbgorICAgICAqIFRoZXkgd2lsbCBvbmx5IG9ubHkgd29yayBwcm9wZXJseSB3aGVuIHVz ZWQgb24gYSBjb3JlIGNyZWF0ZWQgd2l0aCBjY2ZFbmFibGVHcmFwaEluc3BlY3Rpb24gYW5k IGFyZQorICAgICAqIG5vdCBzYWZlIHRvIHVzZSBjb25jdXJyZW50bHkgd2l0aCBmcmFtZSBy ZXF1ZXN0cyBvciBvdGhlciBBUEkgZnVuY3Rpb25zLiBCZWNhdXNlIG9mIHRoaXMgdGhleSBh cmUKKyAgICAgKiB1bnN1aXRhYmxlIGZvciB1c2UgaW4gcGx1Z2lucyBhbmQgZmlsdGVycy4K KyAgICAgKi8KKworICAgIGNvbnN0IGNoYXIgKihWU19DQyAqZ2V0Tm9kZUNyZWF0aW9uRnVu Y3Rpb25OYW1lKShWU05vZGUgKm5vZGUsIGludCBsZXZlbCkgVlNfTk9FWENFUFQ7IC8qIGxl dmVsPTAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRo ZSBmaWx0ZXIsIHNwZWNpZnlpbmcgYSBoaWdoZXIgbGV2ZWwgd2lsbCByZXRyaWV2ZSB0aGUg ZnVuY3Rpb24gYWJvdmUgdGhhdCBpbnZva2VkIGl0IG9yIE5VTEwgaWYgYSBub24tZXhpc3Rl bnQgbGV2ZWwgaXMgcmVxdWVzdGVkICovCisgICAgY29uc3QgVlNNYXAgKihWU19DQyAqZ2V0 Tm9kZUNyZWF0aW9uRnVuY3Rpb25Bcmd1bWVudHMpKFZTTm9kZSAqbm9kZSwgaW50IGxldmVs KSBWU19OT0VYQ0VQVDsgLyogbGV2ZWw9MCByZXR1cm5zIGEgY29weSBvZiB0aGUgYXJndW1l bnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRoZSBmaWx0ZXIsIHJl dHVybnMgTlVMTCBpZiBhIG5vbi1leGlzdGVudCBsZXZlbCBpcyByZXF1ZXN0ZWQgKi8KKyNl bmRpZgorI2VuZGlmCit9OworCitWU19BUEkoY29uc3QgVlNBUEkgKikgZ2V0VmFwb3VyU3lu dGhBUEkoaW50IHZlcnNpb24pIFZTX05PRVhDRVBUOworCisjZW5kaWYgLyogVkFQT1VSU1lO VEg0X0ggKi8KKworLyogVlNTY3JpcHQ0LmggKi8KKy8qCisqIENvcHlyaWdodCAoYykgMjAx My0yMDIwIEZyZWRyaWsgTWVsbGJpbgorKgorKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBWYXBv dXJTeW50aC4KKyoKKyogVmFwb3VyU3ludGggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorKgorKiBWYXBvdXJTeW50aCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisqIExpY2Vuc2UgYWxvbmcgd2l0aCBWYXBvdXJTeW50aDsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisqLworCisj aWZuZGVmIFZTU0NSSVBUNF9ICisjZGVmaW5lIFZTU0NSSVBUNF9ICisKKyNkZWZpbmUgVlNT Q1JJUFRfQVBJX01BSk9SIDQKKyNkZWZpbmUgVlNTQ1JJUFRfQVBJX01JTk9SIDEKKyNkZWZp bmUgVlNTQ1JJUFRfQVBJX1ZFUlNJT04gVlNfTUFLRV9WRVJTSU9OKFZTU0NSSVBUX0FQSV9N QUpPUiwgVlNTQ1JJUFRfQVBJX01JTk9SKQorCit0eXBlZGVmIHN0cnVjdCBWU1NjcmlwdCBW U1NjcmlwdDsKK3R5cGVkZWYgc3RydWN0IFZTU0NSSVBUQVBJIFZTU0NSSVBUQVBJOworCitz dHJ1Y3QgVlNTQ1JJUFRBUEkgeworICAgIC8qIFJldHVybnMgdGhlIGhpZ2hlc3Qgc3VwcG9y dGVkIFZTU0NSSVBUX0FQSV9WRVJTSU9OICovCisgICAgaW50IChWU19DQyAqZ2V0QVBJVmVy c2lvbikodm9pZCkgVlNfTk9FWENFUFQ7CisKKyAgICAvKiBDb252ZW5pZW5jZSBmdW5jdGlv biBmb3IgcmV0cmlldmluZyBhIFZTQVBJIHBvaW50ZXIgd2l0aG91dCBoYXZpbmcgdG8gdXNl IHRoZSBWYXBvdXJTeW50aCBsaWJyYXJ5LiBBbHdheXMgcGFzcyBWQVBPVVJTWU5USF9BUElf VkVSU0lPTiAqLworICAgIGNvbnN0IFZTQVBJICooVlNfQ0MgKmdldFZTQVBJKShpbnQgdmVy c2lvbikgVlNfTk9FWENFUFQ7CisKKyAgICAvKiAKKyAgICAqIFByb3ZpZGluZyBhIHByZS1j cmVhdGVkIGNvcmUgaXMgdXNlZnVsIGZvciBzZXR0aW5nIGNvcmUgY3JlYXRpb24gZmxhZ3Ms IGxvZyBjYWxsYmFja3MsIHByZWxvYWQgc3BlY2lmaWMgcGx1Z2lucyBhbmQgbWFueSBvdGhl ciB0aGluZ3MuCisgICAgKiBZb3UgbXVzdCBjcmVhdGUgYSBWU1NjcmlwdCBvYmplY3QgYmVm b3JlIGV2YWx1YXRpbmcgYSBzY3JpcHQuIEFsd2F5cyB0YWtlcyBvd25lcnNoaXAgb2YgdGhl IGNvcmUgZXZlbiBvbiBmYWlsdXJlLiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyAgICAq IFBhc3MgTlVMTCB0byBoYXZlIGEgY29yZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2l0aCB0 aGUgZGVmYXVsdCBvcHRpb25zLgorICAgICovCisgICAgVlNTY3JpcHQgKihWU19DQyAqY3Jl YXRlU2NyaXB0KShWU0NvcmUgKmNvcmUpIFZTX05PRVhDRVBUOworCisgICAgLyogVGhlIGNv cmUgaXMgdmFsaWQgYXMgbG9uZyBhcyB0aGUgZW52aXJvbm1lbnQgZXhpc3RzLCByZXR1cm4g TlVMTCBvbiBlcnJvciAqLworICAgIFZTQ29yZSAqKFZTX0NDICpnZXRDb3JlKShWU1Njcmlw dCAqaGFuZGxlKSBWU19OT0VYQ0VQVDsKKworICAgIC8qCisgICAgKiBFdmFsdWF0ZXMgYSBz Y3JpcHQgcGFzc2VkIGluIHRoZSBidWZmZXIgYXJndW1lbnQuIFRoZSBzY3JpcHRGaWxlbmFt ZSBpcyBvbmx5IHVzZWQgZm9yIGRpc3BsYXkgcHVycG9zZXMuIGluIFB5dGhvbgorICAgICog aXQgbWVhbnMgdGhhdCB0aGUgbWFpbiBtb2R1bGUgd29uJ3QgYmUgdW5uYW1lZCBpbiBlcnJv ciBtZXNzYWdlcy4KKyAgICAqIAorICAgICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgICAg KiAKKyAgICAqIE5vdGUgdGhhdCBjYWxsaW5nIGFueSBmdW5jdGlvbiBvdGhlciB0aGFuIGdl dEVycm9yKCkgYW5kIGZyZWVTY3JpcHQoKSBvbiBhIFZTU2NyaXB0IG9iamVjdCBpbiB0aGUg ZXJyb3Igc3RhdGUKKyAgICAqIHdpbGwgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvci4K KyAgICAqLworICAgIGludCAoVlNfQ0MgKmV2YWx1YXRlQnVmZmVyKShWU1NjcmlwdCAqaGFu ZGxlLCBjb25zdCBjaGFyICpidWZmZXIsIGNvbnN0IGNoYXIgKnNjcmlwdEZpbGVuYW1lKSBW U19OT0VYQ0VQVDsKKworICAgIC8qIENvbnZlbmllbmNlIHZlcnNpb24gb2YgdGhlIGFib3Zl IGZ1bmN0aW9uIHRoYXQgbG9hZHMgdGhlIHNjcmlwdCBmcm9tIHNjcmlwdEZpbGVuYW1lIGFu ZCBwYXNzZXMgYXMgdGhlIGJ1ZmZlciB0byBldmFsdWF0ZUJ1ZmZlciAqLworICAgIGludCAo VlNfQ0MgKmV2YWx1YXRlRmlsZSkoVlNTY3JpcHQgKmhhbmRsZSwgY29uc3QgY2hhciAqc2Ny aXB0RmlsZW5hbWUpIFZTX05PRVhDRVBUOworCisgICAgLyogUmV0dXJucyBOVUxMIG9uIHN1 Y2Nlc3MsIG90aGVyd2lzZSBhbiBlcnJvciBtZXNzYWdlICovCisgICAgY29uc3QgY2hhciAq KFZTX0NDICpnZXRFcnJvcikoVlNTY3JpcHQgKmhhbmRsZSkgVlNfTk9FWENFUFQ7CisKKyAg ICAvKiBSZXR1cm5zIHRoZSBzY3JpcHQncyByZXBvcnRlZCBleGl0IGNvZGUgKi8KKyAgICBp bnQgKFZTX0NDICpnZXRFeGl0Q29kZSkoVlNTY3JpcHQgKmhhbmRsZSkgVlNfTk9FWENFUFQ7 CisKKyAgICAvKiBGZXRjaGVzIGEgdmFyaWFibGUgb2YgYW55IFZTTWFwIHN0b3JhYmxlIHR5 cGUgc2V0IGluIGEgc2NyaXB0LiBJdCBpcyBzdG9yZWQgaW4gdGhlIGtleSB3aXRoIHRoZSBz YW1lIG5hbWUgaW4gZHN0LiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4gKi8KKyAgICBpbnQgKFZT X0NDICpnZXRWYXJpYWJsZSkoVlNTY3JpcHQgKmhhbmRsZSwgY29uc3QgY2hhciAqbmFtZSwg VlNNYXAgKmRzdCkgVlNfTk9FWENFUFQ7CisKKyAgICAvKiBTZXRzIGFsbCBrZXlzIGluIHRo ZSBwcm92aWRlZCBWU01hcCBhcyB2YXJpYWJsZXMgaW4gdGhlIHNjcmlwdC4gUmV0dXJucyAw IG9uIHN1Y2Nlc3MuICovCisgICAgaW50IChWU19DQyAqc2V0VmFyaWFibGVzKShWU1Njcmlw dCAqaGFuZGxlLCBjb25zdCBWU01hcCAqdmFycykgVlNfTk9FWENFUFQ7CisKKyAgICAvKgor ICAgICogVGhlIHJldHVybmVkIG5vZGVzIG11c3QgYmUgZnJlZWQgdXNpbmcgZnJlZU5vZGUo KSBiZWZvcmUgY2FsbGluZyBmcmVlU2NyaXB0KCkgc2luY2UgdGhleSBtYXkgZGVwZW5kIG9u IGRhdGEgaW4gdGhlIFZTU2NyaXB0CisgICAgKiBlbnZpcm9ubWVudC4gUmV0dXJucyBOVUxM IGlmIG5vIG5vZGUgd2FzIHNldCBhcyBvdXRwdXQgaW4gdGhlIHNjcmlwdC4gSW5kZXggMCBp cyB1c2VkIGJ5IGRlZmF1bHQgaW4gc2NyaXB0cyBhbmQgb3RoZXIKKyAgICAqIHZhbHVlcyBh cmUgcmFyZWx5IHVzZWQuCisgICAgKi8KKyAgICBWU05vZGUgKihWU19DQyAqZ2V0T3V0cHV0 Tm9kZSkoVlNTY3JpcHQgKmhhbmRsZSwgaW50IGluZGV4KSBWU19OT0VYQ0VQVDsKKyAgICBW U05vZGUgKihWU19DQyAqZ2V0T3V0cHV0QWxwaGFOb2RlKShWU1NjcmlwdCAqaGFuZGxlLCBp bnQgaW5kZXgpIFZTX05PRVhDRVBUOworICAgIGludCAoVlNfQ0MgKmdldEFsdE91dHB1dE1v ZGUpKFZTU2NyaXB0ICpoYW5kbGUsIGludCBpbmRleCkgVlNfTk9FWENFUFQ7CisKKyAgICB2 b2lkIChWU19DQyAqZnJlZVNjcmlwdCkoVlNTY3JpcHQgKmhhbmRsZSkgVlNfTk9FWENFUFQ7 CisKKyAgICAvKgorICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoZSB3b3JraW5nIGRpcmVj dG9yeSBpcyB0ZW1wb3JhcmlseSBjaGFuZ2VkIHRvIHRoZSBzYW1lCisgICAgKiBsb2NhdGlv biBhcyB0aGUgc2NyaXB0IGZpbGUgd2hlbiBldmFsdWF0ZUZpbGUgaXMgY2FsbGVkLiBPZmYg YnkgZGVmYXVsdC4KKyAgICAqLworICAgIHZvaWQgKFZTX0NDICpldmFsU2V0V29ya2luZ0Rp cikoVlNTY3JpcHQgKmhhbmRsZSwgaW50IHNldENXRCkgVlNfTk9FWENFUFQ7CisKK307CisK K1ZTX0FQSShjb25zdCBWU1NDUklQVEFQSSAqKSBnZXRWU1NjcmlwdEFQSShpbnQgdmVyc2lv bikgVlNfTk9FWENFUFQ7CisKKyNlbmRpZiAvKiBWU1NDUklQVDRfSCAqLwotLSAKMi4zNC4x Cgo= --------------T1bjGO0XgYzQPb2Sn2o6L6yw Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------T1bjGO0XgYzQPb2Sn2o6L6yw--