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 1uUKPu-001Uoc-Hm for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jun 2025 07:19:35 +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 1uUKPr-000oyO-S7 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Jun 2025 07:19:32 +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 1uUKPr-000oyG-5a for pgsql-hackers@lists.postgresql.org; Wed, 25 Jun 2025 07:19:32 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uUKPp-003s3s-06 for pgsql-hackers@postgresql.org; Wed, 25 Jun 2025 07:19:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=1TCuHEvmWGheLgDk1oFq5H7PWtpSO16GuyAS3nV3d3M=; b=xCPXQMEC1KvFVejQzoYHr/5CFK DP3nd2FEfUXxARMECFm/NNeXKaO412oIhhoKYumlhw5WVOWrbFzBkXqf5KzYFDYAalOIR5ILwCi4M X9Ha0Rauu9+PIUhswXRqunKuZoHY9gmhFJrjdveDCwnhEsNkQQdKyG4RHjcJzYKYBKeFh9UwixlL+ GNv9rpAGXnEYLrni36Zmcb2KSeCompv920QOgcnj7dL0p80XSCxogbKFkYezjcp9wIr7LntO+7UHi hYDV2E2Pqo/3iCRubYqldjxrhALWQ/xtaDO6yz+gDq4ifsaaykNMJLOTM7vI3gnFIbG3az9T7sm1F vRn8CLxg==; Received: from [2409:11:4120:300:ba9a:9ab4:f96:d383] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (Exim 4.96) (envelope-from ) id 1uUKPe-00Eibv-0A; Wed, 25 Jun 2025 07:19:22 +0000 Date: Wed, 25 Jun 2025 16:19:03 +0900 (JST) Message-Id: <20250625.161903.68476237519416014.ishii@postgresql.org> To: krasiyan@gmail.com, ojford@gmail.com, tgl@sss.pgh.pa.us, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org Cc: pgsql-hackers@postgresql.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <20250619.152111.77843597600729081.ishii@postgresql.org> References: <20250329.201809.1463386697879435538.ishii@postgresql.org> <20250612.075235.1886649649521129924.ishii@postgresql.org> <20250619.152111.77843597600729081.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 26.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Wed_Jun_25_16_19_03_2025_147)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:ba9a:9ab4:f96:d383 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Wed_Jun_25_16_19_03_2025_147)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit > BTW I am still not satisfied by the performance improvement for window > functions for frames, that was only 40%. I will study the code to look > for more optimization. So I come up with more optimization for window functions working on frames (i.e. first_value, last_value and nth_value). Attached v14 patch does it. There are 3 major functions used here. 1) window_gettupleslot (get a row) 2) row_is_in_frame (check whether row is in frame or not) 3) ExecEvalExpr (evaluate arg on the row) In v12 (and v13), we eliminate #3 in some cases but the saving was only 40%. In v14, I found some cases where we don't need to call #1. row_is_in_frame requires a row ("tuple" argument), which is provided by #1. However row_is_in_frame actually uses the row argument only when frame clause is "RANGE" or "GROUPS" and frame end is "CURRENT ROW". In other cases it does not use "tuple" argument at all. So I check the frame clause and the frame end, and if they are not the case, I can omit #1. Plus if the not null cache for the row has been already created, we can omit #3 as well. The optimization contributes to the performance. I observe 2.7x (1k rows case) to 5.2x (3k rows case) speed up when I compare the performance of v13 patch and v14 patch using the same script (see attached). v13: rows duration (msec) 1000 34.740 2000 91.169 3000 205.847 4000 356.142 5000 557.063 v14: rows duration (msec) 1000 12.807 2000 21.782 3000 39.248 4000 69.123 5000 101.220 I am not sure how the case where frame clause is "RANGE" or "GROUPS" and frame end is "CURRENT ROW" is majority of window function use cases. If it's majority, the optimization in v14 does not help much because v14 does not optimize the case. However if it's not, the v14 patch is close to commitable form, I think. Comments are welcome. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Wed_Jun_25_16_19_03_2025_147)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v14-0001-Add-IGNORE-NULLS-RESPECT-NULLS-option-to-Window-.patch" RnJvbSBmNDdmZWU3MDBlOTdmMGY1ZjI1Mzc2NzY2NzE4ODVmMzc2NjE5ODcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI1IEp1biAyMDI1IDE0OjU1OjMzICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MTRd IEFkZCBJR05PUkUgTlVMTFMvUkVTUEVDVCBOVUxMUyBvcHRpb24gdG8gV2luZG93CiBmdW5jdGlv bnMuCgpBZGQgSUdOT1JFIE5VTExTL1JFU1BFQ1QgTlVMTFMgb3B0aW9uIHRvIGxlYWQsIGxhZywg Zmlyc3RfdmFsdWUsCmxhc3RfdmFsdWUgYW5kIG50aF92YWx1ZS4KLS0tCiBkb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sICAgICAgICAgICAgICAgfCAgMzggKystCiBkb2Mvc3JjL3NnbWwvc3ludGF4LnNn bWwgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVz LnR4dCB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIHwgNDM3 ICsrKysrKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv Y2xhdXNlcy5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICB8 ICAxOSArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyAgICAgIHwgICA5ICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgIHwgIDEwICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAg ICAgfCAgMTMgKwogc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL3dpbmRvd2FwaS5oICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQgfCAzMTEgKysrKysrKysrKysrKysrKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvd2luZG93LnNxbCAgICAgIHwgMTQ3ICsrKysrKysrKwogMTUgZmls ZXMgY2hhbmdlZCwgOTYyIGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmluZGV4 IDIyNGQ0ZmU1YTlmLi5hOTVmZGJhYjAzMSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yMzU0Myw3ICsyMzU0Myw3IEBA IFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPC9pbmRleHRlcm0+CiAg ICAgICAgIDxmdW5jdGlvbj5sYWc8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFt ZXRlcj4gPHR5cGU+YW55Y29tcGF0aWJsZTwvdHlwZT4KICAgICAgICAgICA8b3B0aW9uYWw+LCA8 cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPgotICAgICAg ICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVmYXVsdDwvcGFyYW1ldGVyPiA8dHlwZT5hbnlj b21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwvb3B0aW9uYWw+ICkKKyAgICAgICAgICA8b3B0 aW9uYWw+LCA8cGFyYW1ldGVyPmRlZmF1bHQ8L3BhcmFtZXRlcj4gPHR5cGU+YW55Y29tcGF0aWJs ZTwvdHlwZT4gPC9vcHRpb25hbD48L29wdGlvbmFsPiApIDxvcHRpb25hbD4gPHBhcmFtZXRlcj5u dWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAgICA8cmV0dXJudmFs dWU+YW55Y29tcGF0aWJsZTwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAgICAgIDxw YXJhPgpAQCAtMjM1NjgsNyArMjM1NjgsNyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBzb21ldGFi bGU7CiAgICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgICA8ZnVuY3Rpb24+bGVhZDwvZnVuY3Rp b24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90 eXBlPgogICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+ IDx0eXBlPmludGVnZXI8L3R5cGU+Ci0gICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5k ZWZhdWx0PC9wYXJhbWV0ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8L3R5cGU+IDwvb3B0aW9uYWw+ PC9vcHRpb25hbD4gKQorICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVmYXVsdDwv cGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwvb3B0aW9u YWw+ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwv b3B0aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1ZT5hbnljb21wYXRpYmxlPC9yZXR1cm52YWx1 ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0yMzU5MSw3ICsyMzU5MSw3IEBA IFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPGluZGV4dGVybT4KICAg ICAgICAgIDxwcmltYXJ5PmZpcnN0X3ZhbHVlPC9wcmltYXJ5PgogICAgICAgICA8L2luZGV4dGVy bT4KLSAgICAgICAgPGZ1bmN0aW9uPmZpcnN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVy PnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkKKyAgICAgICAgPGZ1 bmN0aW9uPmZpcnN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0 ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51bGwg dHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwvb3B0aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1ZT5h bnllbGVtZW50PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBA IC0yMzYwNSw3ICsyMzYwNSw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAg ICAgICAgPGluZGV4dGVybT4KICAgICAgICAgIDxwcmltYXJ5Pmxhc3RfdmFsdWU8L3ByaW1hcnk+ CiAgICAgICAgIDwvaW5kZXh0ZXJtPgotICAgICAgICA8ZnVuY3Rpb24+bGFzdF92YWx1ZTwvZnVu Y3Rpb24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90 eXBlPiApCisgICAgICAgIDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1l dGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkgPG9wdGlvbmFs PiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwvb3B0aW9uYWw+CiAgICAg ICAgIDxyZXR1cm52YWx1ZT5hbnllbGVtZW50PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+ CiAgICAgICAgPHBhcmE+CkBAIC0yMzYxOSw3ICsyMzYxOSw3IEBAIFNFTEVDVCBjb3VudCgqKSBG Uk9NIHNvbWV0YWJsZTsKICAgICAgICAgPGluZGV4dGVybT4KICAgICAgICAgIDxwcmltYXJ5Pm50 aF92YWx1ZTwvcHJpbWFyeT4KICAgICAgICAgPC9pbmRleHRlcm0+Ci0gICAgICAgIDxmdW5jdGlv bj5udGhfdmFsdWU8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5 cGU+YW55ZWxlbWVudDwvdHlwZT4sIDxwYXJhbWV0ZXI+bjwvcGFyYW1ldGVyPiA8dHlwZT5pbnRl Z2VyPC90eXBlPiApCisgICAgICAgIDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPiAoIDxw YXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwvdHlwZT4sIDxwYXJh bWV0ZXI+bjwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiApIDxvcHRpb25hbD4gPHBh cmFtZXRlcj5udWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAgICA8 cmV0dXJudmFsdWU+YW55ZWxlbWVudDwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgpAQCAtMjM2NjgsMTggKzIzNjY4LDI2IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9N IHNvbWV0YWJsZTsKICAgIE90aGVyIGZyYW1lIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2VkIHRv IG9idGFpbiBvdGhlciBlZmZlY3RzLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUgPGxp dGVyYWw+bnVsbCB0cmVhdG1lbnQ8L2xpdGVyYWw+IG9wdGlvbiBtdXN0IGJlIG9uZSBvZjoKKzxz eW5vcHNpcz4KKyAgUkVTUEVDVCBOVUxMUworICBJR05PUkUgTlVMTFMKKzwvc3lub3BzaXM+Cisg ICBJZiB1bnNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+UkVTUEVDVCBOVUxMUzwv bGl0ZXJhbD4gd2hpY2ggaW5jbHVkZXMgTlVMTAorICAgdmFsdWVzIGluIGFueSByZXN1bHQgY2Fs Y3VsYXRpb24uIDxsaXRlcmFsPklHTk9SRSBOVUxMUzwvbGl0ZXJhbD4gaWdub3JlcyBOVUxMIHZh bHVlcy4KKyAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIGZvbGxvd2luZyBm dW5jdGlvbnM6IDxmdW5jdGlvbj5sYWc8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5sZWFkPC9m dW5jdGlvbj4sIDxmdW5jdGlvbj5maXJzdF92YWx1ZTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+bGFz dF92YWx1ZTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVuY3Rpb24+Lgor ICA8L3BhcmE+CisKICAgPG5vdGU+CiAgICA8cGFyYT4KLSAgICBUaGUgU1FMIHN0YW5kYXJkIGRl ZmluZXMgYSA8bGl0ZXJhbD5SRVNQRUNUIE5VTExTPC9saXRlcmFsPiBvcgotICAgIDxsaXRlcmFs PklHTk9SRSBOVUxMUzwvbGl0ZXJhbD4gb3B0aW9uIGZvciA8ZnVuY3Rpb24+bGVhZDwvZnVuY3Rp b24+LCA8ZnVuY3Rpb24+bGFnPC9mdW5jdGlvbj4sCi0gICAgPGZ1bmN0aW9uPmZpcnN0X3ZhbHVl PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4sIGFuZAotICAgIDxm dW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPi4gIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIGlu Ci0gICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPjogdGhlIGJlaGF2aW9y IGlzIGFsd2F5cyB0aGUKLSAgICBzYW1lIGFzIHRoZSBzdGFuZGFyZCdzIGRlZmF1bHQsIG5hbWVs eSA8bGl0ZXJhbD5SRVNQRUNUIE5VTExTPC9saXRlcmFsPi4KLSAgICBMaWtld2lzZSwgdGhlIHN0 YW5kYXJkJ3MgPGxpdGVyYWw+RlJPTSBGSVJTVDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+RlJPTSBM QVNUPC9saXRlcmFsPgotICAgIG9wdGlvbiBmb3IgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVuY3Rp b24+IGlzIG5vdCBpbXBsZW1lbnRlZDogb25seSB0aGUKLSAgICBkZWZhdWx0IDxsaXRlcmFsPkZS T00gRklSU1Q8L2xpdGVyYWw+IGJlaGF2aW9yIGlzIHN1cHBvcnRlZC4gIChZb3UgY2FuIGFjaGll dmUKLSAgICB0aGUgcmVzdWx0IG9mIDxsaXRlcmFsPkZST00gTEFTVDwvbGl0ZXJhbD4gYnkgcmV2 ZXJzaW5nIHRoZSA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4KKyAgICBUaGUgU1FMIHN0YW5k YXJkIGRlZmluZXMgYSA8bGl0ZXJhbD5GUk9NIEZJUlNUPC9saXRlcmFsPiBvciA8bGl0ZXJhbD5G Uk9NIExBU1Q8L2xpdGVyYWw+CisgICAgb3B0aW9uIGZvciA8ZnVuY3Rpb24+bnRoX3ZhbHVlPC9m dW5jdGlvbj4uIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluCisgICAgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPjogb25seSB0aGUgZGVmYXVsdCA8bGl0ZXJhbD5GUk9NIEZJ UlNUPC9saXRlcmFsPgorICAgIGJlaGF2aW9yIGlzIHN1cHBvcnRlZC4gKFlvdSBjYW4gYWNoaWV2 ZSB0aGUgcmVzdWx0IG9mIDxsaXRlcmFsPkZST00gTEFTVDwvbGl0ZXJhbD4gYnkKKyAgICByZXZl cnNpbmcgdGhlIDxsaXRlcmFsPk9SREVSIEJZPC9saXRlcmFsPgogICAgIG9yZGVyaW5nLikKICAg IDwvcGFyYT4KICAgPC9ub3RlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5bnRheC5zZ21s IGIvZG9jL3NyYy9zZ21sL3N5bnRheC5zZ21sCmluZGV4IDkxNjE4OWE3ZDY4Li4yMzdkNzMwNmZl OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5bnRheC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9zeW50YXguc2dtbApAQCAtMTgzNCw4ICsxODM0LDggQEAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMCkgQVMgcyhpKTsKICAgICBUaGUgc3ludGF4IG9mIGEgd2luZG93IGZ1bmN0aW9uIGNhbGwg aXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5mdW5j dGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4gKDxvcHRpb25hbD48cmVwbGFjZWFibGU+ZXhwcmVzc2lv bjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4gLi4uIDwvb3B0aW9uYWw+PC9vcHRpb25hbD4pIFsgRklMVEVSICggV0hFUkUgPHJl cGxhY2VhYmxlPmZpbHRlcl9jbGF1c2U8L3JlcGxhY2VhYmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFi bGU+d2luZG93X25hbWU8L3JlcGxhY2VhYmxlPgotPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8 L3JlcGxhY2VhYmxlPiAoPG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiAu Li4gPC9vcHRpb25hbD48L29wdGlvbmFsPikgWyBGSUxURVIgKCBXSEVSRSA8cmVwbGFjZWFibGU+ ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVSICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPndpbmRvd19kZWZpbml0aW9uPC9yZXBsYWNlYWJsZT4gKQorPHJlcGxhY2Vh YmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoPG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5l eHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPiAuLi4gPC9vcHRpb25hbD48L29wdGlvbmFsPikgPG9wdGlvbmFsPm51 bGwgdHJlYXRtZW50PC9vcHRpb25hbD4gWyBGSUxURVIgKCBXSEVSRSA8cmVwbGFjZWFibGU+Zmls dGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVSIDxyZXBsYWNlYWJsZT53aW5kb3dfbmFt ZTwvcmVwbGFjZWFibGU+Cis8cmVwbGFjZWFibGU+ZnVuY3Rpb25fbmFtZTwvcmVwbGFjZWFibGU+ ICg8b3B0aW9uYWw+PHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8b3B0aW9u YWw+LCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IC4uLiA8L29wdGlvbmFs Pjwvb3B0aW9uYWw+KSA8b3B0aW9uYWw+bnVsbCB0cmVhdG1lbnQ8L29wdGlvbmFsPiBbIEZJTFRF UiAoIFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJsZT4gKSBdIE9W RVIgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2luZG93X2RlZmluaXRpb248L3Jl cGxhY2VhYmxlPiApCiA8cmVwbGFjZWFibGU+ZnVuY3Rpb25fbmFtZTwvcmVwbGFjZWFibGU+ICgg KiApIFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxlPmZpbHRlcl9jbGF1c2U8L3JlcGxhY2Vh YmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFibGU+d2luZG93X25hbWU8L3JlcGxhY2VhYmxlPgogPHJl cGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoICogKSBbIEZJTFRFUiAoIFdI RVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJsZT4gKSBdIE9WRVIgKCA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2luZG93X2RlZmluaXRpb248L3JlcGxhY2Vh YmxlPiApCiA8L3N5bm9wc2lzPgpAQCAtMTg3Myw3ICsxODczLDkgQEAgRVhDTFVERSBOTyBPVEhF UlMKIAogICAgPHBhcmE+CiAgICAgSGVyZSwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxh Y2VhYmxlPiByZXByZXNlbnRzIGFueSB2YWx1ZQotICAgIGV4cHJlc3Npb24gdGhhdCBkb2VzIG5v dCBpdHNlbGYgY29udGFpbiB3aW5kb3cgZnVuY3Rpb24gY2FsbHMuCisgICAgZXhwcmVzc2lvbiB0 aGF0IGRvZXMgbm90IGl0c2VsZiBjb250YWluIHdpbmRvdyBmdW5jdGlvbiBjYWxscy4gU29tZQor ICAgIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb25zIGFsbG93IGEgPGxpdGVyYWw+bnVsbCB0cmVhdG1l bnQ8L2xpdGVyYWw+IGNsYXVzZSwKKyAgICBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0iZnVu Y3Rpb25zLXdpbmRvdyIvPi4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CkBAIC0yMDQ4LDcgKzIw NTAsNyBAQCBFWENMVURFIE5PIE9USEVSUwogCiAgICA8cGFyYT4KICAgICBUaGUgYnVpbHQtaW4g d2luZG93IGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIDx4cmVmCi0gICAgbGlua2VuZD0iZnVu Y3Rpb25zLXdpbmRvdy10YWJsZSIvPi4gIE90aGVyIHdpbmRvdyBmdW5jdGlvbnMgY2FuIGJlIGFk ZGVkIGJ5CisgICAgbGlua2VuZD0iZnVuY3Rpb25zLXdpbmRvdy10YWJsZSIvPi4gT3RoZXIgd2lu ZG93IGZ1bmN0aW9ucyBjYW4gYmUgYWRkZWQgYnkKICAgICB0aGUgdXNlci4gIEFsc28sIGFueSBi dWlsdC1pbiBvciB1c2VyLWRlZmluZWQgZ2VuZXJhbC1wdXJwb3NlIG9yCiAgICAgc3RhdGlzdGlj YWwgYWdncmVnYXRlIGNhbiBiZSB1c2VkIGFzIGEgd2luZG93IGZ1bmN0aW9uLiAgKE9yZGVyZWQt c2V0CiAgICAgYW5kIGh5cG90aGV0aWNhbC1zZXQgYWdncmVnYXRlcyBjYW5ub3QgcHJlc2VudGx5 IGJlIHVzZWQgYXMgd2luZG93IGZ1bmN0aW9ucy4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJl cy50eHQKaW5kZXggZWJlODUzMzdjMjguLjNhOGFkMjAxNjA3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9z cWxfZmVhdHVyZXMudHh0CkBAIC01MTgsNyArNTE4LDcgQEAgVDYxMglBZHZhbmNlZCBPTEFQIG9w ZXJhdGlvbnMJCQlZRVMKIFQ2MTMJU2FtcGxpbmcJCQlZRVMJCiBUNjE0CU5USUxFIGZ1bmN0aW9u CQkJWUVTCQogVDYxNQlMRUFEIGFuZCBMQUcgZnVuY3Rpb25zCQkJWUVTCQotVDYxNglOdWxsIHRy ZWF0bWVudCBvcHRpb24gZm9yIExFQUQgYW5kIExBRyBmdW5jdGlvbnMJCQlOTwkKK1Q2MTYJTnVs bCB0cmVhdG1lbnQgb3B0aW9uIGZvciBMRUFEIGFuZCBMQUcgZnVuY3Rpb25zCQkJWUVTCQogVDYx NwlGSVJTVF9WQUxVRSBhbmQgTEFTVF9WQUxVRSBmdW5jdGlvbnMJCQlZRVMJCiBUNjE4CU5USF9W QUxVRSBmdW5jdGlvbgkJCU5PCWZ1bmN0aW9uIGV4aXN0cywgYnV0IHNvbWUgb3B0aW9ucyBtaXNz aW5nCiBUNjE5CU5lc3RlZCB3aW5kb3cgZnVuY3Rpb25zCQkJTk8JCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlV2luZG93QWdnLmMKaW5kZXggOWExYWNjZTJiNWQuLmJhNDBjZGU1NTBjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC02OSw2ICs2OSw5IEBAIHR5cGVkZWYgc3RydWN0 IFdpbmRvd09iamVjdERhdGEKIAlpbnQJCQlyZWFkcHRyOwkJLyogdHVwbGVzdG9yZSByZWFkIHBv aW50ZXIgZm9yIHRoaXMgZm4gKi8KIAlpbnQ2NAkJbWFya3BvczsJCS8qIHJvdyB0aGF0IG1hcmtw dHIgaXMgcG9zaXRpb25lZCBvbiAqLwogCWludDY0CQlzZWVrcG9zOwkJLyogcm93IHRoYXQgcmVh ZHB0ciBpcyBwb3NpdGlvbmVkIG9uICovCisJdWludDgJICAgKm5vdG51bGxfaW5mbzsJLyogbm90 IG51bGwgaW5mbyAqLworCWludAkJCW51bV9ub3RudWxsX2luZm87CS8qIHRyYWNrIHNpemUgb2Yg dGhlIG5vdG51bGxfaW5mbyBhcnJheSAqLworCWludAkJCWlnbm9yZV9udWxsczsJLyogaWdub3Jl IG51bGxzICovCiB9IFdpbmRvd09iamVjdERhdGE7CiAKIC8qCkBAIC05Niw2ICs5OSw3IEBAIHR5 cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVyRnVuY0RhdGEKIAogCWJvb2wJCXBsYWluX2FnZzsJ CS8qIGlzIGl0IGp1c3QgYSBwbGFpbiBhZ2dyZWdhdGUgZnVuY3Rpb24/ICovCiAJaW50CQkJYWdn bm87CQkJLyogaWYgc28sIGluZGV4IG9mIGl0cyBXaW5kb3dTdGF0ZVBlckFnZ0RhdGEgKi8KKwlp bnQJCQlpZ25vcmVfbnVsbHM7CS8qIGlnbm9yZSBudWxscyAqLwogCiAJV2luZG93T2JqZWN0IHdp bm9iajsJCS8qIG9iamVjdCB1c2VkIGluIHdpbmRvdyBmdW5jdGlvbiBBUEkgKi8KIH0JCQlXaW5k b3dTdGF0ZVBlckZ1bmNEYXRhOwpAQCAtMTk4LDYgKzIwMiwzMyBAQCBzdGF0aWMgYm9vbCBhcmVf cGVlcnMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdDEsCiBz dGF0aWMgYm9vbCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0 IHBvcywKIAkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCitzdGF0aWMgRGF0dW0gaWdu b3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25v LAorCQkJCQkJCQkJCSAgIGludCByZWxwb3MsIGludCBzZWVrdHlwZSwKKwkJCQkJCQkJCQkgICBi b29sIHNldF9tYXJrLCBib29sICppc251bGwsCisJCQkJCQkJCQkJICAgYm9vbCAqaXNvdXQpOwor c3RhdGljIERhdHVtIGdldHR1cGxlX2V2YWxfcGFydGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmos IGludCBhcmdubywKKwkJCQkJCQkJCSBpbnQ2NCBhYnNfcG9zLCBib29sICppc251bGwsIGJvb2wg Kmlzb3V0KTsKK3N0YXRpYyB2b2lkIGluaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5v YmopOworc3RhdGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwg aW50NjQgcG9zKTsKK3N0YXRpYyB1aW50OCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmosIGludDY0IHBvcyk7CitzdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdpbmRvd09i amVjdCB3aW5vYmosIGludDY0IHBvcywgYm9vbCBpc251bGwpOworCisvKgorICogTm90IG51bGwg aW5mbyBiaXQgYXJyYXkgY29uc2lzdHMgb2YgMi1iaXQgaXRlbXMKKyAqLworI2RlZmluZQlOTl9V TktOT1dOCTB4MDAJCS8qIHZhbHVlIG5vdCBjYWxjdWxhdGVkIHlldCAqLworI2RlZmluZQlOTl9O VUxMCQkweDAxCQkvKiBOVUxMICovCisjZGVmaW5lCU5OX05PVE5VTEwJMHgwMgkJLyogTk9UIE5V TEwgKi8KKyNkZWZpbmUJTk5fTUFTSwkJMHgwMwkJLyogbWFzayBmb3IgTk9UIE5VTEwgTUFQICov CisjZGVmaW5lIE5OX0JJVFNfUEVSX01FTUJFUgkyCS8qIG51bWJlciBvZiBiaXQgaW4gbm90IG51 bGwgbWFwICovCisvKiBudW1iZXIgb2YgaXRlbXMgcGVyIHZhcmlhYmxlICovCisjZGVmaW5lIE5O X0lURU1fUEVSX1ZBUgkoQklUU19QRVJfQllURSAvIE5OX0JJVFNfUEVSX01FTUJFUikKKy8qIGNv bnZlcnQgbWFwIHBvc2l0aW9uIHRvIGJ5dGUgb2Zmc2V0ICovCisjZGVmaW5lIE5OX1BPU19UT19C WVRFUyhwb3MpCSgocG9zKSAvIE5OX0lURU1fUEVSX1ZBUikKKy8qIGJ5dGVzIG9mZnNldCB0byBt YXAgcG9zaXRpb24gKi8KKyNkZWZpbmUgTk5fQllURVNfVE9fUE9TKGJ5dGVzKQkoKGJ5dGVzKSAq IE5OX0lURU1fUEVSX1ZBUikKKy8qIGNhY3VsYXRlIHNoaWZ0IGJpdHMgKi8KKyNkZWZpbmUJTk5f U0hJRlQocG9zKQkoKHBvcykgJSBOTl9JVEVNX1BFUl9WQVIpICogTk5fQklUU19QRVJfTUVNQkVS CiAKIC8qCiAgKiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtMTI2Myw2ICsxMjk0LDEx IEBAIGJlZ2luX3BhcnRpdGlvbihXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpCiAKIAkJCXdpbm9i ai0+bWFya3BvcyA9IC0xOwogCQkJd2lub2JqLT5zZWVrcG9zID0gLTE7CisKKwkJCS8qIHJlc2V0 IG51bGwgbWFwICovCisJCQlpZiAocGVyZnVuY3N0YXRlLT53aW5vYmotPmlnbm9yZV9udWxscyA9 PSBJR05PUkVfTlVMTFMpCisJCQkJbWVtc2V0KHBlcmZ1bmNzdGF0ZS0+d2lub2JqLT5ub3RudWxs X2luZm8sIDAsCisJCQkJCSAgIE5OX1BPU19UT19CWVRFUyhwZXJmdW5jc3RhdGUtPndpbm9iai0+ bnVtX25vdG51bGxfaW5mbykpOwogCQl9CiAJfQogCkBAIC0yNjE5LDE0ICsyNjU1LDE3IEBAIEV4 ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxh Z3MpCiAJCQllbG9nKEVSUk9SLCAiV2luZG93RnVuYyB3aXRoIHdpbnJlZiAldSBhc3NpZ25lZCB0 byBXaW5kb3dBZ2cgd2l0aCB3aW5yZWYgJXUiLAogCQkJCSB3ZnVuYy0+d2lucmVmLCBub2RlLT53 aW5yZWYpOwogCi0JCS8qIExvb2sgZm9yIGEgcHJldmlvdXMgZHVwbGljYXRlIHdpbmRvdyBmdW5j dGlvbiAqLworCQkvKgorCQkgKiBMb29rIGZvciBhIHByZXZpb3VzIGR1cGxpY2F0ZSB3aW5kb3cg ZnVuY3Rpb24sIHdoaWNoIG5lZWRzIHRoZSBzYW1lCisJCSAqIGlnbm9yZV9udWxscyB2YWx1ZQor CQkgKi8KIAkJZm9yIChpID0gMDsgaSA8PSB3ZnVuY25vOyBpKyspCiAJCXsKIAkJCWlmIChlcXVh bCh3ZnVuYywgcGVyZnVuY1tpXS53ZnVuYykgJiYKIAkJCQkhY29udGFpbl92b2xhdGlsZV9mdW5j dGlvbnMoKE5vZGUgKikgd2Z1bmMpKQogCQkJCWJyZWFrOwogCQl9Ci0JCWlmIChpIDw9IHdmdW5j bm8pCisJCWlmIChpIDw9IHdmdW5jbm8gJiYgd2Z1bmMtPmlnbm9yZV9udWxscyA9PSBwZXJmdW5j W2ldLmlnbm9yZV9udWxscykKIAkJewogCQkJLyogRm91bmQgYSBtYXRjaCB0byBhbiBleGlzdGlu ZyBlbnRyeSwgc28ganVzdCBtYXJrIGl0ICovCiAJCQl3ZnVuY3N0YXRlLT53ZnVuY25vID0gaTsK QEAgLTI2NzksNiArMjcxOCw4IEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQl3aW5vYmotPmFyZ3N0YXRlcyA9IHdmdW5j c3RhdGUtPmFyZ3M7CiAJCQl3aW5vYmotPmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNzdGF0 ZS0+d2lub2JqID0gd2lub2JqOworCQkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+aWdu b3JlX251bGxzOworCQkJaW5pdF9ub3RudWxsX2luZm8od2lub2JqKTsKIAogCQkJLyogSXQncyBh IHJlYWwgd2luZG93IGZ1bmN0aW9uLCBzbyBzZXQgdXAgdG8gY2FsbCBpdC4gKi8KIAkJCWZtZ3Jf aW5mb19jeHQod2Z1bmMtPndpbmZub2lkLCAmcGVyZnVuY3N0YXRlLT5mbGluZm8sCkBAIC0zMjE0 LDEyICszMjU1LDMwOCBAQCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmos IGludDY0IHBvcywgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8q CisgKiBnZXQgdHVwcGxlIGFuZCBldmFsdWF0ZSBpbiBhIHBhcnRpdGlvbgorICovCitzdGF0aWMg RGF0dW0KK2dldHR1cGxlX2V2YWxfcGFydGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBh cmdubywKKwkJCQkJCWludDY0IGFic19wb3MsIGJvb2wgKmlzbnVsbCwgYm9vbCAqaXNvdXQpCit7 CisJV2luZG93QWdnU3RhdGUgKndpbnN0YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsKKwlU dXBsZVRhYmxlU2xvdCAqc2xvdDsKKworCXdpbnN0YXRlID0gd2lub2JqLT53aW5zdGF0ZTsKKwlz bG90ID0gd2luc3RhdGUtPnRlbXBfc2xvdF8xOworCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3 aW5vYmosIGFic19wb3MsIHNsb3QpKQorCXsKKwkJLyogb3V0IG9mIHBhcnRpdGlvbiAqLworCQlp ZiAoaXNvdXQpCisJCQkqaXNvdXQgPSB0cnVlOworCQkqaXNudWxsID0gdHJ1ZTsKKwkJcmV0dXJu IChEYXR1bSkgMDsKKwl9CisKKwlpZiAoaXNvdXQpCisJCSppc291dCA9IGZhbHNlOworCWVjb250 ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OworCWVjb250ZXh0LT5lY3h0X291 dGVydHVwbGUgPSBzbG90OworCXJldHVybiBFeGVjRXZhbEV4cHIoKEV4cHJTdGF0ZSAqKSBsaXN0 X250aCh3aW5vYmotPmFyZ3N0YXRlcywgYXJnbm8pLAorCQkJCQkJZWNvbnRleHQsIGlzbnVsbCk7 Cit9CisKKy8qCisgKiBpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZQorICogRm9yIElHTk9S RSBOVUxMUywgZ2V0IHRoZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIGZyYW1lLCBtb3Zpbmcg Zm9yd2FyZAorICogb3IgYmFja3dhcmQgdW50aWwgd2UgZmluZCBhIHZhbHVlIG9yIHJlYWNoIHRo ZSBmcmFtZSdzIGVuZC4KKyAqLworc3RhdGljIERhdHVtCitpZ25vcmVudWxsc19nZXRmdW5jYXJn aW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCisJCQkJCQkJICBpbnQgcmVs cG9zLCBpbnQgc2Vla3R5cGUsIGJvb2wgc2V0X21hcmssCisJCQkJCQkJICBib29sICppc251bGws IGJvb2wgKmlzb3V0KQoreworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZTsKKwlFeHByQ29udGV4 dCAqZWNvbnRleHQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJRGF0dW0JCWRhdHVtOworCWlu dDY0CQlhYnNfcG9zOworCWludDY0CQltYXJrX3BvczsKKwlpbnQJCQlub3RudWxsX29mZnNldDsK KwlpbnQJCQlub3RudWxsX3JlbHBvczsKKwlpbnQJCQlmb3J3YXJkOworCWludAkJCWZyYW1lT3B0 aW9uczsKKworCUFzc2VydChXaW5kb3dPYmplY3RJc1ZhbGlkKHdpbm9iaikpOworCXdpbnN0YXRl ID0gd2lub2JqLT53aW5zdGF0ZTsKKwllY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHBy Q29udGV4dDsKKwlzbG90ID0gd2luc3RhdGUtPnRlbXBfc2xvdF8xOworCWRhdHVtID0gKERhdHVt KSAwOworCW5vdG51bGxfb2Zmc2V0ID0gMDsKKwlub3RudWxsX3JlbHBvcyA9IGFicyhyZWxwb3Mp OworCWZyYW1lT3B0aW9ucyA9IHdpbnN0YXRlLT5mcmFtZU9wdGlvbnM7CisKKwlzd2l0Y2ggKHNl ZWt0eXBlKQorCXsKKwkJY2FzZSBXSU5ET1dfU0VFS19DVVJSRU5UOgorCQkJZWxvZyhFUlJPUiwg IldJTkRPV19TRUVLX0NVUlJFTlQgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luR2V0RnVuY0FyZ0lu RnJhbWUiKTsKKwkJCWFic19wb3MgPSBtYXJrX3BvcyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KKwkJCWJyZWFrOworCQljYXNlIFdJTkRPV19TRUVLX0hFQUQ6CisJCQkvKiByZWplY3Rp bmcgcmVscG9zIDwgMCBpcyBlYXN5IGFuZCBzaW1wbGlmaWVzIGNvZGUgYmVsb3cgKi8KKwkJCWlm IChyZWxwb3MgPCAwKQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJdXBkYXRlX2ZyYW1laGVh ZHBvcyh3aW5zdGF0ZSk7CisJCQlhYnNfcG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJ CW1hcmtfcG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJCWZvcndhcmQgPSAxOworCQkJ YnJlYWs7CisJCWNhc2UgV0lORE9XX1NFRUtfVEFJTDoKKwkJCS8qIHJlamVjdGluZyByZWxwb3Mg PiAwIGlzIGVhc3kgYW5kIHNpbXBsaWZpZXMgY29kZSBiZWxvdyAqLworCQkJaWYgKHJlbHBvcyA+ IDApCisJCQkJZ290byBvdXRfb2ZfZnJhbWU7CisJCQl1cGRhdGVfZnJhbWV0YWlscG9zKHdpbnN0 YXRlKTsKKwkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJhbWV0YWlscG9zIC0gMTsKKwkJCW1hcmtf cG9zID0gMDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWZvcndhcmQgPSAtMTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB3aW5kb3cg c2VlayB0eXBlOiAlZCIsIHNlZWt0eXBlKTsKKwkJCWFic19wb3MgPSBtYXJrX3BvcyA9IDA7IC8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICogR2V0IHRo ZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIGZyYW1lLCBtb3ZpbmcgZm9yd2FyZCBvciBiYWNr d2FyZAorCSAqIHVudGlsIHdlIGZpbmQgYSB2YWx1ZSBvciByZWFjaCB0aGUgZnJhbWUncyBlbmQu CisJICovCisJZG8KKwl7CisJCWludAkJCWluZnJhbWU7CisJCWludAkJCXY7CisJCWJvb2wJCWdv dHR1cGxlID0gZmFsc2U7CisKKwkJLyoKKwkJICogQ2hlY2sgYXBwYXJlbnQgb3V0IG9mIGZyYW1l IGNhc2UuICBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3ZQorCQkgKiBtYXkgbm90IGNhbGwg d2luZG93X2dldHR1cGxlc2xvdCBiZWZvcmUgcm93X2lzX2luX2ZyYW1lLCB3aGljaAorCQkgKiBz dXBwb3NlcyBhYnNfcG9zIGlzIG5ldmVyIG5lZ2F0aXZlLgorCQkgKi8KKwkJaWYgKGFic19wb3Mg PCAwKQorCQkJZ290byBvdXRfb2ZfZnJhbWU7CisKKwkJLyoKKwkJICogcm93X2lzX2luX2ZyYW1l IHJlcXVpcmVzIHNsb3QgaWYgZm9sbG93aW5nIGZyYW1lIG9wdGlvbnMgYXJlIHNldC4KKwkJICov CisJCWlmIChmcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElPTl9FTkRfQ1VSUkVOVF9ST1cgJiYKKwkJ CWZyYW1lT3B0aW9ucyAmIChGUkFNRU9QVElPTl9SQU5HRSB8IEZSQU1FT1BUSU9OX0dST1VQUykp CisJCXsKKwkJCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmosIGFic19wb3MsIHNsb3Qp KQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJZ290dHVwbGUgPSB0cnVlOworCQl9CisKKwkJ LyogY2hlY2sgd2hldGhlciByb3cgaXMgaW4gZnJhbWUgKi8KKwkJaW5mcmFtZSA9IHJvd19pc19p bl9mcmFtZSh3aW5zdGF0ZSwgYWJzX3Bvcywgc2xvdCk7CisJCWlmIChpbmZyYW1lID09IC0xKQor CQkJZ290byBvdXRfb2ZfZnJhbWU7CisJCWVsc2UgaWYgKGluZnJhbWUgPT0gMCkKKwkJCWdvdG8g YWR2YW5jZTsKKworCQlpZiAoaXNvdXQpCisJCQkqaXNvdXQgPSBmYWxzZTsKKworCQl2ID0gZ2V0 X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MpOworCQlpZiAodiA9PSBOTl9OVUxMKQkJLyog dGhpcyByb3cgaXMga25vd24gdG8gYmUgTlVMTCAqLworCQkJZ290byBhZHZhbmNlOworCisJCWVs c2UgaWYgKHYgPT0gTk5fVU5LTk9XTikJLyogbmVlZCB0byBjaGVjayBOVUxMIG9yIG5vdCAqLwor CQl7CisJCQlpZiAoIWdvdHR1cGxlKQorCQkJeworCQkJCWlmICghd2luZG93X2dldHR1cGxlc2xv dCh3aW5vYmosIGFic19wb3MsIHNsb3QpKQorCQkJCQlnb3RvIG91dF9vZl9mcmFtZTsKKwkJCX0K KwkJCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OworCQkJZGF0dW0gPSBFeGVjRXZh bEV4cHIoCisJCQkJCQkJCSAoRXhwclN0YXRlICopIGxpc3RfbnRoKHdpbm9iai0+YXJnc3RhdGVz LCBhcmdubyksCisJCQkJCQkJCSBlY29udGV4dCwgaXNudWxsKTsKKwkJCWlmICghKmlzbnVsbCkK KwkJCQlub3RudWxsX29mZnNldCsrOworCisJCQkvKiByZWNvcmQgdGhlIHJvdyBzdGF0dXMgKi8K KwkJCXB1dF9ub3RudWxsX2luZm8od2lub2JqLCBhYnNfcG9zLCAqaXNudWxsKTsKKwkJfQorCQll bHNlCQkJCQkvKiB0aGlzIHJvdyBpcyBrbm93biB0byBiZSBOT1QgTlVMTCAqLworCQl7CisJCQlu b3RudWxsX29mZnNldCsrOworCQkJaWYgKG5vdG51bGxfb2Zmc2V0ID4gbm90bnVsbF9yZWxwb3Mp CisJCQl7CisJCQkJLyogdG8gcHJlcGFyZSBleGl0aW5nIHRoaXMgbG9vcCwgZGF0dW0gbmVlZHMg dG8gYmUgc2V0ICovCisJCQkJaWYgKCFnb3R0dXBsZSkKKwkJCQl7CisJCQkJCWlmICghd2luZG93 X2dldHR1cGxlc2xvdCh3aW5vYmosIGFic19wb3MsIHNsb3QpKQorCQkJCQkJZ290byBvdXRfb2Zf ZnJhbWU7CisJCQkJfQorCQkJCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OworCQkJ CWRhdHVtID0gRXhlY0V2YWxFeHByKAorCQkJCQkJCQkJIChFeHByU3RhdGUgKikgbGlzdF9udGgo d2lub2JqLT5hcmdzdGF0ZXMsIGFyZ25vKSwKKwkJCQkJCQkJCSBlY29udGV4dCwgaXNudWxsKTsK KwkJCX0KKwkJfQorYWR2YW5jZToKKwkJYWJzX3BvcyArPSBmb3J3YXJkOworCX0gd2hpbGUgKG5v dG51bGxfb2Zmc2V0IDw9IG5vdG51bGxfcmVscG9zKTsKKworCWlmIChzZXRfbWFyaykKKwkJV2lu U2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwgbWFya19wb3MpOworCisJcmV0dXJuIGRhdHVtOworCitv dXRfb2ZfZnJhbWU6CisJaWYgKGlzb3V0KQorCQkqaXNvdXQgPSB0cnVlOworCSppc251bGwgPSB0 cnVlOworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKKworLyoKKyAqIGluaXRfbm90bnVsbF9pbmZv CisgKiBJbml0aWFsaXplIG5vbiBudWxsIG1hcC4KKyAqLworc3RhdGljIHZvaWQKK2luaXRfbm90 bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmopCit7CisjZGVmaW5lCUlOSVRfTk9UX05VTExf SU5GT19OVU0JMTI4IC8qIGluaXRpYWwgbnVtYmVyIG9mIG5vdG51bGwgaW5mbyBtZW1iZXJzICov CisKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gUEFSU0VSX0lHTk9SRV9OVUxMUykKKwl7 CisJCVNpemUJCXNpemUgPSBOTl9QT1NfVE9fQllURVMoSU5JVF9OT1RfTlVMTF9JTkZPX05VTSk7 CisKKwkJd2lub2JqLT5ub3RudWxsX2luZm8gPSBwYWxsb2MwKHNpemUpOworCQl3aW5vYmotPm51 bV9ub3RudWxsX2luZm8gPSBJTklUX05PVF9OVUxMX0lORk9fTlVNOworCX0KK30KKworLyoKKyAq IGdyb3dfbm90bnVsbF9pbmZvCisgKiBleHBhbmQgbm90bnVsbF9pbmZvIGlmIG5lY2Vzc2FyeS4K KyAqIHBvczogbm90IG51bGwgaW5mbyBwb3NpdGlvbgorKi8KK3N0YXRpYyB2b2lkCitncm93X25v dG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCit7CisJaWYgKHBvcyA+ PSB3aW5vYmotPm51bV9ub3RudWxsX2luZm8pCisJeworCQlmb3IgKDs7KQorCQl7CisJCQlTaXpl CQlvbGRzaXplID0gTk5fUE9TX1RPX0JZVEVTKHdpbm9iai0+bnVtX25vdG51bGxfaW5mbyk7CisJ CQlTaXplCQluZXdzaXplID0gb2xkc2l6ZSAqIDI7CisKKwkJCXdpbm9iai0+bm90bnVsbF9pbmZv ID0KKwkJCQlyZXBhbGxvYzAod2lub2JqLT5ub3RudWxsX2luZm8sIG9sZHNpemUsIG5ld3NpemUp OworCQkJd2lub2JqLT5udW1fbm90bnVsbF9pbmZvID0gTk5fQllURVNfVE9fUE9TKG5ld3NpemUp OworCQkJaWYgKHdpbm9iai0+bnVtX25vdG51bGxfaW5mbyA+IHBvcykKKwkJCQlicmVhazsKKwkJ fQorCX0KK30KKworLyoKKyAqIGdldF9ub3RudWxsX2luZm8KKyAqIHJldHJpZXZlIGEgbWFwCisg KiBwb3M6IG1hcCBwb3NpdGlvbgorICovCitzdGF0aWMgdWludDgKK2dldF9ub3RudWxsX2luZm8o V2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zKQoreworCXVpbnQ4CQltYjsKKwlpbnQ2NAkJ YnBvczsKKworCWdyb3dfbm90bnVsbF9pbmZvKHdpbm9iaiwgcG9zKTsKKwlicG9zID0gTk5fUE9T X1RPX0JZVEVTKHBvcyk7CisJbWIgPSB3aW5vYmotPm5vdG51bGxfaW5mb1ticG9zXTsKKwlyZXR1 cm4gKG1iID4+IChOTl9TSElGVChwb3MpKSkgJiBOTl9NQVNLOworfQorCisvKgorICogcHV0X25v dG51bGxfaW5mbworICogdXBkYXRlIG1hcAorICogcG9zOiBtYXAgcG9zaXRpb24KKyAqLworc3Rh dGljIHZvaWQKK3B1dF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9z LCBib29sIGlzbnVsbCkKK3sKKwl1aW50OAkJbWI7CisJaW50NjQJCWJwb3M7CisJdWludDgJCXZh bCA9IGlzbnVsbCA/IE5OX05VTEwgOiBOTl9OT1ROVUxMOworCWludAkJCXNoaWZ0OworCisJZ3Jv d19ub3RudWxsX2luZm8od2lub2JqLCBwb3MpOworCWJwb3MgPSBOTl9QT1NfVE9fQllURVMocG9z KTsKKwltYiA9IHdpbm9iai0+bm90bnVsbF9pbmZvW2Jwb3NdOworCXNoaWZ0ID0gTk5fU0hJRlQo cG9zKTsKKwltYiAmPSB+KE5OX01BU0sgPDwgc2hpZnQpOwkvKiBjbGVhciBtYXAgKi8KKwltYiB8 PSAodmFsIDw8IHNoaWZ0KTsJCS8qIHVwZGF0ZSBtYXAgKi8KKwl3aW5vYmotPm5vdG51bGxfaW5m b1ticG9zXSA9IG1iOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFQSSBleHBvc2VkIHRvIHdp bmRvdyBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCisvKgorICogV2luQ2hlY2tBbmRJ bml0aWFsaXplTnVsbFRyZWF0bWVudAorICoJCUNoZWNrIG51bGwgdHJlYXRtZW50IGNsYXVzZSBh bmQgc2V0cyBpZ25vcmVfbnVsbHMKKyAqCisgKiBXaW5kb3cgZnVuY3Rpb25zIHNob3VsZCBjYWxs IHRoaXMgdG8gY2hlY2sgaWYgdGhleSBhcmUgYmVpbmcgY2FsbGVkIHdpdGgKKyAqIGEgbnVsbCB0 cmVhdG1lbnQgY2xhdXNlIHdoZW4gdGhleSBkb24ndCBhbGxvdyBpdCwgb3IgdG8gc2V0IGlnbm9y ZV9udWxscy4KKyAqLwordm9pZAorV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudChX aW5kb3dPYmplY3Qgd2lub2JqLAorCQkJCQkJCQkgICBib29sIGFsbG93TnVsbFRyZWF0bWVudCwK KwkJCQkJCQkJICAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCit7CisJaWYgKHdpbm9iai0+aWdu b3JlX251bGxzICE9IE5PX05VTExUUkVBVE1FTlQgJiYgIWFsbG93TnVsbFRyZWF0bWVudCkKKwl7 CisJCUhlYXBUdXBsZQlwcm9jdHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCU9pZAkJ CWZ1bmNpZDsKKworCQlmdW5jaWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOworCQlwcm9jdHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShm dW5jaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uICV1IiwgZnVuY2lkKTsKKwkJcHJv Y2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisJCWVsb2coRVJST1Is ICJmdW5jdGlvbiAlcyBkb2VzIG5vdCBhbGxvdyBSRVNQRUNUL0lHTk9SRSBOVUxMUyIsCisJCQkg TmFtZVN0cihwcm9jZm9ybS0+cHJvbmFtZSkpOworCX0KKwllbHNlIGlmICh3aW5vYmotPmlnbm9y ZV9udWxscyA9PSBQQVJTRVJfSUdOT1JFX05VTExTKQorCQl3aW5vYmotPmlnbm9yZV9udWxscyA9 IElHTk9SRV9OVUxMUzsKKworfQorCiAvKgogICogV2luR2V0UGFydGl0aW9uTG9jYWxNZW1vcnkK ICAqCQlHZXQgd29ya2luZyBtZW1vcnkgdGhhdCBsaXZlcyB0aWxsIGVuZCBvZiBwYXJ0aXRpb24g cHJvY2Vzc2luZwpAQCAtMzM3OCwyMyArMzcxNSwzNyBAQCBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRp b24oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJCQkJIGJvb2wgKmlzbnVsbCwg Ym9vbCAqaXNvdXQpCiB7CiAJV2luZG93QWdnU3RhdGUgKndpbnN0YXRlOwotCUV4cHJDb250ZXh0 ICplY29udGV4dDsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlib29sCQlnb3R0dXBsZTsKIAlp bnQ2NAkJYWJzX3BvczsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJbnVsbF90cmVhdG1lbnQgPSBm YWxzZTsKKwlpbnQJCQlub3RudWxsX29mZnNldDsKKwlpbnQJCQlub3RudWxsX3JlbHBvczsKKwlp bnQJCQlmb3J3YXJkOwogCiAJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSk7CiAJ d2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOwotCWVjb250ZXh0ID0gd2luc3RhdGUtPnNzLnBz LnBzX0V4cHJDb250ZXh0OwotCXNsb3QgPSB3aW5zdGF0ZS0+dGVtcF9zbG90XzE7CisKKwlpZiAo d2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JFX05VTExTICYmIHJlbHBvcyAhPSAwKQorCXsK KwkJbnVsbF90cmVhdG1lbnQgPSB0cnVlOworCQlub3RudWxsX29mZnNldCA9IDA7CisJCW5vdG51 bGxfcmVscG9zID0gYWJzKHJlbHBvcyk7CisJCWZvcndhcmQgPSByZWxwb3MgPiAwID8gMSA6IC0x OworCX0KIAogCXN3aXRjaCAoc2Vla3R5cGUpCiAJewogCQljYXNlIFdJTkRPV19TRUVLX0NVUlJF TlQ6Ci0JCQlhYnNfcG9zID0gd2luc3RhdGUtPmN1cnJlbnRwb3MgKyByZWxwb3M7CisJCQlpZiAo bnVsbF90cmVhdG1lbnQpCisJCQkJYWJzX3BvcyA9IHdpbnN0YXRlLT5jdXJyZW50cG9zOworCQkJ ZWxzZQorCQkJCWFic19wb3MgPSB3aW5zdGF0ZS0+Y3VycmVudHBvcyArIHJlbHBvczsKIAkJCWJy ZWFrOwogCQljYXNlIFdJTkRPV19TRUVLX0hFQUQ6Ci0JCQlhYnNfcG9zID0gcmVscG9zOworCQkJ aWYgKG51bGxfdHJlYXRtZW50KQorCQkJCWFic19wb3MgPSAwOworCQkJZWxzZQorCQkJCWFic19w b3MgPSByZWxwb3M7CiAJCQlicmVhazsKIAkJY2FzZSBXSU5ET1dfU0VFS19UQUlMOgogCQkJc3Bv b2xfdHVwbGVzKHdpbnN0YXRlLCAtMSk7CkBAIC0zNDA2LDI1ICszNzU3LDU3IEBAIFdpbkdldEZ1 bmNBcmdJblBhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCQlicmVh azsKIAl9CiAKLQlnb3R0dXBsZSA9IHdpbmRvd19nZXR0dXBsZXNsb3Qod2lub2JqLCBhYnNfcG9z LCBzbG90KTsKLQotCWlmICghZ290dHVwbGUpCisJaWYgKCFudWxsX3RyZWF0bWVudCkJCS8qIElH Tk9SRSBOVUxMUyBpcyBub3Qgc3BlY2lmaWVkICovCiAJewotCQlpZiAoaXNvdXQpCi0JCQkqaXNv dXQgPSB0cnVlOwotCQkqaXNudWxsID0gdHJ1ZTsKLQkJcmV0dXJuIChEYXR1bSkgMDsKLQl9Ci0J ZWxzZQotCXsKLQkJaWYgKGlzb3V0KQotCQkJKmlzb3V0ID0gZmFsc2U7Ci0JCWlmIChzZXRfbWFy aykKKwkJZGF0dW0gPSBnZXR0dXBsZV9ldmFsX3BhcnRpdGlvbih3aW5vYmosIGFyZ25vLAorCQkJ CQkJCQkJCWFic19wb3MsIGlzbnVsbCwgaXNvdXQpOworCQlpZiAoISppc291dCAmJiBzZXRfbWFy aykKIAkJCVdpblNldE1hcmtQb3NpdGlvbih3aW5vYmosIGFic19wb3MpOwotCQllY29udGV4dC0+ ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKLQkJcmV0dXJuIEV4ZWNFdmFsRXhwcigoRXhwclN0YXRl ICopIGxpc3RfbnRoKHdpbm9iai0+YXJnc3RhdGVzLCBhcmdubyksCi0JCQkJCQkJZWNvbnRleHQs IGlzbnVsbCk7CisJCXJldHVybiBkYXR1bTsKIAl9CisKKwkvKgorCSAqIEdldCB0aGUgbmV4dCBu b25udWxsIHZhbHVlIGluIHRoZSBwYXJ0aXRpb24sIG1vdmluZyBmb3J3YXJkIG9yIGJhY2t3YXJk CisJICogdW50aWwgd2UgZmluZCBhIHZhbHVlIG9yIHJlYWNoIHRoZSBwYXJ0aXRpb24ncyBlbmQu CisJICovCisJZG8KKwl7CisJCWFic19wb3MgKz0gZm9yd2FyZDsKKwkJc3dpdGNoIChnZXRfbm90 bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcykpCisJCXsKKwkJCWNhc2UgTk5fTk9UTlVMTDoJLyog dGhpcyByb3cgaXMga25vd24gdG8gYmUgTk9UIE5VTEwgKi8KKwkJCQlub3RudWxsX29mZnNldCsr OworCQkJCWlmIChub3RudWxsX29mZnNldCA+PSBub3RudWxsX3JlbHBvcykKKwkJCQl7CisJCQkJ CS8qIHByZXBhcmUgdG8gZXhpdCB0aGlzIGxvb3AgKi8KKwkJCQkJZGF0dW0gPSBnZXR0dXBsZV9l dmFsX3BhcnRpdGlvbih3aW5vYmosIGFyZ25vLAorCQkJCQkJCQkJCQkJCWFic19wb3MsIGlzbnVs bCwgaXNvdXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTk5fTlVMTDoJCS8qIHRoaXMg cm93IGlzIGtub3duIHRvIGJlIE5VTEwgKi8KKwkJCQlpZiAoaXNvdXQpCisJCQkJCSppc291dCA9 IGZhbHNlOworCQkJCSppc251bGwgPSB0cnVlOworCQkJCWRhdHVtID0gMDsKKwkJCQlicmVhazsK KwkJCWRlZmF1bHQ6CQkJLyogbmVlZCB0byBjaGVjayBOVUxMIG9yIG5vdCAqLworCQkJCWRhdHVt ID0gZ2V0dHVwbGVfZXZhbF9wYXJ0aXRpb24od2lub2JqLCBhcmdubywKKwkJCQkJCQkJCQkJCWFi c19wb3MsIGlzbnVsbCwgaXNvdXQpOworCQkJCWlmICgqaXNvdXQpCQkvKiBvdXQgb2YgcGFydGl0 aW9uPyAqLworCQkJCQlyZXR1cm4gZGF0dW07CisKKwkJCQlpZiAoISppc251bGwpCisJCQkJCW5v dG51bGxfb2Zmc2V0Kys7CisJCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVzICovCisJCQkJcHV0 X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MsICppc251bGwpOworCQkJCWJyZWFrOworCQl9 CisJfSB3aGlsZSAobm90bnVsbF9vZmZzZXQgPCBub3RudWxsX3JlbHBvcyk7CisKKwlpZiAoISpp c291dCAmJiBzZXRfbWFyaykKKwkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwgYWJzX3Bvcyk7 CisKKwlyZXR1cm4gZGF0dW07CiB9CiAKIC8qCkBAIC0zNDc2LDYgKzM4NTksMTAgQEAgV2luR2V0 RnVuY0FyZ0luRnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCWVjb250ZXh0 ID0gd2luc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OwogCXNsb3QgPSB3aW5zdGF0ZS0+dGVt cF9zbG90XzE7CiAKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JFX05VTExTKQor CQlyZXR1cm4gaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUod2lub2JqLCBhcmdubywgcmVs cG9zLCBzZWVrdHlwZSwKKwkJCQkJCQkJCQkJIHNldF9tYXJrLCBpc251bGwsIGlzb3V0KTsKKwog CXN3aXRjaCAoc2Vla3R5cGUpCiAJewogCQljYXNlIFdJTkRPV19TRUVLX0NVUlJFTlQ6CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggMjZhM2UwNTAwODYuLjk3MDVjOGVmMmU4 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC0yNTcyLDYgKzI1NzIsNyBA QCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQluZXdleHBy LT53aW5yZWYgPSBleHByLT53aW5yZWY7CiAJCQkJbmV3ZXhwci0+d2luc3RhciA9IGV4cHItPndp bnN0YXI7CiAJCQkJbmV3ZXhwci0+d2luYWdnID0gZXhwci0+d2luYWdnOworCQkJCW5ld2V4cHIt Pmlnbm9yZV9udWxscyA9IGV4cHItPmlnbm9yZV9udWxsczsKIAkJCQluZXdleHByLT5sb2NhdGlv biA9IGV4cHItPmxvY2F0aW9uOwogCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld2V4cHI7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dy YW0ueQppbmRleCA1MGY1MzE1OWQ1OC4uNTQ3YjdmN2U0NjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpAQCAtNjMx LDcgKzYzMSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8bGlzdD4Jd2luZG93 X2NsYXVzZSB3aW5kb3dfZGVmaW5pdGlvbl9saXN0IG9wdF9wYXJ0aXRpb25fY2xhdXNlCiAldHlw ZSA8d2luZGVmPgl3aW5kb3dfZGVmaW5pdGlvbiBvdmVyX2NsYXVzZSB3aW5kb3dfc3BlY2lmaWNh dGlvbgogCQkJCW9wdF9mcmFtZV9jbGF1c2UgZnJhbWVfZXh0ZW50IGZyYW1lX2JvdW5kCi0ldHlw ZSA8aXZhbD4Jb3B0X3dpbmRvd19leGNsdXNpb25fY2xhdXNlCisldHlwZSA8aXZhbD4JbnVsbF90 cmVhdG1lbnQgb3B0X3dpbmRvd19leGNsdXNpb25fY2xhdXNlCiAldHlwZSA8c3RyPgkJb3B0X2V4 aXN0aW5nX3dpbmRvd19uYW1lCiAldHlwZSA8Ym9vbGVhbj4gb3B0X2lmX25vdF9leGlzdHMKICV0 eXBlIDxib29sZWFuPiBvcHRfdW5pcXVlX251bGxfdHJlYXRtZW50CkBAIC03MjksNyArNzI5LDcg QEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUhBTkRMRVIgSEFWSU5HIEhFQURFUl9QIEhP TEQgSE9VUl9QCiAKLQlJREVOVElUWV9QIElGX1AgSUxJS0UgSU1NRURJQVRFIElNTVVUQUJMRSBJ TVBMSUNJVF9QIElNUE9SVF9QIElOX1AgSU5DTFVERQorCUlERU5USVRZX1AgSUZfUCBJR05PUkVf UCBJTElLRSBJTU1FRElBVEUgSU1NVVRBQkxFIElNUExJQ0lUX1AgSU1QT1JUX1AgSU5fUCBJTkNM VURFCiAJSU5DTFVESU5HIElOQ1JFTUVOVCBJTkRFTlQgSU5ERVggSU5ERVhFUyBJTkhFUklUIElO SEVSSVRTIElOSVRJQUxMWSBJTkxJTkVfUAogCUlOTkVSX1AgSU5PVVQgSU5QVVRfUCBJTlNFTlNJ VElWRSBJTlNFUlQgSU5TVEVBRCBJTlRfUCBJTlRFR0VSCiAJSU5URVJTRUNUIElOVEVSVkFMIElO VE8gSU5WT0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCkBAIC03NjQsNyArNzY0LDcgQEAgc3RhdGlj IE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFz ZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCVJBTkdFIFJFQUQgUkVBTCBSRUFTU0lHTiBSRUNVUlNJVkUg UkVGX1AgUkVGRVJFTkNFUyBSRUZFUkVOQ0lORwogCVJFRlJFU0ggUkVJTkRFWCBSRUxBVElWRV9Q IFJFTEVBU0UgUkVOQU1FIFJFUEVBVEFCTEUgUkVQTEFDRSBSRVBMSUNBCi0JUkVTRVQgUkVTVEFS VCBSRVNUUklDVCBSRVRVUk4gUkVUVVJOSU5HIFJFVFVSTlMgUkVWT0tFIFJJR0hUIFJPTEUgUk9M TEJBQ0sgUk9MTFVQCisJUkVTRVQgUkVTUEVDVF9QIFJFU1RBUlQgUkVTVFJJQ1QgUkVUVVJOIFJF VFVSTklORyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExVUAogCVJPVVRJ TkUgUk9VVElORVMgUk9XIFJPV1MgUlVMRQogCiAJU0FWRVBPSU5UIFNDQUxBUiBTQ0hFTUEgU0NI RU1BUyBTQ1JPTEwgU0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVApAQCAtMTU3MzgsNyAr MTU3MzgsNyBAQCBmdW5jX2FwcGxpY2F0aW9uOiBmdW5jX25hbWUgJygnICcpJwogICogKE5vdGUg dGhhdCBtYW55IG9mIHRoZSBzcGVjaWFsIFNRTCBmdW5jdGlvbnMgd291bGRuJ3QgYWN0dWFsbHkg bWFrZSBhbnkKICAqIHNlbnNlIGFzIGZ1bmN0aW9uYWwgaW5kZXggZW50cmllcywgYnV0IHdlIGln bm9yZSB0aGF0IGNvbnNpZGVyYXRpb24gaGVyZS4pCiAgKi8KLWZ1bmNfZXhwcjogZnVuY19hcHBs aWNhdGlvbiB3aXRoaW5fZ3JvdXBfY2xhdXNlIGZpbHRlcl9jbGF1c2Ugb3Zlcl9jbGF1c2UKK2Z1 bmNfZXhwcjogZnVuY19hcHBsaWNhdGlvbiB3aXRoaW5fZ3JvdXBfY2xhdXNlIGZpbHRlcl9jbGF1 c2UgbnVsbF90cmVhdG1lbnQgb3Zlcl9jbGF1c2UKIAkJCQl7CiAJCQkJCUZ1bmNDYWxsICAgKm4g PSAoRnVuY0NhbGwgKikgJDE7CiAKQEAgLTE1NzcxLDcgKzE1NzcxLDggQEAgZnVuY19leHByOiBm dW5jX2FwcGxpY2F0aW9uIHdpdGhpbl9ncm91cF9jbGF1c2UgZmlsdGVyX2NsYXVzZSBvdmVyX2Ns YXVzZQogCQkJCQkJbi0+YWdnX3dpdGhpbl9ncm91cCA9IHRydWU7CiAJCQkJCX0KIAkJCQkJbi0+ YWdnX2ZpbHRlciA9ICQzOwotCQkJCQluLT5vdmVyID0gJDQ7CisJCQkJCW4tPmlnbm9yZV9udWxs cyA9ICQ0OworCQkJCQluLT5vdmVyID0gJDU7CiAJCQkJCSQkID0gKE5vZGUgKikgbjsKIAkJCQl9 CiAJCQl8IGpzb25fYWdncmVnYXRlX2Z1bmMgZmlsdGVyX2NsYXVzZSBvdmVyX2NsYXVzZQpAQCAt MTYzNjcsNiArMTYzNjgsMTIgQEAgZmlsdGVyX2NsYXVzZToKIC8qCiAgKiBXaW5kb3cgRGVmaW5p dGlvbnMKICAqLworbnVsbF90cmVhdG1lbnQ6CisJCQlJR05PUkVfUCBOVUxMU19QCQkJCQkJeyAk JCA9IFBBUlNFUl9JR05PUkVfTlVMTFM7IH0KKwkJCXwgUkVTUEVDVF9QIE5VTExTX1AJCQkJCQl7 ICQkID0gUEFSU0VSX1JFU1BFQ1RfTlVMTFM7IH0KKwkJCXwgLypFTVBUWSovCQkJCQkJCQl7ICQk ID0gTk9fTlVMTFRSRUFUTUVOVDsgfQorCQk7CisKIHdpbmRvd19jbGF1c2U6CiAJCQlXSU5ET1cg d2luZG93X2RlZmluaXRpb25fbGlzdAkJCXsgJCQgPSAkMjsgfQogCQkJfCAvKkVNUFRZKi8JCQkJ CQkJCXsgJCQgPSBOSUw7IH0KQEAgLTE3NzkzLDYgKzE3ODAwLDcgQEAgdW5yZXNlcnZlZF9rZXl3 b3JkOgogCQkJfCBIT1VSX1AKIAkJCXwgSURFTlRJVFlfUAogCQkJfCBJRl9QCisJCQl8IElHTk9S RV9QCiAJCQl8IElNTUVESUFURQogCQkJfCBJTU1VVEFCTEUKIAkJCXwgSU1QTElDSVRfUApAQCAt MTc5MTEsNiArMTc5MTksNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFJFUExBQ0UKIAkJ CXwgUkVQTElDQQogCQkJfCBSRVNFVAorCQkJfCBSRVNQRUNUX1AKIAkJCXwgUkVTVEFSVAogCQkJ fCBSRVNUUklDVAogCQkJfCBSRVRVUk4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9mdW5jLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCmluZGV4IDU4M2Ji YmYyMzJmLi4zNzcyYzUxNGIxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2Z1bmMuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCkBAIC05OCw2ICs5 OCw3IEBAIFBhcnNlRnVuY09yQ29sdW1uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqZnVuY25h bWUsIExpc3QgKmZhcmdzLAogCWJvb2wJCWFnZ19zdGFyID0gKGZuID8gZm4tPmFnZ19zdGFyIDog ZmFsc2UpOwogCWJvb2wJCWFnZ19kaXN0aW5jdCA9IChmbiA/IGZuLT5hZ2dfZGlzdGluY3QgOiBm YWxzZSk7CiAJYm9vbAkJZnVuY192YXJpYWRpYyA9IChmbiA/IGZuLT5mdW5jX3ZhcmlhZGljIDog ZmFsc2UpOworCWludAkJCWlnbm9yZV9udWxscyA9IChmbiA/IGZuLT5pZ25vcmVfbnVsbHMgOiAw KTsKIAlDb2VyY2lvbkZvcm0gZnVuY2Zvcm1hdCA9IChmbiA/IGZuLT5mdW5jZm9ybWF0IDogQ09F UkNFX0VYUExJQ0lUX0NBTEwpOwogCWJvb2wJCWNvdWxkX2JlX3Byb2plY3Rpb247CiAJT2lkCQkJ cmV0dHlwZTsKQEAgLTUxNCw2ICs1MTUsMTMgQEAgUGFyc2VGdW5jT3JDb2x1bW4oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJCQkJCQkgZXJybXNnKCIl cyBpcyBub3QgYW4gb3JkZXJlZC1zZXQgYWdncmVnYXRlLCBzbyBpdCBjYW5ub3QgaGF2ZSBXSVRI SU4gR1JPVVAiLAogCQkJCQkJCQlOYW1lTGlzdFRvU3RyaW5nKGZ1bmNuYW1lKSksCiAJCQkJCQkg cGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisKKwkJCS8qIEl0IGFsc28g Y2FuJ3QgdHJlYXQgbnVsbHMgYXMgYSB3aW5kb3cgZnVuY3Rpb24gKi8KKwkJCWlmIChpZ25vcmVf bnVsbHMgIT0gTk9fTlVMTFRSRUFUTUVOVCkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkgZXJybXNnKCJhZ2dyZWdh dGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVTUEVDVC9JR05PUkUgTlVMTFMiKSwKKwkJCQkJ CSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKIAkJfQogCX0KIAllbHNl IGlmIChmZHJlc3VsdCA9PSBGVU5DREVUQUlMX1dJTkRPV0ZVTkMpCkBAIC04MzQsNiArODQyLDcg QEAgUGFyc2VGdW5jT3JDb2x1bW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpmdW5jbmFtZSwg TGlzdCAqZmFyZ3MsCiAJCXdmdW5jLT53aW5zdGFyID0gYWdnX3N0YXI7CiAJCXdmdW5jLT53aW5h Z2cgPSAoZmRyZXN1bHQgPT0gRlVOQ0RFVEFJTF9BR0dSRUdBVEUpOwogCQl3ZnVuYy0+YWdnZmls dGVyID0gYWdnX2ZpbHRlcjsKKwkJd2Z1bmMtPmlnbm9yZV9udWxscyA9IGlnbm9yZV9udWxsczsK IAkJd2Z1bmMtPnJ1bkNvbmRpdGlvbiA9IE5JTDsKIAkJd2Z1bmMtPmxvY2F0aW9uID0gbG9jYXRp b247CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAzZDZlNmJkYmZkMi4uNGU4Mzdk MmFmZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTExMDkwLDcgKzExMDkwLDEy IEBAIGdldF93aW5kb3dmdW5jX2V4cHJfaGVscGVyKFdpbmRvd0Z1bmMgKndmdW5jLCBkZXBhcnNl X2NvbnRleHQgKmNvbnRleHQsCiAJCWdldF9ydWxlX2V4cHIoKE5vZGUgKikgd2Z1bmMtPmFnZ2Zp bHRlciwgY29udGV4dCwgZmFsc2UpOwogCX0KIAotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiKSBPVkVSICIpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiKSAiKTsKKworCWlm ICh3ZnVuYy0+aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVMTFMpCisJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCAiSUdOT1JFIE5VTExTICIpOworCisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJPVkVSICIpOwogCiAJaWYgKGNvbnRleHQtPndpbmRvd0NsYXVzZSkKIAl7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jCmluZGV4IGJiMzVmM2JjNGE5Li45NjlmMDJh YTU5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKQEAgLTg2LDYgKzg2LDcgQEAg d2luZG93X3Jvd19udW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlXaW5kb3dPYmplY3Qgd2lub2Jq ID0gUEdfV0lORE9XX09CSkVDVCgpOwogCWludDY0CQljdXJwb3MgPSBXaW5HZXRDdXJyZW50UG9z aXRpb24od2lub2JqKTsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lu b2JqLCBmYWxzZSwgZmNpbmZvKTsKIAlXaW5TZXRNYXJrUG9zaXRpb24od2lub2JqLCBjdXJwb3Mp OwogCVBHX1JFVFVSTl9JTlQ2NChjdXJwb3MgKyAxKTsKIH0KQEAgLTE0MSw2ICsxNDIsNyBAQCB3 aW5kb3dfcmFuayhQR19GVU5DVElPTl9BUkdTKQogCXJhbmtfY29udGV4dCAqY29udGV4dDsKIAli b29sCQl1cDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCBm YWxzZSwgZmNpbmZvKTsKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJhbmtf Y29udGV4dCAqKQogCQlXaW5HZXRQYXJ0aXRpb25Mb2NhbE1lbW9yeSh3aW5vYmosIHNpemVvZihy YW5rX2NvbnRleHQpKTsKQEAgLTIwMyw2ICsyMDUsNyBAQCB3aW5kb3dfZGVuc2VfcmFuayhQR19G VU5DVElPTl9BUkdTKQogCXJhbmtfY29udGV4dCAqY29udGV4dDsKIAlib29sCQl1cDsKIAorCVdp bkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCBmYWxzZSwgZmNpbmZvKTsK IAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJhbmtfY29udGV4dCAqKQogCQlX aW5HZXRQYXJ0aXRpb25Mb2NhbE1lbW9yeSh3aW5vYmosIHNpemVvZihyYW5rX2NvbnRleHQpKTsK QEAgLTI2Niw2ICsyNjksNyBAQCB3aW5kb3dfcGVyY2VudF9yYW5rKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJaW50NjQJCXRvdGFscm93cyA9IFdpbkdldFBhcnRpdGlvblJvd0NvdW50KHdpbm9iaik7CiAK IAlBc3NlcnQodG90YWxyb3dzID4gMCk7CisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0 bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCiAJdXAgPSByYW5rX3VwKHdpbm9iaik7CiAJ Y29udGV4dCA9IChyYW5rX2NvbnRleHQgKikKQEAgLTMzNSw2ICszMzksNyBAQCB3aW5kb3dfY3Vt ZV9kaXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW50NjQJCXRvdGFscm93cyA9IFdpbkdldFBhcnRp dGlvblJvd0NvdW50KHdpbm9iaik7CiAKIAlBc3NlcnQodG90YWxyb3dzID4gMCk7CisJV2luQ2hl Y2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCiAJ dXAgPSByYW5rX3VwKHdpbm9iaik7CiAJY29udGV4dCA9IChyYW5rX2NvbnRleHQgKikKQEAgLTQx Myw2ICs0MTgsNyBAQCB3aW5kb3dfbnRpbGUoUEdfRlVOQ1RJT05fQVJHUykKIAlXaW5kb3dPYmpl Y3Qgd2lub2JqID0gUEdfV0lORE9XX09CSkVDVCgpOwogCW50aWxlX2NvbnRleHQgKmNvbnRleHQ7 CiAKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwgZmFsc2UsIGZj aW5mbyk7CiAJY29udGV4dCA9IChudGlsZV9jb250ZXh0ICopCiAJCVdpbkdldFBhcnRpdGlvbkxv Y2FsTWVtb3J5KHdpbm9iaiwgc2l6ZW9mKG50aWxlX2NvbnRleHQpKTsKIApAQCAtNTM1LDYgKzU0 MSw3IEBAIGxlYWRsYWdfY29tbW9uKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCWJvb2wJCWlz bnVsbDsKIAlib29sCQlpc291dDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1l bnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCWlmICh3aXRob2Zmc2V0KQogCXsKIAkJb2Zmc2V0 ID0gRGF0dW1HZXRJbnQzMihXaW5HZXRGdW5jQXJnQ3VycmVudCh3aW5vYmosIDEsICZpc251bGwp KTsKQEAgLTY1Miw2ICs2NTksNyBAQCB3aW5kb3dfZmlyc3RfdmFsdWUoUEdfRlVOQ1RJT05fQVJH UykKIAlEYXR1bQkJcmVzdWx0OwogCWJvb2wJCWlzbnVsbDsKIAorCVdpbkNoZWNrQW5kSW5pdGlh bGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCXJlc3VsdCA9IFdpbkdl dEZ1bmNBcmdJbkZyYW1lKHdpbm9iaiwgMCwKIAkJCQkJCQkJICAwLCBXSU5ET1dfU0VFS19IRUFE LCB0cnVlLAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwpAQCAtNjczLDYgKzY4MSw3IEBAIHdp bmRvd19sYXN0X3ZhbHVlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJRGF0dW0JCXJlc3VsdDsKIAlib29s CQlpc251bGw7CiAKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwg dHJ1ZSwgZmNpbmZvKTsKIAlyZXN1bHQgPSBXaW5HZXRGdW5jQXJnSW5GcmFtZSh3aW5vYmosIDAs CiAJCQkJCQkJCSAgMCwgV0lORE9XX1NFRUtfVEFJTCwgdHJ1ZSwKIAkJCQkJCQkJICAmaXNudWxs LCBOVUxMKTsKQEAgLTY5Niw2ICs3MDUsNyBAQCB3aW5kb3dfbnRoX3ZhbHVlKFBHX0ZVTkNUSU9O X0FSR1MpCiAJYm9vbAkJaXNudWxsOwogCWludDMyCQludGg7CiAKKwlXaW5DaGVja0FuZEluaXRp YWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwgdHJ1ZSwgZmNpbmZvKTsKIAludGggPSBEYXR1bUdl dEludDMyKFdpbkdldEZ1bmNBcmdDdXJyZW50KHdpbm9iaiwgMSwgJmlzbnVsbCkpOwogCWlmIChp c251bGwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggYmEx MjY3OGQxY2IuLjhiZWRhZjJmNzUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJz ZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00NTIsNiAr NDUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRnVuY0NhbGwKIAlMaXN0CSAgICphZ2dfb3JkZXI7CQkv KiBPUkRFUiBCWSAobGlzdCBvZiBTb3J0QnkpICovCiAJTm9kZQkgICAqYWdnX2ZpbHRlcjsJCS8q IEZJTFRFUiBjbGF1c2UsIGlmIGFueSAqLwogCXN0cnVjdCBXaW5kb3dEZWYgKm92ZXI7CQkvKiBP VkVSIGNsYXVzZSwgaWYgYW55ICovCisJaW50CQkJaWdub3JlX251bGxzOwkvKiBpZ25vcmUgbnVs bHMgZm9yIHdpbmRvdyBmdW5jdGlvbiAqLwogCWJvb2wJCWFnZ193aXRoaW5fZ3JvdXA7CS8qIE9S REVSIEJZIGFwcGVhcmVkIGluIFdJVEhJTiBHUk9VUCAqLwogCWJvb2wJCWFnZ19zdGFyOwkJLyog YXJndW1lbnQgd2FzIHJlYWxseSAnKicgKi8KIAlib29sCQlhZ2dfZGlzdGluY3Q7CS8qIGFyZ3Vt ZW50cyB3ZXJlIGxhYmVsZWQgRElTVElOQ1QgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25v ZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggNmRm Y2EzY2IzNWIuLmU5ZDhiZjc0MTQ1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmlt bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtNTc5LDYgKzU3 OSwxNyBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1bmMKICAqIENvbGxhdGlvbiBpbmZvcm1h dGlvbiBpcyBpcnJlbGV2YW50IGZvciB0aGUgcXVlcnkganVtYmxpbmcsIGFzIGlzIHRoZQogICog aW50ZXJuYWwgc3RhdGUgaW5mb3JtYXRpb24gb2YgdGhlIG5vZGUgbGlrZSAid2luc3RhciIgYW5k ICJ3aW5hZ2ciLgogICovCisKKy8qCisgKiBOdWxsIFRyZWF0bWVudCBvcHRpb25zLiBJZiBzcGVj aWZpZWQsIGluaXRpYWxseSBzZXQgdG8gUEFSU0VSX0lHTk9SRV9OVUxMUworICogd2hpY2ggaXMg dGhlbiBjb252ZXJ0ZWQgdG8gSUdOT1JFX05VTExTIGlmIHRoZSB3aW5kb3cgZnVuY3Rpb24gYWxs b3dzIHRoZQorICogbnVsbCB0cmVhdG1lbnQgY2xhdXNlLgorICovCisjZGVmaW5lIE5PX05VTExU UkVBVE1FTlQgMAorI2RlZmluZSBQQVJTRVJfSUdOT1JFX05VTExTIDEKKyNkZWZpbmUgUEFSU0VS X1JFU1BFQ1RfTlVMTFMgMgorI2RlZmluZSBJR05PUkVfTlVMTFMgMworCiB0eXBlZGVmIHN0cnVj dCBXaW5kb3dGdW5jCiB7CiAJRXhwcgkJeHByOwpAQCAtNjAyLDYgKzYxMyw4IEBAIHR5cGVkZWYg c3RydWN0IFdpbmRvd0Z1bmMKIAlib29sCQl3aW5zdGFyIHBnX25vZGVfYXR0cihxdWVyeV9qdW1i bGVfaWdub3JlKTsKIAkvKiBpcyBmdW5jdGlvbiBhIHNpbXBsZSBhZ2dyZWdhdGU/ICovCiAJYm9v bAkJd2luYWdnIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKwkvKiBpZ25vcmUg bnVsbHMuIE9uZSBvZiB0aGUgTnVsbCBUcmVhdG1lbnQgb3B0aW9ucyAqLworCWludAkJCWlnbm9y ZV9udWxsczsKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogCVBhcnNl TG9jCWxvY2F0aW9uOwogfSBXaW5kb3dGdW5jOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFy c2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4IGE0YWYzZjcx N2ExLi44NDE4MmVhYWFlMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5o CisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMjAyLDYgKzIwMiw3IEBAIFBH X0tFWVdPUkQoImhvbGQiLCBIT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJob3VyIiwgSE9VUl9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQog UEdfS0VZV09SRCgiaWRlbnRpdHkiLCBJREVOVElUWV9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpZiIsIElGX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFS RV9MQUJFTCkKK1BHX0tFWVdPUkQoImlnbm9yZSIsIElHTk9SRV9QLCBVTlJFU0VSVkVEX0tFWVdP UkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgiaWxpa2UiLCBJTElLRSwgVFlQRV9GVU5DX05BTUVf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImltbWVkaWF0ZSIsIElNTUVESUFURSwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiaW1tdXRhYmxlIiwg SU1NVVRBQkxFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0zNzgsNiArMzc5 LDcgQEAgUEdfS0VZV09SRCgicmVwZWF0YWJsZSIsIFJFUEVBVEFCTEUsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlcGxhY2UiLCBSRVBMQUNFLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZXBsaWNhIiwgUkVQTElDQSwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVzZXQiLCBSRVNF VCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgicmVzcGVjdCIs IFJFU1BFQ1RfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdPUkQoInJl c3RhcnQiLCBSRVNUQVJULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJyZXN0cmljdCIsIFJFU1RSSUNULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJyZXR1cm4iLCBSRVRVUk4sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3dpbmRvd2FwaS5oIGIvc3JjL2luY2x1ZGUv d2luZG93YXBpLmgKaW5kZXggY2IyZWNlMTY2YjYuLjIwY2ZkOWU5ZGQ5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS93aW5kb3dhcGkuaAorKysgYi9zcmMvaW5jbHVkZS93aW5kb3dhcGkuaApAQCAt MjgsNiArMjgsOCBAQAogI2lmbmRlZiBXSU5ET1dBUElfSAogI2RlZmluZSBXSU5ET1dBUElfSAog CisjaW5jbHVkZSAiZm1nci5oIgorCiAvKiB2YWx1ZXMgb2YgInNlZWt0eXBlIiAqLwogI2RlZmlu ZSBXSU5ET1dfU0VFS19DVVJSRU5UIDAKICNkZWZpbmUgV0lORE9XX1NFRUtfSEVBRCAxCkBAIC00 MSw2ICs0MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dPYmplY3REYXRhICpXaW5kb3dPYmpl Y3Q7CiAjZGVmaW5lIFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSBcCiAJKCh3aW5vYmopICE9 IE5VTEwgJiYgSXNBKHdpbm9iaiwgV2luZG93T2JqZWN0RGF0YSkpCiAKK2V4dGVybiB2b2lkIFdp bkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQoV2luZG93T2JqZWN0IHdpbm9iaiwKKwkJ CQkJCQkJCQkJICAgYm9vbCBhbGxvd051bGxUcmVhdG1lbnQsCisJCQkJCQkJCQkJCSAgIEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvKTsKKwogZXh0ZXJuIHZvaWQgKldpbkdldFBhcnRpdGlvbkxvY2Fs TWVtb3J5KFdpbmRvd09iamVjdCB3aW5vYmosIFNpemUgc3opOwogCiBleHRlcm4gaW50NjQgV2lu R2V0Q3VycmVudFBvc2l0aW9uKFdpbmRvd09iamVjdCB3aW5vYmopOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC93aW5kb3cub3V0CmluZGV4IGI4NmI2NjhmNDMzLi5mOTI5ZDgxYmM4YSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dApAQCAtNTQ1MywzICs1NDUzLDMxNCBAQCBTRUxFQ1Qg KiBGUk9NIHBnX3RlbXAuZigyKTsKICB7NX0KICg1IHJvd3MpCiAKKy0tIElHTk9SRSBOVUxMUyB0 ZXN0cworQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwbGFuZXRzICgKKyAgICBuYW1lIHRleHQsCisg ICAgZGlzdGFuY2UgdGV4dCwKKyAgICBvcmJpdCBpbnRlZ2VyCispOworSU5TRVJUIElOVE8gcGxh bmV0cyBWQUxVRVMKKyAgKCdtZXJjdXJ5JywgJ2Nsb3NlJywgODgpLAorICAoJ3ZlbnVzJywgJ2Ns b3NlJywgMjI0KSwKKyAgKCdlYXJ0aCcsICdjbG9zZScsIE5VTEwpLAorICAoJ21hcnMnLCAnY2xv c2UnLCBOVUxMKSwKKyAgKCdqdXBpdGVyJywgJ2Nsb3NlJywgNDMzMiksCisgICgnc2F0dXJuJywg J2ZhcicsIDI0NDkxKSwKKyAgKCd1cmFudXMnLCAnZmFyJywgTlVMTCksCisgICgnbmVwdHVuZScs ICdmYXInLCA2MDE4MiksCisgICgncGx1dG8nLCAnZmFyJywgOTA1NjApLAorICAoJ3h5enp5Jywg J2ZhcicsIE5VTEwpOworLS0gdGVzdCBydWxldXRpbHMKK0NSRUFURSBWSUVXIHBsYW5ldHNfdmll dyBBUworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9yYml0KSBPVkVS IHcgQVMgbGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcgQVMgbGFn X3Jlc3BlY3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19p Z25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpCis7CitOT1RJ Q0U6ICB2aWV3ICJwbGFuZXRzX3ZpZXciIHdpbGwgYmUgYSB0ZW1wb3JhcnkgdmlldworU0VMRUNU IHBnX2dldF92aWV3ZGVmKCdwbGFuZXRzX3ZpZXcnKTsKKyAgICAgICAgICAgICAgICAgIHBnX2dl dF92aWV3ZGVmICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTRUxFQ1QgbmFtZSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgb3JiaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArCisgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZywgICAgICAgICAgICAg ICAgICAgKworICAgICBsYWcob3JiaXQpIE9WRVIgdyBBUyBsYWdfcmVzcGVjdCwgICAgICAgICAg ICsKKyAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUrCisg ICAgRlJPTSBwbGFuZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgV0lO RE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpOworKDEgcm93KQorCistLSBsYWcKK1NFTEVDVCBuYW1l LAorICAgICAgIG9yYml0LAorICAgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZywKKyAgICAg ICBsYWcob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3IEFTIGxhZ19yZXNwZWN0LAorICAgICAg IGxhZyhvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5l dHMKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lKQorOworICBuYW1lICAgfCBvcmJpdCB8ICBs YWcgIHwgbGFnX3Jlc3BlY3QgfCBsYWdfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgCisganVwaXRlciB8ICA0MzMyIHwgICAgICAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAKKyBtYXJzICAgIHwgICAgICAgfCAgNDMzMiB8ICAgICAgICA0 MzMyIHwgICAgICAgNDMzMgorIG1lcmN1cnkgfCAgICA4OCB8ICAgICAgIHwgICAgICAgICAgICAg fCAgICAgICA0MzMyCisgbmVwdHVuZSB8IDYwMTgyIHwgICAgODggfCAgICAgICAgICA4OCB8ICAg ICAgICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCA2MDE4MiB8ICAgICAgIDYwMTgyIHwgICAgICA2 MDE4MgorIHNhdHVybiAgfCAyNDQ5MSB8IDkwNTYwIHwgICAgICAgOTA1NjAgfCAgICAgIDkwNTYw CisgdXJhbnVzICB8ICAgICAgIHwgMjQ0OTEgfCAgICAgICAyNDQ5MSB8ICAgICAgMjQ0OTEKKyB2 ZW51cyAgIHwgICAyMjQgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHh5enp5 ICAgfCAgICAgICB8ICAgMjI0IHwgICAgICAgICAyMjQgfCAgICAgICAgMjI0CisoMTAgcm93cykK KworLS0gbGVhZAorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGVhZChvcmJp dCkgT1ZFUiB3IEFTIGxlYWQsCisgICAgICAgbGVhZChvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVS IHcgQVMgbGVhZF9yZXNwZWN0LAorICAgICAgIGxlYWQob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVS IHcgQVMgbGVhZF9pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5h bWUpCis7CisgIG5hbWUgICB8IG9yYml0IHwgbGVhZCAgfCBsZWFkX3Jlc3BlY3QgfCBsZWFkX2ln bm9yZSAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorIGVhcnRoICAgfCAgICAgICB8ICA0MzMyIHwgICAgICAgICA0MzMyIHwgICAgICAgIDQz MzIKKyBqdXBpdGVyIHwgIDQzMzIgfCAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgIDg4 CisgbWFycyAgICB8ICAgICAgIHwgICAgODggfCAgICAgICAgICAgODggfCAgICAgICAgICA4OAor IG1lcmN1cnkgfCAgICA4OCB8IDYwMTgyIHwgICAgICAgIDYwMTgyIHwgICAgICAgNjAxODIKKyBu ZXB0dW5lIHwgNjAxODIgfCA5MDU2MCB8ICAgICAgICA5MDU2MCB8ICAgICAgIDkwNTYwCisgcGx1 dG8gICB8IDkwNTYwIHwgMjQ0OTEgfCAgICAgICAgMjQ0OTEgfCAgICAgICAyNDQ5MQorIHNhdHVy biAgfCAyNDQ5MSB8ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAyMjQKKyB1cmFudXMg IHwgICAgICAgfCAgIDIyNCB8ICAgICAgICAgIDIyNCB8ICAgICAgICAgMjI0CisgdmVudXMgICB8 ICAgMjI0IHwgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgIAorIHh5enp5ICAgfCAg ICAgICB8ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAKKygxMCByb3dzKQorCist LSBmaXJzdF92YWx1ZQorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3Rf dmFsdWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBmaXJzdF92YWx1ZShv cmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIFJF U1BFQ1QgTlVMTFMgT1ZFUiB3MiwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5V TExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRFUiBCWSBuYW1lIFJP V1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HKSwK KyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5E IDIgRk9MTE9XSU5HKQorOworICBuYW1lICAgfCBvcmJpdCB8IGZpcnN0X3ZhbHVlIHwgZmlyc3Rf dmFsdWUgfCBmaXJzdF92YWx1ZSB8IGZpcnN0X3ZhbHVlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGVh cnRoICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICAgICB8 ICAgICAgICA0MzMyCisganVwaXRlciB8ICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgNDMz MiB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIKKyBtYXJzICAgIHwgICAgICAgfCAgICAgICAg ICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMgorIG1lcmN1cnkg fCAgICA4OCB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgNDMzMiB8ICAgICAg ICA0MzMyCisgbmVwdHVuZSB8IDYwMTgyIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAg ICAgICAgICAgIHwgICAgICAgICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAgICAgICAgICB8 ICAgICAgICA0MzMyIHwgICAgICAgICAgODggfCAgICAgICAgICA4OAorIHNhdHVybiAgfCAyNDQ5 MSB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICA2MDE4MiB8ICAgICAgIDYwMTgy CisgdXJhbnVzICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAgICAgIDkw NTYwIHwgICAgICAgOTA1NjAKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICAgICAgICB8ICAgICAg ICA0MzMyIHwgICAgICAgMjQ0OTEgfCAgICAgICAyNDQ5MQorIHh5enp5ICAgfCAgICAgICB8ICAg ICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICAgICB8ICAgICAgICAgMjI0CisoMTAg cm93cykKKworLS0gbnRoX3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAg ICBudGhfdmFsdWUob3JiaXQsIDIpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBudGhf dmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcxLAorICAgICAgIG50aF92YWx1ZShv cmJpdCwgMikgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwg MikgSUdOT1JFIE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRF UiBCWSBuYW1lIFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQg Rk9MTE9XSU5HKSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQ UkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HKQorOworICBuYW1lICAgfCBvcmJpdCB8IG50aF92YWx1 ZSB8IG50aF92YWx1ZSB8IG50aF92YWx1ZSB8IG50aF92YWx1ZSAKKy0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgZWFydGgg ICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgICA0MzMyIHwgICAgICAgICAg CisganVwaXRlciB8ICA0MzMyIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgICA0MzMyIHwg ICAgICAgIDg4CisgbWFycyAgICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAg ICA0MzMyIHwgICAgICAgIDg4CisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICA0MzMyIHwgICAgICAg IDg4IHwgICAgICAgICAgIHwgICAgICAgIDg4CisgbmVwdHVuZSB8IDYwMTgyIHwgICAgICA0MzMy IHwgICAgICAgIDg4IHwgICAgICAgIDg4IHwgICAgIDYwMTgyCisgcGx1dG8gICB8IDkwNTYwIHwg ICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDYwMTgyIHwgICAgIDYwMTgyCisgc2F0dXJuICB8 IDI0NDkxIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDkwNTYwIHwgICAgIDkwNTYwCisg dXJhbnVzICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDI0NDkxIHwgICAg IDI0NDkxCisgdmVudXMgICB8ICAgMjI0IHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgICAg ICAgIHwgICAgICAgMjI0CisgeHl6enkgICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4 IHwgICAgICAgMjI0IHwgICAgICAgICAgCisoMTAgcm93cykKKworLS0gbGFzdF92YWx1ZQorU0VM RUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgUkVTUEVD VCBOVUxMUyBPVkVSIHcxLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBP VkVSIHcxLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MiwK KyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3MgorRlJPTSBwbGFu ZXRzCitXSU5ET1cgdzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQ UkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFTIChPUkRFUiBC WSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5h bWUgICB8IG9yYml0IHwgbGFzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbGFz dF92YWx1ZSAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgICAgICAgfCAg ICAgICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgIDQzMzIKKyBqdXBpdGVyIHwgIDQzMzIgfCAg ICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgICAgODggfCAgICAgICAgIDg4CisgbWFycyAg ICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgIDYwMTgyIHwgICAgICA2 MDE4MgorIG1lcmN1cnkgfCAgICA4OCB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICA5 MDU2MCB8ICAgICAgOTA1NjAKKyBuZXB0dW5lIHwgNjAxODIgfCAgICAgICAgICAgIHwgICAgICAg IDIyNCB8ICAgICAgMjQ0OTEgfCAgICAgIDI0NDkxCisgcGx1dG8gICB8IDkwNTYwIHwgICAgICAg ICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHNhdHVybiAgfCAy NDQ5MSB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgIDIyNCB8ICAgICAgICAyMjQK KyB1cmFudXMgIHwgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgICAgICAg fCAgICAgICAgMjI0CisgdmVudXMgICB8ICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgICAyMjQg fCAgICAgICAgICAgIHwgICAgICAgIDIyNAorIHh5enp5ICAgfCAgICAgICB8ICAgICAgICAgICAg fCAgICAgICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgICAyMjQKKygxMCByb3dzKQorCistLSBl eGNsdWRlIGN1cnJlbnQgcm93CitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBm aXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsYXN0X3ZhbHVl KG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikg SUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJR05PUkUgTlVMTFMg T1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkgSUdOT1JFIE5VTExT IE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChPUkRFUiBC WSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcgRVhDTFVERSBD VVJSRU5UIFJPVykKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFs dWUgfCBudGhfdmFsdWUgfCBsZWFkX2lnbm9yZSB8IGxhZ19pZ25vcmUgCistLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgNDMz MiB8ICAgICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgIAorIGp1cGl0ZXIgfCAgNDMz MiB8ICAgICAgICAgIDg4IHwgICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwg ICAgICAgICAgIAorIG1hcnMgICAgfCAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICA2MDE4MiB8 ICAgICAgICA4OCB8ICAgICAgICAgIDg4IHwgICAgICAgNDMzMgorIG1lcmN1cnkgfCAgICA4OCB8 ICAgICAgICA0MzMyIHwgICAgICA5MDU2MCB8ICAgICA2MDE4MiB8ICAgICAgIDYwMTgyIHwgICAg ICAgNDMzMgorIG5lcHR1bmUgfCA2MDE4MiB8ICAgICAgICAgIDg4IHwgICAgICAyNDQ5MSB8ICAg ICA5MDU2MCB8ICAgICAgIDkwNTYwIHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2MCB8ICAg ICAgICAgIDg4IHwgICAgICAyNDQ5MSB8ICAgICA2MDE4MiB8ICAgICAgIDI0NDkxIHwgICAgICA2 MDE4MgorIHNhdHVybiAgfCAyNDQ5MSB8ICAgICAgIDYwMTgyIHwgICAgICAgIDIyNCB8ICAgICA5 MDU2MCB8ICAgICAgICAgMjI0IHwgICAgICA5MDU2MAorIHVyYW51cyAgfCAgICAgICB8ICAgICAg IDkwNTYwIHwgICAgICAgIDIyNCB8ICAgICAyNDQ5MSB8ICAgICAgICAgMjI0IHwgICAgICAyNDQ5 MQorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgIDI0NDkxIHwgICAgICAyNDQ5MSB8ICAgICAgICAg ICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHh5enp5ICAgfCAgICAgICB8ICAgICAgICAg MjI0IHwgICAgICAgIDIyNCB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDIyNAor KDEwIHJvd3MpCisKKy0tIHZhbGlkIGFuZCBpbnZhbGlkIGZ1bmN0aW9ucworU0VMRUNUIHN1bShv cmJpdCkgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIHN1Y2NlZWRzCisgIHN1bSAgIAorLS0tLS0t LS0KKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcK KyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKygxMCByb3dzKQorCitTRUxFQ1Qg c3VtKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscwor RVJST1I6ICBhZ2dyZWdhdGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVTUEVDVC9JR05PUkUg TlVMTFMKK0xJTkUgMTogU0VMRUNUIHN1bShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSICgpIEZS T00gcGxhbmV0czsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBzdW0ob3JiaXQpIElHTk9SRSBO VUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gZmFpbHMKK0VSUk9SOiAgYWdncmVnYXRlIGZ1 bmN0aW9ucyBkbyBub3QgYWNjZXB0IFJFU1BFQ1QvSUdOT1JFIE5VTExTCitMSU5FIDE6IFNFTEVD VCBzdW0ob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsKKyAgICAgICAg ICAgICAgIF4KK1NFTEVDVCByb3dfbnVtYmVyKCkgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIHN1 Y2NlZWRzCisgcm93X251bWJlciAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEKKyAgICAgICAg ICAyCisgICAgICAgICAgMworICAgICAgICAgIDQKKyAgICAgICAgICA1CisgICAgICAgICAgNgor ICAgICAgICAgIDcKKyAgICAgICAgICA4CisgICAgICAgICAgOQorICAgICAgICAgMTAKKygxMCBy b3dzKQorCitTRUxFQ1Qgcm93X251bWJlcigpIFJFU1BFQ1QgTlVMTFMgT1ZFUiAoKSBGUk9NIHBs YW5ldHM7IC0tIGZhaWxzCitFUlJPUjogIGZ1bmN0aW9uIHJvd19udW1iZXIgZG9lcyBub3QgYWxs b3cgUkVTUEVDVC9JR05PUkUgTlVMTFMKK1NFTEVDVCByb3dfbnVtYmVyKCkgSUdOT1JFIE5VTExT IE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworRVJST1I6ICBmdW5jdGlvbiByb3dfbnVt YmVyIGRvZXMgbm90IGFsbG93IFJFU1BFQ1QvSUdOT1JFIE5VTExTCistLSB0ZXN0IHR3byBjb25z ZWN1dGl2ZSBudWxscwordXBkYXRlIHBsYW5ldHMgc2V0IG9yYml0PW51bGwgd2hlcmUgbmFtZT0n anVwaXRlcic7CitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBmaXJzdF92YWx1 ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBJ R05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5V TExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFT IGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBB UyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lIFJP V1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUgICB8IG9y Yml0IHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3ZhbHVlIHwgbGVhZF9pZ25vcmUg fCBsYWdfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBlYXJ0aCAgIHwgICAg ICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICA4OCB8 ICAgICAgICAgICAKKyBqdXBpdGVyIHwgICAgICAgfCAgICAgICAgICA4OCB8ICAgICAgICAgODgg fCAgICAgICAgICAgfCAgICAgICAgICA4OCB8ICAgICAgICAgICAKKyBtYXJzICAgIHwgICAgICAg fCAgICAgICAgICA4OCB8ICAgICAgNjAxODIgfCAgICAgNjAxODIgfCAgICAgICAgICA4OCB8ICAg ICAgICAgICAKKyBtZXJjdXJ5IHwgICAgODggfCAgICAgICAgICA4OCB8ICAgICAgOTA1NjAgfCAg ICAgNjAxODIgfCAgICAgICA2MDE4MiB8ICAgICAgICAgICAKKyBuZXB0dW5lIHwgNjAxODIgfCAg ICAgICAgICA4OCB8ICAgICAgMjQ0OTEgfCAgICAgNjAxODIgfCAgICAgICA5MDU2MCB8ICAgICAg ICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAgICAgICA4OCB8ICAgICAgMjQ0OTEgfCAgICAg NjAxODIgfCAgICAgICAyNDQ5MSB8ICAgICAgNjAxODIKKyBzYXR1cm4gIHwgMjQ0OTEgfCAgICAg ICA2MDE4MiB8ICAgICAgICAyMjQgfCAgICAgOTA1NjAgfCAgICAgICAgIDIyNCB8ICAgICAgOTA1 NjAKKyB1cmFudXMgIHwgICAgICAgfCAgICAgICA5MDU2MCB8ICAgICAgICAyMjQgfCAgICAgMjQ0 OTEgfCAgICAgICAgIDIyNCB8ICAgICAgMjQ0OTEKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICAy NDQ5MSB8ICAgICAgICAyMjQgfCAgICAgICAyMjQgfCAgICAgICAgICAgICB8ICAgICAgMjQ0OTEK KyB4eXp6eSAgIHwgICAgICAgfCAgICAgICAgIDIyNCB8ICAgICAgICAyMjQgfCAgICAgICAgICAg fCAgICAgICAgICAgICB8ICAgICAgICAyMjQKKygxMCByb3dzKQorCistLSB0ZXN0IHBhcnRpdGlv bnMKK1NFTEVDVCBuYW1lLAorICAgICAgIGRpc3RhbmNlLAorICAgICAgIG9yYml0LAorICAgICAg IGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxhc3RfdmFs dWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAy KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxlYWQob3JiaXQsIDEpIElHTk9SRSBOVUxM UyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisgICAgICAgbGFnKG9yYml0LCAxKSBJR05PUkUgTlVM TFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKFBBUlRJ VElPTiBCWSBkaXN0YW5jZSBPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBB TkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUgICB8IGRpc3RhbmNlIHwgb3JiaXQgfCBmaXJzdF92 YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfdmFsdWUgfCBsZWFkX2lnbm9yZSB8IGxhZ19pZ25vcmUg CistLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGggICB8IGNsb3Nl ICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAg ICAgICA4OCB8ICAgICAgICAgICAKKyBqdXBpdGVyIHwgY2xvc2UgICAgfCAgICAgICB8ICAgICAg ICAgIDg4IHwgICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICAg IAorIG1hcnMgICAgfCBjbG9zZSAgICB8ICAgICAgIHwgICAgICAgICAgODggfCAgICAgICAgMjI0 IHwgICAgICAgMjI0IHwgICAgICAgICAgODggfCAgICAgICAgICAgCisgbWVyY3VyeSB8IGNsb3Nl ICAgIHwgICAgODggfCAgICAgICAgICA4OCB8ICAgICAgICAyMjQgfCAgICAgICAyMjQgfCAgICAg ICAgIDIyNCB8ICAgICAgICAgICAKKyB2ZW51cyAgIHwgY2xvc2UgICAgfCAgIDIyNCB8ICAgICAg ICAgIDg4IHwgICAgICAgIDIyNCB8ICAgICAgIDIyNCB8ICAgICAgICAgICAgIHwgICAgICAgICA4 OAorIG5lcHR1bmUgfCBmYXIgICAgICB8IDYwMTgyIHwgICAgICAgNjAxODIgfCAgICAgIDI0NDkx IHwgICAgIDkwNTYwIHwgICAgICAgOTA1NjAgfCAgICAgICAgICAgCisgcGx1dG8gICB8IGZhciAg ICAgIHwgOTA1NjAgfCAgICAgICA2MDE4MiB8ICAgICAgMjQ0OTEgfCAgICAgOTA1NjAgfCAgICAg ICAyNDQ5MSB8ICAgICAgNjAxODIKKyBzYXR1cm4gIHwgZmFyICAgICAgfCAyNDQ5MSB8ICAgICAg IDYwMTgyIHwgICAgICAyNDQ5MSB8ICAgICA5MDU2MCB8ICAgICAgICAgICAgIHwgICAgICA5MDU2 MAorIHVyYW51cyAgfCBmYXIgICAgICB8ICAgICAgIHwgICAgICAgOTA1NjAgfCAgICAgIDI0NDkx IHwgICAgIDI0NDkxIHwgICAgICAgICAgICAgfCAgICAgIDI0NDkxCisgeHl6enkgICB8IGZhciAg ICAgIHwgICAgICAgfCAgICAgICAyNDQ5MSB8ICAgICAgMjQ0OTEgfCAgICAgICAgICAgfCAgICAg ICAgICAgICB8ICAgICAgMjQ0OTEKKygxMCByb3dzKQorCistLSBudGhfdmFsdWUgd2l0aG91dCBu dWxscworU0VMRUNUIHgsCisgICAgICAgbnRoX3ZhbHVlKHgsMikgSUdOT1JFIE5VTExTIE9WRVIg dworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBnKHgpCitXSU5ET1cgdyBBUyAoT1JERVIgQlkg eCBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HIEVYQ0xVREUgQ1VSUkVO VCBST1cpOworIHggfCBudGhfdmFsdWUgCistLS0rLS0tLS0tLS0tLS0KKyAxIHwgICAgICAgICAz CisgMiB8ICAgICAgICAgMworIDMgfCAgICAgICAgIDIKKyA0IHwgICAgICAgICAzCisgNSB8ICAg ICAgICAgNAorKDUgcm93cykKKworU0VMRUNUIHgsCisgICAgICAgbnRoX3ZhbHVlKHgsMikgSUdO T1JFIE5VTExTIE9WRVIgdworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBnKHgpCitXSU5ET1cg dyBBUyAoT1JERVIgQlkgeCBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5H KTsKKyB4IHwgbnRoX3ZhbHVlIAorLS0tKy0tLS0tLS0tLS0tCisgMSB8ICAgICAgICAgMgorIDIg fCAgICAgICAgIDIKKyAzIHwgICAgICAgICAyCisgNCB8ICAgICAgICAgMworIDUgfCAgICAgICAg IDQKKyg1IHJvd3MpCisKKy0tY2xlYW51cAorRFJPUCBUQUJMRSBwbGFuZXRzIENBU0NBREU7CitO T1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHZpZXcgcGxhbmV0c192aWV3CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2lu ZG93LnNxbAppbmRleCAwMmYxMDVmMDcwZS4uMWY4Yzg2Njk0MzYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvd2lu ZG93LnNxbApAQCAtMTk1OCwzICsxOTU4LDE1MCBAQCAkJCBMQU5HVUFHRSBTUUwgU1RBQkxFOwog CiBFWFBMQUlOIChjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gcGdfdGVtcC5mKDIpOwogU0VMRUNU ICogRlJPTSBwZ190ZW1wLmYoMik7CisKKy0tIElHTk9SRSBOVUxMUyB0ZXN0cworCitDUkVBVEUg VEVNUE9SQVJZIFRBQkxFIHBsYW5ldHMgKAorICAgIG5hbWUgdGV4dCwKKyAgICBkaXN0YW5jZSB0 ZXh0LAorICAgIG9yYml0IGludGVnZXIKKyk7CisKK0lOU0VSVCBJTlRPIHBsYW5ldHMgVkFMVUVT CisgICgnbWVyY3VyeScsICdjbG9zZScsIDg4KSwKKyAgKCd2ZW51cycsICdjbG9zZScsIDIyNCks CisgICgnZWFydGgnLCAnY2xvc2UnLCBOVUxMKSwKKyAgKCdtYXJzJywgJ2Nsb3NlJywgTlVMTCks CisgICgnanVwaXRlcicsICdjbG9zZScsIDQzMzIpLAorICAoJ3NhdHVybicsICdmYXInLCAyNDQ5 MSksCisgICgndXJhbnVzJywgJ2ZhcicsIE5VTEwpLAorICAoJ25lcHR1bmUnLCAnZmFyJywgNjAx ODIpLAorICAoJ3BsdXRvJywgJ2ZhcicsIDkwNTYwKSwKKyAgKCd4eXp6eScsICdmYXInLCBOVUxM KTsKKworLS0gdGVzdCBydWxldXRpbHMKK0NSRUFURSBWSUVXIHBsYW5ldHNfdmlldyBBUworU0VM RUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9yYml0KSBPVkVSIHcgQVMgbGFn LAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcgQVMgbGFnX3Jlc3BlY3Qs CisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZS T00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpCis7CitTRUxFQ1QgcGdfZ2V0 X3ZpZXdkZWYoJ3BsYW5ldHNfdmlldycpOworCistLSBsYWcKK1NFTEVDVCBuYW1lLAorICAgICAg IG9yYml0LAorICAgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZywKKyAgICAgICBsYWcob3Ji aXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3IEFTIGxhZ19yZXNwZWN0LAorICAgICAgIGxhZyhvcmJp dCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRP VyB3IEFTIChPUkRFUiBCWSBuYW1lKQorOworCistLSBsZWFkCitTRUxFQ1QgbmFtZSwKKyAgICAg ICBvcmJpdCwKKyAgICAgICBsZWFkKG9yYml0KSBPVkVSIHcgQVMgbGVhZCwKKyAgICAgICBsZWFk KG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdyBBUyBsZWFkX3Jlc3BlY3QsCisgICAgICAgbGVh ZChvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZQorRlJPTSBwbGFuZXRz CitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSkKKzsKKworLS0gZmlyc3RfdmFsdWUKK1NFTEVD VCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBSRVNQRUNU IE5VTExTIE9WRVIgdzEsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBP VkVSIHcxLAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdzIs CisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcyCitGUk9NIHBs YW5ldHMKK1dJTkRPVyB3MSBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gVU5CT1VOREVE IFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORyksCisgICAgICAgdzIgQVMgKE9SREVS IEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKwor LS0gbnRoX3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBudGhfdmFs dWUob3JiaXQsIDIpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBudGhfdmFsdWUob3Ji aXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcxLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikg UkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JF IE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRFUiBCWSBuYW1l IFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5H KSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcg QU5EIDIgRk9MTE9XSU5HKQorOworCistLSBsYXN0X3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAg ICBvcmJpdCwKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdzEs CisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAg bGFzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIGxhc3RfdmFs dWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcyCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3MSBB UyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5C T1VOREVEIEZPTExPV0lORyksCisgICAgICAgdzIgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRX RUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKworLS0gZXhjbHVkZSBjdXJyZW50 IHJvdworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3RfdmFsdWUob3Ji aXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JF IE5VTExTIE9WRVIgdywKKyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBP VkVSIHcsCisgICAgICAgbGVhZChvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFk X2lnbm9yZSwKKyAgICAgICBsYWcob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFn X2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJF VFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HIEVYQ0xVREUgQ1VSUkVOVCBST1cpCis7 CisKKy0tIHZhbGlkIGFuZCBpbnZhbGlkIGZ1bmN0aW9ucworU0VMRUNUIHN1bShvcmJpdCkgT1ZF UiAoKSBGUk9NIHBsYW5ldHM7IC0tIHN1Y2NlZWRzCitTRUxFQ1Qgc3VtKG9yYml0KSBSRVNQRUNU IE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworU0VMRUNUIHN1bShvcmJpdCkg SUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworU0VMRUNUIHJvd19u dW1iZXIoKSBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gc3VjY2VlZHMKK1NFTEVDVCByb3dfbnVt YmVyKCkgUkVTUEVDVCBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gZmFpbHMKK1NFTEVD VCByb3dfbnVtYmVyKCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWls cworCistLSB0ZXN0IHR3byBjb25zZWN1dGl2ZSBudWxscwordXBkYXRlIHBsYW5ldHMgc2V0IG9y Yml0PW51bGwgd2hlcmUgbmFtZT0nanVwaXRlcic7CitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJp dCwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAg ICBsYXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1 ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJ R05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkg SUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3 IEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJ TkcpCis7CisKKy0tIHRlc3QgcGFydGl0aW9ucworU0VMRUNUIG5hbWUsCisgICAgICAgZGlzdGFu Y2UsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxM UyBPVkVSIHcsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywK KyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAg bGVhZChvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZSwKKyAgICAg ICBsYWcob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZQorRlJPTSBw bGFuZXRzCitXSU5ET1cgdyBBUyAoUEFSVElUSU9OIEJZIGRpc3RhbmNlIE9SREVSIEJZIG5hbWUg Uk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKworLS0gbnRoX3Zh bHVlIHdpdGhvdXQgbnVsbHMKK1NFTEVDVCB4LAorICAgICAgIG50aF92YWx1ZSh4LDIpIElHTk9S RSBOVUxMUyBPVkVSIHcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZyh4KQorV0lORE9XIHcg QVMgKE9SREVSIEJZIHggUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORyBF WENMVURFIENVUlJFTlQgUk9XKTsKK1NFTEVDVCB4LAorICAgICAgIG50aF92YWx1ZSh4LDIpIElH Tk9SRSBOVUxMUyBPVkVSIHcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZyh4KQorV0lORE9X IHcgQVMgKE9SREVSIEJZIHggUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lO Ryk7CisKKy0tY2xlYW51cAorRFJPUCBUQUJMRSBwbGFuZXRzIENBU0NBREU7Ci0tIAoyLjI1LjEK Cg== ----Next_Part(Wed_Jun_25_16_19_03_2025_147)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ignore_nulls_bench2.sh" for i in 1000 2000 3000 4000 5000 do echo "$i rows: " pos=`expr $i / 2` psql -a test <