Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1izPYE-0002PY-LU for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2020 18:37:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1izPYD-00061D-3h for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2020 18:37:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1izPYC-000616-Pd for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2020 18:37:24 +0000 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1izPYA-0001Sl-2K for pgsql-hackers@postgresql.org; Wed, 05 Feb 2020 18:37:24 +0000 Received: by mail-pl1-x641.google.com with SMTP id e8so1222669plt.9 for ; Wed, 05 Feb 2020 10:37:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=MaTfZaktbuV2Ngl/XVsSeGsq2fK/0LCjynkFlRAD+YA=; b=r+lNemEg4jEweug7ZxDoPE6YMd0YUg0FEcH3TTS8ybDRO6gi6dHyJJ8x27FGqlkHOP EpA6sPVVRX2Ve96njsscTudxkYwtNGW5E+C68rjmmOtnBD8gpUMe0AGT6BFvvD6pyFxz IGpdM0aF7cheARcnOjVg79W8O8y1ZSSR28PbNimY1qGGrdNMJoEA/R5WlSSsUMksRZSE hkQl8gMPzBCdAL8m8M/WP9kTjo8dbRmiRcbjohMjGzS/Y8ygZvCXldi/p6mIBDK8c7R8 l1AptesFHZscqv/MwzhKcGY/jsDS07KLgocFSBLMKxceYmlJ9ksAB/illDXhKxrlawJk qrNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=MaTfZaktbuV2Ngl/XVsSeGsq2fK/0LCjynkFlRAD+YA=; b=Q4kS6bWudU+VT2Gg1qCOK0jCh2kMGsYavwqafIyeR+criZDitfvvWNKVI06LEAiHZX DcSKqXyHbyc/SyqvoE5Uka5nOJ6dS9cI1+uBuQd/vxNWgIQczPDqOyUakn3AN7aM7xej QCJUmikb0tcPzFeRwgHViiucBCDBQDIcegphhtN8yW1dbWVo1YNnPv5V87RU3WfKtb6l 6imhr+O3B2Nrkno6Ojb9Em4kLB3zvFJ1wfHH0jfSHrQe0KHwd46wRwPkoNZ/54446zZj SVgdNzP6vzDLBEIy1aOY88CjwV4/kAKYP0tO1sqy1lIjiZBkl6NCarBMUFC+lsdP9fAm xx+A== X-Gm-Message-State: APjAAAXZ6Xd5YNoXRnBTKyYHT5R35RnRUdauw2h19sgQPEi/qgAGOXLf 1wOp/Bj9MvA9aZJsW5XOVAEFg8Ub/FE= X-Google-Smtp-Source: APXvYqyB/L/KrSikQT8fXYRrDJf/A0X8rbzJKCwChEj6RC9VVaV2n7N+B7L7+DK+ifIUAYwktygrsg== X-Received: by 2002:a17:90a:a416:: with SMTP id y22mr7198732pjp.114.1580927839619; Wed, 05 Feb 2020 10:37:19 -0800 (PST) Received: from jdavis ([2600:100f:b001:ade5:6458:80b:898f:69bc]) by smtp.gmail.com with ESMTPSA id x10sm193090pfi.180.2020.02.05.10.37.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 05 Feb 2020 10:37:18 -0800 (PST) Message-ID: <66a1a669dfbb41259c60cbf70d2239fef8a2ce31.camel@j-davis.com> Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Peter Geoghegan Cc: Heikki Linnakangas , Tomas Vondra , Taylor Vesely , Adam Lee , Melanie Plageman , PostgreSQL Hackers Date: Wed, 05 Feb 2020 10:37:15 -0800 In-Reply-To: References: <507ac540ec7c20136364b5272acbcd4574aa76ef.camel@j-davis.com> <20190703001753.s5e5cme3ucjgeu6c@development> <20190711155520.zqipi23o3yybx7ym@development> <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191214173225.3kzsbncr6brpxdll@development> <775d754c-9a61-5363-6998-f87d15f1b592@iki.fi> <6e2b4a4475a690fa515829950aeed935696b0df3.camel@j-davis.com> <97c46a59c27f3c38e486ca170fcbc618d97ab049.camel@j-davis.com> <8bf8d5f77db49cc1f032b6c7c0cfe0d6da89d64a.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-VyOYe8Io/HQ+elLbiBei" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-VyOYe8Io/HQ+elLbiBei Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Tue, 2020-02-04 at 15:08 -0800, Peter Geoghegan wrote: > Have you tested this against tuplesort.c, particularly parallel > CREATE > INDEX? It would be worth trying to measure any performance impact. > Note that most parallel CREATE INDEX tuplesorts will do a merge > within > each worker, and one big merge in the leader. It's much more likely > to > have multiple passes than a regular serial external sort. I did not observe any performance regression when creating an index in parallel over 20M ints (random ints in random order). I tried 2 parallel workers with work_mem=4MB and also 4 parallel workers with work_mem=256kB. > Have you thought about integer overflow in your heap related > routines? > This isn't as unlikely as you might think. See commit 512f67c8, for > example. It's dealing with blocks rather than tuples, so it's a bit less likely. But changed it to use "unsigned long" instead. > Have you thought about the MaxAllocSize restriction as it concerns > lts->freeBlocks? Will that be okay when you have many more tapes than > before? I added a check. If it exceeds MaxAllocSize, before trying to perform the allocation, just leak the block rather than adding it to the freelist. Perhaps there's a usecase for an extraordinarily-long freelist, but it's outside the scope of this patch. > LogicalTapeSetExtend() seems to work in a way that assumes that the > tape is frozen. It would be good to document that assumption, and > possible enforce it by way of an assertion. The same remark applies > to > any other assumptions you're making there. Can you explain? I am not freezing any tapes in Hash Aggregation, so what about LogicalTapeSetExtend() assumes the tape is frozen? Attached new logtape.c patches. Regards, Jeff Davis --=-VyOYe8Io/HQ+elLbiBei Content-Disposition: attachment; filename="0001-Logical-Tape-Set-lazily-allocate-read-buffer.patch" Content-Type: text/x-patch; name="0001-Logical-Tape-Set-lazily-allocate-read-buffer.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkMzU5M2ZmMzRjODNjMjBjNzUxNjU2MjRmYWY2ZDg0ODAzMzkwYjM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDMxIEphbiAyMDIwIDE2OjQzOjQxIC0wODAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIExvZ2lj YWwgVGFwZSBTZXQ6IGxhemlseSBhbGxvY2F0ZSByZWFkIGJ1ZmZlci4KClRoZSB3cml0ZSBidWZm ZXIgd2FzIGFscmVhZHkgbGF6aWx5LWFsbG9jYXRlZCwgc28gdGhpcyBpcyBtb3JlCnN5bW1ldHJp Yy4gSXQgYWxzbyBtZWFucyB0aGF0IGEgZnJlc2hseS1yZXdvdW5kIHRhcGUgKHdoZXRoZXIgZm9y CnJlYWRpbmcgb3Igd3JpdGluZykgaXMgbm90IGNvbnN1bWluZyBtZW1vcnkgZm9yIHRoZSBidWZm ZXIuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMgfCAyNyArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKaW5kZXggNDJjZmIxZjlmOTguLmJh NmQ2ZTFmODBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYwpAQCAtNzczLDE1ICs3NzMsMTIg QEAgTG9naWNhbFRhcGVSZXdpbmRGb3JSZWFkKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBl bnVtLCBzaXplX3QgYnVmZmVyX3NpemUpCiAJbHQtPmJ1ZmZlcl9zaXplID0gMDsKIAlpZiAobHQt PmZpcnN0QmxvY2tOdW1iZXIgIT0gLTFMKQogCXsKLQkJbHQtPmJ1ZmZlciA9IHBhbGxvYyhidWZm ZXJfc2l6ZSk7CisJCS8qCisJCSAqIFRoZSBidWZmZXIgaXMgbGF6aWx5IGFsbG9jYXRlZCBpbiBM b2dpY2FsVGFwZVJlYWQoKSwgYnV0IHdlIHNldCB0aGUKKwkJICogc2l6ZSBoZXJlLgorCQkgKi8K IAkJbHQtPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7CiAJfQotCi0JLyogUmVhZCB0aGUgZmly c3QgYmxvY2ssIG9yIHJlc2V0IGlmIHRhcGUgaXMgZW1wdHkgKi8KLQlsdC0+bmV4dEJsb2NrTnVt YmVyID0gbHQtPmZpcnN0QmxvY2tOdW1iZXI7Ci0JbHQtPnBvcyA9IDA7Ci0JbHQtPm5ieXRlcyA9 IDA7Ci0JbHRzUmVhZEZpbGxCdWZmZXIobHRzLCBsdCk7CiB9CiAKIC8qCkBAIC04MzAsNiArODI3 LDIyIEBAIExvZ2ljYWxUYXBlUmVhZChMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgdGFwZW51bSwK IAlsdCA9ICZsdHMtPnRhcGVzW3RhcGVudW1dOwogCUFzc2VydCghbHQtPndyaXRpbmcpOwogCisJ aWYgKGx0LT5idWZmZXIgPT0gTlVMTCkKKwl7CisJCS8qIGxhemlseSBhbGxvY2F0ZSBidWZmZXIg Ki8KKwkJaWYgKGx0LT5maXJzdEJsb2NrTnVtYmVyICE9IC0xTCkKKwkJeworCQkJQXNzZXJ0KGx0 LT5idWZmZXJfc2l6ZSA+IDApOworCQkJbHQtPmJ1ZmZlciA9IHBhbGxvYyhsdC0+YnVmZmVyX3Np emUpOworCQl9CisKKwkJLyogUmVhZCB0aGUgZmlyc3QgYmxvY2ssIG9yIHJlc2V0IGlmIHRhcGUg aXMgZW1wdHkgKi8KKwkJbHQtPm5leHRCbG9ja051bWJlciA9IGx0LT5maXJzdEJsb2NrTnVtYmVy OworCQlsdC0+cG9zID0gMDsKKwkJbHQtPm5ieXRlcyA9IDA7CisJCWx0c1JlYWRGaWxsQnVmZmVy KGx0cywgbHQpOworCX0KKwogCXdoaWxlIChzaXplID4gMCkKIAl7CiAJCWlmIChsdC0+cG9zID49 IGx0LT5uYnl0ZXMpCi0tIAoyLjE3LjEKCg== --=-VyOYe8Io/HQ+elLbiBei Content-Disposition: attachment; filename="0002-Logical-Tape-Set-change-freelist-to-min-heap.patch" Content-Type: text/x-patch; name="0002-Logical-Tape-Set-change-freelist-to-min-heap.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2NjczMzVjOThlM2VlODMwYjA0MjgwMWIyOWI2MjA1MzMyNTA3MGQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDMxIEphbiAyMDIwIDE2OjQ0OjQwIC0wODAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIExvZ2lj YWwgVGFwZSBTZXQ6IGNoYW5nZSBmcmVlbGlzdCB0byBtaW4gaGVhcC4KClByZXZpb3VzbHksIHRo ZSBmcmVlbGlzdCBvZiBibG9ja3Mgd2FzIHRyYWNrZWQgYXMgYW4Kb2NjYXNpb25hbGx5LXNvcnRl ZCBhcnJheS4gQSBtaW4gaGVhcCBpcyBtb3JlIHJlc2lsaWVudCB0byBsYXJnZXIKZnJlZWxpc3Rz IG9yIG1vcmUgZnJlcXVlbnQgY2hhbmdlcyBiZXR3ZWVuIHJlYWRpbmcgYW5kIHdyaXRpbmcuCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMgfCAxNjAgKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwNCBpbnNlcnRpb25zKCspLCA1NiBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jCmluZGV4IGJhNmQ2ZTFmODBhLi44 ZDkzNGY2ZDQ0ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKQEAgLTQ5LDEyICs0OSw4IEBA CiAgKiB3aGVuIHJlYWRpbmcsIGFuZCByZWFkIG11bHRpcGxlIGJsb2NrcyBmcm9tIHRoZSBzYW1l IHRhcGUgaW4gb25lIGdvLAogICogd2hlbmV2ZXIgdGhlIGJ1ZmZlciBiZWNvbWVzIGVtcHR5Lgog ICoKLSAqIFRvIHN1cHBvcnQgdGhlIGFib3ZlIHBvbGljeSBvZiB3cml0aW5nIHRvIHRoZSBsb3dl c3QgZnJlZSBibG9jaywKLSAqIGx0c0dldEZyZWVCbG9jayBzb3J0cyB0aGUgbGlzdCBvZiBmcmVl IGJsb2NrIG51bWJlcnMgaW50byBkZWNyZWFzaW5nCi0gKiBvcmRlciBlYWNoIHRpbWUgaXQgaXMg YXNrZWQgZm9yIGEgYmxvY2sgYW5kIHRoZSBsaXN0IGlzbid0IGN1cnJlbnRseQotICogc29ydGVk LiAgVGhpcyBpcyBhbiBlZmZpY2llbnQgd2F5IHRvIGhhbmRsZSBpdCBiZWNhdXNlIHdlIGV4cGVj dCBjeWNsZXMKLSAqIG9mIHJlbGVhc2luZyBtYW55IGJsb2NrcyBmb2xsb3dlZCBieSByZS11c2lu ZyBtYW55IGJsb2NrcywgZHVlIHRvCi0gKiB0aGUgbGFyZ2VyIHJlYWQgYnVmZmVyLgorICogVG8g c3VwcG9ydCB0aGUgYWJvdmUgcG9saWN5IG9mIHdyaXRpbmcgdG8gdGhlIGxvd2VzdCBmcmVlIGJs b2NrLCB0aGUKKyAqIGZyZWVsaXN0IGlzIGEgbWluIGhlYXAuCiAgKgogICogU2luY2UgYWxsIHRo ZSBib29ra2VlcGluZyBhbmQgYnVmZmVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgd2l0aCBwYWxsb2Mo KSwKICAqIGFuZCB0aGUgdW5kZXJseWluZyBmaWxlKHMpIGFyZSBtYWRlIHdpdGggT3BlblRlbXBv cmFyeUZpbGUsIGFsbCByZXNvdXJjZXMKQEAgLTE3MCw3ICsxNjYsNyBAQCBzdHJ1Y3QgTG9naWNh bFRhcGVTZXQKIAkvKgogCSAqIEZpbGUgc2l6ZSB0cmFja2luZy4gIG5CbG9ja3NXcml0dGVuIGlz IHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIGZpbGUsCiAJICogaW4gQkxDS1NaIGJsb2Nrcy4g IG5CbG9ja3NBbGxvY2F0ZWQgaXMgdGhlIG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkCi0JICog YnkgbHRzR2V0RnJlZUJsb2NrKCksIGFuZCBpdCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yIGVx dWFsIHRvCisJICogYnkgbHRzUmVsZWFzZUJsb2NrKCksIGFuZCBpdCBpcyBhbHdheXMgZ3JlYXRl ciB0aGFuIG9yIGVxdWFsIHRvCiAJICogbkJsb2Nrc1dyaXR0ZW4uICBCbG9ja3MgYmV0d2VlbiBu QmxvY2tzQWxsb2NhdGVkIGFuZCBuQmxvY2tzV3JpdHRlbiBhcmUKIAkgKiBibG9ja3MgdGhhdCBo YXZlIGJlZW4gYWxsb2NhdGVkIGZvciBhIHRhcGUsIGJ1dCBoYXZlIG5vdCBiZWVuIHdyaXR0ZW4K IAkgKiB0byB0aGUgdW5kZXJseWluZyBmaWxlIHlldC4gIG5Ib2xlQmxvY2tzIHRyYWNrcyB0aGUg dG90YWwgbnVtYmVyIG9mCkBAIC0xODgsMTcgKzE4NCwxMSBAQCBzdHJ1Y3QgTG9naWNhbFRhcGVT ZXQKIAkgKiBJZiBmb3JnZXRGcmVlU3BhY2UgaXMgdHJ1ZSB0aGVuIGFueSBmcmVlZCBibG9ja3Mg YXJlIHNpbXBseSBmb3Jnb3R0ZW4KIAkgKiByYXRoZXIgdGhhbiBiZWluZyByZW1lbWJlcmVkIGlu IGZyZWVCbG9ja3NbXS4gIFNlZSBub3RlcyBmb3IKIAkgKiBMb2dpY2FsVGFwZVNldEZvcmdldEZy ZWVTcGFjZSgpLgotCSAqCi0JICogSWYgYmxvY2tzU29ydGVkIGlzIHRydWUgdGhlbiB0aGUgYmxv Y2sgbnVtYmVycyBpbiBmcmVlQmxvY2tzIGFyZSBpbgotCSAqICpkZWNyZWFzaW5nKiBvcmRlciwg c28gdGhhdCByZW1vdmluZyB0aGUgbGFzdCBlbnRyeSBnaXZlcyB1cyB0aGUgbG93ZXN0Ci0JICog ZnJlZSBibG9jay4gIFdlIHJlLXNvcnQgdGhlIGJsb2NrcyB3aGVuZXZlciBhIGJsb2NrIGlzIGRl bWFuZGVkOyB0aGlzCi0JICogc2hvdWxkIGJlIHJlYXNvbmFibHkgZWZmaWNpZW50IGdpdmVuIHRo ZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJuLgogCSAqLwogCWJvb2wJCWZvcmdldEZyZWVTcGFjZTsJ LyogYXJlIHdlIHJlbWVtYmVyaW5nIGZyZWUgYmxvY2tzPyAqLwotCWJvb2wJCWJsb2Nrc1NvcnRl ZDsJLyogaXMgZnJlZUJsb2Nrc1tdIGN1cnJlbnRseSBpbiBvcmRlcj8gKi8KLQlsb25nCSAgICpm cmVlQmxvY2tzOwkJLyogcmVzaXphYmxlIGFycmF5ICovCi0JaW50CQkJbkZyZWVCbG9ja3M7CS8q ICMgb2YgY3VycmVudGx5IGZyZWUgYmxvY2tzICovCi0JaW50CQkJZnJlZUJsb2Nrc0xlbjsJLyog Y3VycmVudCBhbGxvY2F0ZWQgbGVuZ3RoIG9mIGZyZWVCbG9ja3NbXSAqLworCWxvbmcJICAgKmZy ZWVCbG9ja3M7CQkvKiByZXNpemFibGUgYXJyYXkgaG9sZGluZyBtaW5oZWFwICovCisJbG9uZwkJ bkZyZWVCbG9ja3M7CS8qICMgb2YgY3VycmVudGx5IGZyZWUgYmxvY2tzICovCisJU2l6ZQkJZnJl ZUJsb2Nrc0xlbjsJLyogY3VycmVudCBhbGxvY2F0ZWQgbGVuZ3RoIG9mIGZyZWVCbG9ja3NbXSAq LwogCiAJLyogVGhlIGFycmF5IG9mIGxvZ2ljYWwgdGFwZXMuICovCiAJaW50CQkJblRhcGVzOwkJ CS8qICMgb2YgbG9naWNhbCB0YXBlcyBpbiBzZXQgKi8KQEAgLTMyMSw0NiArMzExLDg4IEBAIGx0 c1JlYWRGaWxsQnVmZmVyKExvZ2ljYWxUYXBlU2V0ICpsdHMsIExvZ2ljYWxUYXBlICpsdCkKIAly ZXR1cm4gKGx0LT5uYnl0ZXMgPiAwKTsKIH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmF0b3IgZm9y IHNvcnRpbmcgZnJlZUJsb2Nrc1tdIGludG8gZGVjcmVhc2luZyBvcmRlci4KLSAqLwotc3RhdGlj IGludAotZnJlZUJsb2Nrc19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3N0YXRp YyBpbmxpbmUgdm9pZAorc3dhcF9ub2Rlcyhsb25nICpoZWFwLCB1bnNpZ25lZCBsb25nIGEsIHVu c2lnbmVkIGxvbmcgYikKK3sKKwl1bnNpZ25lZCBsb25nIHN3YXA7CisKKwlzd2FwID0gaGVhcFth XTsKKwloZWFwW2FdID0gaGVhcFtiXTsKKwloZWFwW2JdID0gc3dhcDsKK30KKworc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nCitsZWZ0X29mZnNldCh1bnNpZ25lZCBsb25nIGkpCit7CisJcmV0 dXJuIDIgKiBpICsgMTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCityaWdodF9v ZmZzZXQodW5zaWduZWQgaSkKK3sKKwlyZXR1cm4gMiAqIGkgKyAyOworfQorCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcKK3BhcmVudF9vZmZzZXQodW5zaWduZWQgbG9uZyBpKQogewotCWxv bmcJCWFibGsgPSAqKChjb25zdCBsb25nICopIGEpOwotCWxvbmcJCWJibGsgPSAqKChjb25zdCBs b25nICopIGIpOwotCi0JLyogY2FuJ3QganVzdCBzdWJ0cmFjdCBiZWNhdXNlIGxvbmcgbWlnaHQg YmUgd2lkZXIgdGhhbiBpbnQgKi8KLQlpZiAoYWJsayA8IGJibGspCi0JCXJldHVybiAxOwotCWlm IChhYmxrID4gYmJsaykKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOworCXJldHVybiAoaSAtIDEp IC8gMjsKIH0KIAogLyoKLSAqIFNlbGVjdCBhIGN1cnJlbnRseSB1bnVzZWQgYmxvY2sgZm9yIHdy aXRpbmcgdG8uCisgKiBTZWxlY3QgdGhlIGxvd2VzdCBjdXJyZW50bHkgdW51c2VkIGJsb2NrIGJ5 IHRha2luZyB0aGUgZmlyc3QgZWxlbWVudCBmcm9tCisgKiB0aGUgZnJlZWxpc3QgbWluIGhlYXAu CiAgKi8KIHN0YXRpYyBsb25nCiBsdHNHZXRGcmVlQmxvY2soTG9naWNhbFRhcGVTZXQgKmx0cykK IHsKLQkvKgotCSAqIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBmcmVlIGJsb2Nrcywgd2Ugc2VsZWN0 IHRoZSBvbmUgYXBwZWFyaW5nIGxhc3QgaW4KLQkgKiBmcmVlQmxvY2tzW10gKGFmdGVyIHNvcnRp bmcgdGhlIGFycmF5IGlmIG5lZWRlZCkuICBJZiB0aGVyZSBhcmUgbm9uZSwKLQkgKiBhc3NpZ24g dGhlIG5leHQgYmxvY2sgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KLQkgKi8KLQlpZiAobHRzLT5u RnJlZUJsb2NrcyA+IDApCisJbG9uZwkqaGVhcCA9IGx0cy0+ZnJlZUJsb2NrczsKKwlsb25nCSBi bG9ja251bTsKKwlpbnQJCSBoZWFwc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCS8qIGZy ZWVsaXN0IGVtcHR5OyBhbGxvY2F0ZSBhIG5ldyBibG9jayAqLworCWlmIChsdHMtPm5GcmVlQmxv Y2tzID09IDApCisJCXJldHVybiBsdHMtPm5CbG9ja3NBbGxvY2F0ZWQrKzsKKworCWlmIChsdHMt Pm5GcmVlQmxvY2tzID09IDEpCiAJewotCQlpZiAoIWx0cy0+YmxvY2tzU29ydGVkKQotCQl7Ci0J CQlxc29ydCgodm9pZCAqKSBsdHMtPmZyZWVCbG9ja3MsIGx0cy0+bkZyZWVCbG9ja3MsCi0JCQkJ ICBzaXplb2YobG9uZyksIGZyZWVCbG9ja3NfY21wKTsKLQkJCWx0cy0+YmxvY2tzU29ydGVkID0g dHJ1ZTsKLQkJfQotCQlyZXR1cm4gbHRzLT5mcmVlQmxvY2tzWy0tbHRzLT5uRnJlZUJsb2Nrc107 CisJCWx0cy0+bkZyZWVCbG9ja3MtLTsKKwkJcmV0dXJuIGx0cy0+ZnJlZUJsb2Nrc1swXTsKIAl9 Ci0JZWxzZQotCQlyZXR1cm4gbHRzLT5uQmxvY2tzQWxsb2NhdGVkKys7CisKKwkvKiB0YWtlIHRv cCBvZiBtaW5oZWFwICovCisJYmxvY2tudW0gPSBoZWFwWzBdOworCisJLyogcmVwbGFjZSB3aXRo IGVuZCBvZiBtaW5oZWFwIGFycmF5ICovCisJaGVhcFswXSA9IGhlYXBbLS1sdHMtPm5GcmVlQmxv Y2tzXTsKKworCS8qIHNpZnQgZG93biAqLworCXBvcyA9IDA7CisJaGVhcHNpemUgPSBsdHMtPm5G cmVlQmxvY2tzOworCXdoaWxlICh0cnVlKQorCXsKKwkJdW5zaWduZWQgbG9uZyBsZWZ0ICA9IGxl ZnRfb2Zmc2V0KHBvcyk7CisJCXVuc2lnbmVkIGxvbmcgcmlnaHQgPSByaWdodF9vZmZzZXQocG9z KTsKKwkJdW5zaWduZWQgbG9uZyBtaW5fY2hpbGQ7CisKKwkJaWYgKGxlZnQgPCBoZWFwc2l6ZSAm JiByaWdodCA8IGhlYXBzaXplKQorCQkJbWluX2NoaWxkID0gKGhlYXBbbGVmdF0gPCBoZWFwW3Jp Z2h0XSkgPyBsZWZ0IDogcmlnaHQ7CisJCWVsc2UgaWYgKGxlZnQgPCBoZWFwc2l6ZSkKKwkJCW1p bl9jaGlsZCA9IGxlZnQ7CisJCWVsc2UgaWYgKHJpZ2h0IDwgaGVhcHNpemUpCisJCQltaW5fY2hp bGQgPSByaWdodDsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKGhlYXBbbWluX2NoaWxkXSA+ PSBoZWFwW3Bvc10pCisJCQlicmVhazsKKworCQlzd2FwX25vZGVzKGhlYXAsIG1pbl9jaGlsZCwg cG9zKTsKKwkJcG9zID0gbWluX2NoaWxkOworCX0KKworCXJldHVybiBibG9ja251bTsKIH0KIAog LyoKQEAgLTM2OSw3ICs0MDEsOCBAQCBsdHNHZXRGcmVlQmxvY2soTG9naWNhbFRhcGVTZXQgKmx0 cykKIHN0YXRpYyB2b2lkCiBsdHNSZWxlYXNlQmxvY2soTG9naWNhbFRhcGVTZXQgKmx0cywgbG9u ZyBibG9ja251bSkKIHsKLQlpbnQJCQluZHg7CisJbG9uZwkqaGVhcDsKKwl1bnNpZ25lZCBsb25n IHBvczsKIAogCS8qCiAJICogRG8gbm90aGluZyBpZiB3ZSdyZSBubyBsb25nZXIgaW50ZXJlc3Rl ZCBpbiByZW1lbWJlcmluZyBmcmVlIHNwYWNlLgpAQCAtMzgyLDE5ICs0MTUsMzUgQEAgbHRzUmVs ZWFzZUJsb2NrKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGxvbmcgYmxvY2tudW0pCiAJICovCiAJaWYg KGx0cy0+bkZyZWVCbG9ja3MgPj0gbHRzLT5mcmVlQmxvY2tzTGVuKQogCXsKKwkJLyoKKwkJICog SWYgdGhlIGZyZWVsaXN0IGJlY29tZXMgdmVyeSBsYXJnZSwganVzdCByZXR1cm4gYW5kIGxlYWsg dGhpcyBmcmVlCisJCSAqIGJsb2NrLgorCQkgKi8KKwkJaWYgKGx0cy0+ZnJlZUJsb2Nrc0xlbiAq IDIgPiBNYXhBbGxvY1NpemUpCisJCQlyZXR1cm47CisKIAkJbHRzLT5mcmVlQmxvY2tzTGVuICo9 IDI7CiAJCWx0cy0+ZnJlZUJsb2NrcyA9IChsb25nICopIHJlcGFsbG9jKGx0cy0+ZnJlZUJsb2Nr cywKIAkJCQkJCQkJCQkJbHRzLT5mcmVlQmxvY2tzTGVuICogc2l6ZW9mKGxvbmcpKTsKIAl9CiAK LQkvKgotCSAqIEFkZCBibG9ja251bSB0byBhcnJheSwgYW5kIG1hcmsgdGhlIGFycmF5IHVuc29y dGVkIGlmIGl0J3Mgbm8gbG9uZ2VyIGluCi0JICogZGVjcmVhc2luZyBvcmRlci4KLQkgKi8KLQlu ZHggPSBsdHMtPm5GcmVlQmxvY2tzKys7Ci0JbHRzLT5mcmVlQmxvY2tzW25keF0gPSBibG9ja251 bTsKLQlpZiAobmR4ID4gMCAmJiBsdHMtPmZyZWVCbG9ja3NbbmR4IC0gMV0gPCBibG9ja251bSkK LQkJbHRzLT5ibG9ja3NTb3J0ZWQgPSBmYWxzZTsKKwloZWFwID0gbHRzLT5mcmVlQmxvY2tzOwor CXBvcyA9IGx0cy0+bkZyZWVCbG9ja3M7CisKKwkvKiBwbGFjZSBlbnRyeSBhdCBlbmQgb2YgbWlu aGVhcCBhcnJheSAqLworCWhlYXBbcG9zXSA9IGJsb2NrbnVtOworCWx0cy0+bkZyZWVCbG9ja3Mr KzsKKworCS8qIHNpZnQgdXAgKi8KKwl3aGlsZSAocG9zICE9IDApCisJeworCQl1bnNpZ25lZCBs b25nIHBhcmVudCA9IHBhcmVudF9vZmZzZXQocG9zKTsKKwkJaWYgKGhlYXBbcGFyZW50XSA8IGhl YXBbcG9zXSkKKwkJCWJyZWFrOworCisJCXN3YXBfbm9kZXMoaGVhcCwgcGFyZW50LCBwb3MpOwor CQlwb3MgPSBwYXJlbnQ7CisJfQogfQogCiAvKgpAQCAtNTI0LDcgKzU3Myw2IEBAIExvZ2ljYWxU YXBlU2V0Q3JlYXRlKGludCBudGFwZXMsIFRhcGVTaGFyZSAqc2hhcmVkLCBTaGFyZWRGaWxlU2V0 ICpmaWxlc2V0LAogCWx0cy0+bkJsb2Nrc1dyaXR0ZW4gPSAwTDsKIAlsdHMtPm5Ib2xlQmxvY2tz ID0gMEw7CiAJbHRzLT5mb3JnZXRGcmVlU3BhY2UgPSBmYWxzZTsKLQlsdHMtPmJsb2Nrc1NvcnRl ZCA9IHRydWU7CS8qIGEgemVyby1sZW5ndGggYXJyYXkgaXMgc29ydGVkIC4uLiAqLwogCWx0cy0+ ZnJlZUJsb2Nrc0xlbiA9IDMyOwkvKiByZWFzb25hYmxlIGluaXRpYWwgZ3Vlc3MgKi8KIAlsdHMt PmZyZWVCbG9ja3MgPSAobG9uZyAqKSBwYWxsb2MobHRzLT5mcmVlQmxvY2tzTGVuICogc2l6ZW9m KGxvbmcpKTsKIAlsdHMtPm5GcmVlQmxvY2tzID0gMDsKLS0gCjIuMTcuMQoK --=-VyOYe8Io/HQ+elLbiBei Content-Disposition: attachment; filename*0=0003-Logical-Tape-Set-add-API-to-extend-with-additional-t.pat; filename*1=ch Content-Type: text/x-patch; name="0003-Logical-Tape-Set-add-API-to-extend-with-additional-t.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA2ZTdiOWY4YjI0NjE1MGUzNmU3ZjdkZjUxM2RiZmNiZWY5ZjYxMDJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDMxIEphbiAyMDIwIDE2OjQyOjM4IC0wODAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIExvZ2lj YWwgVGFwZSBTZXQ6IGFkZCBBUEkgdG8gZXh0ZW5kIHdpdGggYWRkaXRpb25hbAogdGFwZXMuCgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL3NvcnQvbG9ndGFwZS5jIHwgNzEgKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2xvZ3RhcGUuaCAgICAgIHwgIDIg KwogMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L2xvZ3RhcGUuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL3NvcnQvbG9ndGFwZS5jCmluZGV4IDhkOTM0ZjZkNDRlLi43NTU2YWJkYjRhYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvc29ydC9sb2d0YXBlLmMKQEAgLTIwMSw2ICsyMDEsNyBAQCBzdGF0aWMgbG9uZyBs dHNHZXRGcmVlQmxvY2soTG9naWNhbFRhcGVTZXQgKmx0cyk7CiBzdGF0aWMgdm9pZCBsdHNSZWxl YXNlQmxvY2soTG9naWNhbFRhcGVTZXQgKmx0cywgbG9uZyBibG9ja251bSk7CiBzdGF0aWMgdm9p ZCBsdHNDb25jYXRXb3JrZXJUYXBlcyhMb2dpY2FsVGFwZVNldCAqbHRzLCBUYXBlU2hhcmUgKnNo YXJlZCwKIAkJCQkJCQkJIFNoYXJlZEZpbGVTZXQgKmZpbGVzZXQpOworc3RhdGljIHZvaWQgbHRz SW5pdFRhcGUoTG9naWNhbFRhcGUgKmx0KTsKIAogCiAvKgpAQCAtNTM1LDYgKzUzNiwzMCBAQCBs dHNDb25jYXRXb3JrZXJUYXBlcyhMb2dpY2FsVGFwZVNldCAqbHRzLCBUYXBlU2hhcmUgKnNoYXJl ZCwKIAlsdHMtPm5Ib2xlQmxvY2tzID0gbHRzLT5uQmxvY2tzQWxsb2NhdGVkIC0gbnBoeXNpY2Fs YmxvY2tzOwogfQogCisvKgorICogSW5pdGlhbGl6ZSBwZXItdGFwZSBzdHJ1Y3QuICBOb3RlIHdl IGFsbG9jYXRlIHRoZSBJL08gYnVmZmVyIGFuZCB0aGUgZmlyc3QKKyAqIGJsb2NrIGZvciBhIHRh cGUgb25seSB3aGVuIGl0IGlzIGZpcnN0IGFjdHVhbGx5IHdyaXR0ZW4gdG8uICBUaGlzIGF2b2lk cworICogd2FzdGluZyBtZW1vcnkgc3BhY2Ugd2hlbiB0dXBsZXNvcnQuYyBvdmVyZXN0aW1hdGVz IHRoZSBudW1iZXIgb2YgdGFwZXMKKyAqIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQKK2x0c0lu aXRUYXBlKExvZ2ljYWxUYXBlICpsdCkKK3sKKwlsdC0+d3JpdGluZyAgICAgICAgICAgPSB0cnVl OworCWx0LT5mcm96ZW4gICAgICAgICAgICA9IGZhbHNlOworCWx0LT5kaXJ0eSAgICAgICAgICAg ICA9IGZhbHNlOworCWx0LT5maXJzdEJsb2NrTnVtYmVyICA9IC0xTDsKKwlsdC0+Y3VyQmxvY2tO dW1iZXIgICAgPSAtMUw7CisJbHQtPm5leHRCbG9ja051bWJlciAgID0gLTFMOworCWx0LT5vZmZz ZXRCbG9ja051bWJlciA9IDBMOworCWx0LT5idWZmZXIgICAgICAgICAgICA9IE5VTEw7CisJbHQt PmJ1ZmZlcl9zaXplICAgICAgID0gMDsKKwkvKiBwYWxsb2MoKSBsYXJnZXIgdGhhbiBNYXhBbGxv Y1NpemUgd291bGQgZmFpbCAqLworCWx0LT5tYXhfc2l6ZSAgICAgICAgICA9IE1heEFsbG9jU2l6 ZTsKKwlsdC0+cG9zICAgICAgICAgICAgICAgPSAwOworCWx0LT5uYnl0ZXMgICAgICAgICAgICA9 IDA7Cit9CisKIC8qCiAgKiBDcmVhdGUgYSBzZXQgb2YgbG9naWNhbCB0YXBlcyBpbiBhIHRlbXBv cmFyeSB1bmRlcmx5aW5nIGZpbGUuCiAgKgpAQCAtNTYwLDcgKzU4NSw2IEBAIExvZ2ljYWxUYXBl U2V0Q3JlYXRlKGludCBudGFwZXMsIFRhcGVTaGFyZSAqc2hhcmVkLCBTaGFyZWRGaWxlU2V0ICpm aWxlc2V0LAogCQkJCQkgaW50IHdvcmtlcikKIHsKIAlMb2dpY2FsVGFwZVNldCAqbHRzOwotCUxv Z2ljYWxUYXBlICpsdDsKIAlpbnQJCQlpOwogCiAJLyoKQEAgLTU3OCwyOSArNjAyLDggQEAgTG9n aWNhbFRhcGVTZXRDcmVhdGUoaW50IG50YXBlcywgVGFwZVNoYXJlICpzaGFyZWQsIFNoYXJlZEZp bGVTZXQgKmZpbGVzZXQsCiAJbHRzLT5uRnJlZUJsb2NrcyA9IDA7CiAJbHRzLT5uVGFwZXMgPSBu dGFwZXM7CiAKLQkvKgotCSAqIEluaXRpYWxpemUgcGVyLXRhcGUgc3RydWN0cy4gIE5vdGUgd2Ug YWxsb2NhdGUgdGhlIEkvTyBidWZmZXIgYW5kIHRoZQotCSAqIGZpcnN0IGJsb2NrIGZvciBhIHRh cGUgb25seSB3aGVuIGl0IGlzIGZpcnN0IGFjdHVhbGx5IHdyaXR0ZW4gdG8uICBUaGlzCi0JICog YXZvaWRzIHdhc3RpbmcgbWVtb3J5IHNwYWNlIHdoZW4gdHVwbGVzb3J0LmMgb3ZlcmVzdGltYXRl cyB0aGUgbnVtYmVyCi0JICogb2YgdGFwZXMgbmVlZGVkLgotCSAqLwogCWZvciAoaSA9IDA7IGkg PCBudGFwZXM7IGkrKykKLQl7Ci0JCWx0ID0gJmx0cy0+dGFwZXNbaV07Ci0JCWx0LT53cml0aW5n ID0gdHJ1ZTsKLQkJbHQtPmZyb3plbiA9IGZhbHNlOwotCQlsdC0+ZGlydHkgPSBmYWxzZTsKLQkJ bHQtPmZpcnN0QmxvY2tOdW1iZXIgPSAtMUw7Ci0JCWx0LT5jdXJCbG9ja051bWJlciA9IC0xTDsK LQkJbHQtPm5leHRCbG9ja051bWJlciA9IC0xTDsKLQkJbHQtPm9mZnNldEJsb2NrTnVtYmVyID0g MEw7Ci0JCWx0LT5idWZmZXIgPSBOVUxMOwotCQlsdC0+YnVmZmVyX3NpemUgPSAwOwotCQkvKiBw YWxsb2MoKSBsYXJnZXIgdGhhbiBNYXhBbGxvY1NpemUgd291bGQgZmFpbCAqLwotCQlsdC0+bWF4 X3NpemUgPSBNYXhBbGxvY1NpemU7Ci0JCWx0LT5wb3MgPSAwOwotCQlsdC0+bmJ5dGVzID0gMDsK LQl9CisJCWx0c0luaXRUYXBlKCZsdHMtPnRhcGVzW2ldKTsKIAogCS8qCiAJICogQ3JlYXRlIHRl bXAgQnVmRmlsZSBzdG9yYWdlIGFzIHJlcXVpcmVkLgpAQCAtMTAwNCw2ICsxMDA3LDI4IEBAIExv Z2ljYWxUYXBlRnJlZXplKExvZ2ljYWxUYXBlU2V0ICpsdHMsIGludCB0YXBlbnVtLCBUYXBlU2hh cmUgKnNoYXJlKQogCX0KIH0KIAorLyoKKyAqIEFkZCBhZGRpdGlvbmFsIHRhcGVzIHRvIHRoaXMg dGFwZSBzZXQuCisgKi8KK0xvZ2ljYWxUYXBlU2V0ICoKK0xvZ2ljYWxUYXBlU2V0RXh0ZW5kKExv Z2ljYWxUYXBlU2V0ICpsdHMsIGludCBuQWRkaXRpb25hbCkKK3sKKwlpbnQgICAgIGk7CisJaW50 CQluVGFwZXNPcmlnID0gbHRzLT5uVGFwZXM7CisJU2l6ZQluZXdTaXplOworCisJbHRzLT5uVGFw ZXMgKz0gbkFkZGl0aW9uYWw7CisJbmV3U2l6ZSA9IG9mZnNldG9mKExvZ2ljYWxUYXBlU2V0LCB0 YXBlcykgKworCQlsdHMtPm5UYXBlcyAqIHNpemVvZihMb2dpY2FsVGFwZSk7CisKKwlsdHMgPSAo TG9naWNhbFRhcGVTZXQgKikgcmVwYWxsb2MobHRzLCBuZXdTaXplKTsKKworCWZvciAoaSA9IG5U YXBlc09yaWc7IGkgPCBsdHMtPm5UYXBlczsgaSsrKQorCQlsdHNJbml0VGFwZSgmbHRzLT50YXBl c1tpXSk7CisKKwlyZXR1cm4gbHRzOworfQorCiAvKgogICogQmFja3NwYWNlIHRoZSB0YXBlIGEg Z2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLiAgKFdlIGFsc28gc3VwcG9ydCBhIG1vcmUKICAqIGdlbmVy YWwgc2VlayBpbnRlcmZhY2UsIHNlZSBiZWxvdy4pCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9sb2d0YXBlLmggYi9zcmMvaW5jbHVkZS91dGlscy9sb2d0YXBlLmgKaW5kZXggNjk1ZDJj MDBlZTQuLjNlYmU1MjIzOWY4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9sb2d0YXBl LmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvbG9ndGFwZS5oCkBAIC02Nyw2ICs2Nyw4IEBAIGV4 dGVybiB2b2lkIExvZ2ljYWxUYXBlUmV3aW5kRm9yUmVhZChMb2dpY2FsVGFwZVNldCAqbHRzLCBp bnQgdGFwZW51bSwKIGV4dGVybiB2b2lkIExvZ2ljYWxUYXBlUmV3aW5kRm9yV3JpdGUoTG9naWNh bFRhcGVTZXQgKmx0cywgaW50IHRhcGVudW0pOwogZXh0ZXJuIHZvaWQgTG9naWNhbFRhcGVGcmVl emUoTG9naWNhbFRhcGVTZXQgKmx0cywgaW50IHRhcGVudW0sCiAJCQkJCQkJICBUYXBlU2hhcmUg KnNoYXJlKTsKK2V4dGVybiBMb2dpY2FsVGFwZVNldCAqTG9naWNhbFRhcGVTZXRFeHRlbmQoTG9n aWNhbFRhcGVTZXQgKmx0cywKKwkJCQkJCQkJCQkJaW50IG5BZGRpdGlvbmFsKTsKIGV4dGVybiBz aXplX3QgTG9naWNhbFRhcGVCYWNrc3BhY2UoTG9naWNhbFRhcGVTZXQgKmx0cywgaW50IHRhcGVu dW0sCiAJCQkJCQkJCSAgIHNpemVfdCBzaXplKTsKIGV4dGVybiB2b2lkIExvZ2ljYWxUYXBlU2Vl ayhMb2dpY2FsVGFwZVNldCAqbHRzLCBpbnQgdGFwZW51bSwKLS0gCjIuMTcuMQoK --=-VyOYe8Io/HQ+elLbiBei--