Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lJqpw-0004Hf-Si for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Mar 2021 04:52:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lJqpQ-0001A8-8Z for pgsql-hackers@arkaria.postgresql.org; Wed, 10 Mar 2021 04:52:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lJqpP-0000yS-OH for pgsql-hackers@lists.postgresql.org; Wed, 10 Mar 2021 04:52:11 +0000 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1lJqpL-0001JS-MW for pgsql-hackers@postgresql.org; Wed, 10 Mar 2021 04:52:11 +0000 Received: by mail-pf1-x435.google.com with SMTP id t29so11088637pfg.11 for ; Tue, 09 Mar 2021 20:52:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cmpUDc98lmEe29WQUS+Fu4bgRNQdaCev9zJnKUSSnJ4=; b=Vq7woFfWTaZpP4waUAG6d6Gq7EMblVuQRj+UMJEd5YXvVRZJh2Hc0hnhprpsKXhoAD GONxWatuby4RLyiDb81dZMZ6WgMVVhfrnW9M2unkZMFLBiSjtHo8+fjl0z+n0oYGMrx0 0abBbmwvOBho6VMbVB8PGyoySBdbV7eVUapceOdwosPHnZNriRYmsSm5YlD3JE31st9t jXHCmhZM95EFJ+CUuOJWa4T0rI/n4N7KzRu5b3KcuHpaMbJCdrmmnUFLStwmlAKgdHfZ jl9eYukytbuHPV0lQU1xmk0t/BfVQED01an5aMRCXf5ziOVTFDzS9s78q/wXEzuYhbCt zQEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cmpUDc98lmEe29WQUS+Fu4bgRNQdaCev9zJnKUSSnJ4=; b=nnpvPHR37GluOLzsTjPP8OZ2pGWabIJNMfPGFPTJOzRtZykUJPipp4chhbONIxgHK+ 2XWvGXhINSw+tEpAnDlZbSMbV7Yz3NWCrCfYAQVtXSn/gI1xSYgmmQSlGh12Eaj6IUiO dXv8voi3the43yKTjCDxHxYKHf7VCXlXd152BXMEmDD52RhxiPCGiMOmsA6DcVv8V8GZ DfDnU13L92MUvJZ+00H7Teh3fdup4CdSKlA/AG1JvkUO3RAv1+8NxI8mHCE/+vs+3NGa 18teo8fk6ZoEryiBRVZa8xQi1PSdHzKsYgnayzgW6db/qUbRobZqo7NgVWYnjRQmt0gu zutg== X-Gm-Message-State: AOAM533DDU73z0tZz528vAsg3zAOABM2tPEqt2xqNDtwWvTh4+AAgeO4 GqjspxJjkdzWpeCR75bsjMMaige6aKETweh2qGI= X-Google-Smtp-Source: ABdhPJzaPPGW2ni/fioi8wTfsCpR9WAVsyRvejeOdX+Bai2hEiYzWfNOTZCbvKGicx/kUL6ghnL6d92lE/R3s9RGi5E= X-Received: by 2002:a62:52d7:0:b029:1f5:c33e:811c with SMTP id g206-20020a6252d70000b02901f5c33e811cmr1222240pfb.50.1615351925263; Tue, 09 Mar 2021 20:52:05 -0800 (PST) MIME-Version: 1.0 References: <20201217050522.GU30237@telsasoft.com> <20201217204442.GX30237@telsasoft.com> <20201218175439.GA30237@telsasoft.com> <20201221074725.GF30237@telsasoft.com> <20201225023958.GW30237@telsasoft.com> <96eaa813-4ad6-e80a-04a4-cc8082d356dd@swarm64.com> <508af801-6356-d36b-1867-011ac6df8f55@swarm64.com> In-Reply-To: From: Bharath Rupireddy Date: Wed, 10 Mar 2021 10:21:53 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Dilip Kumar Cc: Luc Vlaming , Justin Pryzby , PostgreSQL-development , Andres Freund , Paul Guo , Jeff Davis Content-Type: multipart/mixed; boundary="000000000000b17f3605bd276dc6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b17f3605bd276dc6 Content-Type: text/plain; charset="UTF-8" On Tue, Mar 9, 2021 at 1:45 PM Bharath Rupireddy wrote: > On Mon, Mar 8, 2021 at 6:37 PM Dilip Kumar wrote: >> > > Why do we need to invent a new version table_insert_v2? And also why > > it is named table_insert* instead of table_tuple_insert*? > > New version, because we changed the input parameters, now passing the > params via TableInsertState but existing table_tuple_insert doesn't do > that. If okay, I can change table_insert_v2 to table_tuple_insert_v2? > Thoughts? Changed table_insert_v2 to table_tuple_insert_v2. And also, rebased the patches on to the latest master. Attaching the v4 patch set. Please review it further. With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --000000000000b17f3605bd276dc6 Content-Type: application/x-patch; name="v4-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v4-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_km2y9wla0 RnJvbSA2NTE4MjEyNTgzZTI0YjAxNzM3NTUxMjcwMWQ5ZmVmYTZkZTIwZTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1Mzo0OCArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjQgMS8zXSBOZXcgVGFibGUgQU1zIGZvciBNdWx0aSBhbmQgU2luZ2xl IEluc2VydHMKClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgdGFibGUgYWNjZXNzIG1ldGhvZHMg Zm9yIG11bHRpIGFuZApzaW5nbGUgaW5zZXJ0cy4gQWxzbyBpbXBsZW1lbnRzL3JlYXJyYW5nZXMg dGhlIG91dHNpZGUgY29kZSBmb3IKaGVhcCBhbSBpbnRvIHRoZXNlIG5ldyBBUElzLgoKTWFpbiBk ZXNpZ24gZ29hbCBvZiB0aGVzZSBuZXcgQVBJcyBpcyB0byBnaXZlIGZsZXhpYmlsaXR5IHRvCnRh YmxlYW0gZGV2ZWxvcGVycyBpbiBpbXBsZW1lbnRpbmcgbXVsdGkgaW5zZXJ0IGxvZ2ljIGRlcGVu ZGVudCBvbgp0aGUgdW5kZXJseWluZyBzdG9yYWdlIGVuZ2luZS4gQ3VycmVudGx5LCBmb3IgYWxs IHRoZSB1bmRlcmx5aW5nCnN0b3JhZ2UgZW5naW5lcywgd2UgZm9sbG93IHRoZSBzYW1lIG11bHRp IGluc2VydCBsb2dpYyBzdWNoIGFzIHdoZW4KYW5kIGhvdyB0byBmbHVzaCB0aGUgYnVmZmVyZWQg dHVwbGVzLCB0dXBsZSBzaXplIGNhbGN1bGF0aW9uLCBhbmQKdGhpcyBsb2dpYyBkb2Vzbid0IHRh a2UgaW50byBhY2NvdW50IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZW5naW5lCmNhcGFiaWxpdGll cy4KCldlIGNhbiBhbHNvIGF2b2lkIGR1cGxpY2F0aW5nIG11bHRpIGluc2VydCBjb2RlIChmb3Ig ZXhpc3RpbmcgQ09QWSwKYW5kIHVwY29taW5nIENUQVMsIENSRUFURS9SRUZSRVNIIE1BVCBWSUVX IGFuZCBJTlNFUlQgU0VMRUNUcykuIFdlCmNhbiBhbHNvIG1vdmUgYnVsayBpbnNlcnQgc3RhdGUg YWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGluc2lkZQp0aGVzZSBBUElzLgotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAgICAgfCAyMTIgKysrKysrKysrKysrKysr KysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgIDUg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyAgICB8ICAgNyArCiBzcmMv YmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgIHwgIDgzICsrKysrKysrLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICA0OSArKysrKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAgODcgKysrKysrKysrKwogc3Jj L2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNo YW5nZWQsIDQzOCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKaW5kZXggM2I0MzVjMTA3ZC4uZDhiZmUxN2YyMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2lu Y2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpAQCAt MjY2OSw2ICsyNjcwLDIxNyBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwg VHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBf aW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIGhlYXBfaW5zZXJ0X2JlZ2lu IC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBz aW5nbGUgaW5zZXJ0czoKKyAqICAxKSBTcGVjaWZ5IGlzX211bHRpIGFzIGZhbHNlLCB0aGVuIG11 bHRpIGluc2VydCBzdGF0ZSB3aWxsIGJlIE5VTEwuCisgKgorICogRm9yIG11bHRpIGluc2VydHM6 CisgKiAgMSkgU3BlY2lmeSBpc19tdWx0aSBhcyB0cnVlLCB0aGVuIG11bHRpIGluc2VydCBzdGF0 ZSB3aWxsIGJlIGFsbG9jYXRlZCBhbmQKKyAqIAkgICBpbml0aWFsaXplZC4KKyAqCisgKiAgT3Ro ZXIgaW5wdXQgcGFyYW1ldGVycyBpLmUuIHJlbGF0aW9uLCBjb21tYW5kIGlkLCBvcHRpb25zIGFy ZSBjb21tb24gZm9yCisgKiAgYm90aCBzaW5nbGUgYW5kIG11bHRpIGluc2VydHMuCisgKi8KK1Rh YmxlSW5zZXJ0U3RhdGUqCitoZWFwX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsIENvbW1hbmRJ ZCBjaWQsIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUg KnN0YXRlOworCisJc3RhdGUgPSBwYWxsb2Moc2l6ZW9mKFRhYmxlSW5zZXJ0U3RhdGUpKTsKKwlz dGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5jaWQgPSBjaWQ7CisJc3RhdGUtPm9wdGlvbnMgPSBv cHRpb25zOworCS8qIEJlbG93IHBhcmFtZXRlcnMgYXJlIG5vdCB1c2VkIGZvciBzaW5nbGUgaW5z ZXJ0cy4gKi8KKwlzdGF0ZS0+bWlfc2xvdHMgPSBOVUxMOworCXN0YXRlLT5taXN0YXRlID0gTlVM TDsKKwlzdGF0ZS0+bWlfY3VyX3Nsb3RzID0gMDsKKwlzdGF0ZS0+Zmx1c2hlZCA9IGZhbHNlOwor CisJaWYgKGlzX211bHRpKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisK KwkJbWlzdGF0ZSA9IHBhbGxvYyhzaXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJc3Rh dGUtPm1pX3Nsb3RzID0KKwkJCQlwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1B WF9CVUZGRVJFRF9UVVBMRVMpOworCQltaXN0YXRlLT5tYXhfc2xvdHMgPSBNQVhfQlVGRkVSRURf VFVQTEVTOworCQltaXN0YXRlLT5tYXhfc2l6ZSA9IE1BWF9CVUZGRVJFRF9CWVRFUzsKKwkJbWlz dGF0ZS0+Y3VyX3NpemUgPSAwOworCQkvKgorCQkgKiBDcmVhdGUgYSB0ZW1wb3JhcnkgbWVtb3J5 IGNvbnRleHQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgb25jZSBwZXIKKwkJICogbXVsdGkgaW5zZXJ0 IGJhdGNoLgorCQkgKi8KKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9tdWx0aV9pbnNlcnQi LAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlzdGF0ZS0+bWlzdGF0 ZSA9IG1pc3RhdGU7CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogaGVhcF9pbnNl cnRfdjIgLSBpbnNlcnQgc2luZ2xlIHR1cGxlIGludG8gYSBoZWFwCisgKgorICogSW5zZXJ0IHR1 cGxlIGZyb20gc2xvdCBpbnRvIHRhYmxlLiBUaGlzIGlzIGxpa2UgaGVhcF9pbnNlcnQoKSwgdGhl IG9ubHkKKyAqIGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW9u IGFyZSBpbnNpZGUgdGFibGUgaW5zZXJ0CisgKiBzdGF0ZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQK K2hlYXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKK3sKKwlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKKwlIZWFwVHVwbGUJdHVwbGUgPSBF eGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKworCUFzc2Vy dChzdGF0ZSk7CisKKwkvKiBVcGRhdGUgdHVwbGUgd2l0aCB0YWJsZSBvaWQgKi8KKwlzbG90LT50 dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHN0YXRlLT5yZWwpOworCXR1cGxlLT50X3Rh YmxlT2lkID0gc2xvdC0+dHRzX3RhYmxlT2lkOworCisJLyogUGVyZm9ybSBpbnNlcnRpb24sIGFu ZCBjb3B5IHRoZSByZXN1bHRpbmcgSXRlbVBvaW50ZXIgKi8KKwloZWFwX2luc2VydChzdGF0ZS0+ cmVsLCB0dXBsZSwgc3RhdGUtPmNpZCwgc3RhdGUtPm9wdGlvbnMsIHN0YXRlLT5iaXN0YXRlKTsK KwlJdGVtUG9pbnRlckNvcHkoJnR1cGxlLT50X3NlbGYsICZzbG90LT50dHNfdGlkKTsKKworCWlm IChzaG91bGRGcmVlKQorCQlwZnJlZSh0dXBsZSk7Cit9CisKKy8qCisgKiBoZWFwX211bHRpX2lu c2VydF92MiAtIGluc2VydCBtdWx0aXBsZSB0dXBsZXMgaW50byBhIGhlYXAKKyAqCisgKiBDb21w dXRlIHNpemUgb2YgdHVwbGUuIFNlZSBpZiB0aGUgYnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQgdGhl IHR1cGxlLiBJZiB5ZXMsCisgKiBzdG9yZSBpdCBpbiB0aGUgYnVmZmVycywgb3RoZXJ3aXNlIGZs dXNoIGkuZS4gaW5zZXJ0IHRoZSBzbyBmYXIgYnVmZmVyZWQKKyAqIHR1cGxlcyBpbnRvIGhlYXAu CisgKgorICogRmx1c2ggY2FuIGhhcHBlbjoKKyAqICAxKSBlaXRoZXIgaWYgYWxsIHRoZSBidWZm ZXJlZCBzbG90cyBhcmUgZmlsbGVkIHVwCisgKiAgMikgb3IgaWYgdG90YWwgdHVwbGUgc2l6ZSBv ZiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHNsb3RzIGFyZSA+PSBtYXhfc2l6ZQorICovCit2b2lk CitoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJVHVwbGVUYWJsZVNsb3QgICpiYXRjaHNsb3Q7CisJSGVhcE11bHRp SW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJU2l6ZSBzejsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMpOworCisJLyogUmVzZXQgZmx1c2ggc3RhdGUg aWYgcHJldmlvdXNseSBzZXQuICovCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsKKwkJc3RhdGUt Pm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJfQorCisJQXNz ZXJ0KHN0YXRlLT5taV9jdXJfc2xvdHMgPCBtaXN0YXRlLT5tYXhfc2xvdHMpOworCisJaWYgKHN0 YXRlLT5taV9zbG90c1tzdGF0ZS0+bWlfY3VyX3Nsb3RzXSA9PSBOVUxMKQorCQlzdGF0ZS0+bWlf c2xvdHNbc3RhdGUtPm1pX2N1cl9zbG90c10gPQorCQkJCQkJCQkJdGFibGVfc2xvdF9jcmVhdGUo c3RhdGUtPnJlbCwgTlVMTCk7CisKKwliYXRjaHNsb3QgPSBzdGF0ZS0+bWlfc2xvdHNbc3RhdGUt Pm1pX2N1cl9zbG90c107CisKKwlFeGVjQ2xlYXJUdXBsZShiYXRjaHNsb3QpOworCUV4ZWNDb3B5 U2xvdChiYXRjaHNsb3QsIHNsb3QpOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdHVwbGUgc2l6ZSBh ZnRlciBvcmlnaW5hbCBzbG90IGlzIGNvcGllZCwgYmVjYXVzZSB0aGUgY29waWVkCisJICogc2xv dCB0eXBlIGFuZCB0dXBsZSBzaXplIG1heSBjaGFuZ2UuCisJICovCisJc3ogPSBHZXRUdXBsZVNp emUoYmF0Y2hzbG90LCBtaXN0YXRlLT5tYXhfc2l6ZSk7CisKKwlBc3NlcnQoc3ogPiAwKTsKKwor CXN0YXRlLT5taV9jdXJfc2xvdHMrKzsKKwltaXN0YXRlLT5jdXJfc2l6ZSArPSBzejsKKworCWlm IChzdGF0ZS0+bWlfY3VyX3Nsb3RzID49IG1pc3RhdGUtPm1heF9zbG90cyB8fAorCQltaXN0YXRl LT5jdXJfc2l6ZSA+PSBtaXN0YXRlLT5tYXhfc2l6ZSkKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCisvKgorICogaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2ggLSBmbHVzaCBi dWZmZXJlZCB0dXBsZXMsIGlmIGFueSwgaW50byBhIGhlYXAKKyAqCisgKiBGbHVzaCB0aGUgYnVm ZmVyZWQgdHVwbGVzLCBpbmRpY2F0ZSBjYWxsZXIgdGhhdCBmbHVzaGluZyBoYXBwZW5lZCBhbmQg cmVzZXQKKyAqIHBhcmFtZXRlcnMuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNo KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKQoreworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0 YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCUFzc2VydChzdGF0ZSk7CisKKwlt aXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlBc3Nl cnQobWlzdGF0ZSAmJiBzdGF0ZS0+bWlfc2xvdHMgJiYgc3RhdGUtPm1pX2N1cl9zbG90cyA+PSAw ICYmCisJCSAgIG1pc3RhdGUtPmNvbnRleHQpOworCisJaWYgKHN0YXRlLT5mbHVzaGVkKQorCXsK KwkJc3RhdGUtPm1pX2N1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5mbHVzaGVkID0gZmFsc2U7CisJ CXJldHVybjsKKwl9CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1pc3Rh dGUtPmNvbnRleHQpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIHN0YXRlLT5taV9z bG90cywgc3RhdGUtPm1pX2N1cl9zbG90cywKKwkJCQkJICBzdGF0ZS0+Y2lkLCBzdGF0ZS0+b3B0 aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCU1lbW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5jb250 ZXh0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlzdGF0ZS0+Zmx1 c2hlZCA9IHRydWU7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogaGVhcF9p bnNlcnRfZW5kIC0gY2xlYW4gdXAgVGFibGVJbnNlcnRTdGF0ZQorICoKKyAqIEZvciBtdWx0aSBp bnNlcnRzLCBlbnN1cmUgdG8gZmx1c2ggYWxsIHRoZSByZW1haW5pbmcgYnVmZmVycyB3aXRoCisg KiBoZWFwX211bHRpX2luc2VydF9mbHVzaCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgor ICoKKyAqIEluIHRoaXMgZnVuY3Rpb24sIGJ1ZmZlcmVkIHNsb3RzIGFyZSBkcm9wcGVkLCBzaG9y dC1saXZlZCBtZW1vcnkgY29udGV4dCBpcworICogZGVsZXRlZCwgbWlzdGF0ZSBhbmQgVGFibGVJ bnNlcnRTdGF0ZSBhcmUgZnJlZWQgdXAuCisgKi8KK3ZvaWQKK2hlYXBfaW5zZXJ0X2VuZChUYWJs ZUluc2VydFN0YXRlICpzdGF0ZSkKK3sKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsK KwlpbnQgaTsKKworCUFzc2VydChzdGF0ZSk7CisKKwltaXN0YXRlID0gKEhlYXBNdWx0aUluc2Vy dFN0YXRlICopc3RhdGUtPm1pc3RhdGU7CisKKwlpZiAoIW1pc3RhdGUpCisJeworCQlwZnJlZShz dGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlBc3NlcnQoc3RhdGUtPm1pX3Nsb3RzICYmICBtaXN0 YXRlLT5jb250ZXh0KTsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSBidWZmZXJzIGhhdmUgYmVlbiBm bHVzaGVkIGJlZm9yZS4gKi8KKwlBc3NlcnQoc3RhdGUtPm1pX2N1cl9zbG90cyA9PSAwIHx8IHN0 YXRlLT5mbHVzaGVkKTsKKworCWZvciAoaSA9IDA7IGkgPCBtaXN0YXRlLT5tYXhfc2xvdHMgJiYg c3RhdGUtPm1pX3Nsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJRXhlY0Ryb3BTaW5nbGVUdXBsZVRh YmxlU2xvdChzdGF0ZS0+bWlfc2xvdHNbaV0pOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShtaXN0 YXRlLT5jb250ZXh0KTsKKwlwZnJlZShtaXN0YXRlKTsKKwlwZnJlZShzdGF0ZS0+bWlfc2xvdHMp OworCXBmcmVlKHN0YXRlKTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGluc2Vy dCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggYmQ1ZmFmMGMxZi4uNjU1ZGU4ZTZiNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCkBAIC0yNTU4LDYgKzI1NTgsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1S b3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUgPSBo ZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVjdWxh dGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5zZXJ0 ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisJLnR1cGxlX2luc2VydF9iZWdpbiA9IGhlYXBfaW5zZXJ0 X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2luc2VydF92MiwKKwkubXVsdGlfaW5z ZXJ0X3YyID0gaGVhcF9tdWx0aV9pbnNlcnRfdjIsCisJLm11bHRpX2luc2VydF9mbHVzaCA9IGhl YXBfbXVsdGlfaW5zZXJ0X2ZsdXNoLAorCS50dXBsZV9pbnNlcnRfZW5kID0gaGVhcF9pbnNlcnRf ZW5kLAogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91cGRh dGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxlX2xv Y2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCAzMjVlY2RjMTIyLi45 NWYxZjliNmEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFw aS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTc4LDYg Kzc4LDEzIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRp bmUtPnR1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJvdXRp bmUtPm11bHRpX2luc2VydCAhPSBOVUxMKTsKKworCUFzc2VydChyb3V0aW5lLT50dXBsZV9pbnNl cnRfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2luc2VydF92MiAhPSBO VUxMKTsKKwlBc3NlcnQocm91dGluZS0+bXVsdGlfaW5zZXJ0X3YyICE9IE5VTEwpOworCUFzc2Vy dChyb3V0aW5lLT5tdWx0aV9pbnNlcnRfZmx1c2ggIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUt PnR1cGxlX2luc2VydF9lbmQgIT0gTlVMTCk7CisKIAlBc3NlcnQocm91dGluZS0+dHVwbGVfZGVs ZXRlICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV91cGRhdGUgIT0gTlVMTCk7CiAJ QXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2xvY2sgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVw bGVzLmMKaW5kZXggNzNjMzVkZjljOS4uNzlhZTIyNDU1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNU dXBsZXMuYwpAQCAtMTU5LDcgKzE1OSwxMSBAQCB0dHNfdmlydHVhbF9tYXRlcmlhbGl6ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKIAlpZiAoVFRTX1NIT1VMREZSRUUoc2xvdCkpCiAJCXJldHVybjsK IAotCS8qIGNvbXB1dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQgKi8KKwkvKgorCSAqIENvbXB1 dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQuIFRoaXMgc2l6ZSBjYWxjdWxhdGlvbiBjb2RlIGlz IGFsc28gdXNlZAorCSAqIGluIEdldFR1cGxlU2l6ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0 aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzIGhlcmUKKwkgKiBhbmQgYWxzbyB0aGVyZS4KKwkgKi8K IAlmb3IgKGludCBuYXR0ID0gMDsgbmF0dCA8IGRlc2MtPm5hdHRzOyBuYXR0KyspCiAJewogCQlG b3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIG5hdHQpOwpAQCAtMTIz OSw2ICsxMjQzLDgzIEBAIEV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoVHVwbGVUYWJsZVNs b3QgKnNsb3QpCiAJcGZyZWUoc2xvdCk7CiB9CiAKKy8qCisgKiBHZXRUdXBsZVNpemUgLSBDb21w dXRlIHRoZSB0dXBsZSBzaXplIGdpdmVuIGEgdGFibGUgc2xvdC4KKyAqCisgKiBGb3IgaGVhcCB0 dXBsZSwgYnVmZmVyIHR1cGxlIGFuZCBtaW5pbWFsIHR1cGxlIHNsb3QgdHlwZXMgcmV0dXJuIHRo ZSBhY3R1YWwKKyAqIHR1cGxlIHNpemUgdGhhdCBleGlzdHMuIEZvciB2aXJ0dWFsIHR1cGxlLCB0 aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZQorICogc2xvdCBkb2VzIG5vdCBoYXZlIHRoZSB0 dXBsZSBzaXplLiBJZiB0aGUgY29tcHV0ZWQgc2l6ZSBleGNlZWRzIHRoZSBnaXZlbgorICogbWF4 c2l6ZSBmb3IgdGhlIHZpcnR1YWwgdHVwbGUsIHRoaXMgZnVuY3Rpb24gZXhpdHMsIG5vdCBpbnZl c3RpbmcgdGltZSBpbgorICogZnVydGhlciB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlvbi4KKyAqCisg KiBJbXBvcnRhbnQgTm90ZXM6CisgKiAxKSBTaXplIGNhbGN1bGF0aW9uIGNvZGUgZm9yIHZpcnR1 YWwgc2xvdHMgaXMgYmVpbmcgdXNlZCBmcm9tCisgKiAJICB0dHNfdmlydHVhbF9tYXRlcmlhbGl6 ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yIGZpeGVzCisgKiAJ ICBoZXJlIGFuZCBhbHNvIHRoZXJlLgorICogMikgQ3VycmVudGx5LCBHZXRUdXBsZVNpemUoKSBo YW5kbGVzIHRoZSBleGlzdGluZyBoZWFwLCBidWZmZXIsIG1pbmltYWwgYW5kCisgKiAJICB2aXJ0 dWFsIHNsb3RzLiBFbnN1cmUgdG8gYWRkIHJlbGF0ZWQgY29kZSBpbiBjYXNlIGFueSBuZXcgc2xv dCB0eXBlIGlzCisgKiAgICBpbnRyb2R1Y2VkLgorICovCitpbmxpbmUgU2l6ZQorR2V0VHVwbGVT aXplKFR1cGxlVGFibGVTbG90ICpzbG90LCBTaXplIG1heHNpemUpCit7CisJU2l6ZSBzeiA9IDA7 CisJSGVhcFR1cGxlIHR1cGxlID0gTlVMTDsKKworCWlmIChUVFNfSVNfSEVBUFRVUExFKHNsb3Qp KQorCQl0dXBsZSA9ICgoSGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3QpLT50dXBsZTsKKwllbHNl IGlmKFRUU19JU19CVUZGRVJUVVBMRShzbG90KSkKKwkJdHVwbGUgPSAoKEJ1ZmZlckhlYXBUdXBs ZVRhYmxlU2xvdCAqKSBzbG90KS0+YmFzZS50dXBsZTsKKwllbHNlIGlmKFRUU19JU19NSU5JTUFM VFVQTEUoc2xvdCkpCisJCXR1cGxlID0gKChNaW5pbWFsVHVwbGVUYWJsZVNsb3QgKikgc2xvdCkt PnR1cGxlOworCWVsc2UgaWYoVFRTX0lTX1ZJUlRVQUwoc2xvdCkpCisJeworCQkvKgorCQkgKiBT aXplIGNhbGN1bGF0aW9uIGNvZGUgYmVpbmcgdXNlZCBoZXJlIGlzIGZyb20KKwkJICogdHRzX3Zp cnR1YWxfbWF0ZXJpYWxpemUoKSwgZW5zdXJlIHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBvciBm aXhlcworCQkgKiBoZXJlIGFuZCBhbHNvIHRoZXJlLgorCQkgKi8KKwkJVHVwbGVEZXNjCWRlc2Mg PSBzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yOworCisJCWZvciAoaW50IG5hdHQgPSAwOyBuYXR0 IDwgZGVzYy0+bmF0dHM7IG5hdHQrKykKKwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0g VHVwbGVEZXNjQXR0cihkZXNjLCBuYXR0KTsKKwkJCURhdHVtCQl2YWw7CisKKwkJCWlmIChhdHQt PmF0dGJ5dmFsKQorCQkJCXN6ICs9IGF0dC0+YXR0bGVuOworCisJCQlpZiAoc2xvdC0+dHRzX2lz bnVsbFtuYXR0XSkKKwkJCQljb250aW51ZTsKKworCQkJdmFsID0gc2xvdC0+dHRzX3ZhbHVlc1tu YXR0XTsKKworCQkJaWYgKGF0dC0+YXR0bGVuID09IC0xICYmCisJCQkJVkFSQVRUX0lTX0VYVEVS TkFMX0VYUEFOREVEKERhdHVtR2V0UG9pbnRlcih2YWwpKSkKKwkJCXsKKwkJCQlzeiA9IGF0dF9h bGlnbl9ub21pbmFsKHN6LCBhdHQtPmF0dGFsaWduKTsKKwkJCQlzeiArPSBFT0hfZ2V0X2ZsYXRf c2l6ZShEYXR1bUdldEVPSFAodmFsKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJc3ogPSBh dHRfYWxpZ25fbm9taW5hbChzeiwgYXR0LT5hdHRhbGlnbik7CisJCQkJc3ogPSBhdHRfYWRkbGVu Z3RoX2RhdHVtKHN6LCBhdHQtPmF0dGxlbiwgdmFsKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdl IGFyZSBub3QgaW50ZXJlc3RlZCBpbiBwcm9jZWVkaW5nIGZ1cnRoZXIgaWYgdGhlIGNvbXB1dGVk IHNpemUKKwkJCSAqIGNyb3NzZXMgbWF4c2l6ZSBsaW1pdCB0aGF0IHdlIGFyZSBsb29raW5nIGZv ci4KKwkJCSAqLworCQkJaWYgKG1heHNpemUgIT0gMCAmJiBzeiA+PSBtYXhzaXplKQorCQkJCWJy ZWFrOworCQl9CisJfQorCisJaWYgKHR1cGxlICE9IE5VTEwgJiYgIVRUU19JU19WSVJUVUFMKHNs b3QpKQorCQlzeiA9IHR1cGxlLT50X2xlbjsKKworCXJldHVybiBzejsKK30KIAogLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogICoJCQkJICB0dXBsZSB0YWJsZSBzbG90IGFjY2Vzc29yIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCmluZGV4IGJjMDkzNmJjMmQuLmRhNzRhYjA3MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTM2 LDExICszNiwyNiBAQAogI2RlZmluZSBIRUFQX0lOU0VSVF9OT19MT0dJQ0FMCVRBQkxFX0lOU0VS VF9OT19MT0dJQ0FMCiAjZGVmaW5lIEhFQVBfSU5TRVJUX1NQRUNVTEFUSVZFIDB4MDAxMAogCi10 eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CiBzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3Q7CiAKICNkZWZpbmUgTWF4TG9ja1R1cGxlTW9kZQlMb2NrVHVwbGVF eGNsdXNpdmUKIAorLyoKKyAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgdHVwbGVzIHBlciBzaW5n bGUgbXVsdGkgaW5zZXJ0IGJhdGNoCisgKgorICogQ2F1dGlvbjogRG9uJ3QgbWFrZSB0aGlzIHRv byBiaWcsIGFzIHdlIGNvdWxkIGVuZCB1cCB3aXRoIHRoaXMgbWFueSB0dXBsZXMKKyAqIHN0b3Jl ZCBpbiBtdWx0aSBpbnNlcnQgYnVmZmVyLiBJbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNlIHF1YWRy YXRpYyBncm93dGggaW4KKyAqIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGllcyBpbnRv IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIGEgbGFyZ2UKKyAqIG51bWJlciBvZiBwYXJ0aXRpb25z LgorICovCisjZGVmaW5lIE1BWF9CVUZGRVJFRF9UVVBMRVMJCTEwMDAKKworLyoKKyAqIEZsdXNo IG11bHRpIGluc2VydCBidWZmZXJzIGlmIHRoZXJlIGFyZSA+PSB0aGlzIG1hbnkgYnl0ZXMsIGFz IGNvdW50ZWQgYnkKKyAqIHRoZSBzaXplIG9mIHRoZSB0dXBsZXMgYnVmZmVyZWQuCisgKi8KKyNk ZWZpbmUgTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCiAvKgogICogRGVzY3JpcHRvciBmb3Ig aGVhcCB0YWJsZSBzY2Fucy4KICAqLwpAQCAtOTMsNiArMTA4LDI1IEBAIHR5cGVkZWYgZW51bQog CUhFQVBUVVBMRV9ERUxFVEVfSU5fUFJPR1JFU1MJLyogZGVsZXRpbmcgeGFjdCBpcyBzdGlsbCBp biBwcm9ncmVzcyAqLwogfSBIVFNWX1Jlc3VsdDsKIAorLyogSG9sZHMgbXVsdGkgaW5zZXJ0IHN0 YXRlIGZvciBoZWFwIGFjY2VzcyBtZXRob2QuKi8KK3R5cGVkZWYgc3RydWN0IEhlYXBNdWx0aUlu c2VydFN0YXRlCit7CisJLyogU3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeSBjb250ZXh0IGJl Zm9yZSBmbHVzaGluZy4gKi8KKwlNZW1vcnlDb250ZXh0ICAgICAgIGNvbnRleHQ7CisJLyogTWF4 aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBjYW4gYmUgYnVmZmVyZWQuICovCisJaW50MzIgICAg ICAgICAgICAgICBtYXhfc2xvdHM7CisJLyoKKwkgKiBNYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBv ZiBhbGwgdGhlIHR1cGxlcyB0aGF0IGEgc2luZ2xlIGJhdGNoIG9mCisJICogYnVmZmVyZWQgc2xv dHMgY2FuIGhvbGQuCisJICovCisJaW50NjQgICAgICAgICAgICAgICBtYXhfc2l6ZTsKKwkvKgor CSAqIFRvdGFsIHR1cGxlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgc2xvdHMgdGhhdCBhcmUgY3Vy cmVudGx5IGJ1ZmZlcmVkLgorCSAqIEZsdXNoIHRoZSBidWZmZXJlZCBzbG90cyB3aGVuIGN1cl9z aXplID49IG1heF9zaXplLgorCSAqLworCWludDY0ICAgICAgICAgICAgICAgY3VyX3NpemU7Cit9 IEhlYXBNdWx0aUluc2VydFN0YXRlOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rp b24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpAQCAtMTM0LDE1ICsxNjgs MjAgQEAgZXh0ZXJuIGJvb2wgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQs IFJlbGF0aW9uIHJlbGF0aW9uLAogCiBleHRlcm4gdm9pZCBoZWFwX2dldF9sYXRlc3RfdGlkKFRh YmxlU2NhbkRlc2Mgc2NhbiwgSXRlbVBvaW50ZXIgdGlkKTsKIAotZXh0ZXJuIEJ1bGtJbnNlcnRT dGF0ZSBHZXRCdWxrSW5zZXJ0U3RhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBGcmVlQnVsa0luc2Vy dFN0YXRlKEJ1bGtJbnNlcnRTdGF0ZSk7Ci1leHRlcm4gdm9pZCBSZWxlYXNlQnVsa0luc2VydFN0 YXRlUGluKEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKLQogZXh0ZXJuIHZvaWQgaGVhcF9pbnNl cnQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiAJCQkJ CQlpbnQgb3B0aW9ucywgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOwogZXh0ZXJuIHZvaWQgaGVh cF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIHN0cnVjdCBUdXBsZVRhYmxlU2xvdCAq KnNsb3RzLAogCQkJCQkJCSAgaW50IG50dXBsZXMsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25z LAogCQkJCQkJCSAgQnVsa0luc2VydFN0YXRlIGJpc3RhdGUpOworCitleHRlcm4gVGFibGVJbnNl cnRTdGF0ZSogaGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCSAgIGludCBvcHRpb25zLCBib29sIGlzX211bHRpKTsKK2V4dGVybiB2b2lkIGhl YXBfaW5zZXJ0X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpz dGF0ZSwKKwkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGhlYXBf bXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKTsKK2V4dGVybiB2b2lk IGhlYXBfaW5zZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSk7CisKIGV4dGVybiBUTV9S ZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIHRpZCwKIAkJ CQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9vbCB3YWl0LAogCQkJ CQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdpbmdQYXJ0KTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oCmluZGV4IDQxNGI2YjRkNTcuLjJhMTQ3MGE3YjYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApAQCAtMjI5LDYgKzIyOSwzMiBAQCB0eXBlZGVmIHN0cnVjdCBUTV9JbmRleERlbGV0ZU9w CiAJVE1fSW5kZXhTdGF0dXMgKnN0YXR1czsKIH0gVE1fSW5kZXhEZWxldGVPcDsKIAorLyogSG9s ZHMgdGFibGUgaW5zZXJ0IHN0YXRlLiAqLwordHlwZWRlZiBzdHJ1Y3QgVGFibGVJbnNlcnRTdGF0 ZQoreworCVJlbGF0aW9uCXJlbDsKKwkvKiBCdWxrIGluc2VydCBzdGF0ZSBpZiByZXF1ZXN0ZWQs IG90aGVyd2lzZSBOVUxMLiAqLworCXN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhCSpiaXN0YXRl OworCUNvbW1hbmRJZAljaWQ7CisJaW50CW9wdGlvbnM7CisJLyogQmVsb3cgbWVtYmVycyBhcmUg b25seSB1c2VkIGZvciBtdWx0aSBpbnNlcnRzLiAqLworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNs b3RzLiAqLworCVR1cGxlVGFibGVTbG90CSoqbWlfc2xvdHM7CisJLyogTnVtYmVyIG9mIHNsb3Rz IHRoYXQgYXJlIGN1cnJlbnRseSBidWZmZXJlZC4gKi8KKwlpbnQzMgltaV9jdXJfc2xvdHM7CisJ LyoKKwkgKiBBY2Nlc3MgbWV0aG9kIHNwZWNpZmljIGluZm9ybWF0aW9uIHN1Y2ggYXMgcGFyYW1l dGVycyB0aGF0IGFyZSBuZWVkZWQKKwkgKiBmb3IgYnVmZmVyaW5nIGFuZCBmbHVzaGluZyBkZWNp c2lvbnMgY2FuIGdvIGhlcmUuCisJICovCisJdm9pZAkqbWlzdGF0ZTsKKwkvKgorCSAqIFRoaXMg cGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYnVmZmVyZWQgc2xvdHMgaGF2 ZSBiZWVuCisJICogZmx1c2hlZCB0byBhIHRhYmxlLiBVc2VkIGJ5IGNhbGxlcnMgb2YgbXVsdGkg aW5zZXJ0IEFQSSBmb3IgaW5zZXJ0aW5nCisJICogaW50byBpbmRleGVzIG9yIGV4ZWN1dGluZyBh ZnRlciByb3cgdHJpZ2dlcnMsIGlmIGFueS4KKwkgKi8KKwlib29sCWZsdXNoZWQ7Cit9VGFibGVJ bnNlcnRTdGF0ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFibGVfdHVwbGVfaW5z ZXJ0ICovCiAvKiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsgUmVsYXRpb25OZWVk c1dBTCgpIG5vdyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTQkJMHgw MDAyCkBAIC01MDQsNiArNTMwLDE3IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJ dm9pZAkJKCptdWx0aV9pbnNlcnQpIChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xv dHMsIGludCBuc2xvdHMsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywgc3Ry dWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGUpOwogCisJVGFibGVJbnNlcnRTdGF0ZSog KCp0dXBsZV9pbnNlcnRfYmVnaW4pIChSZWxhdGlvbiByZWwsIENvbW1hbmRJZCBjaWQsCisJCQkJ CQkJCQkJCSBpbnQgb3B0aW9ucywgYm9vbCBpc19tdWx0aSk7CisKKwl2b2lkICgqdHVwbGVfaW5z ZXJ0X3YyKSAoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK KworCXZvaWQgKCptdWx0aV9pbnNlcnRfdjIpIChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOworCisJdm9pZCAoKm11bHRpX2luc2VydF9mbHVzaCkgKFRhYmxl SW5zZXJ0U3RhdGUgKnN0YXRlKTsKKworCXZvaWQgKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJ bnNlcnRTdGF0ZSAqc3RhdGUpOworCiAJLyogc2VlIHRhYmxlX3R1cGxlX2RlbGV0ZSgpIGZvciBy ZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2RlbGV0ZSkg KFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTg1MSw2ICs4ODgs OCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogfSBUYWJsZUFtUm91dGluZTsKIAog Cit0eXBlZGVmIHN0cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpCdWxrSW5zZXJ0U3RhdGU7CisK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNsb3QgZnVuY3Rpb25zLgogICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtODY5LDYgKzkwOCwxMCBAQCBleHRlcm4gY29uc3QgVHVwbGVUYWJsZVNs b3RPcHMgKnRhYmxlX3Nsb3RfY2FsbGJhY2tzKFJlbGF0aW9uIHJlbCk7CiAgKi8KIGV4dGVybiBU dXBsZVRhYmxlU2xvdCAqdGFibGVfc2xvdF9jcmVhdGUoUmVsYXRpb24gcmVsLCBMaXN0ICoqcmVn bGlzdCk7CiAKKy8qIEJ1bGsgaW5zZXJ0IHN0YXRlIGZ1bmN0aW9ucy4gKi8KK2V4dGVybiBCdWxr SW5zZXJ0U3RhdGUgR2V0QnVsa0luc2VydFN0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgRnJlZUJ1 bGtJbnNlcnRTdGF0ZShCdWxrSW5zZXJ0U3RhdGUpOworZXh0ZXJuIHZvaWQgUmVsZWFzZUJ1bGtJ bnNlcnRTdGF0ZVBpbihCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CiAKIC8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqIFRhYmxlIHNjYW4gZnVuY3Rpb25zLgpAQCAtMTQzMCw2ICsxNDczLDUwIEBA IHRhYmxlX211bHRpX2luc2VydChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xvdHMs IGludCBuc2xvdHMsCiAJCQkJCQkJCSAgY2lkLCBvcHRpb25zLCBiaXN0YXRlKTsKIH0KIAorc3Rh dGljIGlubGluZSBUYWJsZUluc2VydFN0YXRlKgordGFibGVfaW5zZXJ0X2JlZ2luKFJlbGF0aW9u IHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJICAgYm9vbCBhbGxvY19iaXN0 YXRlLCBib29sIGlzX211bHRpKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlID0gcmVsLT5y ZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfYmVnaW4ocmVsLCBjaWQsCisJCQkJCQkJCQkJb3B0aW9u cywgaXNfbXVsdGkpOworCisJLyogQWxsb2NhdGUgYnVsayBpbnNlcnQgc3RhdGUgaGVyZSwgc2lu Y2UgaXQncyBBTSBpbmRlcGVuZGVudC4gKi8KKwlpZiAoYWxsb2NfYmlzdGF0ZSkKKwkJc3RhdGUt PmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwllbHNlCisJCXN0YXRlLT5iaXN0YXRl ID0gTlVMTDsKKworCXJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJs ZV90dXBsZV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90 ICpzbG90KQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF92MihzdGF0 ZSwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbXVsdGlfaW5zZXJ0X3Yy KFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfdjIoc3RhdGUsIHNsb3QpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF9mbHVzaChUYWJsZUluc2VydFN0 YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT5tdWx0aV9pbnNlcnRfZmx1 c2goc3RhdGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2luc2VydF9lbmQoVGFi bGVJbnNlcnRTdGF0ZSAqc3RhdGUpCit7CisJLyogRGVhbGxvY2F0ZSBidWxrIGluc2VydCBzdGF0 ZSBoZXJlLCBzaW5jZSBpdCdzIEFNIGluZGVwZW5kZW50LiAqLworCWlmIChzdGF0ZS0+YmlzdGF0 ZSkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShzdGF0ZS0+YmlzdGF0ZSk7CisKKwlzdGF0ZS0+cmVs LT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfZW5kKHN0YXRlKTsKK30KKwogLyoKICAqIERlbGV0 ZSBhIHR1cGxlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxl LmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCmluZGV4IDY3OWU1N2ZiZGQuLjFm NTk2MTQxODMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysr IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaApAQCAtMzMwLDYgKzMzMCw3IEBAIGV4 dGVybiB2b2lkIHNsb3RfZ2V0bWlzc2luZ2F0dHJzKFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQg c3RhcnRBdHROdW0sCiAJCQkJCQkJCSBpbnQgbGFzdEF0dE51bSk7CiBleHRlcm4gdm9pZCBzbG90 X2dldHNvbWVhdHRyc19pbnQoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0pOwogCitl eHRlcm4gU2l6ZSBHZXRUdXBsZVNpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNpemUgbWF4c2l6 ZSk7CiAKICNpZm5kZWYgRlJPTlRFTkQKIAotLSAKMi4yNS4xCgo= --000000000000b17f3605bd276dc6 Content-Type: application/x-patch; name="v4-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Disposition: attachment; filename="v4-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_km2y9zgm1 RnJvbSBkOWRlOTIyODFkN2I1YzQ0YTZhMTU5OTRhOWExMTA1MjE0OWM5OTgxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1NDo1OSArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjQgMi8zXSBDVEFTIGFuZCBSRUZSRVNIIE1hdCBWaWV3IFdpdGggTmV3 IE11bHRpIEluc2VydCBUYWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBtdWx0aSBpbnNlcnQg dGFibGUgYWNjZXNzIG1ldGhvZHMgdG8KQ1JFQVRFIFRBQkxFIEFTLCBDUkVBVEUgTUFURVJJQUxJ WkVEIFZJRVcgYW5kIFJFRlJFU0ggTUFURVJJQUxJWkVEClZJRVcuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyB8IDQ5ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jICB8IDM1ICsrKysrKysrKysrKy0tLS0t LS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IGRjZTg4MjAxMmUuLjM2YWQwZWY2OTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTgsOSArNTgsNyBAQCB0eXBlZGVmIHN0cnVjdAog CS8qIFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxfc3RhcnR1cDogKi8KIAlSZWxh dGlvbglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KIAlPYmplY3RBZGRyZXNzIHJl bGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCi0JQ29t bWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICov Ci0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBv cHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRl ICovCisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJf aW50b3JlbDsKIAogLyogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVh dGlvbiAqLwpAQCAtNTQ2LDIyICs1NDQsMjYgQEAgaW50b3JlbF9zdGFydHVwKERlc3RSZWNlaXZl ciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCWlmIChpc19tYXR2 aWV3ICYmICFpbnRvLT5za2lwRGF0YSkKIAkJU2V0TWF0Vmlld1BvcHVsYXRlZFN0YXRlKGludG9S ZWxhdGlvbkRlc2MsIHRydWUpOwogCi0JLyoKLQkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15 U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwotCSAqLwotCW15U3RhdGUtPnJlbCA9IGlu dG9SZWxhdGlvbkRlc2M7Ci0JbXlTdGF0ZS0+cmVsYWRkciA9IGludG9SZWxhdGlvbkFkZHI7Ci0J bXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0 ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTTsKLQogCS8qCiAJICogSWYgV0lU SCBOTyBEQVRBIGlzIHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdXAgdGhlIHN0 YXRlIGZvcgotCSAqIGJ1bGsgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVzIHRvIGluc2Vy dC4KKwkgKiBidWxrIGluc2VydHMgYW5kIG11bHRpIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1 cGxlcyB0byBpbnNlcnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCXsKKwkJbXlTdGF0ZS0+aXN0YXRlID0g dGFibGVfaW5zZXJ0X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNLAor CQkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkJIHRydWUpOworCX0KIAllbHNlCi0JCW15U3Rh dGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5pc3RhdGUgPSBOVUxMOworCisJLyoKKwkg KiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5l cworCSAqLworCW15U3RhdGUtPnJlbCA9IGludG9SZWxhdGlvbkRlc2M7CisJbXlTdGF0ZS0+cmVs YWRkciA9IGludG9SZWxhdGlvbkFkZHI7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2Nr IGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTg5 LDExICs1OTEsNyBAQCBpbnRvcmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RS ZWNlaXZlciAqc2VsZikKIAkJICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNv IGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdz IHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJs ZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15 U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJ ICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT5p c3RhdGUsIHNsb3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQg cmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MDgsMTIgKzYwNiwxNyBA QCBzdGF0aWMgdm9pZAogaW50b3JlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJ RFJfaW50b3JlbCAqbXlTdGF0ZSA9IChEUl9pbnRvcmVsICopIHNlbGY7Ci0JSW50b0NsYXVzZSAq aW50byA9IG15U3RhdGUtPmludG87CisJaW50IHRpX29wdGlvbnM7CiAKLQlpZiAoIWludG8tPnNr aXBEYXRhKQorCWlmICghbXlTdGF0ZS0+aW50by0+c2tpcERhdGEpCiAJewotCQlGcmVlQnVsa0lu c2VydFN0YXRlKG15U3RhdGUtPmJpc3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQo bXlTdGF0ZS0+cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJdGlfb3B0aW9ucyA9IG15U3Rh dGUtPmlzdGF0ZS0+b3B0aW9uczsKKworCQl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKKworCQl0YWJsZV9pbnNlcnRfZW5kKG15U3RhdGUtPmlzdGF0ZSk7CisKKwkJ dGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnJlbCwgdGlfb3B0aW9ucyk7CiAJfQog CiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv bWF0dmlldy5jCmluZGV4IGM1YzI1Y2UxMWQuLjljNmI1Zjg1MjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2 aWV3LmMKQEAgLTUyLDEwICs1Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJRGVzdFJlY2VpdmVyIHB1 YjsJCQkvKiBwdWJsaWNseS1rbm93biBmdW5jdGlvbiBwb2ludGVycyAqLwogCU9pZAkJCXRyYW5z aWVudG9pZDsJLyogT0lEIG9mIG5ldyBoZWFwIGludG8gd2hpY2ggdG8gc3RvcmUgKi8KIAkvKiBU aGVzZSBmaWVsZHMgYXJlIGZpbGxlZCBieSB0cmFuc2llbnRyZWxfc3RhcnR1cDogKi8KLQlSZWxh dGlvbgl0cmFuc2llbnRyZWw7CS8qIHJlbGF0aW9uIHRvIHdyaXRlIHRvICovCi0JQ29tbWFuZElk CW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCi0JaW50 CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25z ICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJ VGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfdHJhbnNp ZW50cmVsOwogCiBzdGF0aWMgaW50CW1hdHZpZXdfbWFpbnRlbmFuY2VfZGVwdGggPSAwOwpAQCAt NDY2LDEwICs0NjMsMTEgQEAgdHJhbnNpZW50cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxm LCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJLyoKIAkgKiBGaWxsIHByaXZh dGUgZmllbGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwogCSAqLwotCW15 U3RhdGUtPnRyYW5zaWVudHJlbCA9IHRyYW5zaWVudHJlbDsKLQlteVN0YXRlLT5vdXRwdXRfY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFC TEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5iaXN0 YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7CisJbXlTdGF0ZS0+aXN0YXRlID0gdGFibGVfaW5z ZXJ0X2JlZ2luKHRyYW5zaWVudHJlbCwKKwkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0 cnVlKSwKKwkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNIHwgVEFCTEVfSU5TRVJUX0ZS T1pFTiwKKwkJCQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkgdHJ1ZSk7CiAKIAkvKgogCSAqIFZh bGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhl IHJlbGF0aW9uLgpAQCAtNDk0LDEyICs0OTIsNyBAQCB0cmFuc2llbnRyZWxfcmVjZWl2ZShUdXBs ZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCSAqIGNoZWFwIGVpdGhlci4g VGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNjZXNzaW5nIHBlci1BTSBkYXRhIChzYXkgYQogCSAq IHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkgKi8K LQotCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsCi0JCQkJCSAgIHNs b3QsCi0JCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCi0JCQkJCSAgIG15U3RhdGUtPnRpX29w dGlvbnMsCi0JCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOworCXRhYmxlX211bHRpX2luc2VydF92 MihteVN0YXRlLT5pc3RhdGUsIHNsb3QpOwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkg Y3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTEzLDE0 ICs1MDYsMjAgQEAgc3RhdGljIHZvaWQKIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0UmVjZWl2 ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5zaWVudHJl bCAqKSBzZWxmOworCWludCB0aV9vcHRpb25zOworCVJlbGF0aW9uIHRyYW5zaWVudHJlbDsKKwor CXRpX29wdGlvbnMgPSBteVN0YXRlLT5pc3RhdGUtPm9wdGlvbnM7CisJdHJhbnNpZW50cmVsID0g bXlTdGF0ZS0+aXN0YXRlLT5yZWw7CisKKwl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0 ZS0+aXN0YXRlKTsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJ dGFibGVfaW5zZXJ0X2VuZChteVN0YXRlLT5pc3RhdGUpOwogCi0JdGFibGVfZmluaXNoX2J1bGtf aW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7CisJdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KHRyYW5zaWVudHJlbCwgdGlfb3B0aW9ucyk7CiAKIAkvKiBj bG9zZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCi0JdGFibGVf Y2xvc2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwotCW15U3RhdGUtPnRyYW5zaWVu dHJlbCA9IE5VTEw7CisJdGFibGVfY2xvc2UodHJhbnNpZW50cmVsLCBOb0xvY2spOwogfQogCiAv KgotLSAKMi4yNS4xCgo= --000000000000b17f3605bd276dc6 Content-Type: application/x-patch; name="v4-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v4-0003-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_km2ya2fa2 RnJvbSBmMWY3N2ZmMjFhMzZhZDAzOTY4OGE1M2ExNmNhZDQ4NjMzZWNkOTIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMCBNYXIgMjAyMSAwOTo1OTozMiArMDUzMApT dWJqZWN0OiBbUEFUQ0ggdjQgMy8zXSBDT1BZIFdpdGggTmV3IE11bHRpIGFuZCBTaW5nbGUgSW5z ZXJ0IFRhYmxlIEFNCgpUaGlzIHBhdGNoIGFkZHMgbmV3IHNpbmdsZSBhbmQgbXVsdGkgaW5zZXJ0 IHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KQ09QWSBjb2RlLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHlmcm9tLmMgfCA0NzQgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAxNTAgaW5zZXJ0aW9ucygrKSwgMzI0IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCmluZGV4IDJlZDY5NmQ0MjkuLmIyZjU3ZjJiMWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYwpAQCAtNDYsNTQgKzQ2LDE3IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCi0vKgotICogTm8gbW9yZSB0aGFuIHRoaXMg bWFueSB0dXBsZXMgcGVyIENvcHlNdWx0aUluc2VydEJ1ZmZlcgotICoKLSAqIENhdXRpb246IERv bid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkK LSAqIENvcHlNdWx0aUluc2VydEJ1ZmZlciBpdGVtcyBzdG9yZWQgaW4gQ29weU11bHRpSW5zZXJ0 SW5mbydzCi0gKiBtdWx0aUluc2VydEJ1ZmZlcnMgbGlzdC4gIEluY3JlYXNpbmcgdGhpcyBjYW4g Y2F1c2UgcXVhZHJhdGljIGdyb3d0aCBpbgotICogbWVtb3J5IHJlcXVpcmVtZW50cyBkdXJpbmcg Y29waWVzIGludG8gcGFydGl0aW9uZWQgdGFibGVzIHdpdGggYSBsYXJnZQotICogbnVtYmVyIG9m IHBhcnRpdGlvbnMuCi0gKi8KLSNkZWZpbmUgTUFYX0JVRkZFUkVEX1RVUExFUwkJMTAwMAotCi0v KgotICogRmx1c2ggYnVmZmVycyBpZiB0aGVyZSBhcmUgPj0gdGhpcyBtYW55IGJ5dGVzLCBhcyBj b3VudGVkIGJ5IHRoZSBpbnB1dAotICogc2l6ZSwgb2YgdHVwbGVzIHN0b3JlZC4KLSAqLwotI2Rl ZmluZSBNQVhfQlVGRkVSRURfQllURVMJCTY1NTM1Ci0KIC8qIFRyaW0gdGhlIGxpc3Qgb2YgYnVm ZmVycyBiYWNrIGRvd24gdG8gdGhpcyBudW1iZXIgYWZ0ZXIgZmx1c2hpbmcgKi8KICNkZWZpbmUg TUFYX1BBUlRJVElPTl9CVUZGRVJTCTMyCiAKIC8qIFN0b3JlcyBtdWx0aS1pbnNlcnQgZGF0YSBy ZWxhdGVkIHRvIGEgc2luZ2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAqLwogdHlwZWRlZiBzdHJ1 Y3QgQ29weU11bHRpSW5zZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3RzW01BWF9C VUZGRVJFRF9UVVBMRVNdOyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMgKi8KLQlSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvOwkvKiBSZXN1bHRSZWxJbmZvIGZvciAncmVsaWQnICovCi0JQnVs a0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIEJ1bGtJbnNlcnRTdGF0ZSBmb3IgdGhpcyByZWwgKi8K LQlpbnQJCQludXNlZDsJCQkvKiBudW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAq LwotCXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVGRkVSRURfVFVQTEVTXTsJLyogTGluZSAjIG9mIHR1 cGxlIGluIGNvcHkKLQkJCQkJCQkJCQkJCSAqIHN0cmVhbSAqLworCVRhYmxlSW5zZXJ0U3RhdGUg KmlzdGF0ZTsKKwkvKiBMaW5lICMgb2YgdHVwbGUgaW4gY29weSBzdHJlYW0uICovCisJdWludDY0 CQlsaW5lbm9zW01BWF9CVUZGRVJFRF9UVVBMRVNdOwogfSBDb3B5TXVsdGlJbnNlcnRCdWZmZXI7 CiAKLS8qCi0gKiBTdG9yZXMgb25lIG9yIG1hbnkgQ29weU11bHRpSW5zZXJ0QnVmZmVycyBhbmQg ZGV0YWlscyBhYm91dCB0aGUgc2l6ZSBhbmQKLSAqIG51bWJlciBvZiB0dXBsZXMgd2hpY2ggYXJl IHN0b3JlZCBpbiB0aGVtLiAgVGhpcyBhbGxvd3MgbXVsdGlwbGUgYnVmZmVycyB0bwotICogZXhp c3QgYXQgb25jZSB3aGVuIENPUFlpbmcgaW50byBhIHBhcnRpdGlvbmVkIHRhYmxlLgotICovCi10 eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRJbmZvCi17Ci0JTGlzdAkgICAqbXVsdGlJbnNl cnRCdWZmZXJzOyAvKiBMaXN0IG9mIHRyYWNrZWQgQ29weU11bHRpSW5zZXJ0QnVmZmVycyAqLwot CWludAkJCWJ1ZmZlcmVkVHVwbGVzOyAvKiBudW1iZXIgb2YgdHVwbGVzIGJ1ZmZlcmVkIG92ZXIg YWxsIGJ1ZmZlcnMgKi8KLQlpbnQJCQlidWZmZXJlZEJ5dGVzOwkvKiBudW1iZXIgb2YgYnl0ZXMg ZnJvbSBhbGwgYnVmZmVyZWQgdHVwbGVzICovCi0JQ29weUZyb21TdGF0ZQljc3RhdGU7CQkJLyog Q29weSBzdGF0ZSBmb3IgdGhpcyBDb3B5TXVsdGlJbnNlcnRJbmZvICovCi0JRVN0YXRlCSAgICpl c3RhdGU7CQkJLyogRXhlY3V0b3Igc3RhdGUgdXNlZCBmb3IgQ09QWSAqLwotCUNvbW1hbmRJZAlt eWNpZDsJCQkvKiBDb21tYW5kIElkIHVzZWQgZm9yIENPUFkgKi8KLQlpbnQJCQl0aV9vcHRpb25z OwkJLyogdGFibGUgaW5zZXJ0IG9wdGlvbnMgKi8KLX0gQ29weU11bHRpSW5zZXJ0SW5mbzsKLQot CiAvKiBub24tZXhwb3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBjaGFyICpsaW1p dF9wcmludG91dF9sZW5ndGgoY29uc3QgY2hhciAqc3RyKTsKIApAQCAtMjEwLDE0MyArMTczLDYx IEBAIGxpbWl0X3ByaW50b3V0X2xlbmd0aChjb25zdCBjaGFyICpzdHIpCiAgKiBBbGxvY2F0ZSBt ZW1vcnkgYW5kIGluaXRpYWxpemUgYSBuZXcgQ29weU11bHRpSW5zZXJ0QnVmZmVyIGZvciB0aGlz CiAgKiBSZXN1bHRSZWxJbmZvLgogICovCi1zdGF0aWMgQ29weU11bHRpSW5zZXJ0QnVmZmVyICoK LUNvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoUmVzdWx0UmVsSW5mbyAqcnJpKQotewotCUNvcHlN dWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwotCi0JYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1 ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZlcikpOwotCW1lbXNldChi dWZmZXItPnNsb3RzLCAwLCBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURf VFVQTEVTKTsKLQlidWZmZXItPnJlc3VsdFJlbEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0YXRl ID0gR2V0QnVsa0luc2VydFN0YXRlKCk7Ci0JYnVmZmVyLT5udXNlZCA9IDA7Ci0KLQlyZXR1cm4g YnVmZmVyOwotfQotCi0vKgotICogTWFrZSBhIG5ldyBidWZmZXIgZm9yIHRoaXMgUmVzdWx0UmVs SW5mby4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBC dWZmZXIoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbElu Zm8gKnJyaSkKK3N0YXRpYyB2b2lkCitJbml0Q29weU11bHRpSW5zZXJ0QnVmZmVySW5mbyhMaXN0 ICoqbWlycmksIFJlc3VsdFJlbEluZm8gKnJyaSwKKwkJCQkJCQkgIENvbW1hbmRJZCBteWNpZCwg aW50IHRpX29wdGlvbnMpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CiAKLQli dWZmZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KHJyaSk7CisJYnVmZmVyID0gKENvcHlN dWx0aUluc2VydEJ1ZmZlciAqKSBwYWxsb2MwKHNpemVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIp KTsKKwlidWZmZXItPmlzdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihycmktPnJpX1JlbGF0aW9u RGVzYywgbXljaWQsCisJCQkJCQkJCQkJdGlfb3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7CiAKIAkvKiBT ZXR1cCBiYWNrLWxpbmsgc28gd2UgY2FuIGVhc2lseSBmaW5kIHRoaXMgYnVmZmVyIGFnYWluICov CiAJcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPSBidWZmZXI7Ci0JLyogUmVjb3JkIHRo YXQgd2UncmUgdHJhY2tpbmcgdGhpcyBidWZmZXIgKi8KLQltaWluZm8tPm11bHRpSW5zZXJ0QnVm ZmVycyA9IGxhcHBlbmQobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMsIGJ1ZmZlcik7CisJKm1p cnJpID0gbGFwcGVuZCgqbWlycmksIHJyaSk7CiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIGFuIGFs cmVhZHkgYWxsb2NhdGVkIENvcHlNdWx0aUluc2VydEluZm8uCi0gKgotICogSWYgcnJpIGlzIGEg bm9uLXBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gYSBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgaXMgc2V0 IHVwCi0gKiBmb3IgdGhhdCB0YWJsZS4KKyAqIFJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJz IG9yIGluc2VydCBpbnRvIGluZGV4ZXMsIGlmIGFueSwgYWZ0ZXIgYnVmZmVyZWQKKyAqIHR1cGxl cyBhcmUgZmx1c2hlZCB0byB0YWJsZS4KICAqLwogc3RhdGljIHZvaWQKLUNvcHlNdWx0aUluc2Vy dEluZm9Jbml0KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJp LAotCQkJCQkJQ29weUZyb21TdGF0ZSBjc3RhdGUsIEVTdGF0ZSAqZXN0YXRlLCBDb21tYW5kSWQg bXljaWQsCi0JCQkJCQlpbnQgdGlfb3B0aW9ucykKK0hhbmRsZUFmdGVyUm93RXZlbnRzKFJlc3Vs dFJlbEluZm8gKnJyaSwgRVN0YXRlICplc3RhdGUsCisJCQkJCSBDb3B5RnJvbVN0YXRlIGNzdGF0 ZSwgaW50MzIgY3VyX3Nsb3RzKQogewotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gTklM OwotCW1paW5mby0+YnVmZmVyZWRUdXBsZXMgPSAwOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyA9 IDA7Ci0JbWlpbmZvLT5jc3RhdGUgPSBjc3RhdGU7Ci0JbWlpbmZvLT5lc3RhdGUgPSBlc3RhdGU7 Ci0JbWlpbmZvLT5teWNpZCA9IG15Y2lkOwotCW1paW5mby0+dGlfb3B0aW9ucyA9IHRpX29wdGlv bnM7Ci0KLQkvKgotCSAqIE9ubHkgc2V0dXAgdGhlIGJ1ZmZlciB3aGVuIG5vdCBkZWFsaW5nIHdp dGggYSBwYXJ0aXRpb25lZCB0YWJsZS4KLQkgKiBCdWZmZXJzIGZvciBwYXJ0aXRpb25lZCB0YWJs ZXMgd2lsbCBqdXN0IGJlIHNldHVwIHdoZW4gd2UgbmVlZCB0byBzZW5kCi0JICogdHVwbGVzIHRo ZWlyIHdheSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0JICovCi0JaWYgKHJyaS0+cmlfUmVsYXRpb25E ZXNjLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJQ29w eU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKG1paW5mbywgcnJpKTsKLX0KLQotLyoKLSAqIFJl dHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVycyBhcmUgZnVsbAotICovCi1zdGF0aWMgaW5saW5lIGJv b2wKLUNvcHlNdWx0aUluc2VydEluZm9Jc0Z1bGwoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZv KQotewotCWlmIChtaWluZm8tPmJ1ZmZlcmVkVHVwbGVzID49IE1BWF9CVUZGRVJFRF9UVVBMRVMg fHwKLQkJbWlpbmZvLT5idWZmZXJlZEJ5dGVzID49IE1BWF9CVUZGRVJFRF9CWVRFUykKLQkJcmV0 dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0vKgotICogUmV0dXJucyB0cnVlIGlmIHdl IGhhdmUgbm8gYnVmZmVyZWQgdHVwbGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotQ29weU11 bHRpSW5zZXJ0SW5mb0lzRW1wdHkoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvKQotewotCXJl dHVybiBtaWluZm8tPmJ1ZmZlcmVkVHVwbGVzID09IDA7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0aGUg dHVwbGVzIHN0b3JlZCBpbiAnYnVmZmVyJyBvdXQgdG8gdGhlIHRhYmxlLgotICovCi1zdGF0aWMg aW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydElu Zm8gKm1paW5mbywKLQkJCQkJCSAgIENvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyKQotewot CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKLQlpbnQJCQlpOwotCXVpbnQ2NAkJc2F2ZV9jdXJf bGluZW5vOwotCUNvcHlGcm9tU3RhdGUJY3N0YXRlID0gbWlpbmZvLT5jc3RhdGU7Ci0JRVN0YXRl CSAgICplc3RhdGUgPSBtaWluZm8tPmVzdGF0ZTsKLQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8t Pm15Y2lkOwotCWludAkJCXRpX29wdGlvbnMgPSBtaWluZm8tPnRpX29wdGlvbnM7Ci0JYm9vbAkJ bGluZV9idWZfdmFsaWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwotCWludAkJCW51c2VkID0g YnVmZmVyLT5udXNlZDsKLQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvID0gYnVmZmVyLT5y ZXN1bHRSZWxJbmZvOwotCVR1cGxlVGFibGVTbG90ICoqc2xvdHMgPSBidWZmZXItPnNsb3RzOwor CWludCBpOworCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVs dGlJbnNlcnRCdWZmZXI7CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gYnVmZmVyLT5pc3Rh dGU7CisJdWludDY0CXNhdmVfY3VyX2xpbmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKKwlib29s CWxpbmVfYnVmX3ZhbGlkID0gY3N0YXRlLT5saW5lX2J1Zl92YWxpZDsKIAotCS8qCi0JICogUHJp bnQgZXJyb3IgY29udGV4dCBpbmZvcm1hdGlvbiBjb3JyZWN0bHksIGlmIG9uZSBvZiB0aGUgb3Bl cmF0aW9ucwotCSAqIGJlbG93IGZhaWwuCi0JICovCiAJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9 IGZhbHNlOwotCXNhdmVfY3VyX2xpbmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKIAotCS8qCi0J ICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0 LWxpdmVkIG1lbW9yeQotCSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQuCi0JICovCi0Jb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQo ZXN0YXRlKSk7Ci0JdGFibGVfbXVsdGlfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYywKLQkJCQkJICAgc2xvdHMsCi0JCQkJCSAgIG51c2VkLAotCQkJCQkgICBteWNpZCwKLQkJ CQkJICAgdGlfb3B0aW9ucywKLQkJCQkJICAgYnVmZmVyLT5iaXN0YXRlKTsKLQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVzZWQ7IGkrKykK Kwlmb3IgKGkgPSAwOyBpIDwgY3VyX3Nsb3RzOyBpKyspCiAJewogCQkvKgogCQkgKiBJZiB0aGVy ZSBhcmUgYW55IGluZGV4ZXMsIHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGluc2VydGVkIHR1cGxl cywKIAkJICogYW5kIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzLgogCQkgKi8KLQkJaWYg KHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQorCQlpZiAocnJpLT5yaV9OdW1JbmRp Y2VzID4gMCkKIAkJewotCQkJTGlzdAkgICAqcmVjaGVja0luZGV4ZXM7CisJCQlMaXN0ICAgICAg ICpyZWNoZWNrSW5kZXhlczsKIAogCQkJY3N0YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5l bm9zW2ldOwotCQkJcmVjaGVja0luZGV4ZXMgPQotCQkJCUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhy ZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJICBidWZmZXItPnNsb3RzW2ldLCBlc3RhdGUsIGZhbHNl LCBmYWxzZSwKLQkJCQkJCQkJCSAgTlVMTCwgTklMKTsKLQkJCUV4ZWNBUkluc2VydFRyaWdnZXJz KGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJIHNsb3RzW2ldLCByZWNoZWNrSW5kZXhl cywKLQkJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKKwkJCXJlY2hlY2tJbmRl eGVzID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJyaSwKKwkJCQkJCQkJCQkJCQlpc3RhdGUtPm1p X3Nsb3RzW2ldLCBlc3RhdGUsCisJCQkJCQkJCQkJCQkJZmFsc2UsCisJCQkJCQkJCQkJCQkJZmFs c2UsCisJCQkJCQkJCQkJCQkJTlVMTCwKKwkJCQkJCQkJCQkJCQlOVUxMKTsKKworCQkJRXhlY0FS SW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLAorCQkJCQkJCQlycmksCisJCQkJCQkJCWlzdGF0ZS0+bWlf c2xvdHNbaV0sCisJCQkJCQkJCXJlY2hlY2tJbmRleGVzLAorCQkJCQkJCQljc3RhdGUtPnRyYW5z aXRpb25fY2FwdHVyZSk7CisKIAkJCWxpc3RfZnJlZShyZWNoZWNrSW5kZXhlcyk7CiAJCX0KIApA QCAtMzU0LDc5ICsyMzUsNjkgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLAogCQkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBzZWUgaWYg d2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVAogCQkgKiB0cmlnZ2VycyBhbnl3YXkuCiAJ CSAqLwotCQllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCi0J CQkJIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8 Ci0JCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxl KSkKKwkJZWxzZSBpZiAocnJpLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCQkJIChycmktPnJp X1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCQkgIHJyaS0+cmlfVHJpZ0Rl c2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCiAJCXsKIAkJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9 IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVz dWx0UmVsSW5mbywKLQkJCQkJCQkJIHNsb3RzW2ldLCBOSUwsIGNzdGF0ZS0+dHJhbnNpdGlvbl9j YXB0dXJlKTsKKwkJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwKKwkJCQkJCQkJIHJyaSwK KwkJCQkJCQkJIGlzdGF0ZS0+bWlfc2xvdHNbaV0sCisJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkg Y3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOwogCQl9Ci0KLQkJRXhlY0NsZWFyVHVwbGUoc2xv dHNbaV0pOwogCX0KIAotCS8qIE1hcmsgdGhhdCBhbGwgc2xvdHMgYXJlIGZyZWUgKi8KLQlidWZm ZXItPm51c2VkID0gMDsKLQogCS8qIHJlc2V0IGN1cl9saW5lbm8gYW5kIGxpbmVfYnVmX3ZhbGlk IHRvIHdoYXQgdGhleSB3ZXJlICovCiAJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGxpbmVfYnVm X3ZhbGlkOwogCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IHNhdmVfY3VyX2xpbmVubzsKLX0KKyB9CiAK IC8qCi0gKiBEcm9wIHVzZWQgc2xvdHMgYW5kIGZyZWUgbWVtYmVyIGZvciB0aGlzIGJ1ZmZlci4K LSAqCi0gKiBUaGUgYnVmZmVyIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgY2xlYW51cC4KKyAqIFN0 b3JlIHR1cGxlIGZyb20gdGhlIGluY29taW5nIHNsb3QgaW50byBidWZmZXJlZCBzbG90cy4KICAq Lwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVwKENvcHlN dWx0aUluc2VydEluZm8gKm1paW5mbywKLQkJCQkJCQkgQ29weU11bHRpSW5zZXJ0QnVmZmVyICpi dWZmZXIpCitzdGF0aWMgdm9pZAorQ29weU11bHRpSW5zZXJ0QnVmZmVyVHVwbGUoUmVzdWx0UmVs SW5mbyAqcnJpLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCSAgIENvcHlGcm9tU3RhdGUg Y3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSkKIHsKLQlpbnQJCQlpOwotCi0JLyogRW5zdXJlIGJ1ZmZl ciB3YXMgZmx1c2hlZCAqLwotCUFzc2VydChidWZmZXItPm51c2VkID09IDApOwotCi0JLyogUmVt b3ZlIGJhY2stbGluayB0byBvdXJzZWxmICovCi0JYnVmZmVyLT5yZXN1bHRSZWxJbmZvLT5yaV9D b3B5TXVsdGlJbnNlcnRCdWZmZXIgPSBOVUxMOwotCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZm ZXItPmJpc3RhdGUpOworCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9D b3B5TXVsdGlJbnNlcnRCdWZmZXI7CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gYnVmZmVy LT5pc3RhdGU7CiAKLQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1 c3QgZHJvcCB0aGUgbm9uLW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZF UkVEX1RVUExFUyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl0YWJsZV9tdWx0aV9pbnNl cnRfdjIoYnVmZmVyLT5pc3RhdGUsIHNsb3QpOwogCi0JdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0 KGJ1ZmZlci0+cmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSBtaWluZm8t PnRpX29wdGlvbnMpOworCWJ1ZmZlci0+bGluZW5vc1tpc3RhdGUtPm1pX2N1cl9zbG90cyAtIDFd ID0gY3N0YXRlLT5jdXJfbGluZW5vOwogCi0JcGZyZWUoYnVmZmVyKTsKKwlpZiAoaXN0YXRlLT5m bHVzaGVkKQorCQlIYW5kbGVBZnRlclJvd0V2ZW50cyhycmksIGVzdGF0ZSwgY3N0YXRlLCBpc3Rh dGUtPm1pX2N1cl9zbG90cyk7CiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYWxsIHN0b3JlZCB0dXBs ZXMgaW4gYWxsIGJ1ZmZlcnMgb3V0IHRvIHRoZSB0YWJsZXMuCi0gKgotICogT25jZSBmbHVzaGVk IHdlIGFsc28gdHJpbSB0aGUgdHJhY2tlZCBidWZmZXJzIGxpc3QgZG93biB0byBzaXplIGJ5IHJl bW92aW5nCi0gKiB0aGUgYnVmZmVycyBjcmVhdGVkIGVhcmxpZXN0IGZpcnN0LgotICoKLSAqIENh bGxlcnMgc2hvdWxkIHBhc3MgJ2N1cnJfcnJpJyBpcyB0aGUgUmVzdWx0UmVsSW5mbyB0aGF0J3Mg Y3VycmVudGx5IGJlaW5nCi0gKiB1c2VkLiAgV2hlbiBjbGVhbmluZyB1cCBvbGQgYnVmZmVycyB3 ZSdsbCBuZXZlciByZW1vdmUgdGhlIG9uZSBmb3IKLSAqICdjdXJyX3JyaScuCisgKiBGbHVzaCB0 dXBsZXMgaW50byB0YWJsZSBmcm9tIHRoZSBidWZmZXJlZCBzbG90cy4KICAqLwotc3RhdGljIGlu bGluZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAq bWlpbmZvLCBSZXN1bHRSZWxJbmZvICpjdXJyX3JyaSkKLXsKK3N0YXRpYyB2b2lkCitDb3B5TXVs aXRJbnNlcnRGbHVzaEJ1ZmZlcnMoTGlzdCAqKm1pcnJpLCBSZXN1bHRSZWxJbmZvICpjdXJyX3Jy aSwKKwkJCQkJCQlDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUpCisgewogCUxp c3RDZWxsICAgKmxjOworCVJlc3VsdFJlbEluZm8gKnJyaTsKKwlDb3B5TXVsdGlJbnNlcnRCdWZm ZXIgKmJ1ZmZlcjsKKwlUYWJsZUluc2VydFN0YXRlICppc3RhdGU7CiAKLQlmb3JlYWNoKGxjLCBt aWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycykKKwlmb3JlYWNoKGxjLCAqbWlycmkpCiAJewotCQlD b3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikg bGZpcnN0KGxjKTsKKwkJcnJpID0gbGZpcnN0KGxjKTsKKwkJYnVmZmVyID0gcnJpLT5yaV9Db3B5 TXVsdGlJbnNlcnRCdWZmZXI7CisJCWlzdGF0ZSA9IGJ1ZmZlci0+aXN0YXRlOworCisJCXRhYmxl X211bHRpX2luc2VydF9mbHVzaChpc3RhdGUpOwogCi0JCUNvcHlNdWx0aUluc2VydEJ1ZmZlckZs dXNoKG1paW5mbywgYnVmZmVyKTsKKwkJaWYgKGlzdGF0ZS0+Zmx1c2hlZCkKKwkJCUhhbmRsZUFm dGVyUm93RXZlbnRzKHJyaSwgZXN0YXRlLCBjc3RhdGUsIGlzdGF0ZS0+bWlfY3VyX3Nsb3RzKTsK IAl9CiAKLQltaWluZm8tPmJ1ZmZlcmVkVHVwbGVzID0gMDsKLQltaWluZm8tPmJ1ZmZlcmVkQnl0 ZXMgPSAwOworCXJyaSA9IE5VTEw7CisJYnVmZmVyID0gTlVMTDsKKwlpc3RhdGUgPSBOVUxMOwog CiAJLyoKIAkgKiBUcmltIHRoZSBsaXN0IG9mIHRyYWNrZWQgYnVmZmVycyBkb3duIGlmIGl0IGV4 Y2VlZHMgdGhlIGxpbWl0LiAgSGVyZSB3ZQpAQCAtNDM0LDg3ICszMDUsNTkgQEAgQ29weU11bHRp SW5zZXJ0SW5mb0ZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5m byAqY3Vycl9ycmkpCiAJICogbGlrZWx5IHRoYXQgdGhlc2Ugb2xkZXIgb25lcyB3aWxsIGJlIG5l ZWRlZCB0aGFuIHRoZSBvbmVzIHRoYXQgd2VyZQogCSAqIGp1c3QgY3JlYXRlZC4KIAkgKi8KLQl3 aGlsZSAobGlzdF9sZW5ndGgobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpID4gTUFYX1BBUlRJ VElPTl9CVUZGRVJTKQorCXdoaWxlIChsaXN0X2xlbmd0aCgqbWlycmkpID4gTUFYX1BBUlRJVElP Tl9CVUZGRVJTKQogCXsKLQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CisJCWludCB0 aV9vcHRpb25zOwogCi0JCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgbGluaXRp YWwobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpOworCQlycmkgPSAoUmVzdWx0UmVsSW5mbyAq KSBsaW5pdGlhbCgqbWlycmkpOwogCiAJCS8qCiAJCSAqIFdlIG5ldmVyIHdhbnQgdG8gcmVtb3Zl IHRoZSBidWZmZXIgdGhhdCdzIGN1cnJlbnRseSBiZWluZyB1c2VkLCBzbwogCQkgKiBpZiB3ZSBo YXBwZW4gdG8gZmluZCB0aGF0IHRoZW4gbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0Lgog CQkgKi8KLQkJaWYgKGJ1ZmZlci0+cmVzdWx0UmVsSW5mbyA9PSBjdXJyX3JyaSkKKwkJaWYgKHJy aSA9PSBjdXJyX3JyaSkKIAkJewotCQkJbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMgPSBsaXN0 X2RlbGV0ZV9maXJzdChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7Ci0JCQltaWluZm8tPm11 bHRpSW5zZXJ0QnVmZmVycyA9IGxhcHBlbmQobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMsIGJ1 ZmZlcik7Ci0JCQlidWZmZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVyICopIGxpbml0aWFsKG1p aW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKKwkJCSptaXJyaSA9IGxpc3RfZGVsZXRlX2ZpcnN0 KCptaXJyaSk7CisJCQkqbWlycmkgPSBsYXBwZW5kKCptaXJyaSwgcnJpKTsKKwkJCXJyaSA9IChS ZXN1bHRSZWxJbmZvICopIGxpbml0aWFsKCptaXJyaSk7CiAJCX0KIAotCQlDb3B5TXVsdGlJbnNl cnRCdWZmZXJDbGVhbnVwKG1paW5mbywgYnVmZmVyKTsKLQkJbWlpbmZvLT5tdWx0aUluc2VydEJ1 ZmZlcnMgPSBsaXN0X2RlbGV0ZV9maXJzdChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7Ci0J fQotfQorCQlidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwkJaXN0YXRl ID0gYnVmZmVyLT5pc3RhdGU7CisJCXRpX29wdGlvbnMgPSBpc3RhdGUtPm9wdGlvbnM7CiAKLS8q Ci0gKiBDbGVhbnVwIGFsbG9jYXRlZCBidWZmZXJzIGFuZCBmcmVlIG1lbW9yeQotICovCi1zdGF0 aWMgaW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKENvcHlNdWx0aUluc2Vy dEluZm8gKm1paW5mbykKLXsKLQlMaXN0Q2VsbCAgICpsYzsKLQotCWZvcmVhY2gobGMsIG1paW5m by0+bXVsdGlJbnNlcnRCdWZmZXJzKQotCQlDb3B5TXVsdGlJbnNlcnRCdWZmZXJDbGVhbnVwKG1p aW5mbywgbGZpcnN0KGxjKSk7CisJCXRhYmxlX2luc2VydF9lbmQoaXN0YXRlKTsKKwkJdGFibGVf ZmluaXNoX2J1bGtfaW5zZXJ0KHJyaS0+cmlfUmVsYXRpb25EZXNjLCB0aV9vcHRpb25zKTsKIAot CWxpc3RfZnJlZShtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7CisJCSptaXJyaSA9IGxpc3Rf ZGVsZXRlX2ZpcnN0KCptaXJyaSk7CisJfQogfQogCiAvKgotICogR2V0IHRoZSBuZXh0IFR1cGxl VGFibGVTbG90IHRoYXQgdGhlIG5leHQgdHVwbGUgc2hvdWxkIGJlIHN0b3JlZCBpbi4KLSAqCi0g KiBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbC4KLSAqCi0g KiBOb3RlOiAnbWlpbmZvJyBpcyB1bnVzZWQgYnV0IGhhcyBiZWVuIGluY2x1ZGVkIGZvciBjb25z aXN0ZW5jeSB3aXRoIHRoZQotICogb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KKyAqIERy b3AgdGhlIGJ1ZmZlcmVkIHNsb3RzLgogICovCi1zdGF0aWMgaW5saW5lIFR1cGxlVGFibGVTbG90 ICoKLUNvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5zZXJ0SW5mbyAq bWlpbmZvLAotCQkJCQkJCQlSZXN1bHRSZWxJbmZvICpycmkpCitzdGF0aWMgdm9pZAorQ29weU11 bGl0SW5zZXJ0RHJvcEJ1ZmZlcnMoTGlzdCAqbWlycmkpCiB7Ci0JQ29weU11bHRpSW5zZXJ0QnVm ZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKLQlpbnQJCQludXNl ZCA9IGJ1ZmZlci0+bnVzZWQ7Ci0KLQlBc3NlcnQoYnVmZmVyICE9IE5VTEwpOwotCUFzc2VydChu dXNlZCA8IE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCUxpc3RDZWxsICAgKmxjOwogCi0JaWYgKGJ1 ZmZlci0+c2xvdHNbbnVzZWRdID09IE5VTEwpCi0JCWJ1ZmZlci0+c2xvdHNbbnVzZWRdID0gdGFi bGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOwotCXJldHVybiBidWZm ZXItPnNsb3RzW251c2VkXTsKLX0KKwlmb3JlYWNoKGxjLCBtaXJyaSkKKwl7CisJCWludCB0aV9v cHRpb25zOworCQlSZXN1bHRSZWxJbmZvICpycmkgPSBsZmlyc3QobGMpOworCQlDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOworCQlU YWJsZUluc2VydFN0YXRlICppc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsKIAotLyoKLSAqIFJlY29y ZCB0aGUgcHJldmlvdXNseSByZXNlcnZlZCBUdXBsZVRhYmxlU2xvdCB0aGF0IHdhcyByZXNlcnZl ZCBieQotICogQ29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdCBhcyBiZWluZyBjb25zdW1l ZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29w eU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCi0JCQkJCQkgVHVw bGVUYWJsZVNsb3QgKnNsb3QsIGludCB0dXBsZW4sIHVpbnQ2NCBsaW5lbm8pCi17Ci0JQ29weU11 bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsK KwkJdGlfb3B0aW9ucyA9IGlzdGF0ZS0+b3B0aW9uczsKIAotCUFzc2VydChidWZmZXIgIT0gTlVM TCk7Ci0JQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisJCXRh YmxlX2luc2VydF9lbmQoaXN0YXRlKTsKIAotCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3 ZSBjYW4gcHJvcGVybHkgcmVwb3J0IGFueSBlcnJvcnMgbGF0ZXIgKi8KLQlidWZmZXItPmxpbmVu b3NbYnVmZmVyLT5udXNlZF0gPSBsaW5lbm87CisJCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChy cmktPnJpX1JlbGF0aW9uRGVzYywgdGlfb3B0aW9ucyk7CiAKLQkvKiBSZWNvcmQgdGhpcyBzbG90 IGFzIGJlaW5nIHVzZWQgKi8KLQlidWZmZXItPm51c2VkKys7CisJCXBmcmVlKGJ1ZmZlcik7CisJ fQogCi0JLyogVXBkYXRlIGhvdyBtYW55IHR1cGxlcyBhcmUgc3RvcmVkIGFuZCB0aGVpciBzaXpl ICovCi0JbWlpbmZvLT5idWZmZXJlZFR1cGxlcysrOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyAr PSB0dXBsZW47CisJbGlzdF9mcmVlKG1pcnJpKTsKIH0KIAogLyoKQEAgLTUyOSwyMSArMzcyLDIx IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCUVTdGF0ZQkgICAqZXN0YXRlID0g Q3JlYXRlRXhlY3V0b3JTdGF0ZSgpOyAvKiBmb3IgRXhlY0NvbnN0cmFpbnRzKCkgKi8KIAlNb2Rp ZnlUYWJsZVN0YXRlICptdHN0YXRlOwogCUV4cHJDb250ZXh0ICplY29udGV4dDsKLQlUdXBsZVRh YmxlU2xvdCAqc2luZ2xlc2xvdCA9IE5VTEw7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBOVUxM OwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwogCiAJ UGFydGl0aW9uVHVwbGVSb3V0aW5nICpwcm91dGUgPSBOVUxMOwogCUVycm9yQ29udGV4dENhbGxi YWNrIGVycmNhbGxiYWNrOwogCUNvbW1hbmRJZAlteWNpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQo dHJ1ZSk7CiAJaW50CQkJdGlfb3B0aW9ucyA9IDA7IC8qIHN0YXJ0IHdpdGggZGVmYXVsdCBvcHRp b25zIGZvciBpbnNlcnQgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSA9IE5VTEw7CiAJQ29w eUluc2VydE1ldGhvZCBpbnNlcnRNZXRob2Q7Ci0JQ29weU11bHRpSW5zZXJ0SW5mbyBtdWx0aUlu c2VydEluZm8gPSB7MH07CS8qIHBhY2lmeSBjb21waWxlciAqLwogCWludDY0CQlwcm9jZXNzZWQg PSAwOwogCWludDY0CQlleGNsdWRlZCA9IDA7CiAJYm9vbAkJaGFzX2JlZm9yZV9pbnNlcnRfcm93 X3RyaWc7CiAJYm9vbAkJaGFzX2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWxlYWZw YXJ0X3VzZV9tdWx0aV9pbnNlcnQgPSBmYWxzZTsKKwlMaXN0ICAgICAgICptdWx0aV9pbnNlcnRf cnJpcyA9IE5VTEw7CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gTlVMTDsKIAogCUFzc2Vy dChjc3RhdGUtPnJlbCk7CiAJQXNzZXJ0KGxpc3RfbGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUp ID09IDEpOwpAQCAtNzI3LDcgKzU3MCw3IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRl KQogCQkgKiBGb3IgcGFydGl0aW9uZWQgdGFibGVzIHdlIGNhbid0IHN1cHBvcnQgbXVsdGktaW5z ZXJ0cyB3aGVuIHRoZXJlCiAJCSAqIGFyZSBhbnkgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmln Z2Vycy4gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8KIAkJICogYWxsb3cgcGFydGl0aW9uZWQgdGFi bGVzIHdpdGggc3VjaCB0cmlnZ2VycyBpbiB0aGUgZnV0dXJlLCBidXQgZm9yCi0JCSAqIG5vdywg Q29weU11bHRpSW5zZXJ0SW5mb0ZsdXNoIGV4cGVjdHMgdGhhdCBhbnkgYmVmb3JlIHJvdyBpbnNl cnQKKwkJICogbm93LCBDb3B5TXVsaXRJbnNlcnRGbHVzaEJ1ZmZlcnMgZXhwZWN0cyB0aGF0IGFu eSBiZWZvcmUgcm93IGluc2VydAogCQkgKiBhbmQgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmln Z2VycyBhcmUgb24gdGhlIHNhbWUgcmVsYXRpb24uCiAJCSAqLwogCQlpbnNlcnRNZXRob2QgPSBD SU1fU0lOR0xFOwpAQCAtNzc1LDIyICs2MTgsMjIgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBj c3RhdGUpCiAJCWVsc2UKIAkJCWluc2VydE1ldGhvZCA9IENJTV9NVUxUSTsKIAotCQlDb3B5TXVs dGlJbnNlcnRJbmZvSW5pdCgmbXVsdGlJbnNlcnRJbmZvLCByZXN1bHRSZWxJbmZvLCBjc3RhdGUs Ci0JCQkJCQkJCWVzdGF0ZSwgbXljaWQsIHRpX29wdGlvbnMpOworCQkvKgorCQkqIE9ubHkgc2V0 dXAgdGhlIGJ1ZmZlciB3aGVuIG5vdCBkZWFsaW5nIHdpdGggYSBwYXJ0aXRpb25lZCB0YWJsZS4K KwkJKiBCdWZmZXJzIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgd2lsbCBqdXN0IGJlIHNldHVwIHdo ZW4gd2UgbmVlZCB0bworCQkqIHNlbmQgdHVwbGVzIHRoZWlyIHdheSBmb3IgdGhlIGZpcnN0IHRp bWUuCisJCSovCisJCWlmICghcHJvdXRlKQorCQkJSW5pdENvcHlNdWx0aUluc2VydEJ1ZmZlcklu Zm8oJm11bHRpX2luc2VydF9ycmlzLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCSAgbXljaWQs IHRpX29wdGlvbnMpOwogCX0KIAogCS8qCi0JICogSWYgbm90IHVzaW5nIGJhdGNoIG1vZGUgKHdo aWNoIGFsbG9jYXRlcyBzbG90cyBhcyBuZWVkZWQpIHNldCB1cCBhCi0JICogdHVwbGUgc2xvdCB0 b28uIFdoZW4gaW5zZXJ0aW5nIGludG8gYSBwYXJ0aXRpb25lZCB0YWJsZSwgd2UgYWxzbyBuZWVk Ci0JICogb25lLCBldmVuIGlmIHdlIG1pZ2h0IGJhdGNoIGluc2VydCwgdG8gcmVhZCB0aGUgdHVw bGUgaW4gdGhlIHJvb3QKLQkgKiBwYXJ0aXRpb24ncyBmb3JtLgorCSAqIFNldCB1cCBhIHR1cGxl IHNsb3QgdG8gd2hpY2ggdGhlIGlucHV0IGRhdGEgZnJvbSBjb3B5IHN0cmVhbSBpcyByZWFkCisJ ICogaW50byBhbmQgdXNlZCBmb3IgaW5zZXJ0cyBpbnRvIHRhYmxlLgogCSAqLwotCWlmIChpbnNl cnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8fCBpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJ VElPTkFMKQotCXsKLQkJc2luZ2xlc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbElu Zm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJCSAgICZlc3RhdGUtPmVzX3R1cGxlVGFibGUp OwotCQliaXN0YXRlID0gR2V0QnVsa0luc2VydFN0YXRlKCk7Ci0JfQorCXNsb3QgPSB0YWJsZV9z bG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJICZlc3Rh dGUtPmVzX3R1cGxlVGFibGUpOwogCiAJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWcgPSAocmVz dWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MgJiYKIAkJCQkJCQkJICByZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYy0+dHJpZ19pbnNlcnRfYmVmb3JlX3Jvdyk7CkBAIC04MjgsMTkgKzY3MSw4IEBAIENv cHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQlSZXNldFBlclR1cGxlRXhwckNvbnRleHQo ZXN0YXRlKTsKIAogCQkvKiBzZWxlY3Qgc2xvdCB0byAoaW5pdGlhbGx5KSBsb2FkIHJvdyBpbnRv ICovCi0JCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8fCBwcm91dGUpCi0JCXsKLQkJ CW15c2xvdCA9IHNpbmdsZXNsb3Q7Ci0JCQlBc3NlcnQobXlzbG90ICE9IE5VTEwpOwotCQl9Ci0J CWVsc2UKLQkJewotCQkJQXNzZXJ0KHJlc3VsdFJlbEluZm8gPT0gdGFyZ2V0X3Jlc3VsdFJlbElu Zm8pOwotCQkJQXNzZXJ0KGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVEkpOwotCi0JCQlteXNsb3Qg PSBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KCZtdWx0aUluc2VydEluZm8sCi0JCQkJ CQkJCQkJCQkJIHJlc3VsdFJlbEluZm8pOwotCQl9CisJCW15c2xvdCA9IHNsb3Q7CisJCUFzc2Vy dChteXNsb3QgIT0gTlVMTCk7CiAKIAkJLyoKIAkJICogU3dpdGNoIHRvIHBlci10dXBsZSBjb250 ZXh0IGJlZm9yZSBjYWxsaW5nIE5leHRDb3B5RnJvbSwgd2hpY2ggZG9lcwpAQCAtOTE2LDIxICs3 NDgsMjIgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJaWYgKGxlYWZwYXJ0 X3VzZV9tdWx0aV9pbnNlcnQpCiAJCQkJewogCQkJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfQ29w eU11bHRpSW5zZXJ0QnVmZmVyID09IE5VTEwpCi0JCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0 dXBCdWZmZXIoJm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZv KTsKKwkJCQkJCUluaXRDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbmZvKCZtdWx0aV9pbnNlcnRfcnJp cywKKwkJCQkJCQkJCQkJCQkgIHJlc3VsdFJlbEluZm8sIG15Y2lkLAorCQkJCQkJCQkJCQkJCSAg dGlfb3B0aW9ucyk7CiAJCQkJfQotCQkJCWVsc2UgaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVM VElfQ09ORElUSU9OQUwgJiYKLQkJCQkJCSAhQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11 bHRpSW5zZXJ0SW5mbykpCisJCQkJZWxzZSBpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9D T05ESVRJT05BTCkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJCSAqIEZsdXNoIHBlbmRpbmcgaW5zZXJ0 cyBpZiB0aGlzIHBhcnRpdGlvbiBjYW4ndCB1c2UKIAkJCQkJICogYmF0Y2hpbmcsIHNvIHJvd3Mg YXJlIHZpc2libGUgdG8gdHJpZ2dlcnMgZXRjLgogCQkJCQkgKi8KLQkJCQkJQ29weU11bHRpSW5z ZXJ0SW5mb0ZsdXNoKCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8pOworCQkJCQlDb3B5 TXVsaXRJbnNlcnRGbHVzaEJ1ZmZlcnMoJm11bHRpX2luc2VydF9ycmlzLAorCQkJCQkJCQkJCQkJ cmVzdWx0UmVsSW5mbywgY3N0YXRlLCBlc3RhdGUpOwogCQkJCX0KIAotCQkJCWlmIChiaXN0YXRl ICE9IE5VTEwpCi0JCQkJCVJlbGVhc2VCdWxrSW5zZXJ0U3RhdGVQaW4oYmlzdGF0ZSk7CisJCQkJ aWYgKGlzdGF0ZSAmJiBpc3RhdGUtPmJpc3RhdGUpCisJCQkJCVJlbGVhc2VCdWxrSW5zZXJ0U3Rh dGVQaW4oaXN0YXRlLT5iaXN0YXRlKTsKIAkJCQlwcmV2UmVzdWx0UmVsSW5mbyA9IHJlc3VsdFJl bEluZm87CiAJCQl9CiAKQEAgLTk3Miw4ICs4MDUsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRl IGNzdGF0ZSkKIAkJCQkvKiBubyBvdGhlciBwYXRoIGF2YWlsYWJsZSBmb3IgcGFydGl0aW9uZWQg dGFibGUgKi8KIAkJCQlBc3NlcnQoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05B TCk7CiAKLQkJCQliYXRjaHNsb3QgPSBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KCZt dWx0aUluc2VydEluZm8sCi0JCQkJCQkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvKTsKKwkJCQliYXRj aHNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Ms CisJCQkJCQkJCQkJCSAgJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7CiAKIAkJCQlpZiAobWFwICE9 IE5VTEwpCiAJCQkJCW15c2xvdCA9IGV4ZWN1dGVfYXR0cl9tYXBfc2xvdChtYXAtPmF0dHJNYXAs IG15c2xvdCwKQEAgLTEwNDUsMjQgKzg3OCw5IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0 YXRlKQogCQkJCS8qIFN0b3JlIHRoZSBzbG90IGluIHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVyLCB3 aGVuIGVuYWJsZWQuICovCiAJCQkJaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVEkgfHwgbGVh ZnBhcnRfdXNlX211bHRpX2luc2VydCkKIAkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFRoZSBzbG90 IHByZXZpb3VzbHkgbWlnaHQgcG9pbnQgaW50byB0aGUgcGVyLXR1cGxlCi0JCQkJCSAqIGNvbnRl eHQuIEZvciBiYXRjaGluZyBpdCBuZWVkcyB0byBiZSBsb25nZXIgbGl2ZWQuCi0JCQkJCSAqLwot CQkJCQlFeGVjTWF0ZXJpYWxpemVTbG90KG15c2xvdCk7Ci0KIAkJCQkJLyogQWRkIHRoaXMgdHVw bGUgdG8gdGhlIHR1cGxlIGJ1ZmZlciAqLwotCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUo Jm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJIHJlc3VsdFJlbEluZm8sIG15c2xvdCwKLQkJ CQkJCQkJCQkJIGNzdGF0ZS0+bGluZV9idWYubGVuLAotCQkJCQkJCQkJCQkgY3N0YXRlLT5jdXJf bGluZW5vKTsKLQotCQkJCQkvKgotCQkJCQkgKiBJZiBlbm91Z2ggaW5zZXJ0cyBoYXZlIHF1ZXVl ZCB1cCwgdGhlbiBmbHVzaCBhbGwKLQkJCQkJICogYnVmZmVycyBvdXQgdG8gdGhlaXIgdGFibGVz LgotCQkJCQkgKi8KLQkJCQkJaWYgKENvcHlNdWx0aUluc2VydEluZm9Jc0Z1bGwoJm11bHRpSW5z ZXJ0SW5mbykpCi0JCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRpSW5zZXJ0SW5m bywgcmVzdWx0UmVsSW5mbyk7CisJCQkJCUNvcHlNdWx0aUluc2VydEJ1ZmZlclR1cGxlKHJlc3Vs dFJlbEluZm8sIG15c2xvdCwgY3N0YXRlLAorCQkJCQkJCQkJCQkgICBlc3RhdGUpOwogCQkJCX0K IAkJCQllbHNlCiAJCQkJewpAQCAtMTA4OCw5ICs5MDYsMTkgQEAgQ29weUZyb20oQ29weUZyb21T dGF0ZSBjc3RhdGUpCiAJCQkJCX0KIAkJCQkJZWxzZQogCQkJCQl7CisJCQkJCQlpZiAoIWlzdGF0 ZSkKKwkJCQkJCXsKKwkJCQkJCQlpc3RhdGUgPSB0YWJsZV9pbnNlcnRfYmVnaW4ocmVzdWx0UmVs SW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkJCQlteWNpZCwKKwkJCQkJCQkJCQkJ CQkJdGlfb3B0aW9ucywKKwkJCQkJCQkJCQkJCQkJdHJ1ZSwKKwkJCQkJCQkJCQkJCQkJZmFsc2Up OworCQkJCQkJfQorCisJCQkJCQlpc3RhdGUtPnJlbCA9IHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0 aW9uRGVzYzsKKwogCQkJCQkJLyogT0ssIHN0b3JlIHRoZSB0dXBsZSBhbmQgY3JlYXRlIGluZGV4 IGVudHJpZXMgZm9yIGl0ICovCi0JCQkJCQl0YWJsZV90dXBsZV9pbnNlcnQocmVzdWx0UmVsSW5m by0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkJCSAgIG15c2xvdCwgbXljaWQsIHRpX29wdGlv bnMsIGJpc3RhdGUpOworCQkJCQkJdGFibGVfdHVwbGVfaW5zZXJ0X3YyKGlzdGF0ZSwgbXlzbG90 KTsKIAogCQkJCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQogCQkJCQkJ CXJlY2hlY2tJbmRleGVzID0gRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCkBA IC0xMTIzLDE2ICs5NTEsMTQgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAKIAkv KiBGbHVzaCBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIHR1cGxlcyAqLwogCWlmIChpbnNlcnRNZXRo b2QgIT0gQ0lNX1NJTkdMRSkKLQl7Ci0JCWlmICghQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHko Jm11bHRpSW5zZXJ0SW5mbykpCi0JCQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRpSW5z ZXJ0SW5mbywgTlVMTCk7Ci0JfQorCQlDb3B5TXVsaXRJbnNlcnRGbHVzaEJ1ZmZlcnMoJm11bHRp X2luc2VydF9ycmlzLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJY3N0YXRlLCBlc3RhdGUpOwog CiAJLyogRG9uZSwgY2xlYW4gdXAgKi8KIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJh Y2sucHJldmlvdXM7CiAKLQlpZiAoYmlzdGF0ZSAhPSBOVUxMKQotCQlGcmVlQnVsa0luc2VydFN0 YXRlKGJpc3RhdGUpOworCWlmIChpc3RhdGUpCisJCXRhYmxlX2luc2VydF9lbmQoaXN0YXRlKTsK IAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIApAQCAtMTE1Miw3ICs5Nzgs NyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAogCS8qIFRlYXIgZG93biB0aGUg bXVsdGktaW5zZXJ0IGJ1ZmZlciBkYXRhICovCiAJaWYgKGluc2VydE1ldGhvZCAhPSBDSU1fU0lO R0xFKQotCQlDb3B5TXVsdGlJbnNlcnRJbmZvQ2xlYW51cCgmbXVsdGlJbnNlcnRJbmZvKTsKKwkJ Q29weU11bGl0SW5zZXJ0RHJvcEJ1ZmZlcnMobXVsdGlfaW5zZXJ0X3JyaXMpOwogCiAJLyogQ2xv c2UgYWxsIHRoZSBwYXJ0aXRpb25lZCB0YWJsZXMsIGxlYWYgcGFydGl0aW9ucywgYW5kIHRoZWly IGluZGljZXMgKi8KIAlpZiAocHJvdXRlKQotLSAKMi4yNS4xCgo= --000000000000b17f3605bd276dc6--