Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2Fkg-0007wD-0V for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 21:45:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2Fke-00DQQ7-37 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 21:45:28 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2Fke-00DQOw-0X for pgsql-hackers@lists.postgresql.org; Mon, 16 Mar 2026 21:45:28 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2FkW-000000004z9-26T7 for pgsql-hackers@postgresql.org; Mon, 16 Mar 2026 21:45:27 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b936331786dso579333866b.3 for ; Mon, 16 Mar 2026 14:45:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773697521; cv=none; d=google.com; s=arc-20240605; b=LYCbz/QGHf+mXRSeNzenz/jrsi/z6sisv1SnTp4qt2g6hsnLsrCuTmUdB5lMYy6kMY UohiPM0/R8VZVZjJ/GBOhSqwNolJZWaP4e3T0tgpQIVev7DtEgBRvP2oWvv7F7M++c/1 /aurKgtH0x7HYhamWzgtFHiBAjt2ig02ZI5fXOiAAHNJK6llSn3Xfiw3ItH7pMMDk8F1 cgyAsVZszjSnxFkqpwJbFuqiZrKaoI/TAdBf0vtNjhD8UapC+AXhtHQ6n6LUhqdqKJs3 x6bJtrnwFEnoXFFMRW0bwINH0XuYLfXL60FmqLpyOScpLLdglSZW6vMtLxhec/xprNa6 aYhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=6t8LrsqvFHuRaCzX2yAwSydtUMDE06dle4pEaLePbV4=; fh=01TgzGvYq0oDx35f243n3GUMmtsD5libQ6rGoJAbVwU=; b=QLahWqQaqw5O7JCvge3ONSH24mJNFhAxSFpstgXaNYOd5/Dcf4P6OhLL9Eobq7fSJN cQUNI1H2EWNdnSYblOoqzNuSf8ZQIcksnLXygwVSy13lAsQDZ1eCNRmaOlsjDjvzUzLD dMLHFMT+emgKCHgDFGaCvkPgujB3aa/36Kp1JasHudtbPVRiKMy10QPE0snqnMsKRva4 qnuKCyM8WJiE76TxpDst57L6eZqOCVZN9vT1C8pUOvvTPyfYFMhSFN4bUdfusXzDbXjD bNWM3GRFk4w2QM1Lqj0IwEzMrHf/jAXKue5DrAZa1fzExt10UaS1h+sFAiF3oW51q00a fFww==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773697521; x=1774302321; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6t8LrsqvFHuRaCzX2yAwSydtUMDE06dle4pEaLePbV4=; b=BTl8O6jRNRmPJ6ND8ih2MB66TOHI3LEw4Rlh0nvuHHHgRG8nhOs/LLEaM7iGNsj3Bo utkWYxg0/8FaMLUGRFjn7WnvpEiLLnopcwCR/nZKaSEW4hBvsDjKKfmhZnWNKN5MVutM g8GQzwsvg0hYtXGkYvXYLDN3O/KygPQ71ixlyZQEPrbo6mTQ8mzVA1b8on5KtQrdyXD0 tgGI4m6mrQ0cEVzDQIzPUvMFtGUk4c7ec6upfGvmCdUr+oy8sKCrdD+IYJy4rvuPkphG uWuY8mdXZMTp0inUkLVZf4igGU6rb1bYAlYCZzEYqOK3VqntYmVd0IK1DxQ/HU5FaYkV Urtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773697521; x=1774302321; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6t8LrsqvFHuRaCzX2yAwSydtUMDE06dle4pEaLePbV4=; b=kK4mKDSq01ZQS/yClrop/RRccjGh2HoFvssGJuIGY5hu3ElE1EcoF51m7vK0qiSU1V Gt131jTPxjaRpDiillredKRfNQbPbvIL2yyPdOqIrfW64SapSnVIuE8SUc9mtBg1Vas+ 5r0N/j48g5OQ/8uD72dULSVVryMdLuevp1fccL/r9Qz4zsthvwb162YNtNUf1w0s0lgx vGv8S9sppL0rQuGFKaCWCdioI0D7KJElxV5UO19t8nF9oP4GUpIY0g0cua7HbBDOBLzZ shJyEib7hgxZxHiwLFRnp+lFNjnlQWAiZ2EHZWbWHlTHlSSU7MdS1g4qmxzBc3VLNVES GAsg== X-Forwarded-Encrypted: i=1; AJvYcCXliwDGFYzhIRZlOvYn+BXIpK29oL5SunrdmAsQKzJIxti0DdWK6GZ9wBYzG/Ddv+wU1uh6SshnLePnrkxi@postgresql.org X-Gm-Message-State: AOJu0YwZdGAZqeWkC/t8pzy3OWHsqagThhKl2APEyIQcKozTGajOrzDh 8qgzoI9ikGCLofyEdmT3A06792zZNCSuXjmeW/wth2JP6ZEp4Oau28/Aw1+j4MeNLje1rFd/jvm 57rV5A7OcUZl8hEy4zl3QOh6KtzHY/J8= X-Gm-Gg: ATEYQzwEX2hgxU4uDYTL5bWaPdEdcpU+hv0TPJ5HmiD0bGxsp8MEggsJZa24n6QyvjM UjEP5MjIGMv10mjc5hN6Q6prnnfh17ikOd/1tMKhWY0AUDznYYpfe/e/s7/hmaFcJWl4MyMZYit FQ6QtnndscV0lwloBwrSdhgqG/X+PVSpFpN3iBp1F4bIrNmXB+XLv5B8rEL9uuD74Mtld74mGeB VSGS9Z3zrDT4IXL1l8UIuMM+iZs3mYg1RNK4yOPS9B5JhUJWvs+OmSc7p6q8UnqnQTQ6U+mHtD7 Yu20gxN1IfbFj6R84kMxzy2b1mXyV+3Hx4JjIkEaS8GZse68COe5ArlAD0Pu03Ou6lyBIaeUDe7 Z6ywYCy/n X-Received: by 2002:a17:907:a0c9:b0:b8f:b32e:e196 with SMTP id a640c23a62f3a-b9765141719mr889391366b.30.1773697520397; Mon, 16 Mar 2026 14:45:20 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Melanie Plageman Date: Mon, 16 Mar 2026 17:45:07 -0400 X-Gm-Features: AaiRm50K8WG3eguekSj7K2oUXizzp8YeiXe7bBWZxCRfIdJ_p5zX-52zbiOHzZ8 Message-ID: Subject: Re: Don't synchronously wait for already-in-progress IO in read stream To: Nazir Bilal Yavuz Cc: Thomas Munro , Andres Freund , pgsql-hackers@postgresql.org, Peter Geoghegan , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000a4b370064d2b22e6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a4b370064d2b22e6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the continued review! Attached v5 adds some comments to the tests, fixes a few nits in the actual code, and adds a commit to fix what I think is an existing off-by-one error in TRACE_POSTGRESQL_BUFFER_READ_DONE. On Fri, Mar 6, 2026 at 8:18=E2=80=AFAM Nazir Bilal Yavuz wrote: > > > For test_repeated_blocks, the first test: > > > > # test miss of the same block twice in a row > > $psql->query_safe( > > qq/ > > SELECT evict_rel('largeish'); > > /); > > $psql->query_safe( > > qq/ > > SELECT * FROM read_stream_for_blocks('largeish', ARRAY[0, 2, 2, 4, 4]); > > /); > > ok(1, "$io_method: stream missing the same block repeatedly"); > > > > It says that it will miss the same block repeatedly, is that because > > we won't start a read for any of the blocks until after > > read_stream_get_block has returned all of them? If so, could be > > clearer in the comment. Not everyone understands all the read stream > > internals. > > I think we start a read of blocks because we hit stream->distance but > it doesn't affect any consecutive same block numbers. What I > understood is: > > Since io_combine_limit is 1, there won't be any IO combining. > > 0th block (0), miss, distance is 1; StartReadBuffersImpl() and > WaitReadBuffers() are called for 0th block. > 1th block (2), miss, distance is 2, StartReadBuffersImpl() is called. > 2th block (2), miss, distance is 2, StartReadBuffersImpl() and > WaitReadBuffers() are called 1th block. > 3th block (4), miss, distance is 4, StartReadBuffersImpl() is called. > 4th block (4), miss, distance is 4, StartReadBuffersImpl() and > WaitReadBuffers() are called 2, 3 and 4th blocks. Makes sense. I've tried to add a comment to this effect. > > I know a lot of other tests do this, but I find it so hard to read the > > test with the SQL is totally left-aligned like that -- especially with > > comments interspersed. You can easily flow the queries on multiple > > lines and indent it more. > > I agree with you. I did reflow the SQL. It does mean there will be a bunch of extra whitespace sent to the server. Other tests do this, though. I wonder how much it affects performance... > > For test_repeated_blocks, the second test: > > > > # test hit of the same block twice in a row > > $psql->query_safe( > > qq/ > > SELECT evict_rel('largeish'); > > /); > > $psql->query_safe( > > qq/ > > SELECT * FROM read_stream_for_blocks('largeish', ARRAY[0, 1, 2, 3, 4, > > 5, 6, 5, 4, 3, 2, 1, 0]); > > /); > > ok(1, "$io_method: stream accessing same block"); > > > > I assume that the second access of 2 is a hit because we actually did > > IO for the first one (unlike in the earlier case)? > > I think so but to clarify, all second access of [2, 1, 0] blocks are hit;= right? Yes. I tried expanding the comment to elaborate, but it just came out awkward, so I left it the way it is. > > For test_inject_foreign, the 3rd test: > > > > # Test read stream encountering two buffers that are undergoing the= same > > # IO, started by another backend > > > > I see that psql_b is requesting 3 blocks which can be combined into 1 > > IO, which makes it different than the 1st foreign IO test case: > > > > ### > > # Test read stream encountering buffers undergoing IO in another ba= ckend, > > # with the other backend's reads succeeding. > > ### > > > > where psql_b only requests 1 but I don't really see how these are > > covering different code. Maybe if the read stream one (psql_a) is > > doing a combined IO it might exercise slightly different code, but > > otherwise I don't get it. > > I think the main difference is that: > > > ### > > # Test read stream encountering buffers undergoing IO in another ba= ckend, > > # with the other backend's reads succeeding. > > ### > > SELECT array_agg(blocknum) FROM read_stream_for_blocks('largeish', > ARRAY[0, 2, 5, 7]); > > We need to join waiting block number 5 and then start another IO for > block number 7. > > > # Test read stream encountering two buffers that are undergoing the= same > > # IO, started by another backend > > SELECT array_agg(blocknum) FROM read_stream_for_blocks('largeish', > ARRAY[0, 2, 4]); > > We need to join waiting block number 2 but after waiting for an IO, IO > for block number 4 should be already completed too. We don't need to > start IO like the other case. Ah, makes sense. Thanks! - Melanie --000000000000a4b370064d2b22e6 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Disposition: attachment; filename="v5-0001-aio-Refactor-tests-in-preparation-for-more-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtpon6c0 RnJvbSBmZDFjYjVhN2QwZTA0ZWQ3MGYzODdlZDJjNjY2NzBlM2VmZjRmMDQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgOSBTZXAgMjAyNSAxMDoxNDozNCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMS81 XSBhaW86IFJlZmFjdG9yIHRlc3RzIGluIHByZXBhcmF0aW9uIGZvciBtb3JlIHRlc3RzCgpJbiBh IGZ1dHVyZSBjb21taXQgbW9yZSBBSU8gcmVsYXRlZCB0ZXN0cyBhcmUgZHVlIHRvIGJlIGludHJv ZHVjZWQuIEhvd2V2ZXIKMDAxX2Fpby5wbCBhbHJlYWR5IGlzIGZhaXJseSBsYXJnZS4KClRoaXMg Y29tbWl0IGludHJvZHVjZXMgYSBuZXcgVGVzdEFpbyBwYWNrYWdlIHdpdGggaGVscGVycyBmb3Ig d3JpdGluZyBBSU8KcmVsYXRlZCB0ZXN0cy4gVGhlbiBpdCB1c2VzIHRoZSBuZXcgaGVscGVycyB0 byBzaW1wbGlmeSB0aGUgZXhpc3RpbmcKMDAxX2Fpby5wbCBieSBpdGVyYXRpbmcgb3ZlciBhbGwg c3VwcG9ydGVkIGlvX21ldGhvZHMuIFRoaXMgd2lsbCBiZQpwYXJ0aWN1bGFybHkgaGVscGZ1bCBi ZWNhdXNlIGFkZGl0aW9uYWwgbWV0aG9kcyBhbHJlYWR5IGhhdmUgYmVlbiBzdWJtaXR0ZWQuCgpB ZGRpdGlvbmFsbHkgdGhpcyBjb21taXQgc3BsaXRzIG91dCB0ZXN0aW5nIG9mIGluaXRkYiB1c2lu ZyBhIG5vbi1kZWZhdWx0Cm1ldGhvZCBpbnRvIGl0cyBvd24gdGVzdC4gV2hpbGUgdGhhdCB0ZXN0 IGlzIHNvbWV3aGF0IGltcG9ydGFudCwgaXQncyBmYWlybHkKc2xvdyBhbmQgZG9lc24ndCBicmVh ayB0aGF0IG9mdGVuLiBGb3IgZGV2ZWxvcG1lbnQgdmVsb2NpdHkgaXQncyBoZWxwZnVsIGZvcgow MDFfYWlvLnBsIHRvIGJlIGZhc3Rlci4KCldoaWxlIHBhcnRpY3VsYXJseSB0aGUgbGF0dGVyIGNv dWxkIGJlbmVmaXQgZnJvbSBiZWluZyBpdHMgb3duIGNvbW1pdCwgaXQKc2VlbXMgdG8gaW50cm9k dWNlIG1vcmUgYmFjay1hbmQtZm9ydGggdGhhbiBpdCdzIHdvcnRoLgoKQXV0aG9yOiBBbmRyZXMg RnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLWJ5OiBOYXppciBCaWxhbCBZYXZ1 eiA8YnlhdnV6ODFAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTWVsYW5pZSBQbGFnZW1hbiA8bWVs YW5pZXBsYWdlbWFuQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8K LS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkICAgICB8ICAgMSArCiBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAxX2Fpby5wbCAgICB8IDE0MSArKysrKysrLS0t LS0tLS0tLS0tLS0tCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbCB8 ICA3MSArKysrKysrKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0g ICAgfCAgOTAgKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMjA0IGluc2VydGlvbnMo KyksIDk5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vdC8wMDNfaW5pdGRiLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0KCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5i dWlsZAppbmRleCBmZWZhMjViYzVhYi4uMThhNzk3ZjNhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby9tZXNvbi5idWlsZApAQCAtMzIsNiArMzIsNyBAQCB0ZXN0cyArPSB7CiAgICAgJ3Rlc3Rz JzogWwogICAgICAgJ3QvMDAxX2Fpby5wbCcsCiAgICAgICAndC8wMDJfaW9fd29ya2Vycy5wbCcs CisgICAgICAndC8wMDNfaW5pdGRiLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3QvMDAxX2Fpby5wbAppbmRleCA1YzYzNGVjM2NhOS4uZTE4YjJhMmI4YWUgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC8wMDFfYWlvLnBsCkBAIC03LDEyNiArNyw1NiBAQCB1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czsKIHVzZSBUZXN0OjpNb3JlOwogCit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJl YWxCaW47CiAKLSMjIwotIyBUZXN0IGlvX21ldGhvZD13b3JrZXIKLSMjIwotbXkgJG5vZGVfd29y a2VyID0gY3JlYXRlX25vZGUoJ3dvcmtlcicpOwotJG5vZGVfd29ya2VyLT5zdGFydCgpOwotCi10 ZXN0X2dlbmVyaWMoJ3dvcmtlcicsICRub2RlX3dvcmtlcik7Ci1TS0lQOgotewotCXNraXAgJ0lu amVjdGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJywgMQotCSAgdW5sZXNz ICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMnOwotCXRlc3RfaW5qZWN0X3dv cmtlcignd29ya2VyJywgJG5vZGVfd29ya2VyKTsKLX0KK3VzZSBUZXN0QWlvOwogCi0kbm9kZV93 b3JrZXItPnN0b3AoKTsKK215IEBtZXRob2RzID0gVGVzdEFpbzo6c3VwcG9ydGVkX2lvX21ldGhv ZHMoKTsKK215ICVub2RlczsKIAogCiAjIyMKLSMgVGVzdCBpb19tZXRob2Q9aW9fdXJpbmcKKyMg Q3JlYXRlIGFuZCBjb25maWd1cmUgb25lIGluc3RhbmNlIGZvciBlYWNoIGlvX21ldGhvZAogIyMj CiAKLWlmIChoYXZlX2lvX3VyaW5nKCkpCitmb3JlYWNoIG15ICRtZXRob2QgKEBtZXRob2RzKQog ewotCW15ICRub2RlX3VyaW5nID0gY3JlYXRlX25vZGUoJ2lvX3VyaW5nJyk7Ci0JJG5vZGVfdXJp bmctPnN0YXJ0KCk7Ci0JdGVzdF9nZW5lcmljKCdpb191cmluZycsICRub2RlX3VyaW5nKTsKLQkk bm9kZV91cmluZy0+c3RvcCgpOwotfQotCi0KLSMjIwotIyBUZXN0IGlvX21ldGhvZD1zeW5jCi0j IyMKLQotbXkgJG5vZGVfc3luYyA9IGNyZWF0ZV9ub2RlKCdzeW5jJyk7CisJbXkgJG5vZGUgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJG1ldGhvZCk7CiAKLSMganVzdCB0byBoYXZl IG9uZSB0ZXN0IG5vdCB1c2UgdGhlIGRlZmF1bHQgYXV0by10dW5pbmcKKwkkbm9kZXN7JG1ldGhv ZH0gPSAkbm9kZTsKKwkkbm9kZS0+aW5pdCgpOworCSRub2RlLT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywgImlvX21ldGhvZD0kbWV0aG9kIik7CisJVGVzdEFpbzo6Y29uZmlndXJlKCRu b2RlKTsKK30KIAotJG5vZGVfc3luYy0+YXBwZW5kX2NvbmYoCisjIEp1c3QgdG8gaGF2ZSBvbmUg dGVzdCBub3QgdXNlIHRoZSBkZWZhdWx0IGF1dG8tdHVuaW5nCiskbm9kZXN7J3N5bmMnfS0+YXBw ZW5kX2NvbmYoCiAJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAotaW9fbWF4X2NvbmN1cnJlbmN5PTQK KyBpb19tYXhfY29uY3VycmVuY3k9NAogKSk7CiAKLSRub2RlX3N5bmMtPnN0YXJ0KCk7Ci10ZXN0 X2dlbmVyaWMoJ3N5bmMnLCAkbm9kZV9zeW5jKTsKLSRub2RlX3N5bmMtPnN0b3AoKTsKLQotZG9u ZV90ZXN0aW5nKCk7Ci0KIAogIyMjCi0jIFRlc3QgSGVscGVycworIyBFeGVjdXRlIHRoZSB0ZXN0 cyBmb3IgZWFjaCBpb19tZXRob2QKICMjIwogCi1zdWIgY3JlYXRlX25vZGUKK2ZvcmVhY2ggbXkg JG1ldGhvZCAoQG1ldGhvZHMpCiB7Ci0JbG9jYWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRl c3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsKLQotCW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlteSAk bm9kZSA9ICRub2Rlc3skbWV0aG9kfTsKIAotCW15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCRpb19tZXRob2QpOwotCi0JIyBXYW50IHRvIHRlc3QgaW5pdGRiIGZvciBl YWNoIElPIG1ldGhvZCwgb3RoZXJ3aXNlIHdlIGNvdWxkIGp1c3QgcmV1c2UKLQkjIHRoZSBjbHVz dGVyLgotCSMKLQkjIFVuZm9ydHVuYXRlbHkgQ2x1c3Rlcjo6aW5pdCgpIHB1dHMgUEdfVEVTVF9J TklUREJfRVhUUkFfT1BUUyBhZnRlciB0aGUKLQkjIG9wdGlvbnMgc3BlY2lmaWVkIGJ5IC0+ZXh0 cmEsIGlmIHNvbWVib2R5IHB1dHMgLWMgaW9fbWV0aG9kPXh5eiBpbgotCSMgUEdfVEVTVF9JTklU REJfRVhUUkFfT1BUUyBpdCB3b3VsZCBicmVhayB0aGlzIHRlc3QuIEZpeCB0aGF0IHVwIGlmIHdl Ci0JIyBkZXRlY3QgaXQuCi0JbG9jYWwgJEVOVntQR19URVNUX0lOSVREQl9FWFRSQV9PUFRTfSA9 ICRFTlZ7UEdfVEVTVF9JTklUREJfRVhUUkFfT1BUU307Ci0JaWYgKGRlZmluZWQgJEVOVntQR19U RVNUX0lOSVREQl9FWFRSQV9PUFRTfQotCQkmJiAkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09Q VFN9ID1+IG0vaW9fbWV0aG9kPS8pCi0JewotCQkkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09Q VFN9IC49ICIgLWMgaW9fbWV0aG9kPSRpb19tZXRob2QiOwotCX0KLQotCSRub2RlLT5pbml0KGV4 dHJhID0+IFsgJy1jJywgImlvX21ldGhvZD0kaW9fbWV0aG9kIiBdKTsKLQotCSRub2RlLT5hcHBl bmRfY29uZigKLQkJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAotc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzPXRlc3RfYWlvCi1sb2dfbWluX21lc3NhZ2VzID0gJ0RFQlVHMycKLWxvZ19zdGF0ZW1lbnQ9 YWxsCi1sb2dfZXJyb3JfdmVyYm9zaXR5PWRlZmF1bHQKLXJlc3RhcnRfYWZ0ZXJfY3Jhc2g9ZmFs c2UKLXRlbXBfYnVmZmVycz0xMDAKLSkpOworCSRub2RlLT5zdGFydCgpOworCXRlc3RfaW9fbWV0 aG9kKCRtZXRob2QsICRub2RlKTsKKwkkbm9kZS0+c3RvcCgpOworfQogCi0JIyBFdmVuIHRob3Vn aCB3ZSB1c2VkIC1jIGlvX21ldGhvZD0uLi4gYWJvdmUsIGlmIFRFTVBfQ09ORklHIHNldHMKLQkj IGlvX21ldGhvZCwgaXQnZCBvdmVycmlkZSB0aGUgc2V0dGluZyBwZXJzaXN0ZWQgYXQgaW5pdGRi IHRpbWUuIFdoaWxlCi0JIyB1c2luZyAoYW5kIGxhdGVyIHZlcmlmeWluZykgdGhlIHNldHRpbmcg ZnJvbSBpbml0ZGIgcHJvdmlkZXMgc29tZQotCSMgdmVyaWZpY2F0aW9uIG9mIGhhdmluZyB1c2Vk IHRoZSBpb19tZXRob2QgZHVyaW5nIGluaXRkYiwgaXQncyBwcm9iYWJseQotCSMgbm90IHdvcnRo IHRoZSBjb21wbGljYXRpb24gb2Ygb25seSBhcHBlbmRpbmcgaWYgdGhlIHZhcmlhYmxlIGlzIHNl dCBpbgotCSMgaW4gVEVNUF9DT05GSUcuCi0JJG5vZGUtPmFwcGVuZF9jb25mKAotCQkncG9zdGdy ZXNxbC5jb25mJywgcXEoCi1pb19tZXRob2Q9JGlvX21ldGhvZAotKSk7Citkb25lX3Rlc3Rpbmco KTsKIAotCW9rKDEsICIkaW9fbWV0aG9kOiBpbml0ZGIiKTsKIAotCXJldHVybiAkbm9kZTsKLX0K KyMjIworIyBUZXN0IEhlbHBlcnMKKyMjIwogCi1zdWIgaGF2ZV9pb191cmluZwotewotCSMgVG8g ZGV0ZWN0IGlmIGlvX3VyaW5nIGlzIHN1cHBvcnRlZCwgd2UgbG9vayBhdCB0aGUgZXJyb3IgbWVz c2FnZSBmb3IKLQkjIGFzc2lnbmluZyBhbiBpbnZhbGlkIHZhbHVlIHRvIGFuIGVudW0gR1VDLCB3 aGljaCBsaXN0cyBhbGwgdGhlIHZhbGlkCi0JIyBvcHRpb25zLiBXZSBuZWVkIHRvIHVzZSAtQyB0 byBkZWFsIHdpdGggcnVubmluZyBhcyBhZG1pbmlzdHJhdG9yIG9uCi0JIyB3aW5kb3dzLCB0aGUg c3VwZXJ1c2VyIGNoZWNrIGlzIG9taXR0ZWQgaWYgLUMgaXMgdXNlZC4KLQlteSAoJHN0ZG91dCwg JHN0ZGVycikgPQotCSAgcnVuX2NvbW1hbmQgW3F3KHBvc3RncmVzIC1DIGludmFsaWQgLWMgaW9f bWV0aG9kPWludmFsaWQpXTsKLQlkaWUgImNhbid0IGRldGVybWluZSBzdXBwb3J0ZWQgaW9fbWV0 aG9kIHZhbHVlcyIKLQkgIHVubGVzcyAkc3RkZXJyID1+IG0vQXZhaWxhYmxlIHZhbHVlczogKFte XC5dKylcLi87Ci0JbXkgJG1ldGhvZHMgPSAkMTsKLQlub3RlICJzdXBwb3J0ZWQgaW9fbWV0aG9k IHZhbHVlcyBhcmU6ICRtZXRob2RzIjsKLQotCXJldHVybiAoJG1ldGhvZHMgPX4gbS9pb191cmlu Zy8pID8gMSA6IDA7Ci19CiAKIHN1YiBwc3FsX2xpa2UKIHsKQEAgLTE0OTAsOCArMTQyMCw4IEBA IFNFTEVDVCByZWFkX3JlbF9ibG9ja19sbCgndGJsX2NzX2ZhaWwnLCAzLCBuYmxvY2tzPT4xLCB6 ZXJvX29uX2Vycm9yPT50cnVlKTspLAogfQogCiAKLSMgUnVuIGFsbCB0ZXN0cyB0aGF0IGFyZSBz dXBwb3J0ZWQgZm9yIGFsbCBpb19tZXRob2RzCi1zdWIgdGVzdF9nZW5lcmljCisjIFJ1biBhbGwg dGVzdHMgdGhhdCBmb3IgdGhlIHNwZWNpZmllZCBub2RlIC8gaW9fbWV0aG9kCitzdWIgdGVzdF9p b19tZXRob2QKIHsKIAlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CiAJbXkgJG5vZGUgPSBzaGlmdDsK QEAgLTE1MjYsMTAgKzE0NTYsMjMgQEAgQ0hFQ0tQT0lOVDsKIAl0ZXN0X2lnbm9yZV9jaGVja3N1 bSgkaW9fbWV0aG9kLCAkbm9kZSk7CiAJdGVzdF9jaGVja3N1bV9jcmVhdGVkYigkaW9fbWV0aG9k LCAkbm9kZSk7CiAKKwkjIGdlbmVyaWMgaW5qZWN0aW9uIHRlc3RzCiAgIFNLSVA6CiAJewogCQlz a2lwICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcsIDEKIAkJ ICB1bmxlc3MgJEVOVntlbmFibGVfaW5qZWN0aW9uX3BvaW50c30gZXEgJ3llcyc7CiAJCXRlc3Rf aW5qZWN0KCRpb19tZXRob2QsICRub2RlKTsKIAl9CisKKwkjIHdvcmtlciBzcGVjaWZpYyBpbmpl Y3Rpb24gdGVzdHMKKwlpZiAoJGlvX21ldGhvZCBlcSAnd29ya2VyJykKKwl7CisJICBTS0lQOgor CQl7CisJCQlza2lwICdJbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWls ZCcsIDEKKwkJCSAgdW5sZXNzICRFTlZ7ZW5hYmxlX2luamVjdGlvbl9wb2ludHN9IGVxICd5ZXMn OworCisJCQl0ZXN0X2luamVjdF93b3JrZXIoJGlvX21ldGhvZCwgJG5vZGUpOworCQl9CisJfQog fQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwM19pbml0ZGIucGwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzAzYWU1OGQwMGEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAzX2luaXRkYi5wbApAQCAtMCwwICsxLDcx IEBACisjIENvcHlyaWdodCAoYykgMjAyNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorIworIyBUZXN0IGluaXRkYiBmb3IgZWFjaCBJTyBtZXRob2QuIFRoaXMgaXMg ZG9uZSBzZXBhcmF0ZWx5IGZyb20gMDAxX2Fpby5wbCwgYXMKKyMgaXQgaXNuJ3QgZmFzdC4gVGhp cyB3YXkgdGhlIG1vcmUgY29tbW9ubHkgZmFpbGluZyAvIGhhY2tlZC1vbiAwMDFfYWlvLnBsIGNh bgorIyBiZSBpdGVyYXRlZCBvbiBtb3JlIHF1aWNrbHkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCit1c2UgRmluZEJp bjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47CisKK3VzZSBUZXN0QWlvOworCisKK2ZvcmVh Y2ggbXkgJG1ldGhvZCAoVGVzdEFpbzo6c3VwcG9ydGVkX2lvX21ldGhvZHMoKSkKK3sKKwl0ZXN0 X2NyZWF0ZV9ub2RlKCRtZXRob2QpOworfQorCitkb25lX3Rlc3RpbmcoKTsKKworCitzdWIgdGVz dF9jcmVhdGVfbm9kZQoreworCWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpC dWlsZGVyOjpMZXZlbCArIDE7CisKKwlteSAkaW9fbWV0aG9kID0gc2hpZnQ7CisKKwlteSAkbm9k ZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkaW9fbWV0aG9kKTsKKworCSMgV2Fu dCB0byB0ZXN0IGluaXRkYiBmb3IgZWFjaCBJTyBtZXRob2QsIG90aGVyd2lzZSB3ZSBjb3VsZCBq dXN0IHJldXNlCisJIyB0aGUgY2x1c3Rlci4KKwkjCisJIyBVbmZvcnR1bmF0ZWx5IENsdXN0ZXI6 OmluaXQoKSBwdXRzIFBHX1RFU1RfSU5JVERCX0VYVFJBX09QVFMgYWZ0ZXIgdGhlCisJIyBvcHRp b25zIHNwZWNpZmllZCBieSAtPmV4dHJhLCBpZiBzb21lYm9keSBwdXRzIC1jIGlvX21ldGhvZD14 eXogaW4KKwkjIFBHX1RFU1RfSU5JVERCX0VYVFJBX09QVFMgaXQgd291bGQgYnJlYWsgdGhpcyB0 ZXN0LiBGaXggdGhhdCB1cCBpZiB3ZQorCSMgZGV0ZWN0IGl0LgorCWxvY2FsICRFTlZ7UEdfVEVT VF9JTklUREJfRVhUUkFfT1BUU30gPSAkRU5We1BHX1RFU1RfSU5JVERCX0VYVFJBX09QVFN9Owor CWlmIChkZWZpbmVkICRFTlZ7UEdfVEVTVF9JTklUREJfRVhUUkFfT1BUU30KKwkJJiYgJEVOVntQ R19URVNUX0lOSVREQl9FWFRSQV9PUFRTfSA9fiBtL2lvX21ldGhvZD0vKQorCXsKKwkJJEVOVntQ R19URVNUX0lOSVREQl9FWFRSQV9PUFRTfSAuPSAiIC1jIGlvX21ldGhvZD0kaW9fbWV0aG9kIjsK Kwl9CisKKwkkbm9kZS0+aW5pdChleHRyYSA9PiBbICctYycsICJpb19tZXRob2Q9JGlvX21ldGhv ZCIgXSk7CisKKwlUZXN0QWlvOjpjb25maWd1cmUoJG5vZGUpOworCisJIyBFdmVuIHRob3VnaCB3 ZSB1c2VkIC1jIGlvX21ldGhvZD0uLi4gYWJvdmUsIGlmIFRFTVBfQ09ORklHIHNldHMKKwkjIGlv X21ldGhvZCwgaXQnZCBvdmVycmlkZSB0aGUgc2V0dGluZyBwZXJzaXN0ZWQgYXQgaW5pdGRiIHRp bWUuIFdoaWxlCisJIyB1c2luZyAoYW5kIGxhdGVyIHZlcmlmeWluZykgdGhlIHNldHRpbmcgZnJv bSBpbml0ZGIgcHJvdmlkZXMgc29tZQorCSMgdmVyaWZpY2F0aW9uIG9mIGhhdmluZyB1c2VkIHRo ZSBpb19tZXRob2QgZHVyaW5nIGluaXRkYiwgaXQncyBwcm9iYWJseQorCSMgbm90IHdvcnRoIHRo ZSBjb21wbGljYXRpb24gb2Ygb25seSBhcHBlbmRpbmcgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBp bgorCSMgaW4gVEVNUF9DT05GSUcuCisJJG5vZGUtPmFwcGVuZF9jb25mKAorCQkncG9zdGdyZXNx bC5jb25mJywgcXEoCitpb19tZXRob2Q9JGlvX21ldGhvZAorKSk7CisKKwlvaygxLCAiJGlvX21l dGhvZDogaW5pdGRiIik7CisKKwkkbm9kZS0+c3RhcnQoKTsKKwkkbm9kZS0+c3RvcCgpOworCW9r KDEsICIkaW9fbWV0aG9kOiBzdGFydCAmIHN0b3AiKTsKKworCXJldHVybiAkbm9kZTsKK30KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdC9UZXN0QWlvLnBtIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjViYzgwYTliMTMwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90L1Rlc3RBaW8ucG0KQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjQtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor PXBvZAorCis9aGVhZDEgTkFNRQorCitUZXN0QWlvIC0gaGVscGVycyBmb3Igd3JpdGluZyBBSU8g cmVsYXRlZCB0ZXN0cworCis9Y3V0CisKK3BhY2thZ2UgVGVzdEFpbzsKKwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKworCis9cG9kCisKKz1oZWFkMSBNRVRIT0RTCisKKz1vdmVyCisKKz1pdGVtIFRl c3RBaW86OnN1cHBvcnRlZF9pb19tZXRob2RzKCkKKworUmV0dXJuIGFuIGFycmF5IG9mIGFsbCB0 aGUgc3VwcG9ydGVkIHZhbHVlcyBmb3IgdGhlIGlvX21ldGhvZCBHVUMKKworPWN1dAorCitzdWIg c3VwcG9ydGVkX2lvX21ldGhvZHMoKQoreworCW15IEBpb19tZXRob2RzID0gKCd3b3JrZXInKTsK KworCXB1c2goQGlvX21ldGhvZHMsICJpb191cmluZyIpIGlmIGhhdmVfaW9fdXJpbmcoKTsKKwor CSMgUmV0dXJuIHN5bmMgbGFzdCwgYXMgaXQgd2lsbCBsZWFzdCBjb21tb25seSBmYWlsCisJcHVz aChAaW9fbWV0aG9kcywgInN5bmMiKTsKKworCXJldHVybiBAaW9fbWV0aG9kczsKK30KKworCis9 aXRlbSBUZXN0QWlvOjpjb25maWd1cmUoKQorCitQcmVwYXJlIGEgY2x1c3RlciBmb3IgQUlPIHRl c3QKKworPWN1dAorCitzdWIgY29uZmlndXJlCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKworCSRu b2RlLT5hcHBlbmRfY29uZigKKwkJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAorc2hhcmVkX3ByZWxv YWRfbGlicmFyaWVzPXRlc3RfYWlvCitsb2dfbWluX21lc3NhZ2VzID0gJ0RFQlVHMycKK2xvZ19z dGF0ZW1lbnQ9YWxsCitsb2dfZXJyb3JfdmVyYm9zaXR5PWRlZmF1bHQKK3Jlc3RhcnRfYWZ0ZXJf Y3Jhc2g9ZmFsc2UKK3RlbXBfYnVmZmVycz0xMDAKKykpOworCit9CisKKworPXBvZAorCis9aXRl bSBUZXN0QWlvOjpoYXZlX2lvX3VyaW5nKCkKKworUmV0dXJuIGlmIGlvX3VyaW5nIGlzIHN1cHBv cnRlZAorCis9Y3V0CisKK3N1YiBoYXZlX2lvX3VyaW5nCit7CisJIyBUbyBkZXRlY3QgaWYgaW9f dXJpbmcgaXMgc3VwcG9ydGVkLCB3ZSBsb29rIGF0IHRoZSBlcnJvciBtZXNzYWdlIGZvcgorCSMg YXNzaWduaW5nIGFuIGludmFsaWQgdmFsdWUgdG8gYW4gZW51bSBHVUMsIHdoaWNoIGxpc3RzIGFs bCB0aGUgdmFsaWQKKwkjIG9wdGlvbnMuIFdlIG5lZWQgdG8gdXNlIC1DIHRvIGRlYWwgd2l0aCBy dW5uaW5nIGFzIGFkbWluaXN0cmF0b3Igb24KKwkjIHdpbmRvd3MsIHRoZSBzdXBlcnVzZXIgY2hl Y2sgaXMgb21pdHRlZCBpZiAtQyBpcyB1c2VkLgorCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9CisJ ICBydW5fY29tbWFuZCBbcXcocG9zdGdyZXMgLUMgaW52YWxpZCAtYyBpb19tZXRob2Q9aW52YWxp ZCldOworCWRpZSAiY2FuJ3QgZGV0ZXJtaW5lIHN1cHBvcnRlZCBpb19tZXRob2QgdmFsdWVzIgor CSAgdW5sZXNzICRzdGRlcnIgPX4gbS9BdmFpbGFibGUgdmFsdWVzOiAoW15cLl0rKVwuLzsKKwlt eSAkbWV0aG9kcyA9ICQxOworCW5vdGUgInN1cHBvcnRlZCBpb19tZXRob2QgdmFsdWVzIGFyZTog JG1ldGhvZHMiOworCisJcmV0dXJuICgkbWV0aG9kcyA9fiBtL2lvX3VyaW5nLykgPyAxIDogMDsK K30KKworMTsKLS0gCjIuNDMuMAoK --000000000000a4b370064d2b22e6 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0002-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Disposition: attachment; filename="v5-0002-test_aio-Add-read_stream-test-infrastructure-test.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtpopjl1 RnJvbSA0M2UwYzMxYTVjMjYyNjg2MjQzZWUyZWQ1NjE3OTU0YjUzNjFhM2JhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFdlZCwgMTAgU2VwIDIwMjUgMTQ6MDA6MDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDIv NV0gdGVzdF9haW86IEFkZCByZWFkX3N0cmVhbSB0ZXN0IGluZnJhc3RydWN0dXJlICYgdGVzdHMK CkF1dGhvcjogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1ieTog TmF6aXIgQmlsYWwgWWF2dXogPGJ5YXZ1ejgxQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IE1lbGFu aWUgUGxhZ2VtYW4gPG1lbGFuaWVwbGFnZW1hbkBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBz Oi8vcG9zdGdyLmVzL20vZmxhdC96bGplcmd3ZXF0aTd4NjdsZzVpamUycnpqdXNpZTM3bnNsc25r amtrYnk0bGFxcWJmdyU0MDNwM3p1NTIyeXlrdgotLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9h aW8vbWVzb24uYnVpbGQgICAgICAgICB8ICAgMSArCiAuLi4vbW9kdWxlcy90ZXN0X2Fpby90LzAw NF9yZWFkX3N0cmVhbS5wbCAgICAgfCAyNjEgKysrKysrKysrKysrKwogc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbCAgIHwgIDI0ICstCiBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3Rlc3RfYWlvLmMgICAgICAgICAgfCAzNDYgKysrKysrKysrKysrKysrLS0tCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogNSBm aWxlcyBjaGFuZ2VkLCA1ODIgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5w bAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vbWVzb24uYnVpbGQgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCmluZGV4IDE4YTc5N2YzYTNiLi45 MDlmODFkOTZjMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5i dWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCkBAIC0zMyw2 ICszMyw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwMV9haW8ucGwnLAogICAgICAgJ3QvMDAy X2lvX3dvcmtlcnMucGwnLAogICAgICAgJ3QvMDAzX2luaXRkYi5wbCcsCisgICAgICAndC8wMDRf cmVhZF9zdHJlYW0ucGwnLAogICAgIF0sCiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Fpby90LzAwNF9yZWFkX3N0cmVhbS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uNzU1ZDZkZmMwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL3QvMDA0X3JlYWRfc3RyZWFtLnBsCkBAIC0wLDAgKzEsMjYxIEBACisjIENv cHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor dXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVz dDo6TW9yZTsKKwordXNlIEZpbmRCaW47Cit1c2UgbGliICRGaW5kQmluOjpSZWFsQmluOworCit1 c2UgVGVzdEFpbzsKKworCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygndGVzdCcpOworJG5vZGUtPmluaXQoKTsKKworJG5vZGUtPmFwcGVuZF9jb25mKAorCSdwb3N0 Z3Jlc3FsLmNvbmYnLCBxcSgKK3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz10ZXN0X2FpbworbG9n X21pbl9tZXNzYWdlcyA9ICdERUJVRzMnCitsb2dfc3RhdGVtZW50PWFsbAorbG9nX2Vycm9yX3Zl cmJvc2l0eT1kZWZhdWx0CityZXN0YXJ0X2FmdGVyX2NyYXNoPWZhbHNlCit0ZW1wX2J1ZmZlcnM9 MTAwCittYXhfY29ubmVjdGlvbnM9OAoraW9fbWV0aG9kPXdvcmtlcgorKSk7CisKKyRub2RlLT5z dGFydCgpOwordGVzdF9zZXR1cCgkbm9kZSk7Ciskbm9kZS0+c3RvcCgpOworCisKK2ZvcmVhY2gg bXkgJG1ldGhvZCAoVGVzdEFpbzo6c3VwcG9ydGVkX2lvX21ldGhvZHMoKSkKK3sKKwkkbm9kZS0+ YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdpb19tZXRob2QnLCAkbWV0aG9kKTsKKwkk bm9kZS0+c3RhcnQoKTsKKwl0ZXN0X2lvX21ldGhvZCgkbWV0aG9kLCAkbm9kZSk7CisJJG5vZGUt PnN0b3AoKTsKK30KKworZG9uZV90ZXN0aW5nKCk7CisKKworc3ViIHRlc3Rfc2V0dXAKK3sKKwlt eSAkbm9kZSA9IHNoaWZ0OworCisJJG5vZGUtPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXEo CitDUkVBVEUgRVhURU5TSU9OIHRlc3RfYWlvOworCitDUkVBVEUgVEFCTEUgbGFyZ2Vpc2goayBp bnQgbm90IG51bGwpIFdJVEggKEZJTExGQUNUT1I9MTApOworSU5TRVJUIElOVE8gbGFyZ2Vpc2go aykgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CispKTsKKwlvaygxLCAic2V0dXAi KTsKK30KKworCitzdWIgdGVzdF9yZXBlYXRlZF9ibG9ja3MKK3sKKwlteSAkaW9fbWV0aG9kID0g c2hpZnQ7CisJbXkgJG5vZGUgPSBzaGlmdDsKKworCW15ICRwc3FsID0gJG5vZGUtPmJhY2tncm91 bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBQcmV2ZW50aW5n IGxhcmdlciByZWFkcyBtYWtlcyB0ZXN0aW5nIGVhc2llcgorCSRwc3FsLT5xdWVyeV9zYWZlKAor CQlxcS8gU0VUIGlvX2NvbWJpbmVfbGltaXQgPSAxOyAvKTsKKworCSMgdGVzdCBtaXNzIG9mIHRo ZSBzYW1lIGJsb2NrIHR3aWNlIGluIGEgcm93CisJJHBzcWwtPnF1ZXJ5X3NhZmUoCisJCXFxLyBT RUxFQ1QgZXZpY3RfcmVsKCdsYXJnZWlzaCcpOyAvKTsKKworCSMgYmxvY2sgMCBncm93cyB0aGUg ZGlzdGFuY2UgZW5vdWdoIHRoYXQgdGhlIHN0cmVhbSB3aWxsIGxvb2sgYWhlYWQgYW5kIHRyeQor CSMgdG8gc3RhcnQgYSBwZW5kaW5nIHJlYWQgZm9yIGJsb2NrIDIgKGFuZCBsYXRlciBibG9jayA0 KSB0d2ljZSBiZWZvcmUKKwkjIHJldHVybmluZyBhbnkgYnVmZmVycy4KKwkkcHNxbC0+cXVlcnlf c2FmZSgKKwkJcXEvIFNFTEVDVCAqIEZST00gcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcygnbGFyZ2Vp c2gnLAorCQkJQVJSQVlbMCwgMiwgMiwgNCwgNF0pOyAvKTsKKworCW9rKDEsICIkaW9fbWV0aG9k OiBzdHJlYW0gbWlzc2luZyB0aGUgc2FtZSBibG9jayByZXBlYXRlZGx5Iik7CisKKwkkcHNxbC0+ cXVlcnlfc2FmZSgKKwkJcXEvIFNFTEVDVCAqIEZST00gcmVhZF9zdHJlYW1fZm9yX2Jsb2Nrcygn bGFyZ2Vpc2gnLAorCQkJQVJSQVlbMCwgMiwgMiwgNCwgNF0pOyAvKTsKKwlvaygxLCAiJGlvX21l dGhvZDogc3RyZWFtIGhpdHRpbmcgdGhlIHNhbWUgYmxvY2sgcmVwZWF0ZWRseSIpOworCisJIyB0 ZXN0IGhpdCBvZiB0aGUgc2FtZSBibG9jayB0d2ljZSBpbiBhIHJvdworCSRwc3FsLT5xdWVyeV9z YWZlKAorCQlxcS8gU0VMRUNUIGV2aWN0X3JlbCgnbGFyZ2Vpc2gnKTsgLyk7CisJJHBzcWwtPnF1 ZXJ5X3NhZmUoCisJCXFxLyBTRUxFQ1QgKiBGUk9NIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xh cmdlaXNoJywKKwkJCUFSUkFZWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDUsIDQsIDMsIDIsIDEsIDBd KTsgLyk7CisJb2soMSwgIiRpb19tZXRob2Q6IHN0cmVhbSBhY2Nlc3Npbmcgc2FtZSBibG9jayIp OworCisJJHBzcWwtPnF1aXQoKTsKK30KKworCitzdWIgdGVzdF9pbmplY3RfZm9yZWlnbgorewor CW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlteSAkbm9kZSA9IHNoaWZ0OworCisJbXkgJHBzcWxf YSA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3Jfc3RvcCA9PiAw KTsKKwlteSAkcHNxbF9iID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9l cnJvcl9zdG9wID0+IDApOworCisJbXkgJHBpZF9hID0gJHBzcWxfYS0+cXVlcnlfc2FmZShxcS9T RUxFQ1QgcGdfYmFja2VuZF9waWQoKTsvKTsKKworCisJIyMjCisJIyBUZXN0IHJlYWQgc3RyZWFt IGVuY291bnRlcmluZyBidWZmZXJzIHVuZGVyZ29pbmcgSU8gaW4gYW5vdGhlciBiYWNrZW5kLAor CSMgd2l0aCB0aGUgb3RoZXIgYmFja2VuZCdzIHJlYWRzIHN1Y2NlZWRpbmcuCisJIyMjCisJJHBz cWxfYS0+cXVlcnlfc2FmZSgKKwkJcXEvIFNFTEVDVCBldmljdF9yZWwoJ2xhcmdlaXNoJyk7IC8p OworCisJJHBzcWxfYi0+cXVlcnlfc2FmZSgKKwkJcXEvIFNFTEVDVCBpbmpfaW9fY29tcGxldGlv bl93YWl0KHBpZD0+cGdfYmFja2VuZF9waWQoKSwKKwkJCXJlbGZpbGVub2RlPT5wZ19yZWxhdGlv bl9maWxlbm9kZSgnbGFyZ2Vpc2gnKSk7IC8pOworCisJJHBzcWxfYi0+e3N0ZGlufSAuPSBxcS8g U0VMRUNUIHJlYWRfcmVsX2Jsb2NrX2xsKCdsYXJnZWlzaCcsCisJCWJsb2Nrbm89PjUsIG5ibG9j a3M9PjEpO1xuLzsKKwkkcHNxbF9iLT57cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBvbGxf cXVlcnlfdW50aWwoCisJCSdwb3N0Z3JlcycsIHFxLyBTRUxFQ1Qgd2FpdF9ldmVudCBGUk9NIHBn X3N0YXRfYWN0aXZpdHkKKwkJCVdIRVJFIHdhaXRfZXZlbnQgPSAnY29tcGxldGlvbl93YWl0Jzsg LywKKwkJJ2NvbXBsZXRpb25fd2FpdCcpOworCisJIyBCbG9jayA1IGlzIHVuZGVyZ29pbmcgSU8g aW4gc2Vzc2lvbiBiLCBzbyBzZXNzaW9uIGEgd2lsbCBtb3ZlIG9uIHRvIHN0YXJ0CisJIyBhIG5l dyBJTyBmb3IgYmxvY2sgNy4KKwkkcHNxbF9hLT57c3RkaW59IC49IHFxLyBTRUxFQ1QgYXJyYXlf YWdnKGJsb2NrbnVtKSBGUk9NCisJCXJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNoJywg QVJSQVlbMCwgMiwgNSwgN10pO1xuLzsKKwkkcHNxbF9hLT57cnVufS0+cHVtcF9uYigpOworCisJ JG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJcXEoU0VMRUNUIHdhaXRfZXZl bnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHBpZCA9ICRwaWRfYSksCisJCSdBaW9Jb0Nv bXBsZXRpb24nKTsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEvU0VMRUNUIGlu al9pb19jb21wbGV0aW9uX2NvbnRpbnVlKCkvKTsKKworCXB1bXBfdW50aWwoCisJCSRwc3FsX2Et PntydW59LCAkcHNxbF9hLT57dGltZW91dH0sCisJCVwkcHNxbF9hLT57c3Rkb3V0fSwgcXIvXHsw LDIsNSw3XH0vKTsKKworCW9rKDEsIHFxLyRpb19tZXRob2Q6IHJlYWQgc3RyZWFtIGVuY291bnRl cnMgc3VjY2VlZGluZyBJTyBieSBhbm90aGVyIGJhY2tlbmQvKTsKKworCSMjIworCSMgVGVzdCBy ZWFkIHN0cmVhbSBlbmNvdW50ZXJpbmcgYnVmZmVycyB1bmRlcmdvaW5nIElPIGluIGFub3RoZXIg YmFja2VuZCwKKwkjIHdpdGggdGhlIG90aGVyIGJhY2tlbmQncyByZWFkcyBmYWlsaW5nLgorCSMj IworCSRwc3FsX2EtPnF1ZXJ5X3NhZmUoCisJCXFxLyBTRUxFQ1QgZXZpY3RfcmVsKCdsYXJnZWlz aCcpOyAvKTsKKworCSRwc3FsX2ItPnF1ZXJ5X3NhZmUoCisJCXFxLyBTRUxFQ1QgaW5qX2lvX2Nv bXBsZXRpb25fd2FpdChwaWQ9PnBnX2JhY2tlbmRfcGlkKCksCisJCQlyZWxmaWxlbm9kZT0+cGdf cmVsYXRpb25fZmlsZW5vZGUoJ2xhcmdlaXNoJykpOyAvKTsKKworCSRwc3FsX2ItPnF1ZXJ5X3Nh ZmUoCisJCXFxLyBTRUxFQ1QgaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKC1lcnJub19mcm9tX3N0 cmluZygnRUlPJyksCisJCQlwaWQ9PnBnX2JhY2tlbmRfcGlkKCksCisJCQlyZWxmaWxlbm9kZT0+ cGdfcmVsYXRpb25fZmlsZW5vZGUoJ2xhcmdlaXNoJykpOyAvKTsKKworCSRwc3FsX2ItPntzdGRp bn0gLj0gcXEvIFNFTEVDVCByZWFkX3JlbF9ibG9ja19sbCgnbGFyZ2Vpc2gnLAorCQlibG9ja25v PT41LCBuYmxvY2tzPT4xKTtcbi87CisJJHBzcWxfYi0+e3J1bn0tPnB1bXBfbmIoKTsKKworCSRu b2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJCXFxLyBTRUxFQ1Qgd2FpdF9ldmVu dCBGUk9NIHBnX3N0YXRfYWN0aXZpdHkKKwkJCVdIRVJFIHdhaXRfZXZlbnQgPSAnY29tcGxldGlv bl93YWl0JzsgLywKKwkJJ2NvbXBsZXRpb25fd2FpdCcpOworCisJJHBzcWxfYS0+e3N0ZGlufSAu PSBxcS8gU0VMRUNUIGFycmF5X2FnZyhibG9ja251bSkgRlJPTQorCQlyZWFkX3N0cmVhbV9mb3Jf YmxvY2tzKCdsYXJnZWlzaCcsIEFSUkFZWzAsIDIsIDUsIDddKTtcbi87CisJJHBzcWxfYS0+e3J1 bn0tPnB1bXBfbmIoKTsKKworCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJ CXFxKFNFTEVDVCB3YWl0X2V2ZW50IEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBwaWQgPSAk cGlkX2EpLAorCQknQWlvSW9Db21wbGV0aW9uJyk7CisKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxL1NFTEVDVCBpbmpfaW9fY29tcGxldGlvbl9jb250aW51ZSgpLyk7CisKKwlwdW1w X3VudGlsKAorCQkkcHNxbF9hLT57cnVufSwgJHBzcWxfYS0+e3RpbWVvdXR9LAorCQlcJHBzcWxf YS0+e3N0ZG91dH0sIHFyL1x7MCwyLDUsN1x9Lyk7CisKKwlwdW1wX3VudGlsKAorCQkkcHNxbF9i LT57cnVufSwgJHBzcWxfYi0+e3RpbWVvdXR9LAorCQlcJHBzcWxfYi0+e3N0ZGVycn0sIHFyL0VS Uk9SLipjb3VsZCBub3QgcmVhZCBibG9ja3MgNVwuXC41Lyk7CisJb2soMSwgIiRpb19tZXRob2Q6 IGluamVjdGVkIGVycm9yIG9jY3VycmVkIik7CisJJHBzcWxfYi0+e3N0ZGVycn0gPSAnJzsKKwkk cHNxbF9iLT5xdWVyeV9zYWZlKHFxL1NFTEVDVCBpbmpfaW9fc2hvcnRfcmVhZF9kZXRhY2goKTsv KTsKKworCW9rKDEsCisJCXFxLyRpb19tZXRob2Q6IHJlYWQgc3RyZWFtIGVuY291bnRlcnMgZmFp bGluZyBJTyBieSBhbm90aGVyIGJhY2tlbmQvKTsKKworCisJIyMjCisJIyBUZXN0IHJlYWQgc3Ry ZWFtIGVuY291bnRlcmluZyB0d28gYnVmZmVycyB0aGF0IGFyZSB1bmRlcmdvaW5nIHRoZSBzYW1l CisJIyBJTywgc3RhcnRlZCBieSBhbm90aGVyIGJhY2tlbmQuCisJIyMjCisJJHBzcWxfYS0+cXVl cnlfc2FmZSgKKwkJcXEvIFNFTEVDVCBldmljdF9yZWwoJ2xhcmdlaXNoJyk7IC8pOworCisJJHBz cWxfYi0+cXVlcnlfc2FmZSgKKwkJcXEvIFNFTEVDVCBpbmpfaW9fY29tcGxldGlvbl93YWl0KHBp ZD0+cGdfYmFja2VuZF9waWQoKSwKKwkJCXJlbGZpbGVub2RlPT5wZ19yZWxhdGlvbl9maWxlbm9k ZSgnbGFyZ2Vpc2gnKSk7IC8pOworCisJJHBzcWxfYi0+e3N0ZGlufSAuPSBxcS8gU0VMRUNUIHJl YWRfcmVsX2Jsb2NrX2xsKCdsYXJnZWlzaCcsCisJCWJsb2Nrbm89PjIsIG5ibG9ja3M9PjMpO1xu LzsKKwkkcHNxbF9iLT57cnVufS0+cHVtcF9uYigpOworCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50 aWwoJ3Bvc3RncmVzJywKKwkJcXEvIFNFTEVDVCB3YWl0X2V2ZW50IEZST00gcGdfc3RhdF9hY3Rp dml0eQorCQkJV0hFUkUgd2FpdF9ldmVudCA9ICdjb21wbGV0aW9uX3dhaXQnOyAvLAorCQknY29t cGxldGlvbl93YWl0Jyk7CisKKwkjIEJsb2NrcyAyIGFuZCA0IGFyZSB1bmRlcmdvaW5nIElPIGlu aXRpYXRlZCBieSBzZXNzaW9uIGEKKwkkcHNxbF9hLT57c3RkaW59IC49IHFxLyBTRUxFQ1QgYXJy YXlfYWdnKGJsb2NrbnVtKSBGUk9NCisJCXJlYWRfc3RyZWFtX2Zvcl9ibG9ja3MoJ2xhcmdlaXNo JywgQVJSQVlbMCwgMiwgNF0pO1xuLzsKKwkkcHNxbF9hLT57cnVufS0+cHVtcF9uYigpOworCisJ JG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkJcXEoU0VMRUNUIHdhaXRfZXZl bnQgRlJPTSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIHBpZCA9ICRwaWRfYSksCisJCSdBaW9Jb0Nv bXBsZXRpb24nKTsKKworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJcXEvIFNFTEVD VCBpbmpfaW9fY29tcGxldGlvbl9jb250aW51ZSgpIC8pOworCisJcHVtcF91bnRpbCgKKwkJJHBz cWxfYS0+e3J1bn0sICRwc3FsX2EtPnt0aW1lb3V0fSwKKwkJXCRwc3FsX2EtPntzdGRvdXR9LCBx ci9cezAsMiw0XH0vKTsKKworCW9rKDEsIHFxLyRpb19tZXRob2Q6IHJlYWQgc3RyZWFtIGVuY291 bnRlcnMgdHdvIGJ1ZmZlciByZWFkIGluIG9uZSBJTy8pOworCisJJHBzcWxfYS0+cXVpdCgpOwor CSRwc3FsX2ItPnF1aXQoKTsKK30KKworCitzdWIgdGVzdF9pb19tZXRob2QKK3sKKwlteSAkaW9f bWV0aG9kID0gc2hpZnQ7CisJbXkgJG5vZGUgPSBzaGlmdDsKKworCWlzKCRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ1NIT1cgaW9fbWV0aG9kJyksCisJCSRpb19tZXRob2QsICIkaW9fbWV0 aG9kOiBpb19tZXRob2Qgc2V0IGNvcnJlY3RseSIpOworCisJdGVzdF9yZXBlYXRlZF9ibG9ja3Mo JGlvX21ldGhvZCwgJG5vZGUpOworCisgIFNLSVA6CisJeworCQlza2lwICdJbmplY3Rpb24gcG9p bnRzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCcsIDEKKwkJICB1bmxlc3MgJEVOVntlbmFi bGVfaW5qZWN0aW9uX3BvaW50c30gZXEgJ3llcyc7CisJCXRlc3RfaW5qZWN0X2ZvcmVpZ24oJGlv X21ldGhvZCwgJG5vZGUpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3Rf YWlvLS0xLjAuc3FsCmluZGV4IGU0OTU0ODFjNDFlLi4xY2M0NzM0YTc0NiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X2Fpby0tMS4wLnNxbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCkBAIC0zMyw2ICszMywxMCBAQCBD UkVBVEUgRlVOQ1RJT04gcmVhZF9yZWxfYmxvY2tfbGwoCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9p ZCBTVFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CiAKK0NSRUFURSBGVU5D VElPTiBldmljdF9yZWwocmVsIHJlZ2NsYXNzKQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQgU1RS SUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCiBDUkVBVEUgRlVOQ1RJT04g aW52YWxpZGF0ZV9yZWxfYmxvY2socmVsIHJlZ2NsYXNzLCBibG9ja25vIGludCkKIFJFVFVSTlMg cGdfY2F0YWxvZy52b2lkIFNUUklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsK QEAgLTUwLDYgKzU0LDE0IEBAIFJFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAogQVMgJ01P RFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIAogCisvKgorICogUmVhZCBzdHJlYW0gcmVsYXRl ZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9OIHJlYWRfc3RyZWFtX2Zvcl9ibG9ja3Mo cmVsIHJlZ2NsYXNzLCBibG9ja3MgaW50NFtdLCBPVVQgYmxvY2tvZmYgaW50NCwgT1VUIGJsb2Nr bnVtIGludDQsIE9VVCBidWYgaW50NCkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkIFNUUklDVAorQVMg J01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworCiAKIC8qCiAgKiBIYW5kbGUgcmVsYXRl ZCBmdW5jdGlvbnMKQEAgLTkxLDggKzEwMywxNiBAQCBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5H VUFHRSBDOwogLyoKICAqIEluamVjdGlvbiBwb2ludCByZWxhdGVkIGZ1bmN0aW9ucwogICovCi1D UkVBVEUgRlVOQ1RJT04gaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNoKHJlc3VsdCBpbnQpCi1SRVRV Uk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJQ1QKK0NSRUFURSBGVU5DVElPTiBpbmpfaW9fY29tcGxl dGlvbl93YWl0KHBpZCBpbnQgREVGQVVMVCBOVUxMLCByZWxmaWxlbm9kZSBvaWQgREVGQVVMVCAw KQorUkVUVVJOUyBwZ19jYXRhbG9nLnZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CisKK0NSRUFURSBGVU5DVElPTiBpbmpfaW9fY29tcGxldGlvbl9jb250aW51ZSgpCitSRVRV Uk5TIHBnX2NhdGFsb2cudm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKwor Q1JFQVRFIEZVTkNUSU9OIGlual9pb19zaG9ydF9yZWFkX2F0dGFjaChyZXN1bHQgaW50LCBwaWQg aW50IERFRkFVTFQgTlVMTCwgcmVsZmlsZW5vZGUgb2lkIERFRkFVTFQgMCkKK1JFVFVSTlMgcGdf Y2F0YWxvZy52b2lkCiBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCiBDUkVBVEUg RlVOQ1RJT04gaW5qX2lvX3Nob3J0X3JlYWRfZGV0YWNoKCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8v dGVzdF9haW8uYwppbmRleCBiMWFhOGFmOWVjMC4uMDYxZjBjOWY5MmEgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8uYworKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3Rlc3RfYWlvLmMKQEAgLTE5LDE3ICsxOSwyNiBAQAogI2luY2x1ZGUgInBvc3Rn cmVzLmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKICNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvYWlvLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW9faW50ZXJuYWwuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW0uaCIKKyNpbmNsdWRlICJzdG9yYWdl L2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL3Byb2NudW1iZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgi CisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgog I2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5o IgorI2luY2x1ZGUgInV0aWxzL3R1cGxlc3RvcmUuaCIKKyNpbmNsdWRlICJ1dGlscy93YWl0X2V2 ZW50LmgiCiAKIAogUEdfTU9EVUxFX01BR0lDOwpAQCAtMzcsMTMgKzQ2LDMwIEBAIFBHX01PRFVM RV9NQUdJQzsKIAogdHlwZWRlZiBzdHJ1Y3QgSW5qSW9FcnJvclN0YXRlCiB7CisJQ29uZGl0aW9u VmFyaWFibGUgY3Y7CisKIAlib29sCQllbmFibGVkX3Nob3J0X3JlYWQ7CiAJYm9vbAkJZW5hYmxl ZF9yZW9wZW47CiAKKwlib29sCQllbmFibGVkX2NvbXBsZXRpb25fd2FpdDsKKwlPaWQJCQljb21w bGV0aW9uX3dhaXRfcmVsZmlsZW5vZGU7CisJcGlkX3QJCWNvbXBsZXRpb25fd2FpdF9waWQ7CisJ dWludDMyCQljb21wbGV0aW9uX3dhaXRfZXZlbnQ7CisKIAlib29sCQlzaG9ydF9yZWFkX3Jlc3Vs dF9zZXQ7CisJT2lkCQkJc2hvcnRfcmVhZF9yZWxmaWxlbm9kZTsKKwlwaWRfdAkJc2hvcnRfcmVh ZF9waWQ7CiAJaW50CQkJc2hvcnRfcmVhZF9yZXN1bHQ7CiB9IEluaklvRXJyb3JTdGF0ZTsKIAor dHlwZWRlZiBzdHJ1Y3QgQmxvY2tzUmVhZFN0cmVhbURhdGEKK3sKKwlpbnQJCQluYmxvY2tzOwor CWludAkJCWN1cmJsb2NrOworCXVpbnQzMgkgICAqYmxvY2tzOworfSBCbG9ja3NSZWFkU3RyZWFt RGF0YTsKKworCiBzdGF0aWMgSW5qSW9FcnJvclN0YXRlICppbmpfaW9fZXJyb3Jfc3RhdGU7CiAK IC8qIFNoYXJlZCBtZW1vcnkgaW5pdCBjYWxsYmFja3MgKi8KQEAgLTg1LDEwICsxMTEsMTMgQEAg dGVzdF9haW9fc2htZW1fc3RhcnR1cCh2b2lkKQogCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJs ZWRfc2hvcnRfcmVhZCA9IGZhbHNlOwogCQlpbmpfaW9fZXJyb3Jfc3RhdGUtPmVuYWJsZWRfcmVv cGVuID0gZmFsc2U7CiAKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZpbmpfaW9fZXJyb3Jfc3Rh dGUtPmN2KTsKKwkJaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRfZXZlbnQgPSBX YWl0RXZlbnRJbmplY3Rpb25Qb2ludE5ldygiY29tcGxldGlvbl93YWl0Iik7CisKICNpZmRlZiBV U0VfSU5KRUNUSU9OX1BPSU5UUwogCQlJbmplY3Rpb25Qb2ludEF0dGFjaCgiYWlvLXByb2Nlc3Mt Y29tcGxldGlvbi1iZWZvcmUtc2hhcmVkIiwKIAkJCQkJCQkgInRlc3RfYWlvIiwKLQkJCQkJCQkg Imlual9pb19zaG9ydF9yZWFkIiwKKwkJCQkJCQkgImlual9pb19jb21wbGV0aW9uX2hvb2siLAog CQkJCQkJCSBOVUxMLAogCQkJCQkJCSAwKTsKIAkJSW5qZWN0aW9uUG9pbnRMb2FkKCJhaW8tcHJv Y2Vzcy1jb21wbGV0aW9uLWJlZm9yZS1zaGFyZWQiKTsKQEAgLTM4NCw3ICs0MTMsNyBAQCByZWFk X3JlbF9ibG9ja19sbChQR19GVU5DVElPTl9BUkdTKQogCWlmIChuYmxvY2tzIDw9IDAgfHwgbmJs b2NrcyA+IFBHX0lPVl9NQVgpCiAJCWVsb2coRVJST1IsICJuYmxvY2tzIGlzIG91dCBvZiByYW5n ZSIpOwogCi0JcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAogCWZvciAo aW50IGkgPSAwOyBpIDwgbmJsb2NrczsgaSsrKQogCXsKQEAgLTQ1OCw2ICs0ODcsMjcgQEAgcmVh ZF9yZWxfYmxvY2tfbGwoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVk9JRCgpOwogfQog CitQR19GVU5DVElPTl9JTkZPX1YxKGV2aWN0X3JlbCk7CitEYXR1bQorZXZpY3RfcmVsKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRBUkdfT0lEKDApOworCVJlbGF0 aW9uCXJlbDsKKwlpbnQzMgkJYnVmZmVyc19ldmljdGVkLAorCQkJCWJ1ZmZlcnNfZmx1c2hlZCwK KwkJCQlidWZmZXJzX3NraXBwZWQ7CisKKwlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nl c3NFeGNsdXNpdmVMb2NrKTsKKworCUV2aWN0UmVsVW5waW5uZWRCdWZmZXJzKHJlbCwgJmJ1ZmZl cnNfZXZpY3RlZCwgJmJ1ZmZlcnNfZmx1c2hlZCwKKwkJCQkJCQkmYnVmZmVyc19za2lwcGVkKTsK KworCXJlbGF0aW9uX2Nsb3NlKHJlbCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKworCVBHX1JF VFVSTl9WT0lEKCk7Cit9CisKIFBHX0ZVTkNUSU9OX0lORk9fVjEoaW52YWxpZGF0ZV9yZWxfYmxv Y2spOwogRGF0dW0KIGludmFsaWRhdGVfcmVsX2Jsb2NrKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC02 MTAsNiArNjYwLDg2IEBAIGJ1ZmZlcl9jYWxsX3Rlcm1pbmF0ZV9pbyhQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAKKworc3RhdGljIEJsb2NrTnVtYmVyCityZWFkX3N0 cmVhbV9mb3JfYmxvY2tzX2NiKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgdm9pZCAqY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJ QmxvY2tzUmVhZFN0cmVhbURhdGEgKnN0cmVhbV9kYXRhID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRh OworCisJaWYgKHN0cmVhbV9kYXRhLT5jdXJibG9jayA+PSBzdHJlYW1fZGF0YS0+bmJsb2NrcykK KwkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwlyZXR1cm4gc3RyZWFtX2RhdGEtPmJsb2Nr c1tzdHJlYW1fZGF0YS0+Y3VyYmxvY2srK107Cit9CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVh ZF9zdHJlYW1fZm9yX2Jsb2Nrcyk7CitEYXR1bQorcmVhZF9zdHJlYW1fZm9yX2Jsb2NrcyhQR19G VU5DVElPTl9BUkdTKQoreworCU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlBcnJh eVR5cGUgICpibG9ja3NhcnJheSA9IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgxKTsKKwlSZXR1cm5T ZXRJbmZvICpyc2luZm8gPSAoUmV0dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJ UmVsYXRpb24JcmVsOworCUJsb2Nrc1JlYWRTdHJlYW1EYXRhIHN0cmVhbV9kYXRhOworCVJlYWRT dHJlYW0gKnN0cmVhbTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8q CisJICogV2UgZXhwZWN0IHRoZSBpbnB1dCB0byBiZSBhbiBOLWVsZW1lbnQgaW50NCBhcnJheTsg dmVyaWZ5IHRoYXQuIFdlCisJICogZG9uJ3QgbmVlZCB0byB1c2UgZGVjb25zdHJ1Y3RfYXJyYXko KSBzaW5jZSB0aGUgYXJyYXkgZGF0YSBpcyBqdXN0CisJICogZ29pbmcgdG8gbG9vayBsaWtlIGEg QyBhcnJheSBvZiBOIGludDQgdmFsdWVzLgorCSAqLworCWlmIChBUlJfTkRJTShibG9ja3NhcnJh eSkgIT0gMSB8fAorCQlBUlJfSEFTTlVMTChibG9ja3NhcnJheSkgfHwKKwkJQVJSX0VMRU1UWVBF KGJsb2Nrc2FycmF5KSAhPSBJTlQ0T0lEKQorCQllbG9nKEVSUk9SLCAiZXhwZWN0ZWQgMSBkaW1l bnNpb25hbCBpbnQ0IGFycmF5Iik7CisKKwlzdHJlYW1fZGF0YS5jdXJibG9jayA9IDA7CisJc3Ry ZWFtX2RhdGEubmJsb2NrcyA9IEFSUl9ESU1TKGJsb2Nrc2FycmF5KVswXTsKKwlzdHJlYW1fZGF0 YS5ibG9ja3MgPSAodWludDMyICopIEFSUl9EQVRBX1BUUihibG9ja3NhcnJheSk7CisKKwlyZWwg PSByZWxhdGlvbl9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJc3RyZWFtID0gcmVh ZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fRlVMTCwKKwkJCQkJCQkJCQlOVUxM LAorCQkJCQkJCQkJCXJlbCwKKwkJCQkJCQkJCQlNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJcmVh ZF9zdHJlYW1fZm9yX2Jsb2Nrc19jYiwKKwkJCQkJCQkJCQkmc3RyZWFtX2RhdGEsCisJCQkJCQkJ CQkJMCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHN0cmVhbV9kYXRhLm5ibG9ja3M7IGkrKykK Kwl7CisJCUJ1ZmZlcgkJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxM KTsKKwkJRGF0dW0JCXZhbHVlc1szXSA9IHswfTsKKwkJYm9vbAkJbnVsbHNbM10gPSB7MH07CisK KwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCQllbG9nKEVSUk9SLCAicmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoKSBjYWxsICVkIGlzIHVuZXhwZWN0ZWRseSBpbnZhbGlkIiwgaSk7CisKKwkJ dmFsdWVzWzBdID0gSW50MzJHZXREYXR1bShpKTsKKwkJdmFsdWVzWzFdID0gVUludDMyR2V0RGF0 dW0oc3RyZWFtX2RhdGEuYmxvY2tzW2ldKTsKKwkJdmFsdWVzWzJdID0gVUludDMyR2V0RGF0dW0o YnVmKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZv LT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKKworCQlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJfQor CisJaWYgKHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCkgIT0gSW52YWxpZEJ1 ZmZlcikKKwkJZWxvZyhFUlJPUiwgInJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgY2FsbCAlZCBp cyB1bmV4cGVjdGVkbHkgdmFsaWQiLAorCQkJIHN0cmVhbV9kYXRhLm5ibG9ja3MgKyAxKTsKKwor CXJlYWRfc3RyZWFtX2VuZChzdHJlYW0pOworCisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2sp OworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworCiBQR19GVU5DVElPTl9JTkZPX1YxKGhhbmRs ZV9nZXQpOwogRGF0dW0KIGhhbmRsZV9nZXQoUEdfRlVOQ1RJT05fQVJHUykKQEAgLTY4MCwxNSAr ODEwLDk4IEBAIGJhdGNoX2VuZChQR19GVU5DVElPTl9BUkdTKQogfQogCiAjaWZkZWYgVVNFX0lO SkVDVElPTl9QT0lOVFMKLWV4dGVybiBQR0RMTEVYUE9SVCB2b2lkIGlual9pb19zaG9ydF9yZWFk KGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCQkJCQkJICBjb25zdCB2b2lkICpwcml2YXRlX2RhdGEs Ci0JCQkJCQkJCQkJICB2b2lkICphcmcpOworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgaW5qX2lv X2NvbXBsZXRpb25faG9vayhjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJCQkJCQkgICBjb25zdCB2 b2lkICpwcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCSAgIHZvaWQgKmFyZyk7CiBleHRlcm4gUEdE TExFWFBPUlQgdm9pZCBpbmpfaW9fcmVvcGVuKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCQkJCQkg IGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwKIAkJCQkJCQkJCSAgdm9pZCAqYXJnKTsKIAotdm9p ZAotaW5qX2lvX3Nob3J0X3JlYWQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0 ZV9kYXRhLCB2b2lkICphcmcpCitzdGF0aWMgYm9vbAoraW5qX2lvX3Nob3J0X3JlYWRfbWF0Y2hl cyhQZ0Fpb0hhbmRsZSAqaW9oKQoreworCVBHUFJPQwkgICAqb3duZXJfcHJvYzsKKwlpbnQzMgkJ b3duZXJfcGlkOworCVBnQWlvVGFyZ2V0RGF0YSAqdGQ7CisKKwlpZiAoIWlual9pb19lcnJvcl9z dGF0ZS0+ZW5hYmxlZF9zaG9ydF9yZWFkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIWlual9p b19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZXN1bHRfc2V0KQorCQlyZXR1cm4gZmFsc2U7CisK Kwlvd25lcl9wcm9jID0gR2V0UEdQcm9jQnlOdW1iZXIocGdhaW9faW9fZ2V0X293bmVyKGlvaCkp OworCW93bmVyX3BpZCA9IG93bmVyX3Byb2MtPnBpZDsKKworCWlmIChpbmpfaW9fZXJyb3Jfc3Rh dGUtPnNob3J0X3JlYWRfcGlkICE9IDAgJiYKKwkJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9y ZWFkX3BpZCAhPSBvd25lcl9waWQpCisJCXJldHVybiBmYWxzZTsKKworCXRkID0gcGdhaW9faW9f Z2V0X3RhcmdldF9kYXRhKGlvaCk7CisKKwlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9y ZWFkX3JlbGZpbGVub2RlICE9IEludmFsaWRPaWQgJiYKKwkJdGQtPnNtZ3IucmxvY2F0b3IucmVs TnVtYmVyICE9IGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVhZF9yZWxmaWxlbm9kZSkKKwkJ cmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBPbmx5IHNob3J0ZW4gcmVhZHMgdGhhdCBhcmUgYWN0 dWFsbHkgbG9uZ2VyIHRoYW4gdGhlIHRhcmdldCBzaXplLAorCSAqIG90aGVyd2lzZSB3ZSBjYW4g dHJpZ2dlciBvdmVyLXJlYWRzLgorCSAqLworCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0 X3JlYWRfcmVzdWx0ID49IGlvaC0+cmVzdWx0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2lual9pb19jb21wbGV0aW9uX3dhaXRfbWF0Y2hlcyhQ Z0Fpb0hhbmRsZSAqaW9oKQoreworCVBHUFJPQwkgICAqb3duZXJfcHJvYzsKKwlpbnQzMgkJb3du ZXJfcGlkOworCVBnQWlvVGFyZ2V0RGF0YSAqdGQ7CisKKwlpZiAoIWlual9pb19lcnJvcl9zdGF0 ZS0+ZW5hYmxlZF9jb21wbGV0aW9uX3dhaXQpCisJCXJldHVybiBmYWxzZTsKKworCW93bmVyX3By b2MgPSBHZXRQR1Byb2NCeU51bWJlcihwZ2Fpb19pb19nZXRfb3duZXIoaW9oKSk7CisJb3duZXJf cGlkID0gb3duZXJfcHJvYy0+cGlkOworCisJaWYgKGlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxl dGlvbl93YWl0X3BpZCAhPSBvd25lcl9waWQpCisJCXJldHVybiBmYWxzZTsKKworCXRkID0gcGdh aW9faW9fZ2V0X3RhcmdldF9kYXRhKGlvaCk7CisKKwlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5j b21wbGV0aW9uX3dhaXRfcmVsZmlsZW5vZGUgIT0gSW52YWxpZE9pZCAmJgorCQl0ZC0+c21nci5y bG9jYXRvci5yZWxOdW1iZXIgIT0gaW5qX2lvX2Vycm9yX3N0YXRlLT5jb21wbGV0aW9uX3dhaXRf cmVsZmlsZW5vZGUpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZAoraW5qX2lvX2NvbXBsZXRpb25fd2FpdF9ob29rKGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgdm9pZCAqYXJnKQoreworCVBnQWlvSGFuZGxlICppb2gg PSAoUGdBaW9IYW5kbGUgKikgYXJnOworCisJaWYgKCFpbmpfaW9fY29tcGxldGlvbl93YWl0X21h dGNoZXMoaW9oKSkKKwkJcmV0dXJuOworCisJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVl cCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7CisKKwl3aGlsZSAodHJ1ZSkKKwl7CisJCWlmICgh aW5qX2lvX2NvbXBsZXRpb25fd2FpdF9tYXRjaGVzKGlvaCkpCisJCQlicmVhazsKKworCQlDb25k aXRpb25WYXJpYWJsZVNsZWVwKCZpbmpfaW9fZXJyb3Jfc3RhdGUtPmN2LAorCQkJCQkJCSAgIGlu al9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X2V2ZW50KTsKKwl9CisKKwlDb25kaXRp b25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbmpfaW9fc2hvcnRf cmVhZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwgdm9p ZCAqYXJnKQogewogCVBnQWlvSGFuZGxlICppb2ggPSAoUGdBaW9IYW5kbGUgKikgYXJnOwogCkBA IC02OTcsNTggKzkxMCw1NiBAQCBpbmpfaW9fc2hvcnRfcmVhZChjb25zdCBjaGFyICpuYW1lLCBj b25zdCB2b2lkICpwcml2YXRlX2RhdGEsIHZvaWQgKmFyZykKIAkJCQkgICBpbmpfaW9fZXJyb3Jf c3RhdGUtPmVuYWJsZWRfcmVvcGVuKSwKIAkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29u dGV4dCh0cnVlKSk7CiAKLQlpZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5lbmFibGVkX3Nob3J0X3Jl YWQpCisJaWYgKGlual9pb19zaG9ydF9yZWFkX21hdGNoZXMoaW9oKSkKIAl7CisJCXN0cnVjdCBp b3ZlYyAqaW92ID0gJnBnYWlvX2N0bC0+aW92ZWNzW2lvaC0+aW92ZWNfb2ZmXTsKKwkJaW50MzIJ CW9sZF9yZXN1bHQgPSBpb2gtPnJlc3VsdDsKKwkJaW50MzIJCW5ld19yZXN1bHQgPSBpbmpfaW9f ZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVzdWx0OworCQlpbnQzMgkJcHJvY2Vzc2VkID0gMDsK KworCQllcmVwb3J0KExPRywKKwkJCQllcnJtc2coInNob3J0IHJlYWQgaW5qZWN0IHBvaW50LCBj aGFuZ2luZyByZXN1bHQgZnJvbSAlZCB0byAlZCIsCisJCQkJCSAgIG9sZF9yZXN1bHQsIG5ld19y ZXN1bHQpLAorCQkJCWVycmhpZGVzdG10KHRydWUpLCBlcnJoaWRlY29udGV4dCh0cnVlKSk7CisK IAkJLyoKLQkJICogT25seSBzaG9ydGVuIHJlYWRzIHRoYXQgYXJlIGFjdHVhbGx5IGxvbmdlciB0 aGFuIHRoZSB0YXJnZXQgc2l6ZSwKLQkJICogb3RoZXJ3aXNlIHdlIGNhbiB0cmlnZ2VyIG92ZXIt cmVhZHMuCisJCSAqIFRoZSB1bmRlcmx5aW5nIElPIGFjdHVhbGx5IGNvbXBsZXRlZCBPSywgYW5k IHRodXMgdGhlICJpbnZhbGlkIgorCQkgKiBwb3J0aW9uIG9mIHRoZSBJT1YgYWN0dWFsbHkgY29u dGFpbnMgdmFsaWQgZGF0YS4gVGhhdCBjYW4gaGlkZSBhCisJCSAqIGxvdCBvZiBwcm9ibGVtcywg ZS5nLiBpZiB3ZSB3ZXJlIHRvIHdyb25nbHkgbWFyayBhIGJ1ZmZlciwgdGhhdAorCQkgKiB3YXNu J3QgcmVhZCBhY2NvcmRpbmcgdG8gdGhlIHNob3J0ZW5lZC1yZWFkLCBJTyBhcyB2YWxpZCwgdGhl CisJCSAqIGNvbnRlbnRzIHdvdWxkIGxvb2sgdmFsaWQgYW5kIHdlIG1pZ2h0IG1pc3MgYSBidWcu CisJCSAqCisJCSAqIFRvIGF2b2lkIHRoYXQsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSU9WIGFuZCB6 ZXJvIG91dCB0aGUgImZhaWxlZCIKKwkJICogcG9ydGlvbiBvZiB0aGUgSU8uCiAJCSAqLwotCQlp ZiAoaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3VsdF9zZXQKLQkJCSYmIGlvaC0+ b3AgPT0gUEdBSU9fT1BfUkVBRFYKLQkJCSYmIGlual9pb19lcnJvcl9zdGF0ZS0+c2hvcnRfcmVh ZF9yZXN1bHQgPD0gaW9oLT5yZXN1bHQpCisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW9oLT5vcF9k YXRhLnJlYWQuaW92X2xlbmd0aDsgaSsrKQogCQl7Ci0JCQlzdHJ1Y3QgaW92ZWMgKmlvdiA9ICZw Z2Fpb19jdGwtPmlvdmVjc1tpb2gtPmlvdmVjX29mZl07Ci0JCQlpbnQzMgkJb2xkX3Jlc3VsdCA9 IGlvaC0+cmVzdWx0OwotCQkJaW50MzIJCW5ld19yZXN1bHQgPSBpbmpfaW9fZXJyb3Jfc3RhdGUt PnNob3J0X3JlYWRfcmVzdWx0OwotCQkJaW50MzIJCXByb2Nlc3NlZCA9IDA7Ci0KLQkJCWVyZXBv cnQoTE9HLAotCQkJCQllcnJtc2coInNob3J0IHJlYWQgaW5qZWN0IHBvaW50LCBjaGFuZ2luZyBy ZXN1bHQgZnJvbSAlZCB0byAlZCIsCi0JCQkJCQkgICBvbGRfcmVzdWx0LCBuZXdfcmVzdWx0KSwK LQkJCQkJZXJyaGlkZXN0bXQodHJ1ZSksIGVycmhpZGVjb250ZXh0KHRydWUpKTsKLQotCQkJLyoK LQkJCSAqIFRoZSB1bmRlcmx5aW5nIElPIGFjdHVhbGx5IGNvbXBsZXRlZCBPSywgYW5kIHRodXMg dGhlICJpbnZhbGlkIgotCQkJICogcG9ydGlvbiBvZiB0aGUgSU9WIGFjdHVhbGx5IGNvbnRhaW5z IHZhbGlkIGRhdGEuIFRoYXQgY2FuIGhpZGUKLQkJCSAqIGEgbG90IG9mIHByb2JsZW1zLCBlLmcu IGlmIHdlIHdlcmUgdG8gd3JvbmdseSBtYXJrIGEgYnVmZmVyLAotCQkJICogdGhhdCB3YXNuJ3Qg cmVhZCBhY2NvcmRpbmcgdG8gdGhlIHNob3J0ZW5lZC1yZWFkLCBJTyBhcyB2YWxpZCwKLQkJCSAq IHRoZSBjb250ZW50cyB3b3VsZCBsb29rIHZhbGlkIGFuZCB3ZSBtaWdodCBtaXNzIGEgYnVnLgot CQkJICoKLQkJCSAqIFRvIGF2b2lkIHRoYXQsIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSU9WIGFuZCB6 ZXJvIG91dCB0aGUKLQkJCSAqICJmYWlsZWQiIHBvcnRpb24gb2YgdGhlIElPLgotCQkJICovCi0J CQlmb3IgKGludCBpID0gMDsgaSA8IGlvaC0+b3BfZGF0YS5yZWFkLmlvdl9sZW5ndGg7IGkrKykK KwkJCWlmIChwcm9jZXNzZWQgKyBpb3ZbaV0uaW92X2xlbiA8PSBuZXdfcmVzdWx0KQorCQkJCXBy b2Nlc3NlZCArPSBpb3ZbaV0uaW92X2xlbjsKKwkJCWVsc2UgaWYgKHByb2Nlc3NlZCA8PSBuZXdf cmVzdWx0KQogCQkJewotCQkJCWlmIChwcm9jZXNzZWQgKyBpb3ZbaV0uaW92X2xlbiA8PSBuZXdf cmVzdWx0KQotCQkJCQlwcm9jZXNzZWQgKz0gaW92W2ldLmlvdl9sZW47Ci0JCQkJZWxzZSBpZiAo cHJvY2Vzc2VkIDw9IG5ld19yZXN1bHQpCi0JCQkJewotCQkJCQl1aW50MzIJCW9rX3BhcnQgPSBu ZXdfcmVzdWx0IC0gcHJvY2Vzc2VkOwotCi0JCQkJCW1lbXNldCgoY2hhciAqKSBpb3ZbaV0uaW92 X2Jhc2UgKyBva19wYXJ0LCAwLCBpb3ZbaV0uaW92X2xlbiAtIG9rX3BhcnQpOwotCQkJCQlwcm9j ZXNzZWQgKz0gaW92W2ldLmlvdl9sZW47Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCW1l bXNldCgoY2hhciAqKSBpb3ZbaV0uaW92X2Jhc2UsIDAsIGlvdltpXS5pb3ZfbGVuKTsKLQkJCQl9 Ci0JCQl9CisJCQkJdWludDMyCQlva19wYXJ0ID0gbmV3X3Jlc3VsdCAtIHByb2Nlc3NlZDsKIAot CQkJaW9oLT5yZXN1bHQgPSBuZXdfcmVzdWx0OworCQkJCW1lbXNldCgoY2hhciAqKSBpb3ZbaV0u aW92X2Jhc2UgKyBva19wYXJ0LCAwLCBpb3ZbaV0uaW92X2xlbiAtIG9rX3BhcnQpOworCQkJCXBy b2Nlc3NlZCArPSBpb3ZbaV0uaW92X2xlbjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQltZW1z ZXQoKGNoYXIgKikgaW92W2ldLmlvdl9iYXNlLCAwLCBpb3ZbaV0uaW92X2xlbik7CisJCQl9CiAJ CX0KKworCQlpb2gtPnJlc3VsdCA9IG5ld19yZXN1bHQ7CiAJfQogfQogCit2b2lkCitpbmpfaW9f Y29tcGxldGlvbl9ob29rKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0 YSwgdm9pZCAqYXJnKQoreworCWlual9pb19jb21wbGV0aW9uX3dhaXRfaG9vayhuYW1lLCBwcml2 YXRlX2RhdGEsIGFyZyk7CisJaW5qX2lvX3Nob3J0X3JlYWRfaG9vayhuYW1lLCBwcml2YXRlX2Rh dGEsIGFyZyk7Cit9CisKIHZvaWQKIGlual9pb19yZW9wZW4oY29uc3QgY2hhciAqbmFtZSwgY29u c3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLCB2b2lkICphcmcpCiB7CkBAIC03NjIsNiArOTczLDM5IEBA IGlual9pb19yZW9wZW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRh LCB2b2lkICphcmcpCiB9CiAjZW5kaWYKIAorUEdfRlVOQ1RJT05fSU5GT19WMShpbmpfaW9fY29t cGxldGlvbl93YWl0KTsKK0RhdHVtCitpbmpfaW9fY29tcGxldGlvbl93YWl0KFBHX0ZVTkNUSU9O X0FSR1MpCit7CisjaWZkZWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKKwlpbmpfaW9fZXJyb3Jfc3Rh dGUtPmVuYWJsZWRfY29tcGxldGlvbl93YWl0ID0gdHJ1ZTsKKwlpbmpfaW9fZXJyb3Jfc3RhdGUt PmNvbXBsZXRpb25fd2FpdF9waWQgPQorCQlQR19BUkdJU05VTEwoMCkgPyAwIDogUEdfR0VUQVJH X0lOVDMyKDApOworCWlual9pb19lcnJvcl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X3JlbGZpbGVu b2RlID0KKwkJUEdfQVJHSVNOVUxMKDEpID8gSW52YWxpZE9pZCA6IFBHX0dFVEFSR19PSUQoMSk7 CisjZWxzZQorCWVsb2coRVJST1IsICJpbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQiKTsK KyNlbmRpZgorCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworUEdfRlVOQ1RJT05fSU5GT19WMShp bmpfaW9fY29tcGxldGlvbl9jb250aW51ZSk7CitEYXR1bQoraW5qX2lvX2NvbXBsZXRpb25fY29u dGludWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKyNpZmRlZiBVU0VfSU5KRUNUSU9OX1BPSU5UUwor CWlual9pb19lcnJvcl9zdGF0ZS0+ZW5hYmxlZF9jb21wbGV0aW9uX3dhaXQgPSBmYWxzZTsKKwlp bmpfaW9fZXJyb3Jfc3RhdGUtPmNvbXBsZXRpb25fd2FpdF9waWQgPSAwOworCWlual9pb19lcnJv cl9zdGF0ZS0+Y29tcGxldGlvbl93YWl0X3JlbGZpbGVub2RlID0gSW52YWxpZE9pZDsKKwlDb25k aXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmaW5qX2lvX2Vycm9yX3N0YXRlLT5jdik7CisjZWxzZQor CWVsb2coRVJST1IsICJpbmplY3Rpb24gcG9pbnRzIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgor CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwogUEdfRlVOQ1RJT05fSU5GT19WMShpbmpfaW9fc2hv cnRfcmVhZF9hdHRhY2gpOwogRGF0dW0KIGlual9pb19zaG9ydF9yZWFkX2F0dGFjaChQR19GVU5D VElPTl9BUkdTKQpAQCAtNzcxLDYgKzEwMTUsMTAgQEAgaW5qX2lvX3Nob3J0X3JlYWRfYXR0YWNo KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3Vs dF9zZXQgPSAhUEdfQVJHSVNOVUxMKDApOwogCWlmIChpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0 X3JlYWRfcmVzdWx0X3NldCkKIAkJaW5qX2lvX2Vycm9yX3N0YXRlLT5zaG9ydF9yZWFkX3Jlc3Vs dCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlpbmpfaW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRf cGlkID0KKwkJUEdfQVJHSVNOVUxMKDEpID8gMCA6IFBHX0dFVEFSR19JTlQzMigxKTsKKwlpbmpf aW9fZXJyb3Jfc3RhdGUtPnNob3J0X3JlYWRfcmVsZmlsZW5vZGUgPQorCQlQR19BUkdJU05VTEwo MikgPyAwIDogUEdfR0VUQVJHX09JRCgyKTsKICNlbHNlCiAJZWxvZyhFUlJPUiwgImluamVjdGlv biBwb2ludHMgbm90IHN1cHBvcnRlZCIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDUyZjg2MDNhN2JlLi45MDM2ZmVmMTI5YiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTMwNSw2ICszMDUsNyBAQCBCbG9ja1NhbXBsZXIKIEJsb2NrU2FtcGxlckRhdGEKIEJs b2NrZWRQcm9jRGF0YQogQmxvY2tlZFByb2NzRGF0YQorQmxvY2tzUmVhZFN0cmVhbURhdGEKIEJs b2NrdGFibGVFbnRyeQogQmxvb21CdWlsZFN0YXRlCiBCbG9vbUZpbHRlcgotLSAKMi40My4wCgo= --000000000000a4b370064d2b22e6 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0003-Fix-off-by-one-error-in-read-IO-tracing.patch" Content-Disposition: attachment; filename="v5-0003-Fix-off-by-one-error-in-read-IO-tracing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtposdo2 RnJvbSAxN2U4NWMzZGVhZjhiODgxNDVjZjRhMDk3NjNhZTE3ZjRmOWJkMjc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBNb24sIDE2IE1hciAyMDI2IDE2OjUwOjU2IC0wNDAwClN1YmplY3Q6IFtQ QVRDSCB2NSAzLzVdIEZpeCBvZmYtYnktb25lIGVycm9yIGluIHJlYWQgSU8gdHJhY2luZwoKLS0t CiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDIgKy0KIDEgZmlsZSBjaGFu Z2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv YnVmbWdyLmMKaW5kZXggMDBiYzYwOTUyOWEuLjA3MjNkNGYzZGQ4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2J1ZmZlci9idWZtZ3IuYwpAQCAtMTk5MCw3ICsxOTkwLDcgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ CSAqIG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4gUGluQnVmZmVyRm9yQmxvY2so KS4gVGhlIG90aGVyCiAJCSAqIGJhY2tlbmQgd2lsbCB0cmFjayB0aGlzIGFzIGEgJ3JlYWQnLgog CQkgKi8KLQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtudW0sIGJsb2Nr bnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUsCisJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIC0g MSwKIAkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNw Y09pZCwKIAkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9y LmRiT2lkLAogCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAotLSAKMi40My4wCgo= --000000000000a4b370064d2b22e6 Content-Type: text/x-patch; charset="US-ASCII"; name="v5-0004-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v5-0004-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtpouz03 RnJvbSA4NzVhNjc4YTk1Mzg2NWU2NTk2Yzc3OWY0NjhjNjY0OWQ2MDA2ZDU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2NSA0LzVdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNlcyBj b3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUgc2lu Y2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMgd2ls bCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpSZXZpZXdl ZC1ieTogTmF6aXIgQmlsYWwgWWF2dXogPGJ5YXZ1ejgxQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9mbGF0L3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzdu c2xzbmtqa2tieTRsYXFxYmZ3JTQwM3AzenU1MjJ5eWt2Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMgfCAxMTEgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDU1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggMDcyM2Q0ZjNkZDguLjM5OTAwNGMyZTQ0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMg aW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJ CQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wg QXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5i bG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQgQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBib29sIGlzX2NvbXBsZXRlKTsKKworc3Rh dGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQgQ291bnRCdWZmZXJIaXQoQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCisJCQkJCQkJCQkJCQkJICBSZWxhdGlvbiByZWwsIGNo YXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCQkJCQkJCQkJCSAgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSk7CiBzdGF0aWMgQnVmZmVyIEdldFZp Y3RpbUJ1ZmZlcihCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwgSU9Db250ZXh0IGlvX2Nv bnRleHQpOwogc3RhdGljIHZvaWQgRmx1c2hVbmxvY2tlZEJ1ZmZlcihCdWZmZXJEZXNjICpidWYs IFNNZ3JSZWxhdGlvbiByZWxuLAogCQkJCQkJCQlJT09iamVjdCBpb19vYmplY3QsIElPQ29udGV4 dCBpb19jb250ZXh0KTsKQEAgLTEyMjYsOCArMTIzMCw2IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJl bGF0aW9uIHJlbCwKIAkJCQkgIGJvb2wgKmZvdW5kUHRyKQogewogCUJ1ZmZlckRlc2MgKmJ1Zkhk cjsKLQlJT0NvbnRleHQJaW9fY29udGV4dDsKLQlJT09iamVjdAlpb19vYmplY3Q7CiAKIAlBc3Nl cnQoYmxvY2tOdW0gIT0gUF9ORVcpOwogCkBAIC0xMjM2LDE3ICsxMjM4LDYgQEAgUGluQnVmZmVy Rm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJcGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf UEVSTUFORU5UIHx8CiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCkp OwogCi0JaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQlpb19j b250ZXh0ID0gSU9DT05URVhUX05PUk1BTDsKLQkJaW9fb2JqZWN0ID0gSU9PQkpFQ1RfVEVNUF9S RUxBVElPTjsKLQl9Ci0JZWxzZQotCXsKLQkJaW9fY29udGV4dCA9IElPQ29udGV4dEZvclN0cmF0 ZWd5KHN0cmF0ZWd5KTsKLQkJaW9fb2JqZWN0ID0gSU9PQkpFQ1RfUkVMQVRJT047Ci0JfQotCiAJ VFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9TVEFSVChmb3JrTnVtLCBibG9ja051bSwKIAkJ CQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCiAJCQkJCQkJCQkg ICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCkBAIC0xMjU0LDE4ICsxMjQ1LDEx IEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCSAgIHNtZ3ItPnNt Z3JfcmxvY2F0b3IuYmFja2VuZCk7CiAKIAlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVO Q0VfVEVNUCkKLQl7CiAJCWJ1ZkhkciA9IExvY2FsQnVmZmVyQWxsb2Moc21nciwgZm9ya051bSwg YmxvY2tOdW0sIGZvdW5kUHRyKTsKLQkJaWYgKCpmb3VuZFB0cikKLQkJCXBnQnVmZmVyVXNhZ2Uu bG9jYWxfYmxrc19oaXQrKzsKLQl9CiAJZWxzZQotCXsKIAkJYnVmSGRyID0gQnVmZmVyQWxsb2Mo c21nciwgcGVyc2lzdGVuY2UsIGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCSBzdHJhdGVneSwg Zm91bmRQdHIsIGlvX2NvbnRleHQpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJVc2Fn ZS5zaGFyZWRfYmxrc19oaXQrKzsKLQl9CisJCQkJCQkJIHN0cmF0ZWd5LCBmb3VuZFB0ciwgSU9D b250ZXh0Rm9yU3RyYXRlZ3koc3RyYXRlZ3kpKTsKKwogCWlmIChyZWwpCiAJewogCQkvKgpAQCAt MTI3NCwyMiArMTI1OCwxMCBAQCBQaW5CdWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCSAq IHplcm9lZCBpbnN0ZWFkKSwgdGhlIHBlci1yZWxhdGlvbiBzdGF0cyBhbHdheXMgY291bnQgdGhl bS4KIAkJICovCiAJCXBnc3RhdF9jb3VudF9idWZmZXJfcmVhZChyZWwpOwotCQlpZiAoKmZvdW5k UHRyKQotCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQocmVsKTsKIAl9Ci0JaWYgKCpmb3VuZFB0 cikKLQl7Ci0JCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElPT1Bf SElULCAxLCAwKTsKLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5j ZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKIAotCQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFE X0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9y LmRiT2lkLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJl ciwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkg IHRydWUpOwotCX0KKwlpZiAoKmZvdW5kUHRyKQorCQlDb3VudEJ1ZmZlckhpdChzdHJhdGVneSwg cmVsLCBwZXJzaXN0ZW5jZSwgc21nciwgZm9ya051bSwgYmxvY2tOdW0pOwogCiAJcmV0dXJuIEJ1 ZmZlckRlc2NyaXB0b3JHZXRCdWZmZXIoYnVmSGRyKTsKIH0KQEAgLTE2OTUsNiArMTY2Nyw1MSBA QCBSZWFkQnVmZmVyc0NhblN0YXJ0SU8oQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJcmV0 dXJuIFJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoYnVmZmVyLCBub3dhaXQpOwogfQogCisvKgor ICogV2UgdHJhY2sgdmFyaW91cyBzdGF0cyByZWxhdGVkIHRvIGJ1ZmZlciBoaXRzLiBCZWNhdXNl IHRoaXMgaXMgZG9uZSBpbiBhCisgKiBmZXcgc2VwYXJhdGUgcGxhY2VzLCB0aGlzIGhlbHBlciBl eGlzdHMgZm9yIGNvbnZlbmllbmNlLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgdm9pZAorQ291bnRCdWZmZXJIaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ks CisJCQkgICBSZWxhdGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdy LAorCQkJICAgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkKK3sKKwlJ T0NvbnRleHQJaW9fY29udGV4dDsKKwlJT09iamVjdAlpb19vYmplY3Q7CisKKwlpZiAocGVyc2lz dGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCWlvX2NvbnRleHQgPSBJT0NPTlRF WFRfTk9STUFMOworCQlpb19vYmplY3QgPSBJT09CSkVDVF9URU1QX1JFTEFUSU9OOworCX0KKwll bHNlCisJeworCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9yU3RyYXRlZ3koc3RyYXRlZ3kpOwor CQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKKwl9CisKKwlUUkFDRV9QT1NUR1JFU1FM X0JVRkZFUl9SRUFEX0RPTkUoZm9ya251bSwKKwkJCQkJCQkJCSAgYmxvY2tudW0sCisJCQkJCQkJ CQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkgIHNtZ3It PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5i YWNrZW5kLAorCQkJCQkJCQkJICB0cnVlKTsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQorCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJZWxz ZQorCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOworCisJaWYgKHJlbCkKKwkJ cGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQocmVsKTsKKworCXBnc3RhdF9jb3VudF9pb19vcChpb19v YmplY3QsIGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKKworCWlmIChWYWN1dW1Db3N0QWN0 aXZlKQorCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKK30KKwogLyoK ICAqIEhlbHBlciBmb3IgV2FpdFJlYWRCdWZmZXJzKCkgdGhhdCBwcm9jZXNzZXMgdGhlIHJlc3Vs dHMgb2YgYSByZWFkdgogICogb3BlcmF0aW9uLCByYWlzaW5nIGFuIGVycm9yIGlmIG5lY2Vzc2Fy eS4KQEAgLTE5OTAsMjUgKzIwMDcsOSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3Bl cmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkJICogbXVzdCBoYXZl IHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBpbiBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIK IAkJICogYmFja2VuZCB3aWxsIHRyYWNrIHRoaXMgYXMgYSAncmVhZCcuCiAJCSAqLwotCQlUUkFD RV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya251bSwgYmxvY2tudW0gKyBvcGVyYXRp b24tPm5ibG9ja3NfZG9uZSAtIDEsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21nci0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+ c21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCSAgdHJ1ZSk7Ci0KLQkJaWYg KHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JCQlwZ0J1ZmZlclVzYWdlLmxv Y2FsX2Jsa3NfaGl0ICs9IDE7Ci0JCWVsc2UKLQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3Nf aGl0ICs9IDE7Ci0KLQkJaWYgKG9wZXJhdGlvbi0+cmVsKQotCQkJcGdzdGF0X2NvdW50X2J1ZmZl cl9oaXQob3BlcmF0aW9uLT5yZWwpOwotCi0JCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3Qs IGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKLQotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkK LQkJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQlDb3VudEJ1ZmZl ckhpdChvcGVyYXRpb24tPnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJ CQkJCSAgIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwKKwkJCQkJICAgYmxvY2tudW0gKyBvcGVy YXRpb24tPm5ibG9ja3NfZG9uZSAtIDEpOwogCX0KIAllbHNlCiAJewotLSAKMi40My4wCgo= --000000000000a4b370064d2b22e6 Content-Type: text/x-patch; charset="UTF-8"; name="v5-0005-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v5-0005-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtpoxs64 RnJvbSA0ZDczN2ZhMTRmMzMzYWJjNGVlNmFkZThjYjAzNDA1MzA2OTVlODg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2NSA1LzVdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlNRS1W ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRvIHN0 YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBpbiBw cm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRlCmJl Zm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2ggdGhl IGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxhdGVy IGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCByZWFk IHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBhbmQg aW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBjb25j dXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1ZXN0 IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBpdCBl bmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZlY3Rp dmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcgdGhl IGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNvcmQK dGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwgV2Fp dFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoKSW4g cmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFydGlu ZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tlbmQg aGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3JpcHRv cuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxkIGJl IGJyaWVmIGFuZCB1bmNvbW1vbi4KCkF1dGhvcjogTWVsYW5pZSBQbGFnZW1hbiA8bWVsYW5pZXBs YWdlbWFuQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFy YXplbC5kZT4KUmV2aWV3ZWQtYnk6IE5hemlyIEJpbGFsIFlhdnV6IDxieWF2dXo4MUBnbWFpbC5j b20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZmxhdC96bGplcmd3ZXF0aTd4Njds ZzVpamUycnpqdXNpZTM3bnNsc25ramtrYnk0bGFxcWJmdyU0MDNwM3p1NTIyeXlrdgotLS0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgNDkxICsrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAgIHwgICAyICsK IHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgIHwgICAxICsKIDMgZmlsZXMgY2hh bmdlZCwgMzMwIGluc2VydGlvbnMoKyksIDE2NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IDM5OTAwNGMyZTQ0Li4yMGMzNmNjZWFkMCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1 Y3QgU01nclNvcnRBcnJheQogCVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5Owog CisKKy8qCisgKiBJbiBBc3luY1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVy IGZvciByZWFkaW5nIGFuZCBzZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZl ciBtYXkgYWxyZWFkeSBoYXZlIEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29u dGFpbiB0aGUgZGVzaXJlZCBibG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vp c2gKKyAqIGJldHdlZW4gdGhlc2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQg aW5pdGlhdGUgSS9PKSBzbyBpdCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFz IGZvcmVpZ24gSS9PIHJhdGhlciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51 bSBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUs CisJUkVBRF9CVUZGRVJfSU5fUFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAor fSBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJ CXplcm9fZGFtYWdlZF9wYWdlcyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2Vz ID0gMTAwOwpAQCAtMTYyOCw0NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24o UmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRp ZgogfQogCi0vKiBoZWxwZXIgZm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCBy ZXBldGl0aW9uICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09u Y2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVm ZmVyKSkKLQkJcmV0dXJuIFN0YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0 b3IoLWJ1ZmZlciAtIDEpLAotCQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1 cm4gU3RhcnRCdWZmZXJJTyhHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBu b3dhaXQpOwotfQotCi0vKgotICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJp ZXMgdG8gZ2V0IHRoZSBidWZmZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJv b2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsK LQkvKgotCSAqIElmIHRoaXMgYmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVl ZCB0byBzdWJtaXQgdGhlIHBlbmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJp Z2h0IHRvIGlzc3VlIElPLCB0byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2Nr cyAoYW5kLCBtb3JlIGNvbW1vbmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tl bmRzKS4KLQkgKi8KLQlpZiAoIW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJ aWYgKFJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0 cnVlOwotCi0JCS8qCi0JCSAqIFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmlu ZyBmYWxzZSBkb2Vzbid0IGFsbG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1 ZmZlciBhbHJlYWR5IGJlaW5nIHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHBy b2dyZXNzLiBTaW5jZSBJTyBhbHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAq IHJhcmUsIHRoaXMgYXBwcm9hY2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9z dGFnZWQoKTsKLQl9Ci0KLQlyZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIs IG5vd2FpdCk7Ci19Ci0KIC8qCiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8g YnVmZmVyIGhpdHMuIEJlY2F1c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBw bGFjZXMsIHRoaXMgaGVscGVyIGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE1LDggKzE3 OTEsMTEgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24p CiAJCQkgKiBiKSByZXBvcnRzIHNvbWUgdGltZSBhcyB3YWl0aW5nLCBldmVuIGlmIHdlIG5ldmVy IHdhaXRlZAogCQkJICoKIAkJCSAqIHdlIGZpcnN0IGNoZWNrIGlmIHdlIGFscmVhZHkga25vdyB0 aGUgSU8gaXMgY29tcGxldGUuCisJCQkgKgorCQkJICogTm90ZSB0aGF0IG9wZXJhdGlvbi0+aW9f cmV0dXJuIGlzIHVuaW5pdGlhbGl6ZWQgZm9yIGZvcmVpZ24gSU8sCisJCQkgKiBzbyB3ZSBjYW5u b3QgY291bnQgdGhhdCB3YWl0IHRpbWUuCiAJCQkgKi8KLQkJCWlmIChhaW9fcmV0LT5yZXN1bHQu c3RhdHVzID09IFBHQUlPX1JTX1VOS05PV04gJiYKKwkJCWlmICgob3BlcmF0aW9uLT5mb3JlaWdu X2lvIHx8IGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9fUlNfVU5LTk9XTikgJiYKIAkJ CQkhcGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKQogCQkJewogCQkJ CWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRfcHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3Rp bWluZyk7CkBAIC0xODM1LDExICsxODE0LDMzIEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCUFzc2VydChwZ2Fpb193cmVmX2NoZWNrX2RvbmUo Jm9wZXJhdGlvbi0+aW9fd3JlZikpOwogCQkJfQogCi0JCQkvKgotCQkJICogV2Ugbm93IGFyZSBz dXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlzCi0JCQkgKiBpbmNs dWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJlIHdlcmUgYW55LgotCQkJICovCi0JCQlQ cm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCWlmICh1bmxpa2VseShvcGVy YXRpb24tPmZvcmVpZ25faW8pKQorCQkJeworCQkJCUJ1ZmZlcgkJYnVmZmVyID0gb3BlcmF0aW9u LT5idWZmZXJzW29wZXJhdGlvbi0+bmJsb2Nrc19kb25lXTsKKwkJCQlCdWZmZXJEZXNjICpkZXNj ID0gQnVmZmVySXNMb2NhbChidWZmZXIpID8KKwkJCQkJR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9y KC1idWZmZXIgLSAxKSA6CisJCQkJCUdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJ CQkJdWludDMyCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9wZXJhdGlvbi0+ bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8 PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCUNvdW50QnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksCisJCQkJCQkJCSAgIG9wZXJhdGlvbi0+cmVsLCBvcGVyYXRpb24tPnBlcnNpc3Rl bmNlLAorCQkJCQkJCQkgICBvcGVyYXRpb24tPnNtZ3IsIG9wZXJhdGlvbi0+Zm9ya251bSwKKwkJ CQkJCQkJICAgb3BlcmF0aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIC0g MSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2Ugbm93IGFy ZSBzdXJlIHRoZSBJTyBjb21wbGV0ZWQuIENoZWNrIHRoZSByZXN1bHRzLiBUaGlzCisJCQkJICog aW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVyZSB3ZXJlIGFueS4KKwkJCQkgKi8K KwkJCQlQcm9jZXNzUmVhZEJ1ZmZlcnNSZXN1bHQob3BlcmF0aW9uKTsKKwkJCX0KIAkJfQogCiAJ CS8qCkBAIC0xODcwLDYgKzE4NzEsMTYzIEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uKQogCS8qIE5COiBSRUFEX0RPTkUgdHJhY2Vwb2ludCB3YXMgYWxy ZWFkeSBleGVjdXRlZCBpbiBjb21wbGV0aW9uIGNhbGxiYWNrICovCiB9CiAKKy8qCisgKiBMb2Nh bCB2ZXJzaW9uIG9mIFByZXBhcmVOZXdSZWFkQnVmZmVySU8oKS4gSGVyZSBpbnN0ZWFkIG9mIGxv Y2FsYnVmLmMgdG8KKyAqIGF2b2lkIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGNhbGwuCisgKi8KK3N0 YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVOZXdMb2NhbFJlYWRCdWZmZXJJ TyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLAorCQkJCQkJCUJ1ZmZlciBidWZmZXIp Cit7CisJQnVmZmVyRGVzYyAqZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVy IC0gMSk7CisJdWludDY0CQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0 YXRlKTsKKworCS8qIEFscmVhZHkgdmFsaWQsIG5vIHdvcmsgdG8gZG8gKi8KKwlpZiAoYnVmX3N0 YXRlICYgQk1fVkFMSUQpCisJeworCQlwZ2Fpb193cmVmX2NsZWFyKCZvcGVyYXRpb24tPmlvX3dy ZWYpOworCQlyZXR1cm4gUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FOworCX0KKworCXBnYWlvX3N1 Ym1pdF9zdGFnZWQoKTsKKworCWlmIChwZ2Fpb193cmVmX3ZhbGlkKCZkZXNjLT5pb193cmVmKSkK Kwl7CisJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlvX3dyZWY7CisJCW9wZXJhdGlvbi0+ Zm9yZWlnbl9pbyA9IHRydWU7CisJCXJldHVybiBSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUzsKKwl9 CisKKwkvKgorCSAqIFdoaWxlIGl0IGlzIHBvc3NpYmxlIGZvciBhIGJ1ZmZlciB0byBoYXZlIGJl ZW4gcHJlcGFyZWQgZm9yIElPIGJ1dCBub3QKKwkgKiB5ZXQgaGFkIGl0cyB3YWl0IHJlZmVyZW5j ZSBzZXQsIHRoZXJlJ3Mgbm8gd2F5IGZvciB1cyB0byBrbm93IHRoYXQgZm9yCisJICogdGVtcG9y YXJ5IGJ1ZmZlcnMuIFRodXMsIHdlJ2xsIHByZXBhcmUgZm9yIG93biBJTyBvbiB0aGlzIGJ1ZmZl ci4KKwkgKi8KKwlyZXR1cm4gUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPOworfQorCisvKgorICog VHJ5IHRvIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCBidWZmZXIgaW4gYSBuZXcgcnVuIG9mIGJsb2Nr cy4gSWYgQUlPIGlzIGluCisgKiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9yIGFu b3RoZXIgYmFja2VuZCwgd2UganVzdCBhc3NvY2lhdGUgdGhlCisgKiB3YWl0IHJlZmVyZW5jZSB3 aXRoIHRoZSBvcGVyYXRpb24gYW5kIHdhaXQgaW4gV2FpdFJlYWRCdWZmZXJzKCkuIFRoaXMgdHVy bnMKKyAqIG91dCB0byBiZSBpbXBvcnRhbnQgZm9yIHBlcmZvcm1hbmNlIGluIHR3byB3b3JrbG9h ZHM6CisgKgorICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFkIHRoZSBzYW1lIGJs b2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbiB0aGUKKyAqICAgIHJlYWRhaGVhZCBkaXN0YW5jZS4g VGhpcyBjYW4gaGFwcGVuIGUuZy4gZm9yIHRoZSB0YWJsZSBhY2Nlc3NlcyBvZiBhbgorICogICAg aW5kZXggc2Nhbi4KKyAqCisgKiAyKSBDb25jdXJyZW50IHNjYW5zIGJ5IG11bHRpcGxlIGJhY2tl bmRzIG9uIHRoZSBzYW1lIHJlbGF0aW9uLgorICoKKyAqIElmIHdlIHdlcmUgdG8gc3luY2hyb25v dXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJlIGFibGUKKyAqIHRv IGtlZXAgZW5vdWdoIEkvTyBpbiBmbGlnaHQuCisgKgorICogSWYgd2UgZG8gZmluZCB0aGVyZSBp cyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEgMS1ibG9jaworICogUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gdGhhdCBXYWl0UmVhZEJ1ZmZlcnMgdGhlbiBjYW4gd2FpdCBvbi4K KyAqCisgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNrZW5kIGhhcyBzdGFydGVkIElP IG9uIHRoZSBidWZmZXIgYnV0IG5vdCB5ZXQKKyAqIHNldCBpdHMgd2FpdCByZWZlcmVuY2UuIElu IHRoaXMgY2FzZSwgd2UgaGF2ZSBubyBjaG9pY2UgYnV0IHRvIHdhaXQgZm9yCisgKiBlaXRoZXIg dGhlIHdhaXQgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIG9yIHRoZSBJTyB0byBiZSBkb25lLgorICov CitzdGF0aWMgUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCitQcmVwYXJlTmV3UmVhZEJ1ZmZlcklP KFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJCQkJCSAgIEJ1ZmZlciBidWZmZXIp Cit7CisJdWludDY0CQlidWZfc3RhdGU7CisJQnVmZmVyRGVzYyAqZGVzYzsKKworCWlmIChCdWZm ZXJJc0xvY2FsKGJ1ZmZlcikpCisJCXJldHVybiBQcmVwYXJlTmV3TG9jYWxSZWFkQnVmZmVySU8o b3BlcmF0aW9uLCBidWZmZXIpOworCisJUmVzb3VyY2VPd25lckVubGFyZ2UoQ3VycmVudFJlc291 cmNlT3duZXIpOworCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCisJ Zm9yICg7OykKKwl7CisJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7CisKKwkJLyogQWxy ZWFkeSB2YWxpZCwgbm8gd29yayB0byBkbyAqLworCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCXsKKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3dyZWZfY2xlYXIoJm9wZXJh dGlvbi0+aW9fd3JlZik7CisJCQlyZXR1cm4gUkVBRF9CVUZGRVJfQUxSRUFEWV9ET05FOworCQl9 CisKKwkJaWYgKGJ1Zl9zdGF0ZSAmIEJNX0lPX0lOX1BST0dSRVNTKQorCQl7CisJCQkvKiBKb2lu IGV4aXN0aW5nIHJlYWQgKi8KKwkJCWlmIChwZ2Fpb193cmVmX3ZhbGlkKCZkZXNjLT5pb193cmVm KSkKKwkJCXsKKwkJCQlvcGVyYXRpb24tPmlvX3dyZWYgPSBkZXNjLT5pb193cmVmOworCQkJCW9w ZXJhdGlvbi0+Zm9yZWlnbl9pbyA9IHRydWU7CisJCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJ CXJldHVybiBSRUFEX0JVRkZFUl9JTl9QUk9HUkVTUzsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElm IHRoZSB3YWl0IHJlZiBpcyBub3QgdmFsaWQgYnV0IHRoZSBJTyBpcyBpbiBwcm9ncmVzcywgc29t ZW9uZQorCQkJICogZWxzZSBzdGFydGVkIElPIGJ1dCBoYXNuJ3Qgc2V0IHRoZSB3YWl0IHJlZiB5 ZXQuIFdlIGhhdmUgbm8KKwkJCSAqIGNob2ljZSBidXQgdG8gd2FpdCB1bnRpbCB0aGUgSU8gY29t cGxldGVzLgorCQkJICovCisJCQlVbmxvY2tCdWZIZHIoZGVzYyk7CisJCQlwZ2Fpb19zdWJtaXRf c3RhZ2VkKCk7CisJCQlXYWl0SU8oZGVzYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJ CSAqIE5vIElPIGluIHByb2dyZXNzIGFuZCBub3QgYWxyZWFkeSB2YWxpZDsgV2Ugd2lsbCBzdGFy dCBJTy4gSXQncworCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBJTyB3YXMgaW4gcHJvZ3Jlc3MgYW5k IG5ldmVyIGJlY2FtZSB2YWxpZCBiZWNhdXNlCisJCSAqIHRoZSBJTyBlcnJvcmVkIG91dC4gV2Un bGwgZG8gdGhlIElPIG91cnNlbHZlcy4KKwkJICovCisJCVVubG9ja0J1ZkhkckV4dChkZXNjLCBi dWZfc3RhdGUsIEJNX0lPX0lOX1BST0dSRVNTLCAwLCAwKTsKKwkJUmVzb3VyY2VPd25lclJlbWVt YmVyQnVmZmVySU8oQ3VycmVudFJlc291cmNlT3duZXIsCisJCQkJCQkJCQkgIEJ1ZmZlckRlc2Ny aXB0b3JHZXRCdWZmZXIoZGVzYykpOworCisJCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1Jf SU87CisJfQorfQorCisKKy8qCisgKiBXaGVuIGJ1aWxkaW5nIGEgbmV3IElPIGZyb20gbXVsdGlw bGUgYnVmZmVycywgd2Ugd29uJ3QgaW5jbHVkZSBidWZmZXJzCisgKiB0aGF0IGFyZSBhbHJlYWR5 IHZhbGlkIG9yIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkg YmUKKyAqIHVzZWQgZm9yIGFkZGl0aW9uYWwgYWRqYWNlbnQgYnVmZmVycyBmb2xsb3dpbmcgdGhl IGhlYWQgYnVmZmVyIGluIGEgbmV3IElPLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVm ZmVyIHdhcyBzdWNjZXNzZnVsbHkgcHJlcGFyZWQgZm9yIElPIGFuZCBmYWxzZSBpZiBpdAorICog aXMgcmVqZWN0ZWQgYW5kIHRoZSByZWFkIElPIHNob3VsZCBub3QgaW5jbHVkZSB0aGlzIGJ1ZmZl ci4KKyAqLworc3RhdGljIGJvb2wKK1ByZXBhcmVBZGRpdGlvbmFsUmVhZEJ1ZmZlcihCdWZmZXIg YnVmZmVyKQoreworCXVpbnQ2NAkJYnVmX3N0YXRlOworCUJ1ZmZlckRlc2MgKmRlc2M7CisKKwlp ZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCXsKKwkJZGVzYyA9IEdldExvY2FsQnVmZmVyRGVz Y3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2NCgm ZGVzYy0+c3RhdGUpOworCQkvKiBMb2NhbCBidWZmZXJzIGRvbid0IHVzZSBCTV9JT19JTl9QUk9H UkVTUyAqLworCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQgfHwgcGdhaW9fd3JlZl92YWxpZCgm ZGVzYy0+aW9fd3JlZikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCVJlc291 cmNlT3duZXJFbmxhcmdlKEN1cnJlbnRSZXNvdXJjZU93bmVyKTsKKwkJZGVzYyA9IEdldEJ1ZmZl ckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoZGVzYyk7 CisJCWlmIChidWZfc3RhdGUgJiAoQk1fVkFMSUQgfCBCTV9JT19JTl9QUk9HUkVTUykpCisJCXsK KwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlVbmxvY2tC dWZIZHJFeHQoZGVzYywgYnVmX3N0YXRlLCBCTV9JT19JTl9QUk9HUkVTUywgMCwgMCk7CisJCVJl c291cmNlT3duZXJSZW1lbWJlckJ1ZmZlcklPKEN1cnJlbnRSZXNvdXJjZU93bmVyLCBidWZmZXIp OworCX0KKworCXJldHVybiB0cnVlOworfQorCiAvKgogICogSW5pdGlhdGUgSU8gZm9yIHRoZSBS ZWFkQnVmZmVyc09wZXJhdGlvbgogICoKQEAgLTE4ODUsNyArMjA0Myw4IEBAIFdhaXRSZWFkQnVm ZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogICogYWZmZWN0ZWQgYnkgdGhl IGNhbGwuIElmIHRoZSBmaXJzdCBidWZmZXIgaXMgdmFsaWQsICpuYmxvY2tzX3Byb2dyZXNzIGlz CiAgKiBzZXQgdG8gMSBhbmQgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgaXMgaW5jcmVtZW50ZWQu CiAgKgotICogUmV0dXJucyB0cnVlIGlmIElPIHdhcyBpbml0aWF0ZWQsIGZhbHNlIGlmIG5vIElP IHdhcyBuZWNlc3NhcnkuCisgKiBSZXR1cm5zIHRydWUgaWYgSU8gd2FzIGluaXRpYXRlZCBvciBp cyBhbHJlYWR5IGluIHByb2dyZXNzIChmb3JlaWduIElPKSwKKyAqIGZhbHNlIGlmIHRoZSBidWZm ZXIgd2FzIGFscmVhZHkgdmFsaWQuCiAgKi8KIHN0YXRpYyBib29sCiBBc3luY1JlYWRCdWZmZXJz KFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykK QEAgLTE5MDMsNyArMjA2Miw3NSBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0 aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAl2b2lkCSAgICppb19wYWdl c1tNQVhfSU9fQ09NQklORV9MSU1JVF07CiAJSU9Db250ZXh0CWlvX2NvbnRleHQ7CiAJSU9PYmpl Y3QJaW9fb2JqZWN0OwotCWJvb2wJCWRpZF9zdGFydF9pbzsKKwlpbnN0cl90aW1lCWlvX3N0YXJ0 OworCVByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cyBzdGF0dXM7CisKKwkvKgorCSAqIFdlIG11c3Qg Z2V0IGFuIElPIGhhbmRsZSBiZWZvcmUgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygpLCBhcworCSAq IHBnYWlvX2lvX2FjcXVpcmUoKSBtaWdodCBibG9jaywgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhZnRl ciBzZXR0aW5nCisJICogSU9fSU5fUFJPR1JFU1MuIElmIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhl IElPLCB3ZSdsbCByZWxlYXNlIHRoZQorCSAqIGhhbmRsZS4KKwkgKgorCSAqIElmIHdlIG5lZWQg dG8gd2FpdCBmb3IgSU8gYmVmb3JlIHdlIGNhbiBnZXQgYSBoYW5kbGUsIHN1Ym1pdAorCSAqIGFs cmVhZHktc3RhZ2VkIElPIGZpcnN0LCBzbyB0aGF0IG90aGVyIGJhY2tlbmRzIGRvbid0IG5lZWQg dG8gd2FpdC4KKwkgKiBUaGVyZSB3b3VsZG4ndCBiZSBhIGRlYWRsb2NrIHJpc2ssIGFzIHBnYWlv X2lvX2FjcXVpcmUoKSBqdXN0IG5lZWRzIHRvCisJICogd2FpdCBmb3IgYWxyZWFkeSBzdWJtaXR0 ZWQgSU8sIHdoaWNoIGRvZXNuJ3QgcmVxdWlyZSBhZGRpdGlvbmFsIGxvY2tzLAorCSAqIGJ1dCBp dCBjb3VsZCBzdGlsbCBjYXVzZSB1bmRlc2lyYWJsZSB3YWl0cy4KKwkgKgorCSAqIEEgc2Vjb25k YXJ5IGJlbmVmaXQgaXMgdGhhdCB0aGlzIHdvdWxkIGFsbG93IHVzIHRvIG1lYXN1cmUgdGhlIHRp bWUgaW4KKwkgKiBwZ2Fpb19pb19hY3F1aXJlKCkgd2l0aG91dCBjYXVzaW5nIHVuZHVlIHRpbWVy IG92ZXJoZWFkIGluIHRoZSBjb21tb24sCisJICogbm9uLWJsb2NraW5nLCBjYXNlLiAgSG93ZXZl ciwgY3VycmVudGx5IHRoZSBwZ3N0YXRzIGluZnJhc3RydWN0dXJlCisJICogZG9lc24ndCByZWFs bHkgYWxsb3cgdGhhdCwgYXMgaXQgYSkgYXNzZXJ0cyB0aGF0IGFuIG9wZXJhdGlvbiBjYW4ndAor CSAqIGhhdmUgdGltZSB3aXRob3V0IG9wZXJhdGlvbnMgYikgZG9lc24ndCBoYXZlIGFuIEFQSSB0 byByZXBvcnQKKwkgKiAiYWNjdW11bGF0ZWQiIHRpbWUuCisJICovCisJaW9oID0gcGdhaW9faW9f YWNxdWlyZV9uYihDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJhdGlvbi0+aW9fcmV0dXJuKTsK KwlpZiAodW5saWtlbHkoIWlvaCkpCisJeworCQlwZ2Fpb19zdWJtaXRfc3RhZ2VkKCk7CisJCWlv aCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3VycmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlv X3JldHVybik7CisJfQorCisJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKKwkvKiBD aGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQgYnVmZmVyICov CisJaWYgKChzdGF0dXMgPSBQcmVwYXJlTmV3UmVhZEJ1ZmZlcklPKG9wZXJhdGlvbiwgYnVmZmVy c1tuYmxvY2tzX2RvbmVdKSkgPAorCQlSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8pCisJeworCQlw Z2Fpb19pb19yZWxlYXNlKGlvaCk7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0gMTsKKwkJaWYgKHN0 YXR1cyA9PSBSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUpCisJCXsKKwkJCS8qCisJCQkgKiBTb21l b25lIGVsc2UgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoaXMgYmxvY2ssIHdlJ3JlIGRvbmUuCisJ CQkgKgorCQkJICogV2hlbiBJTyBpcyBuZWNlc3NhcnksIC0+bmJsb2Nrc19kb25lIGlzIHVwZGF0 ZWQgaW4KKwkJCSAqIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdCgpLCBidXQgdGhhdCBpcyBub3Qg Y2FsbGVkIGlmIG5vIElPIGlzCisJCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCisJ CQkgKi8KKwkJCW9wZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQlBc3NlcnQob3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJLyoKKwkJCSAq IFJlcG9ydCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4g dGhvdWdoCisJCQkgKiBpdCBtdXN0IGhhdmUgc3RhcnRlZCBvdXQgYXMgYSBtaXNzIGluIFBpbkJ1 ZmZlckZvckJsb2NrKCkuIFRoZQorCQkJICogb3RoZXIgYmFja2VuZCB3aWxsIHRyYWNrIHRoaXMg YXMgYSAncmVhZCcuCisJCQkgKi8KKwkJCUNvdW50QnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRl Z3ksCisJCQkJCQkgICBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSwKKwkJ CQkJCSAgIG9wZXJhdGlvbi0+c21nciwgb3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJICAgb3Bl cmF0aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lIC0gMSk7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAqLwor CQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tSZWFk QnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJfQor CisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyICovCisJQXNzZXJ0 KHN0YXR1cyA9PSBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU8pOwogCiAJLyoKIAkgKiBXaGVuIHRo aXMgSU8gaXMgZXhlY3V0ZWQgc3luY2hyb25vdXNseSwgZWl0aGVyIGJlY2F1c2UgdGhlIGNhbGxl ciB3aWxsCkBAIC0xOTU0LDEzOCArMjE4MSw3NCBAQCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZm ZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcykKIAkgKi8KIAlw Z3N0YXRfcHJlcGFyZV9yZXBvcnRfY2hlY2tzdW1fZmFpbHVyZShvcGVyYXRpb24tPnNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCk7CiAKLQkvKgotCSAqIEdldCBJTyBoYW5kbGUgYmVm b3JlIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkKLQkgKiBt aWdodCBibG9jaywgd2hpY2ggd2UgZG9uJ3Qgd2FudCBhZnRlciBzZXR0aW5nIElPX0lOX1BST0dS RVNTLgotCSAqCi0JICogSWYgd2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdl dCBhIGhhbmRsZSwgc3VibWl0Ci0JICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQg b3RoZXIgYmFja2VuZHMgZG9uJ3QgbmVlZCB0byB3YWl0LgotCSAqIFRoZXJlIHdvdWxkbid0IGJl IGEgZGVhZGxvY2sgcmlzaywgYXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KLQkg KiB3YWl0IGZvciBhbHJlYWR5IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFk ZGl0aW9uYWwgbG9ja3MsCi0JICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxl IHdhaXRzLgotCSAqCi0JICogQSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQg YWxsb3cgdXMgdG8gbWVhc3VyZSB0aGUgdGltZSBpbgotCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3 aXRob3V0IGNhdXNpbmcgdW5kdWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKLQkgKiBu b24tYmxvY2tpbmcsIGNhc2UuICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFz dHJ1Y3R1cmUKLQkgKiBkb2Vzbid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRz IHRoYXQgYW4gb3BlcmF0aW9uIGNhbid0Ci0JICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9u cyBiKSBkb2Vzbid0IGhhdmUgYW4gQVBJIHRvIHJlcG9ydAotCSAqICJhY2N1bXVsYXRlZCIgdGlt ZS4KLQkgKi8KLQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVy LCAmb3BlcmF0aW9uLT5pb19yZXR1cm4pOwotCWlmICh1bmxpa2VseSghaW9oKSkKLQl7Ci0JCXBn YWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQotCQlpb2ggPSBwZ2Fpb19pb19hY3F1aXJlKEN1cnJlbnRS ZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19yZXR1cm4pOwotCX0KKwlBc3NlcnQoaW9fYnVm ZmVyc1swXSA9PSBidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX3BhZ2VzWzBdID0gQnVmZmVy R2V0QmxvY2soYnVmZmVyc1tuYmxvY2tzX2RvbmVdKTsKKwlpb19idWZmZXJzX2xlbiA9IDE7CiAK IAkvKgotCSAqIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVh ZCBidWZmZXIuCi0JICoKLQkgKiBJZiBhbiBJL08gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBpbiBh bm90aGVyIGJhY2tlbmQsIHdlIHdhbnQgdG8gd2FpdAotCSAqIGZvciB0aGUgb3V0Y29tZTogZWl0 aGVyIGRvbmUsIG9yIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3aWxsCi0JICogcmV0cnku CisJICogSG93IG1hbnkgbmVpZ2hib3Jpbmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXIt cmVhZCBpbnRvIG90aGVyCisJICogYnVmZmVycyBhdCB0aGUgc2FtZSB0aW1lPyAgSW4gdGhpcyBj YXNlIHdlIGRvbid0IHdhaXQgaWYgd2Ugc2VlIGFuIEkvTworCSAqIGFscmVhZHkgaW4gcHJvZ3Jl c3MuICBXZSBhbHJlYWR5IHNldCBCTV9JT19JTl9QUk9HUkVTUyBmb3IgdGhlIGhlYWQKKwkgKiBi bG9jaywgc28gd2Ugc2hvdWxkIGdldCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2li bGUuCiAJICovCi0JaWYgKCFSZWFkQnVmZmVyc0NhblN0YXJ0SU8oYnVmZmVyc1tuYmxvY2tzX2Rv bmVdLCBmYWxzZSkpCisJZm9yIChpbnQgaSA9IG5ibG9ja3NfZG9uZSArIDE7IGkgPCBvcGVyYXRp b24tPm5ibG9ja3M7IGkrKykKIAl7Ci0JCS8qCi0JCSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFk eSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUgZG9uZS4KLQkJICoKLQkJICogV2hlbiBJTyBp cyBuZWNlc3NhcnksIC0+bmJsb2Nrc19kb25lIGlzIHVwZGF0ZWQgaW4KLQkJICogUHJvY2Vzc1Jl YWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKLQkJ ICogbmVjZXNzYXJ5LiBUaHVzIHVwZGF0ZSBoZXJlLgotCQkgKi8KLQkJb3BlcmF0aW9uLT5uYmxv Y2tzX2RvbmUgKz0gMTsKLQkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwotCi0JCXBnYWlvX2lvX3Jl bGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJ ZGlkX3N0YXJ0X2lvID0gZmFsc2U7CisJCWlmICghUHJlcGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVy KGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sg bnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFd KSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNz ZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOwogCi0JCS8qCi0J CSAqIFJlcG9ydCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2 ZW4gdGhvdWdoIGl0Ci0JCSAqIG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4gUGlu QnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyCi0JCSAqIGJhY2tlbmQgd2lsbCB0cmFjayB0aGlz IGFzIGEgJ3JlYWQnLgotCQkgKi8KLQkJQ291bnRCdWZmZXJIaXQob3BlcmF0aW9uLT5zdHJhdGVn eSwgb3BlcmF0aW9uLT5yZWwsIHBlcnNpc3RlbmNlLAotCQkJCQkgICBvcGVyYXRpb24tPnNtZ3Is IGZvcmtudW0sCi0JCQkJCSAgIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgLSAx KTsKKwkJaW9fcGFnZXNbaW9fYnVmZmVyc19sZW4rK10gPSBCdWZmZXJHZXRCbG9jayhidWZmZXJz W2ldKTsKIAl9Ci0JZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKLQotCQkvKiBXZSBm b3VuZCBhIGJ1ZmZlciB0aGF0IHdlIG5lZWQgdG8gcmVhZCBpbi4gKi8KLQkJQXNzZXJ0KGlvX2J1 ZmZlcnNbMF0gPT0gYnVmZmVyc1tuYmxvY2tzX2RvbmVdKTsKLQkJaW9fcGFnZXNbMF0gPSBCdWZm ZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19idWZmZXJzX2xlbiA9IDE7 Ci0KLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jpbmctb24tZGlzayBibG9ja3MgY2FuIHdl IHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8g IEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdlIHNlZSBhbgotCQkgKiBJL08gYWxyZWFk eSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUK LQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdldCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNv b24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsg aSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQlicmVhazsKLQkJCS8qIE11c3QgYmUgY29u c2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJl cihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJz W2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09IGJ1ZmZl cnNbaV0pOwogCi0JCQlpb19wYWdlc1tpb19idWZmZXJzX2xlbisrXSA9IEJ1ZmZlckdldEJsb2Nr KGJ1ZmZlcnNbaV0pOwotCQl9CisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdh aXRSZWFkQnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5p b193cmVmKTsKIAotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBmb3IgaW4gV2FpdFJlYWRC dWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKwkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8gdGhlIGNvbXBsZXRpb24gY2Fs bGJhY2tzICovCisJcGdhaW9faW9fc2V0X2hhbmRsZV9kYXRhXzMyKGlvaCwgKHVpbnQzMiAqKSBp b19idWZmZXJzLCBpb19idWZmZXJzX2xlbik7CiAKLQkJLyogcHJvdmlkZSB0aGUgbGlzdCBvZiBi dWZmZXJzIHRvIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrcyAqLwotCQlwZ2Fpb19pb19zZXRfaGFu ZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICopIGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsK KwlwZ2Fpb19pb19yZWdpc3Rlcl9jYWxsYmFja3MoaW9oLAorCQkJCQkJCQlwZXJzaXN0ZW5jZSA9 PSBSRUxQRVJTSVNURU5DRV9URU1QID8KKwkJCQkJCQkJUEdBSU9fSENCX0xPQ0FMX0JVRkZFUl9S RUFEViA6CisJCQkJCQkJCVBHQUlPX0hDQl9TSEFSRURfQlVGRkVSX1JFQURWLAorCQkJCQkJCQlm bGFncyk7CiAKLQkJcGdhaW9faW9fcmVnaXN0ZXJfY2FsbGJhY2tzKGlvaCwKLQkJCQkJCQkJCXBl cnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwotCQkJCQkJCQkJUEdBSU9fSENCX0xP Q0FMX0JVRkZFUl9SRUFEViA6Ci0JCQkJCQkJCQlQR0FJT19IQ0JfU0hBUkVEX0JVRkZFUl9SRUFE ViwKLQkJCQkJCQkJCWZsYWdzKTsKKwlwZ2Fpb19pb19zZXRfZmxhZyhpb2gsIGlvaF9mbGFncyk7 CiAKLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOworCS8qIC0tLQorCSAqIEV2 ZW4gdGhvdWdoIHdlJ3JlIHRyeWluZyB0byBpc3N1ZSBJTyBhc3luY2hyb25vdXNseSwgdHJhY2sg dGhlIHRpbWUKKwkgKiBpbiBzbWdyc3RhcnRyZWFkdigpOgorCSAqIC0gaWYgaW9fbWV0aG9kID09 IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJICogICBpbW1l ZGlhdGVseQorCSAqIC0gdGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9ydCB0aGUgSU8gKGUu Zy4gd29ya2VyIElPIGZvciBhIHRlbXAKKwkgKiAgIHRhYmxlKQorCSAqIC0tLQorCSAqLworCWlv X3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOworCXNtZ3Jz dGFydHJlYWR2KGlvaCwgb3BlcmF0aW9uLT5zbWdyLCBmb3JrbnVtLAorCQkJCSAgIGJsb2NrbnVt ICsgbmJsb2Nrc19kb25lLAorCQkJCSAgIGlvX3BhZ2VzLCBpb19idWZmZXJzX2xlbik7CisJcGdz dGF0X2NvdW50X2lvX29wX3RpbWUoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09QX1JFQUQsCisJ CQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICogQkxDS1NaKTsKIAotCQkvKiAtLS0K LQkJICogRXZlbiB0aG91Z2ggd2UncmUgdHJ5aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5 LCB0cmFjayB0aGUgdGltZQotCQkgKiBpbiBzbWdyc3RhcnRyZWFkdigpOgotCQkgKiAtIGlmIGlv X21ldGhvZCA9PSBJT01FVEhPRF9TWU5DLCB3ZSB3aWxsIGFsd2F5cyBwZXJmb3JtIHRoZSBJTwot CQkgKiAgIGltbWVkaWF0ZWx5Ci0JCSAqIC0gdGhlIGlvIG1ldGhvZCBtaWdodCBub3Qgc3VwcG9y dCB0aGUgSU8gKGUuZy4gd29ya2VyIElPIGZvciBhIHRlbXAKLQkJICogICB0YWJsZSkKLQkJICog LS0tCi0JCSAqLwotCQlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9f dGltaW5nKTsKLQkJc21ncnN0YXJ0cmVhZHYoaW9oLCBvcGVyYXRpb24tPnNtZ3IsIGZvcmtudW0s Ci0JCQkJCSAgIGJsb2NrbnVtICsgbmJsb2Nrc19kb25lLAotCQkJCQkgICBpb19wYWdlcywgaW9f YnVmZmVyc19sZW4pOwotCQlwZ3N0YXRfY291bnRfaW9fb3BfdGltZShpb19vYmplY3QsIGlvX2Nv bnRleHQsIElPT1BfUkVBRCwKLQkJCQkJCQkJaW9fc3RhcnQsIDEsIGlvX2J1ZmZlcnNfbGVuICog QkxDS1NaKTsKLQotCQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQkJ CXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwotCQllbHNl Ci0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47CisJ aWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXBnQnVmZmVyVXNhZ2Uu bG9jYWxfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOworCWVsc2UKKwkJcGdCdWZmZXJVc2Fn ZS5zaGFyZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qCi0JCSAqIFRyYWNr IHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0Lgot CQkgKiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwIGlzc3VpbmcgYSBsb3Qgb2YgSU8gaW4gYSBz aG9ydCB0aW1lc3BhbiwKLQkJICogZGVzcGl0ZSBhIGxvdyBjb3N0IGxpbWl0LgotCQkgKi8KLQkJ aWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0 UGFnZU1pc3MgKiBpb19idWZmZXJzX2xlbjsKKwkvKgorCSAqIFRyYWNrIHZhY3V1bSBjb3N0IHdo ZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0LiBPdGhlcndpc2UKKwkgKiB3 ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBhIHNob3J0IHRpbWVzcGFuLCBk ZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlpZiAoVmFjdXVtQ29zdEFjdGl2 ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVy c19sZW47CiAKLQkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0 YXJ0X2lvID0gdHJ1ZTsKLQl9CisJKm5ibG9ja3NfcHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsK IAotCXJldHVybiBkaWRfc3RhcnRfaW87CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZtZ3IuaAppbmRleCA0MDE3ODk2Zjk1MS4uZjg1YTlhY2M2YWMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aApAQCAtMTQ3LDYgKzE0Nyw4IEBAIHN0cnVjdCBSZWFkQnVmZmVyc09wZXJhdGlvbgogCWludAkJ CWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQluYmxvY2tzX2RvbmU7CisJLyogdHJ1 ZSBpZiB3YWl0aW5nIG9uIGFub3RoZXIgYmFja2VuZCdzIElPICovCisJYm9vbAkJZm9yZWlnbl9p bzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsKIAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9Owpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5MDM2ZmVmMTI5Yi4uOTIyMzA5OTQ2MzMgMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMzYzLDYgKzIzNjMsNyBAQCBQcmVkaWNhdGVM b2NrRGF0YQogUHJlZGljYXRlTG9ja1RhcmdldFR5cGUKIFByZWZldGNoQnVmZmVyUmVzdWx0CiBQ cmVwUGFyYWxsZWxSZXN0b3JlUHRyVHlwZQorUHJlcGFyZVJlYWRCdWZmZXJfU3RhdHVzCiBQcmVw YXJlU3RtdAogUHJlcGFyZWRTdGF0ZW1lbnQKIFByZXNvcnRlZEtleURhdGEKLS0gCjIuNDMuMAoK --000000000000a4b370064d2b22e6--