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 1lqDFo-000276-9g for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jun 2021 11:17:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lqDFn-0006X5-63 for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Jun 2021 11:17:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lqDFm-0006Wx-I2 for pgsql-hackers@lists.postgresql.org; Mon, 07 Jun 2021 11:17:10 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lqDFi-0005Hn-Nr for pgsql-hackers@postgresql.org; Mon, 07 Jun 2021 11:17:09 +0000 Received: from [192.168.129.222] (unknown [94.25.177.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id A586921C1C4B; Mon, 7 Jun 2021 14:17:01 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1623064623; bh=/H2ENbl5P8vmFfXaHjcDSN7EAoK44LORjb25Eum65Qo=; h=Subject:From:To:Cc:References:Date:In-Reply-To; b=d3LQCSuCfaTJh/IkcJYf4XxCmXcB8PixR3XQ7iM07BoVGjwZAnkfY2tR5gsZHP8FI XiP8MFrCWWpZToeetZfF/oesHVqlvO6iCApsEqntXYSEgpPhebrE2zvvCEi41Qhzuv /pASQFoklqFp1DC8JWlNBG5+kVcUFMuDl7iW/GWI= Subject: Re: Fast COPY FROM based on batch insert From: Andrey Lepikhov To: "tsunakawa.takay@fujitsu.com" Cc: Etsuro Fujita , Justin Pryzby , Zhihong Yu , Amit Langote , "tanghy.fnst@fujitsu.com" , Ashutosh Bapat , Pg Hackers , Tomas Vondra , "houzj.fnst@fujitsu.com" References: <20210304203949.GQ29832@telsasoft.com> <20210323032322.GW4203@telsasoft.com> <20210409004956.GN6592@telsasoft.com> Organization: Postgres Professional Message-ID: <046aac84-9499-6a97-0a80-dfd346cbcfda@postgrespro.ru> Date: Mon, 7 Jun 2021 16:16:58 +0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------B0C9E80C6C8425A591E5715B" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------B0C9E80C6C8425A591E5715B Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Second version of the patch fixes problems detected by the FDW regression tests and shows differences of error reports in tuple-by-tuple and batched COPY approaches. -- regards, Andrey Lepikhov Postgres Professional --------------B0C9E80C6C8425A591E5715B Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v2-0001-Implementation-of-a-Bulk-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v2-0001-Implementation-of-a-Bulk-COPY-FROM.patch" RnJvbSA2OGFkMDIwMzhkNzQ3N2UwMDViNjViZjVhZWVhYzRlZmJiNDEwNzNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmV5IFYuIExlcGlraG92IiA8YS5sZXBpa2hv dkBwb3N0Z3Jlc3Byby5ydT4KRGF0ZTogRnJpLCA0IEp1biAyMDIxIDEzOjIxOjQzICswNTAw ClN1YmplY3Q6IFtQQVRDSF0gSW1wbGVtZW50YXRpb24gb2YgYSBCdWxrIENPUFkgRlJPTSBv cGVyYXRpb24gaW50byBmb3JlaWduCiB0YWJsZS4KCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgIDQ1ICsrKy0KIGNvbnRyaWIvcG9zdGdy ZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsICAgICB8ICA0NyArKysrCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgICAgICAgfCAyMTYgKysrKysrKystLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAgICAgICAg fCAgNDUgKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jICAgICAg ICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgg ICAgICB8ICAxMCAtCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAg ICAgICAgIHwgICA4ICstCiA4IGZpbGVzIGNoYW5nZWQsIDI0NiBpbnNlcnRpb25zKCspLCAx MzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVk L3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggZjMyMGE3NTc4ZC4uMTQ2YTNiZTU3NiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAor KysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBA IC04MTQzLDYgKzgxNDMsNyBAQCBkcm9wIHRhYmxlIGxvY3QyOwogLS0gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogLS0gdGVzdCBDT1BZIEZST00KIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2FsdGVyIHNlcnZlciBs b29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRlIHRhYmxlIGxv YzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSByZW0yIChmMSBp bnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25hbWUgJ2xvYzIn KTsKQEAgLTgxNjUsNyArODE2Niw3IEBAIGNvcHkgcmVtMiBmcm9tIHN0ZGluOyAtLSBFUlJP UgogRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAibG9jMiIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAibG9jMl9mMXBvc2l0aXZlIgogREVUQUlMOiAgRmFpbGluZyByb3cgY29u dGFpbnMgKC0xLCB4eXp6eSkuCiBDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNF UlQgSU5UTyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKQotQ09QWSByZW0y LCBsaW5lIDE6ICItMQl4eXp6eSIKK0NPUFkgcmVtMiwgbGluZSAyCiBzZWxlY3QgKiBmcm9t IHJlbTI7CiAgZjEgfCBmMiAgCiAtLS0tKy0tLS0tCkBAIC04MTc2LDYgKzgxNzcsMTkgQEAg c2VsZWN0ICogZnJvbSByZW0yOwogYWx0ZXIgZm9yZWlnbiB0YWJsZSByZW0yIGRyb3AgY29u c3RyYWludCByZW0yX2YxcG9zaXRpdmU7CiBhbHRlciB0YWJsZSBsb2MyIGRyb3AgY29uc3Ry YWludCBsb2MyX2YxcG9zaXRpdmU7CiBkZWxldGUgZnJvbSByZW0yOworY3JlYXRlIHRhYmxl IGZvbyAoYSBpbnQpIHBhcnRpdGlvbiBieSBsaXN0IChhKTsKK2NyZWF0ZSB0YWJsZSBmb28x IChsaWtlIGZvbyk7CitjcmVhdGUgZm9yZWlnbiB0YWJsZSBmZm9vMSBwYXJ0aXRpb24gb2Yg Zm9vIGZvciB2YWx1ZXMgaW4gKDEpCisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxl X25hbWUgJ2ZvbzEnKTsKK2NyZWF0ZSB0YWJsZSBmb28yIChsaWtlIGZvbyk7CitjcmVhdGUg Zm9yZWlnbiB0YWJsZSBmZm9vMiBwYXJ0aXRpb24gb2YgZm9vIGZvciB2YWx1ZXMgaW4gKDIp CisJc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKHRhYmxlX25hbWUgJ2ZvbzInKTsKK2NyZWF0 ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93KCkgcmV0dXJucyB0cmlnZ2VyIGxhbmd1YWdlIHBs cGdzcWwgYXMgJCQKKwliZWdpbiByYWlzZSBub3RpY2UgJyUnLCBuZXc7IHJldHVybiBuZXc7 IGVuZDsgJCQ7CitjcmVhdGUgdHJpZ2dlciBmZm9vMV9icl90cmlnIGJlZm9yZSBpbnNlcnQg b24gZmZvbzEKKwlmb3IgZWFjaCByb3cgZXhlY3V0ZSBmdW5jdGlvbiBwcmludF9uZXdfcm93 KCk7Citjb3B5IGZvbyBmcm9tIHN0ZGluOworTk9USUNFOiAgKDEpCiAtLSBUZXN0IGxvY2Fs IHRyaWdnZXJzCiBjcmVhdGUgdHJpZ2dlciB0cmlnX3N0bXRfYmVmb3JlIGJlZm9yZSBpbnNl cnQgb24gcmVtMgogCWZvciBlYWNoIHN0YXRlbWVudCBleGVjdXRlIHByb2NlZHVyZSB0cmln Z2VyX2Z1bmMoKTsKQEAgLTgyODQsNiArODI5OCwzNCBAQCBkcm9wIHRyaWdnZXIgcmVtMl90 cmlnX3Jvd19iZWZvcmUgb24gcmVtMjsKIGRyb3AgdHJpZ2dlciByZW0yX3RyaWdfcm93X2Fm dGVyIG9uIHJlbTI7CiBkcm9wIHRyaWdnZXIgbG9jMl90cmlnX3Jvd19iZWZvcmVfaW5zZXJ0 IG9uIGxvYzI7CiBkZWxldGUgZnJvbSByZW0yOworYWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNv bHVtbiBmMTsKK2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIg ZnJvbSBzdGRpbjsKK0VSUk9SOiAgY29sdW1uICJmMSIgb2YgcmVsYXRpb24gImxvYzIiIGRv ZXMgbm90IGV4aXN0CitDT05URVhUOiAgcmVtb3RlIFNRTCBjb21tYW5kOiBJTlNFUlQgSU5U TyBwdWJsaWMubG9jMihmMSwgZjIpIFZBTFVFUyAoJDEsICQyKSwgKCQzLCAkNCkKK0NPUFkg cmVtMiwgbGluZSAzCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50OworYWx0 ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVtMjsK KyBmMSB8IGYyIAorLS0tLSstLS0tCisoMCByb3dzKQorCistLSBkcm9wcGVkIGNvbHVtbnMg bG9jYWxseSBhbmQgb24gdGhlIGZvcmVpZ24gc2VydmVyCithbHRlciB0YWJsZSByZW0yIGRy b3AgY29sdW1uIGYxOworYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkg cmVtMiBmcm9tIHN0ZGluOworc2VsZWN0ICogZnJvbSByZW0yOworLS0KKygyIHJvd3MpCisK K2FsdGVyIHRhYmxlIGxvYzIgZHJvcCBjb2x1bW4gZjE7CithbHRlciB0YWJsZSBsb2MyIGRy b3AgY29sdW1uIGYyOworY29weSByZW0yIGZyb20gc3RkaW47CitzZWxlY3QgKiBmcm9tIHJl bTI7CistLQorKDQgcm93cykKKwogLS0gdGVzdCBDT1BZIEZST00gd2l0aCBmb3JlaWduIHRh YmxlIGNyZWF0ZWQgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24KIGNyZWF0ZSB0YWJsZSBsb2Mz IChmMSBpbnQsIGYyIHRleHQpOwogYmVnaW47CkBAIC04MzAwLDYgKzgzNDIsNyBAQCBzZWxl Y3QgKiBmcm9tIHJlbTM7CiAKIGRyb3AgZm9yZWlnbiB0YWJsZSByZW0zOwogZHJvcCB0YWJs ZSBsb2MzOworYWx0ZXIgc2VydmVyIGxvb3BiYWNrIG9wdGlvbnMgKGRyb3AgYmF0Y2hfc2l6 ZSk7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0IGZvciBUUlVOQ0FURQogLS0gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApp bmRleCAxN2RiYTc3ZDdlLi44MzcxZDE2YzZhIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMjIyNiw2ICsyMjI2LDcgQEAgZHJvcCB0YWJs ZSBsb2N0MjsKIC0tIHRlc3QgQ09QWSBGUk9NCiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKK2FsdGVy IHNlcnZlciBsb29wYmFjayBvcHRpb25zIChhZGQgYmF0Y2hfc2l6ZSAnMicpOwogY3JlYXRl IHRhYmxlIGxvYzIgKGYxIGludCwgZjIgdGV4dCk7CiBhbHRlciB0YWJsZSBsb2MyIHNldCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gJ2ZhbHNlJyk7CiBjcmVhdGUgZm9yZWlnbiB0YWJsZSBy ZW0yIChmMSBpbnQsIGYyIHRleHQpIHNlcnZlciBsb29wYmFjayBvcHRpb25zKHRhYmxlX25h bWUgJ2xvYzInKTsKQEAgLTIyNTgsNiArMjI1OSwyMyBAQCBhbHRlciB0YWJsZSBsb2MyIGRy b3AgY29uc3RyYWludCBsb2MyX2YxcG9zaXRpdmU7CiAKIGRlbGV0ZSBmcm9tIHJlbTI7CiAK K2NyZWF0ZSB0YWJsZSBmb28gKGEgaW50KSBwYXJ0aXRpb24gYnkgbGlzdCAoYSk7CitjcmVh dGUgdGFibGUgZm9vMSAobGlrZSBmb28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzEg cGFydGl0aW9uIG9mIGZvbyBmb3IgdmFsdWVzIGluICgxKQorCXNlcnZlciBsb29wYmFjayBv cHRpb25zICh0YWJsZV9uYW1lICdmb28xJyk7CitjcmVhdGUgdGFibGUgZm9vMiAobGlrZSBm b28pOworY3JlYXRlIGZvcmVpZ24gdGFibGUgZmZvbzIgcGFydGl0aW9uIG9mIGZvbyBmb3Ig dmFsdWVzIGluICgyKQorCXNlcnZlciBsb29wYmFjayBvcHRpb25zICh0YWJsZV9uYW1lICdm b28yJyk7CitjcmVhdGUgZnVuY3Rpb24gcHJpbnRfbmV3X3JvdygpIHJldHVybnMgdHJpZ2dl ciBsYW5ndWFnZSBwbHBnc3FsIGFzICQkCisJYmVnaW4gcmFpc2Ugbm90aWNlICclJywgbmV3 OyByZXR1cm4gbmV3OyBlbmQ7ICQkOworY3JlYXRlIHRyaWdnZXIgZmZvbzFfYnJfdHJpZyBi ZWZvcmUgaW5zZXJ0IG9uIGZmb28xCisJZm9yIGVhY2ggcm93IGV4ZWN1dGUgZnVuY3Rpb24g cHJpbnRfbmV3X3JvdygpOworCitjb3B5IGZvbyBmcm9tIHN0ZGluOworMQorMgorXC4KKwog LS0gVGVzdCBsb2NhbCB0cmlnZ2VycwogY3JlYXRlIHRyaWdnZXIgdHJpZ19zdG10X2JlZm9y ZSBiZWZvcmUgaW5zZXJ0IG9uIHJlbTIKIAlmb3IgZWFjaCBzdGF0ZW1lbnQgZXhlY3V0ZSBw cm9jZWR1cmUgdHJpZ2dlcl9mdW5jKCk7CkBAIC0yMzU4LDYgKzIzNzYsMzQgQEAgZHJvcCB0 cmlnZ2VyIGxvYzJfdHJpZ19yb3dfYmVmb3JlX2luc2VydCBvbiBsb2MyOwogCiBkZWxldGUg ZnJvbSByZW0yOwogCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOworYWx0ZXIg dGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGluOworMQlm b28KKzIJYmFyCitcLgorCithbHRlciB0YWJsZSBsb2MyIGFkZCBjb2x1bW4gZjEgaW50Owor YWx0ZXIgdGFibGUgbG9jMiBhZGQgY29sdW1uIGYyIGludDsKK3NlbGVjdCAqIGZyb20gcmVt MjsKKworLS0gZHJvcHBlZCBjb2x1bW5zIGxvY2FsbHkgYW5kIG9uIHRoZSBmb3JlaWduIHNl cnZlcgorYWx0ZXIgdGFibGUgcmVtMiBkcm9wIGNvbHVtbiBmMTsKK2FsdGVyIHRhYmxlIHJl bTIgZHJvcCBjb2x1bW4gZjI7Citjb3B5IHJlbTIgZnJvbSBzdGRpbjsKKworCitcLgorc2Vs ZWN0ICogZnJvbSByZW0yOworCithbHRlciB0YWJsZSBsb2MyIGRyb3AgY29sdW1uIGYxOwor YWx0ZXIgdGFibGUgbG9jMiBkcm9wIGNvbHVtbiBmMjsKK2NvcHkgcmVtMiBmcm9tIHN0ZGlu OworCisKK1wuCitzZWxlY3QgKiBmcm9tIHJlbTI7CisKIC0tIHRlc3QgQ09QWSBGUk9NIHdp dGggZm9yZWlnbiB0YWJsZSBjcmVhdGVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uCiBjcmVh dGUgdGFibGUgbG9jMyAoZjEgaW50LCBmMiB0ZXh0KTsKIGJlZ2luOwpAQCAtMjM3MSw2ICsy NDE3LDcgQEAgY29tbWl0Owogc2VsZWN0ICogZnJvbSByZW0zOwogZHJvcCBmb3JlaWduIHRh YmxlIHJlbTM7CiBkcm9wIHRhYmxlIGxvYzM7CithbHRlciBzZXJ2ZXIgbG9vcGJhY2sgb3B0 aW9ucyAoZHJvcCBiYXRjaF9zaXplKTsKIAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVzdCBm b3IgVFJVTkNBVEUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDQwYTU0YWQwYmQu LmM0Zjg1OGUyYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9t LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMzE3LDE4ICsz MTcsNDMgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxzZTsKIAlzYXZlX2N1 cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87CiAKLQkvKgotCSAqIHRhYmxlX211bHRp X2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0byBzaG9ydC1saXZlZCBtZW1v cnkKLQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgotCSAqLwotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0 ZSkpOwotCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCi0JCQkJCSAgIHNsb3RzLAotCQkJCQkgICBudXNlZCwKLQkJCQkJICAgbXljaWQsCi0J CQkJCSAgIHRpX29wdGlvbnMsCi0JCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9S ZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUp CisJeworCQlpbnQgc2VudCA9IDA7CisKKwkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0Jh dGNoU2l6ZSA+IDEgJiYKKwkJCSAgIHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkV4 ZWNGb3JlaWduQmF0Y2hJbnNlcnQgIT0gTlVMTCAmJgorCQkJICAgcmVzdWx0UmVsSW5mby0+ cmlfRmR3Um91dGluZS0+R2V0Rm9yZWlnbk1vZGlmeUJhdGNoU2l6ZSAhPSBOVUxMKTsKKwor CQkvKiBGbHVzaCBpbnRvIGZvcmVpZ24gdGFibGUgb3IgcGFydGl0aW9uICovCisJCWRvIHsK KwkJCWludCBzaXplID0gKHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSA8IG51c2VkIC0g c2VudCkgPworCQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXplIDogKG51c2VkIC0g c2VudCk7CisJCQlpbnQgaW5zZXJ0ZWQgPSBzaXplOworCisJCQlyZXN1bHRSZWxJbmZvLT5y aV9GZHdSb3V0aW5lLT5FeGVjRm9yZWlnbkJhdGNoSW5zZXJ0KGVzdGF0ZSwKKwkJCQkJCQkJ CQkJCQkJCQkgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJCQkgJnNsb3RzW3NlbnRd LAorCQkJCQkJCQkJCQkJCQkJCSBOVUxMLAorCQkJCQkJCQkJCQkJCQkJCSAmaW5zZXJ0ZWQp OworCQkJc2VudCArPSBzaXplOworCQl9IHdoaWxlIChzZW50IDwgbnVzZWQpOworCX0KKwll bHNlCisJeworCQkvKgorCQkgKiB0YWJsZV9tdWx0aV9pbnNlcnQgbWF5IGxlYWsgbWVtb3J5 LCBzbyBzd2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5CisJCSAqIGNvbnRleHQgYmVmb3Jl IGNhbGxpbmcgaXQuCisJCSAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKKwkJdGFibGVfbXVsdGlf aW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCSAgIHNsb3Rz LAorCQkJCQkJICAgbnVzZWQsCisJCQkJCQkgICBteWNpZCwKKwkJCQkJCSAgIHRpX29wdGlv bnMsCisJCQkJCQkgICBidWZmZXItPmJpc3RhdGUpOworCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG51c2VkOyBpKyspCiAJ ewpAQCAtMzQwLDYgKzM2NSw4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlN dWx0aUluc2VydEluZm8gKm1paW5mbywKIAkJewogCQkJTGlzdAkgICAqcmVjaGVja0luZGV4 ZXM7CiAKKwkJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3Jl bC0+cmVsa2luZCAhPSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpOworCiAJCQljc3RhdGUtPmN1 cl9saW5lbm8gPSBidWZmZXItPmxpbmVub3NbaV07CiAJCQlyZWNoZWNrSW5kZXhlcyA9CiAJ CQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCkBAIC0zNTksNiArMzg2 LDEyIEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8g Km1paW5mbywKIAkJCQkgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2Vy dF9hZnRlcl9yb3cgfHwKIAkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9uZXdfdGFibGUpKQogCQl7CisJCQkvKgorCQkJICogQUZURVIgUk9XIHRyaWdn ZXJzIGFyZW4ndCBhbGxvd2VkIHdpdGggdGhlIGZvcmVpZ24gYnVsayBpbnNlcnQKKwkJCSAq IG1ldGhvZC4KKwkJCSAqLworCQkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9u RGVzYy0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSk7CisKIAkJ CWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKIAkJCUV4ZWNBUklu c2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJIHNsb3RzW2ld LCBOSUwsIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKQEAgLTUzOCwxMyArNTcxLDEx IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCUNvbW1hbmRJZAlteWNpZCA9 IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7CiAJaW50CQkJdGlfb3B0aW9ucyA9IDA7IC8q IHN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBpbnNlcnQgKi8KIAlCdWxrSW5zZXJ0 U3RhdGUgYmlzdGF0ZSA9IE5VTEw7Ci0JQ29weUluc2VydE1ldGhvZCBpbnNlcnRNZXRob2Q7 CiAJQ29weU11bHRpSW5zZXJ0SW5mbyBtdWx0aUluc2VydEluZm8gPSB7MH07CS8qIHBhY2lm eSBjb21waWxlciAqLwogCWludDY0CQlwcm9jZXNzZWQgPSAwOwogCWludDY0CQlleGNsdWRl ZCA9IDA7CiAJYm9vbAkJaGFzX2JlZm9yZV9pbnNlcnRfcm93X3RyaWc7CiAJYm9vbAkJaGFz X2luc3RlYWRfaW5zZXJ0X3Jvd190cmlnOwotCWJvb2wJCWxlYWZwYXJ0X3VzZV9tdWx0aV9p bnNlcnQgPSBmYWxzZTsKIAogCUFzc2VydChjc3RhdGUtPnJlbCk7CiAJQXNzZXJ0KGxpc3Rf bGVuZ3RoKGNzdGF0ZS0+cmFuZ2VfdGFibGUpID09IDEpOwpAQCAtNjcxLDEwICs3MDIsNDMg QEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJbXRzdGF0ZS0+cmVzdWx0UmVs SW5mbyA9IHJlc3VsdFJlbEluZm87CiAJbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8gPSBy ZXN1bHRSZWxJbmZvOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgIT0g TlVMTCAmJgotCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5CZWdpbkZvcmVpZ25J bnNlcnQgIT0gTlVMTCkKLQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+QmVnaW5G b3JlaWduSW5zZXJ0KG10c3RhdGUsCi0JCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvKTsK KwlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMKQorCXsKKwkJaWYg KHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkdldEZvcmVpZ25Nb2RpZnlCYXRjaFNp emUgIT0gTlVMTCkKKwkJCXJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSA9CisJCQkJcmVz dWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+R2V0Rm9yZWlnbk1vZGlmeUJhdGNoU2l6ZShy ZXN1bHRSZWxJbmZvKTsKKworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+ QmVnaW5Gb3JlaWduSW5zZXJ0ICE9IE5VTEwpCisJCQlyZXN1bHRSZWxJbmZvLT5yaV9GZHdS b3V0aW5lLT5CZWdpbkZvcmVpZ25JbnNlcnQobXRzdGF0ZSwKKwkJCQkJCQkJCQkJCQkJCSBy ZXN1bHRSZWxJbmZvKTsKKwl9CisKKwlBc3NlcnQoIXRhcmdldF9yZXN1bHRSZWxJbmZvLT5y aV91c2VzTXVsdGlJbnNlcnQpOworCisJLyoKKwkgKiBJdCdzIGdlbmVyYWxseSBtb3JlIGVm ZmljaWVudCB0byBwcmVwYXJlIGEgYnVuY2ggb2YgdHVwbGVzIGZvcgorCSAqIGluc2VydGlv biwgYW5kIGluc2VydCB0aGVtIGluIGJ1bGssIGZvciBleGFtcGxlLCB3aXRoIG9uZQorCSAq IHRhYmxlX211bHRpX2luc2VydCgpIGNhbGwgdGhhbiBjYWxsIHRhYmxlX3R1cGxlX2luc2Vy dCgpIHNlcGFyYXRlbHkgZm9yCisJICogZXZlcnkgdHVwbGUuIEhvd2V2ZXIsIHRoZXJlIGFy ZSBhIG51bWJlciBvZiByZWFzb25zIHdoeSB3ZSBtaWdodCBub3QgYmUKKwkgKiBhYmxlIHRv IGRvIHRoaXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYW55IHZvbGF0aWxlIGV4cHJlc3Np b25zIGluIHRoZQorCSAqIHRhYmxlJ3MgZGVmYXVsdCB2YWx1ZXMgb3IgaW4gdGhlIHN0YXRl bWVudCdzIFdIRVJFIGNsYXVzZSwgd2hpY2ggbWF5CisJICogcXVlcnkgdGhlIHRhYmxlIHdl IGFyZSBpbnNlcnRpbmcgaW50bywgYnVmZmVyaW5nIHR1cGxlcyBtaWdodCBwcm9kdWNlCisJ ICogd3JvbmcgcmVzdWx0cy4gIEFsc28sIHRoZSByZWxhdGlvbiB3ZSBhcmUgdHJ5aW5nIHRv IGluc2VydCBpbnRvIGl0c2VsZgorCSAqIG1heSBub3QgYmUgYW1lbmFibGUgdG8gYnVmZmVy ZWQgaW5zZXJ0cy4KKwkgKgorCSAqIE5vdGU6IEZvciBwYXJ0aXRpb25zLCB0aGlzIGZsYWcg aXMgc2V0IGNvbnNpZGVyaW5nIHRoZSB0YXJnZXQgdGFibGUncworCSAqIGZsYWcgdGhhdCBp cyBiZWluZyBzZXQgaGVyZSBhbmQgcGFydGl0aW9uJ3Mgb3duIHByb3BlcnRpZXMgd2hpY2gg YXJlCisJICogY2hlY2tlZCBieSBjYWxsaW5nIEV4ZWNNdWx0aUluc2VydEFsbG93ZWQoKS4g IEl0IGRvZXMgbm90IG1hdHRlcgorCSAqIHdoZXRoZXIgcGFydGl0aW9ucyBoYXZlIGFueSB2 b2xhdGlsZSBkZWZhdWx0IGV4cHJlc3Npb25zIGFzIHdlIHVzZSB0aGUKKwkgKiBkZWZhdWx0 cyBmcm9tIHRoZSB0YXJnZXQgb2YgdGhlIENPUFkgY29tbWFuZC4KKwkgKiBBbHNvLCB0aGUg Q09QWSBjb21tYW5kIHJlcXVpcmVzIGEgbm9uLXplcm8gaW5wdXQgbGlzdCBvZiBhdHRyaWJ1 dGVzLgorCSAqIFRoZXJlZm9yZSwgdGhlIGxlbmd0aCBvZiB0aGUgYXR0cmlidXRlIGxpc3Qg aXMgY2hlY2tlZCBoZXJlLgorCSAqLworCWlmICghY3N0YXRlLT52b2xhdGlsZV9kZWZleHBy cyAmJgorCQlsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3QpID4gMCAmJgorCQkhY29u dGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoY3N0YXRlLT53aGVyZUNsYXVzZSkpCisJCXRhcmdl dF9yZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQgPQorCQkJCQlFeGVjTXVsdGlJ bnNlcnRBbGxvd2VkKHRhcmdldF9yZXN1bHRSZWxJbmZvKTsKIAogCS8qIFByZXBhcmUgdG8g Y2F0Y2ggQUZURVIgdHJpZ2dlcnMuICovCiAJQWZ0ZXJUcmlnZ2VyQmVnaW5RdWVyeSgpOwpA QCAtNzAzLDgzICs3NjcsOSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJ Y3N0YXRlLT5xdWFsZXhwciA9IEV4ZWNJbml0UXVhbChjYXN0Tm9kZShMaXN0LCBjc3RhdGUt PndoZXJlQ2xhdXNlKSwKIAkJCQkJCQkJCQkmbXRzdGF0ZS0+cHMpOwogCi0JLyoKLQkgKiBJ dCdzIGdlbmVyYWxseSBtb3JlIGVmZmljaWVudCB0byBwcmVwYXJlIGEgYnVuY2ggb2YgdHVw bGVzIGZvcgotCSAqIGluc2VydGlvbiwgYW5kIGluc2VydCB0aGVtIGluIG9uZSB0YWJsZV9t dWx0aV9pbnNlcnQoKSBjYWxsLCB0aGFuIGNhbGwKLQkgKiB0YWJsZV90dXBsZV9pbnNlcnQo KSBzZXBhcmF0ZWx5IGZvciBldmVyeSB0dXBsZS4gSG93ZXZlciwgdGhlcmUgYXJlIGEKLQkg KiBudW1iZXIgb2YgcmVhc29ucyB3aHkgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZG8gdGhp cy4gIFRoZXNlIGFyZQotCSAqIGV4cGxhaW5lZCBiZWxvdy4KLQkgKi8KLQlpZiAocmVzdWx0 UmVsSW5mby0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkocmVzdWx0UmVsSW5mby0+cmlf VHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2JlZm9yZV9yb3cgfHwKLQkJIHJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9pbnN0ZWFkX3JvdykpCi0JewotCQkvKgotCQkg KiBDYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMgd2hlbiB0aGVyZSBhcmUgYW55IEJFRk9S RS9JTlNURUFEIE9GCi0JCSAqIHRyaWdnZXJzIG9uIHRoZSB0YWJsZS4gU3VjaCB0cmlnZ2Vy cyBtaWdodCBxdWVyeSB0aGUgdGFibGUgd2UncmUKLQkJICogaW5zZXJ0aW5nIGludG8gYW5k IGFjdCBkaWZmZXJlbnRseSBpZiB0aGUgdHVwbGVzIHRoYXQgaGF2ZSBhbHJlYWR5Ci0JCSAq IGJlZW4gcHJvY2Vzc2VkIGFuZCBwcmVwYXJlZCBmb3IgaW5zZXJ0aW9uIGFyZSBub3QgdGhl cmUuCi0JCSAqLwotCQlpbnNlcnRNZXRob2QgPSBDSU1fU0lOR0xFOwotCX0KLQllbHNlIGlm IChwcm91dGUgIT0gTlVMTCAmJiByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxM ICYmCi0JCQkgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190 YWJsZSkKLQl7Ci0JCS8qCi0JCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMgd2UgY2FuJ3Qg c3VwcG9ydCBtdWx0aS1pbnNlcnRzIHdoZW4gdGhlcmUKLQkJICogYXJlIGFueSBzdGF0ZW1l bnQgbGV2ZWwgaW5zZXJ0IHRyaWdnZXJzLiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0bwotCQkg KiBhbGxvdyBwYXJ0aXRpb25lZCB0YWJsZXMgd2l0aCBzdWNoIHRyaWdnZXJzIGluIHRoZSBm dXR1cmUsIGJ1dCBmb3IKLQkJICogbm93LCBDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2ggZXhw ZWN0cyB0aGF0IGFueSBiZWZvcmUgcm93IGluc2VydAotCQkgKiBhbmQgc3RhdGVtZW50IGxl dmVsIGluc2VydCB0cmlnZ2VycyBhcmUgb24gdGhlIHNhbWUgcmVsYXRpb24uCi0JCSAqLwot CQlpbnNlcnRNZXRob2QgPSBDSU1fU0lOR0xFOwotCX0KLQllbHNlIGlmIChyZXN1bHRSZWxJ bmZvLT5yaV9GZHdSb3V0aW5lICE9IE5VTEwgfHwKLQkJCSBjc3RhdGUtPnZvbGF0aWxlX2Rl ZmV4cHJzKQotCXsKLQkJLyoKLQkJICogQ2FuJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzIHRv IGZvcmVpZ24gdGFibGVzIG9yIGlmIHRoZXJlIGFyZSBhbnkKLQkJICogdm9sYXRpbGUgZGVm YXVsdCBleHByZXNzaW9ucyBpbiB0aGUgdGFibGUuICBTaW1pbGFybHkgdG8gdGhlCi0JCSAq IHRyaWdnZXIgY2FzZSBhYm92ZSwgc3VjaCBleHByZXNzaW9ucyBtYXkgcXVlcnkgdGhlIHRh YmxlIHdlJ3JlCi0JCSAqIGluc2VydGluZyBpbnRvLgotCQkgKgotCQkgKiBOb3RlOiBJdCBk b2VzIG5vdCBtYXR0ZXIgaWYgYW55IHBhcnRpdGlvbnMgaGF2ZSBhbnkgdm9sYXRpbGUKLQkJ ICogZGVmYXVsdCBleHByZXNzaW9ucyBhcyB3ZSB1c2UgdGhlIGRlZmF1bHRzIGZyb20gdGhl IHRhcmdldCBvZiB0aGUKLQkJICogQ09QWSBjb21tYW5kLgotCQkgKi8KLQkJaW5zZXJ0TWV0 aG9kID0gQ0lNX1NJTkdMRTsKLQl9Ci0JZWxzZSBpZiAoY29udGFpbl92b2xhdGlsZV9mdW5j dGlvbnMoY3N0YXRlLT53aGVyZUNsYXVzZSkpCi0JewotCQkvKgotCQkgKiBDYW4ndCBzdXBw b3J0IG11bHRpLWluc2VydHMgaWYgdGhlcmUgYXJlIGFueSB2b2xhdGlsZSBmdW5jdGlvbgot CQkgKiBleHByZXNzaW9ucyBpbiBXSEVSRSBjbGF1c2UuICBTaW1pbGFybHkgdG8gdGhlIHRy aWdnZXIgY2FzZSBhYm92ZSwKLQkJICogc3VjaCBleHByZXNzaW9ucyBtYXkgcXVlcnkgdGhl IHRhYmxlIHdlJ3JlIGluc2VydGluZyBpbnRvLgotCQkgKi8KLQkJaW5zZXJ0TWV0aG9kID0g Q0lNX1NJTkdMRTsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogRm9yIHBhcnRpdGlvbmVk IHRhYmxlcywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBidWxrCi0JCSAqIGlu c2VydHMuICBIb3dldmVyLCB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBkZXBlbmRzIG9uIHdo aWNoIHR5cGVzCi0JCSAqIG9mIHRyaWdnZXJzIGV4aXN0IG9uIHRoZSBwYXJ0aXRpb24uICBX ZSBtdXN0IGRpc2FibGUgYnVsayBpbnNlcnRzCi0JCSAqIGlmIHRoZSBwYXJ0aXRpb24gaXMg YSBmb3JlaWduIHRhYmxlIG9yIGl0IGhhcyBhbnkgYmVmb3JlIHJvdyBpbnNlcnQKLQkJICog b3IgaW5zZXJ0IGluc3RlYWQgdHJpZ2dlcnMgKHNhbWUgYXMgd2UgY2hlY2tlZCBhYm92ZSBm b3IgdGhlIHBhcmVudAotCQkgKiB0YWJsZSkuICBTaW5jZSB0aGUgcGFydGl0aW9uJ3MgcmVz dWx0UmVsSW5mb3MgYXJlIGluaXRpYWxpemVkIG9ubHkKLQkJICogd2hlbiB3ZSBhY3R1YWxs eSBuZWVkIHRvIGluc2VydCB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGVtLCB3ZSBtdXN0Ci0J CSAqIGhhdmUgdGhlIGludGVybWVkaWF0ZSBpbnNlcnQgbWV0aG9kIG9mIENJTV9NVUxUSV9D T05ESVRJT05BTCB0bwotCQkgKiBmbGFnIHRoYXQgd2UgbXVzdCBsYXRlciBkZXRlcm1pbmUg aWYgd2UgY2FuIHVzZSBidWxrLWluc2VydHMgZm9yCi0JCSAqIHRoZSBwYXJ0aXRpb24gYmVp bmcgaW5zZXJ0ZWQgaW50by4KLQkJICovCi0JCWlmIChwcm91dGUpCi0JCQlpbnNlcnRNZXRo b2QgPSBDSU1fTVVMVElfQ09ORElUSU9OQUw7Ci0JCWVsc2UKLQkJCWluc2VydE1ldGhvZCA9 IENJTV9NVUxUSTsKLQorCWlmIChyZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNlcnQp CiAJCUNvcHlNdWx0aUluc2VydEluZm9Jbml0KCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJl bEluZm8sIGNzdGF0ZSwKIAkJCQkJCQkJZXN0YXRlLCBteWNpZCwgdGlfb3B0aW9ucyk7Ci0J fQogCiAJLyoKIAkgKiBJZiBub3QgdXNpbmcgYmF0Y2ggbW9kZSAod2hpY2ggYWxsb2NhdGVz IHNsb3RzIGFzIG5lZWRlZCkgc2V0IHVwIGEKQEAgLTc4Nyw3ICs3NzcsNyBAQCBDb3B5RnJv bShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkgKiBvbmUsIGV2ZW4gaWYgd2UgbWlnaHQgYmF0 Y2ggaW5zZXJ0LCB0byByZWFkIHRoZSB0dXBsZSBpbiB0aGUgcm9vdAogCSAqIHBhcnRpdGlv bidzIGZvcm0uCiAJICovCi0JaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fU0lOR0xFIHx8IGlu c2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwpCisJaWYgKCFyZXN1bHRSZWxJ bmZvLT5yaV91c2VzTXVsdGlJbnNlcnQgfHwgcHJvdXRlKQogCXsKIAkJc2luZ2xlc2xvdCA9 IHRhYmxlX3Nsb3RfY3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKIAkJ CQkJCQkJCSAgICZlc3RhdGUtPmVzX3R1cGxlVGFibGUpOwpAQCAtODMwLDcgKzgyMCw3IEBA IENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQlSZXNldFBlclR1cGxlRXhwckNv bnRleHQoZXN0YXRlKTsKIAogCQkvKiBzZWxlY3Qgc2xvdCB0byAoaW5pdGlhbGx5KSBsb2Fk IHJvdyBpbnRvICovCi0JCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8fCBwcm91 dGUpCisJCWlmICghdGFyZ2V0X3Jlc3VsdFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCB8 fCBwcm91dGUpCiAJCXsKIAkJCW15c2xvdCA9IHNpbmdsZXNsb3Q7CiAJCQlBc3NlcnQobXlz bG90ICE9IE5VTEwpOwpAQCAtODM4LDcgKzgyOCw2IEBAIENvcHlGcm9tKENvcHlGcm9tU3Rh dGUgY3N0YXRlKQogCQllbHNlCiAJCXsKIAkJCUFzc2VydChyZXN1bHRSZWxJbmZvID09IHRh cmdldF9yZXN1bHRSZWxJbmZvKTsKLQkJCUFzc2VydChpbnNlcnRNZXRob2QgPT0gQ0lNX01V TFRJKTsKIAogCQkJbXlzbG90ID0gQ29weU11bHRpSW5zZXJ0SW5mb05leHRGcmVlU2xvdCgm bXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJCQkJCSByZXN1bHRSZWxJbmZvKTsKQEAgLTkw NSwyNCArODk0LDE0IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCWhh c19pbnN0ZWFkX2luc2VydF9yb3dfdHJpZyA9IChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVz YyAmJgogCQkJCQkJCQkJCQkgICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19p bnNlcnRfaW5zdGVhZF9yb3cpOwogCi0JCQkJLyoKLQkJCQkgKiBEaXNhYmxlIG11bHRpLWlu c2VydHMgd2hlbiB0aGUgcGFydGl0aW9uIGhhcyBCRUZPUkUvSU5TVEVBRAotCQkJCSAqIE9G IHRyaWdnZXJzLCBvciBpZiB0aGUgcGFydGl0aW9uIGlzIGEgZm9yZWlnbiBwYXJ0aXRpb24u Ci0JCQkJICovCi0JCQkJbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCA9IGluc2VydE1ldGhv ZCA9PSBDSU1fTVVMVElfQ09ORElUSU9OQUwgJiYKLQkJCQkJIWhhc19iZWZvcmVfaW5zZXJ0 X3Jvd190cmlnICYmCi0JCQkJCSFoYXNfaW5zdGVhZF9pbnNlcnRfcm93X3RyaWcgJiYKLQkJ CQkJcmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMOwotCiAJCQkJLyogU2V0 IHRoZSBtdWx0aS1pbnNlcnQgYnVmZmVyIHRvIHVzZSBmb3IgdGhpcyBwYXJ0aXRpb24uICov Ci0JCQkJaWYgKGxlYWZwYXJ0X3VzZV9tdWx0aV9pbnNlcnQpCisJCQkJaWYgKHJlc3VsdFJl bEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKIAkJCQl7CiAJCQkJCWlmIChyZXN1bHRSZWxJ bmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPT0gTlVMTCkKIAkJCQkJCUNvcHlNdWx0 aUluc2VydEluZm9TZXR1cEJ1ZmZlcigmbXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJCQkJ CSAgIHJlc3VsdFJlbEluZm8pOwogCQkJCX0KLQkJCQllbHNlIGlmIChpbnNlcnRNZXRob2Qg PT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMICYmCi0JCQkJCQkgIUNvcHlNdWx0aUluc2VydElu Zm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQorCQkJCWVsc2UgaWYgKCFDb3B5TXVsdGlJ bnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKIAkJCQl7CiAJCQkJCS8qCiAJ CQkJCSAqIEZsdXNoIHBlbmRpbmcgaW5zZXJ0cyBpZiB0aGlzIHBhcnRpdGlvbiBjYW4ndCB1 c2UKQEAgLTk1Miw3ICs5MzEsNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkK IAkJCSAqIHJvd3R5cGUuCiAJCQkgKi8KIAkJCW1hcCA9IHJlc3VsdFJlbEluZm8tPnJpX1Jv b3RUb1BhcnRpdGlvbk1hcDsKLQkJCWlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX1NJTkdMRSB8 fCAhbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkKKwkJCWlmICghcmVzdWx0UmVsSW5mby0+ cmlfdXNlc011bHRpSW5zZXJ0KQogCQkJewogCQkJCS8qIG5vbiBiYXRjaCBpbnNlcnQgKi8K IAkJCQlpZiAobWFwICE9IE5VTEwpCkBAIC05NzEsOSArOTUwLDYgQEAgQ29weUZyb20oQ29w eUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJICovCiAJCQkJVHVwbGVUYWJsZVNsb3QgKmJhdGNo c2xvdDsKIAotCQkJCS8qIG5vIG90aGVyIHBhdGggYXZhaWxhYmxlIGZvciBwYXJ0aXRpb25l ZCB0YWJsZSAqLwotCQkJCUFzc2VydChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJ VElPTkFMKTsKLQogCQkJCWJhdGNoc2xvdCA9IENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJl ZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKIAkJCQkJCQkJCQkJCQkJCXJlc3VsdFJlbEluZm8p OwogCkBAIC0xMDQ1LDcgKzEwMjEsNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0 ZSkKIAkJCQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIG15c2xvdCwgZXN0 YXRlLCB0cnVlKTsKIAogCQkJCS8qIFN0b3JlIHRoZSBzbG90IGluIHRoZSBtdWx0aS1pbnNl cnQgYnVmZmVyLCB3aGVuIGVuYWJsZWQuICovCi0JCQkJaWYgKGluc2VydE1ldGhvZCA9PSBD SU1fTVVMVEkgfHwgbGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkKKwkJCQlpZiAocmVzdWx0 UmVsSW5mby0+cmlfdXNlc011bHRpSW5zZXJ0KQogCQkJCXsKIAkJCQkJLyoKIAkJCQkJICog VGhlIHNsb3QgcHJldmlvdXNseSBtaWdodCBwb2ludCBpbnRvIHRoZSBwZXItdHVwbGUKQEAg LTExMjQsMTEgKzExMDAsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAl9 CiAKIAkvKiBGbHVzaCBhbnkgcmVtYWluaW5nIGJ1ZmZlcmVkIHR1cGxlcyAqLwotCWlmIChp bnNlcnRNZXRob2QgIT0gQ0lNX1NJTkdMRSkKLQl7Ci0JCWlmICghQ29weU11bHRpSW5zZXJ0 SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCi0JCQlDb3B5TXVsdGlJbnNlcnRJbmZv Rmx1c2goJm11bHRpSW5zZXJ0SW5mbywgTlVMTCk7Ci0JfQorCWlmICghQ29weU11bHRpSW5z ZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0SW5mbykpCisJCUNvcHlNdWx0aUluc2VydElu Zm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZvLCBOVUxMKTsKIAogCS8qIERvbmUsIGNsZWFuIHVw ICovCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwpAQCAt MTE0OSwxMiArMTEyMiwxMSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkv KiBBbGxvdyB0aGUgRkRXIHRvIHNodXQgZG93biAqLwogCWlmICh0YXJnZXRfcmVzdWx0UmVs SW5mby0+cmlfRmR3Um91dGluZSAhPSBOVUxMICYmCiAJCXRhcmdldF9yZXN1bHRSZWxJbmZv LT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0ICE9IE5VTEwpCi0JCXRhcmdldF9y ZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FbmRGb3JlaWduSW5zZXJ0KGVzdGF0ZSwK LQkJCQkJCQkJCQkJCQkJCSAgdGFyZ2V0X3Jlc3VsdFJlbEluZm8pOworCQkJdGFyZ2V0X3Jl c3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUtPkVuZEZvcmVpZ25JbnNlcnQoZXN0YXRlLAor CQkJCQkJCQkJCQkJCQl0YXJnZXRfcmVzdWx0UmVsSW5mbyk7CiAKIAkvKiBUZWFyIGRvd24g dGhlIG11bHRpLWluc2VydCBidWZmZXIgZGF0YSAqLwotCWlmIChpbnNlcnRNZXRob2QgIT0g Q0lNX1NJTkdMRSkKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoJm11bHRpSW5zZXJ0 SW5mbyk7CisJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoJm11bHRpSW5zZXJ0SW5mbyk7 CiAKIAkvKiBDbG9zZSBhbGwgdGhlIHBhcnRpdGlvbmVkIHRhYmxlcywgbGVhZiBwYXJ0aXRp b25zLCBhbmQgdGhlaXIgaW5kaWNlcyAqLwogCWlmIChwcm91dGUpCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY01haW4uYwppbmRleCBiM2NlNGJhZTUzLi45Mjk0N2VhZWNkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNNYWluLmMKQEAgLTEyNTYsOSArMTI1Niw1NCBAQCBJbml0UmVzdWx0UmVsSW5m byhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCXJlc3VsdFJlbEluZm8tPnJpX1Bh cnRpdGlvblR1cGxlU2xvdCA9IE5VTEw7CS8qIGRpdHRvICovCiAJcmVzdWx0UmVsSW5mby0+ cmlfQ2hpbGRUb1Jvb3RNYXAgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX0NoaWxkVG9S b290TWFwVmFsaWQgPSBmYWxzZTsKKwlyZXN1bHRSZWxJbmZvLT5yaV91c2VzTXVsdGlJbnNl cnQgPSBmYWxzZTsKIAlyZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIg PSBOVUxMOwogfQogCisvKgorICogRXhlY011bHRpSW5zZXJ0QWxsb3dlZAorICoJCURvZXMg dGhpcyByZWxhdGlvbiBhbGxvdyBjYWxsZXIgdG8gdXNlIG11bHRpLWluc2VydCBtb2RlIHdo ZW4KKyAqCQlpbnNlcnRpbmcgcm93cyBpbnRvIGl0PworICovCitib29sCitFeGVjTXVsdGlJ bnNlcnRBbGxvd2VkKGNvbnN0IFJlc3VsdFJlbEluZm8gKnJyaSkKK3sKKwkvKgorCSAqIENh bid0IHN1cHBvcnQgbXVsdGktaW5zZXJ0cyB3aGVuIHRoZXJlIGFyZSBhbnkgQkVGT1JFL0lO U1RFQUQgT0YKKwkgKiB0cmlnZ2VycyBvbiB0aGUgdGFibGUuIFN1Y2ggdHJpZ2dlcnMgbWln aHQgcXVlcnkgdGhlIHRhYmxlIHdlJ3JlCisJICogaW5zZXJ0aW5nIGludG8gYW5kIGFjdCBk aWZmZXJlbnRseSBpZiB0aGUgdHVwbGVzIHRoYXQgaGF2ZSBhbHJlYWR5CisJICogYmVlbiBw cm9jZXNzZWQgYW5kIHByZXBhcmVkIGZvciBpbnNlcnRpb24gYXJlIG5vdCB0aGVyZS4KKwkg Ki8KKwlpZiAocnJpLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCShycmktPnJpX1RyaWdE ZXNjLT50cmlnX2luc2VydF9iZWZvcmVfcm93IHx8CisJCSBycmktPnJpX1RyaWdEZXNjLT50 cmlnX2luc2VydF9pbnN0ZWFkX3JvdykpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog Rm9yIHBhcnRpdGlvbmVkIHRhYmxlcyB3ZSBjYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMg d2hlbiB0aGVyZSBhcmUKKwkgKiBhbnkgc3RhdGVtZW50IGxldmVsIGluc2VydCB0cmlnZ2Vy cy4gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gYWxsb3cKKwkgKiBwYXJ0aXRpb25lZCB0YWJs ZXMgd2l0aCBzdWNoIHRyaWdnZXJzIGluIHRoZSBmdXR1cmUsIGJ1dCBmb3Igbm93LAorCSAq IENvcHlNdWx0aUluc2VydEluZm9GbHVzaCBleHBlY3RzIHRoYXQgYW55IGJlZm9yZSByb3cg aW5zZXJ0IGFuZAorCSAqIHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMgYXJlIG9u IHRoZSBzYW1lIHJlbGF0aW9uLgorCSAqLworCWlmIChycmktPnJpX1JlbGF0aW9uRGVzYy0+ cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgJiYKKwkJcnJp LT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCXJyaS0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5z ZXJ0X25ld190YWJsZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHJyaS0+cmlfRmR3Um91 dGluZSAhPSBOVUxMICYmCisJCShycmktPnJpX0Zkd1JvdXRpbmUtPkV4ZWNGb3JlaWduQmF0 Y2hJbnNlcnQgPT0gTlVMTCB8fAorCQlycmktPnJpX0JhdGNoU2l6ZSA8PSAxKSkKKwkJLyoK KwkJICogRm9yZWlnbiB0YWJsZXMgZG9uJ3Qgc3VwcG9ydCBtdWx0aS1pbnNlcnRzLCB1bmxl c3MgdGhlaXIgRkRXCisJCSAqIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgYnVsayBpbnNlcnQg aW50ZXJmYWNlLgorCQkgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJLyogT0ssIGNhbGxlciBj YW4gdXNlIG11bHRpLWluc2VydCBvbiB0aGlzIHJlbGF0aW9uLiAqLworCXJldHVybiB0cnVl OworfQorCiAvKgogICogRXhlY0dldFRyaWdnZXJSZXN1bHRSZWwKICAqCQlHZXQgYSBSZXN1 bHRSZWxJbmZvIGZvciBhIHRyaWdnZXIgdGFyZ2V0IHJlbGF0aW9uLgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1BhcnRpdGlvbi5jCmluZGV4IDYwNmM5MjBiMDYuLmUyZWExMDFjZDkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKQEAgLTY2MSw2ICs2NjEsMTQg QEAgRXhlY0luaXRQYXJ0aXRpb25JbmZvKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsIEVT dGF0ZSAqZXN0YXRlLAogCUV4ZWNJbml0Um91dGluZ0luZm8obXRzdGF0ZSwgZXN0YXRlLCBw cm91dGUsIGRpc3BhdGNoLAogCQkJCQkJbGVhZl9wYXJ0X3JyaSwgcGFydGlkeCwgZmFsc2Up OwogCisJLyoKKwkgKiBJZiBhIHBhcnRpdGlvbidzIHJvb3QgcGFyZW50IGlzbid0IGFsbG93 ZWQgdG8gdXNlIGl0LCBuZWl0aGVyIGlzIHRoZQorCSAqIHBhcnRpdGlvbi4KKwkgKi8KKwlp ZiAocm9vdFJlc3VsdFJlbEluZm8tPnJpX3VzZXNNdWx0aUluc2VydCkKKwkJbGVhZl9wYXJ0 X3JyaS0+cmlfdXNlc011bHRpSW5zZXJ0ID0KKwkJCUV4ZWNNdWx0aUluc2VydEFsbG93ZWQo bGVhZl9wYXJ0X3JyaSk7CisKIAkvKgogCSAqIElmIHRoZXJlIGlzIGFuIE9OIENPTkZMSUNU IGNsYXVzZSwgaW5pdGlhbGl6ZSBzdGF0ZSBmb3IgaXQuCiAJICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAppbmRleCA0ZDY4ZDljY2ViLi41OThhNjhh NmYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5h bC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKQEAg LTM5LDE2ICszOSw2IEBAIHR5cGVkZWYgZW51bSBFb2xUeXBlCiAJRU9MX0NSTkwKIH0gRW9s VHlwZTsKIAotLyoKLSAqIFJlcHJlc2VudHMgdGhlIGhlYXAgaW5zZXJ0IG1ldGhvZCB0byBi ZSB1c2VkIGR1cmluZyBDT1BZIEZST00uCi0gKi8KLXR5cGVkZWYgZW51bSBDb3B5SW5zZXJ0 TWV0aG9kCi17Ci0JQ0lNX1NJTkdMRSwJCQkJCS8qIHVzZSB0YWJsZV90dXBsZV9pbnNlcnQg b3IgZmR3IHJvdXRpbmUgKi8KLQlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRhYmxl X211bHRpX2luc2VydCAqLwotCUNJTV9NVUxUSV9DT05ESVRJT05BTAkJLyogdXNlIHRhYmxl X211bHRpX2luc2VydCBvbmx5IGlmIHZhbGlkICovCi19IENvcHlJbnNlcnRNZXRob2Q7Ci0K IC8qCiAgKiBUaGlzIHN0cnVjdCBjb250YWlucyBhbGwgdGhlIHN0YXRlIHZhcmlhYmxlcyB1 c2VkIHRocm91Z2hvdXQgYSBDT1BZIEZST00KICAqIG9wZXJhdGlvbi4KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9leGVjdXRvci5oCmluZGV4IDNkYzAzYzkxM2UuLjQ2YTc5YzVhZDggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY3V0b3IuaApAQCAtMjAzLDYgKzIwMyw3IEBAIGV4dGVybiB2b2lkIEluaXRS ZXN1bHRSZWxJbmZvKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCQkJICBJ bmRleCByZXN1bHRSZWxhdGlvbkluZGV4LAogCQkJCQkJCSAgUmVzdWx0UmVsSW5mbyAqcGFy dGl0aW9uX3Jvb3RfcnJpLAogCQkJCQkJCSAgaW50IGluc3RydW1lbnRfb3B0aW9ucyk7Citl eHRlcm4gYm9vbCBFeGVjTXVsdGlJbnNlcnRBbGxvd2VkKGNvbnN0IFJlc3VsdFJlbEluZm8g KnJyaSk7CiBleHRlcm4gUmVzdWx0UmVsSW5mbyAqRXhlY0dldFRyaWdnZXJSZXN1bHRSZWwo RVN0YXRlICplc3RhdGUsIE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBFeGVjQ29uc3RyYWlu dHMoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQkJCQlUdXBsZVRhYmxlU2xv dCAqc2xvdCwgRVN0YXRlICplc3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA3 Nzk1YTY5NDkwLi41OGQ1ZGY5ODc0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtNTIx LDcgKzUyMSwxMyBAQCB0eXBlZGVmIHN0cnVjdCBSZXN1bHRSZWxJbmZvCiAJVHVwbGVDb252 ZXJzaW9uTWFwICpyaV9DaGlsZFRvUm9vdE1hcDsKIAlib29sCQlyaV9DaGlsZFRvUm9vdE1h cFZhbGlkOwogCi0JLyogZm9yIHVzZSBieSBjb3B5ZnJvbS5jIHdoZW4gcGVyZm9ybWluZyBt dWx0aS1pbnNlcnRzICovCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgY3Vy cmVudGx5IG9ubHkgcmVsZXZhbnQgdG8gY29weWZyb20uYy4KKwkgKiBUcnVlIGlmIG9rYXkg dG8gdXNlIG11bHRpLWluc2VydCBvbiB0aGlzIHJlbGF0aW9uCisJICovCisJYm9vbCByaV91 c2VzTXVsdGlJbnNlcnQ7CisKKwkvKiBCdWZmZXIgYWxsb2NhdGVkIHRvIHRoaXMgcmVsYXRp b24gd2hlbiB1c2luZyBtdWx0aS1pbnNlcnQgbW9kZSAqLwogCXN0cnVjdCBDb3B5TXVsdGlJ bnNlcnRCdWZmZXIgKnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKIH0gUmVzdWx0UmVsSW5m bzsKIAotLSAKMi4zMS4xCgo= --------------B0C9E80C6C8425A591E5715B--