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 1s1K9z-00BIqT-Gr for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Apr 2024 06:06:43 +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 1s1K9w-00FQos-0W for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Apr 2024 06:06:40 +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 1s1K9v-00FQmv-4e for pgsql-hackers@lists.postgresql.org; Mon, 29 Apr 2024 06:06:40 +0000 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s1K9s-000Ypq-9w for pgsql-hackers@postgresql.org; Mon, 29 Apr 2024 06:06:38 +0000 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2e049cfe645so3386191fa.0 for ; Sun, 28 Apr 2024 23:06:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714370793; x=1714975593; darn=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=4R89/GnPizhaND/pCsq6D7u8eLL1fjz4W9XfmwjjhPQ=; b=UhUqGqfgDecCCRaiCu4bSK2pwVvPIyRo3bI+UN6Bc8tVa7EYQBFO3C0+Zb0pY2Cp8J gZNi4BY3DxDW0PLjMLopgtCIShBM9IErRMVqdgoGwEk3c7NJNsdCpGxCuNTRLCA6WXAM nwNcCyKoxhoz8JhQDLv+fAyPv64nk54FFQnOfh4KbNzzAkNfCuWPNxSwiFu9Ade2iXH9 KrKeok/Jfvw82W45VQWK3Ca1E54PVHAVorUNCN6nicji9Iw7cVMIl2pcN2OR63wagzYZ wZ2CiQfnv8HO0/7iKlG3WdznvpI6ONhpgcV853vWzJjH7GDAd1NzzuC6GtqIqOtCZwOV x9Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714370793; x=1714975593; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4R89/GnPizhaND/pCsq6D7u8eLL1fjz4W9XfmwjjhPQ=; b=LE3s0+QpJ7Do6jrDy4wrTN6RwMerPGZVFm4tyg2SQhhZBd1akecNj4R4cdHiAhJ5T2 kQyY508FShXeBdv70k3GzzdKgwHhPWPqqGYakqs2BCv5bHvb6QAwfzEJMZ7frSUwBEys qm30+6uPdsErX/aqo0gKHvQugn5SqVSU8cVx4amzAsD86vayUo1QhkAUsdcgCOrLWxnq o+i7Qf9li92kPl8ceYQdpHSEiQ3E+d2yyOKKG4Kagh+hjo+ZrlNeU5efZGYXGZpOwBIr d3Ex/XF1dpVv/vlMy/v1nM7+TL6W/Lk0tCL4VsYn4HtC/wzcAqYy2920wg7e0M+VuRUP 3f2w== X-Forwarded-Encrypted: i=1; AJvYcCXrnQaliTD1pmZOpuYCtgRHk+AUpMt/6kikQrN5/krAGinH9VdWTq8c6t9CBwLEXoy0On8Jr4/2NrDRNkgt8T55am5mG6sP9mJxsVwj X-Gm-Message-State: AOJu0Yw6S8KerNAUuIFXDzqSLq3CUOM6NfTh/j8QOAYoj4ZUX0jA2I/N BHjxoDOLU8ra1443n1h/vWDzgkFuB0GU+kNsC9RVDs7KQu2SbPMhGoui5VpsJui6oN1354fYIK0 eA0wLYgK0eas79klH2msF38j9bFU= X-Google-Smtp-Source: AGHT+IGc2pR1xCtdeIEBUgbxIP5GoBrQlq+IXi7juHpvey+E6V8e/ehmQBf6ZTJKpY34vRMd7BXOtYeAT5RTIUT1E6M= X-Received: by 2002:a2e:a58f:0:b0:2df:de12:6b11 with SMTP id m15-20020a2ea58f000000b002dfde126b11mr1725735ljp.19.1714370793193; Sun, 28 Apr 2024 23:06:33 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> In-Reply-To: From: Bharath Rupireddy Date: Mon, 29 Apr 2024 11:36:20 +0530 Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM To: Jeff Davis Cc: Masahiko Sawada , PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Michael Paquier , Matthias van de Meent , Alexander Korotkov Content-Type: multipart/mixed; boundary="0000000000002461e00617360ed6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002461e00617360ed6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Apr 25, 2024 at 10:11=E2=80=AFPM Jeff Davis wro= te: > > On Wed, 2024-04-24 at 18:19 +0530, Bharath Rupireddy wrote: > > I added a flush callback named TableModifyBufferFlushCallback; when > > provided by callers invoked after tuples are flushed to disk from the > > buffers but before the AM frees them up. Index insertions and AFTER > > ROW INSERT triggers can be executed in this callback. See the v19- > > 0001 patch for how AM invokes the flush callback, and see either v19- > > 0003 or v19-0004 or v19-0005 for how a caller can supply the callback > > and required context to execute index insertions and AR triggers. > > The flush callback takes a pointer to an array of slot pointers, and I > don't think that's the right API. I think the callback should be called > on each slot individually. > > We shouldn't assume that a table AM stores buffered inserts as an array > of slot pointers. A TupleTableSlot has a fair amount of memory overhead > (64 bytes), so most AMs wouldn't want to pay that overhead for every > tuple. COPY does, but that's because the number of buffered tuples is > fairly small. I get your point. An AM can choose to implement the buffering strategy by just storing the plain tuple rather than the tuple slots in which case the flush callback with an array of tuple slots won't work. Therefore, I now changed the flush callback to accept only a single tuple slot. > > > 11. Deprecate the multi_insert API. > > > > I did remove both table_multi_insert and table_finish_bulk_insert in > > v19-0006. > > That's OK with me. Let's leave those functions out for now. Okay. Dropped the 0006 patch for now. Please see the attached v20 patch set. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000002461e00617360ed6 Content-Type: application/x-patch; name="v20-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Disposition: attachment; filename="v20-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvkk1avx0 RnJvbSAwNmNkNmUyNDJjZDJmYTM1MTRhYTFjNzY1OTZiYzRiNGFkMzMwMDQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjcgQXByIDIwMjQgMTU6NDA6MjcgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMCAxLzVdIEludHJvZHVjZSBuZXcgVGFibGUgQWNjZXNzIE1l dGhvZHMgZm9yIHNpbmdsZSBhbmQKIG11bHRpIGluc2VydHMKCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8IDIwNSArKysrKysrKysrKysrKysrKysrKysrLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICAgNiArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgIHwgIDk3ICsrKysrKysrKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jICAgIHwgIDEwICsrCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDQ0ICsrKysrCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgIHwgMTQ1ICsrKysrKysrKysrKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgfCAgIDMgKwogNyBmaWxlcyBjaGFu Z2VkLCA1MDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKaW5kZXggNGE0Y2Y3NjI2OS4uZmRjNTBjNDJkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnkuaCIKICNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCisjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAtMTEy LDcgKzExMyw3IEBAIHN0YXRpYyBpbnQJYm90dG9tdXBfc29ydF9hbmRfc2hyaW5rKFRNX0luZGV4 RGVsZXRlT3AgKmRlbHN0YXRlKTsKIHN0YXRpYyBYTG9nUmVjUHRyIGxvZ19oZWFwX25ld19jaWQo UmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXApOwogc3RhdGljIEhlYXBUdXBsZSBFeHRy YWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFwVHVwbGUgdHAsIGJvb2wg a2V5X3JlcXVpcmVkLAogCQkJCQkJCQkJCWJvb2wgKmNvcHkpOwotCitzdGF0aWMgdm9pZCBoZWFw X21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKIAog LyoKICAqIEVhY2ggdHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWln aHQgbG9jaywgYW5kIG9uZSBvciB0d28KQEAgLTI2MDgsNiArMjYwOSwyMDggQEAgaGVhcF9tdWx0 aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBu dHVwbGVzLAogCXBnc3RhdF9jb3VudF9oZWFwX2luc2VydChyZWxhdGlvbiwgbnR1cGxlcyk7CiB9 CiAKKy8qCisgKiBJbml0aWFsaXplIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCitUYWJsZU1vZGlm eVN0YXRlICoKK2hlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwgaW50IG1vZGlmeV9mbGFn cywKKwkJCQkgIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCSAgVGFibGVNb2RpZnlC dWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJICB2 b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpCit7CisJVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGU7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKworCWNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250 ZXh0LAorCQkJCQkJCQkJImhlYXBfbW9kaWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCUFM TE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjb250ZXh0KTsKKwlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTW9kaWZ5U3RhdGUp KTsKKwlzdGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5tb2RpZnlfZmxhZ3MgPSBtb2RpZnlfZmxh Z3M7CisJc3RhdGUtPm1lbV9jeHQgPSBjb250ZXh0OworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3Rh dGUtPm9wdGlvbnMgPSBvcHRpb25zOworCXN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxi YWNrID0gbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjazsKKwlzdGF0ZS0+bW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0ID0gbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0OworCXN0YXRlLT5t b2RpZnlfZW5kX2NhbGxiYWNrID0gTlVMTDsJLyogVG8gYmUgaW5zdGFsbGVkIGxhemlseSAqLwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiBzdGF0ZTsKK30K KworLyoKKyAqIFN0b3JlIHBhc3NlZC1pbiB0dXBsZSBpbnRvIGluLW1lbW9yeSBidWZmZXJlZCBz bG90cy4gV2hlbiBmdWxsLCBpbnNlcnQKKyAqIG11bHRpcGxlIHR1cGxlcyBmcm9tIHRoZSBidWZm ZXJzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJs ZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJ VHVwbGVUYWJsZVNsb3QgKmRzdHNsb3Q7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7CisJSGVh cE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0Owor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+bWVtX2N4dCk7CisK KwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgaGVhcCBpbnNlcnQgc3RhdGUgKi8K KwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwl7CisJCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3Rh dGUgKikgcGFsbG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisJCWlzdGF0ZS0+YmlzdGF0 ZSA9IE5VTEw7CisJCWlzdGF0ZS0+bWlzdGF0ZSA9IE5VTEw7CisJCXN0YXRlLT5kYXRhID0gaXN0 YXRlOworCisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRNX0ZMQUdfTVVMVElfSU5TRVJU UykgIT0gMCkKKwkJeworCQkJbWlzdGF0ZSA9IChIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqKSBwYWxs b2MwKHNpemVvZihIZWFwTXVsdGlJbnNlcnRTdGF0ZSkpOworCQkJbWlzdGF0ZS0+c2xvdHMgPSAo VHVwbGVUYWJsZVNsb3QgKiopIHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogSEVB UF9NQVhfQlVGRkVSRURfU0xPVFMpOworCQkJaXN0YXRlLT5taXN0YXRlID0gbWlzdGF0ZTsKKwkJ CW1pc3RhdGUtPm1lbV9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsCisJCQkJCQkJCQkJCQkJICJoZWFwX211bHRpX2luc2VydCBtZW1vcnkgY29udGV4dCIs CisJCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQl9CisKKwkJaWYgKChz dGF0ZS0+bW9kaWZ5X2ZsYWdzICYgVE1fRkxBR19CQVNfQlVMS1dSSVRFKSAhPSAwKQorCQkJaXN0 YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisKKwkJc3RhdGUtPm1vZGlmeV9l bmRfY2FsbGJhY2sgPSBoZWFwX21vZGlmeV9pbnNlcnRfZW5kX2NhbGxiYWNrOworCX0KKworCWlz dGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlzdGF0ZS0+ bWlzdGF0ZSAhPSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJZHN0c2xv dCA9IG1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c107CisJaWYgKGRzdHNsb3QgPT0g TlVMTCkKKwl7CisJCS8qCisJCSAqIFdlIHVzZSB2aXJ0dWFsIHR1cGxlIHNsb3RzIGJ1ZmZlcmVk IHNsb3RzIGZvciBsZXZlcmFnaW5nIHRoZQorCQkgKiBvcHRpbWl6YXRpb24gaXQgcHJvdmlkZXMg dG8gbWluaW1pemUgcGh5c2ljYWwgZGF0YSBjb3B5aW5nLiBUaGUKKwkJICogdmlydHVhbCBzbG90 IGdldHMgbWF0ZXJpYWxpemVkIHdoZW4gd2UgY29weSAodmlhIGJlbG93CisJCSAqIEV4ZWNDb3B5 U2xvdCkgdGhlIHR1cGxlcyBmcm9tIHRoZSBzb3VyY2Ugc2xvdCB3aGljaCBjYW4gYmUgb2YgYW55 CisJCSAqIHR5cGUuIFRoaXMgd2F5LCBpdCBpcyBlbnN1cmVkIHRoYXQgdGhlIHR1cGxlIHN0b3Jh Z2UgZG9lc24ndCBkZXBlbmQKKwkJICogb24gZXh0ZXJuYWwgbWVtb3J5LCBiZWNhdXNlIGFsbCB0 aGUgZGF0dW1zIHRoYXQgYXJlbid0IHBhc3NlZCBieQorCQkgKiB2YWx1ZSBhcmUgY29waWVkIGlu dG8gdGhlIHNsb3QncyBtZW1vcnkgY29udGV4dC4KKwkJICovCisJCWRzdHNsb3QgPSBNYWtlVHVw bGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihzdGF0ZS0+cmVsKSwKKwkJCQkJCQkJCSAmVFRT T3BzVmlydHVhbCk7CisJCW1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c10gPSBkc3Rz bG90OworCX0KKworCUV4ZWNDbGVhclR1cGxlKGRzdHNsb3QpOworCUV4ZWNDb3B5U2xvdChkc3Rz bG90LCBzbG90KTsKKworCW1pc3RhdGUtPmN1cl9zbG90cysrOworCisJLyoKKwkgKiBNZW1vcnkg YWxsb2NhdGVkIGZvciB0aGUgd2hvbGUgdHVwbGUgaXMgaW4gc2xvdCdzIG1lbW9yeSBjb250ZXh0 LCBzbworCSAqIHVzZSBpdCBrZWVwIHRyYWNrIG9mIHRoZSB0b3RhbCBzcGFjZSBvY2N1cGllZCBi eSBhbGwgYnVmZmVyZWQgdHVwbGVzLgorCSAqLworCWlmIChUVFNfU0hPVUxERlJFRShkc3RzbG90 KSkKKwkJbWlzdGF0ZS0+Y3VyX3NpemUgKz0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChkc3Rz bG90LT50dHNfbWN4dCwgZmFsc2UpOworCisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA+PSBIRUFQ X01BWF9CVUZGRVJFRF9TTE9UUyB8fAorCQltaXN0YXRlLT5jdXJfc2l6ZSA+PSBIRUFQX01BWF9C VUZGRVJFRF9CWVRFUykKKwkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIEluc2VydCBtdWx0 aXBsZSB0dXBsZXMgZnJvbSBpbi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMgaW50byBoZWFwLgorICov Cit2b2lkCitoZWFwX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUp Cit7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1p c3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogUXVpY2sgZXhpdCBpZiB3 ZSBoYXZlbid0IGluc2VydGVkIGFueXRoaW5nIHlldCAqLworCWlmIChzdGF0ZS0+ZGF0YSA9PSBO VUxMKQorCQlyZXR1cm47CisKKwlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5k YXRhOworCUFzc2VydChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCk7CisJbWlzdGF0ZSA9IGlzdGF0 ZS0+bWlzdGF0ZTsKKworCWlmIChtaXN0YXRlLT5jdXJfc2xvdHMgPT0gMCkKKwkJcmV0dXJuOwor CisJLyoKKwkgKiBoZWFwX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0 byBzaG9ydC1saXZlZCBtZW1vcnkKKwkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgorCSAq LworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8obWlzdGF0ZS0+bWVtX2N4dCk7 CisKKwloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVsLCBtaXN0YXRlLT5zbG90cywgbWlzdGF0 ZS0+Y3VyX3Nsb3RzLAorCQkJCQkgIHN0YXRlLT5jaWQsIHN0YXRlLT5vcHRpb25zLCBpc3RhdGUt PmJpc3RhdGUpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCU1lbW9y eUNvbnRleHRSZXNldChtaXN0YXRlLT5tZW1fY3h0KTsKKworCWlmIChzdGF0ZS0+bW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jYWxsYmFjayAhPSBOVUxMKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBt aXN0YXRlLT5jdXJfc2xvdHM7IGkrKykKKwkJCXN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2Nh bGxiYWNrKHN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQsCisJCQkJCQkJCQkJCQlt aXN0YXRlLT5zbG90c1tpXSk7CisJfQorCisJbWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwltaXN0 YXRlLT5jdXJfc2l6ZSA9IDA7Cit9CisKKy8qCisgKiBIZWFwIGluc2VydCBzcGVjaWZpYyBjYWxs YmFjayB1c2VkIGZvciBwZXJmb3JtaW5nIHdvcmsgYXQgdGhlIGVuZCBsaWtlCisgKiBmbHVzaGlu ZyBidWZmZXJlZCB0dXBsZXMgaWYgYW55LCBjbGVhbmluZyB1cCB0aGUgaW5zZXJ0IHN0YXRlIGFu ZCBidWZmZXJlZAorICogc2xvdHMuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwX21vZGlmeV9pbnNl cnRfZW5kX2NhbGxiYWNrKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCUhlYXBJbnNlcnRT dGF0ZSAqaXN0YXRlOworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBoYXZlbid0IGluc2VydGVkIGFu eXRoaW5nIHlldCAqLworCWlmIChzdGF0ZS0+ZGF0YSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlp c3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5kYXRhOworCisJaWYgKGlzdGF0ZS0+ bWlzdGF0ZSAhPSBOVUxMKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGUgPSBp c3RhdGUtPm1pc3RhdGU7CisKKwkJaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKwor CQlBc3NlcnQobWlzdGF0ZS0+Y3VyX3Nsb3RzID09IDAgJiYKKwkJCSAgIG1pc3RhdGUtPmN1cl9z aXplID09IDApOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSEVBUF9NQVhfQlVGRkVSRURfU0xP VFMgJiYgbWlzdGF0ZS0+c2xvdHNbaV0gIT0gTlVMTDsgaSsrKQorCQkJRXhlY0Ryb3BTaW5nbGVU dXBsZVRhYmxlU2xvdChtaXN0YXRlLT5zbG90c1tpXSk7CisKKwkJTWVtb3J5Q29udGV4dERlbGV0 ZShtaXN0YXRlLT5tZW1fY3h0KTsKKwl9CisKKwlpZiAoaXN0YXRlLT5iaXN0YXRlICE9IE5VTEwp CisJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoaXN0YXRlLT5iaXN0YXRlKTsKK30KKworLyoKKyAqIENs ZWFuIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCit2b2lkCitoZWFwX21vZGlmeV9lbmQoVGFibGVN b2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5tb2RpZnlfZW5kX2NhbGxiYWNrICE9 IE5VTEwpCisJCXN0YXRlLT5tb2RpZnlfZW5kX2NhbGxiYWNrKHN0YXRlKTsKKworCU1lbW9yeUNv bnRleHREZWxldGUoc3RhdGUtPm1lbV9jeHQpOworfQorCiAvKgogICoJc2ltcGxlX2hlYXBfaW5z ZXJ0IC0gaW5zZXJ0IGEgdHVwbGUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwppbmRleCA2ZjhiMWI3OTI5Li5lZGEwYzczYTE2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2MTUsNiArMjYxNSwxMiBAQCBzdGF0aWMgY29u c3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX2luc2VydF9zcGVj dWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCiAJLnR1cGxlX2NvbXBs ZXRlX3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlLAogCS5t dWx0aV9pbnNlcnQgPSBoZWFwX211bHRpX2luc2VydCwKKworCS50dXBsZV9tb2RpZnlfYmVnaW4g PSBoZWFwX21vZGlmeV9iZWdpbiwKKwkudHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQgPSBoZWFw X21vZGlmeV9idWZmZXJfaW5zZXJ0LAorCS50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoID0gaGVh cF9tb2RpZnlfYnVmZmVyX2ZsdXNoLAorCS50dXBsZV9tb2RpZnlfZW5kID0gaGVhcF9tb2RpZnlf ZW5kLAorCiAJLnR1cGxlX2RlbGV0ZSA9IGhlYXBhbV90dXBsZV9kZWxldGUsCiAJLnR1cGxlX3Vw ZGF0ZSA9IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFwYW1fdHVwbGVf bG9jaywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IGU1N2EwYjdlYTMuLjM1YTNl NDNjNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMjEsNiArMjEsNyBAQAog CiAjaW5jbHVkZSA8bWF0aC5oPgogCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgkJLyoganVz dCBmb3IgQnVsa0luc2VydFN0YXRlICovCiAjaW5jbHVkZSAiYWNjZXNzL3N5bmNzY2FuLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgpAQCAt MjksNiArMzAsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCiAKIC8qCiAgKiBDb25zdGFudHMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Ig b2YgYmxvY2sgYWxsb2NhdGlvbiB0byBwYXJhbGxlbCB3b3JrZXJzCkBAIC00OCw2ICs1MCw3IEBA CiBjaGFyCSAgICpkZWZhdWx0X3RhYmxlX2FjY2Vzc19tZXRob2QgPSBERUZBVUxUX1RBQkxFX0FD Q0VTU19NRVRIT0Q7CiBib29sCQlzeW5jaHJvbml6ZV9zZXFzY2FucyA9IHRydWU7CiAKK3N0YXRp YyB2b2lkIGRlZmF1bHRfdGFibGVfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJhY2soVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTbG90IGZ1bmN0 aW9ucy4KQEAgLTc1NiwzICs3NTksOTcgQEAgdGFibGVfYmxvY2tfcmVsYXRpb25fZXN0aW1hdGVf c2l6ZShSZWxhdGlvbiByZWwsIGludDMyICphdHRyX3dpZHRocywKIAllbHNlCiAJCSphbGx2aXNm cmFjID0gKGRvdWJsZSkgcmVsYWxsdmlzaWJsZSAvIGN1cnBhZ2VzOwogfQorCisvKgorICogSW5p dGlhbGl6ZSBkZWZhdWx0IHRhYmxlIG1vZGlmeSBzdGF0ZS4KKyAqLworVGFibGVNb2RpZnlTdGF0 ZSAqCitkZWZhdWx0X3RhYmxlX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlf ZmxhZ3MsCisJCQkJCQkgICBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKKwkJCQkJCSAgIFRh YmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjayBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNr LAorCQkJCQkJICAgdm9pZCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KQoreworCVRhYmxl TW9kaWZ5U3RhdGUgKnN0YXRlOworCU1lbW9yeUNvbnRleHQgY29udGV4dDsKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwljb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJl bnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJImRlZmF1bHRfdGFibGVfbW9kaWZ5IG1lbW9yeSBj b250ZXh0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKwlzdGF0ZSA9IHBhbGxvYzAoc2l6 ZW9mKFRhYmxlTW9kaWZ5U3RhdGUpKTsKKwlzdGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5tb2Rp ZnlfZmxhZ3MgPSBtb2RpZnlfZmxhZ3M7CisJc3RhdGUtPm1lbV9jeHQgPSBjb250ZXh0OworCXN0 YXRlLT5jaWQgPSBjaWQ7CisJc3RhdGUtPm9wdGlvbnMgPSBvcHRpb25zOworCXN0YXRlLT5tb2Rp ZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNrID0gbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjazsK KwlzdGF0ZS0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gbW9kaWZ5X2J1ZmZlcl9mbHVz aF9jb250ZXh0OworCXN0YXRlLT5tb2RpZnlfZW5kX2NhbGxiYWNrID0gTlVMTDsJLyogVG8gYmUg aW5zdGFsbGVkIGxhemlseSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK KworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIERlZmF1bHQgdGFibGUgbW9kaWZ5IGltcGxl bWVudGF0aW9uIGZvciBpbnNlcnRzLgorICovCit2b2lkCitkZWZhdWx0X3RhYmxlX21vZGlmeV9i dWZmZXJfaW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkgICBUdXBsZVRh YmxlU2xvdCAqc2xvdCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5tZW1fY3h0KTsKKworCS8qIEZpcnN0 IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBkZWZhdWx0IHRhYmxlIG1vZGlmeSBzdGF0ZSAqLwor CWlmIChzdGF0ZS0+ZGF0YSA9PSBOVUxMKQorCXsKKwkJaWYgKChzdGF0ZS0+bW9kaWZ5X2ZsYWdz ICYgVE1fRkxBR19CQVNfQlVMS1dSSVRFKSAhPSAwKQorCQkJc3RhdGUtPmRhdGEgPSAoQnVsa0lu c2VydFN0YXRlKSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKworCQlzdGF0ZS0+bW9kaWZ5X2VuZF9j YWxsYmFjayA9IGRlZmF1bHRfdGFibGVfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJhY2s7CisJfQor CisJLyogRmFsbGJhY2sgdG8gdGFibGUgQU0gc2luZ2xlIGluc2VydCByb3V0aW5lICovCisJdGFi bGVfdHVwbGVfaW5zZXJ0KHN0YXRlLT5yZWwsCisJCQkJCSAgIHNsb3QsCisJCQkJCSAgIHN0YXRl LT5jaWQsCisJCQkJCSAgIHN0YXRlLT5vcHRpb25zLAorCQkJCQkgICAoQnVsa0luc2VydFN0YXRl KSBzdGF0ZS0+ZGF0YSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9 CisKKy8qCisgKiBEZWZhdWx0IHRhYmxlIG1vZGlmeSBpbXBsZW1lbnRhdGlvbiBmb3IgZmx1c2gu CisgKi8KK3ZvaWQKK2RlZmF1bHRfdGFibGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSkKK3sKKwkvKiBuby1vcCAqLworfQorCisvKgorICogRGVmYXVsdCB0YWJs ZSBtb2RpZnkgaW5zZXJ0IHNwZWNpZmljIGNhbGxiYWNrIHVzZWQgZm9yIHBlcmZvcm1pbmcgd29y ayBhdAorICogdGhlIGVuZCBsaWtlIGNsZWFuaW5nIHVwIHRoZSBidWxrIGluc2VydCBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK2RlZmF1bHRfdGFibGVfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJh Y2soVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5kYXRhICE9IE5VTEwp CisJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoKEJ1bGtJbnNlcnRTdGF0ZSkgc3RhdGUtPmRhdGEpOwor fQorCisvKgorICogQ2xlYW4gZGVmYXVsdCB0YWJsZSBtb2RpZnkgc3RhdGUuCisgKi8KK3ZvaWQK K2RlZmF1bHRfdGFibGVfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlp ZiAoc3RhdGUtPm1vZGlmeV9lbmRfY2FsbGJhY2sgIT0gTlVMTCkKKwkJc3RhdGUtPm1vZGlmeV9l bmRfY2FsbGJhY2soc3RhdGUpOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShzdGF0ZS0+bWVtX2N4 dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCBjZTYzN2E1YTVk Li45NmFjOTUxYWY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTk3 LDYgKzk3LDE2IEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJv dXRpbmUtPnNjYW5fc2FtcGxlX25leHRfYmxvY2sgIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUt PnNjYW5fc2FtcGxlX25leHRfdHVwbGUgIT0gTlVMTCk7CiAKKwkvKiBvcHRpb25hbCwgYnV0IGVp dGhlciBhbGwgb2YgdGhlbSBhcmUgZGVmaW5lZCBvciBub25lLiAqLworCUFzc2VydCgocm91dGlu ZS0+dHVwbGVfbW9kaWZ5X2JlZ2luID09IE5VTEwgJiYKKwkJCXJvdXRpbmUtPnR1cGxlX21vZGlm eV9idWZmZXJfaW5zZXJ0ID09IE5VTEwgJiYKKwkJCXJvdXRpbmUtPnR1cGxlX21vZGlmeV9idWZm ZXJfZmx1c2ggPT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVfbW9kaWZ5X2VuZCA9PSBOVUxM KSB8fAorCQkgICAocm91dGluZS0+dHVwbGVfbW9kaWZ5X2JlZ2luICE9IE5VTEwgJiYKKwkJCXJv dXRpbmUtPnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ICE9IE5VTEwgJiYKKwkJCXJvdXRpbmUt PnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2ggIT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVf bW9kaWZ5X2VuZCAhPSBOVUxMKSk7CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCmluZGV4IGM0N2E1MDQ1Y2UuLmMxMGViYmI1ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTI3 MSw2ICsyNzEsMzggQEAgdHlwZWRlZiBlbnVtCiAJUFJVTkVfVkFDVVVNX0NMRUFOVVAsCQkvKiBW QUNVVU0gMm5kIGhlYXAgcGFzcyAqLwogfSBQcnVuZVJlYXNvbjsKIAorLyoKKyAqIE1heGltdW0g bnVtYmVyIG9mIHNsb3RzIHRoYXQgbXVsdGktaW5zZXJ0IGJ1ZmZlcnMgY2FuIGhvbGQuCisgKgor ICogQ2F1dGlvbjogRG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcsIGFzIHdlIGNvdWxkIGVuZCB1cCB3 aXRoIHRoaXMgbWFueSB0dXBsZXMKKyAqIHN0b3JlZCBpbiBtdWx0aSBpbnNlcnQgYnVmZmVyLgor ICovCisjZGVmaW5lIEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTCQkxMDAwCisKKy8qIE1heGltdW0g c2l6ZSBvZiBhbGwgdHVwbGVzIHRoYXQgbXVsdGktaW5zZXJ0IGJ1ZmZlcnMgY2FuIGhvbGQgKi8K KyNkZWZpbmUgSEVBUF9NQVhfQlVGRkVSRURfQllURVMJCTY1NTM1CisKK3R5cGVkZWYgc3RydWN0 IEhlYXBNdWx0aUluc2VydFN0YXRlCit7CisJLyogQXJyYXkgb2YgYnVmZmVyZWQgc2xvdHMgKi8K KwlUdXBsZVRhYmxlU2xvdCAqKnNsb3RzOworCisJLyogTnVtYmVyIG9mIGJ1ZmZlcmVkIHNsb3Rz IGN1cnJlbnRseSBoZWxkICovCisJaW50CQkJY3VyX3Nsb3RzOworCisJLyogQXBwcm94aW1hdGUg c2l6ZSBvZiBhbGwgdHVwbGVzIGN1cnJlbnRseSBoZWxkIGluIGJ1ZmZlcmVkIHNsb3RzICovCisJ U2l6ZQkJY3VyX3NpemU7CisKKwlNZW1vcnlDb250ZXh0IG1lbV9jeHQ7Cit9IEhlYXBNdWx0aUlu c2VydFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBIZWFwSW5zZXJ0U3RhdGUKK3sKKwlzdHJ1Y3Qg QnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlz dGF0ZTsKK30gSGVhcEluc2VydFN0YXRlOworCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlm dW5jdGlvbiBwcm90b3R5cGVzIGZvciBoZWFwIGFjY2VzcyBtZXRob2QKICAqCkBAIC0zMjEsNiAr MzUzLDE4IEBAIGV4dGVybiB2b2lkIGhlYXBfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBIZWFw VHVwbGUgdHVwLCBDb21tYW5kSWQgY2lkLAogZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnQo UmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAogCQkJCQkJ CSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAogCQkJCQkJCSAgQnVs a0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVNb2RpZnlTdGF0ZSAqaGVhcF9t b2RpZnlfYmVnaW4oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSAgIGludCBtb2RpZnlfZmxhZ3Ms CisJCQkJCQkJCQkJICAgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywK KwkJCQkJCQkJCQkgICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jYWxsYmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNo X2NvbnRleHQpOworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0 ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRl KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7 CisKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywg Ym9vbCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hh bmdpbmdQYXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDhlNTgzYjQ1Y2QuLjJlOTYxNTRkNmUg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMjU1LDYgKzI1NSw0MiBAQCB0eXBlZGVmIHN0cnVjdCBU TV9JbmRleERlbGV0ZU9wCiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxl dGVPcDsKIAorLyogVGFibGUgbW9kaWZ5IGZsYWdzICovCisKKy8qIFVzZSBtdWx0aSBpbnNlcnRz LCBpLmUuIGJ1ZmZlciBtdWx0aXBsZSB0dXBsZXMgYW5kIGluc2VydCB0aGVtIGF0IG9uY2UgKi8K KyNkZWZpbmUgVE1fRkxBR19NVUxUSV9JTlNFUlRTCTB4MDAwMDAxCisKKy8qIFVzZSBCQVNfQlVM S1dSSVRFIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgKi8KKyNkZWZpbmUgVE1fRkxBR19CQVNfQlVM S1dSSVRFCTB4MDAwMDAyCisKK3N0cnVjdCBUYWJsZU1vZGlmeVN0YXRlOworCisvKiBDYWxsYmFj ayBpbnZva2VkIGZvciBlYWNoIHR1cGxlIHRoYXQgZ2V0cyBmbHVzaGVkIHRvIGRpc2sgZnJvbSBi dWZmZXIgKi8KK3R5cGVkZWYgdm9pZCAoKlRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjaykg KHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKKy8q IFRhYmxlIEFNIHNwZWNpZmljIGNhbGxiYWNrIHRoYXQgZ2V0cyBjYWxsZWQgaW4gdGFibGVfbW9k aWZ5X2VuZCgpICovCit0eXBlZGVmIHZvaWQgKCpUYWJsZU1vZGlmeUVuZENhbGxiYWNrKSAoc3Ry dWN0IFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKworLyogSG9sZHMgdGFibGUgbW9kaWZ5IHN0 YXRlICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZU1vZGlmeVN0YXRlCit7CisJUmVsYXRpb24JcmVs OworCWludAkJCW1vZGlmeV9mbGFnczsKKwlNZW1vcnlDb250ZXh0IG1lbV9jeHQ7CisJQ29tbWFu ZElkCWNpZDsKKwlpbnQJCQlvcHRpb25zOworCisJLyogRmx1c2ggY2FsbGJhY2sgYW5kIGl0cyBj b250ZXh0ICovCisJVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJf Zmx1c2hfY2FsbGJhY2s7CisJdm9pZAkgICAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0Owor CisJLyogVGFibGUgQU0gc3BlY2lmaWMgZGF0YSAqLworCXZvaWQJICAgKmRhdGE7CisKKwlUYWJs ZU1vZGlmeUVuZENhbGxiYWNrIG1vZGlmeV9lbmRfY2FsbGJhY2s7Cit9IFRhYmxlTW9kaWZ5U3Rh dGU7CisKIC8qICJvcHRpb25zIiBmbGFnIGJpdHMgZm9yIHRhYmxlX3R1cGxlX2luc2VydCAqLwog LyogVEFCTEVfSU5TRVJUX1NLSVBfV0FMIHdhcyAweDAwMDE7IFJlbGF0aW9uTmVlZHNXQUwoKSBu b3cgZ292ZXJucyAqLwogI2RlZmluZSBUQUJMRV9JTlNFUlRfU0tJUF9GU00JCTB4MDAwMgpAQCAt NTc4LDYgKzYxNCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCXZvaWQJCSgq ZmluaXNoX2J1bGtfaW5zZXJ0KSAoUmVsYXRpb24gcmVsLCBpbnQgb3B0aW9ucyk7CiAKIAorCS8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCSAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4KKwkg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICooKnR1cGxlX21vZGlm eV9iZWdpbikgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkJIGludCBtb2RpZnlfZmxhZ3MsCisJ CQkJCQkJCQkJCSBDb21tYW5kSWQgY2lkLAorCQkJCQkJCQkJCQkgaW50IG9wdGlvbnMsCisJCQkJ CQkJCQkJCSBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZlcl9mbHVz aF9jYWxsYmFjaywKKwkJCQkJCQkJCQkJIHZvaWQgKm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4 dCk7CisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCkgKFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlLAorCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJdm9pZAkJ KCp0dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKSAoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOwor CXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2VuZCkgKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKwog CS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIERETCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCiAJICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0xNjA5LDYgKzE2NjAsMTAwIEBAIHRhYmxlX2ZpbmlzaF9idWxr X2luc2VydChSZWxhdGlvbiByZWwsIGludCBvcHRpb25zKQogCQlyZWwtPnJkX3RhYmxlYW0tPmZp bmlzaF9idWxrX2luc2VydChyZWwsIG9wdGlvbnMpOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIFRhYmxlIE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCitleHRlcm4gVGFibGVNb2RpZnlTdGF0ZSAqZGVmYXVsdF90YWJsZV9tb2RpZnlfYmVnaW4o UmVsYXRpb24gcmVsLCBpbnQgbW9kaWZ5X2ZsYWdzLAorCQkJCQkJCQkJCQkJCUNvbW1hbmRJZCBj aWQsIGludCBvcHRpb25zLAorCQkJCQkJCQkJCQkJCVRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxs YmFjayBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJCXZvaWQgKm1v ZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X3RhYmxlX21v ZGlmeV9idWZmZXJfaW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCQkg ICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBkZWZhdWx0X3RhYmxlX21vZGlm eV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworZXh0ZXJuIHZvaWQgZGVm YXVsdF90YWJsZV9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKworc3RhdGlj IGlubGluZSBUYWJsZU1vZGlmeVN0YXRlICoKK3RhYmxlX21vZGlmeV9iZWdpbihSZWxhdGlvbiBy ZWwsIGludCBtb2RpZnlfZmxhZ3MsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCSAg IFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjayBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxi YWNrLAorCQkJCSAgIHZvaWQgKm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCkKK3sKKwlpZiAo cmVsLT5yZF90YWJsZWFtICYmCisJCXJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2JlZ2lu ICE9IE5VTEwpCisJeworCQlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYmVn aW4ocmVsLCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJCQkJCQkgICBjaWQsIG9wdGlvbnMsCisJCQkJ CQkJCQkJCQkgICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNrLAorCQkJCQkJCQkJCQkJICAg bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwl9CisJZWxzZSBpZiAocmVsLT5yZF90YWJs ZWFtICYmCisJCQkgcmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYmVnaW4gPT0gTlVMTCkK Kwl7CisJCS8qIEZhbGxiYWNrIHRvIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCQlyZXR1 cm4gZGVmYXVsdF90YWJsZV9tb2RpZnlfYmVnaW4ocmVsLCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJ CQkJICBjaWQsIG9wdGlvbnMsCisJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxi YWNrLAorCQkJCQkJCQkJCSAgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwl9CisJZWxz ZQorCQlBc3NlcnQoZmFsc2UpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAordGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUs IFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYm CisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ICE9 IE5VTEwpCisJeworCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYnVmZmVy X2luc2VydChzdGF0ZSwgc2xvdCk7CisJfQorCWVsc2UgaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxl YW0gJiYKKwkJCSBzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYnVmZmVyX2lu c2VydCA9PSBOVUxMKQorCXsKKwkJLyogRmFsbGJhY2sgdG8gYSBkZWZhdWx0IGltcGxlbWVudGF0 aW9uICovCisJCWRlZmF1bHRfdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3RhdGUsIHNsb3Qp OworCX0KKwllbHNlCisJCUFzc2VydChmYWxzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor dGFibGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlp ZiAoc3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50 dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoICE9IE5VTEwpCisJeworCQlzdGF0ZS0+cmVsLT5yZF90 YWJsZWFtLT50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKwl9CisJZWxzZSBpZiAo c3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQkJIHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1 cGxlX21vZGlmeV9idWZmZXJfZmx1c2ggPT0gTlVMTCkKKwl7CisJCS8qIEZhbGxiYWNrIHRvIGEg ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCQlkZWZhdWx0X3RhYmxlX21vZGlmeV9idWZmZXJf Zmx1c2goc3RhdGUpOworCX0KKwllbHNlCisJCUFzc2VydChmYWxzZSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZAordGFibGVfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sK KwlpZiAoc3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFt LT50dXBsZV9tb2RpZnlfZW5kICE9IE5VTEwpCisJeworCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFt LT50dXBsZV9tb2RpZnlfZW5kKHN0YXRlKTsKKwl9CisJZWxzZSBpZiAoc3RhdGUtPnJlbC0+cmRf dGFibGVhbSAmJgorCQkJIHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9lbmQg PT0gTlVMTCkKKwl7CisJCS8qIEZhbGxiYWNrIHRvIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAq LworCQlkZWZhdWx0X3RhYmxlX21vZGlmeV9lbmQoc3RhdGUpOworCX0KKwllbHNlCisJCUFzc2Vy dChmYWxzZSk7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRERMIHJlbGF0ZWQgZnVuY3Rp b25hbGl0eS4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZTEwZmYyOGVlNS4uMTE3NDRm MmNjYyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExMzAsNiArMTEzMCw4IEBAIEhl YWRsaW5lSnNvblN0YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CiBI ZWFwQ2hlY2tDb250ZXh0CitIZWFwSW5zZXJ0U3RhdGUKK0hlYXBNdWx0aUluc2VydFN0YXRlCiBI ZWFwUGFnZUZyZWV6ZQogSGVhcFNjYW5EZXNjCiBIZWFwVHVwbGUKQEAgLTI4NDMsNiArMjg0NSw3 IEBAIFRhYmxlRnVuY1NjYW5TdGF0ZQogVGFibGVGdW5jVHlwZQogVGFibGVJbmZvCiBUYWJsZUxp a2VDbGF1c2UKK1RhYmxlTW9kaWZ5U3RhdGUKIFRhYmxlU2FtcGxlQ2xhdXNlCiBUYWJsZVNjYW5E ZXNjCiBUYWJsZVNjYW5EZXNjRGF0YQotLSAKMi4zNC4xCgo= --0000000000002461e00617360ed6 Content-Type: application/x-patch; name="v20-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Disposition: attachment; filename="v20-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvkk1def1 RnJvbSBkYzliOGIwMWQ1ODZiNjRkMTg2Mjg0MjRmZmY5ZWQxNGIyMGI5MmQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjcgQXByIDIwMjQgMTU6NDE6MTIgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMCAyLzVdIE9wdGltaXplIENUQVMsIENNViwgUk1WIGFuZCBU QUJMRSBSRVdSSVRFUyB3aXRoIG11bHRpCiBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgIHwgMjcgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgICB8IDI2ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyB8IDMxICsrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggNjIwNTBmNGRjNS4uMmQ2ZmZm YmYwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC01Myw5ICs1Myw3IEBAIHR5cGVkZWYg c3RydWN0CiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgaW50b3JlbF9zdGFydHVwOiAq LwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byB3cml0ZSB0byAqLwogCU9iamVjdEFk ZHJlc3MgcmVsYWRkcjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBmb3IgRXhlY0NyZWF0ZVRhYmxlQXMg Ki8KLQlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0 dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZv cm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNl cnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBz dGF0ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBk ZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC01NTIsMTcgKzU1MCwyMSBAQCBpbnRvcmVsX3N0YXJ0 dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8p CiAJICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKIAlteVN0YXRlLT5yZWxh ZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NL SVBfRlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBp cyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBpbnNlcnRzIGFzIHRo ZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEp Ci0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJbXlTdGF0ZS0+ bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJ CSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCQkgVE1fRkxBR19CQVNfQlVMS1dS SVRFLAorCQkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJCSBO VUxMKTsKIAllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5tc3Rh dGUgPSBOVUxMOwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0 aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTU5MCwxMSArNTkyLDcgQEAg aW50b3JlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYp CiAJCSAqIHdvdWxkIG5vdCBiZSBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93 IGFjY2Vzc2luZyBwZXItQU0KIAkJICogZGF0YSAoc2F5IGEgdHVwbGUncyB4bWluKSwgYnV0IHNp bmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCQkgKi8KLQkJdGFibGVfdHVwbGVfaW5zZXJ0 KG15U3RhdGUtPnJlbCwKLQkJCQkJCSAgIHNsb3QsCi0JCQkJCQkgICBteVN0YXRlLT5vdXRwdXRf Y2lkLAotCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJCSAgIG15U3RhdGUtPmJp c3RhdGUpOworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNs b3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24s IHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MTIsMTAgKzYxMCw3IEBAIGludG9yZWxf c2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCUludG9DbGF1c2UgKmludG8gPSBteVN0YXRl LT5pbnRvOwogCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3Rh dGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRl LT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOwotCX0KKwkJdGFibGVfbW9kaWZ5X2VuZChteVN0 YXRlLT5tc3RhdGUpOwogCiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1p dCAqLwogCXRhYmxlX2Nsb3NlKG15U3RhdGUtPnJlbCwgTm9Mb2NrKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYwppbmRleCA2ZDA5Yjc1NTU2Li5iYjk3ZTJmYTVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j CkBAIC00OCw5ICs0OCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJT2lkCQkJdHJhbnNpZW50b2lkOwkv KiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZpZWxk cyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9uCXRyYW5z aWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0X2Np ZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRp b25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxr SW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlm eVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRy ZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NTgs OSArNDU2LDE0IEBAIHRyYW5zaWVudHJlbF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50 IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCSAqIEZpbGwgcHJpdmF0ZSBmaWVsZHMg b2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCiAJICovCiAJbXlTdGF0ZS0+dHJh bnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRf U0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4o dHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJ CQkJCSBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJIEdldEN1cnJlbnRDb21tYW5k SWQodHJ1ZSksCisJCQkJCQkJCQkJIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9GUk9aRU4sCisJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJIE5VTEwp OwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJl YWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ4NSwxMiArNDg4LDcgQEAgdHJhbnNpZW50 cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkg KiBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93IGFjY2Vzc2luZyBwZXItQU0g ZGF0YSAoc2F5IGEKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhh dCBoZXJlLi4uCiAJICovCi0KLQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50 cmVsLAotCQkJCQkgICBzbG90LAotCQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAotCQkJCQkg ICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwl0YWJs ZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNsb3QpOwogCiAJLyogV2Ug a25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGlu ZGV4ZXMgKi8KIApAQCAtNTA1LDkgKzUwMyw3IEBAIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0 UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5z aWVudHJlbCAqKSBzZWxmOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRl KTsKLQotCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsIG15 U3RhdGUtPnRpX29wdGlvbnMpOworCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+bXN0YXRlKTsK IAogCS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8K IAl0YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCmluZGV4IDM1NTYyNDBjOGUuLjBjOTg0YWE2NTYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC02MDYwLDEwICs2MDYwLDggQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUpCiAJaW50 CQkJaTsKIAlMaXN0Q2VsbCAgICpsOwogCUVTdGF0ZQkgICAqZXN0YXRlOwotCUNvbW1hbmRJZAlt eWNpZDsKLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsKLQlpbnQJCQl0aV9vcHRpb25zOwogCUV4 cHJTdGF0ZSAgKnBhcnRxdWFsc3RhdGUgPSBOVUxMOworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0 ZSA9IE5VTEw7CiAKIAkvKgogCSAqIE9wZW4gdGhlIHJlbGF0aW9uKHMpLiAgV2UgaGF2ZSBzdXJl bHkgYWxyZWFkeSBsb2NrZWQgdGhlIGV4aXN0aW5nCkBAIC02MDgyLDE4ICs2MDgwLDE1IEBAIEFU UmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tN T0RFIGxvY2ttb2RlKQogCSAqIFByZXBhcmUgYSBCdWxrSW5zZXJ0U3RhdGUgYW5kIG9wdGlvbnMg Zm9yIHRhYmxlX3R1cGxlX2luc2VydC4gIFRoZSBGU00KIAkgKiBpcyBlbXB0eSwgc28gZG9uJ3Qg Ym90aGVyIHVzaW5nIGl0LgogCSAqLwotCWlmIChuZXdyZWwpCisJaWYgKG5ld3JlbCAmJiBtc3Rh dGUgPT0gTlVMTCkKIAl7Ci0JCW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQkJ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwotCQl0aV9vcHRpb25zID0gVEFCTEVfSU5T RVJUX1NLSVBfRlNNOwotCX0KLQllbHNlCi0JewotCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0IGFi b3V0IHVzaW5nIHRoZXNlIHVuaW5pdGlhbGl6ZWQgKi8KLQkJbXljaWQgPSAwOwotCQliaXN0YXRl ID0gTlVMTDsKLQkJdGlfb3B0aW9ucyA9IDA7CisJCW1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdp bihuZXdyZWwsCisJCQkJCQkJCQlUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJVE1f RkxBR19CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwK KwkJCQkJCQkJCVRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCU5VTEwsCisJCQkJCQkJ CQlOVUxMKTsKIAl9CiAKIAkvKgpAQCAtNjM5Miw4ICs2Mzg3LDcgQEAgQVRSZXdyaXRlVGFibGUo QWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUp CiAKIAkJCS8qIFdyaXRlIHRoZSB0dXBsZSBvdXQgdG8gdGhlIG5ldyByZWxhdGlvbiAqLwogCQkJ aWYgKG5ld3JlbCkKLQkJCQl0YWJsZV90dXBsZV9pbnNlcnQobmV3cmVsLCBpbnNlcnRzbG90LCBt eWNpZCwKLQkJCQkJCQkJICAgdGlfb3B0aW9ucywgYmlzdGF0ZSk7CisJCQkJdGFibGVfbW9kaWZ5 X2J1ZmZlcl9pbnNlcnQobXN0YXRlLCBpbnNlcnRzbG90KTsKIAogCQkJUmVzZXRFeHByQ29udGV4 dChlY29udGV4dCk7CiAKQEAgLTY0MTQsMTAgKzY0MDgsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRl cmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAl0 YWJsZV9jbG9zZShvbGRyZWwsIE5vTG9jayk7CiAJaWYgKG5ld3JlbCkKIAl7Ci0JCUZyZWVCdWxr SW5zZXJ0U3RhdGUoYmlzdGF0ZSk7Ci0KLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG5ld3Jl bCwgdGlfb3B0aW9ucyk7Ci0KKwkJdGFibGVfbW9kaWZ5X2VuZChtc3RhdGUpOwogCQl0YWJsZV9j bG9zZShuZXdyZWwsIE5vTG9jayk7CiAJfQogfQotLSAKMi4zNC4xCgo= --0000000000002461e00617360ed6 Content-Type: application/x-patch; name="v20-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Disposition: attachment; filename="v20-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvkk1fm42 RnJvbSBlNjBjYjZlODVhYzRlMzE5YTNiNjE5ZTI0ZjY2ZjZiNDQ4MDhmZTcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjcgQXByIDIwMjQgMTU6NDU6NDkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMCAzLzVdIE9wdGltaXplIElOU0VSVCBJTlRPIC4uLiBTRUxF Q1Qgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMTUzIGlu c2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlm eVRhYmxlLmMKaW5kZXggY2VlNjBkMzY1OS4uY2QwNDRjOWRlZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTExNCw2ICsxMTQsMTggQEAgdHlwZWRlZiBzdHJ1Y3Qg VXBkYXRlQ29udGV4dAogCUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7CiB9IFVwZGF0ZUNvbnRleHQ7 CiAKK3R5cGVkZWYgc3RydWN0IEluc2VydE1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAoreworCVJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICplc3RhdGU7CisJTW9kaWZ5 VGFibGVTdGF0ZSAqbXRzdGF0ZTsKK30gSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0Owor CitzdGF0aWMgSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICppbnNlcnRfbW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKK3N0YXRpYyBUYWJsZU1vZGlmeVN0YXRlICp0YWJs ZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCitzdGF0aWMgdm9pZCBJbnNlcnRNb2RpZnlCdWZmZXJG bHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpz bG90KTsKIAogc3RhdGljIHZvaWQgRXhlY0JhdGNoSW5zZXJ0KE1vZGlmeVRhYmxlU3RhdGUgKm10 c3RhdGUsCiAJCQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKQEAgLTcyNiw2ICs3 MzgsNTUgQEAgRXhlY0dldFVwZGF0ZU5ld1R1cGxlKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiAJ cmV0dXJuIEV4ZWNQcm9qZWN0KG5ld1Byb2opOwogfQogCitzdGF0aWMgdm9pZAorSW5zZXJ0TW9k aWZ5QnVmZmVyRmx1c2hDYWxsYmFjayh2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xv dCkKK3sKKwlJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKmN0eCA9IChJbnNlcnRNb2Rp ZnlCdWZmZXJGbHVzaENvbnRleHQgKikgY29udGV4dDsKKwlSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlID0gY3R4LT5l c3RhdGU7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGN0eC0+bXRzdGF0ZTsKKworCS8q IFF1aWNrIGV4aXQgaWYgbm8gaW5kZXhlcyBvciBubyB0cmlnZ2VycyAqLworCWlmICghKHJlc3Vs dFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwIHx8CisJCSAgKHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjICE9IE5VTEwgJiYKKwkJICAgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCXJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9uZXdfdGFibGUpKSkpCisJCXJldHVybjsKKworCS8qIENhbGxlciBtdXN0IHRha2Ug Y2FyZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSBpbmRpY2VzICovCisKKwkvKgorCSAqIElm IHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5zZXJ0ZWQg dHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KKwkgKi8KKwlp ZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJeworCQlMaXN0CSAgICpyZWNo ZWNrSW5kZXhlczsKKworCQlyZWNoZWNrSW5kZXhlcyA9CisJCQlFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90LCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJ CQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0 YXRlLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJ CQkgbXRzdGF0ZS0+bXRfdHJhbnNpdGlvbl9jYXB0dXJlKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2tJ bmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3 ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzCisJICogYW55d2F5LgorCSAq LworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJCSAo cmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJ ICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKKwl7 CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkg c2xvdCwgTklMLAorCQkJCQkJCSBtdHN0YXRlLT5tdF90cmFuc2l0aW9uX2NhcHR1cmUpOworCX0K K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbnNlcnQKICAqCkBAIC03NTEsNyArODEyLDggQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCSAgIFR1cGxlVGFibGVT bG90ICpzbG90LAogCQkgICBib29sIGNhblNldFRhZywKIAkJICAgVHVwbGVUYWJsZVNsb3QgKipp bnNlcnRlZF90dXBsZSwKLQkJICAgUmVzdWx0UmVsSW5mbyAqKmluc2VydF9kZXN0cmVsKQorCQkg ICBSZXN1bHRSZWxJbmZvICoqaW5zZXJ0X2Rlc3RyZWwsCisJCSAgIGJvb2wgY2FuTXVsdGlJbnNl cnQpCiB7CiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3RhdGU7CiAJ RVN0YXRlCSAgICplc3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7CkBAIC03NjQsNiArODI2LDcgQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJT25Db25mbGljdEFjdGlv biBvbmNvbmZsaWN0ID0gbm9kZS0+b25Db25mbGljdEFjdGlvbjsKIAlQYXJ0aXRpb25UdXBsZVJv dXRpbmcgKnByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlvbl90dXBsZV9yb3V0aW5nOwogCU1l bW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwlib29sCQlhcl9pbnNlcnRfdHJpZ2dlcnNfZXhlY3V0 ZWQgPSBmYWxzZTsKIAogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlc3VsdCByZWxhdGlvbiBpcyBh IHBhcnRpdGlvbmVkIHRhYmxlLCBmaW5kIHRoZSBsZWFmCkBAIC0xMTI2LDE3ICsxMTg5LDUzIEBA IEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQl9CiAJCWVsc2UKIAkJ ewotCQkJLyogaW5zZXJ0IHRoZSB0dXBsZSBub3JtYWxseSAqLwotCQkJdGFibGVfdHVwbGVfaW5z ZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKLQkJCQkJCQkgICBlc3RhdGUtPmVzX291dHB1 dF9jaWQsCi0JCQkJCQkJICAgMCwgTlVMTCk7CisJCQlpZiAoY2FuTXVsdGlJbnNlcnQgJiYKKwkJ CQlwcm91dGUgPT0gTlVMTCAmJgorCQkJCXJlc3VsdFJlbEluZm8tPnJpX1dpdGhDaGVja09wdGlv bnMgPT0gTklMICYmCisJCQkJcmVzdWx0UmVsSW5mby0+cmlfcHJvamVjdFJldHVybmluZyA9PSBO VUxMKQorCQkJeworCQkJCWlmIChpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID09 IE5VTEwpCisJCQkJeworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0K KwkJCQkJCShJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgcGFsbG9jMChzaXplb2Yo SW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCQkJCWluc2VydF9tb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQtPnJlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvOworCQkJCQlp bnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5lc3RhdGUgPSBlc3RhdGU7CisJCQkJ CWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPm10c3RhdGUgPSBtdHN0YXRlOwor CQkJCX0KIAotCQkJLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1cGxlICovCi0JCQlpZiAo cmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCi0JCQkJcmVjaGVja0luZGV4ZXMgPSBF eGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCQkJCQkgICBzbG90 LCBlc3RhdGUsIGZhbHNlLAotCQkJCQkJCQkJCQkJCSAgIGZhbHNlLCBOVUxMLCBOSUwsCi0JCQkJ CQkJCQkJCQkJICAgZmFsc2UpOworCQkJCWlmICh0YWJsZV9tb2RpZnlfc3RhdGUgPT0gTlVMTCkK KwkJCQl7CisJCQkJCXRhYmxlX21vZGlmeV9zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdpbihyZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCQkJCQlUTV9GTEFHX01VTFRJ X0lOU0VSVFMsCisJCQkJCQkJCQkJCQkJCQllc3RhdGUtPmVzX291dHB1dF9jaWQsCisJCQkJCQkJ CQkJCQkJCQkwLAorCQkJCQkJCQkJCQkJCQkJSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFj aywKKwkJCQkJCQkJCQkJCQkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOwor CQkJCX0KKworCQkJCXRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KHRhYmxlX21vZGlmeV9zdGF0 ZSwgc2xvdCk7CisJCQkJYXJfaW5zZXJ0X3RyaWdnZXJzX2V4ZWN1dGVkID0gdHJ1ZTsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBpbnNlcnQgdGhlIHR1cGxlIG5vcm1hbGx5ICovCisJCQkJ dGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKKwkJCQkJCQkJICAg ZXN0YXRlLT5lc19vdXRwdXRfY2lkLAorCQkJCQkJCQkgICAwLCBOVUxMKTsKKworCQkJCS8qIGlu c2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSAqLworCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5y aV9OdW1JbmRpY2VzID4gMCkKKwkJCQkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhU dXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJICAgc2xvdCwgZXN0YXRlLCBmYWxz ZSwKKwkJCQkJCQkJCQkJCQkJICAgZmFsc2UsIE5VTEwsIE5JTCwKKwkJCQkJCQkJCQkJCQkJICAg ZmFsc2UpOworCisJCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZv LCBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkJCSBtdHN0YXRlLT5tdF90cmFuc2l0aW9u X2NhcHR1cmUpOworCisJCQkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwkJCQlhcl9pbnNl cnRfdHJpZ2dlcnNfZXhlY3V0ZWQgPSB0cnVlOworCQkJfQogCQl9CiAJfQogCkBAIC0xMTcwLDEw ICsxMjY5LDEyIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCX0K IAogCS8qIEFGVEVSIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KLQlFeGVjQVJJbnNlcnRUcmlnZ2Vy cyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sIHNsb3QsIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJIGFy X2luc2VydF90cmlnX3Rjcyk7Ci0KLQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCWlmICgh YXJfaW5zZXJ0X3RyaWdnZXJzX2V4ZWN1dGVkKQorCXsKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMo ZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkgYXJf aW5zZXJ0X3RyaWdfdGNzKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CiAKIAkv KgogCSAqIENoZWNrIGFueSBXSVRIIENIRUNLIE9QVElPTiBjb25zdHJhaW50cyBmcm9tIHBhcmVu dCB2aWV3cy4gIFdlIGFyZQpAQCAtMTg2OSw3ICsxOTcwLDcgQEAgRXhlY0Nyb3NzUGFydGl0aW9u VXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkvKiBUdXBsZSByb3V0aW5nIHN0 YXJ0cyBmcm9tIHRoZSByb290IHRhYmxlLiAqLwogCWNvbnRleHQtPmNwVXBkYXRlUmV0dXJuaW5n U2xvdCA9CiAJCUV4ZWNJbnNlcnQoY29udGV4dCwgbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8s IHNsb3QsIGNhblNldFRhZywKLQkJCQkgICBpbnNlcnRlZF90dXBsZSwgaW5zZXJ0X2Rlc3RyZWwp OworCQkJCSAgIGluc2VydGVkX3R1cGxlLCBpbnNlcnRfZGVzdHJlbCwgZmFsc2UpOwogCiAJLyoK IAkgKiBSZXNldCB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB0aGF0IG1heSBwb3NzaWJseSBoYXZlIGJl ZW4gd3JpdHRlbiBieQpAQCAtMzM2NCw3ICszNDY1LDcgQEAgRXhlY01lcmdlTm90TWF0Y2hlZChN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCQkJbXRzdGF0ZS0+bXRfbWVyZ2VfYWN0aW9uID0gYWN0aW9uOwogCiAJCQkJcnNsb3QgPSBF eGVjSW5zZXJ0KGNvbnRleHQsIG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkg ICBuZXdzbG90LCBjYW5TZXRUYWcsIE5VTEwsIE5VTEwpOworCQkJCQkJCQkgICBuZXdzbG90LCBj YW5TZXRUYWcsIE5VTEwsIE5VTEwsIGZhbHNlKTsKIAkJCQltdHN0YXRlLT5tdF9tZXJnZV9pbnNl cnRlZCArPSAxOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDTURfTk9USElORzoKQEAgLTM3NDksNiAr Mzg1MCwxMCBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJSGVhcFR1cGxl RGF0YSBvbGR0dXBkYXRhOwogCUhlYXBUdXBsZQlvbGR0dXBsZTsKIAlJdGVtUG9pbnRlciB0dXBs ZWlkOworCWJvb2wJCWNhbk11bHRpSW5zZXJ0ID0gZmFsc2U7CisKKwl0YWJsZV9tb2RpZnlfc3Rh dGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOwog CiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMzg0NCw2ICszOTQ5LDEwIEBAIEV4ZWNN b2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYgKFR1cElzTnVsbChjb250ZXh0LnBs YW5TbG90KSkKIAkJCWJyZWFrOwogCisJCWlmIChvcGVyYXRpb24gPT0gQ01EX0lOU0VSVCAmJgor CQkJbm9kZVRhZyhzdWJwbGFuc3RhdGUpID09IFRfU2VxU2NhblN0YXRlKQorCQkJY2FuTXVsdGlJ bnNlcnQgPSB0cnVlOworCiAJCS8qCiAJCSAqIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHJlc3Vs dCByZWxhdGlvbnMsIGVhY2ggdHVwbGUgY29udGFpbnMgYQogCQkgKiBqdW5rIGNvbHVtbiB0aGF0 IGdpdmVzIHRoZSBPSUQgb2YgdGhlIHJlbCBmcm9tIHdoaWNoIGl0IGNhbWUuCkBAIC00MDU3LDcg KzQxNjYsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCUV4ZWNJ bml0SW5zZXJ0UHJvamVjdGlvbihub2RlLCByZXN1bHRSZWxJbmZvKTsKIAkJCQlzbG90ID0gRXhl Y0dldEluc2VydE5ld1R1cGxlKHJlc3VsdFJlbEluZm8sIGNvbnRleHQucGxhblNsb3QpOwogCQkJ CXNsb3QgPSBFeGVjSW5zZXJ0KCZjb250ZXh0LCByZXN1bHRSZWxJbmZvLCBzbG90LAotCQkJCQkJ CQkgIG5vZGUtPmNhblNldFRhZywgTlVMTCwgTlVMTCk7CisJCQkJCQkJCSAgbm9kZS0+Y2FuU2V0 VGFnLCBOVUxMLCBOVUxMLCBjYW5NdWx0aUluc2VydCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug Q01EX1VQREFURToKQEAgLTQxMTYsNiArNDIyNSwxNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0 YXRlICpwc3RhdGUpCiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAKKwlpZiAodGFibGVfbW9kaWZ5X3N0 YXRlICE9IE5VTEwpCisJeworCQlBc3NlcnQob3BlcmF0aW9uID09IENNRF9JTlNFUlQpOworCisJ CXRhYmxlX21vZGlmeV9lbmQodGFibGVfbW9kaWZ5X3N0YXRlKTsKKwkJdGFibGVfbW9kaWZ5X3N0 YXRlID0gTlVMTDsKKworCQlwZnJlZShpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0 KTsKKwkJaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IE5VTEw7CisJfQorCiAJ LyoKIAkgKiBJbnNlcnQgcmVtYWluaW5nIHR1cGxlcyBmb3IgYmF0Y2ggaW5zZXJ0LgogCSAqLwpA QCAtNDIyOCw2ICs0MzQ4LDkgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJbXRzdGF0ZS0+bXRfbWVyZ2VfdXBkYXRl ZCA9IDA7CiAJbXRzdGF0ZS0+bXRfbWVyZ2VfZGVsZXRlZCA9IDA7CiAKKwl0YWJsZV9tb2RpZnlf c3RhdGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxM OworCiAJLyotLS0tLS0tLS0tCiAJICogUmVzb2x2ZSB0aGUgdGFyZ2V0IHJlbGF0aW9uLiBUaGlz IGlzIHRoZSBzYW1lIGFzOgogCSAqCkBAIC00NjgxLDYgKzQ4MDQsMTcgQEAgRXhlY0VuZE1vZGlm eVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKIAorCWlmICh0YWJs ZV9tb2RpZnlfc3RhdGUgIT0gTlVMTCkKKwl7CisJCUFzc2VydChub2RlLT5vcGVyYXRpb24gPT0g Q01EX0lOU0VSVCk7CisKKwkJdGFibGVfbW9kaWZ5X2VuZCh0YWJsZV9tb2RpZnlfc3RhdGUpOwor CQl0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCisJCXBmcmVlKGluc2VydF9tb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQpOworCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0 ID0gTlVMTDsKKwl9CisKIAkvKgogCSAqIEFsbG93IGFueSBGRFdzIHRvIHNodXQgZG93bgogCSAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAxMTc0NGYyY2NjLi41N2FhYmY1MWQ4IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIyNiw2ICsxMjI2LDcgQEAgSW5qZWN0aW9u UG9pbnRFbnRyeQogSW5qZWN0aW9uUG9pbnRTaGFyZWRTdGF0ZQogSW5saW5lQ29kZUJsb2NrCiBJ blByb2dyZXNzSU8KK0luc2VydE1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAogSW5zZXJ0U3RtdAog SW5zdHJ1bWVudGF0aW9uCiBJbnQxMjhBZ2dTdGF0ZQotLSAKMi4zNC4xCgo= --0000000000002461e00617360ed6 Content-Type: application/x-patch; name="v20-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Disposition: attachment; filename="v20-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvkk1i9o3 RnJvbSA0MDQwYWRhNDg4NjIyMGJiOTc5ZWRhYjgzZjdmODhkMzI2NzlkY2JkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFNhdCwgMjcgQXByIDIwMjQgMTU6NDg6MjUgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMCA0LzVdIE9wdGltaXplIExvZ2ljYWwgUmVwbGljYXRpb24g YXBwbHkgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMgIHwgIDI0ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jIHwgMzUxICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICB8ICAgMiArCiA2IGZpbGVzIGNoYW5nZWQsIDQwOSBpbnNlcnRpb25zKCspLCAxMyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGQwYTg5 Y2Q1NzcuLmZhZTEzNzU1MzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j CkBAIC01NDQsNiArNTQ0LDQ1IEBAIEV4ZWNTaW1wbGVSZWxhdGlvbkluc2VydChSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogCX0KIH0KIAordm9pZAorRXhlY1JlbGF0aW9uTXVsdGlJbnNl cnQoVGFibGVNb2RpZnlTdGF0ZSAqTXVsdGlJbnNlcnRTdGF0ZSwKKwkJCQkJCVJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQlFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCit7CisJYm9vbAkJc2tpcF90dXBsZSA9IGZhbHNlOworCVJlbGF0aW9uCXJlbCA9IHJl c3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKworCS8qIEZvciBub3cgd2Ugc3VwcG9ydCBv bmx5IHRhYmxlcy4gKi8KKwlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTik7CisKKwlDaGVja0NtZFJlcGxpY2FJZGVudGl0eShyZWwsIENNRF9JTlNFUlQpOwor CisJLyogQkVGT1JFIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgJiYKKwkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0 X2JlZm9yZV9yb3cpCisJeworCQlpZiAoIUV4ZWNCUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVz dWx0UmVsSW5mbywgc2xvdCkpCisJCQlza2lwX3R1cGxlID0gdHJ1ZTsJLyogImRvIG5vdGhpbmci ICovCisJfQorCisJaWYgKCFza2lwX3R1cGxlKQorCXsKKwkJLyogQ29tcHV0ZSBzdG9yZWQgZ2Vu ZXJhdGVkIGNvbHVtbnMgKi8KKwkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIgJiYKKwkJCXJlbC0+ cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQorCQkJRXhlY0NvbXB1dGVTdG9y ZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJCQkJICAgQ01E X0lOU0VSVCk7CisKKwkJLyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZSAqLwor CQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0cikKKwkJCUV4ZWNDb25zdHJhaW50cyhyZXN1bHRSZWxJ bmZvLCBzbG90LCBlc3RhdGUpOworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQor CQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSwgdHJ1ZSk7 CisKKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgc2xvdCk7 CisJfQorfQorCiAvKgogICogRmluZCB0aGUgc2VhcmNoc2xvdCB0dXBsZSBhbmQgdXBkYXRlIGl0 IHdpdGggZGF0YSBpbiB0aGUgc2xvdCwKICAqIHVwZGF0ZSB0aGUgaW5kZXhlcywgYW5kIGV4ZWN1 dGUgYW55IGNvbnN0cmFpbnRzIGFuZCBwZXItcm93IHRyaWdnZXJzLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDk1YzA5Yzk1MTYuLjQ2ZDM4YWViZDIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTQyNyw2ICs0MjcsMzAgQEAg bG9naWNhbHJlcF93cml0ZV9pbnNlcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBSZWxhdGlvbiByZWwsCiAJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xv dCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAorTG9naWNhbFJlcFJlbElkCitsb2dpY2FscmVwX3Jl YWRfcmVsaWQoU3RyaW5nSW5mbyBpbikKK3sKKwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkv KiByZWFkIHRoZSByZWxhdGlvbiBpZCAqLworCXJlbGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsK KworCXJldHVybiByZWxpZDsKK30KKwordm9pZAorbG9naWNhbHJlcF9yZWFkX2luc2VydF92MihT dHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCit7CisJY2hhcgkJYWN0 aW9uOworCisJYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShpbik7CisJaWYgKGFjdGlvbiAhPSAnTicp CisJCWVsb2coRVJST1IsICJleHBlY3RlZCBuZXcgdHVwbGUgYnV0IGdvdCAlZCIsCisJCQkgYWN0 aW9uKTsKKworCWxvZ2ljYWxyZXBfcmVhZF90dXBsZShpbiwgbmV3dHVwKTsKK30KKwogLyoKICAq IFJlYWQgSU5TRVJUIGZyb20gc3RyZWFtLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IGI1YTgwZmUzZTguLmQ2Mjc3MmY1OTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAjaW5jbHVk ZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKLSNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgpAQCAtNDE2LDYgKzQx NSwzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZv KHZvaWQpOwogc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2Fj dGlvbihUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCQkJCQkgUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKip3aW5mbyk7CiAKK3R5cGVkZWYgZW51bSBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVz Cit7CisJTFJfTVVMVElfSU5TRVJUX05PTkUgPSAwLAorCUxSX01VTFRJX0lOU0VSVF9SRUxfU0tJ UFBFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRElTQUxMT1dFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRE9O RSwKK30gTFJNdWx0aUluc2VydFJldHVyblN0YXR1czsKKworc3RhdGljIFRhYmxlTW9kaWZ5U3Rh dGUgKk11bHRpSW5zZXJ0U3RhdGUgPSBOVUxMOworc3RhdGljIExvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqTGFzdFJlbCA9IE5VTEw7CitzdGF0aWMgTG9naWNhbFJlcFJlbElkIExhc3RNdWx0aUluc2Vy dFJlbElkID0gSW52YWxpZE9pZDsKK3N0YXRpYyBBcHBseUV4ZWN1dGlvbkRhdGEgKkxhc3RFRGF0 YSA9IE5VTEw7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkxhc3RSZW1vdGVTbG90ID0gTlVMTDsK KwordHlwZWRlZiBzdHJ1Y3QgTFJNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQKK3sKKwlSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlOworfSBMUk1vZGlmeUJ1 ZmZlckZsdXNoQ29udGV4dDsKKworc3RhdGljIExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpt b2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOworc3RhdGljIHZvaWQgTFJNb2RpZnlC dWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK K3N0YXRpYyB2b2lkIEZpbmlzaE11bHRpSW5zZXJ0cyh2b2lkKTsKKwogLyoKICAqIEZvcm0gdGhl IG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAgLTEwMTcsNiArMTA0MCw4 IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBDb21t aXREYXRhIGNvbW1pdF9kYXRhOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlsb2dpY2Fs cmVwX3JlYWRfY29tbWl0KHMsICZjb21taXRfZGF0YSk7CiAKIAlpZiAoY29tbWl0X2RhdGEuY29t bWl0X2xzbiAhPSByZW1vdGVfZmluYWxfbHNuKQpAQCAtMTA0Myw2ICsxMDY4LDggQEAgYXBwbHlf aGFuZGxlX2JlZ2luX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQcmVwYXJl ZFR4bkRhdGEgYmVnaW5fZGF0YTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyogVGFi bGVzeW5jIHNob3VsZCBuZXZlciByZWNlaXZlIHByZXBhcmUuICovCiAJaWYgKGFtX3RhYmxlc3lu Y193b3JrZXIoKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMDksNiArMTEzNiw4IEBAIGFwcGx5 X2hhbmRsZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwUHJlcGFyZWRUeG5E YXRhIHByZXBhcmVfZGF0YTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJbG9naWNhbHJl cF9yZWFkX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAKIAlpZiAocHJlcGFyZV9kYXRhLnBy ZXBhcmVfbHNuICE9IHJlbW90ZV9maW5hbF9sc24pCkBAIC0xMTcxLDYgKzEyMDAsOCBAQCBhcHBs eV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwQ29tbWl0 UHJlcGFyZWRUeG5EYXRhIHByZXBhcmVfZGF0YTsKIAljaGFyCQlnaWRbR0lEU0laRV07CiAKKwlG aW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWxvZ2ljYWxyZXBfcmVhZF9jb21taXRfcHJlcGFyZWQo cywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChwcmVwYXJl X2RhdGEueGlkLCBwcmVwYXJlX2RhdGEuY29tbWl0X2xzbik7CiAKQEAgLTEyMjAsNiArMTI1MSw4 IEBAIGFwcGx5X2hhbmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAJTG9naWNh bFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhIHJvbGxiYWNrX2RhdGE7CiAJY2hhcgkJZ2lkW0dJ RFNJWkVdOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlsb2dpY2FscmVwX3JlYWRfcm9s bGJhY2tfcHJlcGFyZWQocywgJnJvbGxiYWNrX2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250 ZXh0X3hhY3Qocm9sbGJhY2tfZGF0YS54aWQsIHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xz bik7CiAKQEAgLTEyNzcsNiArMTMxMCw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShT dHJpbmdJbmZvIHMpCiAJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQu ICovCiAJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKKwlGaW5pc2hNdWx0aUlu c2VydHMoKTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0xMzA0LDYg KzEzMzksOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJ YXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 LAogCQkJCQkJCQkgICBwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24p OwogCisJCQlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rp b24gYXMgcHJlcGFyZWQuICovCiAJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJl cGFyZV9kYXRhKTsKIApAQCAtMTQwNyw2ICsxNDQ0LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9w cmVwYXJlKFN0cmluZ0luZm8gcykKIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfb3JpZ2luKFN0 cmluZ0luZm8gcykKIHsKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCS8qCiAJICogT1JJR0lO IG1lc3NhZ2UgY2FuIG9ubHkgY29tZSBpbnNpZGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIG9yIGlu c2lkZQogCSAqIHJlbW90ZSB0cmFuc2FjdGlvbiBhbmQgYmVmb3JlIGFueSBhY3R1YWwgd3JpdGVz LgpAQCAtMTQ3Myw2ICsxNTEyLDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJ bmZvIHMpCiAJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCiAJ U3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMo KTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0xNjI4LDYgKzE2Njks OCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCVBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbzsKIAlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAor CUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElP TiksCkBAIC0xODIxLDYgKzE4NjQsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmlu Z0luZm8gcykKIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAlib29sCQl0b3Bs ZXZlbF94YWN0OwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9U T0NPTF9WSU9MQVRJT04pLApAQCAtMjEzOCw2ICsyMTgzLDggQEAgYXBwbHlfaGFuZGxlX3N0cmVh bV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8qIFNhdmUgdGhlIG1lc3NhZ2UgYmVmb3JlIGl0IGlz IGNvbnN1bWVkLiAqLwogCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwogCisJRmlu aXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLApA QCAtMjE1OSw2ICsyMjA2LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5m byBzKQogCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVh bV9maWxlc2V0LCB4aWQsCiAJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOwogCisJ CQlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5h bCgmY29tbWl0X2RhdGEpOwogCiAJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXpl ZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCkBAIC0yMzAyLDYgKzIzNTEsOCBAQCBhcHBs eV9oYW5kbGVfcmVsYXRpb24oU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBSZWxhdGlvbiAq cmVsOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaGFuZGxlX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19SRUxBVElPTiwgcykpCiAJCXJldHVybjsKIApAQCAt MjMyNSw2ICsyMzc2LDggQEAgYXBwbHlfaGFuZGxlX3R5cGUoU3RyaW5nSW5mbyBzKQogewogCUxv Z2ljYWxSZXBUeXAgdHlwOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaGFuZGxl X3N0cmVhbWVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19UWVBFLCBzKSkKIAkJcmV0dXJu OwogCkBAIC0yMzYzLDE2ICsyNDE2LDEyNiBAQCBUYXJnZXRQcml2aWxlZ2VzQ2hlY2soUmVsYXRp b24gcmVsLCBBY2xNb2RlIG1vZGUpCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp KSkpOwogfQogCi0vKgotICogSGFuZGxlIElOU0VSVCBtZXNzYWdlLgotICovCitzdGF0aWMgdm9p ZAorRmluaXNoTXVsdGlJbnNlcnRzKHZvaWQpCit7CisJTG9naWNhbFJlcE1zZ1R5cGUgc2F2ZWRf Y29tbWFuZDsKKworCWlmIChNdWx0aUluc2VydFN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKwor CUFzc2VydChPaWRJc1ZhbGlkKExhc3RNdWx0aUluc2VydFJlbElkKSk7CisJQXNzZXJ0KExhc3RF RGF0YSAhPSBOVUxMKTsKKworCS8qIFNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sgKi8K KwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTGFzdFJlbDsKKworCS8qIFNldCBjdXJy ZW50IGNvbW1hbmQgZm9yIGVycm9yIGNhbGxiYWNrICovCisJc2F2ZWRfY29tbWFuZCA9IGFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZy5jb21tYW5kOworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5j b21tYW5kID0gTE9HSUNBTF9SRVBfTVNHX0lOU0VSVDsKKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3QoTGFzdFJlbW90ZVNsb3QpOworCUxhc3RSZW1vdGVTbG90ID0gTlVMTDsKKworCXRh YmxlX21vZGlmeV9lbmQoTXVsdGlJbnNlcnRTdGF0ZSk7CisJTXVsdGlJbnNlcnRTdGF0ZSA9IE5V TEw7CisJTGFzdE11bHRpSW5zZXJ0UmVsSWQgPSBJbnZhbGlkT2lkOworCisJcGZyZWUobW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwltb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBO VUxMOworCisJRXhlY0Nsb3NlSW5kaWNlcyhMYXN0RURhdGEtPnRhcmdldFJlbEluZm8pOworCisJ ZmluaXNoX2VkYXRhKExhc3RFRGF0YSk7CisJTGFzdEVEYXRhID0gTlVMTDsKKworCS8qIFJlc2V0 IHJlbGF0aW9uIGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2Fy Zy5yZWwgPSBOVUxMOworCisJLyogUmVzZXQgdGhlIGN1cnJlbnQgY29tbWFuZCAqLworCWFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZy5jb21tYW5kID0gc2F2ZWRfY29tbWFuZDsKKworCWxvZ2ljYWxy ZXBfcmVsX2Nsb3NlKExhc3RSZWwsIE5vTG9jayk7CisJTGFzdFJlbCA9IE5VTEw7CisKKwllbmRf cmVwbGljYXRpb25fc3RlcCgpOworfQogCiBzdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX2luc2Vy dChTdHJpbmdJbmZvIHMpCitMUk1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4 dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJTFJNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQg KmN0eCA9IChMUk1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqKSBjb250ZXh0OworCVJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8gPSBjdHgtPnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICpl c3RhdGUgPSBjdHgtPmVzdGF0ZTsKKwlMb2dpY2FsUmVwTXNnVHlwZSBzYXZlZF9jb21tYW5kOwor CisJLyogUXVpY2sgZXhpdCBpZiBubyBpbmRleGVzIG9yIG5vIHRyaWdnZXJzICovCisJaWYgKCEo cmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgfHwKKwkJICAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQkgICAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X25ld190YWJsZSkpKSkKKwkJcmV0dXJuOworCisJLyogU2V0IHJlbGF0aW9u IGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSBM YXN0UmVsOworCisJLyogU2V0IGN1cnJlbnQgY29tbWFuZCBmb3IgZXJyb3IgY2FsbGJhY2sgKi8K KwlzYXZlZF9jb21tYW5kID0gYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQ7CisJYXBw bHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUOwor CisJLyogQ2FsbGVyIG11c3QgdGFrZSBjYXJlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIGlu ZGljZXMgKi8KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhl bSBmb3IgYWxsIHRoZSBpbnNlcnRlZCB0dXBsZXMsIGFuZAorCSAqIHJ1biBBRlRFUiBST1cgSU5T RVJUIHRyaWdnZXJzLgorCSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4g MCkKKwl7CisJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJCXJlY2hlY2tJbmRleGVzID0K KwkJCUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkgIHNsb3Qs IGVzdGF0ZSwgZmFsc2UsCisJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2UpOworCisJ CUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkgc2xv dCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJIE5VTEwpOworCisJCWxpc3RfZnJlZShyZWNoZWNr SW5kZXhlcyk7CisJfQorCisJLyoKKwkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBzZWUgaWYg d2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2VycworCSAqIGFueXdheS4KKwkg Ki8KKwllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCQkg KHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJ CSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCisJ eworCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJ IHNsb3QsIE5JTCwKKwkJCQkJCQkgTlVMTCk7CisJfQorCisJLyoKKwkgKiBYWFggd2Ugc2hvdWxk IGluIHRoZW9yeSBwYXNzIGEgVHJhbnNpdGlvbkNhcHR1cmVTdGF0ZSBvYmplY3QgdG8gdGhlCisJ ICogYWJvdmUgdG8gY2FwdHVyZSB0cmFuc2l0aW9uIHR1cGxlcywgYnV0IGFmdGVyIHN0YXRlbWVu dCB0cmlnZ2VycyBkb24ndAorCSAqIGFjdHVhbGx5IGdldCBmaXJlZCBieSByZXBsaWNhdGlvbiB5 ZXQgYW55d2F5CisJICovCisKKwkvKiBSZXNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sg Ki8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTlVMTDsKKworCS8qIFJlc2V0IHRo ZSBjdXJyZW50IGNvbW1hbmQgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcuY29tbWFuZCA9 IHNhdmVkX2NvbW1hbmQ7Cit9CisKK3N0YXRpYyBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzCitk b19tdWx0aV9pbnNlcnRzKFN0cmluZ0luZm8gcywgTG9naWNhbFJlcFJlbElkICpyZWxpZCkKIHsK IAlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbDsKIAlMb2dpY2FsUmVwVHVwbGVEYXRhIG5ld3R1 cDsKLQlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CiAJVXNlckNvbnRleHQgdWN4dDsKIAlBcHBseUV4 ZWN1dGlvbkRhdGEgKmVkYXRhOwogCUVTdGF0ZQkgICAqZXN0YXRlOwpAQCAtMjM4MCwxNyArMjU0 MywxNDMgQEAgYXBwbHlfaGFuZGxlX2luc2VydChTdHJpbmdJbmZvIHMpCiAJTWVtb3J5Q29udGV4 dCBvbGRjdHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUg PT0gTlVMTCkKKwkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJKnJlbGlkID0gbG9naWNh bHJlcF9yZWFkX3JlbGlkKHMpOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCAmJgor CQkoTGFzdE11bHRpSW5zZXJ0UmVsSWQgIT0gSW52YWxpZE9pZCAmJgorCQkgKnJlbGlkICE9IElu dmFsaWRPaWQgJiYKKwkJIExhc3RNdWx0aUluc2VydFJlbElkICE9ICpyZWxpZCkpCisJCUZpbmlz aE11bHRpSW5zZXJ0cygpOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCkKKwkJcmVs ID0gbG9naWNhbHJlcF9yZWxfb3BlbigqcmVsaWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCWVsc2UK KwkJcmVsID0gTGFzdFJlbDsKKworCWlmICghc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChy ZWwpKQorCXsKKwkJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCk7CisKKwkJLyoKKwkJ ICogVGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRlcmVzdGluZyBpbiB0aGUgbWlkZGxlIG9m IHRoZQorCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5sb2NrIGl0LgorCQkgKi8K KwkJbG9naWNhbHJlcF9yZWxfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKKwkJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9SRUxfU0tJUFBFRDsK Kwl9CisKKwkvKiBGb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSwgbGV0J3Mgbm90IGRvIG11bHRpIGlu c2VydHMuICovCisJaWYgKHJlbC0+bG9jYWxyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVM TCk7CisKKwkJLyoKKwkJICogVGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRlcmVzdGluZyBp biB0aGUgbWlkZGxlIG9mIHRoZQorCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5s b2NrIGl0LgorCQkgKi8KKwkJbG9naWNhbHJlcF9yZWxfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJcmV0dXJuIExSX01VTFRJX0lOU0VS VF9ESVNBTExPV0VEOworCX0KKwogCS8qCi0JICogUXVpY2sgcmV0dXJuIGlmIHdlIGFyZSBza2lw cGluZyBkYXRhIG1vZGlmaWNhdGlvbiBjaGFuZ2VzIG9yIGhhbmRsaW5nCi0JICogc3RyZWFtZWQg dHJhbnNhY3Rpb25zLgorCSAqIE1ha2Ugc3VyZSB0aGF0IGFueSB1c2VyLXN1cHBsaWVkIGNvZGUg cnVucyBhcyB0aGUgdGFibGUgb3duZXIsIHVubGVzcworCSAqIHRoZSB1c2VyIGhhcyBvcHRlZCBv dXQgb2YgdGhhdCBiZWhhdmlvci4KIAkgKi8KLQlpZiAoaXNfc2tpcHBpbmdfY2hhbmdlcygpIHx8 Ci0JCWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5TRVJULCBz KSkKLQkJcmV0dXJuOworCXJ1bl9hc19vd25lciA9IE15U3Vic2NyaXB0aW9uLT5ydW5hc293bmVy OworCWlmICghcnVuX2FzX293bmVyKQorCQlTd2l0Y2hUb1VudHJ1c3RlZFVzZXIocmVsLT5sb2Nh bHJlbC0+cmRfcmVsLT5yZWxvd25lciwgJnVjeHQpOworCisJLyogU2V0IHJlbGF0aW9uIGZvciBl cnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSByZWw7CisK KwlpZiAoTXVsdGlJbnNlcnRTdGF0ZSA9PSBOVUxMKQorCXsKKwkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisKKwkJLyogSW5pdGlhbGl6ZSB0 aGUgZXhlY3V0b3Igc3RhdGUuICovCisJCUxhc3RFRGF0YSA9IGVkYXRhID0gY3JlYXRlX2VkYXRh X2Zvcl9yZWxhdGlvbihyZWwpOworCQllc3RhdGUgPSBlZGF0YS0+ZXN0YXRlOworCisJCUxhc3RS ZW1vdGVTbG90ID0gcmVtb3Rlc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERl c2NyKHJlbC0+bG9jYWxyZWwpLAorCQkJCQkJCQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOworCisJ CW1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IChMUk1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4 dCAqKSBwYWxsb2Moc2l6ZW9mKExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCW1vZGlm eV9idWZmZXJfZmx1c2hfY29udGV4dC0+cmVzdWx0UmVsSW5mbyA9IGVkYXRhLT50YXJnZXRSZWxJ bmZvOworCQltb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPmVzdGF0ZSA9IGVzdGF0ZTsKKwor CQlNdWx0aUluc2VydFN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGVkYXRhLT50YXJnZXRSZWxJ bmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSAgVE1fRkxBR19NVUxUSV9JTlNFUlRT IHwKKwkJCQkJCQkJCQkJICBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCSAgR2V0 Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJICAwLAorCQkJCQkJCQkJCQkgIExS TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjaywKKwkJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2Zs dXNoX2NvbnRleHQpOworCQlMYXN0UmVsID0gcmVsOworCQlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9 ICpyZWxpZDsKKworCQkvKiBXZSBtdXN0IG9wZW4gaW5kZXhlcyBoZXJlLiAqLworCQlFeGVjT3Bl bkluZGljZXMoZWRhdGEtPnRhcmdldFJlbEluZm8sIGZhbHNlKTsKKworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwl9CisJZWxzZQorCXsKKwkJQ29tbWFuZElkCWNpZDsKKworCQll ZGF0YSA9IExhc3RFRGF0YTsKKwkJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKKwkJUmVzZXRFeHBy Q29udGV4dChHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSkpOworCQlFeGVjQ2xlYXJUdXBs ZShMYXN0UmVtb3RlU2xvdCk7CisJCXJlbW90ZXNsb3QgPSBMYXN0UmVtb3RlU2xvdDsKKwkJY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKKwkJTXVsdGlJbnNlcnRTdGF0ZS0+Y2lkID0g Y2lkOworCQllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBjaWQ7CisJfQorCisJLyogUHJvY2VzcyBh bmQgc3RvcmUgcmVtb3RlIHR1cGxlIGluIHRoZSBzbG90ICovCisJbG9naWNhbHJlcF9yZWFkX2lu c2VydF92MihzLCAmbmV3dHVwKTsKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0 UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOworCXNsb3Rfc3RvcmVfZGF0YShyZW1vdGVz bG90LCByZWwsICZuZXd0dXApOworCXNsb3RfZmlsbF9kZWZhdWx0cyhyZWwsIGVzdGF0ZSwgcmVt b3Rlc2xvdCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlUYXJnZXRQcml2 aWxlZ2VzQ2hlY2soZWRhdGEtPnRhcmdldFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgQUNMX0lO U0VSVCk7CisJRXhlY1JlbGF0aW9uTXVsdGlJbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgZWRhdGEt PnRhcmdldFJlbEluZm8sIGVzdGF0ZSwgcmVtb3Rlc2xvdCk7CisKKwkvKiBSZXNldCByZWxhdGlv biBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0g TlVMTDsKKworCWlmICghcnVuX2FzX293bmVyKQorCQlSZXN0b3JlVXNlckNvbnRleHQoJnVjeHQp OworCisJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCk7CisKKwlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworCisJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9ET05FOworfQorCitzdGF0 aWMgYm9vbAorZG9fc2luZ2xlX2luc2VydHMoU3RyaW5nSW5mbyBzLCBMb2dpY2FsUmVwUmVsSWQg cmVsaWQpCit7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisJTG9naWNhbFJlcFR1cGxl RGF0YSBuZXd0dXA7CisJVXNlckNvbnRleHQgdWN4dDsKKwlBcHBseUV4ZWN1dGlvbkRhdGEgKmVk YXRhOworCUVTdGF0ZQkgICAqZXN0YXRlOworCVR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90Owor CU1lbW9yeUNvbnRleHQgb2xkY3R4OworCWJvb2wJCXJ1bl9hc19vd25lcjsKKworCUFzc2VydChy ZWxpZCAhPSBJbnZhbGlkT2lkKTsKIAogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCXJl bGlkID0gbG9naWNhbHJlcF9yZWFkX2luc2VydChzLCAmbmV3dHVwKTsKIAlyZWwgPSBsb2dpY2Fs cmVwX3JlbF9vcGVuKHJlbGlkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAlpZiAoIXNob3VsZF9hcHBs eV9jaGFuZ2VzX2Zvcl9yZWwocmVsKSkKIAl7CkBAIC0yNDAwLDcgKzI2ODksNyBAQCBhcHBseV9o YW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAkJICovCiAJCWxvZ2ljYWxyZXBfcmVsX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCXJl dHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qCkBAIC0yNDIyLDYgKzI3MTEsNyBAQCBh cHBseV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAkJCQkJCQkJCQkmVFRTT3BzVmlydHVh bCk7CiAKIAkvKiBQcm9jZXNzIGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8K Kwlsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKHMsICZuZXd0dXApOwogCW9sZGN0eCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAJc2xv dF9zdG9yZV9kYXRhKHJlbW90ZXNsb3QsIHJlbCwgJm5ld3R1cCk7CiAJc2xvdF9maWxsX2RlZmF1 bHRzKHJlbCwgZXN0YXRlLCByZW1vdGVzbG90KTsKQEAgLTI0NDYsNiArMjczNiwzNSBAQCBhcHBs eV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlbF9jbG9zZShyZWws IE5vTG9jayk7CiAKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBIYW5kbGUgSU5TRVJUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBs eV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKK3sKKwlMUk11bHRpSW5zZXJ0UmV0dXJuU3Rh dHVzIG1pX3N0YXR1czsKKwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkvKgorCSAqIFF1aWNr IHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcgZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBo YW5kbGluZworCSAqIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlpZiAoaXNfc2tpcHBp bmdfY2hhbmdlcygpIHx8CisJCWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JF UF9NU0dfSU5TRVJULCBzKSkKKwkJcmV0dXJuOworCisJbWlfc3RhdHVzID0gZG9fbXVsdGlfaW5z ZXJ0cyhzLCAmcmVsaWQpOworCWlmIChtaV9zdGF0dXMgPT0gTFJfTVVMVElfSU5TRVJUX1JFTF9T S0lQUEVEIHx8CisJCW1pX3N0YXR1cyA9PSBMUl9NVUxUSV9JTlNFUlRfRE9ORSkKKwkJcmV0dXJu OworCisJZG9fc2luZ2xlX2luc2VydHMocywgcmVsaWQpOworCisJcmV0dXJuOwogfQogCiAvKgpA QCAtMjUzMiw2ICsyODUxLDggQEAgYXBwbHlfaGFuZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJ TWVtb3J5Q29udGV4dCBvbGRjdHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJRmluaXNoTXVs dGlJbnNlcnRzKCk7CisKIAkvKgogCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcg ZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBoYW5kbGluZwogCSAqIHN0cmVhbWVkIHRyYW5z YWN0aW9ucy4KQEAgLTI3MTMsNiArMzAzNCw4IEBAIGFwcGx5X2hhbmRsZV9kZWxldGUoU3RyaW5n SW5mbyBzKQogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCWJvb2wJCXJ1bl9hc19vd25lcjsKIAor CUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJl IHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJl YW1lZCB0cmFuc2FjdGlvbnMuCkBAIC0zMTU0LDYgKzM0NzcsOCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCUxpc3RDZWxsICAgKmxjOwogCUxPQ0tNT0RFCWxvY2ttb2Rl ID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoK IAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNo YW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaAppbmRleCA5NzcwNzUyZWEzLi44ZjEwZWE5NzdiIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpZm5kZWYgRVhFQ1VUT1JfSAogI2RlZmluZSBF WEVDVVRPUl9ICiAKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNkZXNjLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL2xvY2tv cHRpb25zLmgiCkBAIC02NTYsNiArNjU3LDkgQEAgZXh0ZXJuIGJvb2wgUmVsYXRpb25GaW5kUmVw bFR1cGxlU2VxKFJlbGF0aW9uIHJlbCwgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKIAogZXh0ZXJu IHZvaWQgRXhlY1NpbXBsZVJlbGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCiAJCQkJCQkJCQkgRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4 dGVybiB2b2lkIEV4ZWNSZWxhdGlvbk11bHRpSW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKk11bHRp SW5zZXJ0U3RhdGUsCisJCQkJCQkJCQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJ CQkJCQkJRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiB2b2lk IEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAog CQkJCQkJCQkJIEVTdGF0ZSAqZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCQkJCQkg VHVwbGVUYWJsZVNsb3QgKnNlYXJjaHNsb3QsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggYzQwOTYzOGEyZS4uM2YzYTdmMGEz MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTIyNiw2ICsyMjYs OCBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdCwKIAkJCQkJCQkJCWJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNv bHVtbnMpOworZXh0ZXJuIExvZ2ljYWxSZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfcmVsaWQoU3Ry aW5nSW5mbyBpbik7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKFN0cmlu Z0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CiBleHRlcm4gTG9naWNhbFJl cFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1 cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTdhYWJmNTFkOC4uOTU4MjUwM2JiNCAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE0NTQsNiArMTQ1NCw4IEBAIExQVEhSRUFEX1NU QVJUX1JPVVRJTkUKIExQVFNUUgogTFBWT0lECiBMUFdTVFIKK0xSTW9kaWZ5QnVmZmVyRmx1c2hD b250ZXh0CitMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzCiBMU0VHCiBMVUlECiBMVlJlbFN0YXRl Ci0tIAoyLjM0LjEKCg== --0000000000002461e00617360ed6 Content-Type: application/x-patch; name="v20-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v20-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvkk1kzc4 RnJvbSA2ODRkODQ2YzUzZGQ0N2U4YjE2NTRkOGE1OGU4Y2NhMDE5NGJkZjEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgQXByIDIwMjQgMDU6MzU6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMCA1LzVdIFVzZSBuZXcgbXVsdGkgaW5zZXJ0IFRhYmxlIEFN IGZvciBDT1BZIEZST00KCi0tLQogY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL3N0cmVh bS5vdXQgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgICAgICAgICAg IHwgMjM1ICsrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlm cm9tX2ludGVybmFsLmggIHwgICA0ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDE2MCBpbnNlcnRpb25zKCspLCA4 MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0 ZWQvc3RyZWFtLm91dCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9zdHJlYW0ub3V0 CmluZGV4IDRhYjJkNDdiZjguLmMxOWZhY2IzYzkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGVzdF9k ZWNvZGluZy9leHBlY3RlZC9zdHJlYW0ub3V0CisrKyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9l eHBlY3RlZC9zdHJlYW0ub3V0CkBAIC0xMDEsMTAgKzEwMSwxMCBAQCBTRUxFQ1QgZGF0YSBGUk9N IHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lvbl9zbG90JywgTlVMTCxOVUxM LCAnaW5jbAogIHN0cmVhbWluZyBjaGFuZ2UgZm9yIHRyYW5zYWN0aW9uCiAgc3RyZWFtaW5nIGNo YW5nZSBmb3IgdHJhbnNhY3Rpb24KICBzdHJlYW1pbmcgY2hhbmdlIGZvciB0cmFuc2FjdGlvbgot IHN0cmVhbWluZyBjaGFuZ2UgZm9yIHRyYW5zYWN0aW9uCiAgY2xvc2luZyBhIHN0cmVhbWVkIGJs b2NrIGZvciB0cmFuc2FjdGlvbgogIG9wZW5pbmcgYSBzdHJlYW1lZCBibG9jayBmb3IgdHJhbnNh Y3Rpb24KICBzdHJlYW1pbmcgY2hhbmdlIGZvciB0cmFuc2FjdGlvbgorIHN0cmVhbWluZyBjaGFu Z2UgZm9yIHRyYW5zYWN0aW9uCiAgY2xvc2luZyBhIHN0cmVhbWVkIGJsb2NrIGZvciB0cmFuc2Fj dGlvbgogIGNvbW1pdHRpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb24KICgxNyByb3dzKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHlmcm9tLmMKaW5kZXggY2U0ZDYyZTcwNy4uNDAzYWRmZTQ4MSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbS5jCkBAIC03MSwxNCArNzEsMjUgQEAKIC8qIFRyaW0gdGhlIGxpc3Qgb2YgYnVm ZmVycyBiYWNrIGRvd24gdG8gdGhpcyBudW1iZXIgYWZ0ZXIgZmx1c2hpbmcgKi8KICNkZWZpbmUg TUFYX1BBUlRJVElPTl9CVUZGRVJTCTMyCiAKK3R5cGVkZWYgc3RydWN0IENvcHlNb2RpZnlCdWZm ZXJGbHVzaENvbnRleHQKK3sKKwlDb3B5RnJvbVN0YXRlIGNzdGF0ZTsKKwlSZXN1bHRSZWxJbmZv ICpyZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlOworfSBDb3B5TW9kaWZ5QnVmZmVy Rmx1c2hDb250ZXh0OworCiAvKiBTdG9yZXMgbXVsdGktaW5zZXJ0IGRhdGEgcmVsYXRlZCB0byBh IHNpbmdsZSByZWxhdGlvbiBpbiBDb3B5RnJvbS4gKi8KIHR5cGVkZWYgc3RydWN0IENvcHlNdWx0 aUluc2VydEJ1ZmZlcgogewotCVR1cGxlVGFibGVTbG90ICpzbG90c1tNQVhfQlVGRkVSRURfVFVQ TEVTXTsgLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCisJVGFibGVNb2RpZnlTdGF0ZSAqbXN0 YXRlOwkvKiBUYWJsZSBpbnNlcnQgc3RhdGU7IE5VTEwgaWYgZm9yZWlnbiB0YWJsZSAqLworCVR1 cGxlVGFibGVTbG90ICoqc2xvdHM7CQkvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMgKi8KIAlSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvOwkvKiBSZXN1bHRSZWxJbmZvIGZvciAncmVsaWQnICov Ci0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIEJ1bGtJbnNlcnRTdGF0ZSBmb3IgdGhpcyBy ZWwgaWYgcGxhaW4KLQkJCQkJCQkJICogdGFibGU7IE5VTEwgaWYgZm9yZWlnbiB0YWJsZSAqLwor CVR1cGxlVGFibGVTbG90ICptdWx0aXNsb3Q7CisJQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4 dCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0OwogCWludAkJCW51c2VkOwkJCS8qIG51bWJl ciBvZiAnc2xvdHMnIGNvbnRhaW5pbmcgdHVwbGVzICovCisJaW50CQkJY3VycnNsb3RubzsJCS8q IEN1cnJlbnQgYnVmZmVyZWQgc2xvdCBudW1iZXIgdGhhdCdzIGJlaW5nCisJCQkJCQkJCSAqIGZs dXNoZWQ7IFVzZWQgdG8gZ2V0IGNvcnJlY3QgY3VyX2xpbmVubyBmb3IKKwkJCQkJCQkJICogZXJy b3JzIHdoaWxlIGluIGZsdXNoIGNhbGxiYWNrLiAqLwogCXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVG RkVSRURfVFVQTEVTXTsJLyogTGluZSAjIG9mIHR1cGxlIGluIGNvcHkKIAkJCQkJCQkJCQkJCSAq IHN0cmVhbSAqLwogfSBDb3B5TXVsdGlJbnNlcnRCdWZmZXI7CkBAIC05OSw2ICsxMTAsNyBAQCB0 eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRJbmZvCiAJaW50CQkJdGlfb3B0aW9uczsJCS8q IHRhYmxlIGluc2VydCBvcHRpb25zICovCiB9IENvcHlNdWx0aUluc2VydEluZm87CiAKK3N0YXRp YyB2b2lkIENvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsIFR1cGxl VGFibGVTbG90ICpzbG90KTsKIAogLyogbm9uLWV4cG9ydCBmdW5jdGlvbiBwcm90b3R5cGVzICov CiBzdGF0aWMgdm9pZCBDbG9zZVBpcGVGcm9tUHJvZ3JhbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSk7 CkBAIC0yMTgsMTQgKzIzMCwzOCBAQCBDb3B5TGltaXRQcmludG91dExlbmd0aChjb25zdCBjaGFy ICpzdHIpCiAgKiBSZXN1bHRSZWxJbmZvLgogICovCiBzdGF0aWMgQ29weU11bHRpSW5zZXJ0QnVm ZmVyICoKLUNvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoUmVzdWx0UmVsSW5mbyAqcnJpKQorQ29w eU11bHRpSW5zZXJ0QnVmZmVySW5pdChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3Vs dFJlbEluZm8gKnJyaSwKKwkJCQkJCSAgQ29weUZyb21TdGF0ZSBjc3RhdGUsIEVTdGF0ZSAqZXN0 YXRlKQogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwogCiAJYnVmZmVyID0gKENv cHlNdWx0aUluc2VydEJ1ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZl cikpOwotCW1lbXNldChidWZmZXItPnNsb3RzLCAwLCBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikg KiBNQVhfQlVGRkVSRURfVFVQTEVTKTsKKworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVM TCkKKwl7CisJCWJ1ZmZlci0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0gKENvcHlNb2Rp ZnlCdWZmZXJGbHVzaENvbnRleHQgKikgcGFsbG9jKHNpemVvZihDb3B5TW9kaWZ5QnVmZmVyRmx1 c2hDb250ZXh0KSk7CisJCWJ1ZmZlci0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5jc3Rh dGUgPSBjc3RhdGU7CisJCWJ1ZmZlci0+bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5yZXN1 bHRSZWxJbmZvID0gcnJpOworCQlidWZmZXItPm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dC0+ ZXN0YXRlID0gZXN0YXRlOworCisJCWJ1ZmZlci0+bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2lu KHJyaS0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQlUTV9GTEFHX01VTFRJX0lOU0VSVFMg fAorCQkJCQkJCQkJCQlUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCW1paW5mby0+ bXljaWQsCisJCQkJCQkJCQkJCW1paW5mby0+dGlfb3B0aW9ucywKKwkJCQkJCQkJCQkJQ29weU1v ZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2ssCisJCQkJCQkJCQkJCWJ1ZmZlci0+bW9kaWZ5X2J1ZmZl cl9mbHVzaF9jb250ZXh0KTsKKwkJYnVmZmVyLT5zbG90cyA9IE5VTEw7CisJCWJ1ZmZlci0+bXVs dGlzbG90ID0gTlVMTDsKKwl9CisJZWxzZQorCXsKKwkJYnVmZmVyLT5tc3RhdGUgPSBOVUxMOwor CQlidWZmZXItPnNsb3RzID0gcGFsbG9jMChzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhf QlVGRkVSRURfVFVQTEVTKTsKKwkJYnVmZmVyLT5tdWx0aXNsb3QgPSBOVUxMOworCX0KKwogCWJ1 ZmZlci0+cmVzdWx0UmVsSW5mbyA9IHJyaTsKLQlidWZmZXItPmJpc3RhdGUgPSAocnJpLT5yaV9G ZHdSb3V0aW5lID09IE5VTEwpID8gR2V0QnVsa0luc2VydFN0YXRlKCkgOiBOVUxMOwogCWJ1ZmZl ci0+bnVzZWQgPSAwOwogCiAJcmV0dXJuIGJ1ZmZlcjsKQEAgLTIzNiwxMSArMjcyLDEyIEBAIENv cHlNdWx0aUluc2VydEJ1ZmZlckluaXQoUmVzdWx0UmVsSW5mbyAqcnJpKQogICovCiBzdGF0aWMg aW5saW5lIHZvaWQKIENvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcihDb3B5TXVsdGlJbnNl cnRJbmZvICptaWluZm8sCi0JCQkJCQkJICAgUmVzdWx0UmVsSW5mbyAqcnJpKQorCQkJCQkJCSAg IFJlc3VsdFJlbEluZm8gKnJyaSwgQ29weUZyb21TdGF0ZSBjc3RhdGUsCisJCQkJCQkJICAgRVN0 YXRlICplc3RhdGUpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CiAKLQlidWZm ZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KHJyaSk7CisJYnVmZmVyID0gQ29weU11bHRp SW5zZXJ0QnVmZmVySW5pdChtaWluZm8sIHJyaSwgY3N0YXRlLCBlc3RhdGUpOwogCiAJLyogU2V0 dXAgYmFjay1saW5rIHNvIHdlIGNhbiBlYXNpbHkgZmluZCB0aGlzIGJ1ZmZlciBhZ2FpbiAqLwog CXJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyID0gYnVmZmVyOwpAQCAtMjczLDcgKzMxMCw3 IEBAIENvcHlNdWx0aUluc2VydEluZm9Jbml0KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywg UmVzdWx0UmVsSW5mbyAqcnJpLAogCSAqIHR1cGxlcyB0aGVpciB3YXkgZm9yIHRoZSBmaXJzdCB0 aW1lLgogCSAqLwogCWlmIChycmktPnJpX1JlbGF0aW9uRGVzYy0+cmRfcmVsLT5yZWxraW5kICE9 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1 ZmZlcihtaWluZm8sIHJyaSk7CisJCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcihtaWlu Zm8sIHJyaSwgY3N0YXRlLCBlc3RhdGUpOwogfQogCiAvKgpAQCAtMzE3LDggKzM1NCw2IEBAIENv cHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAkJ aW50CQkJYmF0Y2hfc2l6ZSA9IHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZTsKIAkJaW50CQkJ c2VudCA9IDA7CiAKLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSA9PSBOVUxMKTsKLQogCQkvKiBF bnN1cmUgdGhhdCB0aGUgRkRXIHN1cHBvcnRzIGJhdGNoaW5nIGFuZCBpdCdzIGVuYWJsZWQgKi8K IAkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkV4ZWNGb3JlaWduQmF0Y2hJ bnNlcnQpOwogCQlBc3NlcnQoYmF0Y2hfc2l6ZSA+IDEpOwpAQCAtMzkwLDEzICs0MjUsOCBAQCBD b3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJ fQogCWVsc2UKIAl7Ci0JCUNvbW1hbmRJZAlteWNpZCA9IG1paW5mby0+bXljaWQ7Ci0JCWludAkJ CXRpX29wdGlvbnMgPSBtaWluZm8tPnRpX29wdGlvbnM7CiAJCWJvb2wJCWxpbmVfYnVmX3ZhbGlk ID0gY3N0YXRlLT5saW5lX2J1Zl92YWxpZDsKIAkJdWludDY0CQlzYXZlX2N1cl9saW5lbm8gPSBj c3RhdGUtPmN1cl9saW5lbm87Ci0JCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLQotCQlBc3Nl cnQoYnVmZmVyLT5iaXN0YXRlICE9IE5VTEwpOwogCiAJCS8qCiAJCSAqIFByaW50IGVycm9yIGNv bnRleHQgaW5mb3JtYXRpb24gY29ycmVjdGx5LCBpZiBvbmUgb2YgdGhlIG9wZXJhdGlvbnMKQEAg LTQwNCw1NiArNDM0LDE4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUlu c2VydEluZm8gKm1paW5mbywKIAkJICovCiAJCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxz ZTsKIAotCQkvKgotCQkgKiB0YWJsZV9tdWx0aV9pbnNlcnQgbWF5IGxlYWsgbWVtb3J5LCBzbyBz d2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5Ci0JCSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcg aXQuCi0JCSAqLwotCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEdldFBlclR1 cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKLQkJdGFibGVfbXVsdGlfaW5zZXJ0KHJlc3VsdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCSAgIHNsb3RzLAotCQkJCQkJICAgbnVzZWQs Ci0JCQkJCQkgICBteWNpZCwKLQkJCQkJCSAgIHRpX29wdGlvbnMsCi0JCQkJCQkgICBidWZmZXIt PmJpc3RhdGUpOwotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCUFzc2Vy dChidWZmZXItPmN1cnJzbG90bm8gPD0gYnVmZmVyLT5udXNlZCk7CisJCWJ1ZmZlci0+Y3VycnNs b3RubyA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IG51c2VkOyBpKyspCi0JCXsKLQkJCS8qCi0J CQkgKiBJZiB0aGVyZSBhcmUgYW55IGluZGV4ZXMsIHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGlu c2VydGVkCi0JCQkgKiB0dXBsZXMsIGFuZCBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4K LQkJCSAqLwotCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQotCQkJewot CQkJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOwotCi0JCQkJY3N0YXRlLT5jdXJfbGluZW5vID0g YnVmZmVyLT5saW5lbm9zW2ldOwotCQkJCXJlY2hlY2tJbmRleGVzID0KLQkJCQkJRXhlY0luc2Vy dEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJICBidWZmZXItPnNsb3RzW2ld LCBlc3RhdGUsIGZhbHNlLAotCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2UpOwot CQkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJ CSBzbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCi0JCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9u X2NhcHR1cmUpOwotCQkJCWxpc3RfZnJlZShyZWNoZWNrSW5kZXhlcyk7Ci0JCQl9CisJCXRhYmxl X21vZGlmeV9idWZmZXJfZmx1c2goYnVmZmVyLT5tc3RhdGUpOwogCi0JCQkvKgotCQkJICogVGhl cmUncyBubyBpbmRleGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNF UlQKLQkJCSAqIHRyaWdnZXJzIGFueXdheS4KLQkJCSAqLwotCQkJZWxzZSBpZiAocmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkJCQkgKHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKLQkJCQkJICByZXN1bHRSZWxJbmZvLT5y aV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKLQkJCXsKLQkJCQljc3RhdGUtPmN1 cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07Ci0JCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMo ZXN0YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJIHNsb3RzW2ldLCBOSUwsCi0JCQkJCQkJ CQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOwotCQkJfQorCQlBc3NlcnQoYnVmZmVyLT5j dXJyc2xvdG5vIDw9IGJ1ZmZlci0+bnVzZWQpOworCQlidWZmZXItPmN1cnJzbG90bm8gPSAwOwog Ci0JCQlFeGVjQ2xlYXJUdXBsZShzbG90c1tpXSk7Ci0JCX0KKwkJLyoKKwkJICogSW5kZXhlcyBh cmUgdXBkYXRlZCBhbmQgQUZURVIgUk9XIElOU0VSVCB0cmlnZ2VycyAoaWYgYW55KSBhcmUgcnVu CisJCSAqIGluIHRoZSBmbHVzaCBjYWxsYmFjayBDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFj ay4KKwkJICovCiAKIAkJLyogVXBkYXRlIHRoZSByb3cgY291bnRlciBhbmQgcHJvZ3Jlc3Mgb2Yg dGhlIENPUFkgY29tbWFuZCAqLwogCQkqcHJvY2Vzc2VkICs9IG51c2VkOwpAQCAtNDY5LDYgKzQ2 MSw2MCBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICpt aWluZm8sCiAJYnVmZmVyLT5udXNlZCA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkCitDb3B5TW9kaWZ5 QnVmZmVyRmx1c2hDYWxsYmFjayh2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK K3sKKwlDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpjdHggPSAoQ29weU1vZGlmeUJ1ZmZl ckZsdXNoQ29udGV4dCAqKSBjb250ZXh0OworCUNvcHlGcm9tU3RhdGUgY3N0YXRlID0gY3R4LT5j c3RhdGU7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbyA9IGN0eC0+cmVzdWx0UmVsSW5m bzsKKwlFU3RhdGUJICAgKmVzdGF0ZSA9IGN0eC0+ZXN0YXRlOworCUNvcHlNdWx0aUluc2VydEJ1 ZmZlciAqYnVmZmVyID0gcmVzdWx0UmVsSW5mby0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwor CisJLyogUXVpY2sgZXhpdCBpZiBubyBpbmRleGVzIG9yIG5vIHRyaWdnZXJzICovCisJaWYgKCEo cmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgfHwKKwkJICAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQkgICAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X25ld190YWJsZSkpKSkKKwkJcmV0dXJuOworCisJLyogQ2FsbGVyIG11c3Qg dGFrZSBjYXJlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIGluZGljZXMgKi8KKworCS8qCisJ ICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxsIHRoZSBpbnNl cnRlZCB0dXBsZXMsIGFuZAorCSAqIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzLgorCSAq LworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkKKwl7CisJCUxpc3QJICAg KnJlY2hlY2tJbmRleGVzOworCisJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5v c1tidWZmZXItPmN1cnJzbG90bm8rK107CisJCXJlY2hlY2tJbmRleGVzID0KKwkJCUV4ZWNJbnNl cnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkgIHNsb3QsIGVzdGF0ZSwgZmFs c2UsCisJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2UpOworCQlFeGVjQVJJbnNlcnRU cmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJIHNsb3QsIHJlY2hlY2tJbmRl eGVzLAorCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisJCWxpc3RfZnJlZShy ZWNoZWNrSW5kZXhlcyk7CisJfQorCisJLyoKKwkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBz ZWUgaWYgd2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2VycworCSAqIGFueXdh eS4KKwkgKi8KKwllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYm CisJCQkgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cg fHwKKwkJCSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJs ZSkpCisJeworCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbYnVmZmVyLT5j dXJyc2xvdG5vKytdOworCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbElu Zm8sCisJCQkJCQkJIHNsb3QsIE5JTCwKKwkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1 cmUpOworCX0KKworCUFzc2VydChidWZmZXItPmN1cnJzbG90bm8gPD0gYnVmZmVyLT5udXNlZCk7 Cit9CisKIC8qCiAgKiBEcm9wIHVzZWQgc2xvdHMgYW5kIGZyZWUgbWVtYmVyIGZvciB0aGlzIGJ1 ZmZlci4KICAqCkBAIC00ODksMTkgKzUzNSwxOCBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVh bnVwKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKIAogCWlmIChyZXN1bHRSZWxJbmZvLT5y aV9GZHdSb3V0aW5lID09IE5VTEwpCiAJewotCQlBc3NlcnQoYnVmZmVyLT5iaXN0YXRlICE9IE5V TEwpOwotCQlGcmVlQnVsa0luc2VydFN0YXRlKGJ1ZmZlci0+YmlzdGF0ZSk7CisJCXRhYmxlX21v ZGlmeV9lbmQoYnVmZmVyLT5tc3RhdGUpOworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KGJ1ZmZlci0+bXVsdGlzbG90KTsKKwkJcGZyZWUoYnVmZmVyLT5tb2RpZnlfYnVmZmVyX2ZsdXNo X2NvbnRleHQpOwogCX0KIAllbHNlCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgPT0gTlVMTCk7 Ci0KLQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0 aGUgbm9uLW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExF UyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl7CisJCS8qIFNpbmNlIHdlIG9ubHkgY3Jl YXRlIHNsb3RzIG9uIGRlbWFuZCwganVzdCBkcm9wIHRoZSBub24tbnVsbCBvbmVzLiAqLworCQlm b3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBidWZmZXItPnNsb3RzW2ldICE9 IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90 c1tpXSk7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQotCQl0 YWJsZV9maW5pc2hfYnVsa19pbnNlcnQocmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAot CQkJCQkJCQkgbWlpbmZvLT50aV9vcHRpb25zKTsKKwkJcGZyZWUoYnVmZmVyLT5zbG90cyk7CisJ fQogCiAJcGZyZWUoYnVmZmVyKTsKIH0KQEAgLTU4OCwxMyArNjMzLDMyIEBAIENvcHlNdWx0aUlu c2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogewogCUNv cHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZm ZXI7CiAJaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOworCVR1cGxlVGFibGVTbG90ICpzbG90 OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQobnVzZWQgPCBNQVhfQlVGRkVS RURfVFVQTEVTKTsKIAotCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQotCQlidWZm ZXItPnNsb3RzW251c2VkXSA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJyaS0+cmlfUmVsYXRpb25EZXNj LCBOVUxMKTsKLQlyZXR1cm4gYnVmZmVyLT5zbG90c1tudXNlZF07CisJaWYgKHJyaS0+cmlfRmR3 Um91dGluZSA9PSBOVUxMKQorCXsKKwkJaWYgKGJ1ZmZlci0+bXVsdGlzbG90ID09IE5VTEwpCisJ CQlidWZmZXItPm11bHRpc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2Ny KHJyaS0+cmlfUmVsYXRpb25EZXNjKSwKKwkJCQkJCQkJCQkJCSAgICZUVFNPcHNWaXJ0dWFsKTsK KworCQkvKiBDYWxsZXIgbXVzdCBjbGVhciB0aGUgc2xvdCAqLworCQlzbG90ID0gYnVmZmVyLT5t dWx0aXNsb3Q7CisJfQorCWVsc2UKKwl7CisJCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBO VUxMKQorCQl7CisJCQlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRl c2MsIE5VTEwpOworCQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSBzbG90OworCQl9CisJCWVsc2UK KwkJCXNsb3QgPSBidWZmZXItPnNsb3RzW251c2VkXTsKKwl9CisKKwlyZXR1cm4gc2xvdDsKIH0K IAogLyoKQEAgLTYwOCw3ICs2NzIsMTEgQEAgQ29weU11bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlN dWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAogCUNvcHlNdWx0aUlu c2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAKIAlB c3NlcnQoYnVmZmVyICE9IE5VTEwpOwotCUFzc2VydChzbG90ID09IGJ1ZmZlci0+c2xvdHNbYnVm ZmVyLT5udXNlZF0pOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWlmIChycmktPnJp X0Zkd1JvdXRpbmUgIT0gTlVMTCkKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZm ZXItPm51c2VkXSk7CisjZW5kaWYKIAogCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBj YW4gcHJvcGVybHkgcmVwb3J0IGFueSBlcnJvcnMgbGF0ZXIgKi8KIAlidWZmZXItPmxpbmVub3Nb YnVmZmVyLT5udXNlZF0gPSBsaW5lbm87CkBAIC02MTYsNiArNjg0LDE0IEBAIENvcHlNdWx0aUlu c2VydEluZm9TdG9yZShDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8g KnJyaSwKIAkvKiBSZWNvcmQgdGhpcyBzbG90IGFzIGJlaW5nIHVzZWQgKi8KIAlidWZmZXItPm51 c2VkKys7CiAKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlBc3NlcnQo c2xvdCA9PSBidWZmZXItPm11bHRpc2xvdCk7CisJCWJ1ZmZlci0+Y3VycnNsb3RubyA9IDA7CisK KwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoYnVmZmVyLT5tc3RhdGUsIHNsb3QpOworCX0K KwogCS8qIFVwZGF0ZSBob3cgbWFueSB0dXBsZXMgYXJlIHN0b3JlZCBhbmQgdGhlaXIgc2l6ZSAq LwogCW1paW5mby0+YnVmZmVyZWRUdXBsZXMrKzsKIAltaWluZm8tPmJ1ZmZlcmVkQnl0ZXMgKz0g dHVwbGVuOwpAQCAtODMwLDcgKzkwNiw3IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRl KQogCS8qCiAJICogSXQncyBnZW5lcmFsbHkgbW9yZSBlZmZpY2llbnQgdG8gcHJlcGFyZSBhIGJ1 bmNoIG9mIHR1cGxlcyBmb3IKIAkgKiBpbnNlcnRpb24sIGFuZCBpbnNlcnQgdGhlbSBpbiBvbmUK LQkgKiB0YWJsZV9tdWx0aV9pbnNlcnQoKS9FeGVjRm9yZWlnbkJhdGNoSW5zZXJ0KCkgY2FsbCwg dGhhbiBjYWxsCisJICogdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoKS9FeGVjRm9yZWlnbkJh dGNoSW5zZXJ0KCkgY2FsbCwgdGhhbiBjYWxsCiAJICogdGFibGVfdHVwbGVfaW5zZXJ0KCkvRXhl Y0ZvcmVpZ25JbnNlcnQoKSBzZXBhcmF0ZWx5IGZvciBldmVyeSB0dXBsZS4KIAkgKiBIb3dldmVy LCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVhc29ucyB3aHkgd2UgbWlnaHQgbm90IGJlIGFibGUg dG8gZG8KIAkgKiB0aGlzLiAgVGhlc2UgYXJlIGV4cGxhaW5lZCBiZWxvdy4KQEAgLTEwODAsNyAr MTE1Niw4IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCXsKIAkJCQkJaWYg KHJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9PSBOVUxMKQogCQkJCQkJ Q29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKCZtdWx0aUluc2VydEluZm8sCi0JCQkJCQkJ CQkJCQkJICAgcmVzdWx0UmVsSW5mbyk7CisJCQkJCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbywg Y3N0YXRlLAorCQkJCQkJCQkJCQkJCSAgIGVzdGF0ZSk7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGlu c2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwgJiYKIAkJCQkJCSAhQ29weU11bHRp SW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weWZyb21faW50ZXJuYWwuaAppbmRleCBjYWQ1MmZjYzc4Li4xNGFkZGJjNmY2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCisrKyBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKQEAgLTQ2LDkgKzQ2LDkgQEAgdHlw ZWRlZiBlbnVtIEVvbFR5cGUKIHR5cGVkZWYgZW51bSBDb3B5SW5zZXJ0TWV0aG9kCiB7CiAJQ0lN X1NJTkdMRSwJCQkJCS8qIHVzZSB0YWJsZV90dXBsZV9pbnNlcnQgb3IgRXhlY0ZvcmVpZ25JbnNl cnQgKi8KLQlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRhYmxlX211bHRpX2luc2VydCBv cgorCUNJTV9NVUxUSSwJCQkJCS8qIGFsd2F5cyB1c2UgdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNl cnQgb3IKIAkJCQkJCQkJICogRXhlY0ZvcmVpZ25CYXRjaEluc2VydCAqLwotCUNJTV9NVUxUSV9D T05ESVRJT05BTCwJCS8qIHVzZSB0YWJsZV9tdWx0aV9pbnNlcnQgb3IKKwlDSU1fTVVMVElfQ09O RElUSU9OQUwsCQkvKiB1c2UgdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQgb3IKIAkJCQkJCQkJ ICogRXhlY0ZvcmVpZ25CYXRjaEluc2VydCBvbmx5IGlmIHZhbGlkICovCiB9IENvcHlJbnNlcnRN ZXRob2Q7CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTU4MjUwM2JiNC4uMGYwYWQz MDE4OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQ4Niw2ICs0ODYsNyBAQCBDb3B5 SGVhZGVyQ2hvaWNlCiBDb3B5SW5zZXJ0TWV0aG9kCiBDb3B5TWV0aG9kCiBDb3B5TG9nVmVyYm9z aXR5Q2hvaWNlCitDb3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0CiBDb3B5TXVsdGlJbnNlcnRC dWZmZXIKIENvcHlNdWx0aUluc2VydEluZm8KIENvcHlPbkVycm9yQ2hvaWNlCi0tIAoyLjM0LjEK Cg== --0000000000002461e00617360ed6--