Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vAjMK-005S2Q-HZ for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Oct 2025 06:27:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vAjMJ-00EXEh-Fp for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Oct 2025 06:27:06 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vAjMI-00EXEZ-QP for pgsql-hackers@lists.postgresql.org; Mon, 20 Oct 2025 06:27:06 +0000 Received: from mail-vs1-xe32.google.com ([2607:f8b0:4864:20::e32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vAjME-002jgQ-2u for pgsql-hackers@lists.postgresql.org; Mon, 20 Oct 2025 06:27:04 +0000 Received: by mail-vs1-xe32.google.com with SMTP id ada2fe7eead31-5d42137abc2so3943092137.2 for ; Sun, 19 Oct 2025 23:27:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760941622; x=1761546422; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=2lzZpzd5O/8+6dDvzl088KZWXqSn19Ys6hh9JMChGsk=; b=eq1D8Z+ZOurKYSXQ+cLhG+cFg2IUqEFXPl8wXgKSSssPy4IboTTh/x//P/67wZ1Vkf TGvC19jcZ7vjQdRNY6comB2lt56nAPcCEfpNBeg4HICPXPKRpUggYLGe2xrKNig9TJAM wnhtOCW5E8NvywshxazOzG4xLh7/ERBlCbCYPwzIn8o0W37t2/QtF+JjwgXHkCHkUal1 lBE05pfZVg2JJFz9Xm0S9x3uj1ORkCsfcCML93rM0rzYTRWWRBAl2btAh5PWfvjgUyM0 dqIT+NjJyuWBjs8JOljE3yK9uFHsTFfJiLb4YItD8U3J+jZKlOx+dR05LCVsHY6WqDwM ZPow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760941622; x=1761546422; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2lzZpzd5O/8+6dDvzl088KZWXqSn19Ys6hh9JMChGsk=; b=PfNhhI7jFgew1PBes+Znc9YNUZv3crDwAfgfm6JgunT1iXkx/i3YO3SCioz3tayFZt KWvtPjRM7Lk2bksRWm9EvBB7iAzdsYtjk9KrKAynZwOWqO1Zifw9JTb0NAErdAdPqWOQ UBkFI63gI2VjJ8c7Z9xqnPhVnS5xxgXKnZQt5Rct8ICWx69KL8CWmumPP803Uph0StPe wWMCKorMFOWE9aEDw5M6cr9hAijIRoC+utwyElkJw7Z3Y4ggwKNCuNh+i93Vypoq2KFV 78gx475hnYRxHW4QS782jftLWb7GyUcTKCboigdmxgIRHYWH+jneSPaYrI3sGEreUD9c IwaA== X-Gm-Message-State: AOJu0YwkpoJKhxliHKtH0u/1FcboxDELO9Y/7aWquO9YJdu8pQoBIkyP KiC1qYgXTuRbF6EbyZrvqpFKMONcxau7fgU9yyo/Jbn9r9cp1xew6LYwgVUz7FsBjgu7dTk+BBV yQVOHUCKyl1al9dfey8K9u5VdgLj3jH0= X-Gm-Gg: ASbGnctg5OUulkcCF3cwKx4i4e5LPdlpmPDR6+oOTz9as0Cl55AB01zRtq97qMMYfjy PUAeqzhCRHzl3Cg4bNxek+XF9nqqNhGkIUhZr7076tPGGdP577pWrEaQNZDrBT54OIW4XZvt2Wg 1FnBXo0X2aIkDjVjOcPMsZLZ/PfL6ngKJ+u6i28x82ivscKadSjVvSbWTc2JNfRSNMwOh+yIN5D 9CQjgE33jugMneirECnJOCXVey8ltxp+IOknJ/OpkulWbTA9qjSe4IGgee5Y/YhF6BgeYiGGOWD HEzvVU4Pu+VA71jqJbKyKF1gCAx6YTTAuIiudjjO3IO+AvNCR4f5QvJe4Ip+4Xg4VGQjORTOFpa UwD+P5aDgP9KhNcCY4ENXgLGqVRfe38emC1lcGpNYnTdiirc4dCXrrzfp54srpU+aqxCZ6RbwXQ == X-Google-Smtp-Source: AGHT+IG09UcdVIJ2Tf17viK8ekgjA4AznrRrVCialZQfdhlhPYdzuppI7tlvODNNJdpO4rpHLedxGix709lmciHMayM= X-Received: by 2002:a05:6102:3ecf:b0:529:b446:1745 with SMTP id ada2fe7eead31-5d7dd46813cmr3605306137.14.1760941621969; Sun, 19 Oct 2025 23:27:01 -0700 (PDT) MIME-Version: 1.0 References: <202510161957.2kwsjftgygvu@alvherre.pgsql> In-Reply-To: <202510161957.2kwsjftgygvu@alvherre.pgsql> From: jian he Date: Mon, 20 Oct 2025 14:26:24 +0800 X-Gm-Features: AS18NWAdUj3qKIy713CsWgSzeON10y1rn0vmfEaYpZB0GIwfqd1DMieay2fwE7k Message-ID: Subject: Re: using index to speedup add not null constraints to a table To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d929b20641912bf4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d929b20641912bf4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Oct 17, 2025 at 3:57=E2=80=AFAM =C3=81lvaro Herrera wrote: > Can you please rebase this? It stopped applying a week ago. > hi. rebase and minor polishment. --000000000000d929b20641912bf4 Content-Type: text/x-patch; charset="US-ASCII"; name="v7-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Disposition: attachment; filename="v7-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mgyr53hy0 RnJvbSA1YTQwNGMwMzU1Njg5N2I2NTUzNTlhZGVmODA1N2FjZDM1MjQ2YTFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgMjAgT2N0IDIwMjUgMTM6Mjk6MzIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY3 IDEvMV0gdXNpbmcgaW5kZXhzY2FuIHRvIHNwZWVkdXAgYWRkIG5vdCBudWxsIGNvbnN0cmFpbnRz CgpUaGlzIHBhdGNoIHRyaWVzIHRvIHVzZSBpbmRleF9iZWdpbnNjYW4oKSAvIGluZGV4X2dldG5l eHQoKSAvIGluZGV4X2VuZHNjYW4oKQptZW50aW9uZWQgaW4gWzFdIHRvIHNwZWVkdXAgYWRkaW5n IG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIHRoZSBleGlzdGluZyB0YWJsZS4KClRoZSBtYWluIGxv Z2ljIGhhcHBlbnMgaW4gcGhhc2UzIEFUUmV3cml0ZVRhYmxlCjEuIGNvbGxlY3QgYWxsIG5vdC1u dWxsIGNvbnN0cmFpbnRzLgoyLiBGb3IgZWFjaCBub3QtbnVsbCBjb25zdHJhaW50LCBjaGVjayB3 aGV0aGVyIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBpbmRleAphdmFpbGFibGUgZm9yIHZhbGlk YXRpb24uIElmIG5vdCwgdGhlbiBjYW4gbm90IHVzZSBpbmRleHNjYW4gdG8gdmVyaWZ5IG5vdC1u dWxsCmNvbnN0cmFpbnRzLgozLiBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSB0cnVlCiAgKiB0YWJsZSBzY2FuIG9yIHJld3JpdGUgaXMgcmVxdWlyZWQsCiAgKiB0YWJsZSB3 YXNuJ3QgbG9ja2VkIHdpdGggYEFjY2Vzc0V4Y2x1c2l2ZUxvY2tgCiAgKiB0aGUgTk9UIE5VTEwg Y29uc3RyYWludCBhcHBsaWVzIHRvIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uCiB0aGVuIGlu ZGV4IHNjYW4gY2Fubm90IGJlIHVzZWQgZm9yIGZhc3QgdmFsaWRhdGlvbi4KNC4gSWYgYWxsIGNv bmRpdGlvbnMgYXJlIHNhdGlzZmllZCwgYXR0ZW1wdCB0byB1c2UgaW5kZXhzY2FuIHRvIHZlcmlm eQp3aGV0aGVyIHRoZSBjb2x1bW4gY29udGFpbnMgYW55IE5VTEwgdmFsdWVzLgoKY29uY3VycmVu Y3kgY29uY2VybjoKQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIHdpbGwgdGFrZSBhbiBBQ0NFU1Mg RVhDTFVTSVZFIGxvY2ssIHNvIHRoZXJlIGlzIGxlc3MKdmFyaWFudCBvZiByYWNpbmcgaXNzdWUg Y2FuIG9jY3VyPyAgdG8gcHJvdmUgYWNjdXJhdGUsIEkgd3JvdGUgc29tZSBpc29sYXRpb24KdGVz dHMuIHNlZVsyXQoKcGVyZm9ybWFuY2U6CmRlbW86CmNhc2Ugd2hlbjogJTIwIHBlcmNlbnQgdmFs dWVzIGFyZSBOVUxMIGFuZCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIGhlYXAgYnV0IHRoZXkKc3Rp bGwgb24gdGhlIGluZGV4LgoKZHJvcCB0YWJsZSBpZiBleGlzdHMgdDsKY3JlYXRlIHVubG9nZ2Vk IHRhYmxlIHQoYSBpbnQsIGIgaW50KSB3aXRoIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBvZmYsIHZh Y3V1bV9pbmRleF9jbGVhbnVwPW9mZik7Cmluc2VydCBpbnRvIHQgc2VsZWN0IGNhc2Ugd2hlbiBn ICUgNSA9IDAgdGhlbiBudWxsIGVsc2UgZyBlbmQsIGcrMQpmcm9tIGdlbmVyYXRlX3Nlcmllcygx LDFfMDAwXzAwMCkgZzsKY3JlYXRlIGluZGV4IHRfaWR4X2Egb24gdChhKTsKZGVsZXRlIGZyb20g dCB3aGVyZSBhIGlzIG51bGw7CgphbHRlciB0YWJsZSB0IGFsdGVyIGNvbHVtbiBhIGRyb3Agbm90 IG51bGw7CmFsdGVyIHRhYmxlIHQgYWRkIGNvbnN0cmFpbnQgdDEgbm90IG51bGwgYTsKCnRoZSBh Ym92ZSB0d28gc3RhdGVtZW50IHJ1bm5pbmcgc2V2ZXJhbCB0aW1lczoKcGF0Y2ggVGltZTo6IDEu MDg0ICBtcwptYXN0ZXIgVGltZTogMTIuMDQ1IG1zCgpyZWZlcmVuY2VzOgpbMV0gaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQSUyQlRnbW9hNU5LejhpR1dfOXY3d3olM0QtJTJCelFGdSUzREU0U1pvYVRh VTF6bkxhRVhSWXAtUSU0MG1haWwuZ21haWwuY29tClsyXSBodHRwczovL3Bvc3Rnci5lcy9tLzkw MDA1NkQxLTMyREYtNDkyNy04MjUxLTNFMEMwREM0MDdGRCU0MGFuYXJhemVsLmRlCmRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FDSnVmeEZpVz00azFpcz1GMUo9ci1DeDFSdUJ5WFFQ VXJXQjMzMVU0N3JTbkd6K2h3QG1haWwuZ21haWwuY29tCmNvbW1pdGZlc3QgZW50cnk6IGh0dHBz Oi8vY29tbWl0ZmVzdC5wb3N0Z3Jlc3FsLm9yZy9wYXRjaC81NDQ0Ci0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgMTIwICsrKysrKysrKy0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8IDIxMyArKysrKysrKysr KysrKysrKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8 ICAgMiArCiAuLi4vZXhwZWN0ZWQvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwub3V0ICAgICAgfCAg OTcgKysrKysrKysKIHNyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAg ICB8ICAgMSArCiAuLi4vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYyAgICAgICAg fCAgNDUgKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgICAgICAg IHwgICAxICsKIC4uLi90LzAxMF9pbmRleHNjYW5fdmFsaWRhdGVfbm90bnVsbC5wbCAgICAgICB8 IDE2MyArKysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA2MzYgaW5zZXJ0aW9ucygrKSwg NiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRpb24vZXhw ZWN0ZWQvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4c2Nhbi1jaGVjay1ub3RudWxsLnNwZWMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMF9pbmRleHNjYW5f dmFsaWRhdGVfbm90bnVsbC5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNWZkOGI1 MTMxMmMuLmU2ODY2MTlkNzc1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMjEwLDE2 ICsyMTAsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJlZFRhYmxlSW5mbwogCUxpc3QJICAgKmNo YW5nZWRTdGF0aXN0aWNzRGVmczsJLyogc3RyaW5nIGRlZmluaXRpb25zIG9mIHNhbWUgKi8KIH0g QWx0ZXJlZFRhYmxlSW5mbzsKIAotLyogU3RydWN0IGRlc2NyaWJpbmcgb25lIG5ldyBjb25zdHJh aW50IHRvIGNoZWNrIGluIFBoYXNlIDMgc2NhbiAqLwotLyogTm90ZTogbmV3IG5vdC1udWxsIGNv bnN0cmFpbnRzIGFyZSBoYW5kbGVkIGVsc2V3aGVyZSAqLworLyoKKyAqIFN0cnVjdCBkZXNjcmli aW5nIG9uZSBuZXcgY29uc3RyYWludCB0byBjaGVjayBpbiBQaGFzZSAzIHNjYW4uIE5vdGU6IG5l dworICogbm90LW51bGwgY29uc3RyYWludHMgYXJlIGhhbmRsZWQgaGVyZSB0b28uCisqLwogdHlw ZWRlZiBzdHJ1Y3QgTmV3Q29uc3RyYWludAogewogCWNoYXIJICAgKm5hbWU7CQkJLyogQ29uc3Ry YWludCBuYW1lLCBvciBOVUxMIGlmIG5vbmUgKi8KLQlDb25zdHJUeXBlCWNvbnR5cGU7CQkvKiBD SEVDSyBvciBGT1JFSUdOICovCisJQ29uc3RyVHlwZQljb250eXBlOwkJLyogQ0hFQ0sgb3IgRk9S RUlHTiBvciBOT1QgTlVMTCAqLwogCU9pZAkJCXJlZnJlbGlkOwkJLyogUEsgcmVsLCBpZiBGT1JF SUdOICovCiAJT2lkCQkJcmVmaW5kaWQ7CQkvKiBPSUQgb2YgUEsncyBpbmRleCwgaWYgRk9SRUlH TiAqLwogCWJvb2wJCWNvbndpdGhwZXJpb2Q7CS8qIFdoZXRoZXIgdGhlIG5ldyBGT1JFSUdOIEtF WSB1c2VzIFBFUklPRCAqLwogCU9pZAkJCWNvbmlkOwkJCS8qIE9JRCBvZiBwZ19jb25zdHJhaW50 IGVudHJ5LCBpZiBGT1JFSUdOICovCisJaW50CQkJYXR0bnVtOwkJCS8qIE5PVCBOVUxMIGNvbnN0 cmFpbnQgYXR0cmlidXRlIG51bWJlciAqLwogCU5vZGUJICAgKnF1YWw7CQkJLyogQ2hlY2sgZXhw ciBvciBDT05TVFJfRk9SRUlHTiBDb25zdHJhaW50ICovCiAJRXhwclN0YXRlICAqcXVhbHN0YXRl OwkJLyogRXhlY3V0aW9uIHN0YXRlIGZvciBDSEVDSyBleHByICovCiB9IE5ld0NvbnN0cmFpbnQ7 CkBAIC02MTg0LDYgKzYxODcsOSBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0 YWIsIE9pZCBPSUROZXdIZWFwKQogCQkJCW5lZWRzY2FuID0gdHJ1ZTsKIAkJCQljb24tPnF1YWxz dGF0ZSA9IEV4ZWNQcmVwYXJlRXhwcigoRXhwciAqKSBleHBhbmRfZ2VuZXJhdGVkX2NvbHVtbnNf aW5fZXhwcihjb24tPnF1YWwsIG9sZHJlbCwgMSksIGVzdGF0ZSk7CiAJCQkJYnJlYWs7CisJCQlj YXNlIENPTlNUUl9OT1ROVUxMOgorCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJy ZWFrOwogCQkJY2FzZSBDT05TVFJfRk9SRUlHTjoKIAkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUg Ki8KIAkJCQlicmVhazsKQEAgLTYyMzcsMTAgKzYyNDMsNzUgQEAgQVRSZXdyaXRlVGFibGUoQWx0 ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCkKIAkJCQkJCQkJCQkJCQkJd2hvbGVh dHQtPmF0dG51bSk7CiAJCQl9CiAJCX0KLQkJaWYgKG5vdG51bGxfYXR0cnMgfHwgbm90bnVsbF92 aXJ0dWFsX2F0dHJzKQotCQkJbmVlZHNjYW4gPSB0cnVlOwogCX0KIAorCS8qCisJICogVGhlIGNv bmRpdGlvbnMgZm9yIHVzaW5nIGluZGV4c2NhbiBtZWNoYW5pc20gZmFzdCB2ZXJ0aWZpbmcgbm90 LW51bGwKKwkgKiBjb25zdHJhaW50cyBhcmUgcXVpdGUgc3RyaWN0LiBBbGwgb2YgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIG11c3QgYmUKKwkgKiBtZXQuCisJICogMS4gQWx0ZXJlZFRhYmxlSW5m by0+dmVyaWZ5X25ld19ub3RudWxsIGlzIHRydWUuCisJICogMi4gSWYgdGFibGUgc2NhbiAoZm9y IG90aGVyIHJlYXNvbiwgbGlrZSBjaGVjayBjb25zdHJhaW50IHZlcmlmaWNhdGlvbikKKwkgKiAg ICBvciB0YWJsZSByZXdyaXRlIGlzIGV4cGVjdGVkIGxhdGVyLCB1c2luZyBpbmRleHNjYW4gaXMg anVzdCB3YXN0ZXMKKwkgKiAgICBjeWNsZXMuCisJICogMy4gSW5kZXhlcyBjYW5ub3QgYmUgY3Jl YXRlZCBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zLCBzbyBmYXN0CisJICogICAgY2hlY2tp bmcgbm90LW51bGwgY29uc3RyYWludHMgaXMgbm90IGFwcGxpY2FibGUgdG8gdGhlbS4KKwkgKiA0 LiBUaGlzIGFwcGxpZXMgdG8gcGxhaW4gcmVsYXRpb24gb25seS4KKwkgKiA1LiBUbyBwcmV2ZW50 IHBvc3NpYmxlIGNvbmN1cnJlbmN5IGlzc3VlcywgdGhlIHRhYmxlIG11c3QgYWxyZWFkeSBiZQor CSAqICAgIGxvY2tlZCB3aXRoIGFuIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHdoaWNoIGlzIHRoZSBs b2NrIG9idGFpbmVkIGR1cmluZworCSAqICAgIEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTC4KKwkg Ki8KKwlpZiAoIW5lZWRzY2FuICYmCisJCW5ld3JlbCA9PSBOVUxMICYmCisJCXRhYi0+dmVyaWZ5 X25ld19ub3RudWxsICYmCisJCW5vdG51bGxfdmlydHVhbF9hdHRycyA9PSBOSUwgJiYKKwkJb2xk cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQlDaGVja1JlbGF0 aW9uTG9ja2VkQnlNZShvbGRyZWwsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIGZhbHNlKSkKKwl7CisJ CUxpc3QJICAgKm5vdG51bGxfYXR0bnVtcyA9IE5JTDsKKworCQlBc3NlcnQoIXRhYi0+cmV3cml0 ZSk7CisKKwkJZm9yZWFjaChsLCB0YWItPmNvbnN0cmFpbnRzKQorCQl7CisJCQlGb3JtX3BnX2F0 dHJpYnV0ZSAJYXR0cjsKKwkJCU5ld0NvbnN0cmFpbnQgKmNvbiA9IGxmaXJzdChsKTsKKworCQkJ aWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJfTk9UTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJ YXR0ciA9IFR1cGxlRGVzY0F0dHIobmV3VHVwRGVzYywgY29uLT5hdHRudW0gLSAxKTsKKworCQkJ QXNzZXJ0KGF0dHItPmF0dG5vdG51bGwpOworCQkJQXNzZXJ0KGF0dHItPmF0dG51bSA9PSBjb24t PmF0dG51bSk7CisKKwkJCWlmIChhdHRyLT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVS QVRFRF9WSVJUVUFMKQorCQkJeworCQkJCW5lZWRzY2FuID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJ CX0KKworCQkJbm90bnVsbF9hdHRudW1zID0gbGFwcGVuZF9pbnQobm90bnVsbF9hdHRudW1zLCBh dHRyLT5hdHRudW0pOworCQl9CisKKwkJLyoKKwkJICogbm90bnVsbF9hdHRudW1zIGNvbnRhaW5z IGFsbCBhdHRyaWJ1dGVzIHdpdGggTk9UIE5VTEwgY29uc3RyYWludHMKKwkJICogdGhhdCBuZWVk cyB0byBiZSB2YWxpZGF0aW9uLgorCQkgKiBJZiBuZWVkc2NhbiBpcyByZWFsbHkgbmVlZGVkLCBs YXRlciB0YWJsZSBzY2FuIHdpbGwgZG8gdGhlCisJCSAqIHZhbGlkYXRpb24sIGluZGVkeHNjYW4g d291bGQganVzdCB3YXN0ZSBjeWNsZS4KKwkJICovCisJCWlmIChub3RudWxsX2F0dG51bXMgIT0g TklMICYmICFuZWVkc2NhbikKKwkJeworCQkJaWYgKCFpbmRleF9jaGVja19ub3RudWxsKG9sZHJl bCwgbm90bnVsbF9hdHRudW1zKSkKKwkJCQluZWVkc2NhbiA9IHRydWU7CisJCQllbHNlCisJCQkJ ZXJlcG9ydChERUJVRzEsCisJCQkJCQllcnJtc2dfaW50ZXJuYWwoImFsbCBuZXcgbm90LW51bGwg Y29uc3RyYWludHMgb24gcmVsYXRpb24gXCIlc1wiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNp bmcgaW5kZXggc2NhbiIsCisJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob2xkcmVs KSkpOworCQl9CisJfQorCWVsc2UgaWYgKG5vdG51bGxfYXR0cnMgfHwgbm90bnVsbF92aXJ0dWFs X2F0dHJzKQorCQluZWVkc2NhbiA9IHRydWU7CisKIAlpZiAobmV3cmVsIHx8IG5lZWRzY2FuKQog CXsKIAkJRXhwckNvbnRleHQgKmVjb250ZXh0OwpAQCAtNzkxMiw2ICs3OTgzLDcgQEAgQVRFeGVj U2V0Tm90TnVsbChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIgKmNvbk5hbWUsIGNo YXIgKmNvbE5hbWUsCiAJQ29va2VkQ29uc3RyYWludCAqY2NvbjsKIAlMaXN0CSAgICpjb29rZWQ7 CiAJYm9vbAkJaXNfbm9faW5oZXJpdCA9IGZhbHNlOworCUFsdGVyZWRUYWJsZUluZm8gKnRhYiA9 IE5VTEw7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJmbG93IGR1ZSB0byBvdmVybHkg ZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CkBAIC04MDM2 LDEwICs4MTA4LDMxIEBAIEFURXhlY1NldE5vdE51bGwoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24g cmVsLCBjaGFyICpjb25OYW1lLCBjaGFyICpjb2xOYW1lLAogCWNvbnN0cmFpbnQtPmlzX25vX2lu aGVyaXQgPSBpc19ub19pbmhlcml0OwogCWNvbnN0cmFpbnQtPmNvbm5hbWUgPSBjb25OYW1lOwog CisJdGFiID0gQVRHZXRRdWV1ZUVudHJ5KHdxdWV1ZSwgcmVsKTsKKwogCS8qIGFuZCBkbyBpdCAq LwogCWNvb2tlZCA9IEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMocmVsLCBOSUwsIGxpc3RfbWFr ZTEoY29uc3RyYWludCksCiAJCQkJCQkJCQkgICBmYWxzZSwgIXJlY3Vyc2luZywgZmFsc2UsIE5V TEwpOwogCWNjb24gPSBsaW5pdGlhbChjb29rZWQpOworCisJQXNzZXJ0KGNjb24tPmNvbnR5cGUg PT0gQ09OU1RSX05PVE5VTEwpOworCisJLyoKKwkgKiBXZSBtYXkgdXNlIGluZGV4c2NhbiB0byB2 ZXJ0aWZ5IG5vdC1udWxsIGNvbnN0cmFpbnQgaW4gUGhhc2UzLiAgQWRkIHRoZQorCSAqIHRvLWJl LXZhbGlkYXRlZCBub3QtbnVsbCBjb25zdHJhaW50IHRvIFBoYXNlIDMncyBxdWV1ZS4KKwkgKi8K KwlpZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKKwl7CisJCU5ld0NvbnN0cmFpbnQgKm5ld2Nv bjsKKwkJbmV3Y29uID0gKE5ld0NvbnN0cmFpbnQgKikgcGFsbG9jMChzaXplb2YoTmV3Q29uc3Ry YWludCkpOworCisJCW5ld2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CisJCW5ld2Nvbi0+Y29udHlw ZSA9IGNjb24tPmNvbnR5cGU7CisJCW5ld2Nvbi0+YXR0bnVtID0gY2Nvbi0+YXR0bnVtOworCisJ CXRhYi0+Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7CisJ fQorCiAJT2JqZWN0QWRkcmVzc1NldChhZGRyZXNzLCBDb25zdHJhaW50UmVsYXRpb25JZCwgY2Nv bi0+Y29ub2lkKTsKIAogCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2soUmVsYXRpb25SZWxhdGlv bklkLApAQCAtOTkyMCwxMyArMTAwMTMsMTUgQEAgQVRBZGRDaGVja05OQ29uc3RyYWludChMaXN0 ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAl7CiAJCUNv b2tlZENvbnN0cmFpbnQgKmNjb24gPSAoQ29va2VkQ29uc3RyYWludCAqKSBsZmlyc3QobGNvbik7 CiAKLQkJaWYgKCFjY29uLT5za2lwX3ZhbGlkYXRpb24gJiYgY2Nvbi0+Y29udHlwZSAhPSBDT05T VFJfTk9UTlVMTCkKKwkJaWYgKCFjY29uLT5za2lwX3ZhbGlkYXRpb24pCiAJCXsKIAkJCU5ld0Nv bnN0cmFpbnQgKm5ld2NvbjsKIAogCQkJbmV3Y29uID0gKE5ld0NvbnN0cmFpbnQgKikgcGFsbG9j MChzaXplb2YoTmV3Q29uc3RyYWludCkpOwogCQkJbmV3Y29uLT5uYW1lID0gY2Nvbi0+bmFtZTsK IAkJCW5ld2Nvbi0+Y29udHlwZSA9IGNjb24tPmNvbnR5cGU7CisJCQlpZiAoY2Nvbi0+Y29udHlw ZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQluZXdjb24tPmF0dG51bSA9IGNjb24tPmF0dG51bTsK IAkJCW5ld2Nvbi0+cXVhbCA9IGNjb24tPmV4cHI7CiAKIAkJCXRhYi0+Y29uc3RyYWludHMgPSBs YXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7CkBAIC0xMzE5NSw2ICsxMzI5MCw3IEBA IFF1ZXVlTk5Db25zdHJhaW50VmFsaWRhdGlvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBjb25y ZWwsIFJlbGF0aW9uIHJlbCwKIAlMaXN0CSAgICpjaGlsZHJlbiA9IE5JTDsKIAlBdHRyTnVtYmVy CWF0dG51bTsKIAljaGFyCSAgICpjb2xuYW1lOworCU5ld0NvbnN0cmFpbnQgKm5ld2NvbjsKIAog CWNvbiA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVChjb250dXBsZSk7CiAJQXNzZXJ0 KGNvbi0+Y29udHlwZSA9PSBDT05TVFJBSU5UX05PVE5VTEwpOwpAQCAtMTMyNTgsNyArMTMzNTQs MTkgQEAgUXVldWVOTkNvbnN0cmFpbnRWYWxpZGF0aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9u IGNvbnJlbCwgUmVsYXRpb24gcmVsLAogCS8qIFNldCBhdHRub3RudWxsIGFwcHJvcHJpYXRlbHkg d2l0aG91dCBxdWV1ZWluZyBhbm90aGVyIHZhbGlkYXRpb24gKi8KIAlzZXRfYXR0bm90bnVsbChO VUxMLCByZWwsIGF0dG51bSwgdHJ1ZSwgZmFsc2UpOwogCisJLyoKKwkgKiBRdWV1ZSB2YWxpZGF0 aW9uIGZvciBwaGFzZSAzLgorCSAqIEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCB3aWxsIGFkZCBO T1QgTlVMTCBjb25zdHJhaW50IHRvCisJICogQWx0ZXJlZFRhYmxlSW5mby0+Y29uc3RyYWludHMs IGZvciBjb25zaXN0ZW5jeSwgZG8gdGhlIHNhbWUgaGVyZS4KKwkgKi8KKwluZXdjb24gPSAoTmV3 Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25zdHJhaW50KSk7CisJbmV3Y29uLT5u YW1lID0gY29sbmFtZTsKKwluZXdjb24tPmNvbnR5cGUgPSBDT05TVFJfTk9UTlVMTDsKKwluZXdj b24tPmF0dG51bSA9IGF0dG51bTsKKworCS8qIEZpbmQgb3IgY3JlYXRlIHdvcmsgcXVldWUgZW50 cnkgZm9yIHRoaXMgdGFibGUgKi8KIAl0YWIgPSBBVEdldFF1ZXVlRW50cnkod3F1ZXVlLCByZWwp OworCXRhYi0+Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7 CiAJdGFiLT52ZXJpZnlfbmV3X25vdG51bGwgPSB0cnVlOwogCiAJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0luZGV4aW5nLmMKaW5kZXggY2EzM2E4NTQyNzguLjdjYjUzOWE3YmNmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtMTA4LDEyICsxMDgsMTUgQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCisjaW5jbHVkZSAi YWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJh Y2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2FtX2QuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgorI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgiCiAj aW5jbHVkZSAidXRpbHMvcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIK QEAgLTE0NSw2ICsxNDgsNyBAQCBzdGF0aWMgYm9vbCBpbmRleF9leHByZXNzaW9uX2NoYW5nZWRf d2Fsa2VyKE5vZGUgKm5vZGUsCiAJCQkJCQkJCQkJCUJpdG1hcHNldCAqYWxsVXBkYXRlZENvbHMp Owogc3RhdGljIHZvaWQgRXhlY1dpdGhvdXRPdmVybGFwc05vdEVtcHR5KFJlbGF0aW9uIHJlbCwg TmFtZURhdGEgYXR0bmFtZSwgRGF0dW0gYXR0dmFsLAogCQkJCQkJCQkJCWNoYXIgdHlwdHlwZSwg T2lkIGF0dHR5cGlkKTsKK3N0YXRpYyBib29sIGluZGV4X2NoZWNrX25vdG51bGxfaW50ZXJuYWwo UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmF0dG51bXMsIExpc3QgKmlkeHMpOwogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgkJRXhlY09wZW5JbmRpY2VzCkBAIC0xMTcyLDMgKzExNzYsMjEyIEBAIEV4ZWNXaXRo b3V0T3ZlcmxhcHNOb3RFbXB0eShSZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVt IGF0dHZhbCwgY2hhciB0CiAJCQkJIGVycm1zZygiZW1wdHkgV0lUSE9VVCBPVkVSTEFQUyB2YWx1 ZSBmb3VuZCBpbiBjb2x1bW4gXCIlc1wiIGluIHJlbGF0aW9uIFwiJXNcIiIsCiAJCQkJCQlOYW1l U3RyKGF0dG5hbWUpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogfQorCisvKgor ICogbm90bnVsbF9hdHRudW1zOiBsaXN0IG9mIGF0dHJpYnV0ZSBudW1iZXJzIG9mIGFsbCBuZXcg bm90LW51bGwgY29uc3RyYWludHMuCisgKgorICogRmlyc3QgY2hlY2sgd2hldGhlciB0aGUgcmVs YXRpb24gaGFzIGEgc3VpdGFibGUgaW5kZXggZm9yIGVhY2ggbm90LW51bGwKKyAqIGF0dHJpYnV0 ZSwgdGhlbiB1c2luZyBpbmRleHNjYW4gbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGF0ICphbGwqIGF0 dHJpYnV0ZXMgb24KKyAqIG5vdG51bGxfYXR0bnVtcyBhcmUgaW5kZWVkIG5vdCBudWxsLgorICoK KyAqIFJldHVybmluZyB0cnVlIG1lYW5zIGFsbCBuZXcgbm90LW51bGwgY29uc3RyYWludHMgaGF2 ZSBiZWVuIHZlcmlmaWVkLCBubworICogbmVlZCBhbiBleHRyYSBzY2FuIHRvIHZlcmlmeSBuZXds eSBhZGRlZCBub3QtbnVsbCBjb25zdHJhaW50cy4KKyAqLworYm9vbAoraW5kZXhfY2hlY2tfbm90 bnVsbChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqbm90bnVsbF9hdHRudW1zKQoreworCVJlbGF0 aW9uCXBnX2luZGV4OworCVJlbGF0aW9uCWluZGV4X3JlbDsKKwlTeXNTY2FuRGVzYyBpbmRzY2Fu OworCVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJVHVwbGVEZXNjCXR1cGRl c2M7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0cjsKKwlMaXN0CSAgICppZHhzID0gTklMOworCUxp c3QJICAgKmF0dG51bXMgPSBOSUw7CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxh dGlvbik7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfaW5kZXggZm9yIGVudHJpZXMgaGF2aW5n IGluZHJlbGlkID0gdGhpcyByZWwgKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3Bn X2luZGV4X2luZHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJ CQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKSk7CisKKwlwZ19p bmRleCA9IHRhYmxlX29wZW4oSW5kZXhSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWlu ZHNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfaW5kZXgsIEluZGV4SW5kcmVsaWRJbmRleElk LCB0cnVlLAorCQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlz VmFsaWQoaHR1cCA9IHN5c3RhYmxlX2dldG5leHQoaW5kc2NhbikpKQorCXsKKwkJRm9ybV9wZ19p bmRleCBpbmRleCA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJLyoKKwkJ ICogd2UgY2FuIG9ubHkgdXNlIG5vbi1kZWZlcnJlZCwgdmFsaWRhdGVkLCBhbmQgYWxpdmUgYnRy ZWUgaW5kZXggdG8KKwkJICogdmFsaWRhdGUgbm90LW51bGwgY29uc3RyYWludHMKKwkJICovCisJ CWlmICghaW5kZXgtPmluZGltbWVkaWF0ZSB8fCAhaW5kZXgtPmluZGlzdmFsaWQgfHwgIWluZGV4 LT5pbmRpc2xpdmUpCisJCQljb250aW51ZTsKKworCQkvKiBjYW4gbm90IHVzZSBleHByZXNzaW9u IGluZGV4IG9yIHBhcnRpYWwgaW5kZXggdG9vICovCisJCWlmICghaGVhcF9hdHRpc251bGwoaHR1 cCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkgfHwKKwkJCSFoZWFwX2F0dGlzbnVsbCho dHVwLCBBbnVtX3BnX2luZGV4X2luZHByZWQsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJaW5k ZXhfcmVsID0gaW5kZXhfb3BlbihpbmRleC0+aW5kZXhyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCQkvKiBjYW4gb25seSBhcHBseSB0byBidHJlZSBpbmRleCAqLworCQlpZiAoaW5kZXhfcmVs LT5yZF9yZWwtPnJlbGFtICE9IEJUUkVFX0FNX09JRCkKKwkJeworCQkJaW5kZXhfY2xvc2UoaW5k ZXhfcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBjb2xs ZWN0IGluZGV4IGF0dG51bXMgd2hpbGUgbG9vcCAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IGlu ZGV4LT5pbmRua2V5YXR0czsgaSsrKQorCQl7CisJCQlhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCAoaW5kZXgtPmluZGtleS52YWx1ZXNbaV0gLSAxKSk7CisKKwkJCWlmIChhdHRyLT5hdHRp c2Ryb3BwZWQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChsaXN0X21lbWJlcl9pbnQobm90bnVs bF9hdHRudW1zLCBhdHRyLT5hdHRudW0pICYmCisJCQkJIWxpc3RfbWVtYmVyX2ludChhdHRudW1z LCBhdHRyLT5hdHRudW0pKQorCQkJeworCQkJCWF0dG51bXMgPSBsYXBwZW5kX2ludChhdHRudW1z LCBhdHRyLT5hdHRudW0pOworCQkJCWlkeHMgPSBsYXBwZW5kX29pZChpZHhzLCBpbmRleC0+aW5k ZXhyZWxpZCk7CisJCQl9CisJCX0KKwkJaW5kZXhfY2xvc2UoaW5kZXhfcmVsLCBOb0xvY2spOwor CX0KKwlzeXN0YWJsZV9lbmRzY2FuKGluZHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX2luZGV4LCBB Y2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGF0dG51bXMgPT0gTklMKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKgorCSAqIGV2ZXJ5IG5vdC1udWxsIGNvbnN0cmFpbnQgcmVxdWlyZXMgYW4gaW5kZXgg Zm9yIGluZGV4c2Nhbi4gIElmIG5vIHN1Y2gKKwkgKiBpbmRleCBleGlzdHMsIHdlIG5lZWQgdG8g dXNlIHJlZ3VsYXIgdGFibGUgc2NhbiB0byB2YWxpZGF0ZSBub3QtbnVsbAorCSAqIGNvbnN0cmFp bnRzLgorCSAqLworCWZvcmVhY2hfaW50KGF0dG5vLCBub3RudWxsX2F0dG51bXMpCisJeworCQlp ZighbGlzdF9tZW1iZXJfaW50KGF0dG51bXMsIGF0dG5vKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlyZXR1cm4gaW5kZXhfY2hlY2tfbm90bnVsbF9pbnRlcm5hbChyZWxhdGlvbiwgYXR0bnVt cywgaWR4cyk7Cit9CisKKy8qCisgKiBVc2UgaW5kZXhzY2FuIG1lY2hhbmlzbSB0byBmYXN0IHZl cmlmeSBlYWNoIGF0dHJpYnV0ZSBpbiAiYXR0bnVtcyIgYXJlCisgKiBub3QtbnVsbCBvciBub3Qu CisgKi8KK3N0YXRpYyBib29sCitpbmRleF9jaGVja19ub3RudWxsX2ludGVybmFsKFJlbGF0aW9u IHJlbGF0aW9uLCBMaXN0ICphdHRudW1zLCBMaXN0ICppZHhzKQoreworCUVTdGF0ZQkgICAqZXN0 YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwlUdXBsZVRhYmxlU2xvdCAqZXhpc3Rpbmdf c2xvdDsKKwlib29sIAkJYWxsX25vdF9udWxsID0gdHJ1ZTsKKwlMaXN0Q2VsbCAgICpsYywKKwkJ CSAgICpsYzI7CisKKwkvKgorCSAqIE5lZWQgYW4gRVN0YXRlIGZvciBzbG90IHRvIGhvbGQgdGhl IGN1cnJlbnQgdHVwbGUuCisJICovCisJZXN0YXRlID0gQ3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwor CWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOworCisJZm9yYm90aChs YywgYXR0bnVtcywgbGMyLCBpZHhzKQorCXsKKwkJU25hcHNob3REYXRhIERpcnR5U25hcHNob3Q7 CisJCUluZGV4U2NhbkRlc2MgaW5kZXhfc2NhbjsKKwkJU2NhbktleURhdGEJCXNjYW5rZXlzW0lO REVYX01BWF9LRVlTXTsKKwkJSW5kZXhJbmZvICAJKmluZGV4SW5mbzsKKwkJQXR0ck51bWJlcglz a19hdHRubyA9IC0xOworCQlSZWxhdGlvbiAJaW5kZXg7CisJCWludAkJCWluZG5rZXlhdHRzOwor CisJCUF0dHJOdW1iZXIJYXR0bm8gPSBsZmlyc3RfaW50KGxjKTsKKwkJT2lkCQlpbmRleG9pZCA9 IGxmaXJzdF9vaWQobGMyKTsKKworCQlleGlzdGluZ19zbG90ID0gdGFibGVfc2xvdF9jcmVhdGUo cmVsYXRpb24sIE5VTEwpOworCisJCS8qIEFycmFuZ2UgZm9yIGVjb250ZXh0J3Mgc2NhbiB0dXBs ZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLworCQllY29udGV4dC0+ZWN4dF9zY2FudHVw bGUgPSBleGlzdGluZ19zbG90OworCisJCWluZGV4ID0gaW5kZXhfb3BlbihpbmRleG9pZCwgTm9M b2NrKTsKKworCQlpbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleCk7CisJCWluZG5rZXlh dHRzID0gSW5kZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhpbmRleCk7CisKKwkJ LyoKKwkJICogU2VhcmNoIHRoZSB0dXBsZXMgdGhhdCBhcmUgaW4gdGhlIGluZGV4IGZvciBhbnkg dmlvbGF0aW9ucywgaW5jbHVkaW5nCisJCSAqIHR1cGxlcyB0aGF0IGFyZW4ndCB2aXNpYmxlIHll dC4KKwkJICovCisJCUluaXREaXJ0eVNuYXBzaG90KERpcnR5U25hcHNob3QpOworCisJCWZvciAo aW50IGkgPSAwOyBpIDwgaW5kbmtleWF0dHM7IGkrKykKKwkJeworCQkJaWYgKGluZGV4SW5mby0+ aWlfSW5kZXhBdHRyTnVtYmVyc1tpXSA9PSBhdHRubykKKwkJCXsKKwkJCQlza19hdHRubyA9IGkr MTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChza19hdHRubyA9PSAtMSkKKwkJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgbnVtYmVyICVkIG9u IGluZGV4ICV1IiwgaW5kZXhvaWQsIGF0dG5vKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGlu ZG5rZXlhdHRzOyBpKyspCisJCXsKKwkJCS8qIHNldCB1cCBhbiBJUyBOVUxMIHNjYW4ga2V5IHNv IHRoYXQgd2UgaWdub3JlIG5vdCBudWxscyAqLworCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgm c2NhbmtleXNbaV0sCisJCQkJCQkJCSAgIFNLX0lTTlVMTCB8IFNLX1NFQVJDSE5VTEwsCisJCQkJ CQkJCSAgIHNrX2F0dG5vLAkJLyogaW5kZXggY29sIHRvIHNjYW4gKi8KKwkJCQkJCQkJICAgSW52 YWxpZFN0cmF0ZWd5LCAvKiBubyBzdHJhdGVneSAqLworCQkJCQkJCQkgICBJbnZhbGlkT2lkLAkJ Lyogbm8gc3RyYXRlZ3kgc3VidHlwZSAqLworCQkJCQkJCQkgICBJbnZhbGlkT2lkLAkJLyogbm8g Y29sbGF0aW9uICovCisJCQkJCQkJCSAgIEludmFsaWRPaWQsCQkvKiBubyByZWcgcHJvYyBmb3Ig dGhpcyAqLworCQkJCQkJCQkgICAoRGF0dW0pIDApOwkJLyogY29uc3RhbnQgKi8KKwkJfQorCisJ CWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsYXRpb24sIGluZGV4LCAmRGlydHlTbmFw c2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCQlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwg c2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKKworCQl3aGlsZSAoaW5kZXhfZ2V0bmV4 dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkK KwkJeworCQkJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CisJCQlib29sCQludWxsc1tJ TkRFWF9NQVhfS0VZU107CisKKwkJCS8qCisJCQkgKiBFeHRyYWN0IHRoZSBpbmRleCBjb2x1bW4g dmFsdWVzIGFuZCBpc251bGwgZmxhZ3MgZnJvbSB0aGUKKwkJCSAqIGV4aXN0aW5nIHR1cGxlLgor CQkJICovCisJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sIGV4aXN0aW5nX3Nsb3QsIGVzdGF0 ZSwgdmFsdWVzLCBudWxscyk7CisKKwkJCWlmIChudWxsc1tza19hdHRubyAtIDFdKQorCQkJewor CQkJCWFsbF9ub3RfbnVsbCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaW5k ZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKKwkJaW5kZXhfY2xvc2UoaW5kZXgsIE5vTG9jayk7CisJ CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisKKwkJLyogZXhp dCBlYXJsaWVyICovCisJCWlmICghYWxsX25vdF9udWxsKQorCQl7CisJCQlGcmVlRXhlY3V0b3JT dGF0ZShlc3RhdGUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJRnJlZUV4ZWN1dG9y U3RhdGUoZXN0YXRlKTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK aW5kZXggMzI0OGU3OGNkMjguLjIwZGFkMzFmNzNjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgK QEAgLTc1Myw2ICs3NTMsOCBAQCBleHRlcm4gdm9pZCBjaGVja19leGNsdXNpb25fY29uc3RyYWlu dChSZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIAkJCQkJCQkJCSAgIGNvbnN0IERhdHVt ICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCwKIAkJCQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRl LCBib29sIG5ld0luZGV4KTsKIAorZXh0ZXJuIGJvb2wgaW5kZXhfY2hlY2tfbm90bnVsbChSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqbm90bnVsbF9hdHRudW1zKTsKKwogLyoKICAqIHByb3RvdHlw ZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY1JlcGxpY2F0aW9uLmMKICAqLwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luZGV4c2Nhbi1jaGVjay1ub3RudWxsLm91dCBi L3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRleHNjYW4tY2hlY2stbm90bnVsbC5vdXQK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM2YTY1MmUyNTE4Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2luZGV4c2Nhbi1jaGVj ay1ub3RudWxsLm91dApAQCAtMCwwICsxLDk3IEBACitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMiBz ZXNzaW9ucworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczFfYjEgczJfYjEgczFfZDEgczJfYTEg czFfYzEgczJfYzEgczFfcTEKK3N0ZXAgczFfYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBF QVRBQkxFIFJFQUQ7CitzdGVwIHMyX2IxOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJM RSBSRUFEOworc3RlcCBzMV9kMTogREVMRVRFIEZST00gdDsKK3N0ZXAgczJfYTE6IEFMVEVSIFRB QkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsgPHdhaXRpbmcgLi4uPgorc3Rl cCBzMV9jMTogQ09NTUlUOworc3RlcCBzMl9hMTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMyX2Mx OiBDT01NSVQ7CitzdGVwIHMxX3ExOiBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNz LCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50 IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworCitjb25uYW1lfGNvbnJlbGlkfGNvbnR5cGV8Y29u dmFsaWRhdGVkCistLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCit0MV9ubiAg fHQgICAgICAgfG4gICAgICB8dCAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVy bXV0YXRpb246IHMxX2IyIHMyX2IxIHMxX2QxIHMyX2ExIHMxX2MxIHMyX2MxIHMxX3ExCitzdGVw IHMxX2IyOiBCRUdJTjsKK3N0ZXAgczJfYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRB QkxFIFJFQUQ7CitzdGVwIHMxX2QxOiBERUxFVEUgRlJPTSB0Oworc3RlcCBzMl9hMTogQUxURVIg VEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOyA8d2FpdGluZyAuLi4+Citz dGVwIHMxX2MxOiBDT01NSVQ7CitzdGVwIHMyX2ExOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgczJf YzE6IENPTU1JVDsKK3N0ZXAgczFfcTE6IFNFTEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cmVnY2xh c3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFp bnQgV0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisKK2Nvbm5hbWV8Y29ucmVsaWR8Y29udHlwZXxj b252YWxpZGF0ZWQKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0KK3QxX25u ICB8dCAgICAgICB8biAgICAgIHx0ICAgICAgICAgICAKKygxIHJvdykKKworCitzdGFydGluZyBw ZXJtdXRhdGlvbjogczFfYjEgczJfYjIgczFfZDEgczJfYTEgczFfYzEgczJfYzEgczFfcTEKK3N0 ZXAgczFfYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMy X2IyOiBCRUdJTjsKK3N0ZXAgczFfZDE6IERFTEVURSBGUk9NIHQ7CitzdGVwIHMyX2ExOiBBTFRF UiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHQxX25uIE5PVCBOVUxMIGE7IDx3YWl0aW5nIC4uLj4K K3N0ZXAgczFfYzE6IENPTU1JVDsKK3N0ZXAgczJfYTE6IDwuLi4gY29tcGxldGVkPgorc3RlcCBz Ml9jMTogQ09NTUlUOworc3RlcCBzMV9xMTogU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpyZWdj bGFzcywgY29udHlwZSwgY29udmFsaWRhdGVkCisgICAgICAgICAgICAgIEZST00gcGdfY29uc3Ry YWludCBXSEVSRSBjb25uYW1lID0gJ3QxX25uJzsKKworY29ubmFtZXxjb25yZWxpZHxjb250eXBl fGNvbnZhbGlkYXRlZAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQordDFf bm4gIHx0ICAgICAgIHxuICAgICAgfHQgICAgICAgICAgIAorKDEgcm93KQorCisKK3N0YXJ0aW5n IHBlcm11dGF0aW9uOiBzMV9iMSBzMl9iMSBzMl9hMSBzMV9yMSBzMl9yMQorc3RlcCBzMV9iMTog QkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgczJfYjE6IEJFR0lO IElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMyX2ExOiBBTFRFUiBUQUJM RSB0IEFERCBDT05TVFJBSU5UIHQxX25uIE5PVCBOVUxMIGE7CitFUlJPUjogIGNvbHVtbiAiYSIg b2YgcmVsYXRpb24gInQiIGNvbnRhaW5zIG51bGwgdmFsdWVzCitzdGVwIHMxX3IxOiBST0xMQkFD SzsKK3N0ZXAgczJfcjE6IFJPTExCQUNLOworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczFfYjEg czJfYjIgczJfZDEgczFfZDEgczJfcjEgczFfYTEgczFfcTEgczFfcjEKK3N0ZXAgczFfYjE6IEJF R0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMyX2IyOiBCRUdJTjsK K3N0ZXAgczJfZDE6IERST1AgSU5ERVggdF9hYl9pZHg7CitzdGVwIHMxX2QxOiBERUxFVEUgRlJP TSB0OyA8d2FpdGluZyAuLi4+CitzdGVwIHMyX3IxOiBST0xMQkFDSzsKK3N0ZXAgczFfZDE6IDwu Li4gY29tcGxldGVkPgorc3RlcCBzMV9hMTogQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0 MV9ubiBOT1QgTlVMTCBhOworc3RlcCBzMV9xMTogU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpy ZWdjbGFzcywgY29udHlwZSwgY29udmFsaWRhdGVkCisgICAgICAgICAgICAgIEZST00gcGdfY29u c3RyYWludCBXSEVSRSBjb25uYW1lID0gJ3QxX25uJzsKKworY29ubmFtZXxjb25yZWxpZHxjb250 eXBlfGNvbnZhbGlkYXRlZAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQor dDFfbm4gIHx0ICAgICAgIHxuICAgICAgfHQgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHMx X3IxOiBST0xMQkFDSzsKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMxX2IyIHMyX2IxIHMxX2Qx IHMyX2QxIHMxX3MwIHMxX2ExIHMxX2MxIHMyX2MxIHMxX3ExCitzdGVwIHMxX2IyOiBCRUdJTjsK K3N0ZXAgczJfYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVw IHMxX2QxOiBERUxFVEUgRlJPTSB0Oworc3RlcCBzMl9kMTogRFJPUCBJTkRFWCB0X2FiX2lkeDsg PHdhaXRpbmcgLi4uPgorc3RlcCBzMV9zMDogU0FWRVBPSU5UIHMwOworc3RlcCBzMV9hMTogQUxU RVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOworc3RlcCBzMV9jMTog Q09NTUlUOworc3RlcCBzMl9kMTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMyX2MxOiBDT01NSVQ7 CitzdGVwIHMxX3ExOiBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250eXBl LCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNv bm5hbWUgPSAndDFfbm4nOworCitjb25uYW1lfGNvbnJlbGlkfGNvbnR5cGV8Y29udmFsaWRhdGVk CistLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tCit0MV9ubiAgfHQgICAgICAg fG4gICAgICB8dCAgICAgICAgICAgCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lz b2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9u X3NjaGVkdWxlCmluZGV4IDVhZmFlMzNkMzcwLi5hNTkyNmRjODFkNyAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9pc29sYXRp b24vaXNvbGF0aW9uX3NjaGVkdWxlCkBAIC01OSw2ICs1OSw3IEBAIHRlc3Q6IG1lcmdlLWRlbGV0 ZQogdGVzdDogbWVyZ2UtdXBkYXRlCiB0ZXN0OiBtZXJnZS1tYXRjaC1yZWNoZWNrCiB0ZXN0OiBt ZXJnZS1qb2luCit0ZXN0OiBpbmRleHNjYW4tY2hlY2stbm90bnVsbAogdGVzdDogZGVsZXRlLWFi b3J0LXNhdmVwdAogdGVzdDogZGVsZXRlLWFib3J0LXNhdmVwdC0yCiB0ZXN0OiBhYm9ydGVkLWtl eXJldm9rZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4c2Nhbi1j aGVjay1ub3RudWxsLnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvaW5kZXhzY2FuLWNo ZWNrLW5vdG51bGwuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MDViNDQ4ODU1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3Mv aW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYwpAQCAtMCwwICsxLDQ1IEBACisKKyMKKyMgdXNp bmcgaW5kZXhzY2FuIHRvIGNoZWNrIGEgY29sdW1uIG5vdC1udWxsIGNvbnN0cmFpbnQKKyMgaXMg c2F0aXNmaWVkIG9yIG5vdC4KKyMKKworc2V0dXAKK3sKKyAgQ1JFQVRFIFRBQkxFIHQgKGEgaW50 LCBiIGludCk7CisgIENSRUFURSBJTkRFWCB0X2FiX2lkeCBvbiB0KGEsYik7CisgIElOU0VSVCBJ TlRPIHQgdmFsdWVzIChudWxsLCAxKTsKKyAgSU5TRVJUIElOVE8gdCBTRUxFQ1QgeCwgeCoxMCBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDMpIGcoeCk7Cit9CisKK3RlYXJkb3duCit7CisgIERST1Ag VEFCTEUgdDsKK30KKworc2Vzc2lvbiBzMQorc3RlcCBzMV9iMSAgeyBCRUdJTiBJU09MQVRJT04g TEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIHMxX2IyICB7IEJFR0lOOyB9CitzdGVwIHMx X2QxICB7IERFTEVURSBGUk9NIHQ7fQorc3RlcCBzMV9zMCAgeyBTQVZFUE9JTlQgczA7fQorc3Rl cCBzMV9hMSAgeyBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHQxX25uIE5PVCBOVUxMIGE7 fQorc3RlcCBzMV9xMSAgeyBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250 eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJF IGNvbm5hbWUgPSAndDFfbm4nOworICAgICAgICAgICAgfQorc3RlcCBzMV9yMSAgeyBST0xMQkFD SzsgfQorc3RlcCBzMV9jMSAgeyBDT01NSVQ7IH0KKworc2Vzc2lvbiBzMgorc3RlcCBzMl9iMSAg eyBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIHMyX2IyICB7 IEJFR0lOOyB9CitzdGVwIHMyX2ExICB7IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFf bm4gTk9UIE5VTEwgYTt9CitzdGVwIHMyX2QxICB7IERST1AgSU5ERVggdF9hYl9pZHg7fQorc3Rl cCBzMl9yMSAgeyBST0xMQkFDSzsgfQorc3RlcCBzMl9jMSAgeyBDT01NSVQ7IH0KKworcGVybXV0 YXRpb24gczFfYjEgczJfYjEgczFfZDEgczJfYTEgczFfYzEgczJfYzEgczFfcTEKK3Blcm11dGF0 aW9uIHMxX2IyIHMyX2IxIHMxX2QxIHMyX2ExIHMxX2MxIHMyX2MxIHMxX3ExCitwZXJtdXRhdGlv biBzMV9iMSBzMl9iMiBzMV9kMSBzMl9hMSBzMV9jMSBzMl9jMSBzMV9xMQorcGVybXV0YXRpb24g czFfYjEgczJfYjEgczJfYTEgczFfcjEgczJfcjEKK3Blcm11dGF0aW9uIHMxX2IxIHMyX2IyIHMy X2QxIHMxX2QxIHMyX3IxIHMxX2ExIHMxX3ExIHMxX3IxCitwZXJtdXRhdGlvbiBzMV9iMiBzMl9i MSBzMV9kMSBzMl9kMSBzMV9zMCBzMV9hMSBzMV9jMSBzMl9jMSBzMV9xMQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCBmMjU4YmYxY2NkOS4uY2ZjYzdmYTZhMDUgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBAIC0xOCw2ICsxOCw3IEBAIHRl c3RzICs9IHsKICAgICAgICd0LzAwN19jYXRjYWNoZV9pbnZhbC5wbCcsCiAgICAgICAndC8wMDhf cmVwbHNsb3Rfc2luZ2xlX3VzZXIucGwnLAogICAgICAgJ3QvMDA5X2xvZ190ZW1wX2ZpbGVzLnBs JywKKyAgICAgICd0LzAxMF9pbmRleHNjYW5fdmFsaWRhdGVfbm90bnVsbC5wbCcsCiAgICAgXSwK ICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDEwX2lu ZGV4c2Nhbl92YWxpZGF0ZV9ub3RudWxsLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2Mv dC8wMTBfaW5kZXhzY2FuX3ZhbGlkYXRlX25vdG51bGwucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmEzZjNjYjQwOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMTBfaW5kZXhzY2FuX3ZhbGlkYXRlX25vdG51bGwucGwK QEAgLTAsMCArMSwxNjMgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCisjIFZlcmlmeSB0aGF0IGluZGV4c2NhbiBtZWNoYW5pc20g Y2FuIHNwZWVkdXAgQUxURVIgVEFCTEUgQUREIE5PVCBOVUxMCisKKwordXNlIHN0cmljdDsKK3Vz ZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5p dGlhbGl6ZSBhIHRlc3QgY2x1c3RlcgorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ3ByaW1hcnknKTsKKyRub2RlLT5pbml0KCk7CisjIFR1cm4gbWVzc2FnZSBsZXZl bCB1cCB0byBERUJVRzEgc28gdGhhdCB3ZSBnZXQgdGhlIG1lc3NhZ2VzIHdlIHdhbnQgdG8gc2Vl Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdjbGllbnRfbWluX21lc3Nh Z2VzID0gREVCVUcxJyk7Ciskbm9kZS0+c3RhcnQ7CisKKyMgUnVuIGEgU1FMIGNvbW1hbmQgYW5k IHJldHVybiBwc3FsJ3Mgc3RkZXJyIChpbmNsdWRpbmcgZGVidWcgbWVzc2FnZXMpCitzdWIgcnVu X3NxbF9jb21tYW5kCit7CisJbXkgJHNxbCA9IHNoaWZ0OworCW15ICRzdGRlcnI7CisKKwkkbm9k ZS0+cHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJJHNxbCwKKwkJc3RkZXJyID0+IFwkc3RkZXJyLAor CQlvbl9lcnJvcl9kaWUgPT4gMSwKKwkJb25fZXJyb3Jfc3RvcCA9PiAxKTsKKwlyZXR1cm4gJHN0 ZGVycjsKK30KKworIyBDaGVjayB3aGV0aGVyIHJlc3VsdCBvZiBydW5fc3FsX2NvbW1hbmQgc2hv d3MgdGhhdCB3ZSBkaWQgYSB2ZXJpZnkgcGFzcworc3ViIGlzX3RhYmxlX3ZlcmlmaWVkCit7CisJ bXkgJG91dHB1dCA9IHNoaWZ0OworCXJldHVybiBpbmRleCgkb3V0cHV0LCAnREVCVUc6ICB2ZXJp ZnlpbmcgdGFibGUnKSAhPSAtMTsKK30KKworIyBDaGVjayB3aGV0aGVyIHJlc3VsdCBvZiBydW5f c3FsX2NvbW1hbmQgc2hvd3MgdGhhdCB3ZSBkaWQgYSB2ZXJpZnkgcGFzcworc3ViIGlzX2luZGV4 c2Nhbl92ZXJpdGlmeV9ub3RudWxsCit7CisJbXkgJG91dHB1dCA9IHNoaWZ0OworCXJldHVybiBp bmRleCgkb3V0cHV0LCAnREVCVUc6ICBhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJl bGF0aW9uJykgIT0gLTE7Cit9CisKK215ICRvdXRwdXQ7CisKK25vdGUgInRlc3QgYWx0ZXIgdGFi bGUgU0VUIE5PVCBOVUxMIHVzaW5nIGluZGV4c2NhbiB3aXRoIHBhcnRpdGlvbmVkIHRhYmxlIjsK KworcnVuX3NxbF9jb21tYW5kKAorICAgICdDUkVBVEUgVEFCTEUgdHAgKGEgaW50LCBiIGludCwg YyBpbnQsIGQgaW50ICkgUEFSVElUSU9OIEJZIHJhbmdlKGEpOworICAgICBDUkVBVEUgVEFCTEUg dHBwMSBwYXJ0aXRpb24gb2YgdHAgZm9yIHZhbHVlcyBmcm9tICggMSApIHRvICgxMCk7CisgICAg IENSRUFURSBUQUJMRSB0cHAyIHBhcnRpdGlvbiBvZiB0cCBmb3IgdmFsdWVzIGZyb20gKCAxMCAp IHRvICgyMSk7CisgICAgIElOU0VSVCBJTlRPIHRwIHNlbGVjdCBnLCBnICsgMTAsIGcgKyAxNSwg ZyArIHJhbmRvbShtaW49PjE6OmludCwgbWF4PT4xMDo6aW50KSBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDE5KSBnOworICAgICBDUkVBVEUgSU5ERVggT04gdHAoYik7ICcpOworCiskb3V0cHV0ID0g cnVuX3NxbF9jb21tYW5kKCdBTFRFUiBUQUJMRSB0cCBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5V TEw7Jyk7Citvayhpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwKKwknY29s dW1uIGIgd2lsbCB1c2UgaW5kZXhzY2FuIHRvIHZlcmlmeSBub3QtbnVsbCBzdGF0dXMsIG5vIG5l ZWQgc2NhbiB0YWJsZScpOworb2soICRvdXRwdXQgPX4KKwkgIG0vYWxsIG5ldyBub3QtbnVsbCBj b25zdHJhaW50cyBvbiByZWxhdGlvbiAidHBwMSIgaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2lu ZyBpbmRleCBzY2FuLywKKwknYWxsIG5ld2x5IGFkZGVkIGNvbnN0cmFpbnRzIHByb3ZlZCBieSBp bmRleHNjYW4nKTsKKworcnVuX3NxbF9jb21tYW5kKAorCSdBTFRFUiBUQUJMRSB0cCBBTFRFUiBD T0xVTU4gYiBEUk9QIE5PVCBOVUxMOycpOworCisjIHVzZSBpbmRleGVzIG9uIHBhcnRpdGlvbnMg dG8gZmFzdCB2ZXJ0aWZpbmcgbm90LW51bGwgc2hvdWxkIGJlIG9rCiskb3V0cHV0ID0gcnVuX3Nx bF9jb21tYW5kKCdBTFRFUiBUQUJMRSB0cHAxIEFMVEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTDsn KTsKK29rKGlzX2luZGV4c2Nhbl92ZXJpdGlmeV9ub3RudWxsKCRvdXRwdXQpLCAndXNlIGluZGV4 c2NhbiB0byB2YWxpZGF0ZSBjb2x1bW4gYiBub3QtbnVsbCB3aWxsIG5vdCBzY2FuIHRhYmxlJyk7 CitvayghaXNfdGFibGVfdmVyaWZpZWQoJG91dHB1dCksICdubyB0YWJsZSBzY2FuIGZvciBwcDEn KTsKK29rKCAkb3V0cHV0ID1+CisJICBtL2FsbCBuZXcgbm90LW51bGwgY29uc3RyYWludHMgb24g cmVsYXRpb24gInRwcDEiIGhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2Nhbi8s CisJJ2FsbCBuZXdseSBhZGRlZCBjb25zdHJhaW50cyBwcm92ZWQgYnkgaW5kZXhzY2FuJyk7CisK KyRvdXRwdXQgPSBydW5fc3FsX2NvbW1hbmQoJ0FMVEVSIFRBQkxFIHRwcDIgQUxURVIgQ09MVU1O IGIgU0VUIE5PVCBOVUxMOycpOworb2soaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwoJG91 dHB1dCksICd1c2UgaW5kZXhzY2FuIHRvIHZhbGlkYXRlIGNvbHVtbiBiIG5vdC1udWxsLCB3aWxs IG5vdCBzY2FuIHRhYmxlJyk7CitvayghaXNfdGFibGVfdmVyaWZpZWQoJG91dHB1dCksICdubyB0 YWJsZSBzY2FuIGZvciB0cHAyJyk7CitvayggJG91dHB1dCA9fgorCSAgbS9hbGwgbmV3IG5vdC1u dWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0cHAyIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5 IHVzaW5nIGluZGV4IHNjYW4vLAorCSdhbGwgbmV3bHkgYWRkZWQgY29uc3RyYWludHMgcHJvdmVk IGJ5IGluZGV4c2NhbicpOworCitydW5fc3FsX2NvbW1hbmQoCisJJ0FMVEVSIFRBQkxFIHRwIEFM VEVSIENPTFVNTiBiIERST1AgTk9UIE5VTEw7Jyk7CisKKyMgdGFibGUgcmV3cml0ZSB0aGVuIGNh biBub3QgdXNlIGluZGV4c2NhbiB0byB2ZXJpZnkgbm90LW51bGwgY29uc3RyYWludAorJG91dHB1 dCA9IHJ1bl9zcWxfY29tbWFuZCgKKwknQUxURVIgVEFCTEUgdHAgQUxURVIgQ09MVU1OIGIgU0VU IE5PVCBOVUxMLCBBTFRFUiBDT0xVTU4gYiBTRVQgREFUQSBUWVBFIGJpZ2ludDsnCispOworb2so IWlzX3RhYmxlX3ZlcmlmaWVkKCRvdXRwdXQpLCAnbm8gdGFibGUgc2NhbiBmb3IgdHAnKTsKK29r KCFpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwgJ3RhYmxlIHRwIHdpbGwg cmV3cml0ZSwgY2FuIG5vdCB1c2UgaW5kZXhzY2FuIHRvIHZlcmlmeSBub3QtbnVsbCBjb25zdHJh aW50cyBvbiBpdCcpOworCisjIHRlc3QgdXNpbmcgaW5kZXhzY2FuIHdpdGggbXVsdGlwbGUgbm90 LW51bGwgY29uc3RyYWludHMKK3J1bl9zcWxfY29tbWFuZCgKKyAgICAnQUxURVIgVEFCTEUgdHAg QUxURVIgQ09MVU1OIGIgRFJPUCBOT1QgTlVMTDsKKwkgQ1JFQVRFIElOREVYIE9OIHRwKGMpOwor CSBDUkVBVEUgSU5ERVggT04gdHAoZCk7ICcpOworCisjIG9uZSBjb2x1bW4gY2FuIHVzZSBpbmRl eHNjYW4sIGFub3RoZXIgY2FuIG5vdCwgc28gY2FuIG5vdCB1c2UgaW5kZXhzY2FuIHRvIHZlcmlm eSBub3QtbnVsbAorJG91dHB1dCA9IHJ1bl9zcWxfY29tbWFuZCgKKwknQUxURVIgVEFCTEUgdHAg QUxURVIgQ09MVU1OIGEgU0VUIE5PVCBOVUxMLCBBREQgQ09OU1RSQUlOVCBjX25uIE5PVCBOVUxM IGMnKTsKK29rKGlzX3RhYmxlX3ZlcmlmaWVkKCRvdXRwdXQpLCAndGFibGUgc2NhbiBmb3IgdHAn KTsKK29rKCFpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwgJ2NhbiBub3Qg dXNlIGluZGV4c2NhbiB0byB2ZXJpZnkgbm90LW51bGwgY29uc3RyYWludHMgb24gdGFibGUgdHAn KTsKKworIyBhbGwgY29sdW1ucyBoYXZlIGluZGV4IG9uIGl0CisjIHVzZSBpbmRleHNjYW4gdG8g dmVyaWZ5IG11bHRpcGxlIG5vdC1udWxsIGNvbnN0cmFpbnRzIHNob3VsZCBqdXN0IGZpbmUKKyRv dXRwdXQgPSBydW5fc3FsX2NvbW1hbmQoCisJJ0FMVEVSIFRBQkxFIHRwIEFMVEVSIENPTFVNTiBk IFNFVCBOT1QgTlVMTCwgQUREIENPTlNUUkFJTlQgY19ubiBOT1QgTlVMTCBjLCBBTFRFUiBDT0xV TU4gYiBTRVQgTk9UIE5VTEw7Jyk7CitvayghaXNfdGFibGVfdmVyaWZpZWQoJG91dHB1dCksICdu byB0YWJsZSBzY2FuIGZvciB0cCcpOworb2soaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwo JG91dHB1dCksCisJJ3VzaW5nIGluZGV4c2NhbiB0byB2ZXJpZnkgbm90LW51bGwgY29uc3RyYWlu dHMgb24gY29sdW1uIGIsIGMsIGQsIG5vIG5lZWQgdGFibGUgc2NhbicpOworCisjIHRlc3Qgd2l0 aCBub24tcGFydGl0aW9uZWQgdGFibGUgYW5kIG90aGVyIG5vbi1CdHJlZSBpbmRleC4KK3J1bl9z cWxfY29tbWFuZCgKKyAgICAnQ1JFQVRFIFRBQkxFIHQxKGYxIElOVCwgZjIgaW50LCBmMyBpbnQs ZjQgaW50LCBmNSBpbnQpOworICAgICBJTlNFUlQgSU5UTyB0MSBzZWxlY3QgZywgZysxLCBnKzIs IGcrMywgZys0IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgZzsKKyAgICAgQ1JFQVRFIElO REVYIHQxX2YxX2YyX2lkeCBPTiB0MShmMSxmMik7CisgICAgIENSRUFURSBVTklRVUUgSU5ERVgg dDFfZjNpZHggT04gdDEoZjMpOworICAgICBDUkVBVEUgSU5ERVggdDFfZjNmNGlkeCBPTiB0MShm MykgaW5jbHVkZShmNCk7CisgICAgIENSRUFURSBJTkRFWCBoYXNoX2Y1X2lkeCBPTiB0MSBVU0lO RyBoYXNoIChmNSBpbnQ0X29wcyk7ICcpOworCisjIEFMVEVSIFRBQkxFIFZBTElEQVRFIENPTlNU UkFJTlQgY2FuIG5vdCB1c2UgaW5kZXhzY2FuLAorIyBiZWNhdXNlIGl0IG9ubHkgaG9sZCBTaGFy ZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sgbG9jay4KK3J1bl9zcWxfY29tbWFuZCgnQUxURVIgVEFCTEUg dDEgQUREIENPTlNUUkFJTlQgbm5fdDFfZjIgTk9UIE5VTEwgZjIgTk9UIFZBTElEOycpOworCisk b3V0cHV0ID0gcnVuX3NxbF9jb21tYW5kKAorCSdBTFRFUiBUQUJMRSB0MSBWQUxJREFURSBDT05T VFJBSU5UIG5uX3QxX2YyOycKKyk7CitvayghaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwo JG91dHB1dCksICdjYW4gbm90IHVzZSBpbmRleHNjYW4gZm9yIEFMVEVSIFRBQkxFIFZBTElEQVRF IENPTlNUUkFJTlQgY29tbWFuZCcpOworcnVuX3NxbF9jb21tYW5kKCdBTFRFUiBUQUJMRSB0MSBE Uk9QIENPTlNUUkFJTlQgbm5fdDFfZjI7Jyk7CisKKyRvdXRwdXQgPSBydW5fc3FsX2NvbW1hbmQo CisJJ0FMVEVSIFRBQkxFIHQxIEFMVEVSIENPTFVNTiBmMSBTRVQgTk9UIE5VTEwsIEFMVEVSIGYx IHR5cGUgYmlnaW50OycKKyk7CitvayghaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwoJG91 dHB1dCksICd0YWJsZSB0MSB3aWxsIHJld3JpdGUsIGNhbiBub3QgdXNlIGluZGV4c2NhbiB0byB2 YWxpZGF0ZSBub3QtbnVsbCBjb25zdHJhaW50cyBvbiB0MScpOworCitydW5fc3FsX2NvbW1hbmQo J0FMVEVSIFRBQkxFIHQxIEFMVEVSIENPTFVNTiBmMSBEUk9QIE5PVCBOVUxMOycpOworcnVuX3Nx bF9jb21tYW5kKCdBTFRFUiBUQUJMRSB0MSBBREQgQ09OU1RSQUlOVCBubiBOT1QgTlVMTCBmMSwg QUxURVIgZjEgdHlwZSBiaWdpbnQ7Jyk7CisKKyMgY2FuIHVzZSBpbmRleHNjYW4gbWVjaGFuaXNt IHRvIGZhc3QgYWRkIG11bHRpcGxlIG5vdC1udWxsIGNvbnN0cmFpbnRzCiskb3V0cHV0ID0gcnVu X3NxbF9jb21tYW5kKAorCSdBTFRFUiBUQUJMRSB0MSBBTFRFUiBDT0xVTU4gZjIgU0VUIE5PVCBO VUxMLCBBTFRFUiBDT0xVTU4gZjEgU0VUIE5PVCBOVUxMOycKKyk7CitvayggJG91dHB1dCA9fgor CSAgbS9hbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0MSIgaGF2ZSBi ZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuLywKKwknYWxsIG5vdC1udWxsIGNvbnN0 cmFpbnRzIGFyZSB2YWxpZGF0ZWQgYnkgaW5kZXhzY2FuJyk7CisKKyMgdXNpbmcgaW5kZXhzY2Fu IG1lY2hhbmlzbSB0byBmYXN0IGFkZCBhIG5vdC1udWxsIGNhbiBvbmx5IGFwcGx5IHRvIGtleSBj b2x1bW5zLCBub3QgaW5jbHVkZSBjb2x1bW4KKyRvdXRwdXQgPSBydW5fc3FsX2NvbW1hbmQoCisJ J0FMVEVSIFRBQkxFIHQxIEFERCBDT05TVFJBSU5UIG5uZjQgTk9UIE5VTEwgZjQ7JworKTsKK29r KCFpc19pbmRleHNjYW5fdmVyaXRpZnlfbm90bnVsbCgkb3V0cHV0KSwgJ2NhbiBub3QgdXNlIGlu ZGV4c2NhbiB0byB2YWxpZGF0ZSBub3QtbnVsbCBjb25zdHJhaW50IG9uIHQxJyk7CisKKyMgaWYg aW5kZXggaXMgbm90IGJ0cmVlIGluZGV4IHRoZW4gY2Fubm90IHVzZSBpbmRleHNjYW4gbWVjaGFu aXNtIHRvIGZhc3QgYWRkIG5vdC1udWxsIGNvbnN0cmFpbnQKKyRvdXRwdXQgPSBydW5fc3FsX2Nv bW1hbmQoCisJJ0FMVEVSIFRBQkxFIHQxIEFERCBDT05TVFJBSU5UIG5uX2Y1IE5PVCBOVUxMIGY1 OycKKyk7CitvayghaXNfaW5kZXhzY2FuX3Zlcml0aWZ5X25vdG51bGwoJG91dHB1dCksICdjYW4g bm90IHVzZSBpbmRleHNjYW4gdG8gdmFsaWRhdGUgbm90LW51bGwgY29uc3RyYWludHMgb24gdDEn KTsKKworJG5vZGUtPnN0b3AoJ2Zhc3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEK Cg== --000000000000d929b20641912bf4--