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.96) (envelope-from ) id 1vncO3-009WJa-31 for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Feb 2026 12:53:40 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vncO2-00BHPP-33 for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Feb 2026 12:53:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vncO2-00BHPH-1r for pgsql-hackers@lists.postgresql.org; Wed, 04 Feb 2026 12:53:38 +0000 Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vncNz-000000011l8-3HUo for pgsql-hackers@lists.postgresql.org; Wed, 04 Feb 2026 12:53:38 +0000 Received: by mail-vs1-xe2d.google.com with SMTP id ada2fe7eead31-5f5418ec110so540890137.3 for ; Wed, 04 Feb 2026 04:53:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770209614; cv=none; d=google.com; s=arc-20240605; b=kCZT50PQTyIp4F9nWX8xKtHpCHbsO9Dg5TpY4UBA9AFlkSEocwd1t8/GOM/kW6ik8o +672y/1ulfEAblc4kpOS/K5eo/1BmZ+xJZjiinIGOpunPkkH5OwvSzqBBCYbkWbyB8/4 AwnrGh90B+1h3C+3NytmjCYDTpTnvAD4FB187ZTIxvAGUvy9dweN0eCl59kBiftGofPe 1jFb+YGAGuQFstaJz3aF7O+Z3C5Tqp6nEhQUFVCqnkroKwPfunuXZP8//DVuQHPJoDA/ NOe7BUOrDdHMpBgcrPjXdDK8f90dESyZ8UTlwCC0Cqqm1smwzBkolGWWNUVCzn2F+4OR H3Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=o91h+iKr+dWEfj19an1LxoAY/ZDwwMXwCBpex5gE0M0=; fh=tvS4T4+oR2J2hxK5aNJGfORVVBBvqUJPnvm76ijROZw=; b=CGoA4WQl63o5EogKYUifhVzOVxRzU6rP5uZwQEPcfmDorIGl7yHn3Mpz2+TgDv3rSb tQqdkt6oCw26+zib088uDAHFq+I3LhB8jJ+KJqre9hb9tOtaBo+8IBwDgDXx+o7TwMw9 t658ULjgV6v5cmAI+brj2vS0nZhdjf+uxVHcKff81SMws/NU8MWQFy1pah5pLwWgE5HF YM2jkOgZOqsXBQRlPeB6J5jECYOE04tpugKlPsImL3twTBOWV0tmK6jhpFE8zFKKyXox fKxDtVJS72XnXbZfRQE+/JFddldJoREnUHeaDuVcQs0Pcv0knG3KffGIQzGKWcp4lgcO dgsw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770209614; x=1770814414; 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=o91h+iKr+dWEfj19an1LxoAY/ZDwwMXwCBpex5gE0M0=; b=HoHQ+3mQ0q2E8oPSgZ/it6iHYmabFIXYN0msAj36m8z/Z2vDpgJIQpywHkgq9FHXKl rx2QoYh6+gWYkVrdJs3lf40tVv4anjS+gcHjWlT0g/5F3hA2KLCb5ej8mi7emUFzOtli 1uuDS2Cvbck8/KegtWvEgc8BVGbHj90fJjqFfXt+cuEFM9NJ7dBmq2/1yZMGTIYSMqLf xiyqt7t/iyzLAapFk09B8lUJGJsBSag+VOcyYYfOkP0JlRUhMJHwKe8hIzHWPhhrAGWC rntt8HNgBO/Ad5KYl12rAgvYyWyMjQHKBcUUQ7RjCgZMa45L0uLWndeWsQsWbjSvSQN7 GF9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770209614; x=1770814414; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=o91h+iKr+dWEfj19an1LxoAY/ZDwwMXwCBpex5gE0M0=; b=IXLjGjiWivREZ5UO7Lu9MzCJPjSFwUX+wsMmnwoF2lpUPzIQLxLScsQGS8mWe6zE7k yboODbL8/RtNkQ3c4m18Sb2wTtxzgUwnEkmtFdUD6C/vB58OT5QAatSHCr/8kjpTDZF9 ZNTrJoN5AOQQphlb7aPnBQV3esiyHEzyQsJrjmR/EdwTBtuwFblGwE7wq7U53sb61nSY KfwfoV6G9yKrUkh8HnD3NpSgpRxVlnm5nGR4V14CvwfkLXyH2SkLKqyeELWwAcOavuyu JgbQTGqok58Xfdw5Tn5N+8YUjchFHc6YVsI1ZIEgce6e5aB5+5OGlFuWP4qXNJRCDZVL 70lg== X-Gm-Message-State: AOJu0Yxj17ujlUSS/FeW7XrhOjkddiPHugCYUq9olNhc9nqjLIhCZ+ME Bc7xwOe1k17STHOMf0MuRD07KJGytny0EgjBGCswi8UVyjbdQLef2ifTs2hIj7Cd0/L1IgQ5MNH U0JEhyws9MV7qL25OlmUq7NCZXzNi73a1dcs8yRPn7Q== X-Gm-Gg: AZuq6aLUtOn6YKm+6RvxtHC0F0ryh2vZtDSSveqdsuzxzqM/G8dFSfxU29PAyth9hOK Hx96z2cGjqV80T9yYvPeF3GXa3MK0OsT7L/Bywh9MCsEqIhxWvsIE8kvwvydHKyusB8wQYoNylR gQIHsngbuwwV5YWD8azx/gRvvlXEmHQdCUL4nNienAsLxLv0VpuZxxOTfxR4/Bo1ww9jr3dg2Z9 tyjz4W0dedjrm9IypvzKk1D6qhMbIJwD9i2H4/O7wh28ksA960o2bEKuufFozQIRds2XyGNt2Yk mG9wM4muAYhq4mQuXGiLjt1/i0zaYpX1a0Nnw3kFkQkX2QrstIWsqwRSrxv4XwHOsX2ri1+G6a8 x55B6cxn1G3bZpdRAywfG7MxzjGDnf3YPfbfCrgqLQDjrPt/QihRfGnZj32EQiZZmO7T/Y0/jwO YfXD/bU9SugM6fEVbH8D4p X-Received: by 2002:a05:6102:dca:b0:5f5:2b1c:7551 with SMTP id ada2fe7eead31-5f9394eff56mr1068396137.19.1770209613916; Wed, 04 Feb 2026 04:53:33 -0800 (PST) MIME-Version: 1.0 References: <202601311716.jeczqdjsmh57@alvherre.pgsql> In-Reply-To: From: jian he Date: Wed, 4 Feb 2026 20:52:57 +0800 X-Gm-Features: AZwV_QhrA72but1gaDPXGu25bx_JIPVfO418-35h6tZagatMye2N3JyogRTX5h8 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="000000000000374fbb0649ff0b8a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000374fbb0649ff0b8a Content-Type: text/plain; charset="UTF-8" hi. v11 is attached. Mainly fixes regress test failures. -- jian https://www.enterprisedb.com/ --000000000000374fbb0649ff0b8a Content-Type: text/x-patch; charset="US-ASCII"; name="v11-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Disposition: attachment; filename="v11-0001-using-indexscan-to-speedup-add-not-null-constraints.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml811d950 RnJvbSA4YjM4NjMyMzMyMDg5YjA2NzRmZjVkNDA0MTljOTg4YTYxY2UyM2JiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNCBGZWIgMjAyNiAyMDo1MDoyNiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEx IDEvMV0gdXNpbmcgaW5kZXhzY2FuIHRvIHNwZWVkdXAgYWRkIG5vdCBudWxsIGNvbnN0cmFpbnRz CgpUaGlzIHBhdGNoIHRyaWVzIHRvIHVzZSBpbmRleF9iZWdpbnNjYW4oKSAvIGluZGV4X2dldG5l eHQoKSAvIGluZGV4X2VuZHNjYW4oKQptZW50aW9uZWQgaW4gWzFdIHRvIHNwZWVkdXAgYWRkaW5n IG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIHRoZSBleGlzdGluZyB0YWJsZS4KClRoZSBtYWluIGxv Z2ljIGhhcHBlbnMgaW4gcGhhc2UzIEFUUmV3cml0ZVRhYmxlCjEuIGNvbGxlY3QgYWxsIG5vdC1u dWxsIGNvbnN0cmFpbnRzLgoyLiBGb3IgZWFjaCBub3QtbnVsbCBjb25zdHJhaW50LCBjaGVjayB3 aGV0aGVyIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBpbmRleAphdmFpbGFibGUgZm9yIHZhbGlk YXRpb24uIElmIG5vdCwgdGhlbiBjYW5ub3QgdXNlIGluZGV4c2NhbiBtZWNoYW5pc20gdG8gdmVy aWZ5IG5vdC1udWxsCmNvbnN0cmFpbnRzLgozLiBJZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zIGFyZSB0cnVlCiAgKiB0YWJsZSBzY2FuIG9yIHJld3JpdGUgaXMgcmVxdWlyZWQsCiAg KiB0YWJsZSB3YXNuJ3QgbG9ja2VkIHdpdGggYEFjY2Vzc0V4Y2x1c2l2ZUxvY2tgCiAgKiB0aGUg Tk9UIE5VTEwgY29uc3RyYWludCBhcHBsaWVzIHRvIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u CiB0aGVuIGluZGV4IHNjYW4gY2Fubm90IGJlIHVzZWQgZm9yIGZhc3QgdmFsaWRhdGlvbi4KSWYg YWxsIGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZCwgYXR0ZW1wdCB0byB1c2UgaW5kZXhzY2FuIHRv IHZlcmlmeSB3aGV0aGVyIHRoZQpjb2x1bW4gY29udGFpbnMgYW55IE5VTEwgdmFsdWVzLgoKY29u Y3VycmVuY3kgY29uY2VybjoKQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIHdpbGwgdGFrZSBhbiBB Q0NFU1MgRVhDTFVTSVZFIGxvY2ssIHNvIHRoZXJlIGlzIGxlc3MKdmFyaWFudCBvZiByYWNpbmcg aXNzdWUgY2FuIG9jY3VyPyAgdG8gcHJvdmUgYWNjdXJhdGUsIEkgd3JvdGUgc29tZSBpc29sYXRp b24KdGVzdHMuIHNlZVsyXQoKcmVmZXJlbmNlczoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0El MkJUZ21vYTVOS3o4aUdXXzl2N3d6JTNELSUyQnpRRnUlM0RFNFNab2FUYVUxem5MYUVYUllwLVEl NDBtYWlsLmdtYWlsLmNvbQpbMl0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS85MDAwNTZEMS0zMkRGLTQ5 MjctODI1MS0zRTBDMERDNDA3RkQlNDBhbmFyYXplbC5kZQoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUNKdWZ4RmlXPTRrMWlzPUYxSj1yLUN4MVJ1QnlYUVBVcldCMzMxVTQ3clNu R3oraHdAbWFpbC5nbWFpbC5jb20KY29tbWl0ZmVzdCBlbnRyeTogaHR0cHM6Ly9jb21taXRmZXN0 LnBvc3RncmVzcWwub3JnL3BhdGNoLzU0NDQKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyAgICAgICAgICB8IDI4NSArKysrKysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCB8ICA2NSArKysrKwogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29uc3RyYWludHMuc3FsICAgICAgfCAgNDcgKysrKwogMyBmaWxlcyBjaGFuZ2Vk LCAzOTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jCmluZGV4IGY5NzZjMGU1YzdlLi40OWRiYzY5MGU5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMKQEAgLTIxMCwxNiArMjEwLDE5IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyZWRUYWJsZUlu Zm8KIAlMaXN0CSAgICpjaGFuZ2VkU3RhdGlzdGljc0RlZnM7CS8qIHN0cmluZyBkZWZpbml0aW9u cyBvZiBzYW1lICovCiB9IEFsdGVyZWRUYWJsZUluZm87CiAKLS8qIFN0cnVjdCBkZXNjcmliaW5n IG9uZSBuZXcgY29uc3RyYWludCB0byBjaGVjayBpbiBQaGFzZSAzIHNjYW4gKi8KLS8qIE5vdGU6 IG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBhcmUgaGFuZGxlZCBlbHNld2hlcmUgKi8KKy8qCisg KiBTdHJ1Y3QgZGVzY3JpYmluZyBvbmUgbmV3IGNvbnN0cmFpbnQgdG8gY2hlY2sgaW4gUGhhc2Ug MyBzY2FuLiBOb3RlOiBuZXcKKyAqIG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBoYW5kbGVkIGhl cmUgdG9vLgorKi8KIHR5cGVkZWYgc3RydWN0IE5ld0NvbnN0cmFpbnQKIHsKIAljaGFyCSAgICpu YW1lOwkJCS8qIENvbnN0cmFpbnQgbmFtZSwgb3IgTlVMTCBpZiBub25lICovCi0JQ29uc3RyVHlw ZQljb250eXBlOwkJLyogQ0hFQ0sgb3IgRk9SRUlHTiAqLworCUNvbnN0clR5cGUJY29udHlwZTsJ CS8qIENIRUNLIG9yIEZPUkVJR04gb3IgTk9UIE5VTEwgKi8KIAlPaWQJCQlyZWZyZWxpZDsJCS8q IFBLIHJlbCwgaWYgRk9SRUlHTiAqLwogCU9pZAkJCXJlZmluZGlkOwkJLyogT0lEIG9mIFBLJ3Mg aW5kZXgsIGlmIEZPUkVJR04gKi8KIAlib29sCQljb253aXRocGVyaW9kOwkvKiBXaGV0aGVyIHRo ZSBuZXcgRk9SRUlHTiBLRVkgdXNlcyBQRVJJT0QgKi8KIAlPaWQJCQljb25pZDsJCQkvKiBPSUQg b2YgcGdfY29uc3RyYWludCBlbnRyeSwgaWYgRk9SRUlHTiAqLworCWludAkJCWF0dG51bTsJCQkv KiBOT1QgTlVMTCBjb25zdHJhaW50IGF0dHJpYnV0ZSBudW1iZXIgKi8KIAlOb2RlCSAgICpxdWFs OwkJCS8qIENoZWNrIGV4cHIgb3IgQ09OU1RSX0ZPUkVJR04gQ29uc3RyYWludCAqLwogCUV4cHJT dGF0ZSAgKnF1YWxzdGF0ZTsJCS8qIEV4ZWN1dGlvbiBzdGF0ZSBmb3IgQ0hFQ0sgZXhwciAqLwog fSBOZXdDb25zdHJhaW50OwpAQCAtNzQ1LDYgKzc0OCw3IEBAIHN0YXRpYyB2b2lkIEFURXhlY01l cmdlUGFydGl0aW9ucyhMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0 aW9uCiBzdGF0aWMgdm9pZCBBVEV4ZWNTcGxpdFBhcnRpdGlvbihMaXN0ICoqd3F1ZXVlLCBBbHRl cmVkVGFibGVJbmZvICp0YWIsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIFBhcnRpdGlvbkNtZCAq Y21kLAogCQkJCQkJCQkgQWx0ZXJUYWJsZVV0aWxpdHlDb250ZXh0ICpjb250ZXh0KTsKK3N0YXRp YyBib29sIGluZGV4X2NoZWNrX25vdG51bGwoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKm5vdG51 bGxfYXR0bnVtcyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQlEZWZpbmVSZWxhdGlvbgpAQCAtNjIxNyw2 ICs2MjIxLDkgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lE TmV3SGVhcCkKIAkJCQluZWVkc2NhbiA9IHRydWU7CiAJCQkJY29uLT5xdWFsc3RhdGUgPSBFeGVj UHJlcGFyZUV4cHIoKEV4cHIgKikgZXhwYW5kX2dlbmVyYXRlZF9jb2x1bW5zX2luX2V4cHIoY29u LT5xdWFsLCBvbGRyZWwsIDEpLCBlc3RhdGUpOwogCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJf Tk9UTlVMTDoKKwkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKIAkJCWNh c2UgQ09OU1RSX0ZPUkVJR046CiAJCQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCiAJCQkJYnJl YWs7CkBAIC02MjcwLDEwICs2Mjc3LDc4IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUlu Zm8gKnRhYiwgT2lkIE9JRE5ld0hlYXApCiAJCQkJCQkJCQkJCQkJCXdob2xlYXR0LT5hdHRudW0p OwogCQkJfQogCQl9Ci0JCWlmIChub3RudWxsX2F0dHJzIHx8IG5vdG51bGxfdmlydHVhbF9hdHRy cykKLQkJCW5lZWRzY2FuID0gdHJ1ZTsKIAl9CiAKKwkvKgorCSAqIFRoZSBjb25kaXRpb25zIGZv ciB1c2luZyBpbmRleHNjYW4gbWVjaGFuaXNtIGZhc3QgdmVyaWZ5aW5nIG5vdC1udWxsCisJICog Y29uc3RyYWludHMgYXJlIHF1aXRlIHN0cmljdC4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBtdXN0IGJlCisJICogbWV0LgorCSAqCisJICogMS4gQWx0ZXJlZFRhYmxlSW5mby0+dmVy aWZ5X25ld19ub3RudWxsIGlzIHRydWUuCisJICoKKwkgKiAyLiBJZiB0YWJsZSBzY2FuIChmb3Ig b3RoZXIgcmVhc29uLCBsaWtlIGNoZWNrIGNvbnN0cmFpbnQgdmVyaWZpY2F0aW9uKQorCSAqIG9y IHRhYmxlIHJld3JpdGUgaXMgZXhwZWN0ZWQgbGF0ZXIsIHVzaW5nIGluZGV4c2NhbiBpcyBqdXN0 IHdhc3RlcworCSAqIGN5Y2xlcy4KKwkgKgorCSAqIDMuIEluZGV4ZXMgY2Fubm90IGJlIGNyZWF0 ZWQgb24gdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucywgc28gZmFzdAorCSAqIGNoZWNraW5nIG5v dC1udWxsIGNvbnN0cmFpbnRzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIHRoZW0uCisJICoKKwkgKiA0 LiBUaGlzIGFwcGxpZXMgdG8gcGxhaW4gcmVsYXRpb25zIG9ubHkuCisJICoKKwkgKiA1LiBUbyBw cmV2ZW50IHBvc3NpYmxlIGNvbmN1cnJlbmN5IGlzc3VlcywgdGhlIHRhYmxlIG11c3QgYWxyZWFk eSBiZQorCSAqIGxvY2tlZCB3aXRoIGFuIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHdoaWNoIGlzIHRo ZSBsb2NrIG9idGFpbmVkIGR1cmluZworCSAqIEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTC4KKwkg Ki8KKwlpZiAoIW5lZWRzY2FuICYmCisJCW5ld3JlbCA9PSBOVUxMICYmCisJCXRhYi0+dmVyaWZ5 X25ld19ub3RudWxsICYmCisJCW5vdG51bGxfdmlydHVhbF9hdHRycyA9PSBOSUwgJiYKKwkJb2xk cmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQlDaGVja1JlbGF0 aW9uTG9ja2VkQnlNZShvbGRyZWwsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIGZhbHNlKSkKKwl7CisJ CUxpc3QJICAgKm5vdG51bGxfYXR0bnVtcyA9IE5JTDsKKworCQlBc3NlcnQoIXRhYi0+cmV3cml0 ZSk7CisKKwkJZm9yZWFjaChsLCB0YWItPmNvbnN0cmFpbnRzKQorCQl7CisJCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRyOworCQkJTmV3Q29uc3RyYWludCAqY29uID0gbGZpcnN0KGwpOworCisJCQkv KgorCQkJICogVGhpcyBtYXkgYmUgYSBGT1JFSUdOIEtFWSAoZXZlbiBpZiBub3QgYSBDSEVDSyBj b25zdHJhaW50KSwKKwkJCSAqIHRoZXJlZm9yZSB3ZSBjYW5ub3QganVzdCByYWlzZSBlcnJvciBm b3Igbm9uLU5PVC1OVUxMCisJCQkgKiBjb25zdHJhaW50LgorCQkJICovCisJCQlpZiAoY29uLT5j b250eXBlICE9IENPTlNUUl9OT1ROVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlhdHRyID0gVHVw bGVEZXNjQXR0cihuZXdUdXBEZXNjLCBjb24tPmF0dG51bSAtIDEpOworCisJCQlpZiAoYXR0ci0+ YXR0aXNkcm9wcGVkKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQoYXR0ci0+YXR0bm90bnVs bCk7CisJCQlBc3NlcnQoYXR0ci0+YXR0bnVtID09IGNvbi0+YXR0bnVtKTsKKwkJCUFzc2VydChh dHRyLT5hdHRnZW5lcmF0ZWQgIT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKTsKKworCQkJ bm90bnVsbF9hdHRudW1zID0gbGlzdF9hcHBlbmRfdW5pcXVlX2ludChub3RudWxsX2F0dG51bXMs CisJCQkJCQkJCQkJCQkJIGF0dHItPmF0dG51bSk7CisJCX0KKworCQlpZiAobm90bnVsbF9hdHRu dW1zICE9IE5JTCkKKwkJeworCQkJaWYgKGluZGV4X2NoZWNrX25vdG51bGwob2xkcmVsLCBub3Ru dWxsX2F0dG51bXMpKQorCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJZXJybXNnX2ludGVybmFs KCJhbGwgbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uIFwiJXNcIiBoYXZlIGJl ZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iLAorCQkJCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKG9sZHJlbCkpKTsKKwkJCWVsc2UKKwkJCQluZWVkc2NhbiA9IHRydWU7CisJ CX0KKwl9CisJZWxzZSBpZiAobm90bnVsbF9hdHRycyB8fCBub3RudWxsX3ZpcnR1YWxfYXR0cnMp CisJCW5lZWRzY2FuID0gdHJ1ZTsKKwogCWlmIChuZXdyZWwgfHwgbmVlZHNjYW4pCiAJewogCQlF eHByQ29udGV4dCAqZWNvbnRleHQ7CkBAIC03OTQ5LDYgKzgwMjQsNyBAQCBBVEV4ZWNTZXROb3RO dWxsKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFtZSwgY2hhciAqY29s TmFtZSwKIAlDb29rZWRDb25zdHJhaW50ICpjY29uOwogCUxpc3QJICAgKmNvb2tlZDsKIAlib29s CQlpc19ub19pbmhlcml0ID0gZmFsc2U7CisJQWx0ZXJlZFRhYmxlSW5mbyAqdGFiID0gQVRHZXRR dWV1ZUVudHJ5KHdxdWV1ZSwgcmVsKTs7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJm bG93IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNr X2RlcHRoKCk7CkBAIC04MDc3LDYgKzgxNTMsMjUgQEAgQVRFeGVjU2V0Tm90TnVsbChMaXN0ICoq d3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIgKmNvbk5hbWUsIGNoYXIgKmNvbE5hbWUsCiAJY29v a2VkID0gQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwgbGlzdF9tYWtlMShjb25z dHJhaW50KSwKIAkJCQkJCQkJCSAgIGZhbHNlLCAhcmVjdXJzaW5nLCBmYWxzZSwgTlVMTCk7CiAJ Y2NvbiA9IGxpbml0aWFsKGNvb2tlZCk7CisKKwlBc3NlcnQoY2Nvbi0+Y29udHlwZSA9PSBDT05T VFJfTk9UTlVMTCk7CisKKwkvKgorCSAqIFdlIG1heSB1c2luZyBpbmRleHNjYW4gbWVjaGFuaXNt IHRvIHZlcnRpZnkgdGhpcyBub3QtbnVsbCBjb25zdHJhaW50IGluCisJICogUGhhc2UzLiAgQWRk IHRoaXMgdG8tYmUtdmFsaWRhdGVkIG5vdC1udWxsIGNvbnN0cmFpbnQgdG8gUGhhc2UgMydzCisJ ICogcXVldWUuCisJICovCisJaWYgKCFjY29uLT5za2lwX3ZhbGlkYXRpb24pCisJeworCQlOZXdD b25zdHJhaW50ICpuZXdjb24gPSBwYWxsb2MwX29iamVjdChOZXdDb25zdHJhaW50KTsKKworCQlu ZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOworCQluZXdjb24tPmNvbnR5cGUgPSBDT05TVFJfTk9U TlVMTDsKKwkJbmV3Y29uLT5hdHRudW0gPSBjY29uLT5hdHRudW07CisKKwkJdGFiLT5jb25zdHJh aW50cyA9IGxhcHBlbmQodGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwl9CisKIAlPYmplY3RB ZGRyZXNzU2V0KGFkZHJlc3MsIENvbnN0cmFpbnRSZWxhdGlvbklkLCBjY29uLT5jb25vaWQpOwog CiAJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhSZWxhdGlvblJlbGF0aW9uSWQsCkBAIC05OTgz LDEzICsxMDA3OCwxNSBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50KExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCXsKIAkJQ29va2VkQ29uc3RyYWlu dCAqY2NvbiA9IChDb29rZWRDb25zdHJhaW50ICopIGxmaXJzdChsY29uKTsKIAotCQlpZiAoIWNj b24tPnNraXBfdmFsaWRhdGlvbiAmJiBjY29uLT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxMKQor CQlpZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKIAkJewogCQkJTmV3Q29uc3RyYWludCAqbmV3 Y29uOwogCiAJCQluZXdjb24gPSBwYWxsb2MwX29iamVjdChOZXdDb25zdHJhaW50KTsKIAkJCW5l d2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CiAJCQluZXdjb24tPmNvbnR5cGUgPSBjY29uLT5jb250 eXBlOworCQkJaWYgKGNjb24tPmNvbnR5cGUgPT0gQ09OU1RSX05PVE5VTEwpCisJCQkJbmV3Y29u LT5hdHRudW0gPSBjY29uLT5hdHRudW07CiAJCQluZXdjb24tPnF1YWwgPSBjY29uLT5leHByOwog CiAJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24p OwpAQCAtMTMyNTgsNiArMTMzNTUsNyBAQCBRdWV1ZU5OQ29uc3RyYWludFZhbGlkYXRpb24oTGlz dCAqKndxdWV1ZSwgUmVsYXRpb24gY29ucmVsLCBSZWxhdGlvbiByZWwsCiAJTGlzdAkgICAqY2hp bGRyZW4gPSBOSUw7CiAJQXR0ck51bWJlcglhdHRudW07CiAJY2hhcgkgICAqY29sbmFtZTsKKwlO ZXdDb25zdHJhaW50ICpuZXdjb247CiAKIAljb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRT VFJVQ1QoY29udHVwbGUpOwogCUFzc2VydChjb24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9OT1RO VUxMKTsKQEAgLTEzMzIxLDcgKzEzNDE5LDE5IEBAIFF1ZXVlTk5Db25zdHJhaW50VmFsaWRhdGlv bihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBjb25yZWwsIFJlbGF0aW9uIHJlbCwKIAkvKiBTZXQg YXR0bm90bnVsbCBhcHByb3ByaWF0ZWx5IHdpdGhvdXQgcXVldWVpbmcgYW5vdGhlciB2YWxpZGF0 aW9uICovCiAJc2V0X2F0dG5vdG51bGwoTlVMTCwgcmVsLCBhdHRudW0sIHRydWUsIGZhbHNlKTsK IAorCS8qCisJICogUXVldWUgdmFsaWRhdGlvbiBmb3IgcGhhc2UgMy4gQUxURVIgVEFCTEUgU0VU IE5PVCBOVUxMIGFkZHMgYSBOT1QgTlVMTAorCSAqIGNvbnN0cmFpbnQgdG8gQWx0ZXJlZFRhYmxl SW5mby0+Y29uc3RyYWludHMsIGZvciBjb25zaXN0ZW5jeSwgZG8gdGhlCisJICogc2FtZSBoZXJl LgorCSAqLworCW5ld2NvbiA9IHBhbGxvYzBfb2JqZWN0KE5ld0NvbnN0cmFpbnQpOworCW5ld2Nv bi0+bmFtZSA9IGNvbG5hbWU7CisJbmV3Y29uLT5jb250eXBlID0gQ09OU1RSX05PVE5VTEw7CisJ bmV3Y29uLT5hdHRudW0gPSBhdHRudW07CisKKwkvKiBGaW5kIG9yIGNyZWF0ZSB3b3JrIHF1ZXVl IGVudHJ5IGZvciB0aGlzIHRhYmxlICovCiAJdGFiID0gQVRHZXRRdWV1ZUVudHJ5KHdxdWV1ZSwg cmVsKTsKKwl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdj b24pOwogCXRhYi0+dmVyaWZ5X25ld19ub3RudWxsID0gdHJ1ZTsKIAogCS8qCkBAIC0yMzM0MCwz ICsyMzQ1MCwxNjYgQEAgQVRFeGVjU3BsaXRQYXJ0aXRpb24oTGlzdCAqKndxdWV1ZSwgQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJLyogUmVzdG9yZSB0aGUgdXNlcmlkIGFu ZCBzZWN1cml0eSBjb250ZXh0LiAqLwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2Vy aWQsIHNhdmVfc2VjX2NvbnRleHQpOwogfQorCisvKgorICogbm90bnVsbF9hdHRudW1zOiBsaXN0 IG9mIGF0dHJpYnV0ZSBudW1iZXJzIGZvciBhbGwgbmV3bHkgYWRkZWQgTk9UIE5VTEwKKyAqIGNv bnN0cmFpbnRzLgorICoKKyAqIEZvciBlYWNoIE5PVCBOVUxMIGF0dHJpYnV0ZSwgZmlyc3QgY2hl Y2sgd2hldGhlciB0aGUgcmVsYXRpb24gaGFzIGEgc3VpdGFibGUKKyAqIGluZGV4IHRvIGZldGNo IHRoYXQgYXR0cmlidXRlIGNvbnRlbnQuIElmIHNvLCB1c2luZyBpbmRleHNjYW4gdG8gdmVyaWZ5 IHRoYXQKKyAqIGF0dHJpYnV0ZSBjb250YWlucyBubyBOVUxMIHZhbHVlcy4KKyAqCisgKiBSZXR1 cm5pbmcgdHJ1ZSBpbmRpY2F0ZXMgdGhhdCBhbGwgbmV3IE5PVCBOVUxMIGNvbnN0cmFpbnRzIGhh dmUgYmVlbgorICogdmFsaWRhdGVkIGFuZCB0aGF0IG5vIGFkZGl0aW9uYWwgdGFibGUgc2NhbiBp cyByZXF1aXJlZC4KKyAqLworc3RhdGljIGJvb2wKK2luZGV4X2NoZWNrX25vdG51bGwoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKm5vdG51bGxfYXR0bnVtcykKK3sKKwlTeXNTY2FuRGVzYyBpbmRz Y2FuOworCVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJTGlzdAkgICAqaWR4 cyA9IE5JTDsKKwlMaXN0CSAgICphdHRudW1zID0gTklMOworCWJvb2wJCWFsbF9ub3RfbnVsbCA9 IHRydWU7CisJTGlzdENlbGwgICAqbGMsCisJCQkgICAqbGMyOworCisJUmVsYXRpb24JcGdfaW5k ZXggPSB0YWJsZV9vcGVuKEluZGV4UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8q IFByZXBhcmUgdG8gc2NhbiBwZ19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQgPSB0 aGlzIHJlbCAqLworCVNjYW5LZXlJbml0KCZza2V5LAorCQkJCUFudW1fcGdfaW5kZXhfaW5kcmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJaW5kc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihwZ19pbmRleCwgSW5kZXhJbmRyZWxpZEluZGV4SWQsIHRydWUsCisJ CQkJCQkJCSBOVUxMLCAxLCAmc2tleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChodHVw ID0gc3lzdGFibGVfZ2V0bmV4dChpbmRzY2FuKSkpCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBh dHRyOworCQlSZWxhdGlvbglpbmRleF9yZWw7CisKKwkJRm9ybV9wZ19pbmRleCBpbmRleCA9IChG b3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJLyoKKwkJICogV2Ugb25seSB1c2Ug bm9uLWRlZmVycmVkLCB2YWxpZCwgYW5kIGFsaXZlIGJ0cmVlIGluZGV4IHRvIHZlcnRpZnkKKwkJ ICogbm90LW51bGwgY29uc3RyYWludHMKKwkJICovCisJCWlmICghaW5kZXgtPmluZGltbWVkaWF0 ZSB8fCAhaW5kZXgtPmluZGlzdmFsaWQgfHwgIWluZGV4LT5pbmRpc2xpdmUpCisJCQljb250aW51 ZTsKKworCQkvKiBjYW5ub3QgdXNlIGV4cHJlc3Npb24gaW5kZXggb3IgcGFydGlhbCBpbmRleCB0 b28gKi8KKwkJaWYgKCFoZWFwX2F0dGlzbnVsbChodHVwLCBBbnVtX3BnX2luZGV4X2luZGV4cHJz LCBOVUxMKSB8fAorCQkJIWhlYXBfYXR0aXNudWxsKGh0dXAsIEFudW1fcGdfaW5kZXhfaW5kcHJl ZCwgTlVMTCkpCisJCQljb250aW51ZTsKKworCQlpbmRleF9yZWwgPSBpbmRleF9vcGVuKGluZGV4 LT5pbmRleHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCWlmIChpbmRleF9yZWwtPnJkX3Jl bC0+cmVsYW0gIT0gQlRSRUVfQU1fT0lEKQorCQl7CisJCQlpbmRleF9jbG9zZShpbmRleF9yZWws IEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXR0ciA9IFR1cGxl RGVzY0F0dHIoUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbiksIChpbmRleC0+aW5ka2V5LnZhbHVl c1swXSAtIDEpKTsKKworCQlpZiAobGlzdF9tZW1iZXJfaW50KG5vdG51bGxfYXR0bnVtcywgYXR0 ci0+YXR0bnVtKSAmJgorCQkJIWxpc3RfbWVtYmVyX2ludChhdHRudW1zLCBhdHRyLT5hdHRudW0p KQorCQl7CisJCQlhdHRudW1zID0gbGFwcGVuZF9pbnQoYXR0bnVtcywgYXR0ci0+YXR0bnVtKTsK KwkJCWlkeHMgPSBsYXBwZW5kX29pZChpZHhzLCBpbmRleC0+aW5kZXhyZWxpZCk7CisJCX0KKwor CQlpbmRleF9jbG9zZShpbmRleF9yZWwsIE5vTG9jayk7CisJfQorCXN5c3RhYmxlX2VuZHNjYW4o aW5kc2Nhbik7CisJdGFibGVfY2xvc2UocGdfaW5kZXgsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkv KgorCSAqIEVhY2ggTk9UIE5VTEwgY29uc3RyYWludCByZXF1aXJlcyBhIHN1aXRhYmxlIGluZGV4 IGZvciB2ZXJpZmljYXRpb24uIElmCisJICogbm8gc3VjaCBpbmRleCBleGlzdHMsIGZhbGwgYmFj ayB0byBhIHJlZ3VsYXIgdGFibGUgc2NhbiB0byB2ZXJpZnkgdGhlCisJICogY29uc3RyYWludHMu CisJICovCisJaWYgKGF0dG51bXMgPT0gTklMIHx8CisJCWxpc3RfbGVuZ3RoKG5vdG51bGxfYXR0 bnVtcykgIT0gbGlzdF9sZW5ndGgoYXR0bnVtcykpCisJCXJldHVybiBmYWxzZTsKKworCWZvcmVh Y2hfaW50KGF0dG5vLCBub3RudWxsX2F0dG51bXMpCisJeworCQlpZiAoIWxpc3RfbWVtYmVyX2lu dChhdHRudW1zLCBhdHRubykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yYm90aChsYywg YXR0bnVtcywgbGMyLCBpZHhzKQorCXsKKwkJU25hcHNob3REYXRhIERpcnR5U25hcHNob3Q7CisJ CUluZGV4U2NhbkRlc2MgaW5kZXhfc2NhbjsKKwkJU2NhbktleURhdGEgc2NhbmtleXNbSU5ERVhf TUFYX0tFWVNdOworCQlBdHRyTnVtYmVyCXNrX2F0dG5vID0gLTE7CisJCUF0dHJOdW1iZXIJYXR0 bm8gPSBsZmlyc3RfaW50KGxjKTsKKwkJT2lkCQkJaW5kZXhvaWQgPSBsZmlyc3Rfb2lkKGxjMik7 CisKKwkJUmVsYXRpb24JaWR4cmVsID0gaW5kZXhfb3BlbihpbmRleG9pZCwgTm9Mb2NrKTsKKwkJ SW5kZXhJbmZvICAqaW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaWR4cmVsKTsKKwkJaW50CQkJ aW5kbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKGlkeHJl bCk7CisKKwkJVHVwbGVUYWJsZVNsb3QgKmV4aXN0aW5nX3Nsb3QgPSB0YWJsZV9zbG90X2NyZWF0 ZShyZWxhdGlvbiwgTlVMTCk7CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSB0dXBsZXMgdGhhdCBh cmUgaW4gdGhlIGluZGV4IGZvciBhbnkgdmlvbGF0aW9ucywKKwkJICogaW5jbHVkaW5nIHR1cGxl cyB0aGF0IGFyZW4ndCB2aXNpYmxlIHlldC4KKwkJICovCisJCUluaXREaXJ0eVNuYXBzaG90KERp cnR5U25hcHNob3QpOworCisJCWlmIChpbmRleEluZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbMF0g PT0gYXR0bm8pCisJCQlza19hdHRubyA9IDE7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgbnVtYmVyICVkIG9uIGluZGV4ICV1IiwKKwkJ CQkgaW5kZXhvaWQsIGF0dG5vKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGluZG5rZXlhdHRz OyBpKyspCisJCXsKKwkJCS8qIHNldCB1cCBhbiBJUyBOVUxMIHNjYW4ga2V5IHNvIHRoYXQgd2Ug aWdub3JlIG5vdCBudWxscyAqLworCQkJU2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmc2NhbmtleXNb aV0sCisJCQkJCQkJCSAgIFNLX0lTTlVMTCB8IFNLX1NFQVJDSE5VTEwsCisJCQkJCQkJCSAgIHNr X2F0dG5vLAkvKiBpbmRleCBjb2wgdG8gc2NhbiAqLworCQkJCQkJCQkgICBJbnZhbGlkU3RyYXRl Z3ksIC8qIG5vIHN0cmF0ZWd5ICovCisJCQkJCQkJCSAgIEludmFsaWRPaWQsCS8qIG5vIHN0cmF0 ZWd5IHN1YnR5cGUgKi8KKwkJCQkJCQkJICAgSW52YWxpZE9pZCwJLyogbm8gY29sbGF0aW9uICov CisJCQkJCQkJCSAgIEludmFsaWRPaWQsCS8qIG5vIHJlZyBwcm9jIGZvciB0aGlzICovCisJCQkJ CQkJCSAgIChEYXR1bSkgMCk7CS8qIGNvbnN0YW50ICovCisJCX0KKworCQlpbmRleF9zY2FuID0g aW5kZXhfYmVnaW5zY2FuKHJlbGF0aW9uLAorCQkJCQkJCQkJIGlkeHJlbCwKKwkJCQkJCQkJCSAm RGlydHlTbmFwc2hvdCwKKwkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJIGluZG5rZXlhdHRzLAor CQkJCQkJCQkJIDApOworCQlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5r ZXlhdHRzLCBOVUxMLCAwKTsKKworCQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3Nj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwkJeworCQkJLyoKKwkJ CSAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgZm91bmQgdGhhdCBzb21lIGF0dHJpYnV0ZSB2YWx1 ZSBpcyBOVUxMLgorCQkJICogYnRyZWUgaW5kZXhlcyBhcmUgbmV2ZXIgbG9zc3ksIHdlIGRvbid0 IG5lZWQgcmVjaGVjayB0aGUKKwkJCSAqIGNvbmRpdGlvbi4KKwkJCSAqLworCQkJYWxsX25vdF9u dWxsID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCisJCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nh bik7CisJCWluZGV4X2Nsb3NlKGlkeHJlbCwgTm9Mb2NrKTsKKwkJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChleGlzdGluZ19zbG90KTsKKworCQkvKiBleGl0IGVhcmxpZXIgKi8KKwkJaWYg KCFhbGxfbm90X251bGwpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29uc3RyYWludHMub3V0CmluZGV4IGViYzg5MmEy YTQyLi4wNjllZWUzOWFkZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j b25zdHJhaW50cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50 cy5vdXQKQEAgLTE3MTcsMyArMTcxNyw2OCBAQCBDT01NRU5UIE9OIENPTlNUUkFJTlQgaW52X2Nr IE9OIERPTUFJTiBjb25zdHJhaW50X2NvbW1lbnRzX2RvbSBJUyAnY29tbWVudCBvbiBpbgogQ1JF QVRFIFRBQkxFIHJlZ3Jlc3Nfbm90bnVsbDEgKGEgaW50ZWdlcik7CiBDUkVBVEUgVEFCTEUgcmVn cmVzc19ub3RudWxsMiAoKSBJTkhFUklUUyAocmVncmVzc19ub3RudWxsMSk7CiBBTFRFUiBUQUJM RSBPTkxZIHJlZ3Jlc3Nfbm90bnVsbDIgQUxURVIgQ09MVU1OIGEgU0VUIE5PVCBOVUxMOworQ1JF QVRFIFRBQkxFIHRwX25vdG51bGwgKGEgaW50LCBiIGludCwgYyBpbnQsIGQgaW50LCBmMSBpbnQg ZGVmYXVsdCAxMCwgZjIgaW50IGRlZmF1bHQgMTEpIFBBUlRJVElPTiBCWSByYW5nZShhKTsKK0NS RUFURSBUQUJMRSB0cF9ub3RudWxsXzEgcGFydGl0aW9uIG9mIHRwX25vdG51bGwgZm9yIHZhbHVl cyBGUk9NICggMSApIHRvICgxMCk7CitDUkVBVEUgVEFCTEUgdHBfbm90bnVsbF8yIHBhcnRpdGlv biBvZiB0cF9ub3RudWxsIGZvciB2YWx1ZXMgRlJPTSAoIDEwICkgdG8gKDIxKTsKK0NSRUFURSBJ TkRFWCB0cF9ub3RudWxsX2lkeF9iIE9OIHRwX25vdG51bGwoYik7CitDUkVBVEUgSU5ERVggdHBf bm90bnVsbF9pZHhfYyBPTiB0cF9ub3RudWxsKGMpOworQ1JFQVRFIElOREVYIHRwX25vdG51bGxf aWR4X2QgT04gdHBfbm90bnVsbChkKTsKK0NSRUFURSBJTkRFWCB0cF9ub3RudWxsX2lkeF9kX2lu Y2x1ZGUgT04gdHBfbm90bnVsbChkKSBpbmNsdWRlKGYxKTsKK0NSRUFURSBJTkRFWCB0cF9ub3Ru dWxsX2lkeF9mMiBPTiB0cF9ub3RudWxsIFVTSU5HIGhhc2ggKGYyIGludDRfb3BzKTsKK0lOU0VS VCBJTlRPIHRwX25vdG51bGwgU0VMRUNUIGcsIGcgKyAxMCwgZyArIDE1LCBnICsgcmFuZG9tKG1p bj0+MTo6aW50LCBtYXg9PjEwOjppbnQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDgsMTkpIGc7CitT RVQgY2xpZW50X21pbl9tZXNzYWdlcyBUTyBERUJVRzE7CitTRVQgbG9nX3N0YXRlbWVudCB0byBO T05FOworLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVk IGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsIEFMVEVSIENPTFVN TiBiIFNFVCBOT1QgTlVMTDsKK0RFQlVHOiAgYWxsIG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBv biByZWxhdGlvbiAidHBfbm90bnVsbF8xIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGlu ZGV4IHNjYW4KK0RFQlVHOiAgYWxsIG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBvbiByZWxhdGlv biAidHBfbm90bnVsbF8yIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4K K0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUxURVIgQ09MVU1OIGIgRFJPUCBOT1QgTlVMTDsKKy0t ZGVidWcgbWVzc2FnZSBzaG91bGQgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2lu ZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbF8xIEFMVEVSIENPTFVNTiBiIFNF VCBOT1QgTlVMTDsKK0RFQlVHOiAgYWxsIG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBvbiByZWxh dGlvbiAidHBfbm90bnVsbF8xIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNj YW4KKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBi eSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbF8yIEFMVEVSIENPTFVN TiBiIFNFVCBOT1QgTlVMTDsKK0RFQlVHOiAgYWxsIG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBv biByZWxhdGlvbiAidHBfbm90bnVsbF8yIiBoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGlu ZGV4IHNjYW4KK0FMVEVSIFRBQkxFIHRwX25vdG51bGxfMiBBREQgQ09OU1RSQUlOVCBubl9kIE5P VCBOVUxMIGQgTk9UIFZBTElEOworLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiAi aGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBf bm90bnVsbF8yIFZBTElEQVRFIENPTlNUUkFJTlQgbm5fZDsKK0RFQlVHOiAgdmVyaWZ5aW5nIHRh YmxlICJ0cF9ub3RudWxsXzIiCistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluICJo YXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9u b3RudWxsIEFERCBDT05TVFJBSU5UIG5uZjEgTk9UIE5VTEwgZjE7CitERUJVRzogIHZlcmlmeWlu ZyB0YWJsZSAidHBfbm90bnVsbF8xIgorREVCVUc6ICB2ZXJpZnlpbmcgdGFibGUgInRwX25vdG51 bGxfMiIKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4gImhhdmUgYmVlbiB2YWxp ZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUREIENP TlNUUkFJTlQgbm5mMiBOT1QgTlVMTCBmMjsKK0RFQlVHOiAgdmVyaWZ5aW5nIHRhYmxlICJ0cF9u b3RudWxsXzEiCitERUJVRzogIHZlcmlmeWluZyB0YWJsZSAidHBfbm90bnVsbF8yIgorLS1kZWJ1 ZyBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2lu ZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbCBBTFRFUiBDT0xVTU4gYSBTRVQg Tk9UIE5VTEwsIEFERCBDT05TVFJBSU5UIGNfbm4gTk9UIE5VTEwgYzsKK0RFQlVHOiAgdmVyaWZ5 aW5nIHRhYmxlICJ0cF9ub3RudWxsXzEiCitERUJVRzogIHZlcmlmeWluZyB0YWJsZSAidHBfbm90 bnVsbF8yIgorLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRh dGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsIEFMVEVSIENP TFVNTiBkIFNFVCBOT1QgTlVMTCwgQUREIENPTlNUUkFJTlQgY19ubiBOT1QgTlVMTCBjLCBBTFRF UiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7CitERUJVRzogIGFsbCBuZXcgbm90LW51bGwgY29uc3Ry YWludHMgb24gcmVsYXRpb24gInRwX25vdG51bGxfMSIgaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1 c2luZyBpbmRleCBzY2FuCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsIEFMVEVSIENPTFVNTiBiIERS T1AgTk9UIE5VTEw7CistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBjb250YWluICJoYXZlIGJl ZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxs IEFMVEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTCwgQUxURVIgQ09MVU1OIGIgU0VUIERBVEEgVFlQ RSBCSUdJTlQ7CitERUJVRzogIHJld3JpdGluZyB0YWJsZSAidHBfbm90bnVsbF8xIgorREVCVUc6 ICBidWlsZGluZyBpbmRleCAidHBfbm90bnVsbF8xX2NfaWR4IiBvbiB0YWJsZSAidHBfbm90bnVs bF8xIiBzZXJpYWxseQorREVCVUc6ICBpbmRleCAidHBfbm90bnVsbF8xX2NfaWR4IiBjYW4gc2Fm ZWx5IHVzZSBkZWR1cGxpY2F0aW9uCitERUJVRzogIGJ1aWxkaW5nIGluZGV4ICJ0cF9ub3RudWxs XzFfZF9pZHgiIG9uIHRhYmxlICJ0cF9ub3RudWxsXzEiIHNlcmlhbGx5CitERUJVRzogIGluZGV4 ICJ0cF9ub3RudWxsXzFfZF9pZHgiIGNhbiBzYWZlbHkgdXNlIGRlZHVwbGljYXRpb24KK0RFQlVH OiAgYnVpbGRpbmcgaW5kZXggInRwX25vdG51bGxfMV9kX2YxX2lkeCIgb24gdGFibGUgInRwX25v dG51bGxfMSIgc2VyaWFsbHkKK0RFQlVHOiAgYnVpbGRpbmcgaW5kZXggInRwX25vdG51bGxfMV9m Ml9pZHgiIG9uIHRhYmxlICJ0cF9ub3RudWxsXzEiIHNlcmlhbGx5CitERUJVRzogIGJ1aWxkaW5n IGluZGV4ICJ0cF9ub3RudWxsXzFfYl9pZHgiIG9uIHRhYmxlICJ0cF9ub3RudWxsXzEiIHNlcmlh bGx5CitERUJVRzogIGluZGV4ICJ0cF9ub3RudWxsXzFfYl9pZHgiIGNhbiBzYWZlbHkgdXNlIGRl ZHVwbGljYXRpb24KK0RFQlVHOiAgcmV3cml0aW5nIHRhYmxlICJ0cF9ub3RudWxsXzIiCitERUJV RzogIGJ1aWxkaW5nIGluZGV4ICJ0cF9ub3RudWxsXzJfY19pZHgiIG9uIHRhYmxlICJ0cF9ub3Ru dWxsXzIiIHNlcmlhbGx5CitERUJVRzogIGluZGV4ICJ0cF9ub3RudWxsXzJfY19pZHgiIGNhbiBz YWZlbHkgdXNlIGRlZHVwbGljYXRpb24KK0RFQlVHOiAgYnVpbGRpbmcgaW5kZXggInRwX25vdG51 bGxfMl9kX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMiIgc2VyaWFsbHkKK0RFQlVHOiAgaW5k ZXggInRwX25vdG51bGxfMl9kX2lkeCIgY2FuIHNhZmVseSB1c2UgZGVkdXBsaWNhdGlvbgorREVC VUc6ICBidWlsZGluZyBpbmRleCAidHBfbm90bnVsbF8yX2RfZjFfaWR4IiBvbiB0YWJsZSAidHBf bm90bnVsbF8yIiBzZXJpYWxseQorREVCVUc6ICBidWlsZGluZyBpbmRleCAidHBfbm90bnVsbF8y X2YyX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMiIgc2VyaWFsbHkKK0RFQlVHOiAgYnVpbGRp bmcgaW5kZXggInRwX25vdG51bGxfMl9iX2lkeCIgb24gdGFibGUgInRwX25vdG51bGxfMiIgc2Vy aWFsbHkKK0RFQlVHOiAgaW5kZXggInRwX25vdG51bGxfMl9iX2lkeCIgY2FuIHNhZmVseSB1c2Ug ZGVkdXBsaWNhdGlvbgorUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK1JFU0VUIGxvZ19zdGF0 ZW1lbnQ7CitEUk9QIFRBQkxFIHRwX25vdG51bGw7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jb25zdHJhaW50cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50 cy5zcWwKaW5kZXggMWU5OTg5Njk4YjYuLjhjODI0NzAzMGExIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Y29uc3RyYWludHMuc3FsCkBAIC0xMDU5LDMgKzEwNTksNTAgQEAgQ09NTUVOVCBPTiBDT05TVFJB SU5UIGludl9jayBPTiBET01BSU4gY29uc3RyYWludF9jb21tZW50c19kb20gSVMgJ2NvbW1lbnQg b24gaW4KIENSRUFURSBUQUJMRSByZWdyZXNzX25vdG51bGwxIChhIGludGVnZXIpOwogQ1JFQVRF IFRBQkxFIHJlZ3Jlc3Nfbm90bnVsbDIgKCkgSU5IRVJJVFMgKHJlZ3Jlc3Nfbm90bnVsbDEpOwog QUxURVIgVEFCTEUgT05MWSByZWdyZXNzX25vdG51bGwyIEFMVEVSIENPTFVNTiBhIFNFVCBOT1Qg TlVMTDsKKworQ1JFQVRFIFRBQkxFIHRwX25vdG51bGwgKGEgaW50LCBiIGludCwgYyBpbnQsIGQg aW50LCBmMSBpbnQgZGVmYXVsdCAxMCwgZjIgaW50IGRlZmF1bHQgMTEpIFBBUlRJVElPTiBCWSBy YW5nZShhKTsKK0NSRUFURSBUQUJMRSB0cF9ub3RudWxsXzEgcGFydGl0aW9uIG9mIHRwX25vdG51 bGwgZm9yIHZhbHVlcyBGUk9NICggMSApIHRvICgxMCk7CitDUkVBVEUgVEFCTEUgdHBfbm90bnVs bF8yIHBhcnRpdGlvbiBvZiB0cF9ub3RudWxsIGZvciB2YWx1ZXMgRlJPTSAoIDEwICkgdG8gKDIx KTsKK0NSRUFURSBJTkRFWCB0cF9ub3RudWxsX2lkeF9iIE9OIHRwX25vdG51bGwoYik7CitDUkVB VEUgSU5ERVggdHBfbm90bnVsbF9pZHhfYyBPTiB0cF9ub3RudWxsKGMpOworQ1JFQVRFIElOREVY IHRwX25vdG51bGxfaWR4X2QgT04gdHBfbm90bnVsbChkKTsKK0NSRUFURSBJTkRFWCB0cF9ub3Ru dWxsX2lkeF9kX2luY2x1ZGUgT04gdHBfbm90bnVsbChkKSBpbmNsdWRlKGYxKTsKK0NSRUFURSBJ TkRFWCB0cF9ub3RudWxsX2lkeF9mMiBPTiB0cF9ub3RudWxsIFVTSU5HIGhhc2ggKGYyIGludDRf b3BzKTsKK0lOU0VSVCBJTlRPIHRwX25vdG51bGwgU0VMRUNUIGcsIGcgKyAxMCwgZyArIDE1LCBn ICsgcmFuZG9tKG1pbj0+MTo6aW50LCBtYXg9PjEwOjppbnQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDgsMTkpIGc7CisKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzIFRPIERFQlVHMTsKK1NFVCBsb2df c3RhdGVtZW50IHRvIE5PTkU7CisKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgY29udGFpbiAiaGF2 ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90 bnVsbCBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7CitBTFRFUiBUQUJMRSB0cF9ub3RudWxs IEFMVEVSIENPTFVNTiBiIERST1AgTk9UIE5VTEw7CisKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQg Y29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIg VEFCTEUgdHBfbm90bnVsbF8xIEFMVEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTDsKKworLS1kZWJ1 ZyBtZXNzYWdlIHNob3VsZCBjb250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGlu ZGV4IHNjYW4iCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsXzIgQUxURVIgQ09MVU1OIGIgU0VUIE5P VCBOVUxMOworCitBTFRFUiBUQUJMRSB0cF9ub3RudWxsXzIgQUREIENPTlNUUkFJTlQgbm5fZCBO T1QgTlVMTCBkIE5PVCBWQUxJRDsKKy0tZGVidWcgbWVzc2FnZSBzaG91bGQgbm90IGNvbnRhaW4g ImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRw X25vdG51bGxfMiBWQUxJREFURSBDT05TVFJBSU5UIG5uX2Q7CisKKy0tZGVidWcgbWVzc2FnZSBz aG91bGQgbm90IGNvbnRhaW4gImhhdmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2Nh biIKK0FMVEVSIFRBQkxFIHRwX25vdG51bGwgQUREIENPTlNUUkFJTlQgbm5mMSBOT1QgTlVMTCBm MTsKKworLS1kZWJ1ZyBtZXNzYWdlIHNob3VsZCBub3QgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlk YXRlZCBieSB1c2luZyBpbmRleCBzY2FuIgorQUxURVIgVEFCTEUgdHBfbm90bnVsbCBBREQgQ09O U1RSQUlOVCBubmYyIE5PVCBOVUxMIGYyOworCistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIG5vdCBj b250YWluICJoYXZlIGJlZW4gdmFsaWRhdGVkIGJ5IHVzaW5nIGluZGV4IHNjYW4iCitBTFRFUiBU QUJMRSB0cF9ub3RudWxsIEFMVEVSIENPTFVNTiBhIFNFVCBOT1QgTlVMTCwgQUREIENPTlNUUkFJ TlQgY19ubiBOT1QgTlVMTCBjOworCistLWRlYnVnIG1lc3NhZ2Ugc2hvdWxkIGNvbnRhaW4gImhh dmUgYmVlbiB2YWxpZGF0ZWQgYnkgdXNpbmcgaW5kZXggc2NhbiIKK0FMVEVSIFRBQkxFIHRwX25v dG51bGwgQUxURVIgQ09MVU1OIGQgU0VUIE5PVCBOVUxMLCBBREQgQ09OU1RSQUlOVCBjX25uIE5P VCBOVUxMIGMsIEFMVEVSIENPTFVNTiBiIFNFVCBOT1QgTlVMTDsKKworQUxURVIgVEFCTEUgdHBf bm90bnVsbCBBTFRFUiBDT0xVTU4gYiBEUk9QIE5PVCBOVUxMOworLS1kZWJ1ZyBtZXNzYWdlIHNo b3VsZCBub3QgY29udGFpbiAiaGF2ZSBiZWVuIHZhbGlkYXRlZCBieSB1c2luZyBpbmRleCBzY2Fu IgorQUxURVIgVEFCTEUgdHBfbm90bnVsbCBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEwsIEFM VEVSIENPTFVNTiBiIFNFVCBEQVRBIFRZUEUgQklHSU5UOworCitSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOworUkVTRVQgbG9nX3N0YXRlbWVudDsKK0RST1AgVEFCTEUgdHBfbm90bnVsbDsKLS0g CjIuMzQuMQoK --000000000000374fbb0649ff0b8a--