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 1viXuP-009OhY-0l for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 13:06:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1viXuO-007EP6-19 for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Jan 2026 13:06:04 +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 1viXuN-007EOx-31 for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 13:06:04 +0000 Received: from mail-qt1-x829.google.com ([2607:f8b0:4864:20::829]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1viXuK-001iee-1s for pgsql-hackers@lists.postgresql.org; Wed, 21 Jan 2026 13:06:02 +0000 Received: by mail-qt1-x829.google.com with SMTP id d75a77b69052e-5014acad6f2so393101cf.1 for ; Wed, 21 Jan 2026 05:06:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769000759; cv=none; d=google.com; s=arc-20240605; b=MpebEWSy/aDjZ6F6i2OOU6ss2cxL9zdzp3GbESDWGMUsjCNWFRd2zsEwSohc1PRw2I dyXtXQBvguYYu/58ynjZcrFnkpE097wExusC2QF1ybfsXQ7lGJW2a+E3ckuVfFwxJ29U amD3I1ZVWs8SFgrL9YFYRiepXnV6Y09fM8uv4Bnw0+CywQKAE8MD/D7MRyroiSkuXU2t 8WKAshv5HtG5X1JECgdxMADZO9amZu3pHA7scLOvNzL47BDoM9cmsng6QvtwyAKkE8Um NdYImbfgy0HWMtZBNfldtQEDinoVOmOB2BhAWpFNP+0llQbsr4HT3Nvm7g/tQRGS2MOF eEUA== 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=aNhB/J6zYouM9G3OOweURqGb3rUtJ3kLTGpGwe2VXyk=; fh=3OlnZZ87xIbJIZksWi/c7HmBKE2IcYER++Dmc2tZe9A=; b=OK4vIWk1yvY5LxDR+G2neqwOHNsMz1p731oMIKy+J5mJrffBUGdfZDJvJhrqCzwRAE Q5t2QL+X7DgS46NwJ5uh2nw2Bozxu41YBCfuvylYjr/16p2bYIm2aboJxA9xV/tgYRBs QkxMVWLYVaihshgASDDEgihjVolWKMg5J2OKHL8ymPIinARByiPg/hmDBrVPwAgj5hOX HxVMtss7ns0y2kw0zXVPLeoyqjEYzc+n0R5Tqt/ESCduBG4sO4dbYyy1jyrXccstPoHr Tbrg36VfsqU45EuXVTEC+qRMZUuiMuGJX+uUR2g2F+UVaPjDAjVgsAYYCyIOgrgypMiE 2G/A==; 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=google.com; s=20230601; t=1769000759; x=1769605559; 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=aNhB/J6zYouM9G3OOweURqGb3rUtJ3kLTGpGwe2VXyk=; b=d7nwMjweFkZkteTLoR7CejNO3MH3pUXmVUPxbkkGaMCbgulMhQ/xEasgXgzD/dzueJ SMKuStYadjxMC3HIyDVJrbyQyk6TdZb+02UPYsw5mut06eAFik2+6jFs0JyQEQ1p7b2t e6l11xBriRuihMeXPiPUiSYyqgDMs/Xa+d/HZ7JWoujdGoajJhlEKa8J2POi5RPa04TI bzxpub7to1X24n27smncv/Z+7x/X04RFA87X429CLbaUczRKBUazltoEWsqjS8IgYczL D5mUUmJ8LQ/cpXN0rKxz7Owc9aiYBQIFWeX28ItPxC0MukZrMWBMc2993iZdtGyVO+F4 LUUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769000759; x=1769605559; 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=aNhB/J6zYouM9G3OOweURqGb3rUtJ3kLTGpGwe2VXyk=; b=mJQ9lgsHK+oKRi9HtnqOdTNoSG2htrRgNLe5LWEqL0nFtk5AKGZW2239kFlT8UjoQk M7QdEdkGz3G+Tffx4aVmJgx+xy/tE4hsBW6gFKWxvq9E7GUf7bLU5WLoI9OZmCbI1jE+ cPTRyYWaIvBKaN2m3WL275iIDw0rk2npMqq9MGA1ABrMLx7jHg/FGwo5RqI+C7P2S1jL l3lDhU4i82/6BpQs8ShLFe4tO5RcG+4K64M2jjPb/93Muy4By+0wVeHhtBmhPNhOWWRQ xfp3LQRikrSiWQWZVz3Abnwn0ul0OfVq0oaiwYmRFJgM3a72vfQuhAajtuRbNHe1kIAf 9idg== X-Forwarded-Encrypted: i=1; AJvYcCVOgsa6ED95jXzuCKvjfUskbMoSJyu13t+C6HoG0ScUhtHT1q0SK1ZpqQcwM4dgI8xd5GTjEc2Sd48Uqme1@lists.postgresql.org X-Gm-Message-State: AOJu0Yyd6AGEGBtgDFXjaVYtz6HZf2UImZJCMYGczTNeREH/mY3ICWKj ZgZbywHuP4eD0S1WWBcNBfJW5ka94t3YCdoemKYRJlOMKBzpgI/eN0KjPkJ3S6gBpWqXRAmHmUE q2Mea0MCSUtMchZLK+ggpZZVnz6tdzX8z8LorF3zT X-Gm-Gg: AZuq6aLEP2746wzNETI8JKETOegt2fwy3/pljYKj5qTLEq6FD7qm7nWAls94apT5NMI G9K7cXrn6gIrt305fAg2ba27kWNS1hkCaBGNTTd58gcQGkcZx+4leHClYGzWbloW17MA4rRRf6a lXdnTWTm0MQc8IFQXmXm8GR7bYN301ziZyb9H9ivvB8pfY2Y2cbaDddf78c0+MLzTvxAn3y9xFh 0W/XTuF0yaT6nKtVhkxudvP4jNhunBzDb06W7ah/q06vv4rREIQlw0U0nUgyP1gNXEBRjOy X-Received: by 2002:a05:622a:1998:b0:4e5:8707:d31 with SMTP id d75a77b69052e-502e1a7f7b3mr9119081cf.7.1769000758398; Wed, 21 Jan 2026 05:05:58 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Hannu Krosing Date: Wed, 21 Jan 2026 14:05:46 +0100 X-Gm-Features: AZwV_QhIa0nCeJA-q1j9Lu2kBnPeccRc84MYpD7p4DzAulvnt8S8pj6aqmJgqcc Message-ID: Subject: Re: Patch: dumping tables data in multiple chunks in pg_dump To: David Rowley , Zsolt Parragi Cc: Ashutosh Bapat , PostgreSQL Hackers , Nathan Bossart Content-Type: multipart/mixed; boundary="000000000000d1133e0648e59511" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d1133e0648e59511 Content-Type: text/plain; charset="UTF-8" Please find the latest patch attached which incorporates the feedback received. * changed flag name to --max-table-segment-pages * added check for amname = "heap" * switched to using of pg_relation_size(c.oid)/current_setting('block_size')::int when --max-table-segment-pages is set * added option_parse_uint32(...) to be used for full range of pages numbers * The COPY SELECTs now use <= , BETWEEN or >= depending on the segment position * added documentation * TESTS: * added simple chunked dump and restore test * added a WARNING with count and table data hash to source and chunked restore database I left in the boolean to indicate if this is a full table or chunk (was named chunking, nor is_segment) An a lternative would be to use an expression like (td->startPage != 0 || td->endPage != InvalidBlockNumber) whenever td->is_segment is needed If you insist on not having a separate structure member we could turn this into something like this #define is_segment(td) ((td->startPage != 0 || td->endPage != InvalidBlockNumber)) and then use is_segment(td) instead of td->is_segment where needed. --000000000000d1133e0648e59511 Content-Type: application/x-patch; name="v9-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Disposition: attachment; filename="v9-0001-changed-flag-name-to-max-table-segment-pages.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mko0xx9x0 RnJvbSAxMWJkOGM5NTM5NjgyOTllNjJkMzJlYzRjYTY0ODA3N2VhOGZkOGM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW5udSBLcm9zaW5nIDxoYW5udWtAZ29vZ2xlLmNvbT4KRGF0 ZTogV2VkLCAyMSBKYW4gMjAyNiAxMzo0NTo0NiArMDEwMApTdWJqZWN0OiBbUEFUQ0ggdjldICog Y2hhbmdlZCBmbGFnIG1uYW1lIHRvIG1heC10YWJsZS1zZWdtZW50LXBhZ2VzICogYWRkZWQKIGNo ZWNrIGZvciBhbW5hbWUgPSAiaGVhcCIgKiBhZGRlZCBzaW1wbGUgY2h1bmtlZCBkdW1wIGFuZCBy ZXN0b3JlIHRlc3QgKgogc3dpdGNoZWQgdG8gdXNpbmcgb2YKIHBnX3JlbGF0aW9uX3NpemUoYy5v aWQpL2N1cnJlbnRfc2V0dGluZygnYmxvY2tfc2l6ZScpOjppbnQgd2hlbgogLS1tYXgtdGFibGUt c2VnbWVudC1wYWdlcyBpcyBzZXQgKiBhZGRlZCBkb2N1bWVudGF0aW9uICogYWRkZWQKIG9wdGlv bl9wYXJzZV91aW50MzIoLi4uKSB0byBiZSB1c2VkIGZvciBmdWxsIHJhbmdlIG9mIHBhZ2VzIG51 bWJlcnMKCiogVEVTVFM6IGFkZGVkIGEgV0FSTklORyB3aXRoIGNvdW50IGFuZCB0YWJsZSBkYXRh IGhhc2ggdG8gc291cmNlIGFuZCBjaHVua2VkIHJlc3RvcmUgZGF0YWJhc2UKLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL3BnX2R1bXAuc2dtbCAgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMgICAgICAgICAgICAgICAgIHwgMTcwICsrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgIHwgICA3ICsKIHNyYy9iaW4vcGdfZHVt cC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsIHwgIDUyICsrKysrKysKIHNyYy9mZV91dGlscy9v cHRpb25fdXRpbHMuYyAgICAgICAgICAgICAgIHwgIDU0ICsrKysrKysKIHNyYy9pbmNsdWRlL2Zl X3V0aWxzL29wdGlvbl91dGlscy5oICAgICAgIHwgICAzICsKIDggZmlsZXMgY2hhbmdlZCwgMjc5 IGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9yZWYvcGdfZHVtcC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKaW5kZXgg Njg4ZTIzYzBlOTAuLjE4MTFjNjdkMTQxIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dtbApAQCAtMTA4OCw2 ICsxMDg4LDMwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1tYXgtdGFibGUtc2VnbWVudC1wYWdlcz08cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnBhZ2VzPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlz dGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIER1bXAgZGF0YSBpbiBzZWdtZW50cyBiYXNl ZCBvbiBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIG1haW4gcmVsYXRpb24uCisgICAgICAgIElmIHRo ZSBudW1iZXIgb2YgZGF0YSBwYWdlcyBpbiB0aGUgcmVsYXRpb24gaXMgbW9yZSB0aGFuIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5ucGFnZXM8L3JlcGxhY2VhYmxlPiAKKyAgICAgICAg dGhlIGRhdGEgaXMgc3BsaXQgaW50byBzZWdtZW50cyBiYXNlZCBvbiB0aGF0IG51bWJlciBvZiBw YWdlcy4KKyAgICAgICAgSW5kaXZpZHVhbCBzZWdtZW50cyBjYW4gYmUgZHVtcGVkIGluIHBhcmFs bGVsLgorICAgICAgIDwvcGFyYT4KKworICAgICAgIDxub3RlPgorICAgICAgICA8cGFyYT4KKyAg ICAgICAgIFRoZSBvcHRpb24gPG9wdGlvbj4tLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzPC9vcHRp b24+IGlzIGFwcGxpZWQgdG8gb25seSBwYWdlcworICAgICAgICAgaW4gdGhlIG1haW4gaGVhcCBh bmQgaWYgdGhlIHRhYmxlIGhhcyBhIGxhcmdlIFRPQVNUZWQgcGFydCB0aGlzIGhhcyB0byBiZQor ICAgICAgICAgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcgb24gdGhlIG51bWJlciBv ZiBwYWdlcyB0byB1c2UuCisgICAgICAgICBJbiB0aGUgZXh0cmVtZSBjYXNlIGEgc2luZ2xlIDhr QiBoZWFwIHBhZ2UgY2FuIGhhdmUgfjIwMCB0b2FzdCBwb2ludGVycyBlYWNoIAorICAgICAgICAg Y29ycmVzcG9uZGluZyB0byAxR0Igb2YgZGF0YS4gSWYgdGhpcyBkYXRhIGlzIGFsc28gbm9uLWNv bXByZXNzaWJsZSB0aGVuIGEgCisgICAgICAgICBzaW5nbGUtcGFnZSBzZWdtZW50IGNhbiBkdW1w IGFzIDIwMEdCIGZpbGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L25vdGU+CisKKyAgICAg IDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+ CiAgICAgICA8dGVybT48b3B0aW9uPi0tbm8tY29tbWVudHM8L29wdGlvbj48L3Rlcm0+CiAgICAg ICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmI2M2FlMDVkODk1 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbW9uL2Zp bGVfdXRpbHMuaCIKICNpbmNsdWRlICJmZV91dGlscy9zaW1wbGVfbGlzdC5oIgogI2luY2x1ZGUg ImxpYnBxLWZlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgogCiAKIHR5cGVkZWYgZW51 bSB0cml2YWx1ZQpAQCAtMTc4LDYgKzE3OSw3IEBAIHR5cGVkZWYgc3RydWN0IF9kdW1wT3B0aW9u cwogCWJvb2wJCWFjbHNTa2lwOwogCWNvbnN0IGNoYXIgKmxvY2tXYWl0VGltZW91dDsKIAlpbnQJ CQlkdW1wX2luc2VydHM7CS8qIDAgPSBDT1BZLCBvdGhlcndpc2Ugcm93cyBwZXIgSU5TRVJUICov CisJQmxvY2tOdW1iZXIJbWF4X3RhYmxlX3NlZ21lbnRfcGFnZXM7IC8qIGNodW5rIHdoZW4gcmVs cGFnZXMgaXMgYWJvdmUgdGhpcyAqLwogCiAJLyogZmxhZ3MgZm9yIHZhcmlvdXMgY29tbWFuZC1s aW5lIGxvbmcgb3B0aW9ucyAqLwogCWludAkJCWRpc2FibGVfZG9sbGFyX3F1b3Rpbmc7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNGE2M2Y3MzkyYWUuLmVkMTkxM2Q2NmJj IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC00NCw2ICs0NCw3IEBACiAj aW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX2RiLmgi CiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCisjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5o IgogCiAjZGVmaW5lIFRFWFRfRFVNUF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGR1bXBcbi0tXG5cbiIKICNkZWZpbmUgVEVYVF9EVU1QQUxMX0hFQURFUiAiLS1cbi0tIFBvc3Rn cmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iCkBAIC0xNTQsNiArMTU1LDcgQEAg SW5pdER1bXBPcHRpb25zKER1bXBPcHRpb25zICpvcHRzKQogCW9wdHMtPmR1bXBTY2hlbWEgPSB0 cnVlOwogCW9wdHMtPmR1bXBEYXRhID0gdHJ1ZTsKIAlvcHRzLT5kdW1wU3RhdGlzdGljcyA9IGZh bHNlOworCW9wdHMtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzID0gSW52YWxpZEJsb2NrTnVtYmVy OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNjg3ZGM5OGU0NmQuLmNhN2U5YzVlZWJhIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMKQEAgLTUzOSw2ICs1MzksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAkJeyJleGNsdWRlLWV4dGVuc2lvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxN30sCiAJ CXsic2VxdWVuY2UtZGF0YSIsIG5vX2FyZ3VtZW50LCAmZG9wdC5zZXF1ZW5jZV9kYXRhLCAxfSwK IAkJeyJyZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMjV9LAorCQl7Im1h eC10YWJsZS1zZWdtZW50LXBhZ2VzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDI2fSwKIAog CQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtODAzLDYgKzgwNCwxMyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJCQlkb3B0LnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRh cmcpOwogCQkJCWJyZWFrOwogCisJCQljYXNlIDI2OgorCQkJCWlmICghb3B0aW9uX3BhcnNlX3Vp bnQzMihvcHRhcmcsICItLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIiwgMSwgTWF4QmxvY2tOdW1i ZXIsCisJCQkJCQkJCQkgICZkb3B0Lm1heF90YWJsZV9zZWdtZW50X3BhZ2VzKSkKKwkJCQkJZXhp dF9uaWNlbHkoMSk7CisJCQkJcGdfbG9nX3dhcm5pbmcoIkNIVU5LSU5HOiBzZXQgZG9wdC5tYXhf dGFibGVfc2VnbWVudF9wYWdlcyB0byBbJXVdIiwoQmxvY2tOdW1iZXIpIGRvcHQubWF4X3RhYmxl X3NlZ21lbnRfcGFnZXMpOworCQkJCWJyZWFrOworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9w dF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9o aW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7 CkBAIC0xMzcyLDYgKzEzODAsOSBAQCBoZWxwKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50 ZihfKCIgIC0tZXh0cmEtZmxvYXQtZGlnaXRzPU5VTSAgICAgb3ZlcnJpZGUgZGVmYXVsdCBzZXR0 aW5nIGZvciBleHRyYV9mbG9hdF9kaWdpdHNcbiIpKTsKIAlwcmludGYoXygiICAtLWZpbHRlcj1G SUxFTkFNRSAgICAgICAgICAgIGluY2x1ZGUgb3IgZXhjbHVkZSBvYmplY3RzIGFuZCBkYXRhIGZy b20gZHVtcFxuIgogCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24g ZXhwcmVzc2lvbnMgaW4gRklMRU5BTUVcbiIpKTsKKwlwcmludGYoXygiICAtLW1heC10YWJsZS1z ZWdtZW50LXBhZ2VzPU5VTVBBR0VTXG4iCisJCSAgICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOdW1iZXIgb2YgbWFpbiB0YWJsZSBwYWdlcyBhYm92ZSB3aGljaCBkYXRhIGlzIFxu IgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkIG91dCBpbiBjaHVu a3MsIGFsc28gZGV0ZXJtaW5lcyB0aGUgY2h1bmsgc2l6ZVxuIikpOwogCXByaW50ZihfKCIgIC0t aWYtZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3aGVuIGRyb3BwaW5nIG9i amVjdHNcbiIpKTsKIAlwcmludGYoXygiICAtLWluY2x1ZGUtZm9yZWlnbi1kYXRhPVBBVFRFUk5c biIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgZGF0YSBvZiBm b3JlaWduIHRhYmxlcyBvbiBmb3JlaWduXG4iCkBAIC0yNDEyLDcgKzI0MjMsNyBAQCBkdW1wVGFi bGVEYXRhX2NvcHkoQXJjaGl2ZSAqZm91dCwgY29uc3Qgdm9pZCAqZGNvbnRleHQpCiAJICogYSBm aWx0ZXIgY29uZGl0aW9uIHdhcyBzcGVjaWZpZWQuICBGb3Igb3RoZXIgY2FzZXMgYSBzaW1wbGUg Q09QWQogCSAqIHN1ZmZpY2VzLgogCSAqLwotCWlmICh0ZGluZm8tPmZpbHRlcmNvbmQgfHwgdGJp bmZvLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwlpZiAodGRpbmZvLT5maWx0 ZXJjb25kIHx8IHRkaW5mby0+aXNfc2VnbWVudCB8fCB0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lO RF9GT1JFSUdOX1RBQkxFKQogCXsKIAkJLyogVGVtcG9yYXJ5IGFsbG93cyB0byBhY2Nlc3MgdG8g Zm9yZWlnbiB0YWJsZXMgdG8gZHVtcCBkYXRhICovCiAJCWlmICh0YmluZm8tPnJlbGtpbmQgPT0g UkVMS0lORF9GT1JFSUdOX1RBQkxFKQpAQCAtMjQyOCw5ICsyNDM5LDI1IEBAIGR1bXBUYWJsZURh dGFfY29weShBcmNoaXZlICpmb3V0LCBjb25zdCB2b2lkICpkY29udGV4dCkKIAkJZWxzZQogCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgIiogIik7CiAKLQkJYXBwZW5kUFFFeHBCdWZmZXIocSwg IkZST00gJXMgJXMpIFRPIHN0ZG91dDsiLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiRlJPTSAl cyAlcyIsCiAJCQkJCQkgIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbyksCiAJCQkJCQkgIHRk aW5mby0+ZmlsdGVyY29uZCA/IHRkaW5mby0+ZmlsdGVyY29uZCA6ICIiKTsKKwkJaWYgKHRkaW5m by0+aXNfc2VnbWVudCkKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgdGRpbmZvLT5m aWx0ZXJjb25kPyIgQU5EICI6IiBXSEVSRSAiKTsKKwkJCWlmKHRkaW5mby0+c3RhcnRQYWdlID09 IDApCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgImN0aWQgPD0gJygldSwzMjAwMCknIiwgLyog dGhlcmUgaXMgbm8gKCosMCkgdHVwbGUgKi8KKwkJCQkJCQkJIHRkaW5mby0+ZW5kUGFnZSk7CQkJ CisJCQllbHNlIGlmKHRkaW5mby0+ZW5kUGFnZSAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIocSwgImN0aWQgQkVUV0VFTiAnKCV1LDEpJyBBTkQgJygldSwzMjAw MCknIiwgLyogdGhlcmUgaXMgbm8gKCosMCkgdHVwbGUgKi8KKwkJCQkJCQkJIHRkaW5mby0+c3Rh cnRQYWdlLCB0ZGluZm8tPmVuZFBhZ2UpOworCQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVy KHEsICJjdGlkID49ICcoJXUsMSknIiwgLyogdGhlcmUgaXMgbm8gKCosMCkgdHVwbGUgKi8KKwkJ CQkJCQkJIHRkaW5mby0+c3RhcnRQYWdlKTsKKwkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lORzog cGFnZXMgWyV1OiV1XSIsdGRpbmZvLT5zdGFydFBhZ2UsIHRkaW5mby0+ZW5kUGFnZSk7CisJCX0K KworCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiKSBUTyBzdGRvdXQ7Iik7CiAJfQogCWVsc2UKIAl7 CkBAIC0yNDM4LDYgKzI0NjUsOSBAQCBkdW1wVGFibGVEYXRhX2NvcHkoQXJjaGl2ZSAqZm91dCwg Y29uc3Qgdm9pZCAqZGNvbnRleHQpCiAJCQkJCQkgIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5m byksCiAJCQkJCQkgIGNvbHVtbl9saXN0KTsKIAl9CisKKwlwZ19sb2dfd2FybmluZygiQ0hVTktJ Tkc6IGRhdGEgcXVlcnk6ICVzIiwgcS0+ZGF0YSk7CisJCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5 KGZvdXQsIHEtPmRhdGEsIFBHUkVTX0NPUFlfT1VUKTsKIAlQUWNsZWFyKHJlcyk7CiAJZGVzdHJv eVBRRXhwQnVmZmVyKGNsaXN0QnVmKTsKQEAgLTI5MzMsNDEgKzI5NjMsMTAxIEBAIGR1bXBUYWJs ZURhdGEoQXJjaGl2ZSAqZm91dCwgY29uc3QgVGFibGVEYXRhSW5mbyAqdGRpbmZvKQogCXsKIAkJ VG9jRW50cnkgICAqdGU7CiAKLQkJdGUgPSBBcmNoaXZlRW50cnkoZm91dCwgdGRpbmZvLT5kb2Jq LmNhdElkLCB0ZGluZm8tPmRvYmouZHVtcElkLAotCQkJCQkJICBBUkNISVZFX09QVFMoLnRhZyA9 IHRiaW5mby0+ZG9iai5uYW1lLAotCQkJCQkJCQkJICAgLm5hbWVzcGFjZSA9IHRiaW5mby0+ZG9i ai5uYW1lc3BhY2UtPmRvYmoubmFtZSwKLQkJCQkJCQkJCSAgIC5vd25lciA9IHRiaW5mby0+cm9s bmFtZSwKLQkJCQkJCQkJCSAgIC5kZXNjcmlwdGlvbiA9ICJUQUJMRSBEQVRBIiwKLQkJCQkJCQkJ CSAgIC5zZWN0aW9uID0gU0VDVElPTl9EQVRBLAotCQkJCQkJCQkJICAgLmNyZWF0ZVN0bXQgPSB0 ZERlZm4sCi0JCQkJCQkJCQkgICAuY29weVN0bXQgPSBjb3B5U3RtdCwKLQkJCQkJCQkJCSAgIC5k ZXBzID0gJih0YmluZm8tPmRvYmouZHVtcElkKSwKLQkJCQkJCQkJCSAgIC5uRGVwcyA9IDEsCi0J CQkJCQkJCQkgICAuZHVtcEZuID0gZHVtcEZuLAotCQkJCQkJCQkJICAgLmR1bXBBcmcgPSB0ZGlu Zm8pKTsKLQotCQkvKgotCQkgKiBTZXQgdGhlIFRvY0VudHJ5J3MgZGF0YUxlbmd0aCBpbiBjYXNl IHdlIGFyZSBkb2luZyBhIHBhcmFsbGVsIGR1bXAKLQkJICogYW5kIHdhbnQgdG8gb3JkZXIgZHVt cCBqb2JzIGJ5IHRhYmxlIHNpemUuICBXZSBjaG9vc2UgdG8gbWVhc3VyZQotCQkgKiBkYXRhTGVu Z3RoIGluIHRhYmxlIHBhZ2VzIChpbmNsdWRpbmcgVE9BU1QgcGFnZXMpIGR1cmluZyBkdW1wLCBz bwotCQkgKiBubyBzY2FsaW5nIGlzIG5lZWRlZC4KLQkJICoKLQkJICogSG93ZXZlciwgcmVscGFn ZXMgaXMgZGVjbGFyZWQgYXMgImludGVnZXIiIGluIHBnX2NsYXNzLCBhbmQgaGVuY2UKLQkJICog YWxzbyBpbiBUYWJsZUluZm8sIGJ1dCBpdCdzIHJlYWxseSBCbG9ja051bWJlciBhL2svYSB1bnNp Z25lZCBpbnQuCi0JCSAqIENhc3Qgc28gdGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IGludGVycHJldGF0 aW9uIG9mIHRhYmxlIHNpemVzCi0JCSAqIGV4Y2VlZGluZyBJTlRfTUFYIHBhZ2VzLgorCQkvKiBk YXRhIGNodW5raW5nIHdvcmtzIG9mZiByZWxwYWdlcywgd2hpY2ggYXJlIGNvbXB1dGVkIGV4YWN0 bHkgdXNpbmcKKwkJICogcGdfcmVsYXRpb25fc2l6ZSgpIHdoZW4gLS1tYXgtdGFibGUtc2VnbWVu dC1wYWdlcyB3YXMgc2V0CisJCSAqIAorCQkgKiBXZSBhbHNvIGRvbid0IGNodW5rIGlmIHRhYmxl IGFjY2VzcyBtZXRob2QgaXMgbm90ICJoZWFwIgorCQkgKiBUT0RPOiB3ZSBtYXkgYWRkIGNodW5r aW5nIGZvciBvdGhlciBhY2Nlc3MgbWV0aG9kcyBsYXRlciwgbWF5YmUgCisJCSAqIGJhc2VkIG9u IHByaW1hcnkga2V5IHRyYW5nZXMKIAkJICovCi0JCXRlLT5kYXRhTGVuZ3RoID0gKEJsb2NrTnVt YmVyKSB0YmluZm8tPnJlbHBhZ2VzOwotCQl0ZS0+ZGF0YUxlbmd0aCArPSAoQmxvY2tOdW1iZXIp IHRiaW5mby0+dG9hc3RwYWdlczsKKwkJaWYgKChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdl cyA8PSBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlcyB8fCAKKwkJCXN0cmNtcCh0YmluZm8t PmFtbmFtZSwgImhlYXAiKSAhPSAwKQorCQl7CisJCQl0ZSA9IEFyY2hpdmVFbnRyeShmb3V0LCB0 ZGluZm8tPmRvYmouY2F0SWQsIHRkaW5mby0+ZG9iai5kdW1wSWQsCisJCQkJCQkJQVJDSElWRV9P UFRTKC50YWcgPSB0YmluZm8tPmRvYmoubmFtZSwKKwkJCQkJCQkJCQkubmFtZXNwYWNlID0gdGJp bmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLAorCQkJCQkJCQkJCS5vd25lciA9IHRiaW5m by0+cm9sbmFtZSwKKwkJCQkJCQkJCQkuZGVzY3JpcHRpb24gPSAiVEFCTEUgREFUQSIsCisJCQkJ CQkJCQkJLnNlY3Rpb24gPSBTRUNUSU9OX0RBVEEsCisJCQkJCQkJCQkJLmNyZWF0ZVN0bXQgPSB0 ZERlZm4sCisJCQkJCQkJCQkJLmNvcHlTdG10ID0gY29weVN0bXQsCisJCQkJCQkJCQkJLmRlcHMg PSAmKHRiaW5mby0+ZG9iai5kdW1wSWQpLAorCQkJCQkJCQkJCS5uRGVwcyA9IDEsCisJCQkJCQkJ CQkJLmR1bXBGbiA9IGR1bXBGbiwKKwkJCQkJCQkJCQkuZHVtcEFyZyA9IHRkaW5mbykpOwogCi0J CS8qCi0JCSAqIElmIHBnb2ZmX3QgaXMgb25seSAzMiBiaXRzIHdpZGUsIHRoZSBhYm92ZSByZWZp bmVtZW50IGlzIHVzZWxlc3MsCi0JCSAqIGFuZCBpbnN0ZWFkIHdlJ2QgYmV0dGVyIHdvcnJ5IGFi b3V0IGludGVnZXIgb3ZlcmZsb3cuICBDbGFtcCB0bwotCQkgKiBJTlRfTUFYIGlmIHRoZSBjb3Jy ZWN0IHJlc3VsdCBleGNlZWRzIHRoYXQuCi0JCSAqLworCQkJLyoKKwkJCSAqIFNldCB0aGUgVG9j RW50cnkncyBkYXRhTGVuZ3RoIGluIGNhc2Ugd2UgYXJlIGRvaW5nIGEgcGFyYWxsZWwgZHVtcAor CQkJICogYW5kIHdhbnQgdG8gb3JkZXIgZHVtcCBqb2JzIGJ5IHRhYmxlIHNpemUuICBXZSBjaG9v c2UgdG8gbWVhc3VyZQorCQkJICogZGF0YUxlbmd0aCBpbiB0YWJsZSBwYWdlcyAoaW5jbHVkaW5n IFRPQVNUIHBhZ2VzKSBkdXJpbmcgZHVtcCwgc28KKwkJCSAqIG5vIHNjYWxpbmcgaXMgbmVlZGVk LgorCQkJICoKKwkJCSAqIEhvd2V2ZXIsIHJlbHBhZ2VzIGlzIGRlY2xhcmVkIGFzICJpbnRlZ2Vy IiBpbiBwZ19jbGFzcywgYW5kIGhlbmNlCisJCQkgKiBhbHNvIGluIFRhYmxlSW5mbywgYnV0IGl0 J3MgcmVhbGx5IEJsb2NrTnVtYmVyIGEvay9hIHVuc2lnbmVkIGludC4KKwkJCSAqIENhc3Qgc28g dGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IGludGVycHJldGF0aW9uIG9mIHRhYmxlIHNpemVzCisJCQkg KiBleGNlZWRpbmcgSU5UX01BWCBwYWdlcy4KKwkJCSAqLworCQkJdGUtPmRhdGFMZW5ndGggPSAo QmxvY2tOdW1iZXIpIHRiaW5mby0+cmVscGFnZXM7CisJCQl0ZS0+ZGF0YUxlbmd0aCArPSAoQmxv Y2tOdW1iZXIpIHRiaW5mby0+dG9hc3RwYWdlczsKKwkJfQorCQllbHNlCisJCXsKKwkJCUJsb2Nr TnVtYmVyIGN1cnJlbnRfY2h1bmtfc3RhcnQgPSAwOworCQkJUFFFeHBCdWZmZXIgY2h1bmtfZGVz YyA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQkKKwkJCXBnX2xvZ193YXJuaW5nKCJDSFVOS0lO RzogdG9jIGZvciBjaHVua2VkIHJlbHBhZ2VzIFsldV0iLChCbG9ja051bWJlcikgdGJpbmZvLT5y ZWxwYWdlcyk7CisKKwkJCXdoaWxlIChjdXJyZW50X2NodW5rX3N0YXJ0IDwgKEJsb2NrTnVtYmVy KSB0YmluZm8tPnJlbHBhZ2VzKQorCQkJeworCQkJCVRhYmxlRGF0YUluZm8gKmNodW5rX3RkaW5m byA9IChUYWJsZURhdGFJbmZvICopIHBnX21hbGxvYyhzaXplb2YoVGFibGVEYXRhSW5mbykpOwor CisJCQkJbWVtY3B5KGNodW5rX3RkaW5mbywgdGRpbmZvLCBzaXplb2YoVGFibGVEYXRhSW5mbykp OworCQkJCUFzc2lnbkR1bXBJZCgmY2h1bmtfdGRpbmZvLT5kb2JqKTsKKwkJCQkvL2FkZE9iamVj dERlcGVuZGVuY3koJmNodW5rX3RkaW5mby0+ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7IC8q IGRvIHdlIG5lZWQgdGhpcyBoZXJlICovCisJCQkJY2h1bmtfdGRpbmZvLT5pc19zZWdtZW50ID0g dHJ1ZTsKKwkJCQljaHVua190ZGluZm8tPnN0YXJ0UGFnZSA9IGN1cnJlbnRfY2h1bmtfc3RhcnQ7 CisJCQkJY2h1bmtfdGRpbmZvLT5lbmRQYWdlID0gY3VycmVudF9jaHVua19zdGFydCArIGRvcHQt Pm1heF90YWJsZV9zZWdtZW50X3BhZ2VzIC0gMTsKKworCQkJCXBnX2xvZ193YXJuaW5nKCJDSFVO S0lORzogdG9jIGZvciBwYWdlcyBbJXU6JXVdIixjaHVua190ZGluZm8tPnN0YXJ0UGFnZSwgY2h1 bmtfdGRpbmZvLT5lbmRQYWdlKTsKKwkJCQkKKwkJCQljdXJyZW50X2NodW5rX3N0YXJ0ICs9IGRv cHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzOworCQkJCWlmIChjdXJyZW50X2NodW5rX3N0YXJ0 ID49IChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcykKKwkJCQkJY2h1bmtfdGRpbmZvLT5l bmRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyAvKiBsYXN0IGNodW5rIGlzIGZvciAiYWxsIHRo ZSByZXN0IiAqLworCisJCQkJcHJpbnRmUFFFeHBCdWZmZXIoY2h1bmtfZGVzYywgIlRBQkxFIERB VEEgKHBhZ2VzICV1OiV1KSIsIGNodW5rX3RkaW5mby0+c3RhcnRQYWdlLCBjaHVua190ZGluZm8t PmVuZFBhZ2UpOworCisJCQkJdGUgPSBBcmNoaXZlRW50cnkoZm91dCwgY2h1bmtfdGRpbmZvLT5k b2JqLmNhdElkLCBjaHVua190ZGluZm8tPmRvYmouZHVtcElkLAorCQkJCQkJCUFSQ0hJVkVfT1BU UygudGFnID0gdGJpbmZvLT5kb2JqLm5hbWUsCisJCQkJCQkJCQkJLm5hbWVzcGFjZSA9IHRiaW5m by0+ZG9iai5uYW1lc3BhY2UtPmRvYmoubmFtZSwKKwkJCQkJCQkJCQkub3duZXIgPSB0YmluZm8t PnJvbG5hbWUsCisJCQkJCQkJCQkJLmRlc2NyaXB0aW9uID0gY2h1bmtfZGVzYy0+ZGF0YSwKKwkJ CQkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fREFUQSwKKwkJCQkJCQkJCQkuY3JlYXRlU3RtdCA9 IHRkRGVmbiwKKwkJCQkJCQkJCQkuY29weVN0bXQgPSBjb3B5U3RtdCwKKwkJCQkJCQkJCQkuZGVw cyA9ICYodGJpbmZvLT5kb2JqLmR1bXBJZCksCisJCQkJCQkJCQkJLm5EZXBzID0gMSwKKwkJCQkJ CQkJCQkuZHVtcEZuID0gZHVtcEZuLAorCQkJCQkJCQkJCS5kdW1wQXJnID0gY2h1bmtfdGRpbmZv KSk7CisKKwkJCQlpZihjaHVua190ZGluZm8tPmVuZFBhZ2UgPT0gSW52YWxpZEJsb2NrTnVtYmVy KQorCQkJCQl0ZS0+ZGF0YUxlbmd0aCA9IChCbG9ja051bWJlcikgdGJpbmZvLT5yZWxwYWdlcyAt IGNodW5rX3RkaW5mby0+c3RhcnRQYWdlOworCQkJCWVsc2UKKwkJCQkJdGUtPmRhdGFMZW5ndGgg PSBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlczsKKwkJCQkvKiBsZXQncyBhc3N1bWUgdG9h c3QgcGFnZXMgZGlzdHJpYnV0ZSBldmVubHkgYW1vbmcgY2h1bmtzICovCisJCQkJaWYodGJpbmZv LT5yZWxwYWdlcykKKwkJCQkJdGUtPmRhdGFMZW5ndGggKz0gdGUtPmRhdGFMZW5ndGggKiB0Ymlu Zm8tPnRvYXN0cGFnZXMgLyB0YmluZm8tPnJlbHBhZ2VzOworCQkJfQorCisJCQlkZXN0cm95UFFF eHBCdWZmZXIoY2h1bmtfZGVzYyk7CisJCX0KKwkgICAvKgorCQkqIElmIHBnb2ZmX3QgaXMgb25s eSAzMiBiaXRzIHdpZGUsIHRoZSBhYm92ZSByZWZpbmVtZW50IGlzIHVzZWxlc3MsCisJCSogYW5k IGluc3RlYWQgd2UnZCBiZXR0ZXIgd29ycnkgYWJvdXQgaW50ZWdlciBvdmVyZmxvdy4gIENsYW1w IHRvCisJCSogSU5UX01BWCBpZiB0aGUgY29ycmVjdCByZXN1bHQgZXhjZWVkcyB0aGF0LgorCQkq LwogCQlpZiAoc2l6ZW9mKHRlLT5kYXRhTGVuZ3RoKSA9PSA0ICYmCiAJCQkodGJpbmZvLT5yZWxw YWdlcyA8IDAgfHwgdGJpbmZvLT50b2FzdHBhZ2VzIDwgMCB8fAotCQkJIHRlLT5kYXRhTGVuZ3Ro IDwgMCkpCisJCQl0ZS0+ZGF0YUxlbmd0aCA8IDApKQogCQkJdGUtPmRhdGFMZW5ndGggPSBJTlRf TUFYOwogCX0KIApAQCAtMzA5Miw2ICszMTgyLDkgQEAgbWFrZVRhYmxlRGF0YUluZm8oRHVtcE9w dGlvbnMgKmRvcHQsIFRhYmxlSW5mbyAqdGJpbmZvKQogCXRkaW5mby0+ZG9iai5uYW1lc3BhY2Ug PSB0YmluZm8tPmRvYmoubmFtZXNwYWNlOwogCXRkaW5mby0+dGR0YWJsZSA9IHRiaW5mbzsKIAl0 ZGluZm8tPmZpbHRlcmNvbmQgPSBOVUxMOwkvKiBtaWdodCBnZXQgc2V0IGxhdGVyICovCisJdGRp bmZvLT5pc19zZWdtZW50ID0gZmFsc2U7IC8qIHdlIGNvdWxkIHVzZSAodGRpbmZvLT5zdGFydFBh Z2UgIT0gMCB8fCB0ZGluZm8tPmVuZFBhZ2UgIT0gSW52YWxpZEJsb2NrTnVtYmVyKSAqLworCXRk aW5mby0+c3RhcnRQYWdlID0gMDsKKwl0ZGluZm8tPmVuZFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJYWRkT2JqZWN0RGVwZW5kZW5jeSgmdGRpbmZvLT5kb2JqLCB0YmluZm8tPmRvYmouZHVt cElkKTsKIAogCS8qIEEgVGFibGVEYXRhSW5mbyBjb250YWlucyBkYXRhLCBvZiBjb3Vyc2UgKi8K QEAgLTcyNTQsOCArNzM0NywxNSBAQCBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1U YWJsZXMpCiAJCQkJCQkgImMucmVsbmFtZXNwYWNlLCBjLnJlbGtpbmQsIGMucmVsdHlwZSwgIgog CQkJCQkJICJjLnJlbG93bmVyLCAiCiAJCQkJCQkgImMucmVsY2hlY2tzLCAiCi0JCQkJCQkgImMu cmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsIGMucmVscGFnZXMsICIKLQkJCQkJCSAiYy5yZWx0 dXBsZXMsIGMucmVsYWxsdmlzaWJsZSwgIik7CisJCQkJCQkgImMucmVsaGFzaW5kZXgsIGMucmVs aGFzcnVsZXMsICIpOworCisJLyogZmV0Y2ggY3VycmVudCByZWxhdGlvbiBzaXplIGlmIGNodW5r aW5nIGlzIHJlcXVlc3RlZCAqLworCWlmKGRvcHQtPm1heF90YWJsZV9zZWdtZW50X3BhZ2VzICE9 IEludmFsaWRCbG9ja051bWJlcikKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJwZ19y ZWxhdGlvbl9zaXplKGMub2lkKS9jdXJyZW50X3NldHRpbmcoJ2Jsb2NrX3NpemUnKTo6aW50IEFT IHJlbHBhZ2VzLCAiKTsKKwllbHNlCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiYy5y ZWxwYWdlcywgIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImMucmVsdHVwbGVz LCBjLnJlbGFsbHZpc2libGUsICIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTgw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImMucmVsYWxsZnJvemVuLCAiKTsK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oCmluZGV4IDRjNGIxNGU1ZmM3Li5lMzYyMjUzZDRkNSAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBA IC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJwZ19iYWNrdXAuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3B1YmxpY2F0aW9uX2QuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKIAog I2RlZmluZSBvaWRjbXAoeCx5KSAoICgoeCkgPCAoeSkgPyAtMSA6ICgoeCkgPiAoeSkpID8gIDEg OiAwKSApCkBAIC00MTMsNiArNDE0LDEyIEBAIHR5cGVkZWYgc3RydWN0IF90YWJsZURhdGFJbmZv CiAJRHVtcGFibGVPYmplY3QgZG9iajsKIAlUYWJsZUluZm8gICp0ZHRhYmxlOwkJLyogbGluayB0 byB0YWJsZSB0byBkdW1wICovCiAJY2hhcgkgICAqZmlsdGVyY29uZDsJCS8qIFdIRVJFIGNvbmRp dGlvbiB0byBsaW1pdCByb3dzIGR1bXBlZCAqLworCWJvb2wgCQlpc19zZWdtZW50OwkJLyogdHJ1 ZSBpZiB0aGlzIGlzIGEgZGF0YSBzZWdtZW50LgorCQkJCQkJCQkgKiB3ZSBjb3VsZCB1c2UgKHRk aW5mby0+c3RhcnRQYWdlICE9IDAgfHwgCisJCQkJCQkJCSAqIHRkaW5mby0+ZW5kUGFnZSAhPSBJ bnZhbGlkQmxvY2tOdW1iZXIpICovCisJQmxvY2tOdW1iZXIJc3RhcnRQYWdlOwkJLyogc3RhcnRp bmcgdGFibGUgcGFnZSAqLworCUJsb2NrTnVtYmVyCWVuZFBhZ2U7CQkvKiBlbmRpbmcgdGFibGUg cGFnZSBmb3IgcGFnZS1yYW5nZSBkdW1wLAorCSAgICAgICAgICAgICAgICAgICAgCQkgKiBtb3N0 bHkgc3RhcnRQYWdlK21heF90YWJsZV9zZWdtZW50X3BhZ2VzICovCiB9IFRhYmxlRGF0YUluZm87 CiAKIHR5cGVkZWYgc3RydWN0IF9pbmR4SW5mbwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDRfcGdfZHVt cF9wYXJhbGxlbC5wbAppbmRleCA3MzhmMzRiMWMxYi4uODhhZjI1ZDI4ODkgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsCisrKyBiL3NyYy9iaW4v cGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsCkBAIC0xMSw2ICsxMSw3IEBAIHVzZSBU ZXN0OjpNb3JlOwogbXkgJGRibmFtZTEgPSAncmVncmVzc2lvbl9zcmMnOwogbXkgJGRibmFtZTIg PSAncmVncmVzc2lvbl9kZXN0MSc7CiBteSAkZGJuYW1lMyA9ICdyZWdyZXNzaW9uX2Rlc3QyJzsK K215ICRkYm5hbWU0ID0gJ3JlZ3Jlc3Npb25fZGVzdDMnOwogCiBteSAkbm9kZSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOwogJG5vZGUtPmluaXQ7CkBAIC0yMSw2ICsy Miw3IEBAIG15ICRiYWNrdXBkaXIgPSAkbm9kZS0+YmFja3VwX2RpcjsKICRub2RlLT5ydW5fbG9n KFsgJ2NyZWF0ZWRiJywgJGRibmFtZTEgXSk7CiAkbm9kZS0+cnVuX2xvZyhbICdjcmVhdGVkYics ICRkYm5hbWUyIF0pOwogJG5vZGUtPnJ1bl9sb2coWyAnY3JlYXRlZGInLCAkZGJuYW1lMyBdKTsK KyRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTQgXSk7CiAKICRub2RlLT5zYWZl X3BzcWwoCiAJJGRibmFtZTEsCkBAIC00NCw2ICs0NiwxOCBAQCBjcmVhdGUgdGFibGUgdGh0X3Ax IHBhcnRpdGlvbiBvZiB0aHQgZm9yIHZhbHVlcyB3aXRoIChtb2R1bHVzIDMsIHJlbWFpbmRlciAw KTsKIGNyZWF0ZSB0YWJsZSB0aHRfcDIgcGFydGl0aW9uIG9mIHRodCBmb3IgdmFsdWVzIHdpdGgg KG1vZHVsdXMgMywgcmVtYWluZGVyIDEpOwogY3JlYXRlIHRhYmxlIHRodF9wMyBwYXJ0aXRpb24g b2YgdGh0IGZvciB2YWx1ZXMgd2l0aCAobW9kdWx1cyAzLCByZW1haW5kZXIgMik7CiBpbnNlcnQg aW50byB0aHQgc2VsZWN0ICh4JTEwKTo6dGV4dDo6ZGlnaXQsIHggZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwKSB4OworCistLSByYWlzZSB3YXJuaW5nIHNvIEkgY2FuIGNoZWNrIGluIC5sb2cg aWYgZGF0YSB3YXMgY29ycmVjdAorRE8gXCRcJAorREVDTEFSRQorICAgIHRoYXNoX3JlYyBSRUNP UkQ7CitCRUdJTgorICAgIFNFTEVDVCAndHBsYWluJywgY291bnQoKiksIHN1bShoYXNodGV4dCh0 Ojp0ZXh0KSkgYXMgdGFibGVoYXNoIAorCSAgSU5UTyB0aGFzaF9yZWMKKwkgIEZST00gdHBsYWlu IEFTIHQ7CisgICAgUkFJU0UgV0FSTklORyAndGhhc2g6ICUnLCB0aGFzaF9yZWM7CitFTkQ7Citc JFwkOwogCX0pOwogCiAkbm9kZS0+Y29tbWFuZF9vaygKQEAgLTg3LDQgKzEwMSw0MiBAQCAkbm9k ZS0+Y29tbWFuZF9vaygKIAldLAogCSdwYXJhbGxlbCByZXN0b3JlIGFzIGluc2VydHMnKTsKIAor JG5vZGUtPmNvbW1hbmRfb2soCisJWworCQkncGdfZHVtcCcsCisJCSctLWZvcm1hdCcgPT4gJ2Rp cmVjdG9yeScsCisJCSctLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzJyA9PiAyLAorCQknLS1uby1z eW5jJywKKwkJJy0tam9icycgPT4gMiwKKwkJJy0tZmlsZScgPT4gIiRiYWNrdXBkaXIvZHVtcDMi LAorCQkkbm9kZS0+Y29ubnN0cigkZGJuYW1lMSksCisJXSwKKwkncGFyYWxsZWwgZHVtcCB3aXRo IGNodW5rcyBvZiB0d28gaGVhcCBwYWdlcycpOworCiskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJ CSdwZ19yZXN0b3JlJywgJy0tdmVyYm9zZScsCisJCSctLWRibmFtZScgPT4gJG5vZGUtPmNvbm5z dHIoJGRibmFtZTQpLAorCQknLS1qb2JzJyA9PiAzLAorCQkiJGJhY2t1cGRpci9kdW1wMyIsCisJ XSwKKwkncGFyYWxsZWwgcmVzdG9yZSB3aXRoIGNodW5rcyBvZiB0d28gaGVhcCBwYWdlcycpOwor Ciskbm9kZS0+c2FmZV9wc3FsKAorCSRkYm5hbWU0LAorCXFxeworCistLSByYWlzZSB3YXJuaW5n IHNvIEkgY2FuIGNoZWNrIGluIC5sb2cgaWYgZGF0YSB3YXMgY29ycmVjdAorRE8gXCRcJAorREVD TEFSRQorICAgIHRoYXNoX3JlYyBSRUNPUkQ7CitCRUdJTgorICAgIFNFTEVDVCAndHBsYWluJywg Y291bnQoKiksIHN1bShoYXNodGV4dCh0Ojp0ZXh0KSkgYXMgdGFibGVoYXNoIAorCSAgSU5UTyB0 aGFzaF9yZWMKKwkgIEZST00gdHBsYWluIEFTIHQ7CisgICAgUkFJU0UgV0FSTklORyAndGhhc2gg YWZ0ZXIgcGFyYWxsZWwgY2h1bmtlZCByZXN0b3JlOiAlJywgdGhhc2hfcmVjOworRU5EOworXCRc JDsKKwl9KTsKKwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvZmVfdXRpbHMvb3B0 aW9uX3V0aWxzLmMgYi9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMKaW5kZXggY2M0ODNhZTE3 NmMuLjkzZDU4ZDdlMWE5IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMK KysrIGIvc3JjL2ZlX3V0aWxzL29wdGlvbl91dGlscy5jCkBAIC04Myw2ICs4Myw2MCBAQCBvcHRp b25fcGFyc2VfaW50KGNvbnN0IGNoYXIgKm9wdGFyZywgY29uc3QgY2hhciAqb3B0bmFtZSwKIAly ZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIG9wdGlvbl9wYXJzZV9pbnQKKyAqCisgKiBQYXJzZSBp bnRlZ2VyIHZhbHVlIGZvciBhbiBvcHRpb24uICBJZiB0aGUgcGFyc2luZyBpcyBzdWNjZXNzZnVs LCByZXR1cm5zCisgKiB0cnVlIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAqcmVzdWx0IGlmIHRo YXQncyBnaXZlbjsgaWYgcGFyc2luZyBmYWlscywKKyAqIHJldHVybnMgZmFsc2UuCisgKi8KK2Jv b2wKK29wdGlvbl9wYXJzZV91aW50MzIoY29uc3QgY2hhciAqb3B0YXJnLCBjb25zdCBjaGFyICpv cHRuYW1lLAorCQkJCSB1aW50NjQgbWluX3JhbmdlLCB1aW50NjQgbWF4X3JhbmdlLAorCQkJCSB1 aW50MzIgKnJlc3VsdCkKK3sKKwljaGFyCSAgICplbmRwdHI7CisJdWludDY0CQl2YWw2NDsKKwor CS8qIGNoZWNrIHRoZXJlIGlzIG5vIG1pbnVzIHNpZ24gaW4gdmFsdWUgYmVjYXVzZSBzdHJ0b3Vs KCkgCisJICogd2lsbCBzaWxlbnRseSBjb252ZXJ0IG5lZ2F0aXZlIG51bWJlcnMgdG8gdHdvJ3Mg Y29tcGxlbWVudCAqLworCWZvcihlbmRwdHIgPSBvcHRhcmc7ICplbmRwdHIgIT0gJ1wwJzsgZW5k cHRyKyspCisJCWlmKCplbmRwdHIgPT0gJy0nKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm5lZ2F0 aXZlIHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9uICVzIiwKKwkJCQkJCW9wdGFyZywgb3B0bmFtZSk7 CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCWVycm5vID0gMDsKKwl2YWw2NCA9IHN0cnRvdWxs KG9wdGFyZywgJmVuZHB0ciwgMTApOworCisJLyoKKwkgKiBTa2lwIGFueSB0cmFpbGluZyB3aGl0 ZXNwYWNlOyBpZiBhbnl0aGluZyBidXQgd2hpdGVzcGFjZSByZW1haW5zIGJlZm9yZQorCSAqIHRo ZSB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIsIGZhaWwuCisJICovCisJd2hpbGUgKCplbmRwdHIgIT0g J1wwJyAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqZW5kcHRyKSkKKwkJZW5kcHRyKys7CisK KwlpZiAoKmVuZHB0ciAhPSAnXDAnKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIHZhbHVl IFwiJXNcIiBmb3Igb3B0aW9uICVzIiwKKwkJCQkJIG9wdGFyZywgb3B0bmFtZSk7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlpZiAoZXJybm8gPT0gRVJBTkdFIHx8IHZhbDY0IDwgbWluX3Jhbmdl IHx8IHZhbDY0ID4gbWF4X3JhbmdlKQorCXsKKwkJcGdfbG9nX2Vycm9yKCIlcyBtdXNzdCBiZSBp biByYW5nZSAlbHUuLiVsdSIsCisJCQkJCSBvcHRuYW1lLCBtaW5fcmFuZ2UsIG1heF9yYW5nZSk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocmVzdWx0KQorCQkqcmVzdWx0ID0gKHVpbnQz Mil2YWw2NDsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIFByb3ZpZGUgc3RyaWN0bHkgaGFy bW9uaXplZCBoYW5kbGluZyBvZiB0aGUgLS1zeW5jLW1ldGhvZCBvcHRpb24uCiAgKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL29wdGlvbl91dGlscy5oIGIvc3JjL2luY2x1ZGUv ZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgKaW5kZXggMGRiNmUzYjZlOTEuLjI2ODU5MGExOGJkIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9mZV91dGlscy9vcHRpb25fdXRpbHMuaAorKysgYi9zcmMv aW5jbHVkZS9mZV91dGlscy9vcHRpb25fdXRpbHMuaApAQCAtMjIsNiArMjIsOSBAQCBleHRlcm4g dm9pZCBoYW5kbGVfaGVscF92ZXJzaW9uX29wdHMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKIGV4 dGVybiBib29sIG9wdGlvbl9wYXJzZV9pbnQoY29uc3QgY2hhciAqb3B0YXJnLCBjb25zdCBjaGFy ICpvcHRuYW1lLAogCQkJCQkJCSBpbnQgbWluX3JhbmdlLCBpbnQgbWF4X3JhbmdlLAogCQkJCQkJ CSBpbnQgKnJlc3VsdCk7CitleHRlcm4gYm9vbCBvcHRpb25fcGFyc2VfdWludDMyKGNvbnN0IGNo YXIgKm9wdGFyZywgY29uc3QgY2hhciAqb3B0bmFtZSwKKwkJCQkJCQkgdWludDY0IG1pbl9yYW5n ZSwgdWludDY0IG1heF9yYW5nZSwKKwkJCQkJCQkgdWludDMyICpyZXN1bHQpOwogZXh0ZXJuIGJv b2wgcGFyc2Vfc3luY19tZXRob2QoY29uc3QgY2hhciAqb3B0YXJnLAogCQkJCQkJCSAgRGF0YURp clN5bmNNZXRob2QgKnN5bmNfbWV0aG9kKTsKIAotLSAKMi40My4wCgo= --000000000000d1133e0648e59511--