Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDreQ-000CKy-Dy for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 21:54:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vDreP-00FMBd-9s for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 21:54:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDreO-00FMBT-OD for pgsql-hackers@lists.postgresql.org; Tue, 28 Oct 2025 21:54:43 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vDreJ-004lmB-22 for pgsql-hackers@postgresql.org; Tue, 28 Oct 2025 21:54:43 +0000 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-7a2852819a8so4575799b3a.3 for ; Tue, 28 Oct 2025 14:54:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1761688477; x=1762293277; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=YyuWFjRSTJrYnxiEgdmReIsFDnemWYys/qGSez4dOx8=; b=bUmExjqYr43UTpfT0gUFmyZVccY3dItYbRwOUNj8gIw036/u+A84YdEY9FK6nu0Dtz /6PGhYiogADCunBfrI2vFdTt+rEjE1P0l1dEbriavZSOsqBgb2mBLFbtxpDTx0t7hR4+ XasIFi5otg0kODgx9u3Deoq3kK6j0m+15/UhuCWRaL5lF1/HadCA6k8Zi9GzecRh4Fg5 kUH9Qm4gSiwxmtr8FpZyJRzqPc00Fd7s7OFkaZidPos8wSuJ9tCZGk86rGzuvURxDzcJ xZlR4DljLzgF24tJ3FxXqyDJLRyl6TVDb4lsr3X9056BnVz6Wkb7QoUb3YePlMgn9Igd pxsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761688477; x=1762293277; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=YyuWFjRSTJrYnxiEgdmReIsFDnemWYys/qGSez4dOx8=; b=jB3qgP5vTJGo/8RvQwy6fZi9//iA3tJPGRi0u7Kza11JnRZrA7HRuBcoLoL+Wp99DI Z4Ia3Tca1Y08F+ITgpV6gDAZcMw1cBNLsd5SUQATVeMzSLf6szCG54Xx4VaOvn2DMmvA 4Kg7n/0YqTBGW3E2fFnG2IJfUe2sC/iYlQa9DjCsLg9v93SBusk7BsvIB8dqBgWccfNK eso7t4Cj6mx+f8n4yHvIr+ilTC/3caMx8YY6+UThr+eifCiTd+ruT2Bjp9S6npQOAAEZ czEVU4DqZmjoCMur8SM+RcUTFnLW8M2qhXHiBySbeairLUR9x1LACllfZTFJNuCjHAJH SExA== X-Forwarded-Encrypted: i=1; AJvYcCV1RZifc2K7ah9iheG8Q2tZ92vZA1eU2yKjJEXDTwwAlA9i3MFZQbA5mOQQXDNFl6cx08F1sP8ykBMy2hnf@postgresql.org X-Gm-Message-State: AOJu0Yx6dPy3yuN6VoHkWw+RtUBWUlNlGye7Q7XcNLpABgokVGuNGVRF miY7xoYqSz5lgaqKEVAt2zxELUZgZBtOuO+mXUBeQOByRJeCdCg7jdqa7pops6WWfA== X-Gm-Gg: ASbGncuRinMwWywCaHVAWyyWyXeXveePy3a9u+xQVWGPMfLCmJ1nxsDBFAqDBNariJK 0Y+vW7wvQPZd2IUFPC5Qz0S60UehJfDWFqzbH5m5l8QvLAWuQkTvByUENQYH0sNiJqi33Yi9P/O XJD1/9hb7q5mUYktXHj1SpR0sLb1/NfgPnMQxp2EGP4i8kQpfNjzPDqsV23YRgaI191WWCK0rxQ KG/l6j3LblYlP9+YDDPc1v2hVovl0siCAI24/Y49d5kZXB1xw64eFzmjuGkBBCtIMEFVLRWbsaw pi1TO0/DVkmjpGszppvycqYmOXbaT7+IyZ+SYuEGLNskTGpO/XUjcnqP17NvHK5L7LVyv5hTspP zR5xjOZjK+pynmQ5db0N20+0TTOF2NVbpa2dHoJmMi6hjZIxwZBvhKBzRz9iklZXBxR5Kjtbjag dNIPyg0fFUZsay12DLFHz/V5DoCTbo9x/0 X-Google-Smtp-Source: AGHT+IFaIVVbyfJeMylt7sr3/ExRnw6Bewxh2T3LASmK1Iq/Wmwvwml4/IFzzqtS4CgyCaRHn6KNPg== X-Received: by 2002:a05:6a00:2d92:b0:7a2:710d:43e7 with SMTP id d2e1a72fcca58-7a4e4e12073mr624847b3a.24.1761688477261; Tue, 28 Oct 2025 14:54:37 -0700 (PDT) Received: from jeff-ws-bridge.lan (c-24-7-19-3.hsd1.ca.comcast.net. [24.7.19.3]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a41402e554sm12677789b3a.18.2025.10.28.14.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Oct 2025 14:54:36 -0700 (PDT) Message-ID: <5d5741649befc2c8a76ff3e8fc950ef50542e1ca.camel@j-davis.com> Subject: Re: C11: should we use char32_t for unicode code points? From: Jeff Davis To: Thomas Munro , Peter Eisentraut Cc: Tatsuo Ishii , pgsql-hackers@postgresql.org Date: Tue, 28 Oct 2025 14:54:35 -0700 In-Reply-To: References: <20251024.184315.1449345234035166124.ishii@postgresql.org> <435cf6bcf14bb91235da065c70d782863ca9b80e.camel@j-davis.com> <044d5476-96e9-4537-92b9-fbceb7960be5@eisentraut.org> Content-Type: multipart/mixed; boundary="=-BjKVMpmaVICBQtjDeQNP" User-Agent: Evolution 3.52.3-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-BjKVMpmaVICBQtjDeQNP Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2025-10-29 at 09:03 +1300, Thomas Munro wrote: > If you try to test for the existence of the type rather than the > header in meson/configure, won't you still have the configure-with-C > compile-with-C++ problem I must have misunderstood the first time. If we depend on HAVE_CHAR32_T, then it will be set in stone in pg_config.h, and if C++ tries to include the file then it will try the typedef again and fail. I tried with headerscheck --cplusplus before posting it, but because my machine has uchar.h, then it didn't fail. I went back to using the check for __cplusplus, and added a comment that hopefully clarifies things. I also reordered the checks so that it prefers to include uchar.h if available, even when using C++, because that seems like the cleaner end goal. However, that caused another problem in CI (mingw_cross_warning), apparently due to a conflict between uchar.h and win32_port.h on that platform: [21:48:21.794] ../../src/include/port/win32_port.h: At top level: [21:48:21.794] ../../src/include/port/win32_port.h:254:8: error: redefinition of =E2=80=98struct stat=E2=80=99 [21:48:21.794] 254 | struct stat =20 /* This should match struct __stat64 */ [21:48:21.794] | ^~~~ [21:48:21.794] In file included from /usr/share/mingw- w64/include/wchar.h:413, [21:48:21.794] from /usr/share/mingw- w64/include/uchar.h:28, [21:48:21.794] from ../../src/include/c.h:526: [21:48:21.794] /usr/share/mingw-w64/include/_mingw_stat64.h:40:10: note: originally defined here [21:48:21.794] 40 | struct stat { [21:48:21.794] | ^~~~ https://cirrus-ci.com/task/4849300577976320 I could reverse the checks again and I think it will work, but let me know if you have an idea for a better fix. I never thought it would be so much trouble just to get a suitable type for a UTF-32 code point... Regards, Jeff Davis --=-BjKVMpmaVICBQtjDeQNP Content-Disposition: attachment; filename*0=v4-0001-Use-C11-char16_t-and-char32_t-for-Unicode-code-po.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0001-Use-C11-char16_t-and-char32_t-for-Unicode-code-po.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjZWVjYmM5NzBlN2ZjZDAyNmVkYmJlN2NjMzI0ZWE4ZmU3NGM1NzFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU dWUsIDIxIE9jdCAyMDI1IDEzOjE2OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NF0gVXNlIEMx MSBjaGFyMTZfdCBhbmQgY2hhcjMyX3QgZm9yIFVuaWNvZGUgY29kZSBwb2ludHMuCgpSZXZpZXdl ZC1ieTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4KUmV2aWV3ZWQtYnk6IFRo b21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFBldGVyIEVp c2VudHJhdXQgPHBldGVyQGVpc2VudHJhdXQub3JnPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL2JlZGNjOTNkMDYyMDNkZmQ4OTgxNWIxMGY4MTVjYTJkZTg2MjZlODUuY2FtZWwlNDBq LWRhdmlzLmNvbQotLS0KIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAyICstCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgMSArCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VyLmMgICAgICAgICAgICAgICAgICAgfCAg OCArLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwgICAgICAgICAgICAgICAgICAgICB8ICA4 ICstLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubCAgICAgICAgIHwgIDYg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jICAgICB8IDQ0ICsr KysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyAgICAgICAgICAg ICAgIHwgNDAgKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5jICAg ICAgICAgICAgICAgIHwgIDQgKy0KIHNyYy9jb21tb24vc2FzbHByZXAuYyAgICAgICAgICAgICAg ICAgICAgICAgICB8IDQ4ICsrKysrKysrLS0tLS0tLS0KIHNyYy9jb21tb24vdW5pY29kZS9jYXNl X3Rlc3QuYyAgICAgICAgICAgICAgICB8IDIzICsrKystLS0tCiBzcmMvY29tbW9uL3VuaWNvZGUv Y2F0ZWdvcnlfdGVzdC5jICAgICAgICAgICAgfCAgMyArLQogLi4uL3VuaWNvZGUvZ2VuZXJhdGUt bm9ybV90ZXN0X3RhYmxlLnBsICAgICAgIHwgIDQgKy0KIC4uLi91bmljb2RlL2dlbmVyYXRlLXVu aWNvZGVfY2FzZV90YWJsZS5wbCAgICB8ICA3ICstLQogLi4uL2dlbmVyYXRlLXVuaWNvZGVfY2F0 ZWdvcnlfdGFibGUucGwgICAgICAgIHwgIDggKy0tCiBzcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90 ZXN0LmMgICAgICAgICAgICAgICAgfCAgNiArLQogc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyAg ICAgICAgICAgICAgICAgICAgIHwgNTYgKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2NvbW1vbi91 bmljb2RlX2NhdGVnb3J5LmMgICAgICAgICAgICAgICAgIHwgNTAgKysrKysrKystLS0tLS0tLS0K IHNyYy9jb21tb24vdW5pY29kZV9ub3JtLmMgICAgICAgICAgICAgICAgICAgICB8IDU2ICsrKysr KysrKy0tLS0tLS0tLS0KIHNyYy9mZV91dGlscy9tYnByaW50LmMgICAgICAgICAgICAgICAgICAg ICAgICB8IDEwICsrLS0KIHNyYy9pbmNsdWRlL2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IDE4ICsrKysrKwogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oICAgICAg ICAgICAgIHwgMTAgKystLQogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5o ICAgICAgIHwgMTMgKystLS0KIHNyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5Lmgg ICAgICAgICB8IDQ2ICsrKysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVf Y2F0ZWdvcnlfdGFibGUuaCAgIHwgIDggKy0tCiBzcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9u b3JtLmggICAgICAgICAgICAgfCAgNiArLQogc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaCAgICAg ICAgICAgICAgICAgICAgIHwgMzIgKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL3BnX2NvbmZpZy5o LmluICAgICAgICAgICAgICAgICAgICB8ICAzICsKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgICAgICAgICB8ICAyICsKIDI5IGZpbGVzIGNoYW5nZWQsIDI3OSBpbnNlcnRp b25zKCspLCAyNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmln dXJlCmluZGV4IDIyY2Q4NjYxNDdiLi42MDBhNTZmOTFhMyAxMDA3NTUKLS0tIGEvY29uZmlndXJl CisrKyBiL2NvbmZpZ3VyZQpAQCAtMTM2MjcsNyArMTM2MjcsNyBAQCBmaQogIyMgSGVhZGVyIGZp bGVzCiAjIwogCi1mb3IgYWNfaGVhZGVyIGluIGF0b21pYy5oIGNvcHlmaWxlLmggZXhlY2luZm8u aCBnZXRvcHQuaCBpZmFkZHJzLmggbWJhcnJpZXIuaCBzeXMvZXBvbGwuaCBzeXMvZXZlbnQuaCBz eXMvcGVyc29uYWxpdHkuaCBzeXMvcHJjdGwuaCBzeXMvcHJvY2N0bC5oIHN5cy9zaWduYWxmZC5o IHN5cy91Y3JlZC5oIHRlcm1pb3MuaCB1Y3JlZC5oIHhsb2NhbGUuaAorZm9yIGFjX2hlYWRlciBp biBhdG9taWMuaCBjb3B5ZmlsZS5oIGV4ZWNpbmZvLmggZ2V0b3B0LmggaWZhZGRycy5oIG1iYXJy aWVyLmggc3lzL2Vwb2xsLmggc3lzL2V2ZW50Lmggc3lzL3BlcnNvbmFsaXR5Lmggc3lzL3ByY3Rs Lmggc3lzL3Byb2NjdGwuaCBzeXMvc2lnbmFsZmQuaCBzeXMvdWNyZWQuaCB0ZXJtaW9zLmggdWNo YXIuaCB1Y3JlZC5oIHhsb2NhbGUuaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJh Y19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRl cl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5j bHVkZXNfZGVmYXVsdCIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpp bmRleCBlNDQ5NDNhYTZmZS4uNmFiMmUxNTc1MzEgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYwor KysgYi9jb25maWd1cmUuYWMKQEAgLTE1MTMsNiArMTUxMyw3IEBAIEFDX0NIRUNLX0hFQURFUlMo bTRfbm9ybWFsaXplKFsKIAlzeXMvc2lnbmFsZmQuaAogCXN5cy91Y3JlZC5oCiAJdGVybWlvcy5o CisJdWNoYXIuaAogCXVjcmVkLmgKIAl4bG9jYWxlLmgKIF0pKQpkaWZmIC0tZ2l0IGEvbWVzb24u YnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCAzOTU0MTZhNjA2MC4uYzMxMjhjNzU1NGYgMTAwNjQ0 Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0yNjEzLDYgKzI2MTMsNyBA QCBoZWFkZXJfY2hlY2tzID0gWwogICAnc3lzL3NpZ25hbGZkLmgnLAogICAnc3lzL3VjcmVkLmgn LAogICAndGVybWlvcy5oJywKKyAgJ3VjaGFyLmgnLAogICAndWNyZWQuaCcsCiAgICd4bG9jYWxl LmgnLAogXQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlci5jIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlci5jCmluZGV4IDMzYTA0MDUwNmI0Li5hMzY3OWY4ZTg2YyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZXIuYwpAQCAtMzM5LDcgKzMzOSw3IEBAIGhleHZhbCh1bnNpZ25lZCBjaGFyIGMp CiAKIC8qIGlzIFVuaWNvZGUgY29kZSBwb2ludCBhY2NlcHRhYmxlPyAqLwogc3RhdGljIHZvaWQK LWNoZWNrX3VuaWNvZGVfdmFsdWUocGdfd2NoYXIgYykKK2NoZWNrX3VuaWNvZGVfdmFsdWUoY2hh cjMyX3QgYykKIHsKIAlpZiAoIWlzX3ZhbGlkX3VuaWNvZGVfY29kZXBvaW50KGMpKQogCQllcmVw b3J0KEVSUk9SLApAQCAtMzc2LDcgKzM3Niw3IEBAIHN0cl91ZGVlc2NhcGUoY29uc3QgY2hhciAq c3RyLCBjaGFyIGVzY2FwZSwKIAljaGFyCSAgICpuZXcsCiAJCQkgICAqb3V0OwogCXNpemVfdAkJ bmV3X2xlbjsKLQlwZ193Y2hhcglwYWlyX2ZpcnN0ID0gMDsKKwljaGFyMTZfdAlwYWlyX2ZpcnN0 ID0gMDsKIAlTY2FubmVyQ2FsbGJhY2tTdGF0ZSBzY2JzdGF0ZTsKIAogCS8qCkBAIC00MjAsNyAr NDIwLDcgQEAgc3RyX3VkZWVzY2FwZShjb25zdCBjaGFyICpzdHIsIGNoYXIgZXNjYXBlLAogCQkJ CQkgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGluWzNdKSAmJgogCQkJCQkgaXN4ZGlnaXQoKHVu c2lnbmVkIGNoYXIpIGluWzRdKSkKIAkJCXsKLQkJCQlwZ193Y2hhcgl1bmljb2RlOworCQkJCWNo YXIzMl90CXVuaWNvZGU7CiAKIAkJCQl1bmljb2RlID0gKGhleHZhbChpblsxXSkgPDwgMTIpICsK IAkJCQkJKGhleHZhbChpblsyXSkgPDwgOCkgKwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHN0cl91ZGVl c2NhcGUoY29uc3QgY2hhciAqc3RyLCBjaGFyIGVzY2FwZSwKIAkJCQkJIGlzeGRpZ2l0KCh1bnNp Z25lZCBjaGFyKSBpbls2XSkgJiYKIAkJCQkJIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBpbls3 XSkpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29kZTsKKwkJCQljaGFyMzJfdAl1bmljb2RlOwog CiAJCQkJdW5pY29kZSA9IChoZXh2YWwoaW5bMl0pIDw8IDIwKSArCiAJCQkJCShoZXh2YWwoaW5b M10pIDw8IDE2KSArCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvc2Nhbi5sIGIvc3Jj L2JhY2tlbmQvcGFyc2VyL3NjYW4ubAppbmRleCAwODk5MDgzMWZlOC4uYTY3ODE1MzM5YjcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwKKysrIGIvc3JjL2JhY2tlbmQvcGFy c2VyL3NjYW4ubApAQCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRpYyB2b2lkIGFkZGxpdGNoYXIodW5z aWduZWQgY2hhciB5Y2hhciwgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGNoYXIg KmxpdGJ1ZmR1cChjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgdW5zaWduZWQgY2hh ciB1bmVzY2FwZV9zaW5nbGVfY2hhcih1bnNpZ25lZCBjaGFyIGMsIGNvcmVfeXlzY2FuX3QgeXlz Y2FubmVyKTsKIHN0YXRpYyBpbnQJcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29uc3QgY2hhciAq dG9rZW4sIFlZU1RZUEUgKmx2YWwsIGludCBiYXNlKTsKLXN0YXRpYyB2b2lkIGFkZHVuaWNvZGUo cGdfd2NoYXIgYywgeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyB2b2lkIGFkZHVuaWNvZGUo Y2hhcjMyX3QgYywgeXlzY2FuX3QgeXlzY2FubmVyKTsKIAogI2RlZmluZSB5eWVycm9yKG1zZykg IHNjYW5uZXJfeXllcnJvcihtc2csIHl5c2Nhbm5lcikKIApAQCAtNjQwLDcgKzY0MCw3IEBAIG90 aGVyCQkJLgogCQkJCQlhZGRsaXQoeXl0ZXh0LCB5eWxlbmcsIHl5c2Nhbm5lcik7CiAJCQkJfQog PHhlPnt4ZXVuaWNvZGV9IHsKLQkJCQkJcGdfd2NoYXIJYyA9IHN0cnRvdWwoeXl0ZXh0ICsgMiwg TlVMTCwgMTYpOworCQkJCQljaGFyMzJfdAljID0gc3RydG91bCh5eXRleHQgKyAyLCBOVUxMLCAx Nik7CiAKIAkJCQkJLyoKIAkJCQkJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcHJvZHVj dGlvbnMsIGlzc3VlIGFueQpAQCAtNjY4LDcgKzY2OCw3IEBAIG90aGVyCQkJLgogCQkJCQlQT1Bf WVlMTE9DKCk7CiAJCQkJfQogPHhldT57eGV1bmljb2RlfSB7Ci0JCQkJCXBnX3djaGFyCWMgPSBz dHJ0b3VsKHl5dGV4dCArIDIsIE5VTEwsIDE2KTsKKwkJCQkJY2hhcjMyX3QJYyA9IHN0cnRvdWwo eXl0ZXh0ICsgMiwgTlVMTCwgMTYpOwogCiAJCQkJCS8qIFJlbWVtYmVyIHN0YXJ0IG9mIG92ZXJh bGwgc3RyaW5nIHRva2VuIC4uLiAqLwogCQkJCQlQVVNIX1lZTExPQygpOwpAQCAtMTM3Niw3ICsx Mzc2LDcgQEAgcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29uc3QgY2hhciAqdG9rZW4sIFlZU1RZ UEUgKmx2YWwsIGludCBiYXNlKQogfQogCiBzdGF0aWMgdm9pZAotYWRkdW5pY29kZShwZ193Y2hh ciBjLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKK2FkZHVuaWNvZGUoY2hhcjMyX3QgYywgY29y ZV95eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJU2Nhbm5lckNhbGxiYWNrU3RhdGUgc2Nic3RhdGU7 CiAJY2hhcgkJYnVmW01BWF9VTklDT0RFX0VRVUlWQUxFTlRfU1RSSU5HICsgMV07CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubAppbmRleCBjN2FhYjgzZWViNC4uOGMzYTBhOWM2NDIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9zY2FuLmwKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubApAQCAtNTc0LDcgKzU3NCw3IEBA IGhleHZhbChjaGFyIGMsIGludCAqcmVzdWx0LCBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0LCB5eXNj YW5fdCB5eXNjYW5uZXIpCiAKIC8qIEFkZCBnaXZlbiB1bmljb2RlIGNoYXJhY3RlciB0byBzY2Fu c3RyaW5nICovCiBzdGF0aWMgYm9vbAotYWRkVW5pY29kZUNoYXIoaW50IGNoLCBzdHJ1Y3QgTm9k ZSAqZXNjb250ZXh0LCB5eXNjYW5fdCB5eXNjYW5uZXIpCithZGRVbmljb2RlQ2hhcihjaGFyMzJf dCBjaCwgc3RydWN0IE5vZGUgKmVzY29udGV4dCwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogCWlm IChjaCA9PSAwKQogCXsKQEAgLTYwNyw3ICs2MDcsNyBAQCBhZGRVbmljb2RlQ2hhcihpbnQgY2gs IHN0cnVjdCBOb2RlICplc2NvbnRleHQsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogLyogQWRkIHVu aWNvZGUgY2hhcmFjdGVyLCBwcm9jZXNzaW5nIGFueSBzdXJyb2dhdGUgcGFpcnMgKi8KIHN0YXRp YyBib29sCi1hZGRVbmljb2RlKGludCBjaCwgaW50ICpoaV9zdXJyb2dhdGUsIHN0cnVjdCBOb2Rl ICplc2NvbnRleHQsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK2FkZFVuaWNvZGUoY2hhcjMyX3QgY2gs IGludCAqaGlfc3Vycm9nYXRlLCBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0LCB5eXNjYW5fdCB5eXNj YW5uZXIpCiB7CiAJaWYgKGlzX3V0ZjE2X3N1cnJvZ2F0ZV9maXJzdChjaCkpCiAJewpAQCAtNjU1 LDcgKzY1NSw3IEBAIHBhcnNlVW5pY29kZShjaGFyICpzLCBpbnQgbCwgc3RydWN0IE5vZGUgKmVz Y29udGV4dCwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJZm9yIChpID0gMjsgaSA8IGw7IGkgKz0g MikJLyogc2tpcCAnXHUnICovCiAJewotCQlpbnQJCQljaCA9IDA7CisJCWNoYXIzMl90CQljaCA9 IDA7CiAJCWludAkJCWosCiAJCQkJCXNpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2Nh bGVfYnVpbHRpbi5jCmluZGV4IDNkYzYxMWI1MGUxLi4xMDIxZTBkMTI5YiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNvbW1vbi91bmljb2RlX2Nh c2UuaCIKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXRlZ29yeS5oIgotI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKQEAgLTM1LDYgKzM0LDIzIEBA IHN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZQogCWJvb2wJCXByZXZfYWxudW07CiB9OwogCisvKgor ICogSW4gVVRGLTgsIHBnX3djaGFyIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIGNvZGUgcG9pbnQg dmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2hhcjMyX3QKK3RvX2NoYXIzMihwZ193Y2hhciB3 YykKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpID09IFBHX1VURjgpOworCXJldHVy biAoY2hhcjMyX3QpIHdjOworfQorCitzdGF0aWMgaW5saW5lIHBnX3djaGFyCit0b19wZ193Y2hh cihjaGFyMzJfdCBjMzIpCit7CisJQXNzZXJ0KEdldERhdGFiYXNlRW5jb2RpbmcoKSA9PSBQR19V VEY4KTsKKwlyZXR1cm4gKHBnX3djaGFyKSBjMzI7Cit9CisKIC8qCiAgKiBTaW1wbGUgd29yZCBi b3VuZGFyeSBpdGVyYXRvciB0aGF0IGRyYXdzIGJvdW5kYXJpZXMgZWFjaCB0aW1lIHRoZSByZXN1 bHQgb2YKICAqIHBnX3VfaXNhbG51bSgpIGNoYW5nZXMuCkBAIC00Nyw3ICs2Myw3IEBAIGluaXRj YXBfd2JuZXh0KHZvaWQgKnN0YXRlKQogCXdoaWxlICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRl LT5sZW4gJiYKIAkJICAgd2JzdGF0ZS0+c3RyW3dic3RhdGUtPm9mZnNldF0gIT0gJ1wwJykKIAl7 Ci0JCXBnX3djaGFyCXUgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0 ZS0+c3RyICsKKwkJY2hhcjMyX3QJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAq KSB3YnN0YXRlLT5zdHIgKwogCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7CiAJCWJvb2wJCWN1 cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwgd2JzdGF0ZS0+cG9zaXgpOwogCkBAIC0xMTIsNjEg KzEyOCw2MSBAQCBzdHJmb2xkX2J1aWx0aW4oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBj b25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogc3RhdGljIGJvb2wKIHdjX2lzZGlnaXRf YnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191 X2lzZGlnaXQod2MsICFsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKKwlyZXR1cm4gcGdf dV9pc2RpZ2l0KHRvX2NoYXIzMih3YyksICFsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsK IH0KIAogc3RhdGljIGJvb2wKIHdjX2lzYWxwaGFfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9j YWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191X2lzYWxwaGEod2MpOworCXJldHVybiBwZ191 X2lzYWxwaGEodG9fY2hhcjMyKHdjKSk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc2FsbnVtX2J1 aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9p c2FsbnVtKHdjLCAhbG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJcmV0dXJuIHBnX3Vf aXNhbG51bSh0b19jaGFyMzIod2MpLCAhbG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CiB9 CiAKIHN0YXRpYyBib29sCiB3Y19pc3VwcGVyX2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2Fs ZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc3VwcGVyKHdjKTsKKwlyZXR1cm4gcGdfdV9p c3VwcGVyKHRvX2NoYXIzMih3YykpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNsb3dlcl9idWls dGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNs b3dlcih3Yyk7CisJcmV0dXJuIHBnX3VfaXNsb3dlcih0b19jaGFyMzIod2MpKTsKIH0KIAogc3Rh dGljIGJvb2wKIHdjX2lzZ3JhcGhfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9j YWxlKQogewotCXJldHVybiBwZ191X2lzZ3JhcGgod2MpOworCXJldHVybiBwZ191X2lzZ3JhcGgo dG9fY2hhcjMyKHdjKSk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc3ByaW50X2J1aWx0aW4ocGdf d2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc3ByaW50KHdj KTsKKwlyZXR1cm4gcGdfdV9pc3ByaW50KHRvX2NoYXIzMih3YykpOwogfQogCiBzdGF0aWMgYm9v bAogd2NfaXNwdW5jdF9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7 Ci0JcmV0dXJuIHBnX3VfaXNwdW5jdCh3YywgIWxvY2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwp OworCXJldHVybiBwZ191X2lzcHVuY3QodG9fY2hhcjMyKHdjKSwgIWxvY2FsZS0+YnVpbHRpbi5j YXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNzcGFjZV9idWlsdGluKHBnX3dj aGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNzcGFjZSh3Yyk7 CisJcmV0dXJuIHBnX3VfaXNzcGFjZSh0b19jaGFyMzIod2MpKTsKIH0KIAogc3RhdGljIGJvb2wK IHdjX2lzeGRpZ2l0X2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsK LQlyZXR1cm4gcGdfdV9pc3hkaWdpdCh3YywgIWxvY2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwp OworCXJldHVybiBwZ191X2lzeGRpZ2l0KHRvX2NoYXIzMih3YyksICFsb2NhbGUtPmJ1aWx0aW4u Y2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIGJvb2wKQEAgLTE3OSwxMyArMTk1LDEzIEBAIGNo YXJfaXNfY2FzZWRfYnVpbHRpbihjaGFyIGNoLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiBzdGF0aWMg cGdfd2NoYXIKIHdjX3RvdXBwZXJfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9j YWxlKQogewotCXJldHVybiB1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUod2MpOworCXJldHVybiB0 b19wZ193Y2hhcih1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUodG9fY2hhcjMyKHdjKSkpOwogfQog CiBzdGF0aWMgcGdfd2NoYXIKIHdjX3RvbG93ZXJfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9j YWxlX3QgbG9jYWxlKQogewotCXJldHVybiB1bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUod2MpOwor CXJldHVybiB0b19wZ193Y2hhcih1bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUodG9fY2hhcjMyKHdj KSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN0eXBlX21ldGhvZHMgY3R5cGVfbWV0aG9k c19idWlsdGluID0gewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKaW5kZXggMmMzOThjZDllNWMuLjhk NzM1Nzg2ZTUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvdmFybGVuYS5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMKQEAgLTU0MTksMTIgKzU0MTksMTIg QEAgdW5pY29kZV9hc3NpZ25lZChQR19GVU5DVElPTl9BUkdTKQogCQllcmVwb3J0KEVSUk9SLAog CQkJCShlcnJtc2coIlVuaWNvZGUgY2F0ZWdvcml6YXRpb24gY2FuIG9ubHkgYmUgcGVyZm9ybWVk IGlmIHNlcnZlciBlbmNvZGluZyBpcyBVVEY4IikpKTsKIAotCS8qIGNvbnZlcnQgdG8gcGdfd2No YXIgKi8KKwkvKiBjb252ZXJ0IHRvIGNoYXIzMl90ICovCiAJc2l6ZSA9IHBnX21ic3RybGVuX3dp dGhfbGVuKFZBUkRBVEFfQU5ZKGlucHV0KSwgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpKTsKIAlw ID0gKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkoaW5wdXQpOwogCWZvciAoaW50IGkgPSAw OyBpIDwgc2l6ZTsgaSsrKQogCXsKLQkJcGdfd2NoYXIJdWNoYXIgPSB1dGY4X3RvX3VuaWNvZGUo cCk7CisJCWNoYXIzMl90CXVjaGFyID0gdXRmOF90b191bmljb2RlKHApOwogCQlpbnQJCQljYXRl Z29yeSA9IHVuaWNvZGVfY2F0ZWdvcnkodWNoYXIpOwogCiAJCWlmIChjYXRlZ29yeSA9PSBQR19V X1VOQVNTSUdORUQpCkBAIC01NDQzLDI0ICs1NDQzLDI0IEBAIHVuaWNvZGVfbm9ybWFsaXplX2Z1 bmMoUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpmb3Jtc3RyID0gdGV4dF90b19jc3RyaW5n KFBHX0dFVEFSR19URVhUX1BQKDEpKTsKIAlVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybTsK IAlpbnQJCQlzaXplOwotCXBnX3djaGFyICAgKmlucHV0X2NoYXJzOwotCXBnX3djaGFyICAgKm91 dHB1dF9jaGFyczsKKwljaGFyMzJfdCAgICppbnB1dF9jaGFyczsKKwljaGFyMzJfdCAgICpvdXRw dXRfY2hhcnM7CiAJdW5zaWduZWQgY2hhciAqcDsKIAl0ZXh0CSAgICpyZXN1bHQ7CiAJaW50CQkJ aTsKIAogCWZvcm0gPSB1bmljb2RlX25vcm1fZm9ybV9mcm9tX3N0cmluZyhmb3Jtc3RyKTsKIAot CS8qIGNvbnZlcnQgdG8gcGdfd2NoYXIgKi8KKwkvKiBjb252ZXJ0IHRvIGNoYXIzMl90ICovCiAJ c2l6ZSA9IHBnX21ic3RybGVuX3dpdGhfbGVuKFZBUkRBVEFfQU5ZKGlucHV0KSwgVkFSU0laRV9B TllfRVhIRFIoaW5wdXQpKTsKLQlpbnB1dF9jaGFycyA9IHBhbGxvYygoc2l6ZSArIDEpICogc2l6 ZW9mKHBnX3djaGFyKSk7CisJaW5wdXRfY2hhcnMgPSBwYWxsb2MoKHNpemUgKyAxKSAqIHNpemVv ZihjaGFyMzJfdCkpOwogCXAgPSAodW5zaWduZWQgY2hhciAqKSBWQVJEQVRBX0FOWShpbnB1dCk7 CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAl7CiAJCWlucHV0X2NoYXJzW2ldID0gdXRm OF90b191bmljb2RlKHApOwogCQlwICs9IHBnX3V0Zl9tYmxlbihwKTsKIAl9Ci0JaW5wdXRfY2hh cnNbaV0gPSAocGdfd2NoYXIpICdcMCc7CisJaW5wdXRfY2hhcnNbaV0gPSAoY2hhcjMyX3QpICdc MCc7CiAJQXNzZXJ0KChjaGFyICopIHAgPT0gVkFSREFUQV9BTlkoaW5wdXQpICsgVkFSU0laRV9B TllfRVhIRFIoaW5wdXQpKTsKIAogCS8qIGFjdGlvbiAqLwpAQCAtNTQ2OCw3ICs1NDY4LDcgQEAg dW5pY29kZV9ub3JtYWxpemVfZnVuYyhQR19GVU5DVElPTl9BUkdTKQogCiAJLyogY29udmVydCBi YWNrIHRvIFVURi04IHN0cmluZyAqLwogCXNpemUgPSAwOwotCWZvciAocGdfd2NoYXIgKndwID0g b3V0cHV0X2NoYXJzOyAqd3A7IHdwKyspCisJZm9yIChjaGFyMzJfdCAqd3AgPSBvdXRwdXRfY2hh cnM7ICp3cDsgd3ArKykKIAl7CiAJCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCkBAIC01NDgwLDcg KzU0ODAsNyBAQCB1bmljb2RlX25vcm1hbGl6ZV9mdW5jKFBHX0ZVTkNUSU9OX0FSR1MpCiAJU0VU X1ZBUlNJWkUocmVzdWx0LCBzaXplICsgVkFSSERSU1opOwogCiAJcCA9ICh1bnNpZ25lZCBjaGFy ICopIFZBUkRBVEFfQU5ZKHJlc3VsdCk7Ci0JZm9yIChwZ193Y2hhciAqd3AgPSBvdXRwdXRfY2hh cnM7ICp3cDsgd3ArKykKKwlmb3IgKGNoYXIzMl90ICp3cCA9IG91dHB1dF9jaGFyczsgKndwOyB3 cCsrKQogCXsKIAkJdW5pY29kZV90b191dGY4KCp3cCwgcCk7CiAJCXAgKz0gcGdfdXRmX21ibGVu KHApOwpAQCAtNTUwOSw4ICs1NTA5LDggQEAgdW5pY29kZV9pc19ub3JtYWxpemVkKFBHX0ZVTkNU SU9OX0FSR1MpCiAJY2hhcgkgICAqZm9ybXN0ciA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdf VEVYVF9QUCgxKSk7CiAJVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm07CiAJaW50CQkJc2l6 ZTsKLQlwZ193Y2hhciAgICppbnB1dF9jaGFyczsKLQlwZ193Y2hhciAgICpvdXRwdXRfY2hhcnM7 CisJY2hhcjMyX3QgICAqaW5wdXRfY2hhcnM7CisJY2hhcjMyX3QgICAqb3V0cHV0X2NoYXJzOwog CXVuc2lnbmVkIGNoYXIgKnA7CiAJaW50CQkJaTsKIAlVbmljb2RlTm9ybWFsaXphdGlvblFDIHF1 aWNrY2hlY2s7CkBAIC01NTE5LDE2ICs1NTE5LDE2IEBAIHVuaWNvZGVfaXNfbm9ybWFsaXplZChQ R19GVU5DVElPTl9BUkdTKQogCiAJZm9ybSA9IHVuaWNvZGVfbm9ybV9mb3JtX2Zyb21fc3RyaW5n KGZvcm1zdHIpOwogCi0JLyogY29udmVydCB0byBwZ193Y2hhciAqLworCS8qIGNvbnZlcnQgdG8g Y2hhcjMyX3QgKi8KIAlzaXplID0gcGdfbWJzdHJsZW5fd2l0aF9sZW4oVkFSREFUQV9BTlkoaW5w dXQpLCBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwotCWlucHV0X2NoYXJzID0gcGFsbG9jKChz aXplICsgMSkgKiBzaXplb2YocGdfd2NoYXIpKTsKKwlpbnB1dF9jaGFycyA9IHBhbGxvYygoc2l6 ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7CiAJcCA9ICh1bnNpZ25lZCBjaGFyICopIFZBUkRB VEFfQU5ZKGlucHV0KTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCXsKIAkJaW5wdXRf Y2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CiAJCXAgKz0gcGdfdXRmX21ibGVuKHApOwog CX0KLQlpbnB1dF9jaGFyc1tpXSA9IChwZ193Y2hhcikgJ1wwJzsKKwlpbnB1dF9jaGFyc1tpXSA9 IChjaGFyMzJfdCkgJ1wwJzsKIAlBc3NlcnQoKGNoYXIgKikgcCA9PSBWQVJEQVRBX0FOWShpbnB1 dCkgKyBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwogCiAJLyogcXVpY2sgY2hlY2sgKHNlZSBV QVggIzE1KSAqLwpAQCAtNTU0MiwxMSArNTU0MiwxMSBAQCB1bmljb2RlX2lzX25vcm1hbGl6ZWQo UEdfRlVOQ1RJT05fQVJHUykKIAlvdXRwdXRfY2hhcnMgPSB1bmljb2RlX25vcm1hbGl6ZShmb3Jt LCBpbnB1dF9jaGFycyk7CiAKIAlvdXRwdXRfc2l6ZSA9IDA7Ci0JZm9yIChwZ193Y2hhciAqd3Ag PSBvdXRwdXRfY2hhcnM7ICp3cDsgd3ArKykKKwlmb3IgKGNoYXIzMl90ICp3cCA9IG91dHB1dF9j aGFyczsgKndwOyB3cCsrKQogCQlvdXRwdXRfc2l6ZSsrOwogCiAJcmVzdWx0ID0gKHNpemUgPT0g b3V0cHV0X3NpemUpICYmCi0JCShtZW1jbXAoaW5wdXRfY2hhcnMsIG91dHB1dF9jaGFycywgc2l6 ZSAqIHNpemVvZihwZ193Y2hhcikpID09IDApOworCQkobWVtY21wKGlucHV0X2NoYXJzLCBvdXRw dXRfY2hhcnMsIHNpemUgKiBzaXplb2YoY2hhcjMyX3QpKSA9PSAwKTsKIAogCVBHX1JFVFVSTl9C T09MKHJlc3VsdCk7CiB9CkBAIC01NjAyLDcgKzU2MDIsNyBAQCB1bmlzdHIoUEdfRlVOQ1RJT05f QVJHUykKIAlpbnQJCQlsZW47CiAJU3RyaW5nSW5mb0RhdGEgc3RyOwogCXRleHQJICAgKnJlc3Vs dDsKLQlwZ193Y2hhcglwYWlyX2ZpcnN0ID0gMDsKKwljaGFyMTZfdAlwYWlyX2ZpcnN0ID0gMDsK IAljaGFyCQljYnVmW01BWF9VTklDT0RFX0VRVUlWQUxFTlRfU1RSSU5HICsgMV07CiAKIAlpbnN0 ciA9IFZBUkRBVEFfQU5ZKGlucHV0X3RleHQpOwpAQCAtNTYyNiw3ICs1NjI2LDcgQEAgdW5pc3Ry KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQllbHNlIGlmICgobGVuID49IDUgJiYgaXN4ZGlnaXRzX24o aW5zdHIgKyAxLCA0KSkgfHwKIAkJCQkJIChsZW4gPj0gNiAmJiBpbnN0clsxXSA9PSAndScgJiYg aXN4ZGlnaXRzX24oaW5zdHIgKyAyLCA0KSkpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29kZTsK KwkJCQljaGFyMzJfdAl1bmljb2RlOwogCQkJCWludAkJCW9mZnNldCA9IGluc3RyWzFdID09ICd1 JyA/IDIgOiAxOwogCiAJCQkJdW5pY29kZSA9IGhleHZhbF9uKGluc3RyICsgb2Zmc2V0LCA0KTsK QEAgLTU2NjIsNyArNTY2Miw3IEBAIHVuaXN0cihQR19GVU5DVElPTl9BUkdTKQogCQkJfQogCQkJ ZWxzZSBpZiAobGVuID49IDggJiYgaW5zdHJbMV0gPT0gJysnICYmIGlzeGRpZ2l0c19uKGluc3Ry ICsgMiwgNikpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29kZTsKKwkJCQljaGFyMzJfdAl1bmlj b2RlOwogCiAJCQkJdW5pY29kZSA9IGhleHZhbF9uKGluc3RyICsgMiwgNik7CiAKQEAgLTU2OTcs NyArNTY5Nyw3IEBAIHVuaXN0cihQR19GVU5DVElPTl9BUkdTKQogCQkJfQogCQkJZWxzZSBpZiAo bGVuID49IDEwICYmIGluc3RyWzFdID09ICdVJyAmJiBpc3hkaWdpdHNfbihpbnN0ciArIDIsIDgp KQogCQkJewotCQkJCXBnX3djaGFyCXVuaWNvZGU7CisJCQkJY2hhcjMyX3QJdW5pY29kZTsKIAog CQkJCXVuaWNvZGUgPSBoZXh2YWxfbihpbnN0ciArIDIsIDgpOwogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxz LmMKaW5kZXggODg2ZWNiYWQ4NzEuLmZiNjI5ZWQ1YzhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9tYi9tYnV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGlscy5j CkBAIC04NjIsNyArODYyLDcgQEAgcGVyZm9ybV9kZWZhdWx0X2VuY29kaW5nX2NvbnZlcnNpb24o Y29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLAogICogbWF5IGNhbGwgdGhpcyBvdXRzaWRlIGFueSB0 cmFuc2FjdGlvbiwgb3IgaW4gYW4gYWJvcnRlZCB0cmFuc2FjdGlvbi4KICAqLwogdm9pZAotcGdf dW5pY29kZV90b19zZXJ2ZXIocGdfd2NoYXIgYywgdW5zaWduZWQgY2hhciAqcykKK3BnX3VuaWNv ZGVfdG9fc2VydmVyKGNoYXIzMl90IGMsIHVuc2lnbmVkIGNoYXIgKnMpCiB7CiAJdW5zaWduZWQg Y2hhciBjX2FzX3V0ZjhbTUFYX01VTFRJQllURV9DSEFSX0xFTiArIDFdOwogCWludAkJCWNfYXNf dXRmOF9sZW47CkBAIC05MjQsNyArOTI0LDcgQEAgcGdfdW5pY29kZV90b19zZXJ2ZXIocGdfd2No YXIgYywgdW5zaWduZWQgY2hhciAqcykKICAqIGJ1dCBzaW1wbHkgcmV0dXJuIGZhbHNlIG9uIGNv bnZlcnNpb24gZmFpbHVyZS4KICAqLwogYm9vbAotcGdfdW5pY29kZV90b19zZXJ2ZXJfbm9lcnJv cihwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICpzKQorcGdfdW5pY29kZV90b19zZXJ2ZXJfbm9l cnJvcihjaGFyMzJfdCBjLCB1bnNpZ25lZCBjaGFyICpzKQogewogCXVuc2lnbmVkIGNoYXIgY19h c191dGY4W01BWF9NVUxUSUJZVEVfQ0hBUl9MRU4gKyAxXTsKIAlpbnQJCQljX2FzX3V0ZjhfbGVu OwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9zYXNscHJlcC5jIGIvc3JjL2NvbW1vbi9zYXNscHJl cC5jCmluZGV4IDk3YmViNDc5NDBiLi4xMDFlOGQ2NWE0ZCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1v bi9zYXNscHJlcC5jCisrKyBiL3NyYy9jb21tb24vc2FzbHByZXAuYwpAQCAtNDcsNyArNDcsNyBA QAogCiAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQJY29k ZXBvaW50X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKLXN0YXRpYyBi b29sIGlzX2NvZGVfaW5fdGFibGUocGdfd2NoYXIgY29kZSwgY29uc3QgcGdfd2NoYXIgKm1hcCwg aW50IG1hcHNpemUpOworc3RhdGljIGJvb2wgaXNfY29kZV9pbl90YWJsZShjaGFyMzJfdCBjb2Rl LCBjb25zdCBjaGFyMzJfdCAqbWFwLCBpbnQgbWFwc2l6ZSk7CiBzdGF0aWMgaW50CXBnX3V0Zjhf c3RyaW5nX2xlbihjb25zdCBjaGFyICpzb3VyY2UpOwogCiAvKgpAQCAtNjQsNyArNjQsNyBAQCBz dGF0aWMgaW50CXBnX3V0Zjhfc3RyaW5nX2xlbihjb25zdCBjaGFyICpzb3VyY2UpOwogICoKICAq IFRoZXNlIGFyZSBhbGwgbWFwcGVkIHRvIHRoZSBBU0NJSSBzcGFjZSBjaGFyYWN0ZXIgKFUrMDBB MCkuCiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBub25fYXNjaWlfc3BhY2VfcmFuZ2VzW10g PQorc3RhdGljIGNvbnN0IGNoYXIzMl90IG5vbl9hc2NpaV9zcGFjZV9yYW5nZXNbXSA9CiB7CiAJ MHgwMEEwLCAweDAwQTAsCiAJMHgxNjgwLCAweDE2ODAsCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRp YyBjb25zdCBwZ193Y2hhciBub25fYXNjaWlfc3BhY2VfcmFuZ2VzW10gPQogICoKICAqIElmIGFu eSBvZiB0aGVzZSBhcHBlYXIgaW4gdGhlIGlucHV0LCB0aGV5IGFyZSByZW1vdmVkLgogICovCi1z dGF0aWMgY29uc3QgcGdfd2NoYXIgY29tbW9ubHlfbWFwcGVkX3RvX25vdGhpbmdfcmFuZ2VzW10g PQorc3RhdGljIGNvbnN0IGNoYXIzMl90IGNvbW1vbmx5X21hcHBlZF90b19ub3RoaW5nX3Jhbmdl c1tdID0KIHsKIAkweDAwQUQsIDB4MDBBRCwKIAkweDAzNEYsIDB4MDM0RiwKQEAgLTExNCw3ICsx MTQsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgY29tbW9ubHlfbWFwcGVkX3RvX25vdGhpbmdf cmFuZ2VzW10gPQogICogdGFibGVzLCBzbyBvbmUgY29kZSBtaWdodCBvcmlnaW5hdGUgZnJvbSBt dWx0aXBsZSBzb3VyY2UgdGFibGVzLgogICogQWRqYWNlbnQgcmFuZ2VzIGhhdmUgYWxzbyBiZWVu IG1lcmdlZCB0b2dldGhlciwgdG8gc2F2ZSBzcGFjZS4KICAqLwotc3RhdGljIGNvbnN0IHBnX3dj aGFyIHByb2hpYml0ZWRfb3V0cHV0X3Jhbmdlc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBw cm9oaWJpdGVkX291dHB1dF9yYW5nZXNbXSA9CiB7CiAJMHgwMDAwLCAweDAwMUYsCQkJCS8qIEMu Mi4xICovCiAJMHgwMDdGLCAweDAwQTAsCQkJCS8qIEMuMS4yLCBDLjIuMSwgQy4yLjIgKi8KQEAg LTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgcHJvaGliaXRlZF9vdXRwdXRf cmFuZ2VzW10gPQogfTsKIAogLyogQS4xIFVuYXNzaWduZWQgY29kZSBwb2ludHMgaW4gVW5pY29k ZSAzLjIgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciB1bmFzc2lnbmVkX2NvZGVwb2ludF9yYW5n ZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgdW5hc3NpZ25lZF9jb2RlcG9pbnRfcmFuZ2Vz W10gPQogewogCTB4MDIyMSwgMHgwMjIxLAogCTB4MDIzNCwgMHgwMjRGLApAQCAtNTU2LDcgKzU1 Niw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciB1bmFzc2lnbmVkX2NvZGVwb2ludF9yYW5nZXNb XSA9CiB9OwogCiAvKiBELjEgQ2hhcmFjdGVycyB3aXRoIGJpZGlyZWN0aW9uYWwgcHJvcGVydHkg IlIiIG9yICJBTCIgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBSYW5kQUxDYXRfY29kZXBvaW50 X3Jhbmdlc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBSYW5kQUxDYXRfY29kZXBvaW50X3Jh bmdlc1tdID0KIHsKIAkweDA1QkUsIDB4MDVCRSwKIAkweDA1QzAsIDB4MDVDMCwKQEAgLTU5NSw3 ICs1OTUsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgUmFuZEFMQ2F0X2NvZGVwb2ludF9yYW5n ZXNbXSA9CiB9OwogCiAvKiBELjIgQ2hhcmFjdGVycyB3aXRoIGJpZGlyZWN0aW9uYWwgcHJvcGVy dHkgIkwiICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgTENhdF9jb2RlcG9pbnRfcmFuZ2VzW10g PQorc3RhdGljIGNvbnN0IGNoYXIzMl90IExDYXRfY29kZXBvaW50X3Jhbmdlc1tdID0KIHsKIAkw eDAwNDEsIDB4MDA1QSwKIAkweDAwNjEsIDB4MDA3QSwKQEAgLTk2OCw4ICs5NjgsOCBAQCBzdGF0 aWMgY29uc3QgcGdfd2NoYXIgTENhdF9jb2RlcG9pbnRfcmFuZ2VzW10gPQogc3RhdGljIGludAog Y29kZXBvaW50X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewotCWNv bnN0IHBnX3djaGFyICprZXkgPSAoY29uc3QgcGdfd2NoYXIgKikgYTsKLQljb25zdCBwZ193Y2hh ciAqcmFuZ2UgPSAoY29uc3QgcGdfd2NoYXIgKikgYjsKKwljb25zdCBjaGFyMzJfdCAqa2V5ID0g KGNvbnN0IGNoYXIzMl90ICopIGE7CisJY29uc3QgY2hhcjMyX3QgKnJhbmdlID0gKGNvbnN0IGNo YXIzMl90ICopIGI7CiAKIAlpZiAoKmtleSA8IHJhbmdlWzBdKQogCQlyZXR1cm4gLTE7CQkJCS8q IGxlc3MgdGhhbiBsb3dlciBib3VuZCAqLwpAQCAtOTgwLDE0ICs5ODAsMTQgQEAgY29kZXBvaW50 X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogfQogCiBzdGF0aWMgYm9v bAotaXNfY29kZV9pbl90YWJsZShwZ193Y2hhciBjb2RlLCBjb25zdCBwZ193Y2hhciAqbWFwLCBp bnQgbWFwc2l6ZSkKK2lzX2NvZGVfaW5fdGFibGUoY2hhcjMyX3QgY29kZSwgY29uc3QgY2hhcjMy X3QgKm1hcCwgaW50IG1hcHNpemUpCiB7CiAJQXNzZXJ0KG1hcHNpemUgJSAyID09IDApOwogCiAJ aWYgKGNvZGUgPCBtYXBbMF0gfHwgY29kZSA+IG1hcFttYXBzaXplIC0gMV0pCiAJCXJldHVybiBm YWxzZTsKIAotCWlmIChic2VhcmNoKCZjb2RlLCBtYXAsIG1hcHNpemUgLyAyLCBzaXplb2YocGdf d2NoYXIpICogMiwKKwlpZiAoYnNlYXJjaCgmY29kZSwgbWFwLCBtYXBzaXplIC8gMiwgc2l6ZW9m KGNoYXIzMl90KSAqIDIsCiAJCQkJY29kZXBvaW50X3JhbmdlX2NtcCkpCiAJCXJldHVybiB0cnVl OwogCWVsc2UKQEAgLTEwNDYsOCArMTA0Niw4IEBAIHBnX3V0Zjhfc3RyaW5nX2xlbihjb25zdCBj aGFyICpzb3VyY2UpCiBwZ19zYXNscHJlcF9yYwogcGdfc2FzbHByZXAoY29uc3QgY2hhciAqaW5w dXQsIGNoYXIgKipvdXRwdXQpCiB7Ci0JcGdfd2NoYXIgICAqaW5wdXRfY2hhcnMgPSBOVUxMOwot CXBnX3djaGFyICAgKm91dHB1dF9jaGFycyA9IE5VTEw7CisJY2hhcjMyX3QgICAqaW5wdXRfY2hh cnMgPSBOVUxMOworCWNoYXIzMl90ICAgKm91dHB1dF9jaGFycyA9IE5VTEw7CiAJaW50CQkJaW5w dXRfc2l6ZTsKIAljaGFyCSAgICpyZXN1bHQ7CiAJaW50CQkJcmVzdWx0X3NpemU7CkBAIC0xMDU1 LDcgKzEwNTUsNyBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1 dCkKIAlpbnQJCQlpOwogCWJvb2wJCWNvbnRhaW5zX1JhbmRBTENhdDsKIAl1bnNpZ25lZCBjaGFy ICpwOwotCXBnX3djaGFyICAgKndwOworCWNoYXIzMl90ICAgKndwOwogCiAJLyogRW5zdXJlIHdl IHJldHVybiAqb3V0cHV0IGFzIE5VTEwgb24gZmFpbHVyZSAqLwogCSpvdXRwdXQgPSBOVUxMOwpA QCAtMTA4MCwxMCArMTA4MCwxMCBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hh ciAqKm91dHB1dCkKIAlpbnB1dF9zaXplID0gcGdfdXRmOF9zdHJpbmdfbGVuKGlucHV0KTsKIAlp ZiAoaW5wdXRfc2l6ZSA8IDApCiAJCXJldHVybiBTQVNMUFJFUF9JTlZBTElEX1VURjg7Ci0JaWYg KGlucHV0X3NpemUgPj0gTWF4QWxsb2NTaXplIC8gc2l6ZW9mKHBnX3djaGFyKSkKKwlpZiAoaW5w dXRfc2l6ZSA+PSBNYXhBbGxvY1NpemUgLyBzaXplb2YoY2hhcjMyX3QpKQogCQlnb3RvIG9vbTsK IAotCWlucHV0X2NoYXJzID0gQUxMT0MoKGlucHV0X3NpemUgKyAxKSAqIHNpemVvZihwZ193Y2hh cikpOworCWlucHV0X2NoYXJzID0gQUxMT0MoKGlucHV0X3NpemUgKyAxKSAqIHNpemVvZihjaGFy MzJfdCkpOwogCWlmICghaW5wdXRfY2hhcnMpCiAJCWdvdG8gb29tOwogCkBAIC0xMDkzLDcgKzEw OTMsNyBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkKIAkJ aW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CiAJCXAgKz0gcGdfdXRmX21ibGVu KHApOwogCX0KLQlpbnB1dF9jaGFyc1tpXSA9IChwZ193Y2hhcikgJ1wwJzsKKwlpbnB1dF9jaGFy c1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKIAogCS8qCiAJICogVGhlIHN0ZXBzIGJlbG93IGNvcnJl c3BvbmQgdG8gdGhlIHN0ZXBzIGxpc3RlZCBpbiBbUkZDMzQ1NF0sIFNlY3Rpb24KQEAgLTExMDcs NyArMTEwNyw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0 KQogCWNvdW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgaW5wdXRfc2l6ZTsgaSsrKQogCXsKLQkJ cGdfd2NoYXIJY29kZSA9IGlucHV0X2NoYXJzW2ldOworCQljaGFyMzJfdAljb2RlID0gaW5wdXRf Y2hhcnNbaV07CiAKIAkJaWYgKElTX0NPREVfSU5fVEFCTEUoY29kZSwgbm9uX2FzY2lpX3NwYWNl X3JhbmdlcykpCiAJCQlpbnB1dF9jaGFyc1tjb3VudCsrXSA9IDB4MDAyMDsKQEAgLTExMTgsNyAr MTExOCw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQog CQllbHNlCiAJCQlpbnB1dF9jaGFyc1tjb3VudCsrXSA9IGNvZGU7CiAJfQotCWlucHV0X2NoYXJz W2NvdW50XSA9IChwZ193Y2hhcikgJ1wwJzsKKwlpbnB1dF9jaGFyc1tjb3VudF0gPSAoY2hhcjMy X3QpICdcMCc7CiAJaW5wdXRfc2l6ZSA9IGNvdW50OwogCiAJaWYgKGlucHV0X3NpemUgPT0gMCkK QEAgLTExMzgsNyArMTEzOCw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIgKmlucHV0LCBjaGFy ICoqb3V0cHV0KQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBpbnB1dF9zaXplOyBpKyspCiAJewot CQlwZ193Y2hhcgljb2RlID0gaW5wdXRfY2hhcnNbaV07CisJCWNoYXIzMl90CWNvZGUgPSBpbnB1 dF9jaGFyc1tpXTsKIAogCQlpZiAoSVNfQ09ERV9JTl9UQUJMRShjb2RlLCBwcm9oaWJpdGVkX291 dHB1dF9yYW5nZXMpKQogCQkJZ290byBwcm9oaWJpdGVkOwpAQCAtMTE3MCw3ICsxMTcwLDcgQEAg cGdfc2FzbHByZXAoY29uc3QgY2hhciAqaW5wdXQsIGNoYXIgKipvdXRwdXQpCiAJY29udGFpbnNf UmFuZEFMQ2F0ID0gZmFsc2U7CiAJZm9yIChpID0gMDsgaSA8IGlucHV0X3NpemU7IGkrKykKIAl7 Ci0JCXBnX3djaGFyCWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKKwkJY2hhcjMyX3QJY29kZSA9IGlu cHV0X2NoYXJzW2ldOwogCiAJCWlmIChJU19DT0RFX0lOX1RBQkxFKGNvZGUsIFJhbmRBTENhdF9j b2RlcG9pbnRfcmFuZ2VzKSkKIAkJewpAQCAtMTE4MSwxMiArMTE4MSwxMiBAQCBwZ19zYXNscHJl cChjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkKIAogCWlmIChjb250YWluc19SYW5k QUxDYXQpCiAJewotCQlwZ193Y2hhcglmaXJzdCA9IGlucHV0X2NoYXJzWzBdOwotCQlwZ193Y2hh cglsYXN0ID0gaW5wdXRfY2hhcnNbaW5wdXRfc2l6ZSAtIDFdOworCQljaGFyMzJfdAlmaXJzdCA9 IGlucHV0X2NoYXJzWzBdOworCQljaGFyMzJfdAlsYXN0ID0gaW5wdXRfY2hhcnNbaW5wdXRfc2l6 ZSAtIDFdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBpbnB1dF9zaXplOyBpKyspCiAJCXsKLQkJCXBn X3djaGFyCWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKKwkJCWNoYXIzMl90CWNvZGUgPSBpbnB1dF9j aGFyc1tpXTsKIAogCQkJaWYgKElTX0NPREVfSU5fVEFCTEUoY29kZSwgTENhdF9jb2RlcG9pbnRf cmFuZ2VzKSkKIAkJCQlnb3RvIHByb2hpYml0ZWQ7CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3Vu aWNvZGUvY2FzZV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMKaW5kZXgg ZmRmYjYyZTg1NTIuLjAwZDRmODVlNWE1IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGUv Y2FzZV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2Nhc2VfdGVzdC5jCkBAIC0yNCw2 ICsyNCw3IEBACiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgogI2luY2x1ZGUgImNv bW1vbi91bmljb2RlX2NhdGVnb3J5LmgiCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfdmVyc2lv bi5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAKIC8qIGVub3VnaCB0byBob2xkIGxhcmdl c3Qgc291cmNlIG9yIHJlc3VsdCBzdHJpbmcsIGluY2x1ZGluZyBOVUwgKi8KICNkZWZpbmUgQlVG U1ogMjU2CkBAIC01NCw3ICs1NSw3IEBAIGluaXRjYXBfd2JuZXh0KHZvaWQgKnN0YXRlKQogCXdo aWxlICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4gJiYKIAkJICAgd2JzdGF0ZS0+c3Ry W3dic3RhdGUtPm9mZnNldF0gIT0gJ1wwJykKIAl7Ci0JCXBnX3djaGFyCXUgPSB1dGY4X3RvX3Vu aWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsKKwkJY2hhcjMyX3QJdSA9IHV0 ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKwogCQkJCQkJCQkJ CXdic3RhdGUtPm9mZnNldCk7CiAJCWJvb2wJCWN1cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwg d2JzdGF0ZS0+cG9zaXgpOwogCkBAIC03NywxNiArNzgsMTYgQEAgaW5pdGNhcF93Ym5leHQodm9p ZCAqc3RhdGUpCiAjaWZkZWYgVVNFX0lDVQogCiBzdGF0aWMgdm9pZAotaWN1X3Rlc3Rfc2ltcGxl KHBnX3djaGFyIGNvZGUpCitpY3VfdGVzdF9zaW1wbGUoY2hhcjMyX3QgY29kZSkKIHsKLQlwZ193 Y2hhcglsb3dlciA9IHVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShjb2RlKTsKLQlwZ193Y2hhcgl0 aXRsZSA9IHVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjb2RlKTsKLQlwZ193Y2hhcgl1cHBlciA9 IHVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZShjb2RlKTsKLQlwZ193Y2hhcglmb2xkID0gdW5pY29k ZV9jYXNlZm9sZF9zaW1wbGUoY29kZSk7Ci0JcGdfd2NoYXIJaWN1bG93ZXIgPSB1X3RvbG93ZXIo Y29kZSk7Ci0JcGdfd2NoYXIJaWN1dGl0bGUgPSB1X3RvdGl0bGUoY29kZSk7Ci0JcGdfd2NoYXIJ aWN1dXBwZXIgPSB1X3RvdXBwZXIoY29kZSk7Ci0JcGdfd2NoYXIJaWN1Zm9sZCA9IHVfZm9sZENh c2UoY29kZSwgVV9GT0xEX0NBU0VfREVGQVVMVCk7CisJY2hhcjMyX3QJbG93ZXIgPSB1bmljb2Rl X2xvd2VyY2FzZV9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJdGl0bGUgPSB1bmljb2RlX3RpdGxl Y2FzZV9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJdXBwZXIgPSB1bmljb2RlX3VwcGVyY2FzZV9z aW1wbGUoY29kZSk7CisJY2hhcjMyX3QJZm9sZCA9IHVuaWNvZGVfY2FzZWZvbGRfc2ltcGxlKGNv ZGUpOworCWNoYXIzMl90CWljdWxvd2VyID0gdV90b2xvd2VyKGNvZGUpOworCWNoYXIzMl90CWlj dXRpdGxlID0gdV90b3RpdGxlKGNvZGUpOworCWNoYXIzMl90CWljdXVwcGVyID0gdV90b3VwcGVy KGNvZGUpOworCWNoYXIzMl90CWljdWZvbGQgPSB1X2ZvbGRDYXNlKGNvZGUsIFVfRk9MRF9DQVNF X0RFRkFVTFQpOwogCiAJaWYgKGxvd2VyICE9IGljdWxvd2VyIHx8IHRpdGxlICE9IGljdXRpdGxl IHx8IHVwcGVyICE9IGljdXVwcGVyIHx8CiAJCWZvbGQgIT0gaWN1Zm9sZCkKQEAgLTE3Miw3ICsx NzMsNyBAQCB0ZXN0X2ljdSh2b2lkKQogCWludAkJCXN1Y2Nlc3NmdWwgPSAwOwogCWludAkJCXNr aXBwZWRfbWlzbWF0Y2ggPSAwOwogCi0JZm9yIChwZ193Y2hhciBjb2RlID0gMDsgY29kZSA8PSAw eDEwZmZmZjsgY29kZSsrKQorCWZvciAoY2hhcjMyX3QgY29kZSA9IDA7IGNvZGUgPD0gMHgxMGZm ZmY7IGNvZGUrKykKIAl7CiAJCXBnX3VuaWNvZGVfY2F0ZWdvcnkgY2F0ZWdvcnkgPSB1bmljb2Rl X2NhdGVnb3J5KGNvZGUpOwogCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvY2F0ZWdv cnlfdGVzdC5jIGIvc3JjL2NvbW1vbi91bmljb2RlL2NhdGVnb3J5X3Rlc3QuYwppbmRleCA1ZDM3 YmEzOTE5Ni4uMWU4YzFmNzkwNWYgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9jYXRl Z29yeV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2NhdGVnb3J5X3Rlc3QuYwpAQCAt MjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaCIKICNp bmNsdWRlICJjb21tb24vdW5pY29kZV92ZXJzaW9uLmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKIAogc3RhdGljIGludAlwZ191bmljb2RlX3ZlcnNpb24gPSAwOwogI2lmZGVmIFVTRV9JQ1UK QEAgLTU5LDcgKzYwLDcgQEAgaWN1X3Rlc3QoKQogCWludAkJCXBnX3NraXBwZWRfY29kZXBvaW50 cyA9IDA7CiAJaW50CQkJaWN1X3NraXBwZWRfY29kZXBvaW50cyA9IDA7CiAKLQlmb3IgKHBnX3dj aGFyIGNvZGUgPSAwOyBjb2RlIDw9IDB4MTBmZmZmOyBjb2RlKyspCisJZm9yIChjaGFyMzJfdCBj b2RlID0gMDsgY29kZSA8PSAweDEwZmZmZjsgY29kZSsrKQogCXsKIAkJdWludDhfdAkJcGdfY2F0 ZWdvcnkgPSB1bmljb2RlX2NhdGVnb3J5KGNvZGUpOwogCQl1aW50OF90CQlpY3VfY2F0ZWdvcnkg PSB1X2NoYXJUeXBlKGNvZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVy YXRlLW5vcm1fdGVzdF90YWJsZS5wbCBiL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS1ub3Jt X3Rlc3RfdGFibGUucGwKaW5kZXggMWI0MDFiZTk0MDkuLjFhOGI5MDhmZjMzIDEwMDY0NAotLS0g YS9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtbm9ybV90ZXN0X3RhYmxlLnBsCisrKyBiL3Ny Yy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS1ub3JtX3Rlc3RfdGFibGUucGwKQEAgLTQ3LDggKzQ3 LDggQEAgcHJpbnQgJE9VVFBVVCA8PEhFQURFUjsKIHR5cGVkZWYgc3RydWN0CiB7CiAJaW50CQkJ bGluZW51bTsKLQlwZ193Y2hhcglpbnB1dFs1MF07Ci0JcGdfd2NoYXIJb3V0cHV0WzRdWzUwXTsK KwljaGFyMzJfdAlpbnB1dFs1MF07CisJY2hhcjMyX3QJb3V0cHV0WzRdWzUwXTsKIH0gcGdfdW5p Y29kZV90ZXN0OwogCiAvKiB0ZXN0IHRhYmxlICovCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3Vu aWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxlLnBsIGIvc3JjL2NvbW1vbi91bmljb2Rl L2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbAppbmRleCA1ZDlkZGQ2MjgwMy4uZjcxZWIy NWM5NGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nh c2VfdGFibGUucGwKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2Fz ZV90YWJsZS5wbApAQCAtMjcwLDcgKzI3MCw2IEBAIHByaW50ICRPVCA8PCJFT1MiOwogICovCiAK ICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXNlLmgiCi0jaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKIAogLyoKICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2RlcG9pbnRzIHRoYXQgY2FuIHJl c3VsdCBmcm9tIGNhc2UgbWFwcGluZwpAQCAtMjk3LDcgKzI5Niw3IEBAIHR5cGVkZWYgZW51bQog dHlwZWRlZiBzdHJ1Y3QKIHsKIAlpbnQxNgkJY29uZGl0aW9uczsKLQlwZ193Y2hhcgltYXBbTkNh c2VLaW5kXVtNQVhfQ0FTRV9FWFBBTlNJT05dOworCWNoYXIzMl90CW1hcFtOQ2FzZUtpbmRdW01B WF9DQVNFX0VYUEFOU0lPTl07CiB9IHBnX3NwZWNpYWxfY2FzZTsKIAogLyoKQEAgLTQzMCw3ICs0 MjksNyBAQCBmb3JlYWNoIG15ICRraW5kICgnbG93ZXInLCAndGl0bGUnLCAndXBwZXInLCAnZm9s ZCcpCiAgKiBUaGUgZW50cnkgY2FzZV9tYXBfJHtraW5kfVtjYXNlX2luZGV4KGNvZGVwb2ludCld IGlzIHRoZSBtYXBwaW5nIGZvciB0aGUKICAqIGdpdmVuIGNvZGVwb2ludC4KICAqLwotc3RhdGlj IGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwXyRraW5kXFskaW5kZXhcXSA9CitzdGF0aWMgY29uc3Qg Y2hhcjMyX3QgY2FzZV9tYXBfJGtpbmRcWyRpbmRleFxdID0KIHsKIEVPUwogCkBAIC01MDIsNyAr NTAxLDcgQEAgcHJpbnQgJE9UIDw8IkVPUyI7CiAgKiB0aGUgb2Zmc2V0IGludG8gdGhlIG1hcHBp bmcgdGFibGVzLgogICovCiBzdGF0aWMgaW5saW5lIHVpbnQxNgotY2FzZV9pbmRleChwZ193Y2hh ciBjcCkKK2Nhc2VfaW5kZXgoY2hhcjMyX3QgY3ApCiB7CiAJLyogRmFzdCBwYXRoIGZvciBjb2Rl cG9pbnRzIDwgJGZhc3RwYXRoX2xpbWl0ICovCiAJaWYgKGNwIDwgJGZhc3RwYXRoX2xpbWl0KQpk aWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2F0ZWdvcnlf dGFibGUucGwgYi9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXRlZ29yeV90 YWJsZS5wbAppbmRleCBhYmFiNWNkOTY5Ni4uN2UwOTRiMTM3MjAgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2NhdGVnb3J5X3RhYmxlLnBsCisrKyBiL3Ny Yy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2NhdGVnb3J5X3RhYmxlLnBsCkBAIC0z NjYsMTUgKzM2NiwxNSBAQCBwcmludCAkT1QgPDwiRU9TIjsKICAqLwogdHlwZWRlZiBzdHJ1Y3QK IHsKLQl1aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCi0JdWludDMyCQls YXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJY2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5p Y29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50 ICovCiAJdWludDgJCWNhdGVnb3J5OwkJLyogR2VuZXJhbCBDYXRlZ29yeSAqLwogfSBwZ19jYXRl Z29yeV9yYW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1aW50MzIJCWZpcnN0OwkJCS8qIFVu aWNvZGUgY29kZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50 ICovCisJY2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJf dAlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiB9IHBnX3VuaWNvZGVfcmFuZ2U7CiAK IHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90ZXN0 LmMgYi9zcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90ZXN0LmMKaW5kZXggMjViYzU5NDYzZjIuLjA1 ODgxN2YxNzE5IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90ZXN0LmMKKysr IGIvc3JjL2NvbW1vbi91bmljb2RlL25vcm1fdGVzdC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5j bHVkZSAibm9ybV90ZXN0X3RhYmxlLmgiCiAKIHN0YXRpYyBjaGFyICoKLXByaW50X3djaGFyX3N0 cihjb25zdCBwZ193Y2hhciAqcykKK3ByaW50X3djaGFyX3N0cihjb25zdCBjaGFyMzJfdCAqcykK IHsKICNkZWZpbmUgQlVGX0RJR0lUUyA1MAogCXN0YXRpYyBjaGFyIGJ1ZltCVUZfRElHSVRTICog MTEgKyAxXTsKQEAgLTQxLDcgKzQxLDcgQEAgcHJpbnRfd2NoYXJfc3RyKGNvbnN0IHBnX3djaGFy ICpzKQogfQogCiBzdGF0aWMgaW50Ci1wZ193Y3NjbXAoY29uc3QgcGdfd2NoYXIgKnMxLCBjb25z dCBwZ193Y2hhciAqczIpCitwZ193Y3NjbXAoY29uc3QgY2hhcjMyX3QgKnMxLCBjb25zdCBjaGFy MzJfdCAqczIpCiB7CiAJZm9yICg7OykKIAl7CkBAIC02NSw3ICs2NSw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCXsKIAkJZm9yIChpbnQgZm9ybSA9IDA7IGZvcm0gPCA0OyBmb3Jt KyspCiAJCXsKLQkJCXBnX3djaGFyICAgKnJlc3VsdDsKKwkJCWNoYXIzMl90ICAgKnJlc3VsdDsK IAogCQkJcmVzdWx0ID0gdW5pY29kZV9ub3JtYWxpemUoZm9ybSwgdGVzdC0+aW5wdXQpOwogCmRp ZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jIGIvc3JjL2NvbW1vbi91bmljb2Rl X2Nhc2UuYwppbmRleCAwNzNmYWY2YTBkNS4uZTVlNDk0ZGI0M2MgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYwpAQCAt MzAsNyArMzAsNyBAQCBlbnVtIENhc2VNYXBSZXN1bHQKIC8qCiAgKiBNYXAgZm9yIGVhY2ggY2Fz ZSBraW5kLgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgKmNvbnN0IGNhc2VraW5kX21hcFtO Q2FzZUtpbmRdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCAqY29uc3QgY2FzZWtpbmRfbWFwW05D YXNlS2luZF0gPQogewogCVtDYXNlTG93ZXJdID0gY2FzZV9tYXBfbG93ZXIsCiAJW0Nhc2VUaXRs ZV0gPSBjYXNlX21hcF90aXRsZSwKQEAgLTM4LDQyICszOCw0MiBAQCBzdGF0aWMgY29uc3QgcGdf d2NoYXIgKmNvbnN0IGNhc2VraW5kX21hcFtOQ2FzZUtpbmRdID0KIAlbQ2FzZUZvbGRdID0gY2Fz ZV9tYXBfZm9sZCwKIH07CiAKLXN0YXRpYyBwZ193Y2hhciBmaW5kX2Nhc2VfbWFwKHBnX3djaGFy IHVjcywgY29uc3QgcGdfd2NoYXIgKm1hcCk7CitzdGF0aWMgY2hhcjMyX3QgZmluZF9jYXNlX21h cChjaGFyMzJfdCB1Y3MsIGNvbnN0IGNoYXIzMl90ICptYXApOwogc3RhdGljIHNpemVfdCBjb252 ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6 ZV90IHNyY2xlbiwKIAkJCQkJCSAgIENhc2VLaW5kIHN0cl9jYXNla2luZCwgYm9vbCBmdWxsLCBX b3JkQm91bmRhcnlOZXh0IHdibmV4dCwKIAkJCQkJCSAgIHZvaWQgKndic3RhdGUpOwotc3RhdGlj IGVudW0gQ2FzZU1hcFJlc3VsdCBjYXNlbWFwKHBnX3djaGFyIHUxLCBDYXNlS2luZCBjYXNla2lu ZCwgYm9vbCBmdWxsLAorc3RhdGljIGVudW0gQ2FzZU1hcFJlc3VsdCBjYXNlbWFwKGNoYXIzMl90 IHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAogCQkJCQkJCQkgIGNvbnN0IGNoYXIg KnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IHNyY29mZiwKLQkJCQkJCQkJICBwZ193Y2hhciAq c2ltcGxlLCBjb25zdCBwZ193Y2hhciAqKnNwZWNpYWwpOworCQkJCQkJCQkgIGNoYXIzMl90ICpz aW1wbGUsIGNvbnN0IGNoYXIzMl90ICoqc3BlY2lhbCk7CiAKLXBnX3djaGFyCi11bmljb2RlX2xv d2VyY2FzZV9zaW1wbGUocGdfd2NoYXIgY29kZSkKK2NoYXIzMl90Cit1bmljb2RlX2xvd2VyY2Fz ZV9zaW1wbGUoY2hhcjMyX3QgY29kZSkKIHsKLQlwZ193Y2hhcgljcCA9IGZpbmRfY2FzZV9tYXAo Y29kZSwgY2FzZV9tYXBfbG93ZXIpOworCWNoYXIzMl90CWNwID0gZmluZF9jYXNlX21hcChjb2Rl LCBjYXNlX21hcF9sb3dlcik7CiAKIAlyZXR1cm4gY3AgIT0gMCA/IGNwIDogY29kZTsKIH0KIAot cGdfd2NoYXIKLXVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShwZ193Y2hhciBjb2RlKQorY2hhcjMy X3QKK3VuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjaGFyMzJfdCBjb2RlKQogewotCXBnX3djaGFy CWNwID0gZmluZF9jYXNlX21hcChjb2RlLCBjYXNlX21hcF90aXRsZSk7CisJY2hhcjMyX3QJY3Ag PSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX3RpdGxlKTsKIAogCXJldHVybiBjcCAhPSAw ID8gY3AgOiBjb2RlOwogfQogCi1wZ193Y2hhcgotdW5pY29kZV91cHBlcmNhc2Vfc2ltcGxlKHBn X3djaGFyIGNvZGUpCitjaGFyMzJfdAordW5pY29kZV91cHBlcmNhc2Vfc2ltcGxlKGNoYXIzMl90 IGNvZGUpCiB7Ci0JcGdfd2NoYXIJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX3Vw cGVyKTsKKwljaGFyMzJfdAljcCA9IGZpbmRfY2FzZV9tYXAoY29kZSwgY2FzZV9tYXBfdXBwZXIp OwogCiAJcmV0dXJuIGNwICE9IDAgPyBjcCA6IGNvZGU7CiB9CiAKLXBnX3djaGFyCi11bmljb2Rl X2Nhc2Vmb2xkX3NpbXBsZShwZ193Y2hhciBjb2RlKQorY2hhcjMyX3QKK3VuaWNvZGVfY2FzZWZv bGRfc2ltcGxlKGNoYXIzMl90IGNvZGUpCiB7Ci0JcGdfd2NoYXIJY3AgPSBmaW5kX2Nhc2VfbWFw KGNvZGUsIGNhc2VfbWFwX2ZvbGQpOworCWNoYXIzMl90CWNwID0gZmluZF9jYXNlX21hcChjb2Rl LCBjYXNlX21hcF9mb2xkKTsKIAogCXJldHVybiBjcCAhPSAwID8gY3AgOiBjb2RlOwogfQpAQCAt MjMxLDEwICsyMzEsMTAgQEAgY29udmVydF9jYXNlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUs IGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAKIAl3aGlsZSAoKHNyY2xlbiA8IDAg fHwgc3Jjb2ZmIDwgc3JjbGVuKSAmJiBzcmNbc3Jjb2ZmXSAhPSAnXDAnKQogCXsKLQkJcGdfd2No YXIJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsK KwkJY2hhcjMyX3QJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgc3JjICsg c3Jjb2ZmKTsKIAkJaW50CQkJdTFsZW4gPSB1bmljb2RlX3V0ZjhsZW4odTEpOwotCQlwZ193Y2hh cglzaW1wbGUgPSAwOwotCQljb25zdCBwZ193Y2hhciAqc3BlY2lhbCA9IE5VTEw7CisJCWNoYXIz Ml90CXNpbXBsZSA9IDA7CisJCWNvbnN0IGNoYXIzMl90ICpzcGVjaWFsID0gTlVMTDsKIAkJZW51 bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXBfcmVzdWx0OwogCiAJCWlmIChzdHJfY2FzZWtpbmQgPT0g Q2FzZVRpdGxlKQpAQCAtMjY1LDggKzI2NSw4IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNp emVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogCQkJY2FzZSBD QVNFTUFQX1NJTVBMRToKIAkJCQl7CiAJCQkJCS8qIHJlcGxhY2Ugd2l0aCBzaW5nbGUgY2hhcmFj dGVyICovCi0JCQkJCXBnX3djaGFyCXUyID0gc2ltcGxlOwotCQkJCQlwZ193Y2hhcgl1MmxlbiA9 IHVuaWNvZGVfdXRmOGxlbih1Mik7CisJCQkJCWNoYXIzMl90CXUyID0gc2ltcGxlOworCQkJCQlj aGFyMzJfdAl1MmxlbiA9IHVuaWNvZGVfdXRmOGxlbih1Mik7CiAKIAkJCQkJQXNzZXJ0KHNwZWNp YWwgPT0gTlVMTCk7CiAJCQkJCWlmIChyZXN1bHRfbGVuICsgdTJsZW4gPD0gZHN0c2l6ZSkKQEAg LTI4MCw3ICsyODAsNyBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQlBc3NlcnQoc2ltcGxlID09IDAp OwogCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0NBU0VfRVhQQU5TSU9OICYmIHNwZWNpYWxb aV07IGkrKykKIAkJCQl7Ci0JCQkJCXBnX3djaGFyCXUyID0gc3BlY2lhbFtpXTsKKwkJCQkJY2hh cjMyX3QJdTIgPSBzcGVjaWFsW2ldOwogCQkJCQlzaXplX3QJCXUybGVuID0gdW5pY29kZV91dGY4 bGVuKHUyKTsKIAogCQkJCQlpZiAocmVzdWx0X2xlbiArIHUybGVuIDw9IGRzdHNpemUpCkBAIC0z MjAsNyArMzIwLDcgQEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3Ry LCBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCXsKIAkJaWYgKChzdHJbaV0gJiAweDgwKSA9 PSAwIHx8IChzdHJbaV0gJiAweEMwKSA9PSAweEMwKQogCQl7Ci0JCQlwZ193Y2hhcgljdXJyID0g dXRmOF90b191bmljb2RlKHN0ciArIGkpOworCQkJY2hhcjMyX3QJY3VyciA9IHV0ZjhfdG9fdW5p Y29kZShzdHIgKyBpKTsKIAogCQkJaWYgKHBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjdXJyKSkK IAkJCQljb250aW51ZTsKQEAgLTM0NCw3ICszNDQsNyBAQCBjaGVja19maW5hbF9zaWdtYShjb25z dCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBvZmZzZXQpCiAJewogCQlp ZiAoKHN0cltpXSAmIDB4ODApID09IDAgfHwgKHN0cltpXSAmIDB4QzApID09IDB4QzApCiAJCXsK LQkJCXBnX3djaGFyCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSk7CisJCQljaGFyMzJf dAljdXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwogCiAJCQlpZiAocGdfdV9wcm9wX2Nh c2VfaWdub3JhYmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzk0LDkgKzM5NCw5IEBAIGNo ZWNrX3NwZWNpYWxfY29uZGl0aW9ucyhpbnQgY29uZGl0aW9ucywgY29uc3QgY2hhciAqc3RyLCBz aXplX3QgbGVuLAogICogY2hhcmFjdGVyIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgogICovCiBzdGF0 aWMgZW51bSBDYXNlTWFwUmVzdWx0Ci1jYXNlbWFwKHBnX3djaGFyIHUxLCBDYXNlS2luZCBjYXNl a2luZCwgYm9vbCBmdWxsLAorY2FzZW1hcChjaGFyMzJfdCB1MSwgQ2FzZUtpbmQgY2FzZWtpbmQs IGJvb2wgZnVsbCwKIAkJY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3Qgc3Jj b2ZmLAotCQlwZ193Y2hhciAqc2ltcGxlLCBjb25zdCBwZ193Y2hhciAqKnNwZWNpYWwpCisJCWNo YXIzMl90ICpzaW1wbGUsIGNvbnN0IGNoYXIzMl90ICoqc3BlY2lhbCkKIHsKIAl1aW50MTYJCWlk eDsKIApAQCAtNDM0LDggKzQzNCw4IEBAIGNhc2VtYXAocGdfd2NoYXIgdTEsIENhc2VLaW5kIGNh c2VraW5kLCBib29sIGZ1bGwsCiAgKiBGaW5kIGVudHJ5IGluIHNpbXBsZSBjYXNlIG1hcC4KICAq IElmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdCwgMCB3aWxsIGJlIHJldHVybmVkLgogICovCi1z dGF0aWMgcGdfd2NoYXIKLWZpbmRfY2FzZV9tYXAocGdfd2NoYXIgdWNzLCBjb25zdCBwZ193Y2hh ciAqbWFwKQorc3RhdGljIGNoYXIzMl90CitmaW5kX2Nhc2VfbWFwKGNoYXIzMl90IHVjcywgY29u c3QgY2hhcjMyX3QgKm1hcCkKIHsKIAkvKiBGYXN0IHBhdGggZm9yIGNvZGVwb2ludHMgPCAweDgw ICovCiAJaWYgKHVjcyA8IDB4ODApCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2F0 ZWdvcnkuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXRlZ29yeS5jCmluZGV4IDQxMzZjNGQ0Zjky Li5hYWI2NjdhN2JiNCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmMK KysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmMKQEAgLTEsNyArMSw3IEBACiAvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqIHVuaWNvZGVfY2F0ZWdvcnkuYwogICoJCURldGVybWluZSBnZW5l cmFsIGNhdGVnb3J5IGFuZCBjaGFyYWN0ZXIgcHJvcGVydGllcyBvZiBVbmljb2RlCi0gKgkJY2hh cmFjdGVycy4gRW5jb2RpbmcgbXVzdCBiZSBVVEY4LCB3aGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUg cGdfd2NoYXIKKyAqCQljaGFyYWN0ZXJzLiBFbmNvZGluZyBtdXN0IGJlIFVURjgsIHdoZXJlIHdl IGFzc3VtZSB0aGF0IHRoZSBjaGFyMzJfdAogICoJCXJlcHJlc2VudGF0aW9uIGlzIGEgY29kZSBw b2ludC4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTctMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTc2LDEzICs3NiwxMyBAQAogI2RlZmluZSBQ R19VX0NIQVJBQ1RFUl9UQUIJMHgwOQogCiBzdGF0aWMgYm9vbCByYW5nZV9zZWFyY2goY29uc3Qg cGdfdW5pY29kZV9yYW5nZSAqdGJsLCBzaXplX3Qgc2l6ZSwKLQkJCQkJCSBwZ193Y2hhciBjb2Rl KTsKKwkJCQkJCSBjaGFyMzJfdCBjb2RlKTsKIAogLyoKICAqIFVuaWNvZGUgZ2VuZXJhbCBjYXRl Z29yeSBmb3IgdGhlIGdpdmVuIGNvZGVwb2ludC4KICAqLwogcGdfdW5pY29kZV9jYXRlZ29yeQot dW5pY29kZV9jYXRlZ29yeShwZ193Y2hhciBjb2RlKQordW5pY29kZV9jYXRlZ29yeShjaGFyMzJf dCBjb2RlKQogewogCWludAkJCW1pbiA9IDA7CiAJaW50CQkJbWlkOwpAQCAtMTA4LDcgKzEwOCw3 IEBAIHVuaWNvZGVfY2F0ZWdvcnkocGdfd2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9wcm9w X2FscGhhYmV0aWMocGdfd2NoYXIgY29kZSkKK3BnX3VfcHJvcF9hbHBoYWJldGljKGNoYXIzMl90 IGNvZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1cm4gdW5pY29kZV9vcHRfYXNjaWlb Y29kZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9BTFBIQUJFVElDOwpAQCAtMTE5LDcgKzExOSw3 IEBAIHBnX3VfcHJvcF9hbHBoYWJldGljKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3Vf cHJvcF9sb3dlcmNhc2UocGdfd2NoYXIgY29kZSkKK3BnX3VfcHJvcF9sb3dlcmNhc2UoY2hhcjMy X3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJldHVybiB1bmljb2RlX29wdF9hc2Np aVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX0xPV0VSQ0FTRTsKQEAgLTEzMCw3ICsxMzAs NyBAQCBwZ191X3Byb3BfbG93ZXJjYXNlKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3Vf cHJvcF91cHBlcmNhc2UocGdfd2NoYXIgY29kZSkKK3BnX3VfcHJvcF91cHBlcmNhc2UoY2hhcjMy X3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJldHVybiB1bmljb2RlX29wdF9hc2Np aVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX1VQUEVSQ0FTRTsKQEAgLTE0MSw3ICsxNDEs NyBAQCBwZ191X3Byb3BfdXBwZXJjYXNlKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3Vf cHJvcF9jYXNlZChwZ193Y2hhciBjb2RlKQorcGdfdV9wcm9wX2Nhc2VkKGNoYXIzMl90IGNvZGUp CiB7CiAJdWludDMyCQljYXRlZ29yeV9tYXNrOwogCkBAIC0xNTYsNyArMTU2LDcgQEAgcGdfdV9w cm9wX2Nhc2VkKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF9jYXNlX2lnbm9y YWJsZShwZ193Y2hhciBjb2RlKQorcGdfdV9wcm9wX2Nhc2VfaWdub3JhYmxlKGNoYXIzMl90IGNv ZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1cm4gdW5pY29kZV9vcHRfYXNjaWlbY29k ZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9DQVNFX0lHTk9SQUJMRTsKQEAgLTE2Nyw3ICsxNjcs NyBAQCBwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUocGdfd2NoYXIgY29kZSkKIH0KIAogYm9vbAot cGdfdV9wcm9wX3doaXRlX3NwYWNlKHBnX3djaGFyIGNvZGUpCitwZ191X3Byb3Bfd2hpdGVfc3Bh Y2UoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJldHVybiB1bmljb2Rl X29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX1dISVRFX1NQQUNFOwpAQCAt MTc4LDcgKzE3OCw3IEBAIHBnX3VfcHJvcF93aGl0ZV9zcGFjZShwZ193Y2hhciBjb2RlKQogfQog CiBib29sCi1wZ191X3Byb3BfaGV4X2RpZ2l0KHBnX3djaGFyIGNvZGUpCitwZ191X3Byb3BfaGV4 X2RpZ2l0KGNoYXIzMl90IGNvZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1cm4gdW5p Y29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9IRVhfRElHSVQ7CkBA IC0xODksNyArMTg5LDcgQEAgcGdfdV9wcm9wX2hleF9kaWdpdChwZ193Y2hhciBjb2RlKQogfQog CiBib29sCi1wZ191X3Byb3Bfam9pbl9jb250cm9sKHBnX3djaGFyIGNvZGUpCitwZ191X3Byb3Bf am9pbl9jb250cm9sKGNoYXIzMl90IGNvZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1 cm4gdW5pY29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9KT0lOX0NP TlRST0w7CkBAIC0yMDgsNyArMjA4LDcgQEAgcGdfdV9wcm9wX2pvaW5fY29udHJvbChwZ193Y2hh ciBjb2RlKQogICovCiAKIGJvb2wKLXBnX3VfaXNkaWdpdChwZ193Y2hhciBjb2RlLCBib29sIHBv c2l4KQorcGdfdV9pc2RpZ2l0KGNoYXIzMl90IGNvZGUsIGJvb2wgcG9zaXgpCiB7CiAJaWYgKHBv c2l4KQogCQlyZXR1cm4gKCcwJyA8PSBjb2RlICYmIGNvZGUgPD0gJzknKTsKQEAgLTIxNywxOSAr MjE3LDE5IEBAIHBnX3VfaXNkaWdpdChwZ193Y2hhciBjb2RlLCBib29sIHBvc2l4KQogfQogCiBi b29sCi1wZ191X2lzYWxwaGEocGdfd2NoYXIgY29kZSkKK3BnX3VfaXNhbHBoYShjaGFyMzJfdCBj b2RlKQogewogCXJldHVybiBwZ191X3Byb3BfYWxwaGFiZXRpYyhjb2RlKTsKIH0KIAogYm9vbAot cGdfdV9pc2FsbnVtKHBnX3djaGFyIGNvZGUsIGJvb2wgcG9zaXgpCitwZ191X2lzYWxudW0oY2hh cjMyX3QgY29kZSwgYm9vbCBwb3NpeCkKIHsKIAlyZXR1cm4gcGdfdV9pc2FscGhhKGNvZGUpIHx8 IHBnX3VfaXNkaWdpdChjb2RlLCBwb3NpeCk7CiB9CiAKIGJvb2wKLXBnX3VfaXN3b3JkKHBnX3dj aGFyIGNvZGUpCitwZ191X2lzd29yZChjaGFyMzJfdCBjb2RlKQogewogCXVpbnQzMgkJY2F0ZWdv cnlfbWFzayA9IFBHX1VfQ0FURUdPUllfTUFTSyh1bmljb2RlX2NhdGVnb3J5KGNvZGUpKTsKIApA QCAtMjQwLDMyICsyNDAsMzIgQEAgcGdfdV9pc3dvcmQocGdfd2NoYXIgY29kZSkKIH0KIAogYm9v bAotcGdfdV9pc3VwcGVyKHBnX3djaGFyIGNvZGUpCitwZ191X2lzdXBwZXIoY2hhcjMyX3QgY29k ZSkKIHsKIAlyZXR1cm4gcGdfdV9wcm9wX3VwcGVyY2FzZShjb2RlKTsKIH0KIAogYm9vbAotcGdf dV9pc2xvd2VyKHBnX3djaGFyIGNvZGUpCitwZ191X2lzbG93ZXIoY2hhcjMyX3QgY29kZSkKIHsK IAlyZXR1cm4gcGdfdV9wcm9wX2xvd2VyY2FzZShjb2RlKTsKIH0KIAogYm9vbAotcGdfdV9pc2Js YW5rKHBnX3djaGFyIGNvZGUpCitwZ191X2lzYmxhbmsoY2hhcjMyX3QgY29kZSkKIHsKIAlyZXR1 cm4gY29kZSA9PSBQR19VX0NIQVJBQ1RFUl9UQUIgfHwKIAkJdW5pY29kZV9jYXRlZ29yeShjb2Rl KSA9PSBQR19VX1NQQUNFX1NFUEFSQVRPUjsKIH0KIAogYm9vbAotcGdfdV9pc2NudHJsKHBnX3dj aGFyIGNvZGUpCitwZ191X2lzY250cmwoY2hhcjMyX3QgY29kZSkKIHsKIAlyZXR1cm4gdW5pY29k ZV9jYXRlZ29yeShjb2RlKSA9PSBQR19VX0NPTlRST0w7CiB9CiAKIGJvb2wKLXBnX3VfaXNncmFw aChwZ193Y2hhciBjb2RlKQorcGdfdV9pc2dyYXBoKGNoYXIzMl90IGNvZGUpCiB7CiAJdWludDMy CQljYXRlZ29yeV9tYXNrID0gUEdfVV9DQVRFR09SWV9NQVNLKHVuaWNvZGVfY2F0ZWdvcnkoY29k ZSkpOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgcGdfdV9pc2dyYXBoKHBnX3djaGFyIGNvZGUpCiB9 CiAKIGJvb2wKLXBnX3VfaXNwcmludChwZ193Y2hhciBjb2RlKQorcGdfdV9pc3ByaW50KGNoYXIz Ml90IGNvZGUpCiB7CiAJcGdfdW5pY29kZV9jYXRlZ29yeSBjYXRlZ29yeSA9IHVuaWNvZGVfY2F0 ZWdvcnkoY29kZSk7CiAKQEAgLTI4Nyw3ICsyODcsNyBAQCBwZ191X2lzcHJpbnQocGdfd2NoYXIg Y29kZSkKIH0KIAogYm9vbAotcGdfdV9pc3B1bmN0KHBnX3djaGFyIGNvZGUsIGJvb2wgcG9zaXgp CitwZ191X2lzcHVuY3QoY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCkKIHsKIAl1aW50MzIJCWNh dGVnb3J5X21hc2s7CiAKQEAgLTMwOCwxMyArMzA4LDEzIEBAIHBnX3VfaXNwdW5jdChwZ193Y2hh ciBjb2RlLCBib29sIHBvc2l4KQogfQogCiBib29sCi1wZ191X2lzc3BhY2UocGdfd2NoYXIgY29k ZSkKK3BnX3VfaXNzcGFjZShjaGFyMzJfdCBjb2RlKQogewogCXJldHVybiBwZ191X3Byb3Bfd2hp dGVfc3BhY2UoY29kZSk7CiB9CiAKIGJvb2wKLXBnX3VfaXN4ZGlnaXQocGdfd2NoYXIgY29kZSwg Ym9vbCBwb3NpeCkKK3BnX3VfaXN4ZGlnaXQoY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCkKIHsK IAlpZiAocG9zaXgpCiAJCXJldHVybiAoKCcwJyA8PSBjb2RlICYmIGNvZGUgPD0gJzknKSB8fApA QCAtNDc4LDcgKzQ3OCw3IEBAIHVuaWNvZGVfY2F0ZWdvcnlfYWJicmV2KHBnX3VuaWNvZGVfY2F0 ZWdvcnkgY2F0ZWdvcnkpCiAgKiBnaXZlbiB0YWJsZS4KICAqLwogc3RhdGljIGJvb2wKLXJhbmdl X3NlYXJjaChjb25zdCBwZ191bmljb2RlX3JhbmdlICp0YmwsIHNpemVfdCBzaXplLCBwZ193Y2hh ciBjb2RlKQorcmFuZ2Vfc2VhcmNoKGNvbnN0IHBnX3VuaWNvZGVfcmFuZ2UgKnRibCwgc2l6ZV90 IHNpemUsIGNoYXIzMl90IGNvZGUpCiB7CiAJaW50CQkJbWluID0gMDsKIAlpbnQJCQltaWQ7CmRp ZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfbm9ybS5jIGIvc3JjL2NvbW1vbi91bmljb2Rl X25vcm0uYwppbmRleCA2NjU0YjRjYmM0OS4uNDg5ZDk5Y2Q1YWIgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZV9ub3JtLmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX25vcm0uYwpAQCAt NjksNyArNjksNyBAQCBjb252X2NvbXBhcmUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAy KQogICogbG9va3VwLCB3aGlsZSB0aGUgZnJvbnRlbmQgdmVyc2lvbiB1c2VzIGEgYmluYXJ5IHNl YXJjaC4KICAqLwogc3RhdGljIGNvbnN0IHBnX3VuaWNvZGVfZGVjb21wb3NpdGlvbiAqCi1nZXRf Y29kZV9lbnRyeShwZ193Y2hhciBjb2RlKQorZ2V0X2NvZGVfZW50cnkoY2hhcjMyX3QgY29kZSkK IHsKICNpZm5kZWYgRlJPTlRFTkQKIAlpbnQJCQloOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGdldF9j b2RlX2VudHJ5KHBnX3djaGFyIGNvZGUpCiAgKiBHZXQgdGhlIGNvbWJpbmluZyBjbGFzcyBvZiB0 aGUgZ2l2ZW4gY29kZXBvaW50LgogICovCiBzdGF0aWMgdWludDgKLWdldF9jYW5vbmljYWxfY2xh c3MocGdfd2NoYXIgY29kZSkKK2dldF9jYW5vbmljYWxfY2xhc3MoY2hhcjMyX3QgY29kZSkKIHsK IAljb25zdCBwZ191bmljb2RlX2RlY29tcG9zaXRpb24gKmVudHJ5ID0gZ2V0X2NvZGVfZW50cnko Y29kZSk7CiAKQEAgLTEzMCwxNSArMTMwLDE1IEBAIGdldF9jYW5vbmljYWxfY2xhc3MocGdfd2No YXIgY29kZSkKICAqIE5vdGU6IHRoZSByZXR1cm5lZCBwb2ludGVyIGNhbiBwb2ludCB0byBzdGF0 aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIsIGFuZAogICogaXMgb25seSB2YWxpZCB1bnRpbCBuZXh0 IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiEKICAqLwotc3RhdGljIGNvbnN0IHBnX3djaGFyICoKK3N0 YXRpYyBjb25zdCBjaGFyMzJfdCAqCiBnZXRfY29kZV9kZWNvbXBvc2l0aW9uKGNvbnN0IHBnX3Vu aWNvZGVfZGVjb21wb3NpdGlvbiAqZW50cnksIGludCAqZGVjX3NpemUpCiB7Ci0Jc3RhdGljIHBn X3djaGFyIHg7CisJc3RhdGljIGNoYXIzMl90IHg7CiAKIAlpZiAoREVDT01QT1NJVElPTl9JU19J TkxJTkUoZW50cnkpKQogCXsKIAkJQXNzZXJ0KERFQ09NUE9TSVRJT05fU0laRShlbnRyeSkgPT0g MSk7Ci0JCXggPSAocGdfd2NoYXIpIGVudHJ5LT5kZWNfaW5kZXg7CisJCXggPSAoY2hhcjMyX3Qp IGVudHJ5LT5kZWNfaW5kZXg7CiAJCSpkZWNfc2l6ZSA9IDE7CiAJCXJldHVybiAmeDsKIAl9CkBA IC0xNTYsNyArMTU2LDcgQEAgZ2V0X2NvZGVfZGVjb21wb3NpdGlvbihjb25zdCBwZ191bmljb2Rl X2RlY29tcG9zaXRpb24gKmVudHJ5LCBpbnQgKmRlY19zaXplKQogICogYXJlLCBpbiB0dXJuLCBk ZWNvbXBvc2FibGUuCiAgKi8KIHN0YXRpYyBpbnQKLWdldF9kZWNvbXBvc2VkX3NpemUocGdfd2No YXIgY29kZSwgYm9vbCBjb21wYXQpCitnZXRfZGVjb21wb3NlZF9zaXplKGNoYXIzMl90IGNvZGUs IGJvb2wgY29tcGF0KQogewogCWNvbnN0IHBnX3VuaWNvZGVfZGVjb21wb3NpdGlvbiAqZW50cnk7 CiAJaW50CQkJc2l6ZSA9IDA7CkBAIC0zMTgsNyArMzE4LDcgQEAgcmVjb21wb3NlX2NvZGUodWlu dDMyIHN0YXJ0LCB1aW50MzIgY29kZSwgdWludDMyICpyZXN1bHQpCiAgKiBpbiB0aGUgYXJyYXkg cmVzdWx0LgogICovCiBzdGF0aWMgdm9pZAotZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwg Ym9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCitkZWNvbXBvc2Vf Y29kZShjaGFyMzJfdCBjb2RlLCBib29sIGNvbXBhdCwgY2hhcjMyX3QgKipyZXN1bHQsIGludCAq Y3VycmVudCkKIHsKIAljb25zdCBwZ191bmljb2RlX2RlY29tcG9zaXRpb24gKmVudHJ5OwogCWlu dAkJCWk7CkBAIC0zMzcsNyArMzM3LDcgQEAgZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwg Ym9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCiAJCQkJCXYsCiAJ CQkJCXRpbmRleCwKIAkJCQkJc2luZGV4OwotCQlwZ193Y2hhciAgICpyZXMgPSAqcmVzdWx0Owor CQljaGFyMzJfdCAgICpyZXMgPSAqcmVzdWx0OwogCiAJCXNpbmRleCA9IGNvZGUgLSBTQkFTRTsK IAkJbCA9IExCQVNFICsgc2luZGV4IC8gKFZDT1VOVCAqIFRDT1VOVCk7CkBAIC0zNjksNyArMzY5 LDcgQEAgZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQsIHBnX3djaGFy ICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCiAJaWYgKGVudHJ5ID09IE5VTEwgfHwgREVDT01QT1NJ VElPTl9TSVpFKGVudHJ5KSA9PSAwIHx8CiAJCSghY29tcGF0ICYmIERFQ09NUE9TSVRJT05fSVNf Q09NUEFUKGVudHJ5KSkpCiAJewotCQlwZ193Y2hhciAgICpyZXMgPSAqcmVzdWx0OworCQljaGFy MzJfdCAgICpyZXMgPSAqcmVzdWx0OwogCiAJCXJlc1sqY3VycmVudF0gPSBjb2RlOwogCQkoKmN1 cnJlbnQpKys7CkBAIC0zODIsNyArMzgyLDcgQEAgZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29k ZSwgYm9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCiAJZGVjb21w ID0gZ2V0X2NvZGVfZGVjb21wb3NpdGlvbihlbnRyeSwgJmRlY19zaXplKTsKIAlmb3IgKGkgPSAw OyBpIDwgZGVjX3NpemU7IGkrKykKIAl7Ci0JCXBnX3djaGFyCWxjb2RlID0gKHBnX3djaGFyKSBk ZWNvbXBbaV07CisJCWNoYXIzMl90CWxjb2RlID0gKGNoYXIzMl90KSBkZWNvbXBbaV07CiAKIAkJ LyogTGVhdmUgaWYgbm8gbW9yZSBkZWNvbXBvc2l0aW9ucyAqLwogCQlkZWNvbXBvc2VfY29kZShs Y29kZSwgY29tcGF0LCByZXN1bHQsIGN1cnJlbnQpOwpAQCAtMzk4LDE3ICszOTgsMTcgQEAgZGVj b21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0 LCBpbnQgKmN1cnJlbnQpCiAgKiBtYWxsb2MuIE9yIE5VTEwgaWYgd2UgcnVuIG91dCBvZiBtZW1v cnkuIEluIGJhY2tlbmQsIHRoZSByZXR1cm5lZAogICogc3RyaW5nIGlzIHBhbGxvYydkIGluc3Rl YWQsIGFuZCBPT00gaXMgcmVwb3J0ZWQgd2l0aCBlcmVwb3J0KCkuCiAgKi8KLXBnX3djaGFyICoK LXVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBw Z193Y2hhciAqaW5wdXQpCitjaGFyMzJfdCAqCit1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9y bWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlucHV0KQogewogCWJvb2wJCWNv bXBhdCA9IChmb3JtID09IFVOSUNPREVfTkZLQyB8fCBmb3JtID09IFVOSUNPREVfTkZLRCk7CiAJ Ym9vbAkJcmVjb21wb3NlID0gKGZvcm0gPT0gVU5JQ09ERV9ORkMgfHwgZm9ybSA9PSBVTklDT0RF X05GS0MpOwotCXBnX3djaGFyICAgKmRlY29tcF9jaGFyczsKLQlwZ193Y2hhciAgICpyZWNvbXBf Y2hhcnM7CisJY2hhcjMyX3QgICAqZGVjb21wX2NoYXJzOworCWNoYXIzMl90ICAgKnJlY29tcF9j aGFyczsKIAlpbnQJCQlkZWNvbXBfc2l6ZSwKIAkJCQljdXJyZW50X3NpemU7CiAJaW50CQkJY291 bnQ7Ci0JY29uc3QgcGdfd2NoYXIgKnA7CisJY29uc3QgY2hhcjMyX3QgKnA7CiAKIAkvKiB2YXJp YWJsZXMgZm9yIHJlY29tcG9zaXRpb24gKi8KIAlpbnQJCQlsYXN0X2NsYXNzOwpAQCAtNDI1LDcg KzQyNSw3IEBAIHVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3Jt LCBjb25zdCBwZ193Y2hhciAqaW5wdXQpCiAJZm9yIChwID0gaW5wdXQ7ICpwOyBwKyspCiAJCWRl Y29tcF9zaXplICs9IGdldF9kZWNvbXBvc2VkX3NpemUoKnAsIGNvbXBhdCk7CiAKLQlkZWNvbXBf Y2hhcnMgPSAocGdfd2NoYXIgKikgQUxMT0MoKGRlY29tcF9zaXplICsgMSkgKiBzaXplb2YocGdf d2NoYXIpKTsKKwlkZWNvbXBfY2hhcnMgPSAoY2hhcjMyX3QgKikgQUxMT0MoKGRlY29tcF9zaXpl ICsgMSkgKiBzaXplb2YoY2hhcjMyX3QpKTsKIAlpZiAoZGVjb21wX2NoYXJzID09IE5VTEwpCiAJ CXJldHVybiBOVUxMOwogCkBAIC00NDgsOSArNDQ4LDkgQEAgdW5pY29kZV9ub3JtYWxpemUoVW5p Y29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKIAkgKi8K IAlmb3IgKGNvdW50ID0gMTsgY291bnQgPCBkZWNvbXBfc2l6ZTsgY291bnQrKykKIAl7Ci0JCXBn X3djaGFyCXByZXYgPSBkZWNvbXBfY2hhcnNbY291bnQgLSAxXTsKLQkJcGdfd2NoYXIJbmV4dCA9 IGRlY29tcF9jaGFyc1tjb3VudF07Ci0JCXBnX3djaGFyCXRtcDsKKwkJY2hhcjMyX3QJcHJldiA9 IGRlY29tcF9jaGFyc1tjb3VudCAtIDFdOworCQljaGFyMzJfdAluZXh0ID0gZGVjb21wX2NoYXJz W2NvdW50XTsKKwkJY2hhcjMyX3QJdG1wOwogCQljb25zdCB1aW50OCBwcmV2Q2xhc3MgPSBnZXRf Y2Fub25pY2FsX2NsYXNzKHByZXYpOwogCQljb25zdCB1aW50OCBuZXh0Q2xhc3MgPSBnZXRfY2Fu b25pY2FsX2NsYXNzKG5leHQpOwogCkBAIC00ODcsNyArNDg3LDcgQEAgdW5pY29kZV9ub3JtYWxp emUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkK IAkgKiBsb25nZXIgdGhhbiB0aGUgZGVjb21wb3NlZCBvbmUsIHNvIG1ha2UgdGhlIGFsbG9jYXRp b24gb2YgdGhlIG91dHB1dAogCSAqIHN0cmluZyBiYXNlZCBvbiB0aGF0IGFzc3VtcHRpb24uCiAJ ICovCi0JcmVjb21wX2NoYXJzID0gKHBnX3djaGFyICopIEFMTE9DKChkZWNvbXBfc2l6ZSArIDEp ICogc2l6ZW9mKHBnX3djaGFyKSk7CisJcmVjb21wX2NoYXJzID0gKGNoYXIzMl90ICopIEFMTE9D KChkZWNvbXBfc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7CiAJaWYgKCFyZWNvbXBfY2hh cnMpCiAJewogCQlGUkVFKGRlY29tcF9jaGFycyk7CkBAIC01MDEsOSArNTAxLDkgQEAgdW5pY29k ZV9ub3JtYWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFy ICppbnB1dCkKIAogCWZvciAoY291bnQgPSAxOyBjb3VudCA8IGRlY29tcF9zaXplOyBjb3VudCsr KQogCXsKLQkJcGdfd2NoYXIJY2ggPSBkZWNvbXBfY2hhcnNbY291bnRdOworCQljaGFyMzJfdAlj aCA9IGRlY29tcF9jaGFyc1tjb3VudF07CiAJCWludAkJCWNoX2NsYXNzID0gZ2V0X2Nhbm9uaWNh bF9jbGFzcyhjaCk7Ci0JCXBnX3djaGFyCWNvbXBvc2l0ZTsKKwkJY2hhcjMyX3QJY29tcG9zaXRl OwogCiAJCWlmIChsYXN0X2NsYXNzIDwgY2hfY2xhc3MgJiYKIAkJCXJlY29tcG9zZV9jb2RlKHN0 YXJ0ZXJfY2gsIGNoLCAmY29tcG9zaXRlKSkKQEAgLTUyNCw3ICs1MjQsNyBAQCB1bmljb2RlX25v cm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgcGdfd2NoYXIgKmlu cHV0KQogCQkJcmVjb21wX2NoYXJzW3RhcmdldF9wb3MrK10gPSBjaDsKIAkJfQogCX0KLQlyZWNv bXBfY2hhcnNbdGFyZ2V0X3Bvc10gPSAocGdfd2NoYXIpICdcMCc7CisJcmVjb21wX2NoYXJzW3Rh cmdldF9wb3NdID0gKGNoYXIzMl90KSAnXDAnOwogCiAJRlJFRShkZWNvbXBfY2hhcnMpOwogCkBA IC01NDAsNyArNTQwLDcgQEAgdW5pY29kZV9ub3JtYWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25G b3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKICNpZm5kZWYgRlJPTlRFTkQKIAogc3Rh dGljIGNvbnN0IHBnX3VuaWNvZGVfbm9ybXByb3BzICoKLXFjX2hhc2hfbG9va3VwKHBnX3djaGFy IGNoLCBjb25zdCBwZ191bmljb2RlX25vcm1pbmZvICpub3JtaW5mbykKK3FjX2hhc2hfbG9va3Vw KGNoYXIzMl90IGNoLCBjb25zdCBwZ191bmljb2RlX25vcm1pbmZvICpub3JtaW5mbykKIHsKIAlp bnQJCQloOwogCXVpbnQzMgkJaGFzaGtleTsKQEAgLTU3MSw3ICs1NzEsNyBAQCBxY19oYXNoX2xv b2t1cChwZ193Y2hhciBjaCwgY29uc3QgcGdfdW5pY29kZV9ub3JtaW5mbyAqbm9ybWluZm8pCiAg KiBMb29rIHVwIHRoZSBub3JtYWxpemF0aW9uIHF1aWNrIGNoZWNrIGNoYXJhY3RlciBwcm9wZXJ0 eQogICovCiBzdGF0aWMgVW5pY29kZU5vcm1hbGl6YXRpb25RQwotcWNfaXNfYWxsb3dlZChVbmlj b2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgcGdfd2NoYXIgY2gpCitxY19pc19hbGxvd2VkKFVu aWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjaGFyMzJfdCBjaCkKIHsKIAljb25zdCBwZ191 bmljb2RlX25vcm1wcm9wcyAqZm91bmQgPSBOVUxMOwogCkBAIC01OTUsNyArNTk1LDcgQEAgcWNf aXNfYWxsb3dlZChVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgcGdfd2NoYXIgY2gpCiB9 CiAKIFVuaWNvZGVOb3JtYWxpemF0aW9uUUMKLXVuaWNvZGVfaXNfbm9ybWFsaXplZF9xdWlja2No ZWNrKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBwZ193Y2hhciAqaW5wdXQp Cit1bmljb2RlX2lzX25vcm1hbGl6ZWRfcXVpY2tjaGVjayhVbmljb2RlTm9ybWFsaXphdGlvbkZv cm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlucHV0KQogewogCXVpbnQ4CQlsYXN0Q2Fub25pY2Fs Q2xhc3MgPSAwOwogCVVuaWNvZGVOb3JtYWxpemF0aW9uUUMgcmVzdWx0ID0gVU5JQ09ERV9OT1JN X1FDX1lFUzsKQEAgLTYxMCw5ICs2MTAsOSBAQCB1bmljb2RlX2lzX25vcm1hbGl6ZWRfcXVpY2tj aGVjayhVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgcGdfd2NoYXIgKgogCWlm IChmb3JtID09IFVOSUNPREVfTkZEIHx8IGZvcm0gPT0gVU5JQ09ERV9ORktEKQogCQlyZXR1cm4g VU5JQ09ERV9OT1JNX1FDX01BWUJFOwogCi0JZm9yIChjb25zdCBwZ193Y2hhciAqcCA9IGlucHV0 OyAqcDsgcCsrKQorCWZvciAoY29uc3QgY2hhcjMyX3QgKnAgPSBpbnB1dDsgKnA7IHArKykKIAl7 Ci0JCXBnX3djaGFyCWNoID0gKnA7CisJCWNoYXIzMl90CWNoID0gKnA7CiAJCXVpbnQ4CQljYW5v bmljYWxDbGFzczsKIAkJVW5pY29kZU5vcm1hbGl6YXRpb25RQyBjaGVjazsKIApkaWZmIC0tZ2l0 IGEvc3JjL2ZlX3V0aWxzL21icHJpbnQuYyBiL3NyYy9mZV91dGlscy9tYnByaW50LmMKaW5kZXgg ZWIzZWVlZTk5MjUuLmFiZmZkYmUxOGEyIDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvbWJwcmlu dC5jCisrKyBiL3NyYy9mZV91dGlscy9tYnByaW50LmMKQEAgLTQ5LDIwICs0OSwyMCBAQCBwZ19n ZXRfdXRmOF9pZCh2b2lkKQogICoKICAqIE5vIGVycm9yIGNoZWNrcyBoZXJlLCBjIG11c3QgcG9p bnQgdG8gYSBsb25nLWVub3VnaCBzdHJpbmcuCiAgKi8KLXN0YXRpYyBwZ193Y2hhcgorc3RhdGlj IGNoYXIzMl90CiB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqYykKIHsKIAlp ZiAoKCpjICYgMHg4MCkgPT0gMCkKLQkJcmV0dXJuIChwZ193Y2hhcikgY1swXTsKKwkJcmV0dXJu IChjaGFyMzJfdCkgY1swXTsKIAllbHNlIGlmICgoKmMgJiAweGUwKSA9PSAweGMwKQotCQlyZXR1 cm4gKHBnX3djaGFyKSAoKChjWzBdICYgMHgxZikgPDwgNikgfAorCQlyZXR1cm4gKGNoYXIzMl90 KSAoKChjWzBdICYgMHgxZikgPDwgNikgfAogCQkJCQkJICAgKGNbMV0gJiAweDNmKSk7CiAJZWxz ZSBpZiAoKCpjICYgMHhmMCkgPT0gMHhlMCkKLQkJcmV0dXJuIChwZ193Y2hhcikgKCgoY1swXSAm IDB4MGYpIDw8IDEyKSB8CisJCXJldHVybiAoY2hhcjMyX3QpICgoKGNbMF0gJiAweDBmKSA8PCAx MikgfAogCQkJCQkJICAgKChjWzFdICYgMHgzZikgPDwgNikgfAogCQkJCQkJICAgKGNbMl0gJiAw eDNmKSk7CiAJZWxzZSBpZiAoKCpjICYgMHhmOCkgPT0gMHhmMCkKLQkJcmV0dXJuIChwZ193Y2hh cikgKCgoY1swXSAmIDB4MDcpIDw8IDE4KSB8CisJCXJldHVybiAoY2hhcjMyX3QpICgoKGNbMF0g JiAweDA3KSA8PCAxOCkgfAogCQkJCQkJICAgKChjWzFdICYgMHgzZikgPDwgMTIpIHwKIAkJCQkJ CSAgICgoY1syXSAmIDB4M2YpIDw8IDYpIHwKIAkJCQkJCSAgIChjWzNdICYgMHgzZikpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2luY2x1ZGUvYy5oCmluZGV4IDlhYjVlNjE3 OTk1Li5jZTQ4NzMyMzExZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYy5oCisrKyBiL3NyYy9p bmNsdWRlL2MuaApAQCAtNTEzLDYgKzUxMywyNCBAQCB0eXBlZGVmIHZvaWQgKCpwZ19mdW5jcHRy X3QpICh2b2lkKTsKIAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KIAorLyoKKyAqIGNoYXIxNl90IGFu ZCBjaGFyMzJfdAorICogICAgICBVbmljb2RlIGNvZGUgcG9pbnRzLgorICoKKyAqIHVjaGFyLmgg c2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUgaW4gQzExLCBidXQgaXQncyBub3QgYXZhaWxhYmxl IG9uCisgKiBNYWMuIEhvd2V2ZXIsIHRoZXNlIHR5cGVzIGFyZSBrZXl3b3JkcyBpbiBDKysxMSwg c28gd2hlbiB1c2luZyBDKyssIHdlCisgKiBjYW4ndCByZWRlZmluZSB0aGUgdHlwZXMuIFhYWDog d2hlbiB1Y2hhci5oIGlzIGF2YWlsYWJsZSBldmVyeXdoZXJlLCB3ZSBjYW4KKyAqIHJlbW92ZSB0 aGlzIGNoZWNrIGFuZCBqdXN0IGluY2x1ZGUgdWNoYXIuaCB1bmNvbmRpdGlvbmFsbHkuCisgKi8K KyNpZmRlZiBIQVZFX1VDSEFSX0gKKyNpbmNsdWRlIDx1Y2hhci5oPgorI2Vsc2UKKyNpZm5kZWYg X19jcGx1c3BsdXMKK3R5cGVkZWYgdWludDE2X3QgY2hhcjE2X3Q7Cit0eXBlZGVmIHVpbnQzMl90 IGNoYXIzMl90OworI2VuZGlmCisjZW5kaWYKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQlTZWN0aW9u IDM6CXN0YW5kYXJkIHN5c3RlbSB0eXBlcwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9u L3VuaWNvZGVfY2FzZS5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oCmluZGV4 IDQxZTJjMWY0YjMzLi42YmNmZmQzNDljMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9u L3VuaWNvZGVfY2FzZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2UuaApA QCAtMTQsMTQgKzE0LDEyIEBACiAjaWZuZGVmIFVOSUNPREVfQ0FTRV9ICiAjZGVmaW5lIFVOSUNP REVfQ0FTRV9ICiAKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgotCiB0eXBlZGVmIHNpemVfdCAo KldvcmRCb3VuZGFyeU5leHQpICh2b2lkICp3YnN0YXRlKTsKIAotcGdfd2NoYXIJdW5pY29kZV9s b3dlcmNhc2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2NoYXIJdW5pY29kZV90aXRsZWNh c2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2NoYXIJdW5pY29kZV91cHBlcmNhc2Vfc2lt cGxlKHBnX3djaGFyIGNvZGUpOwotcGdfd2NoYXIJdW5pY29kZV9jYXNlZm9sZF9zaW1wbGUocGdf d2NoYXIgY29kZSk7CitjaGFyMzJfdAl1bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUoY2hhcjMyX3Qg Y29kZSk7CitjaGFyMzJfdAl1bmljb2RlX3RpdGxlY2FzZV9zaW1wbGUoY2hhcjMyX3QgY29kZSk7 CitjaGFyMzJfdAl1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUoY2hhcjMyX3QgY29kZSk7CitjaGFy MzJfdAl1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShjaGFyMzJfdCBjb2RlKTsKIHNpemVfdAkJdW5p Y29kZV9zdHJsb3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMs CiAJCQkJCQkJIHNzaXplX3Qgc3JjbGVuLCBib29sIGZ1bGwpOwogc2l6ZV90CQl1bmljb2RlX3N0 cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUuaCBiL3NyYy9pbmNs dWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUuaAppbmRleCBkNTMxMTc4NjU4Mi4uMGExNGZi MmQ5N2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUu aAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXNlX3RhYmxlLmgKQEAgLTE4LDcg KzE4LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgotI2luY2x1 ZGUgIm1iL3BnX3djaGFyLmgiCiAKIC8qCiAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29kZXBv aW50cyB0aGF0IGNhbiByZXN1bHQgZnJvbSBjYXNlIG1hcHBpbmcKQEAgLTQ1LDcgKzQ0LDcgQEAg dHlwZWRlZiBlbnVtCiB0eXBlZGVmIHN0cnVjdAogewogCWludDE2CQljb25kaXRpb25zOwotCXBn X3djaGFyCW1hcFtOQ2FzZUtpbmRdW01BWF9DQVNFX0VYUEFOU0lPTl07CisJY2hhcjMyX3QJbWFw W05DYXNlS2luZF1bTUFYX0NBU0VfRVhQQU5TSU9OXTsKIH0gcGdfc3BlY2lhbF9jYXNlOwogCiAv KgpAQCAtMTY2LDcgKzE2NSw3IEBAIHN0YXRpYyBjb25zdCBwZ19zcGVjaWFsX2Nhc2Ugc3BlY2lh bF9jYXNlWzEwNl0gPQogICogVGhlIGVudHJ5IGNhc2VfbWFwX2xvd2VyW2Nhc2VfaW5kZXgoY29k ZXBvaW50KV0gaXMgdGhlIG1hcHBpbmcgZm9yIHRoZQogICogZ2l2ZW4gY29kZXBvaW50LgogICov Ci1zdGF0aWMgY29uc3QgcGdfd2NoYXIgY2FzZV9tYXBfbG93ZXJbMTcwNF0gPQorc3RhdGljIGNv bnN0IGNoYXIzMl90IGNhc2VfbWFwX2xvd2VyWzE3MDRdID0KIHsKIAkweDAwMDAwMCwJCQkJCS8q IHJlc2VydmVkICovCiAJMHgwMDAwMDAsCQkJCQkvKiBVKzAwMDAwMCAqLwpAQCAtMTg3OSw3ICsx ODc4LDcgQEAgc3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwX2xvd2VyWzE3MDRdID0KICAq IFRoZSBlbnRyeSBjYXNlX21hcF90aXRsZVtjYXNlX2luZGV4KGNvZGVwb2ludCldIGlzIHRoZSBt YXBwaW5nIGZvciB0aGUKICAqIGdpdmVuIGNvZGVwb2ludC4KICAqLwotc3RhdGljIGNvbnN0IHBn X3djaGFyIGNhc2VfbWFwX3RpdGxlWzE3MDRdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBjYXNl X21hcF90aXRsZVsxNzA0XSA9CiB7CiAJMHgwMDAwMDAsCQkJCQkvKiByZXNlcnZlZCAqLwogCTB4 MDAwMDAwLAkJCQkJLyogVSswMDAwMDAgKi8KQEAgLTM1OTIsNyArMzU5MSw3IEBAIHN0YXRpYyBj b25zdCBwZ193Y2hhciBjYXNlX21hcF90aXRsZVsxNzA0XSA9CiAgKiBUaGUgZW50cnkgY2FzZV9t YXBfdXBwZXJbY2FzZV9pbmRleChjb2RlcG9pbnQpXSBpcyB0aGUgbWFwcGluZyBmb3IgdGhlCiAg KiBnaXZlbiBjb2RlcG9pbnQuCiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF91 cHBlclsxNzA0XSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgY2FzZV9tYXBfdXBwZXJbMTcwNF0g PQogewogCTB4MDAwMDAwLAkJCQkJLyogcmVzZXJ2ZWQgKi8KIAkweDAwMDAwMCwJCQkJCS8qIFUr MDAwMDAwICovCkBAIC01MzA1LDcgKzUzMDQsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgY2Fz ZV9tYXBfdXBwZXJbMTcwNF0gPQogICogVGhlIGVudHJ5IGNhc2VfbWFwX2ZvbGRbY2FzZV9pbmRl eChjb2RlcG9pbnQpXSBpcyB0aGUgbWFwcGluZyBmb3IgdGhlCiAgKiBnaXZlbiBjb2RlcG9pbnQu CiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF9mb2xkWzE3MDRdID0KK3N0YXRp YyBjb25zdCBjaGFyMzJfdCBjYXNlX21hcF9mb2xkWzE3MDRdID0KIHsKIAkweDAwMDAwMCwJCQkJ CS8qIHJlc2VydmVkICovCiAJMHgwMDAwMDAsCQkJCQkvKiBVKzAwMDAwMCAqLwpAQCAtMTM1MjIs NyArMTM1MjEsNyBAQCBzdGF0aWMgY29uc3QgdWludDE2IGNhc2VfbWFwWzQ3NzhdID0KICAqIHRo ZSBvZmZzZXQgaW50byB0aGUgbWFwcGluZyB0YWJsZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdWlu dDE2Ci1jYXNlX2luZGV4KHBnX3djaGFyIGNwKQorY2FzZV9pbmRleChjaGFyMzJfdCBjcCkKIHsK IAkvKiBGYXN0IHBhdGggZm9yIGNvZGVwb2ludHMgPCAweDA1ODggKi8KIAlpZiAoY3AgPCAweDA1 ODgpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29yeS5oIGIv c3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaAppbmRleCA4ZmQ4YjY3YTQxNi4u Njg0MTQzZDNjOGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2NhdGVn b3J5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaApAQCAtMTQs OCArMTQsNiBAQAogI2lmbmRlZiBVTklDT0RFX0NBVEVHT1JZX0gKICNkZWZpbmUgVU5JQ09ERV9D QVRFR09SWV9ICiAKLSNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgotCiAvKgogICogVW5pY29kZSBH ZW5lcmFsIENhdGVnb3J5IFZhbHVlcwogICoKQEAgLTYxLDMxICs1OSwzMSBAQCB0eXBlZGVmIGVu dW0gcGdfdW5pY29kZV9jYXRlZ29yeQogCVBHX1VfRklOQUxfUFVOQ1RVQVRJT04gPSAyOSAvKiBQ ZiAqLwogfSBwZ191bmljb2RlX2NhdGVnb3J5OwogCi1leHRlcm4gcGdfdW5pY29kZV9jYXRlZ29y eSB1bmljb2RlX2NhdGVnb3J5KHBnX3djaGFyIGNvZGUpOworZXh0ZXJuIHBnX3VuaWNvZGVfY2F0 ZWdvcnkgdW5pY29kZV9jYXRlZ29yeShjaGFyMzJfdCBjb2RlKTsKIGV4dGVybiBjb25zdCBjaGFy ICp1bmljb2RlX2NhdGVnb3J5X3N0cmluZyhwZ191bmljb2RlX2NhdGVnb3J5IGNhdGVnb3J5KTsK IGV4dGVybiBjb25zdCBjaGFyICp1bmljb2RlX2NhdGVnb3J5X2FiYnJldihwZ191bmljb2RlX2Nh dGVnb3J5IGNhdGVnb3J5KTsKIAotZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX2FscGhhYmV0aWMocGdf d2NoYXIgY29kZSk7Ci1leHRlcm4gYm9vbCBwZ191X3Byb3BfbG93ZXJjYXNlKHBnX3djaGFyIGNv ZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3VwcGVyY2FzZShwZ193Y2hhciBjb2RlKTsKLWV4 dGVybiBib29sIHBnX3VfcHJvcF9jYXNlZChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBn X3VfcHJvcF9jYXNlX2lnbm9yYWJsZShwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3Vf cHJvcF93aGl0ZV9zcGFjZShwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfcHJvcF9o ZXhfZGlnaXQocGdfd2NoYXIgY29kZSk7Ci1leHRlcm4gYm9vbCBwZ191X3Byb3Bfam9pbl9jb250 cm9sKHBnX3djaGFyIGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX2FscGhhYmV0aWMoY2hh cjMyX3QgY29kZSk7CitleHRlcm4gYm9vbCBwZ191X3Byb3BfbG93ZXJjYXNlKGNoYXIzMl90IGNv ZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3VwcGVyY2FzZShjaGFyMzJfdCBjb2RlKTsKK2V4 dGVybiBib29sIHBnX3VfcHJvcF9jYXNlZChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBn X3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3Vf cHJvcF93aGl0ZV9zcGFjZShjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfcHJvcF9o ZXhfZGlnaXQoY2hhcjMyX3QgY29kZSk7CitleHRlcm4gYm9vbCBwZ191X3Byb3Bfam9pbl9jb250 cm9sKGNoYXIzMl90IGNvZGUpOwogCi1leHRlcm4gYm9vbCBwZ191X2lzZGlnaXQocGdfd2NoYXIg Y29kZSwgYm9vbCBwb3NpeCk7Ci1leHRlcm4gYm9vbCBwZ191X2lzYWxwaGEocGdfd2NoYXIgY29k ZSk7Ci1leHRlcm4gYm9vbCBwZ191X2lzYWxudW0ocGdfd2NoYXIgY29kZSwgYm9vbCBwb3NpeCk7 Ci1leHRlcm4gYm9vbCBwZ191X2lzd29yZChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBn X3VfaXN1cHBlcihwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNsb3dlcihwZ193 Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNibGFuayhwZ193Y2hhciBjb2RlKTsKLWV4 dGVybiBib29sIHBnX3VfaXNjbnRybChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3Vf aXNncmFwaChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNwcmludChwZ193Y2hh ciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfaXNwdW5jdChwZ193Y2hhciBjb2RlLCBib29sIHBv c2l4KTsKLWV4dGVybiBib29sIHBnX3VfaXNzcGFjZShwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBi b29sIHBnX3VfaXN4ZGlnaXQocGdfd2NoYXIgY29kZSwgYm9vbCBwb3NpeCk7CitleHRlcm4gYm9v bCBwZ191X2lzZGlnaXQoY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCk7CitleHRlcm4gYm9vbCBw Z191X2lzYWxwaGEoY2hhcjMyX3QgY29kZSk7CitleHRlcm4gYm9vbCBwZ191X2lzYWxudW0oY2hh cjMyX3QgY29kZSwgYm9vbCBwb3NpeCk7CitleHRlcm4gYm9vbCBwZ191X2lzd29yZChjaGFyMzJf dCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXN1cHBlcihjaGFyMzJfdCBjb2RlKTsKK2V4dGVy biBib29sIHBnX3VfaXNsb3dlcihjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNi bGFuayhjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNjbnRybChjaGFyMzJfdCBj b2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNncmFwaChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBi b29sIHBnX3VfaXNwcmludChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNwdW5j dChjaGFyMzJfdCBjb2RlLCBib29sIHBvc2l4KTsKK2V4dGVybiBib29sIHBnX3VfaXNzcGFjZShj aGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXN4ZGlnaXQoY2hhcjMyX3QgY29kZSwg Ym9vbCBwb3NpeCk7CiAKICNlbmRpZgkJCQkJCQkvKiBVTklDT0RFX0NBVEVHT1JZX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5X3RhYmxlLmggYi9z cmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29yeV90YWJsZS5oCmluZGV4IDk1YTFjNjVk YTdlLi40NjZhNDFiNzJiMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVf Y2F0ZWdvcnlfdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29y eV90YWJsZS5oCkBAIC0yMCwxNSArMjAsMTUgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1 aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJ CS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJY2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBj b2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiAJ dWludDgJCWNhdGVnb3J5OwkJLyogR2VuZXJhbCBDYXRlZ29yeSAqLwogfSBwZ19jYXRlZ29yeV9y YW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUg Y29kZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJ Y2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0 OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiB9IHBnX3VuaWNvZGVfcmFuZ2U7CiAKIHR5cGVk ZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmgg Yi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmgKaW5kZXggNWJjM2I3OWU3OGUuLjUx NmMxOTJjYzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfbm9ybS5oCkBAIC0xNCw4ICsxNCw2IEBA CiAjaWZuZGVmIFVOSUNPREVfTk9STV9ICiAjZGVmaW5lIFVOSUNPREVfTk9STV9ICiAKLSNpbmNs dWRlICJtYi9wZ193Y2hhci5oIgotCiB0eXBlZGVmIGVudW0KIHsKIAlVTklDT0RFX05GQyA9IDAs CkBAIC0zMiw4ICszMCw4IEBAIHR5cGVkZWYgZW51bQogCVVOSUNPREVfTk9STV9RQ19NQVlCRSA9 IC0xLAogfSBVbmljb2RlTm9ybWFsaXphdGlvblFDOwogCi1leHRlcm4gcGdfd2NoYXIgKnVuaWNv ZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBwZ193Y2hh ciAqaW5wdXQpOworZXh0ZXJuIGNoYXIzMl90ICp1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9y bWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlucHV0KTsKIAotZXh0ZXJuIFVu aWNvZGVOb3JtYWxpemF0aW9uUUMgdW5pY29kZV9pc19ub3JtYWxpemVkX3F1aWNrY2hlY2soVW5p Y29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCk7CitleHRl cm4gVW5pY29kZU5vcm1hbGl6YXRpb25RQyB1bmljb2RlX2lzX25vcm1hbGl6ZWRfcXVpY2tjaGVj ayhVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlucHV0KTsK IAogI2VuZGlmCQkJCQkJCS8qIFVOSUNPREVfTk9STV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9tYi9wZ193Y2hhci5oIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaAppbmRleCA0YjRh OTk3NGI3NS4uNGQ4NGJkYzgxZTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21iL3BnX3djaGFy LmgKKysrIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApAQCAtNTMyLDI1ICs1MzIsMjUgQEAg dHlwZWRlZiB1aW50MzIgKCp1dGZfbG9jYWxfY29udmVyc2lvbl9mdW5jKSAodWludDMyIGNvZGUp OwogICogU29tZSBoYW5keSBmdW5jdGlvbnMgZm9yIFVuaWNvZGUtc3BlY2lmaWMgdGVzdHMuCiAg Ki8KIHN0YXRpYyBpbmxpbmUgYm9vbAotaXNfdmFsaWRfdW5pY29kZV9jb2RlcG9pbnQocGdfd2No YXIgYykKK2lzX3ZhbGlkX3VuaWNvZGVfY29kZXBvaW50KGNoYXIzMl90IGMpCiB7CiAJcmV0dXJu IChjID4gMCAmJiBjIDw9IDB4MTBGRkZGKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sCi1pc191 dGYxNl9zdXJyb2dhdGVfZmlyc3QocGdfd2NoYXIgYykKK2lzX3V0ZjE2X3N1cnJvZ2F0ZV9maXJz dChjaGFyMzJfdCBjKQogewogCXJldHVybiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERCRkYpOwog fQogCiBzdGF0aWMgaW5saW5lIGJvb2wKLWlzX3V0ZjE2X3N1cnJvZ2F0ZV9zZWNvbmQocGdfd2No YXIgYykKK2lzX3V0ZjE2X3N1cnJvZ2F0ZV9zZWNvbmQoY2hhcjMyX3QgYykKIHsKIAlyZXR1cm4g KGMgPj0gMHhEQzAwICYmIGMgPD0gMHhERkZGKTsKIH0KIAotc3RhdGljIGlubGluZSBwZ193Y2hh cgotc3Vycm9nYXRlX3BhaXJfdG9fY29kZXBvaW50KHBnX3djaGFyIGZpcnN0LCBwZ193Y2hhciBz ZWNvbmQpCitzdGF0aWMgaW5saW5lIGNoYXIzMl90CitzdXJyb2dhdGVfcGFpcl90b19jb2RlcG9p bnQoY2hhcjE2X3QgZmlyc3QsIGNoYXIxNl90IHNlY29uZCkKIHsKIAlyZXR1cm4gKChmaXJzdCAm IDB4M0ZGKSA8PCAxMCkgKyAweDEwMDAwICsgKHNlY29uZCAmIDB4M0ZGKTsKIH0KQEAgLTU2MSwy MCArNTYxLDIwIEBAIHN1cnJvZ2F0ZV9wYWlyX3RvX2NvZGVwb2ludChwZ193Y2hhciBmaXJzdCwg cGdfd2NoYXIgc2Vjb25kKQogICoKICAqIE5vIGVycm9yIGNoZWNrcyBoZXJlLCBjIG11c3QgcG9p bnQgdG8gYSBsb25nLWVub3VnaCBzdHJpbmcuCiAgKi8KLXN0YXRpYyBpbmxpbmUgcGdfd2NoYXIK K3N0YXRpYyBpbmxpbmUgY2hhcjMyX3QKIHV0ZjhfdG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBj aGFyICpjKQogewogCWlmICgoKmMgJiAweDgwKSA9PSAwKQotCQlyZXR1cm4gKHBnX3djaGFyKSBj WzBdOworCQlyZXR1cm4gKGNoYXIzMl90KSBjWzBdOwogCWVsc2UgaWYgKCgqYyAmIDB4ZTApID09 IDB4YzApCi0JCXJldHVybiAocGdfd2NoYXIpICgoKGNbMF0gJiAweDFmKSA8PCA2KSB8CisJCXJl dHVybiAoY2hhcjMyX3QpICgoKGNbMF0gJiAweDFmKSA8PCA2KSB8CiAJCQkJCQkgICAoY1sxXSAm IDB4M2YpKTsKIAllbHNlIGlmICgoKmMgJiAweGYwKSA9PSAweGUwKQotCQlyZXR1cm4gKHBnX3dj aGFyKSAoKChjWzBdICYgMHgwZikgPDwgMTIpIHwKKwkJcmV0dXJuIChjaGFyMzJfdCkgKCgoY1sw XSAmIDB4MGYpIDw8IDEyKSB8CiAJCQkJCQkgICAoKGNbMV0gJiAweDNmKSA8PCA2KSB8CiAJCQkJ CQkgICAoY1syXSAmIDB4M2YpKTsKIAllbHNlIGlmICgoKmMgJiAweGY4KSA9PSAweGYwKQotCQly ZXR1cm4gKHBnX3djaGFyKSAoKChjWzBdICYgMHgwNykgPDwgMTgpIHwKKwkJcmV0dXJuIChjaGFy MzJfdCkgKCgoY1swXSAmIDB4MDcpIDw8IDE4KSB8CiAJCQkJCQkgICAoKGNbMV0gJiAweDNmKSA8 PCAxMikgfAogCQkJCQkJICAgKChjWzJdICYgMHgzZikgPDwgNikgfAogCQkJCQkJICAgKGNbM10g JiAweDNmKSk7CkBAIC01ODgsNyArNTg4LDcgQEAgdXRmOF90b191bmljb2RlKGNvbnN0IHVuc2ln bmVkIGNoYXIgKmMpCiAgKiB1bmljb2RlX3V0ZjhsZW4oYykgYnl0ZXMgYXZhaWxhYmxlLgogICov CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKgotdW5pY29kZV90b191dGY4KHBnX3djaGFy IGMsIHVuc2lnbmVkIGNoYXIgKnV0ZjhzdHJpbmcpCit1bmljb2RlX3RvX3V0ZjgoY2hhcjMyX3Qg YywgdW5zaWduZWQgY2hhciAqdXRmOHN0cmluZykKIHsKIAlpZiAoYyA8PSAweDdGKQogCXsKQEAg LTYyMCw3ICs2MjAsNyBAQCB1bmljb2RlX3RvX3V0ZjgocGdfd2NoYXIgYywgdW5zaWduZWQgY2hh ciAqdXRmOHN0cmluZykKICAqIE51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gcmVwcmVzZW50IHRo ZSBnaXZlbiBjaGFyIGluIFVURjguCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci11bmljb2RlX3V0 ZjhsZW4ocGdfd2NoYXIgYykKK3VuaWNvZGVfdXRmOGxlbihjaGFyMzJfdCBjKQogewogCWlmIChj IDw9IDB4N0YpCiAJCXJldHVybiAxOwpAQCAtNjc2LDggKzY3Niw4IEBAIGV4dGVybiBpbnQJcGdf dmFsaWRfc2VydmVyX2VuY29kaW5nKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIGJvb2wgaXNf ZW5jb2Rpbmdfc3VwcG9ydGVkX2J5X2ljdShpbnQgZW5jb2RpbmcpOwogZXh0ZXJuIGNvbnN0IGNo YXIgKmdldF9lbmNvZGluZ19uYW1lX2Zvcl9pY3UoaW50IGVuY29kaW5nKTsKIAotZXh0ZXJuIHVu c2lnbmVkIGNoYXIgKnVuaWNvZGVfdG9fdXRmOChwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICp1 dGY4c3RyaW5nKTsKLWV4dGVybiBwZ193Y2hhciB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWdu ZWQgY2hhciAqYyk7CitleHRlcm4gdW5zaWduZWQgY2hhciAqdW5pY29kZV90b191dGY4KGNoYXIz Ml90IGMsIHVuc2lnbmVkIGNoYXIgKnV0ZjhzdHJpbmcpOworZXh0ZXJuIGNoYXIzMl90IHV0Zjhf dG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpjKTsKIGV4dGVybiBib29sIHBnX3V0Zjhf aXNsZWdhbChjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIGludCBsZW5ndGgpOwogZXh0ZXJu IGludAlwZ191dGZfbWJsZW4oY29uc3QgdW5zaWduZWQgY2hhciAqcyk7CiBleHRlcm4gaW50CXBn X211bGVfbWJsZW4oY29uc3QgdW5zaWduZWQgY2hhciAqcyk7CkBAIC03MzksOCArNzM5LDggQEAg ZXh0ZXJuIGNoYXIgKnBnX3NlcnZlcl90b19jbGllbnQoY29uc3QgY2hhciAqcywgaW50IGxlbik7 CiBleHRlcm4gY2hhciAqcGdfYW55X3RvX3NlcnZlcihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBp bnQgZW5jb2RpbmcpOwogZXh0ZXJuIGNoYXIgKnBnX3NlcnZlcl90b19hbnkoY29uc3QgY2hhciAq cywgaW50IGxlbiwgaW50IGVuY29kaW5nKTsKIAotZXh0ZXJuIHZvaWQgcGdfdW5pY29kZV90b19z ZXJ2ZXIocGdfd2NoYXIgYywgdW5zaWduZWQgY2hhciAqcyk7Ci1leHRlcm4gYm9vbCBwZ191bmlj b2RlX3RvX3NlcnZlcl9ub2Vycm9yKHBnX3djaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnMpOworZXh0 ZXJuIHZvaWQgcGdfdW5pY29kZV90b19zZXJ2ZXIoY2hhcjMyX3QgYywgdW5zaWduZWQgY2hhciAq cyk7CitleHRlcm4gYm9vbCBwZ191bmljb2RlX3RvX3NlcnZlcl9ub2Vycm9yKGNoYXIzMl90IGMs IHVuc2lnbmVkIGNoYXIgKnMpOwogCiBleHRlcm4gdW5zaWduZWQgc2hvcnQgQklHNXRvQ05TKHVu c2lnbmVkIHNob3J0IGJpZzUsIHVuc2lnbmVkIGNoYXIgKmxjKTsKIGV4dGVybiB1bnNpZ25lZCBz aG9ydCBDTlN0b0JJRzUodW5zaWduZWQgc2hvcnQgY25zLCB1bnNpZ25lZCBjaGFyIGxjKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluIGIvc3JjL2luY2x1ZGUvcGdfY29u ZmlnLmguaW4KaW5kZXggYzRkYzVkNzJiZGIuLmZhYjhiYTRhYTZhIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wZ19jb25maWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgpA QCAtNDYzLDYgKzQ2Myw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1p b3MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9URVJNSU9TX0gKIAorLyogRGVmaW5l IHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1Y2hhci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBI QVZFX1VDSEFSX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgY3VybF9nbG9iYWxfaW5pdCgpIGlzIGd1 YXJhbnRlZWQgdG8gYmUgdGhyZWFkLXNhZmUuICovCiAjdW5kZWYgSEFWRV9USFJFQURTQUZFX0NV UkxfR0xPQkFMX0lOSVQKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBiYjRlMWIzNzAw NS4uNzkwYmUzODZkNzUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zNTA1LDYgKzM1 MDUsOCBAQCBjYl9jbGVhbnVwX2RpcgogY2Jfb3B0aW9ucwogY2JfdGFibGVzcGFjZQogY2JfdGFi bGVzcGFjZV9tYXBwaW5nCitjaGFyMTZfdAorY2hhcjMyX3QKIGNoZWNrX2FnZ19hcmd1bWVudHNf Y29udGV4dAogY2hlY2tfZnVuY3Rpb25fY2FsbGJhY2sKIGNoZWNrX25ldHdvcmtfZGF0YQotLSAK Mi40My4wCgo= --=-BjKVMpmaVICBQtjDeQNP--