From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by sourceware.org (Postfix) with ESMTPS id 981AD3858C1F; Thu, 15 Jun 2023 05:07:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 981AD3858C1F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2b1b2ca09b9so20166801fa.1; Wed, 14 Jun 2023 22:07:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686805669; x=1689397669; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=78Gs1SZS0EvcGjttFkeVv38SsrKjdk20ppSd83LrrtY=; b=QobCrCNabyEdfYAtfxM5NYzHsjnPqtdojmvlYTfms5CflbmnXQZoJZfwTLHLARcgMw 4rchDpc/3sKTugX3qfPXcA2/vYuuaqpdhrDcBcw+2s1OFGa4mqfkVSoDAmP6iulvOhwO +iD78x/YERXbJvtNtoddEuuaZFtKDS3aKC2LjUTE5QMnvSfJeKMRYR3wZw8lmB3NNbq9 HJD6w3Zvy3jSJVp3ChaUf01sHC1fcEtRhhamtBOoFgABXV9dRV08OuI/bfPqJE2zniMp B+88MlU7zZYSG8aQpP4Vz5QYVL9YAWql3XO25B9ut8ITkzJg43z690FIclEfflpk5ac4 frwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686805669; x=1689397669; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=78Gs1SZS0EvcGjttFkeVv38SsrKjdk20ppSd83LrrtY=; b=X2DJI0WvtBUzujShaB214TyuxznORQ9NpOuU71yfisXXH0oP3LfUzv7QBHN0ryhQXV 2D5l34HvYFfsMSakgYGSr9gEQS0fkFmYoKVp8kCUb2DlxpDdhIAoYZWkN2EBRI9ZqGzV A/+tgzpozf+XUYhE5MsFIWKVatKkKjusUgZ3wHPzXUk5Z5s03+NaAY5gRyjwlHSFemhc RBDSG8cQEithUhJqJaABqeR2ly53xVMUEnc/enWIiTUn4TcyVq/BdVKkuPhYevxzyN1x 1Us+vZnsgQ89oEb51awd+rDu66kw529HpPEX+GpveW+81LFGFlZsGvoFWRXQrdFErve/ ftYw== X-Gm-Message-State: AC+VfDx4+iZGpRVyKL3JxnzXyH5hB7KThNHwThl2ERMihi4XrnNueopJ zcVCnU7NBHiZ3awW3eSkfqWrw9BrGow= X-Google-Smtp-Source: ACHHUZ4UYSFjsjyrUBVxjfAobfEM255f4J6kpUMQaBtokYiDArHuIJcUjoJDAGxDzVsZsOADsLzTMQ== X-Received: by 2002:a05:6512:3288:b0:4f2:34f1:cf24 with SMTP id p8-20020a056512328800b004f234f1cf24mr9191642lfe.22.1686805668241; Wed, 14 Jun 2023 22:07:48 -0700 (PDT) Received: from [10.37.0.77] ([89.207.171.104]) by smtp.gmail.com with ESMTPSA id i10-20020a05600c290a00b003f819dfa0ddsm12012719wmd.28.2023.06.14.22.07.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Jun 2023 22:07:46 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------J5qc4V0W2ep52T9yaE1LiiWr" Message-ID: <6b960f74-7ef7-8c3f-20bd-3f5a19d1f449@gmail.com> Date: Thu, 15 Jun 2023 07:07:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: en-US To: libstdc++ Cc: gcc-patches From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: [PATCH] Reimplement __gnu_cxx::__ops operators X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------J5qc4V0W2ep52T9yaE1LiiWr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit I think we all agree that __gnu_cxx::__ops needed to be reimplemented, here it is. Note that I kept the usage of std::ref in , and .     libstdc++: Reimplement __gnu_cxx::__ops operators     Replace functors using iterators as input to adopt functors that     are matching the same Standard expectations as the ones imposed on     predicates used in predicates-aware algos. Doing so we need far less     functors. It impose that iterators are dereference at algo level and     not in the functors anymore.     libstdc++-v3/ChangeLog:             * include/std/functional (_Not_fn): Move to...             * include/bits/predefined_ops.h: ...here, and expose a version             in pre-C++14 mode.             (__not_fn): New, use latter.             (_Iter_less_iter, _Iter_less_val, _Val_less_iter, _Iter_equal_to_iter)             (_Iter_equal_to_val, _Iter_comp_iter, _Iter_comp_val, _Val_comp_iter)             (_Iter_equals_val, _Iter_equals_iter, _Iter_pred, _Iter_comp_val)             (_Iter_comp_to_val, _Iter_comp_to_iter, _Iter_negate): Remove.             (__iter_less_iter, __iter_less_val, __iter_comp_val, __val_less_iter)             (__val_comp_iter, __iter_equal_to_iter, __iter_equal_to_val, __iter_comp_iter)             (__val_comp_iter, __iter_equals_val, __iter_comp_iter, __pred_iter): Remove.             (_Less, _Equal_to, _Equal_to_val, _Comp_val): New.             (__less, __equal_to, __comp_val): New.             * include/bits/stl_algo.h: Adapt all algos to use new __gnu_cxx::__ops operators.             When possible use std::move to pass predicates between routines.             * include/bits/stl_algobase.h: Likewise.             * include/bits/stl_heap.h: Likewise.             * include/std/deque: Cleanup usage of __gnu_cxx::__ops operators.             * include/std/string: Likewise.             * include/std/vector: Likewise. Tested under Linux x86_64 normal and _GLIBCXX_DEBUG modes. Ok to commit ? François --------------J5qc4V0W2ep52T9yaE1LiiWr Content-Type: text/x-patch; charset=UTF-8; name="predefined_ops.patch" Content-Disposition: attachment; filename="predefined_ops.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMu aCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMuaAppbmRleCBl OTkzMzM3M2VkOS4uZGM4OTIwZWQ1ZjggMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvcHJlZGVmaW5lZF9vcHMuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL3ByZWRlZmluZWRfb3BzLmgKQEAgLTMyLDM3NiArMzIsMTcwIEBACiAKICNpbmNsdWRl IDxiaXRzL21vdmUuaD4KIAorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyMgaW5jbHVk ZSA8Yml0cy9pbnZva2UuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgX19nbnVfY3h4CiB7CiBu YW1lc3BhY2UgX19vcHMKIHsKLSAgc3RydWN0IF9JdGVyX2xlc3NfaXRlcgorICBzdHJ1Y3Qg X0xlc3MKICAgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVuYW1l IF9JdGVyYXRvcjI+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0xocywgdHlwZW5hbWUgX1Jo cz4KICAgICAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCiAgICAgICBib29sCi0gICAgICBvcGVy YXRvcigpKF9JdGVyYXRvcjEgX19pdDEsIF9JdGVyYXRvcjIgX19pdDIpIGNvbnN0Ci0gICAg ICB7IHJldHVybiAqX19pdDEgPCAqX19pdDI7IH0KKyAgICAgIG9wZXJhdG9yKCkoY29uc3Qg X0xocyYgX19saHMsIGNvbnN0IF9SaHMmIF9fcmhzKSBjb25zdAorICAgICAgeyByZXR1cm4g X19saHMgPCBfX3JoczsgfQogICB9OwogCiAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCi0gIGlu bGluZSBfSXRlcl9sZXNzX2l0ZXIKLSAgX19pdGVyX2xlc3NfaXRlcigpCi0gIHsgcmV0dXJu IF9JdGVyX2xlc3NfaXRlcigpOyB9Ci0KLSAgc3RydWN0IF9JdGVyX2xlc3NfdmFsCi0gIHsK LSNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCi0gICAgY29uc3RleHByIF9JdGVyX2xlc3Nf dmFsKCkgPSBkZWZhdWx0OwotI2Vsc2UKLSAgICBfSXRlcl9sZXNzX3ZhbCgpIHsgfQotI2Vu ZGlmCi0KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGV4cGxpY2l0Ci0gICAgX0l0 ZXJfbGVzc192YWwoX0l0ZXJfbGVzc19pdGVyKSB7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1ZhbHVlPgotICAgICAgX0dMSUJDWFgyMF9DT05T VEVYUFIKLSAgICAgIGJvb2wKLSAgICAgIG9wZXJhdG9yKCkoX0l0ZXJhdG9yIF9faXQsIF9W YWx1ZSYgX192YWwpIGNvbnN0Ci0gICAgICB7IHJldHVybiAqX19pdCA8IF9fdmFsOyB9Ci0g IH07Ci0KLSAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgaW5saW5lIF9JdGVyX2xlc3NfdmFs Ci0gIF9faXRlcl9sZXNzX3ZhbCgpCi0gIHsgcmV0dXJuIF9JdGVyX2xlc3NfdmFsKCk7IH0K LQotICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICBpbmxpbmUgX0l0ZXJfbGVzc192YWwKLSAg X19pdGVyX2NvbXBfdmFsKF9JdGVyX2xlc3NfaXRlcikKLSAgeyByZXR1cm4gX0l0ZXJfbGVz c192YWwoKTsgfQotCi0gIHN0cnVjdCBfVmFsX2xlc3NfaXRlcgotICB7Ci0jaWYgX19jcGx1 c3BsdXMgPj0gMjAxMTAzTAotICAgIGNvbnN0ZXhwciBfVmFsX2xlc3NfaXRlcigpID0gZGVm YXVsdDsKLSNlbHNlCi0gICAgX1ZhbF9sZXNzX2l0ZXIoKSB7IH0KLSNlbmRpZgotCi0gICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBleHBsaWNpdAotICAgIF9WYWxfbGVzc19pdGVy KF9JdGVyX2xlc3NfaXRlcikgeyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWUs IHR5cGVuYW1lIF9JdGVyYXRvcj4KLSAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAg ICBib29sCi0gICAgICBvcGVyYXRvcigpKF9WYWx1ZSYgX192YWwsIF9JdGVyYXRvciBfX2l0 KSBjb25zdAotICAgICAgeyByZXR1cm4gX192YWwgPCAqX19pdDsgfQotICB9OwotCi0gIF9H TElCQ1hYMjBfQ09OU1RFWFBSCi0gIGlubGluZSBfVmFsX2xlc3NfaXRlcgotICBfX3ZhbF9s ZXNzX2l0ZXIoKQotICB7IHJldHVybiBfVmFsX2xlc3NfaXRlcigpOyB9Ci0KLSAgX0dMSUJD WFgyMF9DT05TVEVYUFIKLSAgaW5saW5lIF9WYWxfbGVzc19pdGVyCi0gIF9fdmFsX2NvbXBf aXRlcihfSXRlcl9sZXNzX2l0ZXIpCi0gIHsgcmV0dXJuIF9WYWxfbGVzc19pdGVyKCk7IH0K LQotICBzdHJ1Y3QgX0l0ZXJfZXF1YWxfdG9faXRlcgotICB7Ci0gICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yMSwgdHlwZW5hbWUgX0l0ZXJhdG9yMj4KLSAgICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCi0gICAgICBib29sCi0gICAgICBvcGVyYXRvcigpKF9JdGVyYXRvcjEg X19pdDEsIF9JdGVyYXRvcjIgX19pdDIpIGNvbnN0Ci0gICAgICB7IHJldHVybiAqX19pdDEg PT0gKl9faXQyOyB9Ci0gIH07Ci0KLSAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgaW5saW5l IF9JdGVyX2VxdWFsX3RvX2l0ZXIKLSAgX19pdGVyX2VxdWFsX3RvX2l0ZXIoKQotICB7IHJl dHVybiBfSXRlcl9lcXVhbF90b19pdGVyKCk7IH0KKyAgaW5saW5lIF9MZXNzCisgIF9fbGVz cygpCisgIHsgcmV0dXJuIF9MZXNzKCk7IH0KIAotICBzdHJ1Y3QgX0l0ZXJfZXF1YWxfdG9f dmFsCisgIHN0cnVjdCBfRXF1YWxfdG8KICAgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvciwgdHlwZW5hbWUgX1ZhbHVlPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9MaHMs IHR5cGVuYW1lIF9SaHM+CiAgICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgICAgYm9v bAotICAgICAgb3BlcmF0b3IoKShfSXRlcmF0b3IgX19pdCwgX1ZhbHVlJiBfX3ZhbCkgY29u c3QKLSAgICAgIHsgcmV0dXJuICpfX2l0ID09IF9fdmFsOyB9CisgICAgICBvcGVyYXRvcigp KGNvbnN0IF9MaHMmIF9fbGhzLCBjb25zdCBfUmhzJiBfX3JocykgY29uc3QKKyAgICAgIHsg cmV0dXJuIF9fbGhzID09IF9fcmhzOyB9CiAgIH07CiAKICAgX0dMSUJDWFgyMF9DT05TVEVY UFIKLSAgaW5saW5lIF9JdGVyX2VxdWFsX3RvX3ZhbAotICBfX2l0ZXJfZXF1YWxfdG9fdmFs KCkKLSAgeyByZXR1cm4gX0l0ZXJfZXF1YWxfdG9fdmFsKCk7IH0KLQotICBfR0xJQkNYWDIw X0NPTlNURVhQUgotICBpbmxpbmUgX0l0ZXJfZXF1YWxfdG9fdmFsCi0gIF9faXRlcl9jb21w X3ZhbChfSXRlcl9lcXVhbF90b19pdGVyKQotICB7IHJldHVybiBfSXRlcl9lcXVhbF90b192 YWwoKTsgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgotICAgIHN0cnVjdCBf SXRlcl9jb21wX2l0ZXIKLSAgICB7Ci0gICAgICBfQ29tcGFyZSBfTV9jb21wOwotCi0gICAg ICBleHBsaWNpdCBfR0xJQkNYWDE0X0NPTlNURVhQUgotICAgICAgX0l0ZXJfY29tcF9pdGVy KF9Db21wYXJlIF9fY29tcCkKLQk6IF9NX2NvbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKQot ICAgICAgeyB9Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcjEsIHR5cGVu YW1lIF9JdGVyYXRvcjI+Ci0gICAgICAgIF9HTElCQ1hYMTRfQ09OU1RFWFBSCi0gICAgICAg IGJvb2wKLSAgICAgICAgb3BlcmF0b3IoKShfSXRlcmF0b3IxIF9faXQxLCBfSXRlcmF0b3Iy IF9faXQyKQotICAgICAgICB7IHJldHVybiBib29sKF9NX2NvbXAoKl9faXQxLCAqX19pdDIp KTsgfQotICAgIH07Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmU+Ci0gICAgX0dM SUJDWFgxNF9DT05TVEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJfY29tcF9pdGVyPF9Db21wYXJl PgotICAgIF9faXRlcl9jb21wX2l0ZXIoX0NvbXBhcmUgX19jb21wKQotICAgIHsgcmV0dXJu IF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4oX0dMSUJDWFhfTU9WRShfX2NvbXApKTsgfQot Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgotICAgIHN0cnVjdCBfSXRlcl9jb21w X3ZhbAotICAgIHsKLSAgICAgIF9Db21wYXJlIF9NX2NvbXA7Ci0KLSAgICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNpdAotICAgICAgX0l0ZXJfY29tcF92YWwoX0Nv bXBhcmUgX19jb21wKQotCTogX01fY29tcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpCi0gICAg ICB7IH0KLQotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0g ICAgICBfSXRlcl9jb21wX3ZhbChjb25zdCBfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+JiBf X2NvbXApCi0JOiBfTV9jb21wKF9fY29tcC5fTV9jb21wKQotICAgICAgeyB9Ci0KLSNpZiBf X2NwbHVzcGx1cyA+PSAyMDExMDNMCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAg ICAgZXhwbGljaXQKLSAgICAgIF9JdGVyX2NvbXBfdmFsKF9JdGVyX2NvbXBfaXRlcjxfQ29t cGFyZT4mJiBfX2NvbXApCi0JOiBfTV9jb21wKHN0ZDo6bW92ZShfX2NvbXAuX01fY29tcCkp Ci0gICAgICB7IH0KLSNlbmRpZgotCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9WYWx1ZT4KLQlfR0xJQkNYWDIwX0NPTlNURVhQUgotCWJvb2wKLQlv cGVyYXRvcigpKF9JdGVyYXRvciBfX2l0LCBfVmFsdWUmIF9fdmFsKQotCXsgcmV0dXJuIGJv b2woX01fY29tcCgqX19pdCwgX192YWwpKTsgfQotICAgIH07Ci0KLSAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NvbXBhcmU+Ci0gICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBpbmxpbmUg X0l0ZXJfY29tcF92YWw8X0NvbXBhcmU+Ci0gICAgX19pdGVyX2NvbXBfdmFsKF9Db21wYXJl IF9fY29tcCkKLSAgICB7IHJldHVybiBfSXRlcl9jb21wX3ZhbDxfQ29tcGFyZT4oX0dMSUJD WFhfTU9WRShfX2NvbXApKTsgfQotCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlPgot ICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgaW5saW5lIF9JdGVyX2NvbXBfdmFsPF9D b21wYXJlPgotICAgIF9faXRlcl9jb21wX3ZhbChfSXRlcl9jb21wX2l0ZXI8X0NvbXBhcmU+ IF9fY29tcCkKLSAgICB7IHJldHVybiBfSXRlcl9jb21wX3ZhbDxfQ29tcGFyZT4oX0dMSUJD WFhfTU9WRShfX2NvbXApKTsgfQorICBpbmxpbmUgX0VxdWFsX3RvCisgIF9fZXF1YWxfdG8o KQorICB7IHJldHVybiBfRXF1YWxfdG8oKTsgfQogCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9D b21wYXJlPgotICAgIHN0cnVjdCBfVmFsX2NvbXBfaXRlcgorICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVmFsPgorICAgIHN0cnVjdCBfRXF1YWxfdG9fdmFsCiAgICAgewotICAgICAgX0NvbXBh cmUgX01fY29tcDsKKyAgICAgIGNvbnN0IF9WYWwmIF9NX3ZhbDsKIAogICAgICAgX0dMSUJD WFgyMF9DT05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfVmFsX2NvbXBfaXRlcihf Q29tcGFyZSBfX2NvbXApCi0JOiBfTV9jb21wKF9HTElCQ1hYX01PVkUoX19jb21wKSkKKyAg ICAgIF9FcXVhbF90b192YWwoY29uc3QgX1ZhbCYgX192YWwpCisgICAgICA6IF9NX3ZhbChf X3ZhbCkKICAgICAgIHsgfQogCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAg ZXhwbGljaXQKLSAgICAgIF9WYWxfY29tcF9pdGVyKGNvbnN0IF9JdGVyX2NvbXBfaXRlcjxf Q29tcGFyZT4mIF9fY29tcCkKLQk6IF9NX2NvbXAoX19jb21wLl9NX2NvbXApCi0gICAgICB7 IH0KLQotI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKLSAgICAgIF9HTElCQ1hYMjBfQ09O U1RFWFBSCi0gICAgICBleHBsaWNpdAotICAgICAgX1ZhbF9jb21wX2l0ZXIoX0l0ZXJfY29t cF9pdGVyPF9Db21wYXJlPiYmIF9fY29tcCkKLQk6IF9NX2NvbXAoc3RkOjptb3ZlKF9fY29t cC5fTV9jb21wKSkKLSAgICAgIHsgfQotI2VuZGlmCi0KLSAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9WYWx1ZSwgdHlwZW5hbWUgX0l0ZXJhdG9yPgorICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX0xocz4KIAlfR0xJQkNYWDIwX0NPTlNURVhQUgogCWJvb2wKLQlvcGVyYXRvcigpKF9W YWx1ZSYgX192YWwsIF9JdGVyYXRvciBfX2l0KQotCXsgcmV0dXJuIGJvb2woX01fY29tcChf X3ZhbCwgKl9faXQpKTsgfQorCW9wZXJhdG9yKCkoY29uc3QgX0xocyYgX19saHMpIGNvbnN0 CisJeyByZXR1cm4gX19saHMgPT0gX01fdmFsOyB9CiAgICAgfTsKIAotICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ29tcGFyZT4KLSAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgIGlubGlu ZSBfVmFsX2NvbXBfaXRlcjxfQ29tcGFyZT4KLSAgICBfX3ZhbF9jb21wX2l0ZXIoX0NvbXBh cmUgX19jb21wKQotICAgIHsgcmV0dXJuIF9WYWxfY29tcF9pdGVyPF9Db21wYXJlPihfR0xJ QkNYWF9NT1ZFKF9fY29tcCkpOyB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbXBhcmU+ CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIK LSAgICBpbmxpbmUgX1ZhbF9jb21wX2l0ZXI8X0NvbXBhcmU+Ci0gICAgX192YWxfY29tcF9p dGVyKF9JdGVyX2NvbXBfaXRlcjxfQ29tcGFyZT4gX19jb21wKQotICAgIHsgcmV0dXJuIF9W YWxfY29tcF9pdGVyPF9Db21wYXJlPihfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOyB9CisgICAg aW5saW5lIF9FcXVhbF90b192YWw8X1ZhbD4KKyAgICBfX2VxdWFsX3RvKGNvbnN0IF9WYWwm IF9fdmFsKQorICAgIHsgcmV0dXJuIF9FcXVhbF90b192YWw8X1ZhbD4oX192YWwpOyB9CiAK LSAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlPgotICAgIHN0cnVjdCBfSXRlcl9lcXVhbHNf dmFsCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9CaW5hcnlQcmVkLCB0eXBlbmFtZSBfVmFsPgor ICAgIHN0cnVjdCBfQ29tcF92YWwKICAgICB7Ci0gICAgICBfVmFsdWUmIF9NX3ZhbHVlOwor ICAgICAgX0JpbmFyeVByZWQgX01fYmluYXJ5X3ByZWQ7CisgICAgICBjb25zdCBfVmFsJiBf TV92YWw7CiAKICAgICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNpdAot ICAgICAgX0l0ZXJfZXF1YWxzX3ZhbChfVmFsdWUmIF9fdmFsdWUpCi0JOiBfTV92YWx1ZShf X3ZhbHVlKQorICAgICAgX0NvbXBfdmFsKF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQsIGNv bnN0IF9WYWwmIF9fdmFsKQorICAgICAgOiBfTV9iaW5hcnlfcHJlZChfR0xJQkNYWF9NT1ZF KF9fYmluYXJ5X3ByZWQpKSwgX01fdmFsKF9fdmFsKQogICAgICAgeyB9CiAKLSAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9M aHM+CiAJX0dMSUJDWFgyMF9DT05TVEVYUFIKIAlib29sCi0Jb3BlcmF0b3IoKShfSXRlcmF0 b3IgX19pdCkKLQl7IHJldHVybiAqX19pdCA9PSBfTV92YWx1ZTsgfQorCW9wZXJhdG9yKCko Y29uc3QgX0xocyYgX19saHMpIGNvbnN0CisJeyByZXR1cm4gX01fYmluYXJ5X3ByZWQoX19s aHMsIF9NX3ZhbCk7IH0KICAgICB9OwogCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZT4K KyAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpbmFyeVByZWQsIHR5cGVuYW1lIF9WYWw+CiAgICAg X0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICBpbmxpbmUgX0l0ZXJfZXF1YWxzX3ZhbDxfVmFs dWU+Ci0gICAgX19pdGVyX2VxdWFsc192YWwoX1ZhbHVlJiBfX3ZhbCkKLSAgICB7IHJldHVy biBfSXRlcl9lcXVhbHNfdmFsPF9WYWx1ZT4oX192YWwpOyB9Ci0KLSAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yMT4KLSAgICBzdHJ1Y3QgX0l0ZXJfZXF1YWxzX2l0ZXIKLSAgICB7 Ci0gICAgICBfSXRlcmF0b3IxIF9NX2l0MTsKKyAgICBpbmxpbmUgX0NvbXBfdmFsPF9CaW5h cnlQcmVkLCBfVmFsPgorICAgIF9fY29tcF92YWwoX0JpbmFyeVByZWQgX19wcmVkLCBjb25z dCBfVmFsJiBfX3ZhbCkKKyAgICB7IHJldHVybiBfQ29tcF92YWw8X0JpbmFyeVByZWQsIF9W YWw+KF9HTElCQ1hYX01PVkUoX19wcmVkKSwgX192YWwpOyB9CiAKLSAgICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCi0gICAgICBleHBsaWNpdAotICAgICAgX0l0ZXJfZXF1YWxzX2l0ZXIo X0l0ZXJhdG9yMSBfX2l0MSkKLQk6IF9NX2l0MShfX2l0MSkKLSAgICAgIHsgfQotCi0gICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IyPgotCV9HTElCQ1hYMjBfQ09OU1RFWFBS Ci0JYm9vbAotCW9wZXJhdG9yKCkoX0l0ZXJhdG9yMiBfX2l0MikKLQl7IHJldHVybiAqX19p dDIgPT0gKl9NX2l0MTsgfQotICAgIH07Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yPgotICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgaW5saW5lIF9JdGVyX2VxdWFs c19pdGVyPF9JdGVyYXRvcj4KLSAgICBfX2l0ZXJfY29tcF9pdGVyKF9JdGVyX2VxdWFsX3Rv X2l0ZXIsIF9JdGVyYXRvciBfX2l0KQotICAgIHsgcmV0dXJuIF9JdGVyX2VxdWFsc19pdGVy PF9JdGVyYXRvcj4oX19pdCk7IH0KLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUHJlZGljYXRl PgotICAgIHN0cnVjdCBfSXRlcl9wcmVkCi0gICAgewotICAgICAgX1ByZWRpY2F0ZSBfTV9w cmVkOwotCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgZXhwbGljaXQKLSAg ICAgIF9JdGVyX3ByZWQoX1ByZWRpY2F0ZSBfX3ByZWQpCi0JOiBfTV9wcmVkKF9HTElCQ1hY X01PVkUoX19wcmVkKSkKLSAgICAgIHsgfQotCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcmF0b3I+Ci0JX0dMSUJDWFgyMF9DT05TVEVYUFIKLQlib29sCi0Jb3BlcmF0b3IoKShf SXRlcmF0b3IgX19pdCkKLQl7IHJldHVybiBib29sKF9NX3ByZWQoKl9faXQpKTsgfQotICAg IH07Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KLSAgICBfR0xJQkNYWDIw X0NPTlNURVhQUgotICAgIGlubGluZSBfSXRlcl9wcmVkPF9QcmVkaWNhdGU+Ci0gICAgX19w cmVkX2l0ZXIoX1ByZWRpY2F0ZSBfX3ByZWQpCi0gICAgeyByZXR1cm4gX0l0ZXJfcHJlZDxf UHJlZGljYXRlPihfR0xJQkNYWF9NT1ZFKF9fcHJlZCkpOyB9Ci0KLSAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9WYWx1ZT4KLSAgICBzdHJ1Y3QgX0l0ZXJfY29t cF90b192YWwKLSAgICB7Ci0gICAgICBfQ29tcGFyZSBfTV9jb21wOwotICAgICAgX1ZhbHVl JiBfTV92YWx1ZTsKLQotICAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKLSAgICAgIF9JdGVy X2NvbXBfdG9fdmFsKF9Db21wYXJlIF9fY29tcCwgX1ZhbHVlJiBfX3ZhbHVlKQotCTogX01f Y29tcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpLCBfTV92YWx1ZShfX3ZhbHVlKQotICAgICAg eyB9Cit9IC8vIG5hbWVzcGFjZSBfX29wcworfSAvLyBuYW1lc3BhY2UgX19nbnVfY3h4CiAK LSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KLQlfR0xJQkNYWDIwX0NPTlNU RVhQUgotCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVyYXRvciBfX2l0KQotCXsgcmV0dXJuIGJv b2woX01fY29tcCgqX19pdCwgX01fdmFsdWUpKTsgfQotICAgIH07CiAKLSAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9WYWx1ZT4KLSAgICBfSXRlcl9jb21wX3Rv X3ZhbDxfQ29tcGFyZSwgX1ZhbHVlPgotICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAg X19pdGVyX2NvbXBfdmFsKF9Db21wYXJlIF9fY29tcCwgX1ZhbHVlICZfX3ZhbCkKLSAgICB7 Ci0gICAgICByZXR1cm4gX0l0ZXJfY29tcF90b192YWw8X0NvbXBhcmUsIF9WYWx1ZT4oX0dM SUJDWFhfTU9WRShfX2NvbXApLCBfX3ZhbCk7Ci0gICAgfQorbmFtZXNwYWNlIHN0ZCBfR0xJ QkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf VkVSU0lPTgogCi0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfSXRl cmF0b3IxPgotICAgIHN0cnVjdCBfSXRlcl9jb21wX3RvX2l0ZXIKKyAgLy8vIEdlbmVyYWxp emVkIG5lZ2F0b3IuCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gbj4KKyAgICBjbGFzcyBfTm90 X2ZuCiAgICAgewotICAgICAgX0NvbXBhcmUgX01fY29tcDsKLSAgICAgIF9JdGVyYXRvcjEg X01faXQxOwotCi0gICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgotICAgICAgX0l0ZXJfY29t cF90b19pdGVyKF9Db21wYXJlIF9fY29tcCwgX0l0ZXJhdG9yMSBfX2l0MSkKLQk6IF9NX2Nv bXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKSwgX01faXQxKF9faXQxKQotICAgICAgeyB9Cisj aWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTAorICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zu MiwgdHlwZW5hbWUuLi4gX0FyZ3M+CisJdXNpbmcgX19pbnZfcmVzX3QgPSB0eXBlbmFtZSBf X2ludm9rZV9yZXN1bHQ8X0ZuMiwgX0FyZ3MuLi4+Ojp0eXBlOworCisgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CisJc3RhdGljIGRlY2x0eXBlKCFzdGQ6OmRlY2x2YWw8X1RwPigp KQorCV9TX25vdCgpIF9HTElCQ1hYX05PRVhDRVBUX0lGKG5vZXhjZXB0KCFzdGQ6OmRlY2x2 YWw8X1RwPigpKSk7CisKKyAgICBwdWJsaWM6CisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm4yPgorCV9HTElCQ1hYMTRfQ09OU1RFWFBSCisJX05vdF9mbihfRm4yJiYgX19mbiwgaW50 KQorCTogX01fZm4oc3RkOjpmb3J3YXJkPF9GbjI+KF9fZm4pKSB7IH0KKworICAgICAgX05v dF9mbihjb25zdCBfTm90X2ZuJiBfX2ZuKSA9IGRlZmF1bHQ7CisgICAgICBfTm90X2ZuKF9O b3RfZm4mJiBfX2ZuKSA9IGRlZmF1bHQ7CisgICAgICB+X05vdF9mbigpID0gZGVmYXVsdDsK KyNlbHNlCisgICAgcHVibGljOgorICAgICAgX05vdF9mbihfRm4gX19mbiwgaW50KQorICAg ICAgOiBfTV9mbihfX2ZuKSB7IH0KKyNlbmRpZgogCi0gICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IyPgotCV9HTElCQ1hYMjBfQ09OU1RFWFBSCisjaWYgX19jcGx1c3BsdXMg Pj0gMjAxMTAzTAorICAgICAgLy8gTWFjcm8gdG8gZGVmaW5lIG9wZXJhdG9yKCkgd2l0aCBn aXZlbiBjdi1xdWFsaWZpZXJzIHJlZi1xdWFsaWZpZXJzLAorICAgICAgLy8gZm9yd2FyZGlu ZyBfTV9mbiBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIHF1YWxp ZmllcnMsCisgICAgICAvLyBhbmQgZGVkdWNpbmcgdGhlIHJldHVybiB0eXBlIGFuZCBleGNl cHRpb24tc3BlY2lmaWNhdGlvbi4KKyMgZGVmaW5lIF9HTElCQ1hYX05PVF9GTl9DQUxMX09Q KCBfUVVBTFMgKQkJCQlcCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBfQXJncz4JCQkJ CVwKKwlfR0xJQkNYWDIwX0NPTlNURVhQUgkJCQkJCVwKKwlkZWNsdHlwZShfU19ub3Q8X19p bnZfcmVzX3Q8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+PigpKQkJXAorCW9wZXJhdG9yKCkoX0Fy Z3MmJi4uLiBfX2FyZ3MpIF9RVUFMUwkJCQlcCisJbm9leGNlcHQoX19pc19ub3Rocm93X2lu dm9jYWJsZTxfRm4gX1FVQUxTLCBfQXJncy4uLj46OnZhbHVlCVwKKwkgICYmIG5vZXhjZXB0 KF9TX25vdDxfX2ludl9yZXNfdDxfRm4gX1FVQUxTLCBfQXJncy4uLj4+KCkpKQlcCisJewkJ CQkJCQkJXAorCSAgcmV0dXJuICFzdGQ6Ol9faW52b2tlKHN0ZDo6Zm9yd2FyZDwgX0ZuIF9R VUFMUyA+KF9NX2ZuKSwJXAorCQkJCXN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7 CVwKKwl9CisgICAgICBfR0xJQkNYWF9OT1RfRk5fQ0FMTF9PUCggJiApCisgICAgICBfR0xJ QkNYWF9OT1RfRk5fQ0FMTF9PUCggY29uc3QgJiApCisgICAgICBfR0xJQkNYWF9OT1RfRk5f Q0FMTF9PUCggJiYgKQorICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoIGNvbnN0ICYm ICkKKyMgdW5kZWYgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AKKyNlbHNlCisgICAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQXJnPgogCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVyYXRvcjIgX19p dDIpCi0JeyByZXR1cm4gYm9vbChfTV9jb21wKCpfX2l0MiwgKl9NX2l0MSkpOyB9Ci0gICAg fTsKLQotICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0l0ZXJhdG9y PgotICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgaW5saW5lIF9JdGVyX2NvbXBfdG9f aXRlcjxfQ29tcGFyZSwgX0l0ZXJhdG9yPgotICAgIF9faXRlcl9jb21wX2l0ZXIoX0l0ZXJf Y29tcF9pdGVyPF9Db21wYXJlPiBfX2NvbXAsIF9JdGVyYXRvciBfX2l0KQotICAgIHsKLSAg ICAgIHJldHVybiBfSXRlcl9jb21wX3RvX2l0ZXI8X0NvbXBhcmUsIF9JdGVyYXRvcj4oCi0J ICBfR0xJQkNYWF9NT1ZFKF9fY29tcC5fTV9jb21wKSwgX19pdCk7Ci0gICAgfQotCi0gIHRl bXBsYXRlPHR5cGVuYW1lIF9QcmVkaWNhdGU+Ci0gICAgc3RydWN0IF9JdGVyX25lZ2F0ZQot ICAgIHsKLSAgICAgIF9QcmVkaWNhdGUgX01fcHJlZDsKLQotICAgICAgX0dMSUJDWFgyMF9D T05TVEVYUFIKLSAgICAgIGV4cGxpY2l0Ci0gICAgICBfSXRlcl9uZWdhdGUoX1ByZWRpY2F0 ZSBfX3ByZWQpCi0JOiBfTV9wcmVkKF9HTElCQ1hYX01PVkUoX19wcmVkKSkKLSAgICAgIHsg fQorCW9wZXJhdG9yKCkoY29uc3QgX0FyZyYgX19hcmcpCisJeyByZXR1cm4gIWJvb2woX01f Zm4oX19hcmcpKTsgfQorI2VuZGlmCiAKLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KLQlfR0xJQkNYWDIwX0NPTlNURVhQUgotCWJvb2wKLQlvcGVyYXRvcigpKF9JdGVy YXRvciBfX2l0KQotCXsgcmV0dXJuICFib29sKF9NX3ByZWQoKl9faXQpKTsgfQorICAgIHBy aXZhdGU6CisgICAgICBfRm4gX01fZm47CiAgICAgfTsKIAotICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUHJlZGljYXRlPgorI2lmIF9fY3BsdXNwbHVzID49IDIwMTEwM0wKKyAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZuPgogICAgIF9HTElCQ1hYMjBfQ09OU1RFWFBSCi0gICAgaW5saW5lIF9J dGVyX25lZ2F0ZTxfUHJlZGljYXRlPgotICAgIF9fbmVnYXRlKF9JdGVyX3ByZWQ8X1ByZWRp Y2F0ZT4gX19wcmVkKQotICAgIHsgcmV0dXJuIF9JdGVyX25lZ2F0ZTxfUHJlZGljYXRlPihf R0xJQkNYWF9NT1ZFKF9fcHJlZC5fTV9wcmVkKSk7IH0KKyAgICBpbmxpbmUgX05vdF9mbjxz dGQ6Ol9fZGVjYXlfdDxfRm4+PgorICAgIF9fbm90X2ZuKF9GbiYmIF9fZm4pCisgICAgbm9l eGNlcHQoc3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGlibGU8c3RkOjpfX2RlY2F5X3Q8X0Zu PiwgX0ZuJiY+Ojp2YWx1ZSkKKyAgICB7IHJldHVybiBfTm90X2ZuPHN0ZDo6X19kZWNheV90 PF9Gbj4+e3N0ZDo6Zm9yd2FyZDxfRm4+KF9fZm4pLCAwfTsgfQorI2Vsc2UKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZuPgorICAgIGlubGluZSBfTm90X2ZuPF9Gbj4KKyAgICBfX25vdF9m bihfRm4gX19mbikKKyAgICB7IHJldHVybiBfTm90X2ZuPF9Gbj4oX19mbiwgMCk7IH0KKyNl bmRpZgogCi19IC8vIG5hbWVzcGFjZSBfX29wcwotfSAvLyBuYW1lc3BhY2UgX19nbnVfY3h4 CitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAog CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2Fs Z28uaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ28uaAppbmRleCAyYzUy ZWQ1MTQwMi4uYWFjMjljMjk4MjAgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRl L2JpdHMvc3RsX2FsZ28uaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9h bGdvLmgKQEAgLTg1LDE4ICs4NSwxOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogICAgIF9fbW92ZV9tZWRpYW5fdG9fZmlyc3QoX0l0ZXJhdG9yIF9fcmVzdWx0LF9J dGVyYXRvciBfX2EsIF9JdGVyYXRvciBfX2IsCiAJCQkgICBfSXRlcmF0b3IgX19jLCBfQ29t cGFyZSBfX2NvbXApCiAgICAgewotICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpCisgICAg ICBpZiAoX19jb21wKCpfX2EsICpfX2IpKQogCXsKLQkgIGlmIChfX2NvbXAoX19iLCBfX2Mp KQorCSAgaWYgKF9fY29tcCgqX19iLCAqX19jKSkKIAkgICAgc3RkOjppdGVyX3N3YXAoX19y ZXN1bHQsIF9fYik7Ci0JICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQorCSAgZWxzZSBp ZiAoX19jb21wKCpfX2EsICpfX2MpKQogCSAgICBzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwg X19jKTsKIAkgIGVsc2UKIAkgICAgc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYSk7CiAJ fQotICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKKyAgICAgIGVsc2UgaWYgKF9f Y29tcCgqX19hLCAqX19jKSkKIAlzdGQ6Oml0ZXJfc3dhcChfX3Jlc3VsdCwgX19hKTsKLSAg ICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCisgICAgICBlbHNlIGlmIChfX2NvbXAo Kl9fYiwgKl9fYykpCiAJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYyk7CiAgICAgICBl bHNlCiAJc3RkOjppdGVyX3N3YXAoX19yZXN1bHQsIF9fYik7CkBAIC0xMTAsNyArMTEwLDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkJICBfUHJlZGljYXRlIF9f cHJlZCkKICAgICB7CiAgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRfaWYoX19maXJzdCwgX19s YXN0LAotCQkJICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbmVnYXRlKF9fcHJlZCksCisJCQkg ICAgc3RkOjpfX25vdF9mbihfR0xJQkNYWF9NT1ZFKF9fcHJlZCkpLAogCQkJICAgIHN0ZDo6 X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgfQogCkBAIC0xMjMsNyArMTIz LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfX2ZpbmRfaWZf bm90X24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlJiBfX2xlbiwgX1ByZWRp Y2F0ZSBfX3ByZWQpCiAgICAgewogICAgICAgZm9yICg7IF9fbGVuOyAtLV9fbGVuLCAgKHZv aWQpICsrX19maXJzdCkKLQlpZiAoIV9fcHJlZChfX2ZpcnN0KSkKKwlpZiAoIV9fcHJlZCgq X19maXJzdCkpCiAJICBicmVhazsKICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgIH0KQEAg LTE2MCw3ICsxNjAsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAg ICBfX24gPSBfX2NvdW50OwogCSAgX0ZvcndhcmRJdGVyYXRvciBfX2kgPSBfX2ZpcnN0Owog CSAgKytfX2k7Ci0JICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMSAmJiBfX3Vu YXJ5X3ByZWQoX19pKSkKKwkgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAxICYm IF9fdW5hcnlfcHJlZCgqX19pKSkKIAkgICAgewogCSAgICAgICsrX19pOwogCSAgICAgIC0t X19uOwpAQCAtMTk5LDcgKzE5OSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAJICAvLyBfX2ZpcnN0IGhlcmUgaXMgYWx3YXlzIHBvaW50aW5nIHRvIG9uZSBwYXN0 IHRoZSBsYXN0IGVsZW1lbnQgb2YKIAkgIC8vIG5leHQgcG9zc2libGUgbWF0Y2guCiAJICBf UmFuZG9tQWNjZXNzSXRlciBfX2JhY2tUcmFjayA9IF9fZmlyc3Q7IAotCSAgd2hpbGUgKF9f dW5hcnlfcHJlZCgtLV9fYmFja1RyYWNrKSkKKwkgIHdoaWxlIChfX3VuYXJ5X3ByZWQoKigt LV9fYmFja1RyYWNrKSkpCiAJICAgIHsKIAkgICAgICBpZiAoLS1fX3JlbWFpbmRlciA9PSAw KQogCQlyZXR1cm4gKF9fZmlyc3QgLSBfX2NvdW50KTsgLy8gU3VjY2VzcwpAQCAtMzM3LDcg KzMzNyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICByZXR1 cm4gc3RkOjpfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0 MiwKIAkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKIAkJCSAg ICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKLQkJCSAgICAgX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2VxdWFsX3RvX2l0ZXIoKSk7CisJCQkgICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9fZXF1YWxfdG8oKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMzg4LDcgKzM4 OCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICByZXR1cm4g c3RkOjpfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwK IAkJCSAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKIAkJCSAgICAg c3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKLQkJCSAgICAgX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCSAgICAgX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCkBA IC00MDgsNyArNDA4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSBib29sCiAgICAgYWxsX29mKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1ByZWRpY2F0 ZSBfX3ByZWQpCi0gICAgeyByZXR1cm4gX19sYXN0ID09IHN0ZDo6ZmluZF9pZl9ub3QoX19m aXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisgICAgeyByZXR1cm4gX19sYXN0ID09IHN0ZDo6 ZmluZF9pZl9ub3QoX19maXJzdCwgX19sYXN0LCBzdGQ6Om1vdmUoX19wcmVkKSk7IH0KIAog ICAvKioKICAgICogIEBicmllZiAgQ2hlY2tzIHRoYXQgYSBwcmVkaWNhdGUgaXMgZmFsc2Ug Zm9yIGFsbCB0aGUgZWxlbWVudHMKQEAgLTQyNiw3ICs0MjYsMTAgQEAgX0dMSUJDWFhfQkVH SU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlu bGluZSBib29sCiAgICAgbm9uZV9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuIF9fbGFz dCA9PSBfR0xJQkNYWF9TVERfQTo6ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7 IH0KKyAgICB7CisgICAgICByZXR1cm4KKwlfX2xhc3QgPT0gX0dMSUJDWFhfU1REX0E6OmZp bmRfaWYoX19maXJzdCwgX19sYXN0LCBzdGQ6Om1vdmUoX19wcmVkKSk7CisgICAgfQogCiAg IC8qKgogICAgKiAgQGJyaWVmICBDaGVja3MgdGhhdCBhIHByZWRpY2F0ZSBpcyB0cnVlIGZv ciBhdCBsZWFzdCBvbmUgZWxlbWVudApAQCAtNDQ1LDcgKzQ0OCw3IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBp bmxpbmUgYm9vbAogICAgIGFueV9vZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQotICAgIHsgcmV0dXJuICFzdGQ6 Om5vbmVfb2YoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOyB9CisgICAgeyByZXR1cm4gIXN0 ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xhc3QsIHN0ZDo6bW92ZShfX3ByZWQpKTsgfQogCiAg IC8qKgogICAgKiAgQGJyaWVmICBGaW5kIHRoZSBmaXJzdCBlbGVtZW50IGluIGEgc2VxdWVu Y2UgZm9yIHdoaWNoIGEKQEAgLTQ2OCw4ICs0NzEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X2Z1bmN0aW9uX3JlcXVpcmVzKF9VbmFy eVByZWRpY2F0ZUNvbmNlcHQ8X1ByZWRpY2F0ZSwKIAkgICAgICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwotICAgICAgcmV0dXJu IHN0ZDo6X19maW5kX2lmX25vdChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4Ojpf X29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7CisgICAgICByZXR1cm4gc3RkOjpfX2ZpbmRf aWZfbm90KF9fZmlyc3QsIF9fbGFzdCwgc3RkOjptb3ZlKF9fcHJlZCkpOwogICAgIH0KIAog ICAvKioKQEAgLTQ5Miw3ICs0OTQsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogCXJldHVybiB0cnVlOwogICAg ICAgKytfX2ZpcnN0OwotICAgICAgcmV0dXJuIHN0ZDo6bm9uZV9vZihfX2ZpcnN0LCBfX2xh c3QsIF9fcHJlZCk7CisgICAgICByZXR1cm4gc3RkOjpub25lX29mKF9fZmlyc3QsIF9fbGFz dCwgc3RkOjptb3ZlKF9fcHJlZCkpOwogICAgIH0KIAogICAvKioKQEAgLTUzOSw3ICs1NDEs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCX0KICAgICAgIHJldHVy biBfX2ZpcnN0OwogICAgIH0KLSNlbmRpZgorI2VuZGlmIC8vIEMrKzExCiAKICAgdGVtcGxh dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwK IAkgICB0eXBlbmFtZSBfUHJlZGljYXRlPgpAQCAtNTQ5LDcgKzU1MSw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJCSAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVz dWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgICB7CiAgICAgICBmb3IgKDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19maXJzdCkKLQlpZiAoIV9fcHJlZChfX2ZpcnN0KSkKKwlpZiAoIV9f cHJlZCgqX19maXJzdCkpCiAJICB7CiAJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogCSAg ICArK19fcmVzdWx0OwpAQCAtNTg2LDcgKzU4OCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19m aXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19yZW1vdmVfY29weV9pZihf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAotCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9l cXVhbHNfdmFsKF9fdmFsdWUpKTsKKwkJCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2VxdWFs X3RvKF9fdmFsdWUpKTsKICAgICB9CiAKICAgLyoqCkBAIC02MjAsNyArNjIyLDcgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3RkOjpf X3JlbW92ZV9jb3B5X2lmKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0JCQkJICAgX19n bnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7CisJCQkJICAgX0dMSUJDWFhf TU9WRShfX3ByZWQpKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCkBA IC03OTYsNyArNzk4LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwog CiAgICAgICByZXR1cm4gc3RkOjpfX3JlbW92ZV9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCV9f Z251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbHNfdmFsKF9fdmFsdWUpKTsKKwkJCSAgICAg IF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oX192YWx1ZSkpOwogICAgIH0KIAogICAv KioKQEAgLTgyOSw4ICs4MzEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP TgogCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZh bHVlX3R5cGU+KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmly c3QsIF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fcmVtb3ZlX2lmKF9fZmlyc3Qs IF9fbGFzdCwKLQkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fcHJlZF9pdGVyKF9fcHJl ZCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19yZW1vdmVfaWYoX19maXJzdCwgX19sYXN0LCBf R0xJQkNYWF9NT1ZFKF9fcHJlZCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgpAQCAtODQ0LDcg Kzg0NSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICB3aGlsZSAoKytfX25leHQg IT0gX19sYXN0KQogCXsKLQkgIGlmIChfX2JpbmFyeV9wcmVkKF9fZmlyc3QsIF9fbmV4dCkp CisJICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAJICAgIHJldHVy biBfX2ZpcnN0OwogCSAgX19maXJzdCA9IF9fbmV4dDsKIAl9CkBAIC04NjYsNyArODY3LDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9Gb3J3YXJkSXRl cmF0b3IgX19kZXN0ID0gX19maXJzdDsKICAgICAgICsrX19maXJzdDsKICAgICAgIHdoaWxl ICgrK19fZmlyc3QgIT0gX19sYXN0KQotCWlmICghX19iaW5hcnlfcHJlZChfX2Rlc3QsIF9f Zmlyc3QpKQorCWlmICghX19iaW5hcnlfcHJlZCgqX19kZXN0LCAqX19maXJzdCkpCiAJICAq KytfX2Rlc3QgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKICAgICAgIHJldHVybiArK19f ZGVzdDsKICAgICB9CkBAIC04OTgsNyArODk5LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2Zp cnN0LCBfX2xhc3QpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZShfX2ZpcnN0LCBf X2xhc3QsCi0JCQkgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigp KTsKKwkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9fZXF1YWxfdG8oKSk7CiAgICAgfQogCiAg IC8qKgpAQCAtOTMwLDggKzkzMSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAJCXR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFs dWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJz dCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X191bmlxdWUoX19maXJzdCwgX19s YXN0LAotCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2JpbmFy eV9wcmVkKSk7CisgICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3Qs IF9HTElCQ1hYX01PVkUoX19iaW5hcnlfcHJlZCkpOwogICAgIH0KIAogICAvKioKQEAgLTk1 Niw3ICs5NTYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAg X0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQotCWlmICghX19i aW5hcnlfcHJlZChfX2ZpcnN0LCBfX25leHQpKQorCWlmICghX19iaW5hcnlfcHJlZCgqX19m aXJzdCwgKl9fbmV4dCkpCiAJICB7CiAJICAgIF9fZmlyc3QgPSBfX25leHQ7CiAJICAgICor K19fcmVzdWx0ID0gKl9fZmlyc3Q7CkBAIC05ODQsMTIgKzk4NCw5IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlPikKIAogICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7 Ci0gICAgICBfX2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3ZhbChf X2JpbmFyeV9wcmVkKSkKLQlfX3JlYm91bmRfcHJlZAotCT0gX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfdmFsKF9fYmluYXJ5X3ByZWQpOwogICAgICAgKl9fcmVzdWx0ID0gX192 YWx1ZTsKICAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQotCWlmICghX19yZWJv dW5kX3ByZWQoX19maXJzdCwgX192YWx1ZSkpCisJaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2Zp cnN0LCBfX3ZhbHVlKSkKIAkgIHsKIAkgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogCSAgICAq KytfX3Jlc3VsdCA9IF9fdmFsdWU7CkBAIC0xMDE3LDcgKzEwMTQsNyBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCSAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J bnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICAqX19yZXN1bHQgPSAqX19maXJz dDsKICAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQotCWlmICghX19iaW5hcnlf cHJlZChfX3Jlc3VsdCwgX19maXJzdCkpCisJaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3Vs dCwgKl9fZmlyc3QpKQogCSAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgIHJldHVy biArK19fcmVzdWx0OwogICAgIH0KQEAgLTE0NzksNyArMTQ3Niw3IEBAIF9HTElCQ1hYX0VO RF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICArK19fcmVzdWx0MjsKIAkgICsrX19m aXJzdDsKIAkgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQotCSAgICBp ZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAg ICB7CiAJCSpfX3Jlc3VsdDEgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0KTsKIAkJKytfX3Jl c3VsdDE7CkBAIC0xNTM0LDcgKzE1MzEsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9O QU1FU1BBQ0UoX1YyKQogICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRv ciwgX1ZhbHVlVHlwZT4KIAlfX2J1ZihfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCkpOwogICAgICAgcmV0dXJuCi0Jc3RkOjpfX3N0YWJsZV9wYXJ0aXRpb25fYWRh cHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCisJc3RkOjpfX3N0YWJsZV9wYXJ0aXRp b25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fcHJlZCksCiAJ CQkJCSBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogCQkJCQkgX19i dWYuYmVnaW4oKSwKIAkJCQkJIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CkBAIC0x NTY5LDggKzE1NjYsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogCSAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZh bHVlX3R5cGU+KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmly c3QsIF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX3ByZWRfaXRl cihfX3ByZWQpKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlvbihfX2Zp cnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAgICAgfQogI2VuZGlmIC8v IEhPU1RFRAogCkBAIC0xNTg2LDcgKzE1ODIsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogICAgIHsKICAgICAgIHN0ZDo6X19tYWtlX2hlYXAoX19maXJz dCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKLQlpZiAoX19jb21wKF9f aSwgX19maXJzdCkpCisJaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAJICBzdGQ6Ol9f cG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX19jb21wKTsKICAgICB9CiAKQEAg LTE2MTksMTQgKzE2MTUsMTUgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNF KF9WMikKICAgICAgIHN0ZDo6X19tYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0 X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK IAl7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QsIF9fcmVzdWx0X2ZpcnN0KSkKKwkgIGlmIChf X2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAJICAgIHN0ZDo6X19hZGp1c3Rf aGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKIAkJCSAgICAgICBfRGlz dGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdAogCQkJCQkgICAgIC0gX19yZXN1bHRfZmly c3QpLAogCQkJICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksIF9fY29tcCk7CiAJ ICArK19fZmlyc3Q7CiAJfQotICAgICAgc3RkOjpfX3NvcnRfaGVhcChfX3Jlc3VsdF9maXJz dCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOworICAgICAgc3RkOjpfX3NvcnRfaGVh cChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LAorCQkgICAgICAgX0dMSUJD WFhfTU9WRShfX2NvbXApKTsKICAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAg ICAgfQogCkBAIC0xNjc3LDcgKzE2NzQsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9O QU1FU1BBQ0UoX1YyKQogCiAgICAgICByZXR1cm4gc3RkOjpfX3BhcnRpYWxfc29ydF9jb3B5 KF9fZmlyc3QsIF9fbGFzdCwKIAkJCQkgICAgICBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf bGFzdCwKLQkJCQkgICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkp OworCQkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAg LyoqCkBAIC0xNzMyLDcgKzE3MjksNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1F U1BBQ0UoX1YyKQogCiAgICAgICByZXR1cm4gc3RkOjpfX3BhcnRpYWxfc29ydF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwKIAkJCQkgICAgICBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFz dCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOwor CQkJCSAgICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIC8vLyBAY29u ZCB1bmRvY3VtZW50ZWQKQEAgLTE3NDgsNyArMTc0NSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAJX192YWwgPSBfR0xJQkNYWF9NT1ZFKCpfX2xhc3Qp OwogICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbmV4dCA9IF9fbGFzdDsKICAgICAg IC0tX19uZXh0OwotICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgX19uZXh0KSkKKyAgICAg IHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKQogCXsKIAkgICpfX2xhc3QgPSBfR0xJ QkNYWF9NT1ZFKCpfX25leHQpOwogCSAgX19sYXN0ID0gX19uZXh0OwpAQCAtMTc2NCwxMSAr MTc2MSwxMiBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAg IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAJCSAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAg IHsKLSAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOworICAgICAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KQorCXJldHVybjsKIAogICAgICAgZm9yIChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogCXsK LQkgIGlmIChfX2NvbXAoX19pLCBfX2ZpcnN0KSkKKwkgIGlmIChfX2NvbXAoKl9faSwgKl9f Zmlyc3QpKQogCSAgICB7CiAJICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIAkJX192YWwgPSBfR0xJQkNYWF9NT1ZF KCpfX2kpOwpAQCAtMTc3Niw4ICsxNzc0LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklf TkFNRVNQQUNFKF9WMikKIAkgICAgICAqX19maXJzdCA9IF9HTElCQ1hYX01PVkUoX192YWwp OwogCSAgICB9CiAJICBlbHNlCi0JICAgIHN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2luc2Vy dChfX2ksCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X192YWxfY29tcF9pdGVyKF9fY29tcCkp OworCSAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX2NvbXApOwog CX0KICAgICB9CiAKQEAgLTE3ODksOCArMTc4Niw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAJCQkgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgIHsKICAgICAgIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQotCXN0ZDo6 X191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksCi0JCQkJX19nbnVfY3h4OjpfX29wczo6 X192YWxfY29tcF9pdGVyKF9fY29tcCkpOworCXN0ZDo6X191bmd1YXJkZWRfbGluZWFyX2lu c2VydChfX2ksIF9fY29tcCk7CiAgICAgfQogCiAgIC8qKgpAQCAtMTgxMCwxMCArMTgwNiwx MCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCXsKIAkgIHN0 ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9s ZCksIF9fY29tcCk7CiAJICBzdGQ6Ol9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly c3QgKyBpbnQoX1NfdGhyZXNob2xkKSwgX19sYXN0LAotCQkJCQkgIF9fY29tcCk7CisJCQkJ CSAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAl9CiAgICAgICBlbHNlCi0Jc3RkOjpfX2lu c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKwlzdGQ6Ol9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAg IH0KIAogICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbi4uLgpAQCAtMTgyNiwxMCAr MTgyMiwxMCBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAg IHsKICAgICAgIHdoaWxlICh0cnVlKQogCXsKLQkgIHdoaWxlIChfX2NvbXAoX19maXJzdCwg X19waXZvdCkpCisJICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCAqX19waXZvdCkpCiAJICAg ICsrX19maXJzdDsKIAkgIC0tX19sYXN0OwotCSAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCBf X2xhc3QpKQorCSAgd2hpbGUgKF9fY29tcCgqX19waXZvdCwgKl9fbGFzdCkpCiAJICAgIC0t X19sYXN0OwogCSAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAJICAgIHJldHVybiBfX2Zp cnN0OwpAQCAtMTg0OCw3ICsxODQ0LDggQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZCA9IF9fZmly c3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICAgc3RkOjpfX21vdmVfbWVkaWFu X3RvX2ZpcnN0KF9fZmlyc3QsIF9fZmlyc3QgKyAxLCBfX21pZCwgX19sYXN0IC0gMSwKIAkJ CQkgIF9fY29tcCk7Ci0gICAgICByZXR1cm4gc3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb24o X19maXJzdCArIDEsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKKyAgICAgIHJldHVybiBz dGQ6Ol9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0ICsgMSwgX19sYXN0LCBfX2ZpcnN0 LAorCQkJCQlfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgpAQCAt MTg2MCw3ICsxODU3LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKIAkJICAgX0NvbXBhcmUgX19jb21wKQogICAgIHsKICAgICAgIHN0ZDo6X19oZWFwX3Nl bGVjdChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwotICAgICAgc3RkOjpf X3NvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKKyAgICAgIHN0ZDo6X19z b3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAg ICAgfQogCiAgIC8vLyBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgc29ydCBy b3V0aW5lLgpAQCAtMTg5OSw3ICsxODk2LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklf TkFNRVNQQUNFKF9WMikKIAkgIHN0ZDo6X19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xh c3QsCiAJCQkJc3RkOjpfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKIAkJCQlfX2NvbXAp OwotCSAgc3RkOjpfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsKKwkgIHN0ZDo6X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAJfQogICAgIH0KIApAQCAtMTkyNyw3ICsxOTI0 LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkgIGVsc2UK IAkgICAgX19sYXN0ID0gX19jdXQ7CiAJfQotICAgICAgc3RkOjpfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAg IC8vLyBAZW5kY29uZApAQCAtMTk2NCw4ICsxOTYxLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19wYXJ0aXRp b25lZF9sb3dlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKIAkJCQkJCV9fdmFsLCBfX2NvbXAp OwogCi0gICAgICByZXR1cm4gc3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg X192YWwsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfdmFsKF9fY29tcCkp OworICAgICAgcmV0dXJuIHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f dmFsLCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl PgpAQCAtMTk4NCw3ICsxOTgwLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQ QUNFKF9WMikKIAkgIF9EaXN0YW5jZVR5cGUgX19oYWxmID0gX19sZW4gPj4gMTsKIAkgIF9G b3J3YXJkSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0OwogCSAgc3RkOjphZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOwotCSAgaWYgKF9fY29tcChfX3ZhbCwgX19taWRkbGUpKQorCSAg aWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKIAkgICAgX19sZW4gPSBfX2hhbGY7CiAJ ICBlbHNlCiAJICAgIHsKQEAgLTIwMjAsNyArMjAxNiw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfcGFydGl0 aW9uZWRfdXBwZXIoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAKICAgICAgIHJldHVybiBz dGQ6Ol9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9j eHg6Ol9fb3BzOjpfX3ZhbF9sZXNzX2l0ZXIoKSk7CisJCQkJX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTIwNTEsMTcgKzIwNDcsMTQgQEAgX0dM SUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19wYXJ0aXRpb25lZF91cHBlcl9wcmVkKF9fZmlyc3QsIF9fbGFzdCwKIAkJCQkJ CV9fdmFsLCBfX2NvbXApOwogCi0gICAgICByZXR1cm4gc3RkOjpfX3VwcGVyX2JvdW5kKF9f Zmlyc3QsIF9fbGFzdCwgX192YWwsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X192YWxfY29t cF9pdGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIHN0ZDo6X191cHBlcl9ib3VuZChfX2Zp cnN0LCBfX2xhc3QsIF9fdmFsLCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAot ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsCi0J ICAgdHlwZW5hbWUgX0NvbXBhcmVJdFRwLCB0eXBlbmFtZSBfQ29tcGFyZVRwSXQ+CisgIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5h bWUgX0NvbXA+CiAgICAgX0dMSUJDWFgyMF9DT05TVEVYUFIKICAgICBwYWlyPF9Gb3J3YXJk SXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgX19lcXVhbF9yYW5nZShfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAotCQkgIGNvbnN0 IF9UcCYgX192YWwsCi0JCSAgX0NvbXBhcmVJdFRwIF9fY29tcF9pdF92YWwsIF9Db21wYXJl VHBJdCBfX2NvbXBfdmFsX2l0KQorCQkgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wIF9fY29t cCkKICAgICB7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAJX0Rpc3RhbmNlVHlwZTsKQEAgLTIw NzMsMjEgKzIwNjYsMjIgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKIAkgIF9EaXN0YW5jZVR5cGUgX19oYWxmID0gX19sZW4gPj4gMTsKIAkgIF9Gb3J3YXJk SXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0OwogCSAgc3RkOjphZHZhbmNlKF9fbWlkZGxl LCBfX2hhbGYpOwotCSAgaWYgKF9fY29tcF9pdF92YWwoX19taWRkbGUsIF9fdmFsKSkKKwkg IGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpCiAJICAgIHsKIAkgICAgICBfX2ZpcnN0 ID0gX19taWRkbGU7CiAJICAgICAgKytfX2ZpcnN0OwogCSAgICAgIF9fbGVuID0gX19sZW4g LSBfX2hhbGYgLSAxOwogCSAgICB9Ci0JICBlbHNlIGlmIChfX2NvbXBfdmFsX2l0KF9fdmFs LCBfX21pZGRsZSkpCisJICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAJ ICAgIF9fbGVuID0gX19oYWxmOwogCSAgZWxzZQogCSAgICB7CiAJICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfX2xlZnQKLQkJPSBzdGQ6Ol9fbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRk bGUsIF9fdmFsLCBfX2NvbXBfaXRfdmFsKTsKKwkJPSBzdGQ6Ol9fbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogCSAgICAgIHN0ZDo6YWR2YW5jZShf X2ZpcnN0LCBfX2xlbik7CiAJICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3JpZ2h0Ci0JCT0g c3RkOjpfX3VwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXBf dmFsX2l0KTsKKwkJPSBzdGQ6Ol9fdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwg X192YWwsCisJCQkJICAgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogCSAgICAgIHJldHVy biBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+KF9fbGVmdCwgX19y aWdodCk7CiAJICAgIH0KIAl9CkBAIC0yMTI3LDggKzIxMjEsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Bh cnRpdGlvbmVkX3VwcGVyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogCiAgICAgICByZXR1 cm4gc3RkOjpfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCi0JCQkJX19n bnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfdmFsKCksCi0JCQkJX19nbnVfY3h4OjpfX29w czo6X192YWxfbGVzc19pdGVyKCkpOworCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygp KTsKICAgICB9CiAKICAgLyoqCkBAIC0yMTY1LDkgKzIxNTgsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Bh cnRpdGlvbmVkX3VwcGVyX3ByZWQoX19maXJzdCwgX19sYXN0LAogCQkJCQkJX192YWwsIF9f Y29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19s YXN0LCBfX3ZhbCwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF92YWwoX19j b21wKSwKLQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX3ZhbF9jb21wX2l0ZXIoX19jb21wKSk7 CisgICAgICByZXR1cm4gc3RkOjpfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjE5Nyw3 ICsyMTg4LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAog ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2kKIAk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX2Zp cnN0LCBfX2xhc3QsIF9fdmFsLAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJf bGVzc192YWwoKSk7CisJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAg ICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKICAgICB9CiAK QEAgLTIyMzIsOCArMjIyMyw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFD RShfVjIpCiAJCQkJCQlfX3ZhbCwgX19jb21wKTsKIAogICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2kKLQk9IHN0ZDo6X19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAot CQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF92YWwoX19jb21wKSk7CisJ PSBzdGQ6Ol9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsK ICAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFib29sKF9fY29tcChfX3ZhbCwgKl9f aSkpOwogICAgIH0KIApAQCAtMjI0OSw3ICsyMjM5LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICB7CiAgICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogCXsKLQkgIGlmIChfX2NvbXAoX19m aXJzdDIsIF9fZmlyc3QxKSkKKwkgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp KQogCSAgICB7CiAJICAgICAgKl9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJzdDIp OwogCSAgICAgICsrX19maXJzdDI7CkBAIC0yMjg4LDcgKzIyNzgsNyBAQCBfR0xJQkNYWF9F TkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgLS1fX2xhc3QyOwogICAgICAg d2hpbGUgKHRydWUpCiAJewotCSAgaWYgKF9fY29tcChfX2xhc3QyLCBfX2xhc3QxKSkKKwkg IGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkKIAkgICAgewogCSAgICAgICotLV9f cmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19sYXN0MSk7CiAJICAgICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCkBAIC0yMzYwLDEzICsyMzUwLDE0IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAJewogCSAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g X0dMSUJDWFhfTU9WRTMoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKIAkgIHN0ZDo6 X19tb3ZlX21lcmdlX2FkYXB0aXZlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxl LCBfX2xhc3QsCi0JCQkJICAgICBfX2ZpcnN0LCBfX2NvbXApOworCQkJCSAgICAgX19maXJz dCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKIAl9CiAgICAgICBlbHNlCiAJewogCSAgX1Bv aW50ZXIgX19idWZmZXJfZW5kID0gX0dMSUJDWFhfTU9WRTMoX19taWRkbGUsIF9fbGFzdCwg X19idWZmZXIpOwogCSAgc3RkOjpfX21vdmVfbWVyZ2VfYWRhcHRpdmVfYmFja3dhcmQoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLAotCQkJCQkgICAgICBfX2J1ZmZlcl9lbmQsIF9f bGFzdCwgX19jb21wKTsKKwkJCQkJICAgICAgX19idWZmZXJfZW5kLCBfX2xhc3QsCisJCQkJ CSAgICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAJfQogICAgIH0KIApAQCAtMjM4Miw3 ICsyMzczLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAg ICB7CiAgICAgICBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUgfHwgX19sZW4yIDw9IF9f YnVmZmVyX3NpemUpCiAJc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsCi0JCQkgICAgICBfX2xlbjEsIF9fbGVuMiwgX19idWZmZXIsIF9fY29tcCk7 CisJCQkgICAgICBfX2xlbjEsIF9fbGVuMiwgX19idWZmZXIsIF9HTElCQ1hYX01PVkUoX19j b21wKSk7CiAgICAgICBlbHNlCiAJewogCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2Zp cnN0X2N1dCA9IF9fZmlyc3Q7CkBAIC0yMzk0LDggKzIzODUsNyBAQCBfR0xJQkNYWF9FTkRf SU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCSAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy OwogCSAgICAgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAJICAgICAg X19zZWNvbmRfY3V0Ci0JCT0gc3RkOjpfX2xvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs ICpfX2ZpcnN0X2N1dCwKLQkJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21w X3ZhbChfX2NvbXApKTsKKwkJPSBzdGQ6Ol9fbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFz dCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogCSAgICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3Rh bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogCSAgICB9CiAJICBlbHNlCkBAIC0yNDAz LDggKzIzOTMsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQog CSAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogCSAgICAgIHN0ZDo6YWR2YW5jZShfX3Nl Y29uZF9jdXQsIF9fbGVuMjIpOwogCSAgICAgIF9fZmlyc3RfY3V0Ci0JCT0gc3RkOjpfX3Vw cGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAotCQkJCSAgICAg X19nbnVfY3h4OjpfX29wczo6X192YWxfY29tcF9pdGVyKF9fY29tcCkpOworCQk9IHN0ZDo6 X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w KTsKIAkgICAgICBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1 dCk7CiAJICAgIH0KIApAQCAtMjQxOCw3ICsyNDA3LDggQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKIAkgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZV9yZXNpemUo X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKIAkJCQkgICAgICAgX0Rpc3Rh bmNlKF9fbGVuMSAtIF9fbGVuMTEpLAogCQkJCSAgICAgICBfRGlzdGFuY2UoX19sZW4yIC0g X19sZW4yMiksCi0JCQkJICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXAp OworCQkJCSAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKKwkJCQkgICAgICAgX0dM SUJDWFhfTU9WRShfX2NvbXApKTsKIAl9CiAgICAgfQogCkBAIC0yNDM3LDcgKzI0MjcsNyBA QCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCiAgICAgICBpZiAo X19sZW4xICsgX19sZW4yID09IDIpCiAJewotCSAgaWYgKF9fY29tcChfX21pZGRsZSwgX19m aXJzdCkpCisJICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogCSAgICBzdGQ6 Oml0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAJICByZXR1cm47CiAJfQpAQCAtMjQ1 MSw4ICsyNDQxLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikK IAkgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogCSAgc3RkOjphZHZhbmNlKF9fZmlyc3RfY3V0 LCBfX2xlbjExKTsKIAkgIF9fc2Vjb25kX2N1dAotCSAgICA9IHN0ZDo6X19sb3dlcl9ib3Vu ZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsCi0JCQkJIF9fZ251X2N4eDo6X19v cHM6Ol9faXRlcl9jb21wX3ZhbChfX2NvbXApKTsKKwkgICAgPSBzdGQ6Ol9fbG93ZXJfYm91 bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogCSAgX19sZW4y MiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAJfQogICAgICAg ZWxzZQpAQCAtMjQ2MCw4ICsyNDQ5LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKIAkgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogCSAgc3RkOjphZHZhbmNl KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAJICBfX2ZpcnN0X2N1dAotCSAgICA9IHN0ZDo6 X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwKLQkJCQkg X19nbnVfY3h4OjpfX29wczo6X192YWxfY29tcF9pdGVyKF9fY29tcCkpOworCSAgICA9IHN0 ZDo6X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19j b21wKTsKIAkgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0 KTsKIAl9CiAKQEAgLTI0NzAsNyArMjQ1OCw4IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJ X05BTUVTUEFDRShfVjIpCiAgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m aXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKIAkJCQkgIF9fbGVuMTEsIF9fbGVu MjIsIF9fY29tcCk7CiAgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdf bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKLQkJCQkgIF9fbGVuMSAtIF9fbGVuMTEs IF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CisJCQkJICBfX2xlbjEgLSBfX2xlbjExLCBf X2xlbjIgLSBfX2xlbjIyLAorCQkJCSAgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9 CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5h bWUgX0NvbXBhcmU+CkBAIC0yNDk4LDE4ICsyNDg3LDE4IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfVG1wQnVmIF9fYnVmKF9fZmlyc3QsIHN0 ZDo6bWluKF9fbGVuMSwgX19sZW4yKSk7CiAKICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0 KF9fYnVmLnNpemUoKSA9PSBfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpLCB0cnVlKSkKLQlzdGQ6 Ol9fbWVyZ2VfYWRhcHRpdmUKLQkgIChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xl bjEsIF9fbGVuMiwgX19idWYuYmVnaW4oKSwgX19jb21wKTsKKwlzdGQ6Ol9fbWVyZ2VfYWRh cHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCisJCQkg ICAgICBfX2J1Zi5iZWdpbigpLCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgICAgZWxz ZSBpZiAoX19idWlsdGluX2V4cGVjdChfX2J1Zi5iZWdpbigpID09IDAsIGZhbHNlKSkKLQlz dGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIKLQkgIChfX2ZpcnN0LCBfX21pZGRsZSwgX19s YXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsKKwlzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCisJCQkJ ICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgICBlbHNlCi0Jc3RkOjpfX21lcmdl X2FkYXB0aXZlX3Jlc2l6ZQotCSAgKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVu MSwgX19sZW4yLCBfX2J1Zi5iZWdpbigpLAotCSAgIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6 ZSgpKSwgX19jb21wKTsKKwlzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmVfcmVzaXplKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAorCQkJCSAgICAgX19idWYuYmVn aW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAorCQkJCSAgICAgX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICNlbHNlCiAgICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIKLQkoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29t cCk7CisJKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfR0xJ QkNYWF9NT1ZFKF9fY29tcCkpOwogI2VuZGlmCiAgICAgfQogCkBAIC0yNTQ3LDcgKzI1MzYs NyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19n bGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAg IHN0ZDo6X19pbnBsYWNlX21lcmdlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCi0JCQkg ICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJICAgX19nbnVf Y3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTI1ODksOCArMjU3 OCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfc29ydGVkX3ByZWQoX19taWRkbGUsIF9fbGFzdCwgX19jb21w KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgc3RkOjpfX2lucGxhY2VfbWVyZ2UoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX2l0ZXIoX19jb21wKSk7CisgICAgICBzdGQ6Ol9faW5wbGFjZV9tZXJnZShfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAog CkBAIC0yNjA0LDcgKzI1OTIsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BB Q0UoX1YyKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpCiAJewotCSAgaWYgKF9fY29tcChfX2ZpcnN0MiwgX19maXJz dDEpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAJICAgIHsKIAkg ICAgICAqX19yZXN1bHQgPSBfR0xJQkNYWF9NT1ZFKCpfX2ZpcnN0Mik7CiAJICAgICAgKytf X2ZpcnN0MjsKQEAgLTI2MTcsOCArMjYwNSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJ X05BTUVTUEFDRShfVjIpCiAJICArK19fcmVzdWx0OwogCX0KICAgICAgIHJldHVybiBfR0xJ QkNYWF9NT1ZFMyhfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICBfR0xJQkNYWF9NT1ZFMyhf X2ZpcnN0MSwgX19sYXN0MSwKLQkJCQkJICAgX19yZXN1bHQpKTsKKwkJCSAgICBfR0xJQkNY WF9NT1ZFMyhfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgICB9CiAKICAgdGVt cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMSwgdHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yMiwKQEAgLTI2NDIsNyArMjYyOSw4IEBAIF9HTElCQ1hYX0VORF9J TkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX3N0ZXBfc2l6ZSA9IHN0ZDo6bWlu KF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogCiAgICAgICBz dGQ6Ol9fbW92ZV9tZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCi0JCQlf X2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwgX19yZXN1bHQsIF9fY29tcCk7CisJCQlf X2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwgX19yZXN1bHQsCisJCQlfR0xJQkNYWF9N T1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKQEAgLTI2NTgsNyArMjY0Niw3IEBA IF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJICBzdGQ6Ol9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsK IAkgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogCX0KLSAgICAgIHN0ZDo6X19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CisgICAgICBzdGQ6Ol9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAg IH0KIAogICBlbnVtIHsgX1NfY2h1bmtfc2l6ZSA9IDcgfTsKQEAgLTI3MjQsMTEgKzI3MTIs MTEgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKIAkJCQkgICAg ICAgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAJCQkJICAgICAgIF9EaXN0YW5j ZShfX2xhc3QgLSBfX21pZGRsZSksCiAJCQkJICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9z aXplLAotCQkJCSAgICAgICBfX2NvbXApOworCQkJCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9f Y29tcCkpOwogCX0KICAgICAgIGVsc2UKIAlzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCQkgICAgX19idWZmZXIsIF9fY29tcCk7 CisJCQkJICAgIF9fYnVmZmVyLCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAog ICAvLy8gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIHN0YWJsZSBzb3J0aW5n IHJvdXRpbmVzLgpAQCAtMjc0OCw3ICsyNzM2LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9B QklfTkFNRVNQQUNFKF9WMikKICAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogCQkJCSAgX19taWRkbGUgLSBfX2ZpcnN0LAog CQkJCSAgX19sYXN0IC0gX19taWRkbGUsCi0JCQkJICBfX2NvbXApOworCQkJCSAgX0dMSUJD WFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLy8gc3RhYmxlX3NvcnQKQEAgLTI3Njgs OSArMjc1Niw5IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAg ICAgewogICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikKIAl7Ci0JICBpZiAoX19jb21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJICBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICAgcmV0dXJuIGZhbHNlOwot CSAgaWYgKCFfX2NvbXAoX19maXJzdDEsIF9fZmlyc3QyKSkKKwkgIGlmICghX19jb21wKCpf X2ZpcnN0MSwgKl9fZmlyc3QyKSkKIAkgICAgKytfX2ZpcnN0MjsKIAkgICsrX19maXJzdDE7 CiAJfQpAQCAtMjgxNyw3ICsyODA1LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFN RVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZTIoX19m aXJzdDIsIF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX2luY2x1ZGVzKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICAgX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTI4NjQsNyArMjg1Miw3IEBAIF9HTElC Q1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVx dWlyZXNfaXJyZWZsZXhpdmVfcHJlZDIoX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAK ICAgICAgIHJldHVybiBzdGQ6Ol9faW5jbHVkZXMoX19maXJzdDEsIF9fbGFzdDEsIF9fZmly c3QyLCBfX2xhc3QyLAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9p dGVyKF9fY29tcCkpOworCQkJICAgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0K IAogICAvLyBudGhfZWxlbWVudApAQCAtMjg5NiwxMCArMjg4NCwxMCBAQCBfR0xJQkNYWF9F TkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCXsKIAkgIF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IgX19paSA9IF9faTsKIAkgIC0tX19pOwotCSAgaWYgKF9fY29tcChfX2ksIF9faWkp KQorCSAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpCiAJICAgIHsKIAkgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKLQkgICAgICB3aGlsZSAoIV9fY29tcChf X2ksIC0tX19qKSkKKwkgICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqKC0tX19qKSkpCiAJ CXt9CiAJICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOwogCSAgICAgIHN0ZDo6X19y ZXZlcnNlKF9faWksIF9fbGFzdCwKQEAgLTI5NDIsNyArMjkzMCw3IEBAIF9HTElCQ1hYX0VO RF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf aXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19u ZXh0X3Blcm11dGF0aW9uCi0JKF9fZmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2xlc3NfaXRlcigpKTsKKwkoX19maXJzdCwgX19sYXN0LCBfX2dudV9jeHg6Ol9f b3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjk3NSw4ICsyOTYzLDcgQEAg X0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4 eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogCi0gICAgICByZXR1cm4gc3RkOjpfX25leHRfcGVybXV0YXRpb24KLQkoX19maXJzdCwg X19sYXN0LCBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOwor ICAgICAgcmV0dXJuIHN0ZDo6X19uZXh0X3Blcm11dGF0aW9uKF9fZmlyc3QsIF9fbGFzdCwg X0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC0yOTk4LDEw ICsyOTg1LDEwIEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAJ ewogCSAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2lpID0gX19pOwogCSAgLS1fX2k7Ci0J ICBpZiAoX19jb21wKF9faWksIF9faSkpCisJICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkK IAkgICAgewogCSAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0Owot CSAgICAgIHdoaWxlICghX19jb21wKC0tX19qLCBfX2kpKQorCSAgICAgIHdoaWxlICghX19j b21wKCooLS1fX2opLCAqX19pKSkKIAkJe30KIAkgICAgICBzdGQ6Oml0ZXJfc3dhcChfX2ks IF9faik7CiAJICAgICAgc3RkOjpfX3JldmVyc2UoX19paSwgX19sYXN0LApAQCAtMzA0NSw3 ICszMDMyLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9WMikKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwog CiAgICAgICByZXR1cm4gc3RkOjpfX3ByZXZfcGVybXV0YXRpb24oX19maXJzdCwgX19sYXN0 LAotCQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJ CQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBA IC0zMDc4LDggKzMwNjUsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0Uo X1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2Zp cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fcHJldl9wZXJt dXRhdGlvbihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVy X2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9fcHJldl9wZXJtdXRh dGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQog CiAgIC8vIHJlcGxhY2UKQEAgLTMwOTQsNyArMzA4MCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJ TkVfQUJJX05BTUVTUEFDRShfVjIpCiAJCSAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25z dCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgIHsKICAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0LCAodm9pZCkrK19fcmVzdWx0KQotCWlmIChfX3ByZWQoX19maXJz dCkpCisJaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJICAqX19yZXN1bHQgPSBfX25ld192YWx1 ZTsKIAllbHNlCiAJICAqX19yZXN1bHQgPSAqX19maXJzdDsKQEAgLTMxMzEsOCArMzExNyw4 IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2ds aWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAg cmV0dXJuIHN0ZDo6X19yZXBsYWNlX2NvcHlfaWYoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwKLQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbHNfdmFsKF9fb2xkX3ZhbHVl KSwKLQkJCQkJICAgICAgX19uZXdfdmFsdWUpOworCQkJCSAgICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2VxdWFsX3RvKF9fb2xkX3ZhbHVlKSwKKwkJCQkgICAgX19uZXdfdmFsdWUpOwogICAg IH0KIAogICAvKioKQEAgLTMxNjcsOCArMzE1Myw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVf QUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19yZXBsYWNlX2Nv cHlfaWYoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9fb3Bz OjpfX3ByZWRfaXRlcihfX3ByZWQpLAotCQkJCQkgICAgICBfX25ld192YWx1ZSk7CisJCQkJ ICAgIF9HTElCQ1hYX01PVkUoX19wcmVkKSwgX19uZXdfdmFsdWUpOwogICAgIH0KIAogI2lm IF9fY3BsdXNwbHVzID49IDIwMTEwM0wKQEAgLTMxOTksNyArMzE4NCw5IEBAIF9HTElCQ1hY X0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgaW5saW5lIGJvb2wKICAgICBp c19zb3J0ZWQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCwKIAkgICAgICBfQ29tcGFyZSBfX2NvbXApCi0gICAgeyByZXR1cm4gc3RkOjppc19z b3J0ZWRfdW50aWwoX19maXJzdCwgX19sYXN0LCBfX2NvbXApID09IF9fbGFzdDsgfQorICAg IHsKKyAgICAgIHJldHVybiBzdGQ6OmlzX3NvcnRlZF91bnRpbChfX2ZpcnN0LCBfX2xhc3Qs IHN0ZDo6bW92ZShfX2NvbXApKSA9PSBfX2xhc3Q7CisgICAgfQogCiAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgIF9HTElC Q1hYMjBfQ09OU1RFWFBSCkBAIC0zMjEyLDcgKzMxOTksNyBAQCBfR0xJQkNYWF9FTkRfSU5M SU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogCiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4 dCA9IF9fZmlyc3Q7CiAgICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBf X2ZpcnN0ID0gX19uZXh0LCAodm9pZCkrK19fbmV4dCkKLQlpZiAoX19jb21wKF9fbmV4dCwg X19maXJzdCkpCisJaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCiAJICByZXR1cm4g X19uZXh0OwogICAgICAgcmV0dXJuIF9fbmV4dDsKICAgICB9CkBAIC0zMjM4LDcgKzMyMjUs NyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19n bGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAg IHJldHVybiBzdGQ6Ol9faXNfc29ydGVkX3VudGlsKF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkg ICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCQkgICAgX19n bnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTMyNjQsOCAr MzI1MSw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19pc19zb3J0ZWRfdW50aWwoX19m aXJzdCwgX19sYXN0LAotCQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9p dGVyKF9fY29tcCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19pc19zb3J0ZWRfdW50aWwoX19m aXJzdCwgX19sYXN0LCBzdGQ6Om1vdmUoX19jb21wKSk7CiAgICAgfQogCiAgIC8qKgpAQCAt MzMxOCw3ICszMzA0LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElORV9BQklfTkFNRVNQQUNFKF9W MikKIAlyZXR1cm4gc3RkOjptYWtlX3BhaXIoX19maXJzdCwgX19maXJzdCk7CiAKICAgICAg IF9Gb3J3YXJkSXRlcmF0b3IgX19taW57fSwgX19tYXh7fTsKLSAgICAgIGlmIChfX2NvbXAo X19uZXh0LCBfX2ZpcnN0KSkKKyAgICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3Qp KQogCXsKIAkgIF9fbWluID0gX19uZXh0OwogCSAgX19tYXggPSBfX2ZpcnN0OwpAQCAtMzMz NywyNSArMzMyMywyNSBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogCSAgX19uZXh0ID0gX19maXJzdDsKIAkgIGlmICgrK19fbmV4dCA9PSBfX2xhc3QpCiAJ ICAgIHsKLQkgICAgICBpZiAoX19jb21wKF9fZmlyc3QsIF9fbWluKSkKKwkgICAgICBpZiAo X19jb21wKCpfX2ZpcnN0LCAqX19taW4pKQogCQlfX21pbiA9IF9fZmlyc3Q7Ci0JICAgICAg ZWxzZSBpZiAoIV9fY29tcChfX2ZpcnN0LCBfX21heCkpCisJICAgICAgZWxzZSBpZiAoIV9f Y29tcCgqX19maXJzdCwgKl9fbWF4KSkKIAkJX19tYXggPSBfX2ZpcnN0OwogCSAgICAgIGJy ZWFrOwogCSAgICB9CiAKLQkgIGlmIChfX2NvbXAoX19uZXh0LCBfX2ZpcnN0KSkKKwkgIGlm IChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogCSAgICB7Ci0JICAgICAgaWYgKF9fY29t cChfX25leHQsIF9fbWluKSkKKwkgICAgICBpZiAoX19jb21wKCpfX25leHQsICpfX21pbikp CiAJCV9fbWluID0gX19uZXh0OwotCSAgICAgIGlmICghX19jb21wKF9fZmlyc3QsIF9fbWF4 KSkKKwkgICAgICBpZiAoIV9fY29tcCgqX19maXJzdCwgKl9fbWF4KSkKIAkJX19tYXggPSBf X2ZpcnN0OwogCSAgICB9CiAJICBlbHNlCiAJICAgIHsKLQkgICAgICBpZiAoX19jb21wKF9f Zmlyc3QsIF9fbWluKSkKKwkgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19taW4pKQog CQlfX21pbiA9IF9fZmlyc3Q7Ci0JICAgICAgaWYgKCFfX2NvbXAoX19uZXh0LCBfX21heCkp CisJICAgICAgaWYgKCFfX2NvbXAoKl9fbmV4dCwgKl9fbWF4KSkKIAkJX19tYXggPSBfX25l eHQ7CiAJICAgIH0KIApAQCAtMzM4OSw4ICszMzc1LDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9y YW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVm bGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fbWlubWF4 X2VsZW1lbnQoX19maXJzdCwgX19sYXN0LAotCQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICByZXR1cm4gc3RkOjpfX21pbm1heF9lbGVtZW50 KF9fZmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0K IAogICAvKioKQEAgLTM0MTksOCArMzQwNCw3IEBAIF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJ X05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2 ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKIAotICAgICAgcmV0dXJuIHN0ZDo6 X19taW5tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHJldHVybiBzdGQ6Ol9f bWlubWF4X2VsZW1lbnQoX19maXJzdCwgX19sYXN0LCBzdGQ6Om1vdmUoX19jb21wKSk7CiAg ICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KQEAgLTM0MzEsNyArMzQxNSw3IEBA IF9HTElCQ1hYX0VORF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgICBfX2dsaWJj eHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19sLmJlZ2luKCksIF9fbC5lbmQoKSk7CiAgICAg ICBwYWlyPGNvbnN0IF9UcCosIGNvbnN0IF9UcCo+IF9fcCA9CiAJc3RkOjpfX21pbm1heF9l bGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JCQkgICAgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfbGVzc19pdGVyKCkpOworCQkJICAgICAgX19nbnVfY3h4OjpfX29wczo6 X19sZXNzKCkpOwogICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKCpfX3AuZmlyc3QsICpf X3Auc2Vjb25kKTsKICAgICB9CiAKQEAgLTM0NDIsOCArMzQyNiw3IEBAIF9HTElCQ1hYX0VO RF9JTkxJTkVfQUJJX05BTUVTUEFDRShfVjIpCiAgICAgewogICAgICAgX19nbGliY3h4X3Jl cXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwgX19jb21w KTsKICAgICAgIHBhaXI8Y29uc3QgX1RwKiwgY29uc3QgX1RwKj4gX19wID0KLQlzdGQ6Ol9f bWlubWF4X2VsZW1lbnQoX19sLmJlZ2luKCksIF9fbC5lbmQoKSwKLQkJCSAgICAgIF9fZ251 X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJc3RkOjpfX21pbm1h eF9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksIHN0ZDo6bW92ZShfX2NvbXApKTsK ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigqX19wLmZpcnN0LCAqX19wLnNlY29uZCk7 CiAgICAgfQogCkBAIC0zNDc3LDcgKzM0NjAsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FC SV9OQU1FU1BBQ0UoX1YyKQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jhbmdl KF9fZmlyc3QxLCBfX2xhc3QxKTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19pc19wZXJtdXRh dGlvbihfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsCi0JCQkJICAgX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2NvbXBfaXRlcihfX3ByZWQpKTsKKwkJCQkgICBzdGQ6Om1vdmUoX19w cmVkKSk7CiAgICAgfQogCiAjaWYgX19jcGx1c3BsdXMgPiAyMDExMDNMCkBAIC0zNTA4LDcg KzM0OTEsNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAg ICAgLy8gaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KICAgICAg IGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAJ ICArK19fZmlyc3QxLCAodm9pZCkrK19fZmlyc3QyKQotCWlmICghX19wcmVkKF9fZmlyc3Qx LCBfX2ZpcnN0MikpCisJaWYgKCFfX3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAg YnJlYWs7CiAKICAgICAgIGlmIChfX3JhX2l0ZXJzKQpAQCAtMzUyOSwxNCArMzUxMiwxNCBA QCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1YyKQogICAgICAgZm9yIChf Rm9yd2FyZEl0ZXJhdG9yMSBfX3NjYW4gPSBfX2ZpcnN0MTsgX19zY2FuICE9IF9fbGFzdDE7 ICsrX19zY2FuKQogCXsKIAkgIGlmIChfX3NjYW4gIT0gc3RkOjpfX2ZpbmRfaWYoX19maXJz dDEsIF9fc2NhbiwKLQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19w cmVkLCBfX3NjYW4pKSkKKwkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2NvbXBfdmFsKF9fcHJl ZCwgKl9fc2NhbikpKQogCSAgICBjb250aW51ZTsgLy8gV2UndmUgc2VlbiB0aGlzIG9uZSBi ZWZvcmUuCiAKIAkgIGF1dG8gX19tYXRjaGVzID0gc3RkOjpfX2NvdW50X2lmKF9fZmlyc3Qy LCBfX2xhc3QyLAotCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fcHJl ZCwgX19zY2FuKSk7CisJCV9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwoX19wcmVkLCAq X19zY2FuKSk7CiAJICBpZiAoMCA9PSBfX21hdGNoZXMKIAkgICAgICB8fCBzdGQ6Ol9fY291 bnRfaWYoX19zY2FuLCBfX2xhc3QxLAotCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2Nv bXBfaXRlcihfX3ByZWQsIF9fc2NhbikpCisJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2NvbXBf dmFsKF9fcHJlZCwgKl9fc2NhbikpCiAJICAgICAgIT0gX19tYXRjaGVzKQogCSAgICByZXR1 cm4gZmFsc2U7CiAJfQpAQCAtMzU2Nyw3ICszNTUwLDcgQEAgX0dMSUJDWFhfRU5EX0lOTElO RV9BQklfTkFNRVNQQUNFKF9WMikKIAogICAgICAgcmV0dXJuCiAJc3RkOjpfX2lzX3Blcm11 dGF0aW9uKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICAg IF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVhbF90b19pdGVyKCkpOworCQkJICAgICAg X19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9CiAKICAgLyoqCkBAIC0z NTk2LDcgKzM1NzksNyBAQCBfR0xJQkNYWF9FTkRfSU5MSU5FX0FCSV9OQU1FU1BBQ0UoX1Yy KQogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xh c3QyKTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19pc19wZXJtdXRhdGlvbihfX2ZpcnN0MSwg X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkJICAgX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfaXRlcihfX3ByZWQpKTsKKwkJCQkgICBzdGQ6Om1vdmUoX19wcmVkKSk7 CiAgICAgfQogCiAjaWYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTApAQCAtMzg0NCw3ICszODI3 LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkJdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwgX1RwPikKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg cmV0dXJuIHN0ZDo6X19maW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwKLQkJCSAgICBfX2dudV9j eHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxzX3ZhbChfX3ZhbCkpOworCQkJICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9fZXF1YWxfdG8oX192YWwpKTsKICAgICB9CiAKICAgLyoqCkBAIC0zODY5 LDggKzM4NTIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCSAgICAgIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGU+KQog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7 CiAKLSAgICAgIHJldHVybiBzdGQ6Ol9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkg ICAgX19nbnVfY3h4OjpfX29wczo6X19wcmVkX2l0ZXIoX19wcmVkKSk7CisgICAgICByZXR1 cm4gc3RkOjpfX2ZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfR0xJQkNYWF9NT1ZFKF9fcHJl ZCkpOwogICAgIH0KIAogICAvKioKQEAgLTM5NzUsNyArMzk1Nyw3IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19hZGphY2VudF9m aW5kKF9fZmlyc3QsIF9fbGFzdCwKLQkJCQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9l cXVhbF90b19pdGVyKCkpOworCQkJCSAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygp KTsKICAgICB9CiAKICAgLyoqCkBAIC00MDAzLDcgKzM5ODUsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jhbmdl KF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fYWRqYWNlbnRfZmlu ZChfX2ZpcnN0LCBfX2xhc3QsCi0JCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9p dGVyKF9fYmluYXJ5X3ByZWQpKTsKKwkJCQkgIF9HTElCQ1hYX01PVkUoX19iaW5hcnlfcHJl ZCkpOwogICAgIH0KIAogICAvKioKQEAgLTQwMjcsNyArNDAwOSw3IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFu Z2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19jb3VudF9pZihf X2ZpcnN0LCBfX2xhc3QsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9lcXVh bHNfdmFsKF9fdmFsdWUpKTsKKwkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90 byhfX3ZhbHVlKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNDA1MCw4ICs0MDMyLDcgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVx dWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0 ZDo6X19jb3VudF9pZihfX2ZpcnN0LCBfX2xhc3QsCi0JCQkgICAgIF9fZ251X2N4eDo6X19v cHM6Ol9fcHJlZF9pdGVyKF9fcHJlZCkpOworICAgICAgcmV0dXJuIHN0ZDo6X19jb3VudF9p ZihfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSk7CiAgICAgfQogCiAg IC8qKgpAQCAtNDA5Niw3ICs0MDc3LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FM R08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19s YXN0Mik7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9l cXVhbF90b19pdGVyKCkpOworCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygp KTsKICAgICB9CiAKICAgLyoqCkBAIC00MTI3LDcgKzQxMDgsNyBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3Jhbmdl KF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fc2VhcmNoX24oX19m aXJzdCwgX19sYXN0LCBfX2NvdW50LAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0 ZXJfZXF1YWxzX3ZhbChfX3ZhbCkpOworCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2Vx dWFsX3RvKF9fdmFsKSk7CiAgICAgfQogCiAKQEAgLTQxNjMsNyArNDE0NCw3IEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFs aWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKIAogICAgICAgcmV0dXJuIHN0ZDo6X19zZWFy Y2hfbihfX2ZpcnN0LCBfX2xhc3QsIF9fY291bnQsCi0JCV9fZ251X2N4eDo6X19vcHM6Ol9f aXRlcl9jb21wX3ZhbChfX2JpbmFyeV9wcmVkLCBfX3ZhbCkpOworCV9fZ251X2N4eDo6X19v cHM6Ol9fY29tcF92YWwoX0dMSUJDWFhfTU9WRShfX2JpbmFyeV9wcmVkKSwgX192YWwpKTsK ICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCkBAIC00NDIwLDcgKzQ0MDEs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogCXJldHVybiBfX3Jlc3VsdDsKICAgICAgIHJldHVybiBzdGQ6Ol9fdW5p cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpLAorCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9f ZXF1YWxfdG8oKSwKIAkJCQlzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAJ CQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7CiAgICAgfQpAQCAtNDQ2 MCw3ICs0NDQxLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKIAlyZXR1cm4gX19yZXN1bHQ7CiAgICAgICByZXR1cm4g c3RkOjpfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCi0JCQlfX2du dV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fYmluYXJ5X3ByZWQpLAorCQkJCV9H TElCQ1hYX01PVkUoX19iaW5hcnlfcHJlZCksCiAJCQkJc3RkOjpfX2l0ZXJhdG9yX2NhdGVn b3J5KF9fZmlyc3QpLAogCQkJCXN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkp OwogICAgIH0KQEAgLTQ1NzYsNyArNDU1Nyw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9BTEdPCiAJICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9y Pjo6dmFsdWVfdHlwZT4pCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKIAotICAgICAgcmV0dXJuIHN0ZDo6X19wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LCBfX3ByZWQsCisgICAgICByZXR1cm4gc3RkOjpfX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19wcmVkKSwKIAkJCSAgICAgIHN0ZDo6 X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICAgfQogCkBAIC00NjE1LDcgKzQ1 OTYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHN0ZDo6 X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCSAgX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCSAgX19nbnVfY3h4OjpfX29w czo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTQ2NTUsOCArNDYzNiw3IEBAIF9H TElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf dmFsaWRfcmFuZ2UoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWly ZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAg IHN0ZDo6X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKLQkJCSAg X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKyAgICAgIHN0 ZDo6X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC00Njk0LDcgKzQ2NzQsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICBzdGQ6Ol9faW50cm9zZWxl Y3QoX19maXJzdCwgX19udGgsIF9fbGFzdCwKIAkJCSBzdGQ6Ol9fbGcoX19sYXN0IC0gX19m aXJzdCkgKiAyLAotCQkJIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7 CisJCQkgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAg LTQ3MzUsNyArNDcxNSw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAKICAg ICAgIHN0ZDo6X19pbnRyb3NlbGVjdChfX2ZpcnN0LCBfX250aCwgX19sYXN0LAogCQkJIHN0 ZDo6X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCi0JCQkgX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCSBfR0xJQkNYWF9NT1ZFKF9fY29tcCkp OwogICAgIH0KIAogICAvKioKQEAgLTQ3NjUsNyArNDc0NSw3IEBAIF9HTElCQ1hYX0JFR0lO X05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2 ZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICBzdGQ6Ol9fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisgICAgICBzdGQ6 Ol9fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsK ICAgICB9CiAKICAgLyoqCkBAIC00Nzk4LDcgKzQ3NzgsNyBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9f Zmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVf cHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHN0ZDo6X19zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2Nv bXApKTsKKyAgICAgIHN0ZDo6X19zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0 b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCkBAIC00ODExLDcgKzQ3OTEsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAJewotCSAgaWYgKF9f Y29tcChfX2ZpcnN0MiwgX19maXJzdDEpKQorCSAgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAJICAg ICAgKytfX2ZpcnN0MjsKQEAgLTQ4NzEsNyArNDg1MSw3IEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9BTEdPCiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tZXJnZShf X2ZpcnN0MSwgX19sYXN0MSwKIAkJCQkgICAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3Vs dCwKLQkJCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJ CQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpA QCAtNDkyMSw4ICs0OTAxLDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19s YXN0MiwgX19jb21wKTsKIAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21lcmdl KF9fZmlyc3QxLCBfX2xhc3QxLAotCQkJCV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwK LQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJ CSAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAorCQkJCSAgICAgX0dMSUJDWFhf TU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KQEAgLTQ5NDcsMTQgKzQ5MjcsMTYg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIGlmIChfX2J1aWx0aW5f ZXhwZWN0KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkgPT0gX19idWYuc2l6ZSgpLCB0cnVlKSkK IAlzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwKIAkJCQkgICAgX19maXJz dCArIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKLQkJCQkgICAgX19sYXN0LCBfX2J1 Zi5iZWdpbigpLCBfX2NvbXApOworCQkJCSAgICBfX2xhc3QsIF9fYnVmLmJlZ2luKCksCisJ CQkJICAgIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgICBlbHNlIGlmIChfX2J1aWx0 aW5fZXhwZWN0KF9fYnVmLmJlZ2luKCkgPT0gMCwgZmFsc2UpKQotCXN0ZDo6X19pbnBsYWNl X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKwlzdGQ6Ol9faW5wbGFj ZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgICBlbHNlCiAJc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlX3Jlc2l6ZShfX2Zp cnN0LCBfX2xhc3QsIF9fYnVmLmJlZ2luKCksCi0JCQkJCSAgIF9EaXN0YW5jZVR5cGUoX19i dWYuc2l6ZSgpKSwgX19jb21wKTsKKwkJCQkJICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXpl KCkpLAorCQkJCQkgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogI2Vsc2UKLSAgICAgIHN0 ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKKyAg ICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX0dMSUJD WFhfTU9WRShfX2NvbXApKTsKICNlbmRpZgogICAgIH0KIApAQCAtNDk4OCw3ICs0OTcwLDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCiAgICAgICBfR0xJQkNYWF9T VERfQTo6X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAgIF9fZ251X2N4 eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJICAgIF9fZ251X2N4eDo6X19v cHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01MDI0LDcgKzUwMDYsNyBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVz X2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCiAgICAgICBf R0xJQkNYWF9TVERfQTo6X19zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJICAg IF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJCQkJICAg IF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLApAQCAtNTAzOCwx MiArNTAyMCwxMiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp CiAJewotCSAgaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgaWYgKF9fY29t cCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJICAgIHsKIAkgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAJICAgICAgKytfX2ZpcnN0MTsKIAkgICAgfQotCSAgZWxzZSBpZiAoX19j b21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogCSAgICB7CiAJICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwog CSAgICAgICsrX19maXJzdDI7CkBAIC01MTA2LDggKzUwODgsOCBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZl MihfX2ZpcnN0MiwgX19sYXN0Mik7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6 X19zZXRfdW5pb24oX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJX19maXJzdDIsIF9fbGFzdDIs IF9fcmVzdWx0LAotCQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7 CisJCQkJCSBfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCisJCQkJCSBfX2dudV9jeHg6 Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTE1Nyw4ICs1MTM5LDgg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc19pcnJlZmxleGl2ZV9wcmVkMihfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKIAog ICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX3NldF91bmlvbihfX2ZpcnN0MSwgX19s YXN0MSwKLQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJX19nbnVfY3h4 OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJIF9fZmlyc3QyLCBf X2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAg fQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lu cHV0SXRlcmF0b3IyLApAQCAtNTE3MSw5ICs1MTUzLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0FMR08KIAkJICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBh cmUgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCi0JaWYgKF9fY29tcChfX2ZpcnN0MSwgX19maXJzdDIp KQorCWlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgKytfX2ZpcnN0MTsK LQllbHNlIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmlyc3QxKSkKKwllbHNlIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgKytfX2ZpcnN0MjsKIAllbHNlCiAJICB7 CkBAIC01MjI4LDggKzUyMTAsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlMihfX2ZpcnN0MiwgX19sYXN0 Mik7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRfaW50ZXJzZWN0aW9u KF9fZmlyc3QxLCBfX2xhc3QxLAotCQkJCSAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVz dWx0LAotCQkJCSAgICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcigpKTsK KwkJCQkJCV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJCV9fZ251X2N4eDo6 X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01Mjc4LDggKzUyNjAsOCBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVp cmVzX2lycmVmbGV4aXZlX3ByZWQyKF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogCiAg ICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X2ludGVyc2VjdGlvbihfX2ZpcnN0 MSwgX19sYXN0MSwKLQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJX19n bnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJCV9fZmly c3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJCV9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5h bWUgX0lucHV0SXRlcmF0b3IyLApAQCAtNTI5MiwxMyArNTI3NCwxMyBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfQUxHTwogCQkgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwg X0NvbXBhcmUgX19jb21wKQogICAgIHsKICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCi0JaWYgKF9fY29tcChfX2ZpcnN0MSwgX19m aXJzdDIpKQorCWlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgewogCSAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAJICAgICsrX19maXJzdDE7CiAJICAgICsrX19y ZXN1bHQ7CiAJICB9Ci0JZWxzZSBpZiAoX19jb21wKF9fZmlyc3QyLCBfX2ZpcnN0MSkpCisJ ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKIAkgICsrX19maXJzdDI7 CiAJZWxzZQogCSAgewpAQCAtNTM1Myw4ICs1MzM1LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZTIoX19m aXJzdDIsIF9fbGFzdDIpOwogCiAgICAgICByZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0 X2RpZmZlcmVuY2UoX19maXJzdDEsIF9fbGFzdDEsCi0JCQkJICAgX19maXJzdDIsIF9fbGFz dDIsIF9fcmVzdWx0LAotCQkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0 ZXIoKSk7CisJCQkJCSAgICAgIF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKKwkJCQkJ ICAgICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAg LTU0MDUsOCArNTM4Nyw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAg ICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZDIoX19maXJzdDIsIF9fbGFz dDIsIF9fY29tcCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19zZXRfZGlm ZmVyZW5jZShfX2ZpcnN0MSwgX19sYXN0MSwKLQkJCQkgICBfX2ZpcnN0MiwgX19sYXN0Miwg X19yZXN1bHQsCi0JCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihf X2NvbXApKTsKKwkJCQkJICAgICAgX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0LAorCQkJ CQkgICAgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKQEAg LTU0MjIsMTMgKzU0MDQsMTMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KIAkJ CSAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKLQlpZiAoX19jb21wKF9fZmly c3QxLCBfX2ZpcnN0MikpCisJaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAJ ICB7CiAJICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKIAkgICAgKytfX2ZpcnN0MTsKIAkg ICAgKytfX3Jlc3VsdDsKIAkgIH0KLQllbHNlIGlmIChfX2NvbXAoX19maXJzdDIsIF9fZmly c3QxKSkKKwllbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogCSAgewog CSAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAJICAgICsrX19maXJzdDI7CkBAIC01NDg5 LDcgKzU0NzEsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICBy ZXR1cm4gX0dMSUJDWFhfU1REX0E6Ol9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9fZmly c3QxLCBfX2xhc3QxLAogCQkJCQlfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQsCi0JCQkJ CV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJCV9fZ251X2N4 eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBAIC01NTQyLDcgKzU1MjQs NyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCiAgICAgICByZXR1cm4gX0dM SUJDWFhfU1REX0E6Ol9fc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9fZmlyc3QxLCBfX2xh c3QxLAogCQkJCV9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCwKLQkJCQlfX2dudV9jeHg6 Ol9fb3BzOjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCV9HTElCQ1hYX01PVkUo X19jb21wKSk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db21wYXJlPgpAQCAtNTU1NSw3ICs1NTM3LDcgQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX0FMR08KIAlyZXR1cm4gX19maXJzdDsKICAgICAgIF9Gb3J3YXJk SXRlcmF0b3IgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpCi0JaWYgKF9fY29tcChfX2ZpcnN0LCBfX3Jlc3VsdCkpCisJaWYgKF9fY29t cCgqX19maXJzdCwgKl9fcmVzdWx0KSkKIAkgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgICB9CkBAIC01NTgwLDcgKzU1NjIsNyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVm bGV4aXZlKF9fZmlyc3QsIF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERf QTo6X19taW5fZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29w czo6X19pdGVyX2xlc3NfaXRlcigpKTsKKwkJCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19s ZXNzKCkpOwogICAgIH0KIAogICAvKioKQEAgLTU2MDcsNyArNTU4OSw3IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZs ZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKICAgICAgIHJldHVybiBf R0xJQkNYWF9TVERfQTo6X19taW5fZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19n bnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJICAgX0dM SUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01NjE5LDcgKzU2MDEsNyBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1 bHQgPSBfX2ZpcnN0OwogICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCi0JaWYg KF9fY29tcChfX3Jlc3VsdCwgX19maXJzdCkpCisJaWYgKF9fY29tcCgqX19yZXN1bHQsICpf X2ZpcnN0KSkKIAkgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgICB9CkBAIC01NjQ0LDcgKzU2MjYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfQUxHTwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlKF9fZmlyc3Qs IF9fbGFzdCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6X19tYXhfZWxlbWVu dChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3Nf aXRlcigpKTsKKwkJCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19sZXNzKCkpOwogICAgIH0K IAogICAvKioKQEAgLTU2NzEsNyArNTY1Myw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFD RV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2Zp cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKICAgICAgIHJldHVybiBfR0xJQkNYWF9TVERfQTo6 X19tYXhfZWxlbWVudChfX2ZpcnN0LCBfX2xhc3QsCi0JCQkJX19nbnVfY3h4OjpfX29wczo6 X19pdGVyX2NvbXBfaXRlcihfX2NvbXApKTsKKwkJCQkJICAgX0dMSUJDWFhfTU9WRShfX2Nv bXApKTsKICAgICB9CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCkBAIC01NjgzLDcg KzU2NjUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgp KTsKICAgICAgIHJldHVybiAqX0dMSUJDWFhfU1REX0E6Ol9fbWluX2VsZW1lbnQoX19sLmJl Z2luKCksIF9fbC5lbmQoKSwKLQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0 ZXIoKSk7CisJCQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQog CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01Njkz LDcgKzU2NzUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAg ICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fbC5iZWdpbigpLCBf X2wuZW5kKCksIF9fY29tcCk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpfX21p bl9lbGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCQkgICAgc3RkOjptb3ZlKF9fY29t cCkpOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CkBAIC01NzAzLDcgKzU2 ODUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAgIF9f Z2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZShfX2wuYmVnaW4oKSwgX19sLmVuZCgpKTsK ICAgICAgIHJldHVybiAqX0dMSUJDWFhfU1REX0E6Ol9fbWF4X2VsZW1lbnQoX19sLmJlZ2lu KCksIF9fbC5lbmQoKSwKLQkgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9sZXNzX2l0ZXIo KSk7CisJCQkJCSAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7CiAgICAgfQogCiAg IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CkBAIC01NzEzLDcg KzU2OTUsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgIHsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fbC5iZWdpbigpLCBfX2wu ZW5kKCksIF9fY29tcCk7CiAgICAgICByZXR1cm4gKl9HTElCQ1hYX1NURF9BOjpfX21heF9l bGVtZW50KF9fbC5iZWdpbigpLCBfX2wuZW5kKCksCi0JICBfX2dudV9jeHg6Ol9fb3BzOjpf X2l0ZXJfY29tcF9pdGVyKF9fY29tcCkpOworCQkJCQkgICAgc3RkOjptb3ZlKF9fY29tcCkp OwogICAgIH0KICNlbmRpZiAvLyBDKysxMQogCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL3N0bF9hbGdvYmFzZS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9zdGxfYWxnb2Jhc2UuaAppbmRleCBkZDk1ZTk0ZjdlOS4uZjUyMWFjMTE4ZjMgMTAwNjQ0 Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RsX2FsZ29iYXNlLmgKKysrIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9zdGxfYWxnb2Jhc2UuaApAQCAtMTMwMCw5ICsx MzAwLDkgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKICAgICAgIGZvciAo OyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fcmFpX3R5cGU6Ol9fY25kMihfX2ZpcnN0Miwg X19sYXN0Mik7CiAJICAgKytfX2ZpcnN0MSwgKHZvaWQpKytfX2ZpcnN0MikKIAl7Ci0JICBp ZiAoX19jb21wKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkKIAkgICAgcmV0dXJuIHRydWU7Ci0JICBpZiAoX19jb21wKF9fZmly c3QyLCBfX2ZpcnN0MSkpCisJICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkK IAkgICAgcmV0dXJuIGZhbHNlOwogCX0KICAgICAgIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CkBAIC0xMzE2LDEwICsxMzE2LDkgQEAgX0dM SUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIKIAlzdGF0aWMgYm9vbAogCV9fbGMoX0lJ MSBfX2ZpcnN0MSwgX0lJMSBfX2xhc3QxLCBfSUkyIF9fZmlyc3QyLCBfSUkyIF9fbGFzdDIp CiAJewotCSAgdXNpbmcgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2xlc3NfaXRlcjsKIAkg IHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfaW1wbChfX2ZpcnN0MSwg X19sYXN0MSwKIAkJCQkJCSAgICAgX19maXJzdDIsIF9fbGFzdDIsCi0JCQkJCQkgICAgIF9f aXRlcl9sZXNzX2l0ZXIoKSk7CisJCQkJCQlfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7 CiAJfQogCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUkxLCB0eXBlbmFtZSBfSUkyPgpA QCAtMTQ2OSw3ICsxNDY4LDcgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9DT05UQUlORVIK IAkgIF9EaXN0YW5jZVR5cGUgX19oYWxmID0gX19sZW4gPj4gMTsKIAkgIF9Gb3J3YXJkSXRl cmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0OwogCSAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwotCSAgaWYgKF9fY29tcChfX21pZGRsZSwgX192YWwpKQorCSAgaWYgKF9fY29t cCgqX19taWRkbGUsIF9fdmFsKSkKIAkgICAgewogCSAgICAgIF9fZmlyc3QgPSBfX21pZGRs ZTsKIAkgICAgICArK19fZmlyc3Q7CkBAIC0xNTA1LDcgKzE1MDQsNyBAQCBfR0xJQkNYWF9F TkRfTkFNRVNQQUNFX0NPTlRBSU5FUgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3BhcnRp dGlvbmVkX2xvd2VyKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogCiAgICAgICByZXR1cm4g c3RkOjpfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCi0JCQkJX19nbnVf Y3h4OjpfX29wczo6X19pdGVyX2xlc3NfdmFsKCkpOworCQkJCV9fZ251X2N4eDo6X19vcHM6 Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24g Zm9yIHRoZSBzb3J0IHJvdXRpbmVzIGFuZCBmb3IgcmFuZG9tLnRjYy4KQEAgLTE2MzcsNyAr MTYzNiw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAJICBpZiAoX19kMSAh PSBfX2QyKQogCSAgICByZXR1cm4gZmFsc2U7CiAJICByZXR1cm4gX0dMSUJDWFhfU1REX0E6 OmVxdWFsKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICAgICAgX19iaW5h cnlfcHJlZCk7CisJCQkJICAgICAgIHN0ZDo6bW92ZShfX2JpbmFyeV9wcmVkKSk7CiAJfQog CiAgICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyOwpAQCAtMTc3OCw4ICsxNzc3LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FM R08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19s YXN0Mik7CiAKICAgICAgIHJldHVybiBzdGQ6Ol9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf aW1wbAotCShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCi0JIF9fZ251 X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19jb21wKSk7CisJKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAg ICB9CiAKICNpZiBfX2NwcF9saWJfdGhyZWVfd2F5X2NvbXBhcmlzb24KQEAgLTE4ODQsNyAr MTg4Miw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgX19taXNtYXRj aChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAog CSAgICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19i aW5hcnlfcHJlZCkKICAgICB7Ci0gICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2JpbmFyeV9wcmVkKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisgICAgICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KSkKIAl7CiAJICArK19fZmlyc3QxOwogCSAgKytfX2ZpcnN0MjsKQEAgLTE5MjAsNyArMTkx OCw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhf cmVxdWlyZXNfdmFsaWRfcmFuZ2UoX19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1 cm4gX0dMSUJDWFhfU1REX0E6Ol9fbWlzbWF0Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmly c3QyLAotCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigp KTsKKwkJCQkJX19nbnVfY3h4OjpfX29wczo6X19lcXVhbF90bygpKTsKICAgICB9CiAKICAg LyoqCkBAIC0xOTUyLDcgKzE5NTAsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxH TwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QxLCBfX2xh c3QxKTsKIAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21pc21hdGNoKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQlfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29t cF9pdGVyKF9fYmluYXJ5X3ByZWQpKTsKKwkJCQkJX0dMSUJDWFhfTU9WRShfX2JpbmFyeV9w cmVkKSk7CiAgICAgfQogCiAjaWYgX19jcGx1c3BsdXMgPiAyMDExMDNMCkBAIC0xOTY2LDcg KzE5NjQsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogCSAgICAgICBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICAgewogICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgotCSAgICAgJiYgX19iaW5h cnlfcHJlZChfX2ZpcnN0MSwgX19maXJzdDIpKQorCSAgICAgJiYgX19iaW5hcnlfcHJlZCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAJewogCSAgKytfX2ZpcnN0MTsKIAkgICsrX19maXJz dDI7CkBAIC0yMDA0LDcgKzIwMDIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxH TwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xh c3QyKTsKIAogICAgICAgcmV0dXJuIF9HTElCQ1hYX1NURF9BOjpfX21pc21hdGNoKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKLQkJCSAgICAgX19nbnVfY3h4Ojpf X29wczo6X19pdGVyX2VxdWFsX3RvX2l0ZXIoKSk7CisJCQkJCV9fZ251X2N4eDo6X19vcHM6 Ol9fZXF1YWxfdG8oKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtMjAzOSw3ICsyMDM3LDcgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX0FMR08KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJl c192YWxpZF9yYW5nZShfX2ZpcnN0MiwgX19sYXN0Mik7CiAKICAgICAgIHJldHVybiBfR0xJ QkNYWF9TVERfQTo6X19taXNtYXRjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9f bGFzdDIsCi0JCQkgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19i aW5hcnlfcHJlZCkpOworCQkJCQlfR0xJQkNYWF9NT1ZFKF9fYmluYXJ5X3ByZWQpKTsKICAg ICB9CiAjZW5kaWYKIApAQCAtMjA1Miw3ICsyMDUwLDcgQEAgX0dMSUJDWFhfRU5EX05BTUVT UEFDRV9BTEdPCiAgICAgX19maW5kX2lmKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCwKIAkgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgaW5wdXRfaXRl cmF0b3JfdGFnKQogICAgIHsKLSAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAh X19wcmVkKF9fZmlyc3QpKQorICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFf X3ByZWQoKl9fZmlyc3QpKQogCSsrX19maXJzdDsKICAgICAgIHJldHVybiBfX2ZpcnN0Owog ICAgIH0KQEAgLTIwNjksMTkgKzIwNjcsMTkgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9B TEdPCiAKICAgICAgIGZvciAoOyBfX3RyaXBfY291bnQgPiAwOyAtLV9fdHJpcF9jb3VudCkK IAl7Ci0JICBpZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkp CiAJICAgIHJldHVybiBfX2ZpcnN0OwogCSAgKytfX2ZpcnN0OwogCi0JICBpZiAoX19wcmVk KF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAJICAgIHJldHVybiBfX2Zp cnN0OwogCSAgKytfX2ZpcnN0OwogCi0JICBpZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgaWYg KF9fcHJlZCgqX19maXJzdCkpCiAJICAgIHJldHVybiBfX2ZpcnN0OwogCSAgKytfX2ZpcnN0 OwogCi0JICBpZiAoX19wcmVkKF9fZmlyc3QpKQorCSAgaWYgKF9fcHJlZCgqX19maXJzdCkp CiAJICAgIHJldHVybiBfX2ZpcnN0OwogCSAgKytfX2ZpcnN0OwogCX0KQEAgLTIwODksMTcg KzIwODcsMTcgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgICAgICBzd2l0Y2gg KF9fbGFzdCAtIF9fZmlyc3QpCiAJewogCWNhc2UgMzoKLQkgIGlmIChfX3ByZWQoX19maXJz dCkpCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJuIF9fZmlyc3Q7CiAJ ICArK19fZmlyc3Q7CiAJICAvLyBGQUxMVEhSVQogCWNhc2UgMjoKLQkgIGlmIChfX3ByZWQo X19maXJzdCkpCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJuIF9fZmly c3Q7CiAJICArK19fZmlyc3Q7CiAJICAvLyBGQUxMVEhSVQogCWNhc2UgMToKLQkgIGlmIChf X3ByZWQoX19maXJzdCkpCisJICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKIAkgICAgcmV0dXJu IF9fZmlyc3Q7CiAJICArK19fZmlyc3Q7CiAJICAvLyBGQUxMVEhSVQpAQCAtMjEyNSw3ICsy MTIzLDcgQEAgX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgICAgewogICAgICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl IF9fbiA9IDA7CiAgICAgICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK LQlpZiAoX19wcmVkKF9fZmlyc3QpKQorCWlmIChfX3ByZWQoKl9fZmlyc3QpKQogCSAgKytf X247CiAgICAgICByZXR1cm4gX19uOwogICAgIH0KQEAgLTIxNDIsNyArMjE0MCw3IEBAIF9H TElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgICAgICArK19fZmlyc3Q7CiAgICAgICBmb3IgKDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKLQlpZiAoIV9fcHJlZChfX2ZpcnN0KSkKKwlpZiAo IV9fcHJlZCgqX19maXJzdCkpCiAJICB7CiAJICAgICpfX3Jlc3VsdCA9IF9HTElCQ1hYX01P VkUoKl9fZmlyc3QpOwogCSAgICArK19fcmVzdWx0OwpAQCAtMjE1Niw3ICsyMTU0LDcgQEAg X0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCiAgICAgX0ZvcndhcmRJdGVyYXRvcjEKICAg ICBfX3NlYXJjaChfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRv cjEgX19sYXN0MSwKIAkgICAgIF9Gb3J3YXJkSXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2Fy ZEl0ZXJhdG9yMiBfX2xhc3QyLAotCSAgICAgX0JpbmFyeVByZWRpY2F0ZSAgX19wcmVkaWNh dGUpCisJICAgICBfQmluYXJ5UHJlZGljYXRlICBfX3ByZWQpCiAgICAgewogICAgICAgLy8g VGVzdCBmb3IgZW1wdHkgcmFuZ2VzCiAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8 fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQpAQCAtMjE2Niw3ICsyMTY0LDcgQEAgX0dMSUJDWFhf RU5EX05BTUVTUEFDRV9BTEdPCiAgICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX3AxKF9fZmly c3QyKTsKICAgICAgIGlmICgrK19fcDEgPT0gX19sYXN0MikKIAlyZXR1cm4gc3RkOjpfX2Zp bmRfaWYoX19maXJzdDEsIF9fbGFzdDEsCi0JCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9j b21wX2l0ZXIoX19wcmVkaWNhdGUsIF9fZmlyc3QyKSk7CisJICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2NvbXBfdmFsKF9HTElCQ1hYX01PVkUoX19wcmVkKSwgKl9fZmlyc3QyKSk7CiAKICAg ICAgIC8vIEdlbmVyYWwgY2FzZS4KICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fY3VycmVu dCA9IF9fZmlyc3QxOwpAQCAtMjE3NSw3ICsyMTczLDcgQEAgX0dMSUJDWFhfRU5EX05BTUVT UEFDRV9BTEdPCiAJewogCSAgX19maXJzdDEgPQogCSAgICBzdGQ6Ol9fZmluZF9pZihfX2Zp cnN0MSwgX19sYXN0MSwKLQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihf X3ByZWRpY2F0ZSwgX19maXJzdDIpKTsKKwkJCSAgIF9fZ251X2N4eDo6X19vcHM6Ol9fY29t cF92YWwoX19wcmVkLCAqX19maXJzdDIpKTsKIAogCSAgaWYgKF9fZmlyc3QxID09IF9fbGFz dDEpCiAJICAgIHJldHVybiBfX2xhc3QxOwpAQCAtMjE4NSw3ICsyMTgzLDcgQEAgX0dMSUJD WFhfRU5EX05BTUVTUEFDRV9BTEdPCiAJICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkK IAkgICAgcmV0dXJuIF9fbGFzdDE7CiAKLQkgIHdoaWxlIChfX3ByZWRpY2F0ZShfX2N1cnJl bnQsIF9fcCkpCisJICB3aGlsZSAoX19wcmVkKCpfX2N1cnJlbnQsICpfX3ApKQogCSAgICB7 CiAJICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAJCXJldHVybiBfX2ZpcnN0MTsKQEAg LTIyMDgsNyArMjIwNiw3IEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfQUxHTwogICAgICAg Ly8gRWZmaWNpZW50bHkgY29tcGFyZSBpZGVudGljYWwgcHJlZml4ZXM6ICBPKE4pIGlmIHNl cXVlbmNlcwogICAgICAgLy8gaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBv cmRlci4KICAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAo dm9pZCkrK19fZmlyc3QyKQotCWlmICghX19wcmVkKF9fZmlyc3QxLCBfX2ZpcnN0MikpCisJ aWYgKCFfX3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogCSAgYnJlYWs7CiAKICAgICAg IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQpAQCAtMjIyMSwxNSArMjIxOSwxNSBAQCBfR0xJ QkNYWF9FTkRfTkFNRVNQQUNFX0FMR08KICAgICAgIGZvciAoX0ZvcndhcmRJdGVyYXRvcjEg X19zY2FuID0gX19maXJzdDE7IF9fc2NhbiAhPSBfX2xhc3QxOyArK19fc2NhbikKIAl7CiAJ ICBpZiAoX19zY2FuICE9IHN0ZDo6X19maW5kX2lmKF9fZmlyc3QxLCBfX3NjYW4sCi0JCQkg IF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19wcmVkLCBfX3NjYW4pKSkK KwkJCSAgX19nbnVfY3h4OjpfX29wczo6X19jb21wX3ZhbChfX3ByZWQsICpfX3NjYW4pKSkK IAkgICAgY29udGludWU7IC8vIFdlJ3ZlIHNlZW4gdGhpcyBvbmUgYmVmb3JlLgogCiAJICBh dXRvIF9fbWF0Y2hlcwogCSAgICA9IHN0ZDo6X19jb3VudF9pZihfX2ZpcnN0MiwgX19sYXN0 MiwKLQkJCV9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX2l0ZXIoX19wcmVkLCBfX3Nj YW4pKTsKKwkJCSAgICAgIF9fZ251X2N4eDo6X19vcHM6Ol9fY29tcF92YWwoX19wcmVkLCAq X19zY2FuKSk7CiAJICBpZiAoMCA9PSBfX21hdGNoZXMgfHwKIAkgICAgICBzdGQ6Ol9fY291 bnRfaWYoX19zY2FuLCBfX2xhc3QxLAotCQkJX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2Nv bXBfaXRlcihfX3ByZWQsIF9fc2NhbikpCisJCQkgICAgICBfX2dudV9jeHg6Ol9fb3BzOjpf X2NvbXBfdmFsKF9fcHJlZCwgKl9fc2NhbikpCiAJICAgICAgIT0gX19tYXRjaGVzKQogCSAg ICByZXR1cm4gZmFsc2U7CiAJfQpAQCAtMjI2Myw3ICsyMjYxLDcgQEAgX0dMSUJDWFhfRU5E X05BTUVTUEFDRV9BTEdPCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFsaWRfcmFuZ2Uo X19maXJzdDEsIF9fbGFzdDEpOwogCiAgICAgICByZXR1cm4gc3RkOjpfX2lzX3Blcm11dGF0 aW9uKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwKLQkJCQkgICBfX2dudV9jeHg6Ol9f b3BzOjpfX2l0ZXJfZXF1YWxfdG9faXRlcigpKTsKKwkJCQkgICBfX2dudV9jeHg6Ol9fb3Bz OjpfX2VxdWFsX3RvKCkpOwogICAgIH0KICNlbmRpZiAvLyBDKysxMQogCkBAIC0yMzA4LDcg KzIzMDYsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfQUxHTwogICAgICAgX19nbGli Y3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QyLCBfX2xhc3QyKTsKIAogICAgICAg cmV0dXJuIHN0ZDo6X19zZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh c3QyLAotCQkJICAgX19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX3ByZWRp Y2F0ZSkpOworCQkJICAgX0dMSUJDWFhfTU9WRShfX3ByZWRpY2F0ZSkpOwogICAgIH0KIAog X0dMSUJDWFhfRU5EX05BTUVTUEFDRV9BTEdPCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv aW5jbHVkZS9iaXRzL3N0bF9oZWFwLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0 bF9oZWFwLmgKaW5kZXggNTUxYzM2ODc2MjQuLjg1NGQxY2ZmZDY3IDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0bF9oZWFwLmgKKysrIGIvbGlic3RkYysrLXYz L2luY2x1ZGUvYml0cy9zdGxfaGVhcC5oCkBAIC03NCwxMiArNzQsMTIgQEAgX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAg IF9EaXN0YW5jZQogICAgIF9faXNfaGVhcF91bnRpbChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX0Rpc3RhbmNlIF9fbiwKLQkJICAgIF9Db21wYXJlJiBfX2NvbXApCisJCSAg ICBfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0g MDsKICAgICAgIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyAr K19fY2hpbGQpCiAJewotCSAgaWYgKF9fY29tcChfX2ZpcnN0ICsgX19wYXJlbnQsIF9fZmly c3QgKyBfX2NoaWxkKSkKKwkgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly c3RbX19jaGlsZF0pKQogCSAgICByZXR1cm4gX19jaGlsZDsKIAkgIGlmICgoX19jaGlsZCAm IDEpID09IDApCiAJICAgICsrX19wYXJlbnQ7CkBAIC05NCw4ICs5NCw4IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgaW5saW5lIGJvb2wKICAgICBfX2lzX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCiAgICAg ewotICAgICAgX19nbnVfY3h4OjpfX29wczo6X0l0ZXJfbGVzc19pdGVyIF9fY29tcDsKLSAg ICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0LCBfX24sIF9fY29tcCkg PT0gX19uOworICAgICAgcmV0dXJuIHN0ZDo6X19pc19oZWFwX3VudGlsKF9fZmlyc3QsIF9f biwKKwkJCQkgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKSA9PSBfX247CiAgICAgfQog CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0NvbXBhcmUsCkBAIC0xMDQsOSArMTA0LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNF X1ZFUlNJT04KICAgICBpbmxpbmUgYm9vbAogICAgIF9faXNfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UgX19uKQogICAg IHsKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9DbXA7Ci0gICAgICBfX2du dV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAoX0dMSUJDWFhfTU9W RShfX2NvbXApKTsKLSAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0 LCBfX24sIF9fY21wKSA9PSBfX247CisgICAgICByZXR1cm4gc3RkOjpfX2lzX2hlYXBfdW50 aWwoX19maXJzdCwgX19uLAorCQkJCSAgX0dMSUJDWFhfTU9WRShfX2NvbXApKSA9PSBfX247 CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K QEAgLTEzNCwxMCArMTMzLDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAgICAgdm9pZAogICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LAogCQlfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBf VHAgX192YWx1ZSwKLQkJX0NvbXBhcmUmIF9fY29tcCkKKwkJX0NvbXBhcmUgX19jb21wKQog ICAgIHsKICAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8g MjsKLSAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKF9f Zmlyc3QgKyBfX3BhcmVudCwgX192YWx1ZSkpCisgICAgICB3aGlsZSAoX19ob2xlSW5kZXgg PiBfX3RvcEluZGV4ICYmIF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwgX192YWx1ZSkpCiAJ ewogCSAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX0dMSUJDWFhfTU9WRSgqKF9fZmly c3QgKyBfX3BhcmVudCkpOwogCSAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKQEAgLTE3NCwx MCArMTczLDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBf X2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKICAgICAg IF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEpOwogCi0gICAg ICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9sZXNzX3ZhbCBfX2NvbXA7CiAgICAgICBfVmFs dWVUeXBlIF9fdmFsdWUgPSBfR0xJQkNYWF9NT1ZFKCooX19sYXN0IC0gMSkpOwogICAgICAg c3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2Zp cnN0KSAtIDEpLAotCQkgICAgICAgX0Rpc3RhbmNlVHlwZSgwKSwgX0dMSUJDWFhfTU9WRShf X3ZhbHVlKSwgX19jb21wKTsKKwkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElCQ1hY X01PVkUoX192YWx1ZSksCisJCSAgICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfX2xlc3MoKSk7 CiAgICAgfQogCiAgIC8qKgpAQCAtMjEwLDExICsyMDksMTAgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2 ZV9wcmVkKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1 aXJlc19oZWFwX3ByZWQoX19maXJzdCwgX19sYXN0IC0gMSwgX19jb21wKTsKIAotICAgICAg X19kZWNsdHlwZShfX2dudV9jeHg6Ol9fb3BzOjpfX2l0ZXJfY29tcF92YWwoX0dMSUJDWFhf TU9WRShfX2NvbXApKSkKLQlfX2NtcChfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgICAg X1ZhbHVlVHlwZSBfX3ZhbHVlID0gX0dMSUJDWFhfTU9WRSgqKF9fbGFzdCAtIDEpKTsKICAg ICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0g X19maXJzdCkgLSAxKSwKLQkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElCQ1hYX01P VkUoX192YWx1ZSksIF9fY21wKTsKKwkJICAgICAgIF9EaXN0YW5jZVR5cGUoMCksIF9HTElC Q1hYX01PVkUoX192YWx1ZSksCisJCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwog ICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5 cGVuYW1lIF9EaXN0YW5jZSwKQEAgLTIyOSw4ICsyMjcsOCBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCAoX19sZW4g LSAxKSAvIDIpCiAJewogCSAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCAr IDEpOwotCSAgaWYgKF9fY29tcChfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCwKLQkJICAgICBf X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCisJICBpZiAoX19jb21wKF9fZmlyc3Rb X19zZWNvbmRDaGlsZF0sCisJCSAgICAgX19maXJzdFtfX3NlY29uZENoaWxkIC0gMV0pKQog CSAgICBfX3NlY29uZENoaWxkLS07CiAJICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBf R0xJQkNYWF9NT1ZFKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpKTsKIAkgIF9faG9sZUlu ZGV4ID0gX19zZWNvbmRDaGlsZDsKQEAgLTI0MiwxNyArMjQwLDE1IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJCQkJCQkgICAgICsgKF9fc2Vjb25kQ2hpbGQgLSAx KSkpOwogCSAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKIAl9Ci0gICAgICBf X2RlY2x0eXBlKF9fZ251X2N4eDo6X19vcHM6Ol9faXRlcl9jb21wX3ZhbChfR0xJQkNYWF9N T1ZFKF9fY29tcCkpKQotCV9fY21wKF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgICBz dGQ6Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LAotCQkg ICAgICAgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwgX19jbXApOworCQkgICAgICAgX0dMSUJD WFhfTU9WRShfX3ZhbHVlKSwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAg dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIGlubGluZSB2b2lkCiAgICAg X19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fbGFzdCwKLQkgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVz dWx0LCBfQ29tcGFyZSYgX19jb21wKQorCSAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgICB7CiAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl CiAJX1ZhbHVlVHlwZTsKQEAgLTI2Myw3ICsyNTksNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F U1BBQ0VfVkVSU0lPTgogICAgICAgKl9fcmVzdWx0ID0gX0dMSUJDWFhfTU9WRSgqX19maXJz dCk7CiAgICAgICBzdGQ6Ol9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgw KSwKIAkJCSBfRGlzdGFuY2VUeXBlKF9fbGFzdCAtIF9fZmlyc3QpLAotCQkJIF9HTElCQ1hY X01PVkUoX192YWx1ZSksIF9fY29tcCk7CisJCQkgX0dMSUJDWFhfTU9WRShfX3ZhbHVlKSwg X0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgLyoqCkBAIC0yOTUsOCArMjkx LDggQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIGlmIChfX2xh c3QgLSBfX2ZpcnN0ID4gMSkKIAl7CiAJICAtLV9fbGFzdDsKLQkgIF9fZ251X2N4eDo6X19v cHM6Ol9JdGVyX2xlc3NfaXRlciBfX2NvbXA7Ci0JICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJz dCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CisJICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJz dCwgX19sYXN0LCBfX2xhc3QsCisJCQkgIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsK IAl9CiAgICAgfQogCkBAIC0zMjcsMTAgKzMyMyw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT UEFDRV9WRVJTSU9OCiAKICAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKIAl7Ci0J ICB0eXBlZGVmIF9fZGVjbHR5cGUoX19jb21wKSBfQ21wOwotCSAgX19nbnVfY3h4OjpfX29w czo6X0l0ZXJfY29tcF9pdGVyPF9DbXA+IF9fY21wKF9HTElCQ1hYX01PVkUoX19jb21wKSk7 CiAJICAtLV9fbGFzdDsKLQkgIHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9f bGFzdCwgX19jbXApOworCSAgc3RkOjpfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19s YXN0LCBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogCX0KICAgICB9CiAKQEAgLTMzOCw3ICsz MzIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIF9HTElCQ1hY MjBfQ09OU1RFWFBSCiAgICAgdm9pZAogICAgIF9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAotCQlfQ29t cGFyZSYgX19jb21wKQorCQlfQ29tcGFyZSBfX2NvbXApCiAgICAgewogICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs dWVfdHlwZQogCSAgX1ZhbHVlVHlwZTsKQEAgLTM4Miw4ICszNzYsNyBAQCBfR0xJQkNYWF9C RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlk X3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJy ZWZsZXhpdmUoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgX19nbnVfY3h4OjpfX29wczo6 X0l0ZXJfbGVzc19pdGVyIF9fY29tcDsKLSAgICAgIHN0ZDo6X19tYWtlX2hlYXAoX19maXJz dCwgX19sYXN0LCBfX2NvbXApOworICAgICAgc3RkOjpfX21ha2VfaGVhcChfX2ZpcnN0LCBf X2xhc3QsIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAgLyoqCkBA IC00MDgsMTYgKzQwMSwxNCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgog ICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3ZhbGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfaXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBf X2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9D bXA7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19j bXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKLSAgICAgIHN0ZDo6X19tYWtlX2hlYXAoX19m aXJzdCwgX19sYXN0LCBfX2NtcCk7CisgICAgICBzdGQ6Ol9fbWFrZV9oZWFwKF9fZmlyc3Qs IF9fbGFzdCwgX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKICAgICB9CiAKICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg ICBfR0xJQkNYWDIwX0NPTlNURVhQUgogICAgIHZvaWQKICAgICBfX3NvcnRfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwKLQkJX0NvbXBhcmUmIF9fY29tcCkKKwkJX0NvbXBhcmUgX19jb21wKQogICAgIHsKICAg ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKIAl7CkBAIC00NDgsOCArNDM5LDcg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9fZ2xpYmN4eF9y ZXF1aXJlc19pcnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgX19nbGliY3h4 X3JlcXVpcmVzX2hlYXAoX19maXJzdCwgX19sYXN0KTsKIAotICAgICAgX19nbnVfY3h4Ojpf X29wczo6X0l0ZXJfbGVzc19pdGVyIF9fY29tcDsKLSAgICAgIHN0ZDo6X19zb3J0X2hlYXAo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOworICAgICAgc3RkOjpfX3NvcnRfaGVhcChfX2Zp cnN0LCBfX2xhc3QsIF9fZ251X2N4eDo6X19vcHM6Ol9fbGVzcygpKTsKICAgICB9CiAKICAg LyoqCkBAIC00NzUsOSArNDY1LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19pcnJlZmxleGl2ZV9wcmVkKF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19oZWFwX3ByZWQo X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogCi0gICAgICB0eXBlZGVmIF9fZGVjbHR5cGUo X19jb21wKSBfQ21wOwotICAgICAgX19nbnVfY3h4OjpfX29wczo6X0l0ZXJfY29tcF9pdGVy PF9DbXA+IF9fY21wKF9HTElCQ1hYX01PVkUoX19jb21wKSk7Ci0gICAgICBzdGQ6Ol9fc29y dF9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jbXApOworICAgICAgc3RkOjpfX3NvcnRfaGVh cChfX2ZpcnN0LCBfX2xhc3QsIF9HTElCQ1hYX01PVkUoX19jb21wKSk7CiAgICAgfQogCiAj aWYgX19jcGx1c3BsdXMgPj0gMjAxMTAzTApAQCAtNTA0LDkgKzQ5Miw5IEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNfdmFs aWRfcmFuZ2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgIF9fZ2xpYmN4eF9yZXF1aXJlc19p cnJlZmxleGl2ZShfX2ZpcnN0LCBfX2xhc3QpOwogCi0gICAgICBfX2dudV9jeHg6Ol9fb3Bz OjpfSXRlcl9sZXNzX2l0ZXIgX19jb21wOwogICAgICAgcmV0dXJuIF9fZmlyc3QgKyAKLQlz dGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0LCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCksIF9fY29tcCk7CisJc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgc3RkOjpk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpLAorCQkJICAgICBfX2dudV9jeHg6Ol9fb3BzOjpf X2xlc3MoKSk7CiAgICAgfQogCiAgIC8qKgpAQCAtNTMyLDEwICs1MjAsOSBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX3Zh bGlkX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICBfX2dsaWJjeHhfcmVxdWlyZXNf aXJyZWZsZXhpdmVfcHJlZChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAKLSAgICAgIHR5 cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9DbXA7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3Bz OjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19jbXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKTsK ICAgICAgIHJldHVybiBfX2ZpcnN0Ci0JKyBzdGQ6Ol9faXNfaGVhcF91bnRpbChfX2ZpcnN0 LCBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCksIF9fY21wKTsKKwkrIHN0ZDo6X19p c19oZWFwX3VudGlsKF9fZmlyc3QsIHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KSwK KwkJCSAgICAgICBfR0xJQkNYWF9NT1ZFKF9fY29tcCkpOwogICAgIH0KIAogICAvKioKQEAg LTU3Miw5ICs1NTksOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAg ICAgX19nbGliY3h4X3JlcXVpcmVzX2lycmVmbGV4aXZlX3ByZWQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOwogCiAgICAgICBjb25zdCBhdXRvIF9fZGlzdCA9IHN0ZDo6ZGlzdGFuY2Uo X19maXJzdCwgX19sYXN0KTsKLSAgICAgIHR5cGVkZWYgX19kZWNsdHlwZShfX2NvbXApIF9D bXA7Ci0gICAgICBfX2dudV9jeHg6Ol9fb3BzOjpfSXRlcl9jb21wX2l0ZXI8X0NtcD4gX19j bXAoX0dMSUJDWFhfTU9WRShfX2NvbXApKTsKLSAgICAgIHJldHVybiBzdGQ6Ol9faXNfaGVh cF91bnRpbChfX2ZpcnN0LCBfX2Rpc3QsIF9fY21wKSA9PSBfX2Rpc3Q7CisgICAgICByZXR1 cm4gc3RkOjpfX2lzX2hlYXBfdW50aWwoX19maXJzdCwgX19kaXN0LAorCQkJCSAgX0dMSUJD WFhfTU9WRShfX2NvbXApKSA9PSBfX2Rpc3Q7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdp dCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9kZXF1ZSBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL3N0ZC9kZXF1ZQppbmRleCBlM2Q1MGQyY2Y4Yi4uZGY5NzlmODUzY2IgMTAwNjQ0Ci0t LSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9kZXF1ZQorKysgYi9saWJzdGRjKystdjMv aW5jbHVkZS9zdGQvZGVxdWUKQEAgLTk3LDEyICs5NywxMSBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgogICAgIGlubGluZSB0eXBlbmFtZSBkZXF1ZTxfVHAsIF9BbGxv Yz46OnNpemVfdHlwZQogICAgIGVyYXNlX2lmKGRlcXVlPF9UcCwgX0FsbG9jPiYgX19jb250 LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgICB7Ci0gICAgICB1c2luZyBuYW1lc3BhY2UgX19n bnVfY3h4OwogICAgICAgX0dMSUJDWFhfU1REX0M6OmRlcXVlPF9UcCwgX0FsbG9jPiYgX191 Y29udCA9IF9fY29udDsKICAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgp OwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fdWNvbnQuZW5kKCk7CiAgICAgICBhdXRv IF9fcmVtb3ZlZCA9IHN0ZDo6X19yZW1vdmVfaWYoX191Y29udC5iZWdpbigpLCBfX2VuZCwK LQkJCQkJX19vcHM6Ol9fcHJlZF9pdGVyKHN0ZDo6cmVmKF9fcHJlZCkpKTsKKwkJCQkJc3Rk OjpyZWYoX19wcmVkKSk7CiAgICAgICBpZiAoX19yZW1vdmVkICE9IF9fZW5kKQogCXsKIAkg IF9fY29udC5lcmFzZShfX25pdGVyX3dyYXAoX19jb250LmJlZ2luKCksIF9fcmVtb3ZlZCks CkBAIC0xMjIsNyArMTIxLDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3Qg YXV0byBfX2VuZCA9IF9fdWNvbnQuZW5kKCk7CiAgICAgICBhdXRvIF9fcmVtb3ZlZCA9IHN0 ZDo6X19yZW1vdmVfaWYoX191Y29udC5iZWdpbigpLCBfX2VuZCwKLQkJCQkJX19vcHM6Ol9f aXRlcl9lcXVhbHNfdmFsKF9fdmFsdWUpKTsKKwkJCQkJX19vcHM6Ol9fZXF1YWxfdG8oX192 YWx1ZSkpOwogICAgICAgaWYgKF9fcmVtb3ZlZCAhPSBfX2VuZCkKIAl7CiAJICBfX2NvbnQu ZXJhc2UoX19uaXRlcl93cmFwKF9fY29udC5iZWdpbigpLCBfX3JlbW92ZWQpLApkaWZmIC0t Z2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2Z1bmN0aW9uYWwgYi9saWJzdGRjKyst djMvaW5jbHVkZS9zdGQvZnVuY3Rpb25hbAppbmRleCA0YTRiOGIyYjJlNi4uYjAzYjk0ZjIw OTMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9mdW5jdGlvbmFsCisr KyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9mdW5jdGlvbmFsCkBAIC0xMDgwLDUxICsx MDgwLDYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICNlbmRpZiAvLyBD KysyMAogCiAjaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTAotICAvLy8gR2VuZXJhbGl6ZWQg bmVnYXRvci4KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZuPgotICAgIGNsYXNzIF9Ob3RfZm4K LSAgICB7Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm4yLCB0eXBlbmFtZS4uLiBfQXJn cz4KLQl1c2luZyBfX2ludl9yZXNfdCA9IHR5cGVuYW1lIF9faW52b2tlX3Jlc3VsdDxfRm4y LCBfQXJncy4uLj46OnR5cGU7Ci0KLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KLQlz dGF0aWMgZGVjbHR5cGUoIXN0ZDo6ZGVjbHZhbDxfVHA+KCkpCi0JX1Nfbm90KCkgbm9leGNl cHQobm9leGNlcHQoIXN0ZDo6ZGVjbHZhbDxfVHA+KCkpKTsKLQotICAgIHB1YmxpYzoKLSAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GbjI+Ci0JY29uc3RleHByCi0JX05vdF9mbihfRm4y JiYgX19mbiwgaW50KQotCTogX01fZm4oc3RkOjpmb3J3YXJkPF9GbjI+KF9fZm4pKSB7IH0K LQotICAgICAgX05vdF9mbihjb25zdCBfTm90X2ZuJiBfX2ZuKSA9IGRlZmF1bHQ7Ci0gICAg ICBfTm90X2ZuKF9Ob3RfZm4mJiBfX2ZuKSA9IGRlZmF1bHQ7Ci0gICAgICB+X05vdF9mbigp ID0gZGVmYXVsdDsKLQotICAgICAgLy8gTWFjcm8gdG8gZGVmaW5lIG9wZXJhdG9yKCkgd2l0 aCBnaXZlbiBjdi1xdWFsaWZpZXJzIHJlZi1xdWFsaWZpZXJzLAotICAgICAgLy8gZm9yd2Fy ZGluZyBfTV9mbiBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIHF1 YWxpZmllcnMsCi0gICAgICAvLyBhbmQgZGVkdWNpbmcgdGhlIHJldHVybiB0eXBlIGFuZCBl eGNlcHRpb24tc3BlY2lmaWNhdGlvbi4KLSNkZWZpbmUgX0dMSUJDWFhfTk9UX0ZOX0NBTExf T1AoIF9RVUFMUyApCQkJCVwKLSAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIF9BcmdzPgkJ CQkJXAotCV9HTElCQ1hYMjBfQ09OU1RFWFBSCQkJCQkJXAotCWRlY2x0eXBlKF9TX25vdDxf X2ludl9yZXNfdDxfRm4gX1FVQUxTLCBfQXJncy4uLj4+KCkpCQlcCi0Jb3BlcmF0b3IoKShf QXJncyYmLi4uIF9fYXJncykgX1FVQUxTCQkJCVwKLQlub2V4Y2VwdChfX2lzX25vdGhyb3df aW52b2NhYmxlPF9GbiBfUVVBTFMsIF9BcmdzLi4uPjo6dmFsdWUJXAotCSAgICAmJiBub2V4 Y2VwdChfU19ub3Q8X19pbnZfcmVzX3Q8X0ZuIF9RVUFMUywgX0FyZ3MuLi4+PigpKSkJXAot CXsJCQkJCQkJCVwKLQkgIHJldHVybiAhc3RkOjpfX2ludm9rZShzdGQ6OmZvcndhcmQ8IF9G biBfUVVBTFMgPihfTV9mbiksCVwKLQkJCQlzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku Li4pOwlcCi0JfQotICAgICAgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoICYgKQotICAgICAg X0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AoIGNvbnN0ICYgKQotICAgICAgX0dMSUJDWFhfTk9U X0ZOX0NBTExfT1AoICYmICkKLSAgICAgIF9HTElCQ1hYX05PVF9GTl9DQUxMX09QKCBjb25z dCAmJiApCi0jdW5kZWYgX0dMSUJDWFhfTk9UX0ZOX0NBTExfT1AKLQotICAgIHByaXZhdGU6 Ci0gICAgICBfRm4gX01fZm47Ci0gICAgfTsKLQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IHR5cGVuYW1lIF9QcmVkPgogICAgIHN0cnVjdCBfX2lzX2J5dGVfbGlrZSA6IGZhbHNlX3R5 cGUgeyB9OwogCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvc3RyaW5n IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3N0cmluZwppbmRleCBkZDRlY2UxMjgwMS4u OTdjZDYwYjVjMmUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9zdHJp bmcKKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3N0cmluZwpAQCAtODgsMTEgKzg4 LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgaW5saW5lIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlw ZQogICAgIGVyYXNlX2lmKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fY29udCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICAgewotICAgICAgdXNpbmcgbmFtZXNw YWNlIF9fZ251X2N4eDsKICAgICAgIGNvbnN0IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgp OwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9IF9fY29udC5lbmQoKTsKICAgICAgIGF1dG8g X19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9pZihfX2NvbnQuYmVnaW4oKSwgX19lbmQsCi0J CQkJCV9fb3BzOjpfX3ByZWRfaXRlcihzdGQ6OnJlZihfX3ByZWQpKSk7CisJCQkJCXN0ZDo6 cmVmKF9fcHJlZCkpOwogICAgICAgX19jb250LmVyYXNlKF9fcmVtb3ZlZCwgX19lbmQpOwog ICAgICAgcmV0dXJuIF9fb3N6IC0gX19jb250LnNpemUoKTsKICAgICB9CkBAIC0xMDYsNyAr MTA1LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIGNvbnN0 IGF1dG8gX19vc3ogPSBfX2NvbnQuc2l6ZSgpOwogICAgICAgY29uc3QgYXV0byBfX2VuZCA9 IF9fY29udC5lbmQoKTsKICAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9p ZihfX2NvbnQuYmVnaW4oKSwgX19lbmQsCi0JCQkJCV9fb3BzOjpfX2l0ZXJfZXF1YWxzX3Zh bChfX3ZhbHVlKSk7CisJCQkJCV9fb3BzOjpfX2VxdWFsX3RvKF9fdmFsdWUpKTsKICAgICAg IF9fY29udC5lcmFzZShfX3JlbW92ZWQsIF9fZW5kKTsKICAgICAgIHJldHVybiBfX29zeiAt IF9fY29udC5zaXplKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvc3RkL3ZlY3RvciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IKaW5kZXgg NzEyMDg3ZjFiZGQuLmVhODNjZTYyZTJkIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvdmVjdG9yCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC92ZWN0b3IK QEAgLTEwOCwxMiArMTA4LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAgICAgaW5saW5lIHR5cGVuYW1lIHZlY3RvcjxfVHAsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgIGVyYXNlX2lmKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9fY29udCwgX1ByZWRpY2F0ZSBf X3ByZWQpCiAgICAgewotICAgICAgdXNpbmcgbmFtZXNwYWNlIF9fZ251X2N4eDsKICAgICAg IF9HTElCQ1hYX1NURF9DOjp2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3Vjb250ID0gX19jb250 OwogICAgICAgY29uc3QgYXV0byBfX29zeiA9IF9fY29udC5zaXplKCk7CiAgICAgICBjb25z dCBhdXRvIF9fZW5kID0gX191Y29udC5lbmQoKTsKICAgICAgIGF1dG8gX19yZW1vdmVkID0g c3RkOjpfX3JlbW92ZV9pZihfX3Vjb250LmJlZ2luKCksIF9fZW5kLAotCQkJCQlfX29wczo6 X19wcmVkX2l0ZXIoc3RkOjpyZWYoX19wcmVkKSkpOworCQkJCQlzdGQ6OnJlZihfX3ByZWQp KTsKICAgICAgIGlmIChfX3JlbW92ZWQgIT0gX19lbmQpCiAJewogCSAgX19jb250LmVyYXNl KF9fbml0ZXJfd3JhcChfX2NvbnQuYmVnaW4oKSwgX19yZW1vdmVkKSwKQEAgLTEzNCw3ICsx MzMsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgY29uc3Qg YXV0byBfX29zeiA9IF9fY29udC5zaXplKCk7CiAgICAgICBjb25zdCBhdXRvIF9fZW5kID0g X191Y29udC5lbmQoKTsKICAgICAgIGF1dG8gX19yZW1vdmVkID0gc3RkOjpfX3JlbW92ZV9p ZihfX3Vjb250LmJlZ2luKCksIF9fZW5kLAotCQkJCQlfX29wczo6X19pdGVyX2VxdWFsc192 YWwoX192YWx1ZSkpOworCQkJCQlfX29wczo6X19lcXVhbF90byhfX3ZhbHVlKSk7CiAgICAg ICBpZiAoX19yZW1vdmVkICE9IF9fZW5kKQogCXsKIAkgIF9fY29udC5lcmFzZShfX25pdGVy X3dyYXAoX19jb250LmJlZ2luKCksIF9fcmVtb3ZlZCksCg== --------------J5qc4V0W2ep52T9yaE1LiiWr--