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 1vlMYy-00APDL-2q for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 07:35:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vlMYx-0073RI-1n for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Jan 2026 07:35:35 +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 1vlMYw-0073R2-1y for pgsql-hackers@lists.postgresql.org; Thu, 29 Jan 2026 07:35:35 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vlMYt-002sbz-2E for pgsql-hackers@postgresql.org; Thu, 29 Jan 2026 07:35:34 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2a0c20ee83dso5411055ad.2 for ; Wed, 28 Jan 2026 23:35:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769672131; cv=none; d=google.com; s=arc-20240605; b=hgcsJe2/88gCFkt8XT0M1SKlVTkZ2o3fJaxB1fE9ELN/PxRA5xNvVEGfHwR0Fjtzwo mcKZE/y2hOU/FWzPbZSmAh1DrKxvP3T/qEkz6jWx28dScms3PlGSzT1A0aDw8ayEOBDm u2pO9o7zZ0GVWFv7OBL4KYIPHLcVFmz+XnolXmJyWT3I+ydGBH5pA4rqxJ+fAK7/YDL7 2/OKOySwET6z0BeQ70iKyQnozAyRiDkHTql8iJJJ/dAWUbMjQxwNc68TzmkpwnAXwC6Q VlX5DQ1hgoP8+EGl2GkytU9E3IMISHLd348sMdhTMatt2CajwBO2KNnSFjeg7H2ST7np /zxw== 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=p34yHuppxaWifoql6jdteKtojim9sK/l7CIwrPxAjMQ=; fh=4u9WJlZpEgwmgVsEWF5hnojWvGIBmCbUaCY4GYtlyAI=; b=iToZ2vZ6p/n6pU0kG28k6y9GOvOlWwU3wOZGfCYDxtTlUYJnaW+EOOeXSjdWQJk4mc qjXWZqRYS0icf9CKoEvpVuwolUbI9IVATuM3O4mTfJ/8fxdfP44MPMpm8WCX0Lbjitd3 ipb+CK1X5OjLmIf02Ec8PFSypq3EcsXZ9H9kPAv0MLmhZdGWgGmrG8jSGG89nDg/xgo+ CEYIy/1+AcRM1XXJ4sfPcN6MEJstjL5lkHAf7VGcSbf+2f/ka8qmK/Gv+u3Vc/GsHZIO 4VLlxJ8mLDfKxPk0nQFl/Xvvz9ZL3uTOGF5ygUXsTnglwFgkKjWyJSql9Ey0l/KGh0Pv MCkg==; 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=1769672131; x=1770276931; 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=p34yHuppxaWifoql6jdteKtojim9sK/l7CIwrPxAjMQ=; b=C4mRAKKQ/ykm2Pw4VIf0ARPrARlcvKskvgcXXWV8GCxHzZtXbB7uPbThmDqV2OApyL f/PBdSH9uJ9wpZ9kqmhpeAx9nCHHqKaJTj+fseGqolLT513sT8SU+mwl2HcP4j22Hok7 Kv68rTCOmfeSKU03AY+sbc7vG7hFnGnN5ddpJIyJ80zr4EHCa97dLbn0gjxQ9n7GJw+w QnLg0ek4+z22fyG2j7EhSVduqHkg4y7XhBMuakzwQYf7Wqr61lpTZSRFR4Po+ZeKcCdv c4q9JjiLpBm6/qWzq139545uTR6/hTHAKnNQ6imojazW/dAzouWsZyHiXrhNDuP4lz/O 5mBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769672131; x=1770276931; 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=p34yHuppxaWifoql6jdteKtojim9sK/l7CIwrPxAjMQ=; b=kPIdigEUt5peaUhnPMS4/y72o/CjsUi6eCrXrgH1wHBwzEnxX2WeKNqKR/CCEwIRVP 1lukDO2nDb0qRoKiPVr/XDq08QA8u5JrPcopgMpVPkWbwYQZJdwYvlBy0qAzzW0H5wei bb/PyBsJNJpucPwOBr77Z+ZJGPFE/Fj1swT6k6FLJDLWuwVQbj3UUi0V6uAFX7H8h1Xz vYjoHVdpzLmJodoXr0f4YQ31Nbdh8Eb8g73TvinbVryt2E1JxhnYWeLVJOYbnuXDzVLG rdegy9ExZtpXGX1K2iHPRMNEoyoL7zgjC5Wbxl5SCYDj3YFlScT3V1r4cZqW7k+Rzisw yd2g== X-Forwarded-Encrypted: i=1; AJvYcCWKP7ienmn94IIAmVwN5q3JA8aLv6+H52myd0bywRucfaorJffWkNnMN/vtm9ZZW7kJ0SaSMCyQiw/2ewdy@postgresql.org X-Gm-Message-State: AOJu0YwbYAfP+9Vetvu+NO92fsk59TSOFrTkyAC19TeG7C8CsVZXYZTS Rwbx2VRmik02xs2Et7Ylz9Bl0ZqoYGNG+z5440lvHgsczOR3ehtsWh8N+Pz77ah95dJ5k1Yo05k lPnDaGxNLzaOe6jzMSJoK3VWvGq9MUPk= X-Gm-Gg: AZuq6aJXvbLSoJU7k+CQgFFNzwEd7xTMmg8cgY976cYlInqhgBdWYCNuJDUFlZ96lsE Qm7cVfHivUFTTQgoMsYBtfOJ4lyJF+mQR0nXrpxsTVoKA39tyQS4OX30gzRiO/nCtjCndpbbM1K 0tIZlkrd3buiXuQl87xj0pBrYF8QIRhRX9e/8MBV5SqfI3ctTh7Lpnf5tREmMthM46cLGmNCise Fkn1LQ3KT8YlA/4ehLOYs8dtsRodqConsaoPv3fO/LhFAPvz1b09iXPFhJi0XUUkN/uLKQ= X-Received: by 2002:a17:903:234c:b0:2a0:abba:a2ee with SMTP id d9443c01a7336-2a870d3309cmr80465285ad.5.1769672130956; Wed, 28 Jan 2026 23:35:30 -0800 (PST) MIME-Version: 1.0 References: <68f3771f-91f5-4cb7-b1de-74d9abbf0b96@vondra.me> In-Reply-To: From: Amit Langote Date: Thu, 29 Jan 2026 08:35:13 +0100 X-Gm-Features: AZwV_Qjx9DYPCqYOvo-OPjMa3Se2EiSRyM2-v2ITyIQ1iGoSizDUWOXB9NA3HVA Message-ID: Subject: Re: Batching in executor To: Daniil Davydov <3danissimo@gmail.com> Cc: cca5507 <2624345507@qq.com>, PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="000000000000bc2c07064981e6d7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000bc2c07064981e6d7 Content-Type: text/plain; charset="UTF-8" Hi, Here is v5 of the patch series. Patches 0001-0003 add the core batching infrastructure. 0001 adds the batch table AM API with heapam implementation, 0002 wires up SeqScan to use it (still returning one slot at a time), and 0003 adds EXPLAIN (BATCHES). I'd love to hear people's thoughts around TupleBatch structure added in 0002. I thought about making it a separate patch so that 0002 will still populate the single ScanState.ss_scanTupleSlot, but that means we'd still have to call the TAM callback to populate the tuple in the TAM's batch struct into the slot, defeating the whole point. With TupleBatch, you have executor_batch_rows number of slots which are filled in one TAM callback (materialize_all) call. So I decided to keep the TupleBatch and related things in 0002. For scans without quals, batching shows 20-30% improvement with no visible regressions when batching is disabled (batch_rows=0): SELECT * FROM t LIMIT n (no qual) Rows Master batch=0 %diff batch=64 %diff ------ -------- ------- ----- -------- ----- 1M 12.42 ms 11.96 ms 3.7% 8.56 ms 31.0% 3M 38.95 ms 38.92 ms 0.1% 28.59 ms 26.6% 10M 153.64 ms 150.28 ms 2.2% 112.95 ms 26.5% (%diff: positive = faster than master, negative = slower) Patches 0004-0005 add batched qual evaluation and are more experimental (see below on why 0005 exists). For quals referencing early columns, the improvement is significant: SELECT * FROM t WHERE a = 0 ... OFFSET n (qual on 1st col) Rows Master batch=64 %diff ------ -------- -------- ----- 1M 30.19 ms 15.55 ms 48.5% 3M 92.47 ms 50.01 ms 45.9% 10M 325.58 ms 211.83 ms 34.9% However, for quals on later columns (e.g., 15th), batching provides no benefit - deformation dominates and batching doesn't help: SELECT * FROM t WHERE o = 0 ... OFFSET n (qual on 15th col) Rows Master batch=64 %diff ------ -------- -------- ----- 1M 44.14 ms 44.56 ms -0.9% 3M 133.89 ms 137.77 ms -2.9% 10M 503.33 ms 528.88 ms -5.1% I don't have a satisfactory explanation for why batching doesn't help the deform-heavy case at all. One would expect at least some benefit from reduced per-tuple overhead, but that's not materializing. I've also been struggling to understand why 0004 affects the per-tuple path even when batch_rows=0. For quals with 0% selectivity (all rows fail the qual), perf shows ExecInterpExpr is noticeably hotter with the patched code compared to master, even though batching is disabled: SELECT * FROM t WHERE a = 0 ... OFFSET n (0% selectivity) Rows Master batch=0 %diff batch=64 %diff ------ -------- ------- ----- -------- ----- 1M 24.37 ms 28.67 ms -17.6% 12.46 ms 48.9% 3M 73.95 ms 85.07 ms -15.0% 41.64 ms 43.7% 10M 287.63 ms 316.81 ms -10.1% 188.01 ms 34.6% Compare that to 100% selectivity (all rows pass), where there's no regression: SELECT * FROM t WHERE a > 0 ... OFFSET n (100% selectivity) Rows Master batch=0 %diff batch=64 %diff ------ -------- ------- ----- -------- ----- 1M 29.44 ms 29.10 ms 1.2% 16.61 ms 43.6% 3M 91.22 ms 90.28 ms 1.0% 54.10 ms 40.7% 10M 360.77 ms 331.25 ms 8.2% 224.00 ms 37.9% I tried moving batch opcodes to a separate interpreter (0005) thinking it might be register pressure or jump table effects from adding cases to ExecInterpExpr's switch. With 0005, the generated assembly for ExecInterpExpr looks identical to master (same stack frame size, same epilogue), yet the performance still differs. Specifically, the ldp instruction in the function epilogue shows 53% hotness in patched vs 35% in master. We still need placeholder entries in the dispatch table, so it's unclear if this fully isolates the per-tuple path. I'll continue looking at perf, but I feel like at a bit of a loss here and would appreciate any insights. Other changes worth noting: - I removed the BatchVector intermediate representation that copied Datums into columnar arrays before qual evaluation (it used to be in the batched qual patch 0004). Now quals access batch slots' tts_values directly. This simplifies the code and the copy overhead wasn't paying off. If we pursue serious vectorization later, this may need to be revisited, but removing it doesn't degrade performance. -- Thanks, Amit Langote --000000000000bc2c07064981e6d7 Content-Type: application/octet-stream; name="v5-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Disposition: attachment; filename="v5-0001-Add-batch-table-AM-API-and-heapam-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz4x7n50 RnJvbSBmNzcyMDQzZTIxMDRiZjY3OTY0NDE4ZGM4MGMzYWJiNTZiZGIwNjlkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjkgSmFuIDIwMjYgMDA6NTc6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 IDEvNV0gQWRkIGJhdGNoIHRhYmxlIEFNIEFQSSBhbmQgaGVhcGFtIGltcGxlbWVudGF0aW9uCgpJ bnRyb2R1Y2UgbmV3IHRhYmxlIEFNIGNhbGxiYWNrcyB0byBmZXRjaCBtdWx0aXBsZSB0dXBsZXMg cGVyIGNhbGwuClRoaXMgcmVkdWNlcyBwZXItdHVwbGUgY2FsbCBvdmVyaGVhZCBieSBsZXR0aW5n IGV4ZWN1dG9yIG5vZGVzIHdvcmsKaW4gYmF0Y2hlcy4KCkRlZmluZSBhIEhlYXBCYXRjaCBzdHJ1 Y3R1cmUgYW5kIHN1cHBvcnRpbmcgY29kZSBpbiB0YWJsZWFtLmguCkJhdGNoZXMgYXJlIGxpbWl0 ZWQgdG8gdHVwbGVzIGZyb20gYSBzaW5nbGUgcGFnZSBhbmQgYXQgbW9zdApFWEVDX0JBVENIX1JP V1MgKGN1cnJlbnRseSA2NCkgZW50cmllcy4KClByb3ZpZGUgaW5pdGlhbCBoZWFwYW0gc3VwcG9y dCB3aXRoIGhlYXBnZXR0dXBfcGFnZW1vZGVfYmF0Y2goKS4KTm8gZXhlY3V0b3Igbm9kZSBpcyBz d2l0Y2hlZCBvdmVyIHlldDsgYSBsYXRlciBjb21taXQgd2lsbCBhZGFwdApTZXFTY2FuIHRvIHVz ZSB0aGlzIEFQSS4gT3RoZXIgbm9kZXMgbWF5IGFkb3B0IGl0IGluIHRoZSBmdXR1cmUuCgpBbHNv IGFkZCBwZ3N0YXRfY291bnRfaGVhcF9nZXRuZXh0X2JhdGNoKCkgdG8gcmVjb3JkIGJhdGNoZWQg ZmV0Y2hlcwppbiBwZ3N0YXQuCgpSZXZpZXdlZC1ieTogRGFuaWlsIERhdnlkb3YgPDNkYW5pc3Np bW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQ2hhbmdBbyBDaGVuIDwyNjI0MzQ1NTA3QHFxLmNv bT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRmZBWV9aRnFOOHdjQUVN dzcxVDloTV9rQThVdHlIYVpaRVp0dVQzVXlvZ0FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgIHwgMjIxICsrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA0ICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgfCAgMTggKysKIHNyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAgNTggKysrKysrCiBzcmMvaW5j bHVkZS9wZ3N0YXQuaCAgICAgICAgICAgICAgICAgICAgIHwgICA1ICsKIDUgZmlsZXMgY2hhbmdl ZCwgMzA2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IGYzMGE1 NmVjZjU1Li5kOGQxYmRmNTE5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTExNTEs NiArMTE1MSwxMzQgQEAgY29udGludWVfcGFnZToKIAlzY2FuLT5yc19pbml0ZWQgPSBmYWxzZTsK IH0KIAorLyoKKyAqIGhlYXBnZXR0dXBfcGFnZW1vZGVfYmF0Y2gKKyAqCQlDb2xsZWN0IHVwIHRv ICdtYXhpdGVtcycgdmlzaWJsZSB0dXBsZXMgZnJvbSBhIHNpbmdsZSBwYWdlIGluIHBhZ2UgbW9k ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSAqYmF0Y2gqIG9mIHR1cGxlcyBmcm9t IG9uZSBoZWFwIHBhZ2UuIElmIHRoZQorICogY3VycmVudCBwYWdlIChhcyB0cmFja2VkIGJ5IHRo ZSBzY2FuIGRlc2MpIGhhcyBubyBtb3JlIHR1cGxlcyBsZWZ0LAorICogaXQgd2lsbCBhZHZhbmNl IHRvIHRoZSBuZXh0IHBhZ2UgYW5kIHByZXBhcmUgaXQgKHZpYSBoZWFwX3ByZXBhcmVfcGFnZXNj YW4pLgorICogSXQgd2lsbCBub3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IHdoaWxlIGZpbGxpbmcg dGhlIGJhdGNoLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCQludW1iZXIgb2YgdHVwbGVzIHdy aXR0ZW4gaW50byAndGRhdGEnICgwIGF0IGVuZC1vZi1zY2FuKS4KKyAqCisgKiBTaWRlIGVmZmVj dHM6CisgKgktIEVuc3VyZXMgcnNfY2J1ZiBwaW5zIHRoZSBwYWdlIGZyb20gd2hpY2ggdHVwbGVz IHdlcmUgcHJvZHVjZWQuCisgKgktIFNldHMgcnNfY2Jsb2NrLCByc19jaW5kZXgsIHJzX250dXBs ZXMgY29uc2lzdGVudGx5IChzYW1lIGFzCisgKgkgIGhlYXBnZXR0dXBfcGFnZW1vZGXigJlzIGlu bmVyLWxvb3AgZWZmZWN0cykuCisgKgktIERvZXMgKm5vdCogY2hhbmdlIGJ1ZmZlciBwaW4gY291 bnRzIGV4Y2VwdCB0aHJvdWdoIG5vcm1hbCBwYWdlCisgKgkgIHRyYW5zaXRpb25zIHBlcmZvcm1l ZCBieSBoZWFwX2ZldGNoX25leHRfYnVmZmVyKCkuCisgKi8KK3N0YXRpYyBpbnQKK2hlYXBnZXR0 dXBfcGFnZW1vZGVfYmF0Y2goSGVhcFNjYW5EZXNjIHNjYW4sCisJCQkJCQkgIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJICBpbnQgbmtleXMsIFNjYW5LZXkga2V5LAorCQkJCQkJICBIZWFwVHVw bGVEYXRhICp0ZGF0YSwKKwkJCQkJCSAgaW50IG1heGl0ZW1zKQoreworCVBhZ2UJCXBhZ2U7CisJ dWludDMyCQlsaW5laW5kZXg7CisJdWludDMyCQlsaW5lc2xlZnQ7CisJaW50CQkJbm91dCA9IDA7 CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+cnNfYmFzZS5yc19yZDsKKwlUdXBsZURlc2MJdHVwZGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKworCS8qCisJICogQ3VycmVudCBiYXRjaGluZyBs aW1pdGF0aW9ucyAobWF5IGJlIHJlbGF4ZWQgaW4gZnV0dXJlKToKKwkgKgorCSAqCS0gRm9yd2Fy ZCBzY2FucyBvbmx5OiBiYWNrd2FyZCBzY2FuIHN1cHBvcnQgd291bGQgcmVxdWlyZSBjaGFuZ2Vz IHRvCisJICoJICBiYXRjaCBpdGVyYXRpb24gYW5kIHBhZ2UgYWR2YW5jZW1lbnQgbG9naWMuCisJ ICoKKwkgKgktIFBhZ2Vtb2RlIHJlcXVpcmVkOiBiYXRjaGluZyByZWxpZXMgb24gdGhlIHByZS1i dWlsdCByc192aXN0dXBsZXNbXQorCSAqCSAgYXJyYXkgZnJvbSBoZWFwX3ByZXBhcmVfcGFnZXNj YW4oKS4gVGhpcyBpcyBndWFyYW50ZWVkIGJ5CisJICoJICBTY2FuQ2FuVXNlQmF0Y2hpbmcoKSB3 aGljaCBvbmx5IGVuYWJsZXMgYmF0Y2hpbmcgd2hlbiBTT19BTExPV19QQUdFTU9ERQorCSAqCSAg aXMgc2V0LiBVbmxpa2UgaGVhcF9nZXRuZXh0c2xvdCwgd2UgZG9uJ3Qgc3VwcG9ydCBkeW5hbWlj IGZhbGxiYWNrIHRvCisJICoJICB0dXBsZS1hdC1hLXRpbWUgbW9kZSBzaW5jZSB0aGUgYmF0Y2gg ZXhlY3V0aW9uIHBhdGggaXMgc2VsZWN0ZWQgYXQKKwkgKgkgIEV4ZWNJbml0IHRpbWUuCisJICov CisJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSk7CisJQXNzZXJ0KHNjYW4tPnJz X2Jhc2UucnNfZmxhZ3MgJiBTT19BTExPV19QQUdFTU9ERSk7CisJQXNzZXJ0KG1heGl0ZW1zID4g MCk7CisKKwkvKgorCSAqIExvb3AgdW50aWwgd2UgZmluZCB0dXBsZXMgdGhhdCBwYXNzIHRoZSBz Y2FuIGtleSwgb3IgcmVhY2ggZW5kIG9mIHNjYW4uCisJICogV2UgbmV2ZXIgY3Jvc3MgcGFnZSBi b3VuZGFyaWVzIHdpdGhpbiBhIHNpbmdsZSBiYXRjaC4KKwkgKi8KKwlmb3IgKDs7KQorCXsKKwkJ LyoKKwkJICogQWR2YW5jZSB0byBhIHBhZ2Ugd2l0aCB2aXNpYmxlIHR1cGxlcyBpZiBuZWVkZWQu CisJCSAqLworCQlpZiAoQnVmZmVySXNWYWxpZChzY2FuLT5yc19jYnVmKSkKKwkJeworCQkJbGlu ZWluZGV4ID0gc2Nhbi0+cnNfY2luZGV4ICsgMTsKKwkJCWxpbmVzbGVmdCA9IChsaW5laW5kZXgg PD0gc2Nhbi0+cnNfbnR1cGxlcykgPworCQkJCShzY2FuLT5yc19udHVwbGVzIC0gbGluZWluZGV4 KSA6IDA7CisJCX0KKwkJZWxzZQorCQkJbGluZXNsZWZ0ID0gMDsKKworCQl3aGlsZSAobGluZXNs ZWZ0ID09IDApCisJCXsKKwkJCWhlYXBfZmV0Y2hfbmV4dF9idWZmZXIoc2NhbiwgZGlyKTsKKwor CQkJaWYgKCFCdWZmZXJJc1ZhbGlkKHNjYW4tPnJzX2NidWYpKQorCQkJeworCQkJCS8qIEVuZCBv ZiBzY2FuICovCisJCQkJc2Nhbi0+cnNfY2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJ CXNjYW4tPnJzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJCXNjYW4t PnJzX2luaXRlZCA9IGZhbHNlOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlBc3NlcnQoQnVm ZmVyR2V0QmxvY2tOdW1iZXIoc2Nhbi0+cnNfY2J1ZikgPT0gc2Nhbi0+cnNfY2Jsb2NrKTsKKwkJ CWhlYXBfcHJlcGFyZV9wYWdlc2NhbigoVGFibGVTY2FuRGVzYykgc2Nhbik7CisKKwkJCWxpbmVp bmRleCA9IDA7CisJCQlsaW5lc2xlZnQgPSBzY2FuLT5yc19udHVwbGVzOworCQl9CisKKwkJLyoK KwkJICogV2FsayByc192aXN0dXBsZXNbXSBjb3B5aW5nIGhlYWRlcnMgaW50byB0ZGF0YVtdIHVu dGlsIHRoZSBwYWdlCisJCSAqIGlzIGV4aGF1c3RlZCBvciBiYXRjaCBjYXBhY2l0eSBpcyByZWFj aGVkLgorCQkgKi8KKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc2Nhbi0+cnNfY2J1Zik7CisKKwkJ Zm9yICg7IGxpbmVzbGVmdCA+IDAgJiYgbm91dCA8IG1heGl0ZW1zOyBsaW5lc2xlZnQtLSwgbGlu ZWluZGV4KyspCisJCXsKKwkJCU9mZnNldE51bWJlcglsaW5lb2ZmOworCQkJSXRlbUlkCQkJbHBw OworCQkJSGVhcFR1cGxlRGF0YSAgKmRzdCA9ICZ0ZGF0YVtub3V0XTsKKworCQkJQXNzZXJ0KGxp bmVpbmRleCA8IHNjYW4tPnJzX250dXBsZXMpOworCQkJbGluZW9mZiA9IHNjYW4tPnJzX3Zpc3R1 cGxlc1tsaW5laW5kZXhdOworCQkJbHBwID0gUGFnZUdldEl0ZW1JZChwYWdlLCBsaW5lb2ZmKTsK KwkJCUFzc2VydChJdGVtSWRJc05vcm1hbChscHApKTsKKworCQkJZHN0LT50X2RhdGEgPSAoSGVh cFR1cGxlSGVhZGVyKSBQYWdlR2V0SXRlbShwYWdlLCBscHApOworCQkJZHN0LT50X2xlbiA9IEl0 ZW1JZEdldExlbmd0aChscHApOworCQkJQXNzZXJ0KGRzdC0+dF90YWJsZU9pZCA9PSBSZWxhdGlv bkdldFJlbGlkKHJlbCkpOworCQkJSXRlbVBvaW50ZXJTZXQoJihkc3QtPnRfc2VsZiksIHNjYW4t PnJzX2NibG9jaywgbGluZW9mZik7CisKKwkJCWlmIChrZXkgIT0gTlVMTCAmJiAhSGVhcEtleVRl c3QoZHN0LCB0dXBkZXNjLCBua2V5cywga2V5KSkKKwkJCQljb250aW51ZTsKKworCQkJc2Nhbi0+ cnNfY2luZGV4ID0gbGluZWluZGV4OworCQkJbm91dCsrOworCQl9CisKKwkJLyogUmV0dXJuIGlm IHdlIGZvdW5kIGFueSB0dXBsZXM7IG90aGVyd2lzZSB0cnkgbmV4dCBwYWdlICovCisJCWlmIChu b3V0ID4gMCkKKwkJCXJldHVybiBub3V0OworCisJCS8qIE1hcmsgcGFnZSBleGhhdXN0ZWQgc28g d2UgYWR2YW5jZSBvbiBuZXh0IGl0ZXJhdGlvbiAqLworCQlzY2FuLT5yc19jaW5kZXggPSBzY2Fu LT5yc19udHVwbGVzOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIDA7Cit9CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqCQkJCQkgaGVhcCBhY2Nlc3MgbWV0aG9kIGludGVyZmFjZQpAQCAtMTQ4 Myw2ICsxNjExLDk5IEBAIGhlYXBfZ2V0bmV4dHNsb3QoVGFibGVTY2FuRGVzYyBzc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzCiAJcmV0dXJuIHRydWU7CiB9 CiAKKy8qLS0tLS0tLS0tLSBCYXRjaGluZyBzdXBwb3J0IC0tLS0tLS0tLS0tKi8KKworLyoKKyAq IGhlYXBfc2Nhbl9iZWdpbl9iYXRjaAorICoKKyAqIEFsbG9jYXRlIGEgSGVhcEJhdGNoIHdpdGgg c3BhY2UgZm9yICdtYXhpdGVtcycgdHVwbGUgaGVhZGVycy4gTm8gcGluIGlzCisgKiB0YWtlbiBo ZXJlLiBNZW1vcnkgaXMgYWxsb2NhdGVkIHVuZGVyIHRoZSBzY2FuJ3MgbWVtb3J5IGNvbnRleHQu CisgKi8KK3ZvaWQgKgoraGVhcF9iZWdpbl9iYXRjaChUYWJsZVNjYW5EZXNjIHNzY2FuLCBpbnQg bWF4aXRlbXMpCit7CisJSGVhcEJhdGNoICAqaGI7CisJT2lkCQkJcmVsaWQ7CisJU2l6ZQkJYWxs b2Nfc2l6ZTsKKworCUFzc2VydChtYXhpdGVtcyA+IDApOworCisJLyogU2luZ2xlIGFsbG9jYXRp b24gZm9yIEhlYXBCYXRjaCBoZWFkZXIgKyB0dXBkYXRhIGFycmF5ICovCisJYWxsb2Nfc2l6ZSA9 IHNpemVvZihIZWFwQmF0Y2gpICsgc2l6ZW9mKEhlYXBUdXBsZURhdGEpICogbWF4aXRlbXM7CisJ aGIgPSBwYWxsb2MoYWxsb2Nfc2l6ZSk7CisJaGItPnR1cGRhdGEgPSAoSGVhcFR1cGxlRGF0YSAq KSAoKGNoYXIgKikgaGIgKyBzaXplb2YoSGVhcEJhdGNoKSk7CisJaGItPm1heGl0ZW1zID0gbWF4 aXRlbXM7CisJaGItPm5pdGVtcyA9IDA7CisJaGItPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisKKwkv KiBJbml0aWFsaXplIHN0YXRpYyBmaWVsZHMgb2YgSGVhcFR1cGxlRGF0YS4gUm93IGJvZGllcyBy ZW1haW4gb24gcGFnZS4gKi8KKwlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3NjYW4tPnJzX3Jk KTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG1heGl0ZW1zOyBpKyspCisJCWhiLT50dXBkYXRhW2ld LnRfdGFibGVPaWQgPSByZWxpZDsKKworCXJldHVybiBoYjsKK30KKworLyoKKyAqIGhlYXBfc2Nh bl9lbmRfYmF0Y2gKKyAqCisgKiBSZWxlYXNlIGFueSBvdXRzdGFuZGluZyBwaW4gYW5kIGZyZWUg dGhlIGJhdGNoIGFsbG9jYXRpb25zLiBDYWxsZXIgd2lsbAorICogbm90IHVzZSAnYW1fYmF0Y2gn IGFmdGVyIHRoaXMgcG9pbnQuCisgKi8KK3ZvaWQKK2hlYXBfZW5kX2JhdGNoKFRhYmxlU2NhbkRl c2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoKQoreworCUhlYXBCYXRjaCAqaGIgPSAoSGVhcEJhdGNo ICopIGFtX2JhdGNoOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJCVJlbGVhc2VC dWZmZXIoaGItPmJ1Zik7CisKKwlwZnJlZShoYik7Cit9CisKK2ludAoraGVhcF9nZXRuZXh0YmF0 Y2goVGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGly KQoreworCUhlYXBTY2FuRGVzYyBzY2FuID0gKEhlYXBTY2FuRGVzYykgc3NjYW47CisJSGVhcEJh dGNoICAqaGIgPSAoSGVhcEJhdGNoICopIGFtX2JhdGNoOworCUJ1ZmZlcgkJY3VyYnVmOworCWlu dAkJCW47CisKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKTsKKwlBc3NlcnQo c3NjYW4tPnJzX2ZsYWdzICYgU09fQUxMT1dfUEFHRU1PREUpOworCUFzc2VydChoYi0+bWF4aXRl bXMgPiAwKTsKKworCS8qIERyb3AgcHJpb3IgYmF0Y2ggcGluLCBpZiBhbnkuICovCisJaWYgKEJ1 ZmZlcklzVmFsaWQoaGItPmJ1ZikpCisJeworCQlSZWxlYXNlQnVmZmVyKGhiLT5idWYpOworCQlo Yi0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9CisKKwloYi0+bml0ZW1zID0gMDsKKworCS8qIE9u ZSBjYWxsIHBlciBiYXRjaCwgbmV2ZXIgY3Jvc3NlcyBhIHBhZ2UuICovCisJbiA9IGhlYXBnZXR0 dXBfcGFnZW1vZGVfYmF0Y2goc2NhbiwgZGlyLAorCQkJCQkJCQkgIHNzY2FuLT5yc19ua2V5cywg c3NjYW4tPnJzX2tleSwKKwkJCQkJCQkJICBoYi0+dHVwZGF0YSwgaGItPm1heGl0ZW1zKTsKKwor CWlmIChuID09IDApCisJCXJldHVybiAwOwkvKiBlbmQgb2Ygc2NhbiAqLworCisJLyogSG9sZCBh IHNoYXJlZCBwaW4gZm9yIHRoZSBiYXRjaCBsaWZldGltZSBzbyB0X2RhdGEgc3RheXMgdmFsaWQu ICovCisJY3VyYnVmID0gc2Nhbi0+cnNfY2J1ZjsKKwlJbmNyQnVmZmVyUmVmQ291bnQoY3VyYnVm KTsKKwloYi0+YnVmID0gY3VyYnVmOworCisJLyogUGVyLXR1cGxlIHN0YXRzIChjYW4gYmUgY29s bGFwc2VkIGludG8gYSBmdXR1cmUgX211bHRpKCkgY2FsbCkuICovCisJcGdzdGF0X2NvdW50X2hl YXBfZ2V0bmV4dF9iYXRjaChzc2Nhbi0+cnNfcmQsIG4pOworCisJaGItPm5pdGVtcyA9IG47CisJ cmV0dXJuIG47Cit9CisKKy8qLS0tLS0gRW5kIG9mIGJhdGNoaW5nIHN1cHBvcnQgLS0tLS0qLwor CiB2b2lkCiBoZWFwX3NldF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLCBJdGVtUG9pbnRl ciBtaW50aWQsCiAJCQkJICBJdGVtUG9pbnRlciBtYXh0aWQpCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBjYmVmNzNlNWQ0Yi4uZTRjZjdmYzI5NmIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjYzNyw2ICsyNjM3LDEw IEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkuc2Nh bl9yZXNjYW4gPSBoZWFwX3Jlc2NhbiwKIAkuc2Nhbl9nZXRuZXh0c2xvdCA9IGhlYXBfZ2V0bmV4 dHNsb3QsCiAKKwkuc2Nhbl9iZWdpbl9iYXRjaCA9IGhlYXBfYmVnaW5fYmF0Y2gsCisJLnNjYW5f Z2V0bmV4dGJhdGNoID0gaGVhcF9nZXRuZXh0YmF0Y2gsCisJLnNjYW5fZW5kX2JhdGNoID0gaGVh cF9lbmRfYmF0Y2gsCisKIAkuc2Nhbl9zZXRfdGlkcmFuZ2UgPSBoZWFwX3NldF90aWRyYW5nZSwK IAkuc2Nhbl9nZXRuZXh0c2xvdF90aWRyYW5nZSA9IGhlYXBfZ2V0bmV4dHNsb3RfdGlkcmFuZ2Us CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzYzA5NjFhYjM2Yi4uZTI0MTc2NTBjNWYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKQEAgLTEwMSw2ICsxMDEsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgSGVhcFNjYW5EZXNj RGF0YQogfSBIZWFwU2NhbkRlc2NEYXRhOwogdHlwZWRlZiBzdHJ1Y3QgSGVhcFNjYW5EZXNjRGF0 YSAqSGVhcFNjYW5EZXNjOwogCisvKgorICogSGVhcEJhdGNoIC0tIHN0YXRlbGVzcyBwZXItYmF0 Y2ggYnVmZmVyLiBBIGJhdGNoIHBpbnMgb25lIHBhZ2UgYW5kCisgKiBleHBvc2VzIHVwIHRvIG1h eGl0ZW1zIEhlYXBUdXBsZURhdGEgaGVhZGVycyB3aG9zZSB0X2RhdGEgcG9pbnQgaW50byB0aGF0 CisgKiBwYWdlLgorICovCit0eXBlZGVmIHN0cnVjdCBIZWFwQmF0Y2gKK3sKKwlIZWFwVHVwbGVE YXRhICAqdHVwZGF0YTsJLyogbGVuID0gbWF4aXRlbXM7IGhlYWRlcnMgb25seSAqLworCWludAkJ CQluaXRlbXM7CQkvKiB0dXBsZXMgcHJvZHVjZWQgaW4gbGFzdCBnZXRuZXh0YmF0Y2goKSAqLwor CWludAkJCQltYXhpdGVtczsJLyogZml4ZWQgY2FwYWNpdHkgc2V0IGF0IGJlZ2luX2JhdGNoKCkg Ki8KKwlCdWZmZXIJCQlidWY7CQkvKiBzaW5nbGUgcGlubmVkIGJ1ZmZlciBmb3IgdGhpcyBiYXRj aCAqLworfSBIZWFwQmF0Y2g7CisKIHR5cGVkZWYgc3RydWN0IEJpdG1hcEhlYXBTY2FuRGVzY0Rh dGEKIHsKIAlIZWFwU2NhbkRlc2NEYXRhIHJzX2hlYXBfYmFzZTsKQEAgLTMzNyw2ICszNTAsMTEg QEAgZXh0ZXJuIHZvaWQgaGVhcF9lbmRzY2FuKFRhYmxlU2NhbkRlc2Mgc3NjYW4pOwogZXh0ZXJu IEhlYXBUdXBsZSBoZWFwX2dldG5leHQoVGFibGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24pOwogZXh0ZXJuIGJvb2wgaGVhcF9nZXRuZXh0c2xvdChUYWJsZVNjYW5EZXNj IHNzY2FuLAogCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCitleHRlcm4gdm9pZCAqaGVhcF9iZWdpbl9iYXRjaChUYWJsZVNjYW5EZXNjIHNz Y2FuLCBpbnQgbWF4aXRlbXMpOworZXh0ZXJuIHZvaWQgaGVhcF9lbmRfYmF0Y2goVGFibGVTY2Fu RGVzYyBzc2Nhbiwgdm9pZCAqYW1fYmF0Y2gpOworZXh0ZXJuIGludCBoZWFwX2dldG5leHRiYXRj aChUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIp OworCiBleHRlcm4gdm9pZCBoZWFwX3NldF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLCBJ dGVtUG9pbnRlciBtaW50aWQsCiAJCQkJCQkJICBJdGVtUG9pbnRlciBtYXh0aWQpOwogZXh0ZXJu IGJvb2wgaGVhcF9nZXRuZXh0c2xvdF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKaW5kZXggZTJlYzUyODlkNGQuLjU4NGI1ODBmN2ExIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmgKQEAgLTM1MSw2ICszNTEsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCSBUdXBsZVRhYmxl U2xvdCAqc2xvdCk7CiAKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBCYXRjaGVkIHNjYW4gc3Vw cG9ydAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJdm9pZAkgICAqKCpzY2FuX2JlZ2lu X2JhdGNoKShUYWJsZVNjYW5EZXNjIHNzY2FuLCBpbnQgbWF4aXRlbXMpOworCWludAkJCSgqc2Nh bl9nZXRuZXh0YmF0Y2gpKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoLAorCQkJ CQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKKwl2b2lkCQkoKnNjYW5fZW5kX2JhdGNoKShUYWJs ZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCk7CisKIAkvKi0tLS0tLS0tLS0tCiAJICog T3B0aW9uYWwgZnVuY3Rpb25zIHRvIHByb3ZpZGUgc2Nhbm5pbmcgZm9yIHJhbmdlcyBvZiBJdGVt UG9pbnRlcnMuCiAJICogSW1wbGVtZW50YXRpb25zIG11c3QgZWl0aGVyIHByb3ZpZGUgYm90aCBv ZiB0aGVzZSBmdW5jdGlvbnMsIG9yIG5laXRoZXIKQEAgLTEwMzYsNiArMTA0Niw1NCBAQCB0YWJs ZV9zY2FuX2dldG5leHRzbG90KFRhYmxlU2NhbkRlc2Mgc3NjYW4sIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLCBUdXBsZVRhYmxlUwogCXJldHVybiBzc2Nhbi0+cnNfcmQtPnJkX3RhYmxlYW0tPnNj YW5fZ2V0bmV4dHNsb3Qoc3NjYW4sIGRpcmVjdGlvbiwgc2xvdCk7CiB9CiAKKy8qCisgKiB0YWJs ZV9zY2FuX2JlZ2luX2JhdGNoCisgKgkJQWxsb2NhdGUgQU0tb3duZWQgYmF0Y2ggcGF5bG9hZCB3 aXRoIGNhcGFjaXR5ICdtYXhpdGVtcycuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCit0YWJs ZV9zY2FuX2JlZ2luX2JhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIGludCBtYXhpdGVtcykKK3sK Kwljb25zdCBUYWJsZUFtUm91dGluZSAqdGFtID0gc3NjYW4tPnJzX3JkLT5yZF90YWJsZWFtOwor CisJQXNzZXJ0KHRhbS0+c2Nhbl9iZWdpbl9iYXRjaCAhPSBOVUxMKTsKKworCXJldHVybiB0YW0t PnNjYW5fYmVnaW5fYmF0Y2goc3NjYW4sIG1heGl0ZW1zKTsKK30KKworLyoKKyAqIHRhYmxlX3Nj YW5fZ2V0bmV4dGJhdGNoCisgKgkJRmlsbCBuZXh0IGJhdGNoIGZyb20gdGhlIEFNLiBSZXR1cm5z IG51bWJlciBvZiB0dXBsZXMsIDAgPT4gRU9TLgorICoJCUJhdGNoZXMgYXJlIHNpbmdsZS1wYWdl IGluIHYxLiBEaXJlY3Rpb24gaXMgZm9yd2FyZCBvbmx5IGluIHYxLgorICovCitzdGF0aWMgaW5s aW5lIGludAordGFibGVfc2Nhbl9nZXRuZXh0YmF0Y2goVGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9p ZCAqYW1fYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5l ICp0YW0gPSBzc2Nhbi0+cnNfcmQtPnJkX3RhYmxlYW07CisKKwkvKiBPbmx5IGZvcndhcmQgc2Nh bnMgYXJlIHN1cHBvcnRlZCBpbiB0aGUgYmF0Y2hlZCBtb2RlLiAqLworCUFzc2VydChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpOworCUFzc2VydCh0YW0tPnNjYW5fZ2V0bmV4dGJhdGNoICE9 IE5VTEwpOworCisJcmV0dXJuIHRhbS0+c2Nhbl9nZXRuZXh0YmF0Y2goc3NjYW4sIGFtX2JhdGNo LCBkaXIpOworfQorCisvKgorICogdGFibGVfc2Nhbl9lbmRfYmF0Y2gKKyAqCQlSZWxlYXNlIEFN LW93bmVkIHJlc291cmNlcyBmb3IgdGhlIGJhdGNoIHBheWxvYWQuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZAordGFibGVfc2Nhbl9lbmRfYmF0Y2goVGFibGVTY2FuRGVzYyBzc2Nhbiwgdm9pZCAq YW1fYmF0Y2gpCit7CisJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSA9IHNzY2FuLT5yc19yZC0+ cmRfdGFibGVhbTsKKworCWlmIChhbV9iYXRjaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlBc3Nl cnQodGFtLT5zY2FuX2VuZF9iYXRjaCAhPSBOVUxMKTsKKworCXRhbS0+c2Nhbl9lbmRfYmF0Y2go c3NjYW4sIGFtX2JhdGNoKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVElEIFJh bmdlIHNjYW5uaW5nIHJlbGF0ZWQgZnVuY3Rpb25zLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaApp bmRleCBmZmY3ZWNjMjUzMy4uNDhlNGUwMzRhMzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bn c3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC02OTcsNiArNjk3LDExIEBAIGV4 dGVybiB2b2lkIHBnc3RhdF9yZXBvcnRfYW5hbHl6ZShSZWxhdGlvbiByZWwsCiAJCWlmIChwZ3N0 YXRfc2hvdWxkX2NvdW50X3JlbGF0aW9uKHJlbCkpCQkJCQkJXAogCQkJKHJlbCktPnBnc3RhdF9p bmZvLT5jb3VudHMudHVwbGVzX3JldHVybmVkKys7CQkJXAogCX0gd2hpbGUgKDApCisjZGVmaW5l IHBnc3RhdF9jb3VudF9oZWFwX2dldG5leHRfYmF0Y2gocmVsLCBuKQkJCQkJCVwKKwlkbyB7CQkJ CQkJCQkJCQkJCQkJXAorCQlpZiAocGdzdGF0X3Nob3VsZF9jb3VudF9yZWxhdGlvbihyZWwpKQkJ CQkJCVwKKwkJCShyZWwpLT5wZ3N0YXRfaW5mby0+Y291bnRzLnR1cGxlc19yZXR1cm5lZCArPSBu OwkJXAorCX0gd2hpbGUgKDApCiAjZGVmaW5lIHBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHJlbCkJ CQkJCQkJCVwKIAlkbyB7CQkJCQkJCQkJCQkJCQkJXAogCQlpZiAocGdzdGF0X3Nob3VsZF9jb3Vu dF9yZWxhdGlvbihyZWwpKQkJCQkJCVwKLS0gCjIuNDcuMwoK --000000000000bc2c07064981e6d7 Content-Type: application/octet-stream; name="v5-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Disposition: attachment; filename="v5-0002-SeqScan-add-batch-driven-variants-returning-slots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz4x7nb1 RnJvbSA5NGQwZjkyYzgwNzg5NWU2ZWRhZGY1ODNhMDZiYjM5YzVkYzUyYTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjcgSmFuIDIwMjYgMTQ6MDc6NTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 IDIvNV0gU2VxU2NhbjogYWRkIGJhdGNoLWRyaXZlbiB2YXJpYW50cyByZXR1cm5pbmcgc2xvdHMK ClRlYWNoIFNlcVNjYW4gdG8gZHJpdmUgdGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3IGJhdGNoIEFQ SSBhZGRlZCBpbgp0aGUgcHJldmlvdXMgY29tbWl0LCB3aGlsZSBzdGlsbCByZXR1cm5pbmcgb25l IFR1cGxlVGFibGVTbG90IGF0IGEKdGltZSB0byBjYWxsZXJzLiBUaGlzIHJlZHVjZXMgcGVyIHR1 cGxlIEFNIGNyb3NzaW5ncyB3aXRob3V0CmNoYW5naW5nIHRoZSBub2RlIGludGVyZmFjZSBzZWVu IGJ5IHBhcmVudHMuCgpBZGQgVHVwbGVCYXRjaCBhbmQgc3VwcG9ydGluZyBjb2RlIGluIGV4ZWNC YXRjaC5jL2ggdG8gaG9sZCBleGVjdXRvcgpzaWRlIGJhdGNoaW5nIHN0YXRlLiBQbGFuU3RhdGUg Z2FpbnMgcHNfQmF0Y2ggdG8gY2FycnkgdGhlIGFjdGl2ZQpUdXBsZUJhdGNoIHdoZW4gYSBub2Rl IHN1cHBvcnRzIGJhdGNoaW5nLgoKQWRkIGV4ZWN1dG9yX2JhdGNoX3Jvd3MgR1VDIHRvIHNwZWNp ZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MKdGhhdCBjYW4gYmUgYWRkZWQgaW50byBhIGJh dGNoLgoKV2lyZSB1cCBydW50aW1lIHNlbGVjdGlvbiBpbiBFeGVjSW5pdFNlcVNjYW4gdXNpbmcK U2NhbkNhblVzZUJhdGNoaW5nKCkuIFdoZW4gZXhlY3V0b3JfYmF0Y2hfcm93cyA+IDEsIEVQUSBp cwppbmFjdGl2ZSwgdGhlIHNjYW4gaXMgbm90IGJhY2t3YXJkLCBhbmQgdGhlIHJlbGF0aW9uIHN1 cHBvcnRzCmJhdGNoaW5nLCBwcy5FeGVjUHJvY05vZGUgaXMgc2V0IHRvIGEgYmF0Y2gtZHJpdmVu IHZhcmlhbnQuIE90aGVyd2lzZQp0aGUgbm9uLWJhdGNoIHBhdGggaXMgdXNlZC4KClBsYW4gc2hh cGUgYW5kIEVYUExBSU4gb3V0cHV0IHJlbWFpbiB1bmNoYW5nZWQ7IG9ubHkgdGhlIGludGVybmFs CnR1cGxlIGZsb3cgZGlmZmVycyB3aGVuIGJhdGNoaW5nIGlzIGVuYWJsZWQgYW5kIGFsbG93ZWQu CgpOb3RlcyAvIGN1cnJlbnQgbGltaXRzOgoKLSBXaXRoIHRoZSBjdXJyZW50IGhlYXBhbSwgYmF0 Y2hlcyBhcmUgY29tcG9zZWQgZnJvbSBhIHNpbmdsZSBwYWdlLCBzbwogIHRoZSBiYXRjaCBtYXkg bm90IGFsd2F5cyBiZSBmdWxsLiBGdXR1cmUgd29yayBtYXkgbGV0IFNlcVNjYW4gYW5kL29yCiAg QU1zIHRvcCB1cCBiYXRjaGVzIGFjcm9zcyBwYWdlcyB3aGVuIHNhZmUgdG8gZG8gc28uCgpSZXZp ZXdlZC1ieTogRGFuaWlsIERhdnlkb3YgPDNkYW5pc3NpbW9AZ21haWwuY29tPgpSZXZpZXdlZC1i eTogQ2hhbmdBbyBDaGVuIDwyNjI0MzQ1NTA3QHFxLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQStIaXdxRmZBWV9aRnFOOHdjQUVNdzcxVDloTV9rQThVdHlIYVpaRVp0dVQz VXlvZ0FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YyAgICAgICAgICB8ICAyOCArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jICB8ICAxNiArKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyAgICAg ICAgfCAgMTEgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL01ha2VmaWxlICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jICAgICAgICAgIHwgMTEyICsr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jICAgICAgICAgICB8 ICAzMSArKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWlsZCAgICAgICAgICB8ICAg MSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jICAgICAgICB8IDE3NiArKysr KysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAg ICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCB8 ICAgOSArKwogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgfCAgMjcgKysrKwog c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmggICAgICAgICAgfCAgOTkgKysrKysrKysr KysrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjU2Nhbi5oICAgICAgICAgICB8ICA2OSArKysr KysrKysKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgIHwgICA0ICsK IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgIHwgICA0ICsKIDE3IGZpbGVzIGNo YW5nZWQsIDU5MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS9leGVjdXRvci9leGVjQmF0Y2guaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMK aW5kZXggZDhkMWJkZjUxOTEuLmRiOTEwODViMDdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YwpAQCAtMTY0NCw2ICsxNjQ0LDM0IEBAIGhlYXBfYmVnaW5fYmF0Y2goVGFibGVTY2FuRGVzYyBz c2NhbiwgaW50IG1heGl0ZW1zKQogCXJldHVybiBoYjsKIH0KIAorLyoKKyAqIGhlYXBfc2Nhbl9t YXRlcmlhbGl6ZV9hbGwKKyAqCisgKiBCaW5kIGFsbCB0dXBsZXMgb2YgdGhlIGN1cnJlbnQgYmF0 Y2ggaW50byAnc2xvdHMnLiBXZSBiaW5kIHRoZQorICogSGVhcFR1cGxlRGF0YSBoZWFkZXIgdGhh dCBwb2ludHMgaW50byB0aGUgcGlubmVkIHBhZ2UuIE5vIHBlci1yb3cgY29weS4KKyAqLwordm9p ZAoraGVhcF9tYXRlcmlhbGl6ZV9iYXRjaF9hbGwodm9pZCAqYW1fYmF0Y2gsIFR1cGxlVGFibGVT bG90ICoqc2xvdHMsIGludCBuKQoreworCUhlYXBCYXRjaCAqaGIgPSAoSGVhcEJhdGNoICopIGFt X2JhdGNoOworCisJQXNzZXJ0KG4gPD0gaGItPm5pdGVtcyk7CisKKwlmb3IgKGludCBpID0gMDsg aSA8IG47IGkrKykKKwl7CisJCUhlYXBUdXBsZURhdGEgKnR1cGxlID0gJmhiLT50dXBkYXRhW2ld OworCQlIZWFwVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSAoSGVhcFR1cGxlVGFibGVTbG90ICopIHNs b3RzW2ldOworCisJCS8qIElubGluZSBvZiBFeGVjU3RvcmVIZWFwVHVwbGUodHVwbGUsIHNsb3Qs IGZhbHNlKSAqLworCQlzbG90LT50dXBsZSA9IHR1cGxlOworCQlzbG90LT5vZmYgPSAwOworCQlz bG90LT5iYXNlLnR0c19udmFsaWQgPSAwOworCQlzbG90LT5iYXNlLnR0c19mbGFncyAmPSB+KFRU U19GTEFHX0VNUFRZIHwgVFRTX0ZMQUdfU0hPVUxERlJFRSk7CisJCXNsb3QtPmJhc2UudHRzX3Rp ZCA9IHR1cGxlLT50X3NlbGY7CisJCXNsb3QtPmJhc2UudHRzX3RhYmxlT2lkID0gdHVwbGUtPnRf dGFibGVPaWQ7CisJfQorfQorCiAvKgogICogaGVhcF9zY2FuX2VuZF9iYXRjaAogICoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGU0Y2Y3ZmMyOTZiLi4wZjZi ZGE3YjY5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC03 Miw2ICs3MiwyMSBAQCBoZWFwYW1fc2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiAJ cmV0dXJuICZUVFNPcHNCdWZmZXJIZWFwVHVwbGU7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICogVHVwbGVCYXRjaCByZWxhdGVkIGNhbGxiYWNrcyBmb3IgaGVhcCBBTQorICogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKworc3RhdGljIGNvbnN0IFR1cGxlQmF0Y2hPcHMgVHVwbGVCYXRjaEhlYXBP cHMgPQoreworCS5tYXRlcmlhbGl6ZV9hbGwgPSBoZWFwX21hdGVyaWFsaXplX2JhdGNoX2FsbAor fTsKKworc3RhdGljIGNvbnN0IFR1cGxlQmF0Y2hPcHMgKgoraGVhcGFtX2JhdGNoX2NhbGxiYWNr cyhSZWxhdGlvbiByZWxhdGlvbikKK3sKKwlyZXR1cm4gJlR1cGxlQmF0Y2hIZWFwT3BzOworfQog CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFN CkBAIC0yNjMxLDYgKzI2NDYsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFt X21ldGhvZHMgPSB7CiAJLnR5cGUgPSBUX1RhYmxlQW1Sb3V0aW5lLAogCiAJLnNsb3RfY2FsbGJh Y2tzID0gaGVhcGFtX3Nsb3RfY2FsbGJhY2tzLAorCS5iYXRjaF9jYWxsYmFja3MgPSBoZWFwYW1f YmF0Y2hfY2FsbGJhY2tzLAogCiAJLnNjYW5fYmVnaW4gPSBoZWFwX2JlZ2luc2NhbiwKIAkuc2Nh bl9lbmQgPSBoZWFwX2VuZHNjYW4sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFi bGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCA4 NzQ5MTc5NjUyMy4uZmZiM2I3MzhmNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpA QCAtMTAzLDYgKzEwMywxNyBAQCB0YWJsZV9zbG90X2NyZWF0ZShSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqKnJlZ2xpc3QpCiAJcmV0dXJuIHNsb3Q7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIFR1cGxlQmF0Y2ggc3VwcG9ydCByb3V0aW5lcworICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCitjb25zdCBUdXBsZUJhdGNoT3BzICoKK3RhYmxlX2JhdGNoX2NhbGxiYWNrcyhSZWxh dGlvbiByZWxhdGlvbikKK3sKKwlpZiAocmVsYXRpb24tPnJkX3RhYmxlYW0pCisJCXJldHVybiBy ZWxhdGlvbi0+cmRfdGFibGVhbS0+YmF0Y2hfY2FsbGJhY2tzKHJlbGF0aW9uKTsKKwllbG9nKEVS Uk9SLCAicmVsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUdXBsZUJhdGNoIG9wZXJhdGlvbnMiKTsK K30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGFibGUgc2NhbiBmdW5jdGlvbnMuCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL01ha2VmaWxlCmluZGV4IDExMTE4ZDBjZTAyLi4zZTcyZjNmZTAzYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3Jj L01ha2VmaWxlLmdsb2JhbAogT0JKUyA9IFwKIAlleGVjQW1pLm8gXAogCWV4ZWNBc3luYy5vIFwK KwlleGVjQmF0Y2gubyBcCiAJZXhlY0N1cnJlbnQubyBcCiAJZXhlY0V4cHIubyBcCiAJZXhlY0V4 cHJJbnRlcnAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2gu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4xZWY0MTE3Yjg3YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCkBAIC0wLDAgKzEsMTEyIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiBleGVjQmF0Y2guYworICoJCUhlbHBlcnMgZm9yIFR1cGxlQmF0Y2gK KyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVn ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWNCYXRjaC5oIgorCisvKgorICogVHVwbGVCYXRjaENyZWF0ZQorICoJCUFsbG9jYXRlIGFuZCBp bml0aWFsaXplIGEgbmV3IFR1cGxlQmF0Y2ggZW52ZWxvcGUuCisgKi8KK1R1cGxlQmF0Y2ggKgor VHVwbGVCYXRjaENyZWF0ZShUdXBsZURlc2Mgc2NhbmRlc2MsIGludCBjYXBhY2l0eSkKK3sKKwlU dXBsZUJhdGNoICAqYjsKKwlUdXBsZVRhYmxlU2xvdCAqKmluc2xvdHMsCisJCQkJICAgKipvdXRz bG90czsKKwlTaXplCQlhbGxvY19zaXplOworCisJLyogU2luZ2xlIGFsbG9jYXRpb24gZm9yIFR1 cGxlQmF0Y2ggKyBpbnNsb3RzICsgb3V0c2xvdHMgYXJyYXlzICovCisJYWxsb2Nfc2l6ZSA9IHNp emVvZihUdXBsZUJhdGNoKSArIDIgKiBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBjYXBhY2l0 eTsKKwliID0gcGFsbG9jKGFsbG9jX3NpemUpOworCWluc2xvdHMgPSAoVHVwbGVUYWJsZVNsb3Qg KiopICgoY2hhciAqKSBiICsgc2l6ZW9mKFR1cGxlQmF0Y2gpKTsKKwlvdXRzbG90cyA9IChUdXBs ZVRhYmxlU2xvdCAqKikgKChjaGFyICopIGIgKyBzaXplb2YoVHVwbGVCYXRjaCkgKworCQlzaXpl b2YoVHVwbGVUYWJsZVNsb3QgKikgKiBjYXBhY2l0eSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IGNhcGFjaXR5OyBpKyspCisJCWluc2xvdHNbaV0gPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3Qo c2NhbmRlc2MsICZUVFNPcHNIZWFwVHVwbGUpOworCisJLyogSW5pdGlhbCBzdGF0ZTogZW1wdHkg ZW52ZWxvcGUgKi8KKwliLT5hbV9wYXlsb2FkID0gTlVMTDsKKwliLT5udHVwbGVzID0gMDsKKwli LT5pbnNsb3RzID0gaW5zbG90czsKKwliLT5vdXRzbG90cyA9IG91dHNsb3RzOworCWItPmFjdGl2 ZXNsb3RzID0gTlVMTDsKKwliLT5tYXhzbG90cyA9IGNhcGFjaXR5OworCisJYi0+bnZhbGlkID0g MDsKKwliLT5uZXh0ID0gMDsKKworCXJldHVybiBiOworfQorCisvKgorICogVHVwbGVCYXRjaFJl c2V0CisgKgkJUmVzZXQgYW4gZXhpc3RpbmcgVHVwbGVCYXRjaCBlbnZlbG9wZSB0byBlbXB0eS4K KyAqLwordm9pZAorVHVwbGVCYXRjaFJlc2V0KFR1cGxlQmF0Y2ggKmIsIGJvb2wgZHJvcF9zbG90 cykKK3sKKwlBc3NlcnQoYiAhPSBOVUxMKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgYi0+bWF4 c2xvdHM7IGkrKykKKwl7CisJCUV4ZWNDbGVhclR1cGxlKGItPmluc2xvdHNbaV0pOworCQlpZiAo ZHJvcF9zbG90cykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYi0+aW5zbG90c1tp XSk7CisJfQorCisJYi0+bnR1cGxlcyA9IDA7CisJYi0+bnZhbGlkID0gMDsKKwliLT5uZXh0ID0g MDsKKwliLT5hY3RpdmVzbG90cyA9IE5VTEw7Cit9CisKK3ZvaWQKK1R1cGxlQmF0Y2hVc2VJbnB1 dChUdXBsZUJhdGNoICpiLCBpbnQgbnZhbGlkKQoreworCWItPm1hdGVyaWFsaXplZCA9IHRydWU7 CisJYi0+YWN0aXZlc2xvdHMgPSBiLT5pbnNsb3RzOworCWItPm52YWxpZCA9IG52YWxpZDsKKwli LT5uZXh0ID0gMDsKK30KKwordm9pZAorVHVwbGVCYXRjaFVzZU91dHB1dChUdXBsZUJhdGNoICpi LCBpbnQgbnZhbGlkKQoreworCWItPm1hdGVyaWFsaXplZCA9IHRydWU7CisJYi0+YWN0aXZlc2xv dHMgPSBiLT5vdXRzbG90czsKKwliLT5udmFsaWQgPSBudmFsaWQ7CisJYi0+bmV4dCA9IDA7Cit9 CisKK2Jvb2wKK1R1cGxlQmF0Y2hJc1ZhbGlkKFR1cGxlQmF0Y2ggKmIpCit7CisJcmV0dXJuCWIg IT0gTlVMTCAmJgorCQkJYi0+bWF4c2xvdHMgPiAwICYmCisJCQliLT5pbnNsb3RzICE9IE5VTEwg JiYKKwkJCWItPm91dHNsb3RzICE9IE5VTEw7Cit9CisKK3ZvaWQKK1R1cGxlQmF0Y2hSZXdpbmQo VHVwbGVCYXRjaCAqYikKK3sKKwliLT5uZXh0ID0gMDsKK30KKworaW50CitUdXBsZUJhdGNoR2V0 TnVtVmFsaWQoVHVwbGVCYXRjaCAqYikKK3sKKwlyZXR1cm4gYi0+bnZhbGlkOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1NjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNTY2FuLmMKaW5kZXggOWY2OGJlMTdiOTkuLjUwMjNlYjY3NTZhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjU2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNTY2FuLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVz LmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY1NjYW4uaCIKICNpbmNsdWRlICJtaXNj YWRtaW4uaCIKQEAgLTE1NCwzICsxNTUsMzMgQEAgRXhlY1NjYW5SZVNjYW4oU2NhblN0YXRlICpu b2RlKQogCQl9CiAJfQogfQorCitib29sCitTY2FuQ2FuVXNlQmF0Y2hpbmcoU2NhblN0YXRlICpz Y2Fuc3RhdGUsIGludCBlZmxhZ3MpCit7CisJUmVsYXRpb24JcmVsYXRpb24gPSBzY2Fuc3RhdGUt PnNzX2N1cnJlbnRSZWxhdGlvbjsKKworCXJldHVybglleGVjdXRvcl9iYXRjaF9yb3dzID4gMSAm JgorCQkJKHNjYW5zdGF0ZS0+cHMuc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCkgJiYKKwkJ CSEoZWZsYWdzICYgRVhFQ19GTEFHX0JBQ0tXQVJEKSAmJgorCQkJcmVsYXRpb24gJiYgdGFibGVf c3VwcG9ydHNfYmF0Y2hpbmcocmVsYXRpb24pOworfQorCit2b2lkCitTY2FuUmVzZXRCYXRjaGlu ZyhTY2FuU3RhdGUgKnNjYW5zdGF0ZSwgYm9vbCBkcm9wKQoreworCVR1cGxlQmF0Y2ggKmIgPSBz Y2Fuc3RhdGUtPnBzLnBzX0JhdGNoOworCisJaWYgKGIpCisJeworCQlUdXBsZUJhdGNoUmVzZXQo YiwgZHJvcCk7CisJCWlmIChiLT5hbV9wYXlsb2FkKQorCQl7CisJCQl0YWJsZV9zY2FuX2VuZF9i YXRjaChzY2Fuc3RhdGUtPnNzX2N1cnJlbnRTY2FuRGVzYywKKwkJCQkJCQkJIGItPmFtX3BheWxv YWQpOworCQkJYi0+YW1fcGF5bG9hZCA9IE5VTEw7CisJCX0KKwkJaWYgKGRyb3ApCisJCQlwZnJl ZShiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL21lc29uLmJ1aWxkCmluZGV4IGRjNDViZTBiMmNlLi5l NWFmOTBlM2EwZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBi YWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdleGVjQW1pLmMnLAogICAnZXhlY0FzeW5jLmMn LAorICAnZXhlY0JhdGNoLmMnLAogICAnZXhlY0N1cnJlbnQuYycsCiAgICdleGVjRXhwci5jJywK ICAgJ2V4ZWNFeHBySW50ZXJwLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKaW5kZXgg YWYzYzc4OGNlOGIuLjA4ZDkzZTZmMGJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMK QEAgLTIwMyw2ICsyMDMsMTcxIEBAIEV4ZWNTZXFTY2FuRVBRKFBsYW5TdGF0ZSAqcHN0YXRlKQog CQkJCQkoRXhlY1NjYW5SZWNoZWNrTXRkKSBTZXFSZWNoZWNrKTsKIH0KIAorLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoJCQkJCQlCYXRjaCBTdXBwb3J0CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitTZXFO ZXh0QmF0Y2goU2VxU2NhblN0YXRlICpub2RlKQoreworCVRhYmxlU2NhbkRlc2Mgc2NhbmRlc2M7 CisJRVN0YXRlCSAgICplc3RhdGU7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CisKKwlBc3Nl cnQobm9kZS0+c3MucHMucHNfQmF0Y2ggIT0gTlVMTCk7CisKKwkvKgorCSAqIGdldCBpbmZvcm1h dGlvbiBmcm9tIHRoZSBlc3RhdGUgYW5kIHNjYW4gc3RhdGUKKwkgKi8KKwlzY2FuZGVzYyA9IG5v ZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYzsKKwllc3RhdGUgPSBub2RlLT5zcy5wcy5zdGF0ZTsK KwlkaXJlY3Rpb24gPSBlc3RhdGUtPmVzX2RpcmVjdGlvbjsKKwlBc3NlcnQoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXJlY3Rpb24pKTsKKworCWlmIChzY2FuZGVzYyA9PSBOVUxMKQorCXsKKwkJ LyoKKwkJICogV2UgcmVhY2ggaGVyZSBpZiB0aGUgc2NhbiBpcyBub3QgcGFyYWxsZWwsIG9yIGlm IHdlJ3JlIHNlcmlhbGx5CisJCSAqIGV4ZWN1dGluZyBhIHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0 byBiZSBwYXJhbGxlbC4KKwkJICovCisJCXNjYW5kZXNjID0gdGFibGVfYmVnaW5zY2FuKG5vZGUt PnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKKwkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwK KwkJCQkJCQkJICAgMCwgTlVMTCk7CisJCW5vZGUtPnNzLnNzX2N1cnJlbnRTY2FuRGVzYyA9IHNj YW5kZXNjOworCX0KKworCS8qIExhemlseSBjcmVhdGUgdGhlIEFNIGJhdGNoIHBheWxvYWQuICov CisJaWYgKG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5hbV9wYXlsb2FkID09IE5VTEwpCisJeworCQlj b25zdCBUYWJsZUFtUm91dGluZSAqdGFtIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IHNjYW5k ZXNjLT5yc19yZC0+cmRfdGFibGVhbTsKKworCQlBc3NlcnQodGFtICYmIHRhbS0+c2Nhbl9iZWdp bl9iYXRjaCk7CisJCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5hbV9wYXlsb2FkID0KKwkJCXRhYmxl X3NjYW5fYmVnaW5fYmF0Y2goc2NhbmRlc2MsIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5tYXhzbG90 cyk7CisJCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5vcHMgPSB0YWJsZV9iYXRjaF9jYWxsYmFja3Mo bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKTsKKwl9CisKKwlub2RlLT5zcy5wcy5wc19CYXRj aC0+bnR1cGxlcyA9CisJCXRhYmxlX3NjYW5fZ2V0bmV4dGJhdGNoKHNjYW5kZXNjLCBub2RlLT5z cy5wcy5wc19CYXRjaC0+YW1fcGF5bG9hZCwgZGlyZWN0aW9uKTsKKwlub2RlLT5zcy5wcy5wc19C YXRjaC0+bnZhbGlkID0gbm9kZS0+c3MucHMucHNfQmF0Y2gtPm50dXBsZXM7CisJbm9kZS0+c3Mu cHMucHNfQmF0Y2gtPm1hdGVyaWFsaXplZCA9IGZhbHNlOworCisJcmV0dXJuIG5vZGUtPnNzLnBz LnBzX0JhdGNoLT5udHVwbGVzID4gMDsKK30KKworc3RhdGljIGJvb2wKK1NlcU5leHRCYXRjaE1h dGVyaWFsaXplKFNlcVNjYW5TdGF0ZSAqbm9kZSkKK3sKKwlpZiAoU2VxTmV4dEJhdGNoKG5vZGUp KQorCXsKKwkJVHVwbGVCYXRjaE1hdGVyaWFsaXplQWxsKG5vZGUtPnNzLnBzLnBzX0JhdGNoKTsK KwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgVHVwbGVU YWJsZVNsb3QgKgorRXhlY1NlcVNjYW5CYXRjaFNsb3QoUGxhblN0YXRlICpwc3RhdGUpCit7CisJ U2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUoU2VxU2NhblN0YXRlLCBwc3RhdGUpOworCisJ QXNzZXJ0KHBzdGF0ZS0+c3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJQXNzZXJ0KHBz dGF0ZS0+cXVhbCA9PSBOVUxMKTsKKwlBc3NlcnQocHN0YXRlLT5wc19Qcm9qSW5mbyA9PSBOVUxM KTsKKworCXJldHVybiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90KCZub2RlLT5zcywKKwkJCQkJ CQkJCSAoRXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJ CQkJCQkJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVj U2VxU2NhbkJhdGNoU2xvdFdpdGhRdWFsKFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5T dGF0ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCS8qCisJICog VXNlIHBnX2Fzc3VtZSgpIGZvciAhPSBOVUxMIHRlc3RzIHRvIG1ha2UgdGhlIGNvbXBpbGVyIHJl YWxpemUgbm8KKwkgKiBydW50aW1lIGNoZWNrIGZvciB0aGUgZmllbGQgaXMgbmVlZGVkIGluIEV4 ZWNTY2FuRXh0ZW5kZWQoKS4KKwkgKi8KKwlBc3NlcnQocHN0YXRlLT5zdGF0ZS0+ZXNfZXBxX2Fj dGl2ZSA9PSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5xdWFsICE9IE5VTEwpOworCUFzc2Vy dChwc3RhdGUtPnBzX1Byb2pJbmZvID09IE5VTEwpOworCisJcmV0dXJuIEV4ZWNTY2FuRXh0ZW5k ZWRCYXRjaFNsb3QoJm5vZGUtPnNzLAorCQkJCQkJCQkJIChFeGVjU2NhbkFjY2Vzc0JhdGNoTXRk KSBTZXFOZXh0QmF0Y2hNYXRlcmlhbGl6ZSwKKwkJCQkJCQkJCSBwc3RhdGUtPnF1YWwsIE5VTEwp OworfQorCisvKgorICogVmFyaWFudCBvZiBFeGVjU2VxU2NhbigpIGJ1dCB3aGVuIHByb2plY3Rp b24gaXMgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2Nh bkJhdGNoU2xvdFdpdGhQcm9qZWN0KFBsYW5TdGF0ZSAqcHN0YXRlKQoreworCVNlcVNjYW5TdGF0 ZSAqbm9kZSA9IGNhc3ROb2RlKFNlcVNjYW5TdGF0ZSwgcHN0YXRlKTsKKworCUFzc2VydChwc3Rh dGUtPnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFzc2VydChwc3RhdGUtPnF1YWwg PT0gTlVMTCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cHNfUHJvakluZm8gIT0gTlVMTCk7CisKKwly ZXR1cm4gRXhlY1NjYW5FeHRlbmRlZEJhdGNoU2xvdCgmbm9kZS0+c3MsCisJCQkJCQkJCQkgKEV4 ZWNTY2FuQWNjZXNzQmF0Y2hNdGQpIFNlcU5leHRCYXRjaE1hdGVyaWFsaXplLAorCQkJCQkJCQkJ IE5VTEwsIHBzdGF0ZS0+cHNfUHJvakluZm8pOworfQorCisvKgorICogVmFyaWFudCBvZiBFeGVj U2VxU2NhbigpIGJ1dCB3aGVuIHF1YWwgZXZhbHVhdGlvbiBhbmQgcHJvamVjdGlvbiBhcmUKKyAq IHJlcXVpcmVkLgorICovCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgorRXhlY1NlcVNjYW5CYXRj aFNsb3RXaXRoUXVhbFByb2plY3QoUGxhblN0YXRlICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRl ICpub2RlID0gY2FzdE5vZGUoU2VxU2NhblN0YXRlLCBwc3RhdGUpOworCisJQXNzZXJ0KHBzdGF0 ZS0+c3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJcGdfYXNzdW1lKHBzdGF0ZS0+cXVh bCAhPSBOVUxMKTsKKwlwZ19hc3N1bWUocHN0YXRlLT5wc19Qcm9qSW5mbyAhPSBOVUxMKTsKKwor CXJldHVybiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90KCZub2RlLT5zcywKKwkJCQkJCQkJCSAo RXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkgU2VxTmV4dEJhdGNoTWF0ZXJpYWxpemUsCisJCQkJCQkJ CQkgcHN0YXRlLT5xdWFsLCBwc3RhdGUtPnBzX1Byb2pJbmZvKTsKK30KKworLyogQmF0Y2ggU2Vx U2NhbiBlbmFibGVtZW50IGFuZCBkaXNwYXRjaCAqLworc3RhdGljIHZvaWQKK1NlcVNjYW5Jbml0 QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUsIGludCBlZmxhZ3MpCit7CisJY29uc3Qg aW50IGNhcCA9IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CisJVHVwbGVEZXNjCXNjYW5kZXNjID0gUmVs YXRpb25HZXREZXNjcihzY2Fuc3RhdGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbik7CisKKwlzY2Fu c3RhdGUtPnNzLnBzLnBzX0JhdGNoID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVzYywgY2FwKTsK KworCS8qIENob29zZSBiYXRjaCB2YXJpYW50IHRvIHByZXNlcnZlIHlvdXIgc3BlY2lhbGl6YXRp b24gbWF0cml4ICovCisJaWYgKHNjYW5zdGF0ZS0+c3MucHMucXVhbCA9PSBOVUxMKQorCXsKKwkJ aWYgKHNjYW5zdGF0ZS0+c3MucHMucHNfUHJvakluZm8gPT0gTlVMTCkKKwkJeworCQkJc2NhbnN0 YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbkJhdGNoU2xvdDsKKwkJfQorCQll bHNlCisJCXsKKwkJCXNjYW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5C YXRjaFNsb3RXaXRoUHJvamVjdDsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAoc2NhbnN0YXRl LT5zcy5wcy5wc19Qcm9qSW5mbyA9PSBOVUxMKQorCQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4 ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWw7CisJCX0KKwkJZWxzZQor CQl7CisJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4ZWNTZXFTY2FuQmF0Y2hT bG90V2l0aFF1YWxQcm9qZWN0OworCQl9CisJfQorfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJRXhlY0lu aXRTZXFTY2FuCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTEsNiArMzc2LDcgQEAgU2VxU2NhblN0YXRlICoK IEV4ZWNJbml0U2VxU2NhbihTZXFTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIHsKIAlTZXFTY2FuU3RhdGUgKnNjYW5zdGF0ZTsKKwlib29sCXVzZV9iYXRjaGluZzsKIAog CS8qCiAJICogT25jZSB1cG9uIGEgdGltZSBpdCB3YXMgcG9zc2libGUgdG8gaGF2ZSBhbiBvdXRl clBsYW4gb2YgYSBTZXFTY2FuLCBidXQKQEAgLTI0MSw5ICs0MDcsMTIgQEAgRXhlY0luaXRTZXFT Y2FuKFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQkJCQkJCSBu b2RlLT5zY2FuLnNjYW5yZWxpZCwKIAkJCQkJCQkgZWZsYWdzKTsKIAorCXVzZV9iYXRjaGluZyA9 IFNjYW5DYW5Vc2VCYXRjaGluZygmc2NhbnN0YXRlLT5zcywgZWZsYWdzKTsKKwogCS8qIGFuZCBj cmVhdGUgc2xvdCB3aXRoIHRoZSBhcHByb3ByaWF0ZSByb3d0eXBlICovCiAJRXhlY0luaXRTY2Fu VHVwbGVTbG90KGVzdGF0ZSwgJnNjYW5zdGF0ZS0+c3MsCiAJCQkJCQkgIFJlbGF0aW9uR2V0RGVz Y3Ioc2NhbnN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRpb24pLAorCQkJCQkJICB1c2VfYmF0Y2hp bmcgPyAmVFRTT3BzSGVhcFR1cGxlIDoKIAkJCQkJCSAgdGFibGVfc2xvdF9jYWxsYmFja3Moc2Nh bnN0YXRlLT5zcy5zc19jdXJyZW50UmVsYXRpb24pKTsKIAogCS8qCkBAIC0yODAsNiArNDQ5LDkg QEAgRXhlY0luaXRTZXFTY2FuKFNlcVNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCQkJc2NhbnN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbldpdGhR dWFsUHJvamVjdDsKIAl9CiAKKwlpZiAodXNlX2JhdGNoaW5nKQorCQlTZXFTY2FuSW5pdEJhdGNo aW5nKHNjYW5zdGF0ZSwgZWZsYWdzKTsKKwogCXJldHVybiBzY2Fuc3RhdGU7CiB9CiAKQEAgLTI5 OSw2ICs0NzEsOCBAQCBFeGVjRW5kU2VxU2NhbihTZXFTY2FuU3RhdGUgKm5vZGUpCiAJICovCiAJ c2NhbkRlc2MgPSBub2RlLT5zcy5zc19jdXJyZW50U2NhbkRlc2M7CiAKKwlTY2FuUmVzZXRCYXRj aGluZygmbm9kZS0+c3MsIHRydWUpOworCiAJLyoKIAkgKiBjbG9zZSBoZWFwIHNjYW4KIAkgKi8K QEAgLTMyNyw3ICs1MDEsNyBAQCBFeGVjUmVTY2FuU2VxU2NhbihTZXFTY2FuU3RhdGUgKm5vZGUp CiAJaWYgKHNjYW4gIT0gTlVMTCkKIAkJdGFibGVfcmVzY2FuKHNjYW4sCQkvKiBzY2FuIGRlc2Mg Ki8KIAkJCQkJIE5VTEwpOwkJLyogbmV3IHNjYW4ga2V5cyAqLwotCisJU2NhblJlc2V0QmF0Y2hp bmcoJm5vZGUtPnNzLCBmYWxzZSk7CiAJRXhlY1NjYW5SZVNjYW4oKFNjYW5TdGF0ZSAqKSBub2Rl KTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCAzNmFkNzA4YjM2MC4uNTM1ZTI5 ZDc4MjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xNjUsMyArMTY1LDYgQEAgaW50 CQkJbm90aWZ5X2J1ZmZlcnMgPSAxNjsKIGludAkJCXNlcmlhbGl6YWJsZV9idWZmZXJzID0gMzI7 CiBpbnQJCQlzdWJ0cmFuc2FjdGlvbl9idWZmZXJzID0gMDsKIGludAkJCXRyYW5zYWN0aW9uX2J1 ZmZlcnMgPSAwOworCisvKiBleGVjdXRvciBiYXRjaGluZyAqLworaW50CQkJZXhlY3V0b3JfYmF0 Y2hfcm93cyA9IDY0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApp bmRleCBmMDI2MGU2ZTQxMi4uNGM0MjJjODU0ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CkBAIC0xMDA0LDYgKzEwMDQsMTUgQEAKICAgYm9vdF92YWwgPT4g J3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdleGVjdXRvcl9iYXRjaF9yb3dzJywgdHlwZSA9PiAn aW50JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnREVWRUxPUEVSX09QVElP TlMnLAorICBzaG9ydF9kZXNjID0+ICdOdW1iZXIgb2Ygcm93cyB0byBpbmNsdWRlIGluIGJhdGNo ZXMgZHVyaW5nIGV4ZWN1dGlvbi4nLAorICBmbGFncyA9PiAnR1VDX05PVF9JTl9TQU1QTEUnLAor ICB2YXJpYWJsZSA9PiAnZXhlY3V0b3JfYmF0Y2hfcm93cycsCisgIGJvb3RfdmFsID0+ICc2NCcs CisgIG1pbiA9PiAnMCcsCisgIG1heCA9PiAnMTAyNCcsCit9LAorCiB7IG5hbWUgPT4gJ2V4aXRf b25fZXJyb3InLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnRVJST1JfSEFORExJTkdfT1BUSU9OUycsCiAgIHNob3J0X2Rlc2MgPT4gJ1Rlcm1pbmF0 ZSBzZXNzaW9uIG9uIGFueSBlcnJvci4nLAogICB2YXJpYWJsZSA9PiAnRXhpdE9uQW55RXJyb3In LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oCmluZGV4IGUyNDE3NjUwYzVmLi5kNjE1NGQ1YWIxNSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaApAQCAtMzU0LDYgKzM1NCw3IEBAIGV4dGVybiBib29sIGhlYXBfZ2V0bmV4dHNsb3Qo VGFibGVTY2FuRGVzYyBzc2NhbiwKIGV4dGVybiB2b2lkICpoZWFwX2JlZ2luX2JhdGNoKFRhYmxl U2NhbkRlc2Mgc3NjYW4sIGludCBtYXhpdGVtcyk7CiBleHRlcm4gdm9pZCBoZWFwX2VuZF9iYXRj aChUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCk7CiBleHRlcm4gaW50IGhlYXBf Z2V0bmV4dGJhdGNoKFRhYmxlU2NhbkRlc2Mgc3NjYW4sIHZvaWQgKmFtX2JhdGNoLCBTY2FuRGly ZWN0aW9uIGRpcik7CitleHRlcm4gdm9pZCBoZWFwX21hdGVyaWFsaXplX2JhdGNoX2FsbCh2b2lk ICphbV9iYXRjaCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG4pOwogCiBleHRlcm4gdm9p ZCBoZWFwX3NldF90aWRyYW5nZShUYWJsZVNjYW5EZXNjIHNzY2FuLCBJdGVtUG9pbnRlciBtaW50 aWQsCiAJCQkJCQkJICBJdGVtUG9pbnRlciBtYXh0aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXgg NTg0YjU4MGY3YTEuLmJkZjczM2M4YjIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv dGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTIxLDYgKzIx LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0Lmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0Jh dGNoLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdl L3JlYWRfc3RyZWFtLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCkBAIC0zOSw2ICs0MCw3IEBA IHR5cGVkZWYgc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgQnVsa0luc2VydFN0YXRlRGF0YTsK IHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbyBJbmRleEluZm87CiB0eXBlZGVmIHN0cnVjdCBTYW1w bGVTY2FuU3RhdGUgU2FtcGxlU2NhblN0YXRlOwogdHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdGVJbmRl eFN0YXRlIFZhbGlkYXRlSW5kZXhTdGF0ZTsKK3R5cGVkZWYgc3RydWN0IFR1cGxlQmF0Y2hPcHMg VHVwbGVCYXRjaE9wczsKIAogLyoKICAqIEJpdG1hc2sgdmFsdWVzIGZvciB0aGUgZmxhZ3MgYXJn dW1lbnQgdG8gdGhlIHNjYW5fYmVnaW4gY2FsbGJhY2suCkBAIC0zMDEsNiArMzAzLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKiBSZXR1cm4gc2xvdCBpbXBsZW1lbnRhdGlv biBzdWl0YWJsZSBmb3Igc3RvcmluZyBhIHR1cGxlIG9mIHRoaXMgQU0uCiAJICovCiAJY29uc3Qg VHVwbGVUYWJsZVNsb3RPcHMgKigqc2xvdF9jYWxsYmFja3MpIChSZWxhdGlvbiByZWwpOworCWNv bnN0IFR1cGxlQmF0Y2hPcHMgKigqYmF0Y2hfY2FsbGJhY2tzKShSZWxhdGlvbiByZWwpOwogCiAK IAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM2MSw2ICszNjQsNyBAQCB0eXBlZGVmIHN0cnVjdCBU YWJsZUFtUm91dGluZQogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAl2b2lkCQkoKnNj YW5fZW5kX2JhdGNoKShUYWJsZVNjYW5EZXNjIHNzY2FuLCB2b2lkICphbV9iYXRjaCk7CiAKKwog CS8qLS0tLS0tLS0tLS0KIAkgKiBPcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBzY2Fubmlu ZyBmb3IgcmFuZ2VzIG9mIEl0ZW1Qb2ludGVycy4KIAkgKiBJbXBsZW1lbnRhdGlvbnMgbXVzdCBl aXRoZXIgcHJvdmlkZSBib3RoIG9mIHRoZXNlIGZ1bmN0aW9ucywgb3IgbmVpdGhlcgpAQCAtODcy LDYgKzg3NiwxNiBAQCBleHRlcm4gY29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnRhYmxlX3Nsb3Rf Y2FsbGJhY2tzKFJlbGF0aW9uIHJlbGF0aW9uKTsKICAqLwogZXh0ZXJuIFR1cGxlVGFibGVTbG90 ICp0YWJsZV9zbG90X2NyZWF0ZShSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqKnJlZ2xpc3QpOwog CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUdXBsZUJhdGNoIGZ1bmN0aW9ucy4KKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogUmV0dXJucyBjYWxsYmFja3MgZm9yIG1h bmlwdWxhdGluZyBUdXBsZUJhdGNoIGZvciB0dXBsZXMgb2YgdGhlIGdpdmVuCisgKiByZWxhdGlv bi4KKyAqLworZXh0ZXJuIGNvbnN0IFR1cGxlQmF0Y2hPcHMgKnRhYmxlX2JhdGNoX2NhbGxiYWNr cyhSZWxhdGlvbiByZWxhdGlvbik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRhYmxl IHNjYW4gZnVuY3Rpb25zLgpAQCAtMTA0Niw2ICsxMDYwLDE4IEBAIHRhYmxlX3NjYW5fZ2V0bmV4 dHNsb3QoVGFibGVTY2FuRGVzYyBzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxl VGFibGVTCiAJcmV0dXJuIHNzY2FuLT5yc19yZC0+cmRfdGFibGVhbS0+c2Nhbl9nZXRuZXh0c2xv dChzc2NhbiwgZGlyZWN0aW9uLCBzbG90KTsKIH0KIAorLyoKKyAqIHRhYmxlX3N1cHBvcnRzX2Jh dGNoaW5nCisgKgkJRG9lcyB0aGUgcmVsYXRpb24ncyBBTSBzdXBwb3J0IGJhdGNoaW5nPworICov CitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX3N1cHBvcnRzX2JhdGNoaW5nKFJlbGF0aW9uIHJl bGF0aW9uKQoreworCWNvbnN0IFRhYmxlQW1Sb3V0aW5lICp0YW0gPSByZWxhdGlvbi0+cmRfdGFi bGVhbTsKKworCXJldHVybiB0YW0tPnNjYW5fZ2V0bmV4dGJhdGNoICE9IE5VTEw7Cit9CisKIC8q CiAgKiB0YWJsZV9zY2FuX2JlZ2luX2JhdGNoCiAgKgkJQWxsb2NhdGUgQU0tb3duZWQgYmF0Y2gg cGF5bG9hZCB3aXRoIGNhcGFjaXR5ICdtYXhpdGVtcycuCkBAIC0yMTI4LDUgKzIxNTQsNiBAQCBl eHRlcm4gY29uc3QgVGFibGVBbVJvdXRpbmUgKkdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRs ZXIpOwogICovCiAKIGV4dGVybiBjb25zdCBUYWJsZUFtUm91dGluZSAqR2V0SGVhcGFtVGFibGVB bVJvdXRpbmUodm9pZCk7CitleHRlcm4gc3RydWN0IFR1cGxlQmF0Y2hPcHMgKkdldEhlYXBhbVR1 cGxlQmF0Y2hPcHModm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBUQUJMRUFNX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5oIGIvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0JhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjJkMDA2NjEwM2NlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y0JhdGNoLmgKQEAgLTAsMCArMSw5OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZXhl Y0JhdGNoLmgKKyAqCQlFeGVjdXRvciBiYXRjaCBlbnZlbG9wZSBmb3IgcGFzc2luZyB0dXBsZSBi YXRjaCBzdGF0ZSB1cHdhcmQKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNo LmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEVYRUNCQVRDSF9ICisjZGVmaW5l IEVYRUNCQVRDSF9ICisKKyNpbmNsdWRlICJleGVjdXRvci90dXB0YWJsZS5oIgorCisvKgorICog VHVwbGVCYXRjaE9wcyAtLSBBTS1zcGVjaWZpYyBoZWxwZXJzIGZvciBsYXp5IG1hdGVyaWFsaXph dGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHVwbGVCYXRjaE9wcworeworCXZvaWQgKCptYXRl cmlhbGl6ZV9hbGwpKHZvaWQgKmFtX3BheWxvYWQsCisJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKipk c3QsCisJCQkJCQkJaW50IG1heHNsb3RzKTsKK30gVHVwbGVCYXRjaE9wczsKKworLyoKKyAqIFR1 cGxlQmF0Y2gKKyAqCisgKiBFbnZlbG9wZSBmb3IgYSBiYXRjaCBvZiB0dXBsZXMgcHJvZHVjZWQg YnkgYSBwbGFuIG5vZGUgKGUuZy4sIFNlcVNjYW4pIHBlcgorICogY2FsbCB0byBhIGJhdGNoIHZh cmlhbnQgb2YgRXhlY1NlcVNjYW4oKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHVwbGVCYXRjaAor eworCXZvaWQJICAgKmFtX3BheWxvYWQ7CisJY29uc3QgVHVwbGVCYXRjaE9wcyAqb3BzOworCWlu dAkJCW50dXBsZXM7CQkJCS8qIG51bWJlciBvZiB0dXBsZXMgaW4gYW1fcGF5bG9hZCAqLworCWJv b2wJCW1hdGVyaWFsaXplZDsJCSAvKiB0dXBsZXMgaW4gc2xvdHMgdmFsaWQ/ICovCisJc3RydWN0 IFR1cGxlVGFibGVTbG90ICoqaW5zbG90czsgLyogc2xvdHMgZm9yIHR1cGxlcyByZWFkICJpbnRv IiBiYXRjaCAqLworCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqKm91dHNsb3RzOyAvKiBzbG90cyBm b3IgdHVwbGVzIGdvaW5nICJvdXQgb2YiCisJCQkJCQkJCQkgICAqIGJhdGNoICovCisJc3RydWN0 IFR1cGxlVGFibGVTbG90ICoqYWN0aXZlc2xvdHM7CisJaW50CQkJbWF4c2xvdHM7CisKKwlpbnQJ CW52YWxpZDsJCS8qIG51bWJlciBvZiByZXR1cm5hYmxlIHR1cGxlcyBpbiBvdXRzbG90cyAqLwor CWludAkJbmV4dDsJCS8qIDAtYmFzZWQgaW5kZXggb2YgbmV4dCB0dXBsZSB0byBiZSByZXR1cm5l ZCAqLworfSBUdXBsZUJhdGNoOworCisKKy8qIEhlbHBlcnMgKi8KK2V4dGVybiBUdXBsZUJhdGNo ICpUdXBsZUJhdGNoQ3JlYXRlKFR1cGxlRGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5KTsKK2V4 dGVybiB2b2lkIFR1cGxlQmF0Y2hSZXNldChUdXBsZUJhdGNoICpiLCBib29sIGRyb3Bfc2xvdHMp OworZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFVzZUlucHV0KFR1cGxlQmF0Y2ggKmIsIGludCBudmFs aWQpOworZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFVzZU91dHB1dChUdXBsZUJhdGNoICpiLCBpbnQg bnZhbGlkKTsKK2V4dGVybiBib29sIFR1cGxlQmF0Y2hJc1ZhbGlkKFR1cGxlQmF0Y2ggKmIpOwor ZXh0ZXJuIHZvaWQgVHVwbGVCYXRjaFJld2luZChUdXBsZUJhdGNoICpiKTsKK2V4dGVybiBpbnQg VHVwbGVCYXRjaEdldE51bVZhbGlkKFR1cGxlQmF0Y2ggKmIpOworCitzdGF0aWMgaW5saW5lIFR1 cGxlVGFibGVTbG90ICoKK1R1cGxlQmF0Y2hHZXROZXh0U2xvdChUdXBsZUJhdGNoICpiKQorewor CXJldHVybiBiLT5uZXh0IDwgYi0+bnZhbGlkID8gYi0+YWN0aXZlc2xvdHNbYi0+bmV4dCsrXSA6 IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNsb3QgKgorVHVwbGVCYXRjaEdl dFNsb3QoVHVwbGVCYXRjaCAqYiwgaW50IGluZGV4KQoreworCUFzc2VydChpbmRleCA8IGItPm52 YWxpZCk7CisJcmV0dXJuIGItPmFjdGl2ZXNsb3RzW2luZGV4XTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCitUdXBsZUJhdGNoU3RvcmVJbk91dChUdXBsZUJhdGNoICpiLCBpbnQgaW5kZXgsIFR1 cGxlVGFibGVTbG90ICpvdXQpCit7CisJQXNzZXJ0KFR1cGxlQmF0Y2hJc1ZhbGlkKGIpKTsKKwli LT5vdXRzbG90c1tpbmRleF0gPSBvdXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorVHVwbGVC YXRjaEhhc01vcmUoVHVwbGVCYXRjaCAqYikKK3sKKwlyZXR1cm4gYi0+YWN0aXZlc2xvdHMgJiYg Yi0+bmV4dCA8IGItPm52YWxpZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitUdXBsZUJhdGNo TWF0ZXJpYWxpemVBbGwoVHVwbGVCYXRjaCAqYikKK3sKKwlpZiAoYi0+bWF0ZXJpYWxpemVkKQor CQlyZXR1cm47CisKKwlpZiAoYi0+b3BzID09IE5VTEwgfHwgYi0+b3BzLT5tYXRlcmlhbGl6ZV9h bGwgPT0gTlVMTCkKKwkJZWxvZyhFUlJPUiwgIlR1cGxlQmF0Y2ggaGFzIG5vIHNsb3RzIGFuZCBu byBtYXRlcmlhbGl6ZV9hbGwgb3AiKTsKKworCWItPm9wcy0+bWF0ZXJpYWxpemVfYWxsKGItPmFt X3BheWxvYWQsIGItPmluc2xvdHMsIGItPm50dXBsZXMpOworCVR1cGxlQmF0Y2hVc2VJbnB1dChi LCBiLT5udHVwbGVzKTsKK30KKworI2VuZGlmCS8qIEVYRUNCQVRDSF9IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjU2Nhbi5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1NjYW4uaAppbmRleCAwMjhlZGI4ZDlmZC4uZDkxODUzMzFlMjIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNTY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY1NjYW4uaApAQCAtMjUxLDQgKzI1MSw3MyBAQCBFeGVjU2NhbkV4dGVuZGVkKFNjYW5TdGF0 ZSAqbm9kZSwKIAl9CiB9CiAKKy8qCisgKiBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90CisgKgkJ QmF0Y2gtZHJpdmVuIHZhcmlhbnQgb2YgRXhlY1NjYW5FeHRlbmRlZC4KKyAqCisgKiBSZXR1cm5z IG9uZSB0dXBsZSBhdCBhIHRpbWUgdG8gY2FsbGVycywgYnV0IGludGVybmFsbHkgZmV0Y2hlcyB0 dXBsZXMKKyAqIGluIGJhdGNoZXMgZnJvbSB0aGUgQU0gdmlhIGFjY2Vzc0JhdGNoTXRkLiBUaGlz IHJlZHVjZXMgcGVyLXR1cGxlIEFNCisgKiBjYWxsIG92ZXJoZWFkIHdoaWxlIHByZXNlcnZpbmcg dGhlIHNpbmdsZS1zbG90IGludGVyZmFjZSBleHBlY3RlZCBieQorICogcGFyZW50IG5vZGVzLgor ICoKKyAqIFRoZSBiYXRjaCBpcyByZWZpbGxlZCB3aGVuIGV4aGF1c3RlZCBieSBjYWxsaW5nIGFj Y2Vzc0JhdGNoTXRkLCB3aGljaAorICogcmV0dXJucyBmYWxzZSBhdCBlbmQtb2Ytc2Nhbi4KKyAq CisgKiBOb3RlOiBFUFEgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYmF0Y2ggcGF0aDsgY2FsbGVy cyBtdXN0IGVuc3VyZQorICogZXNfZXBxX2FjdGl2ZSBpcyBOVUxMIGJlZm9yZSB1c2luZyB0aGlz IGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKK0V4ZWNTY2Fu RXh0ZW5kZWRCYXRjaFNsb3QoU2NhblN0YXRlICpub2RlLAorCQkJCQkJICBFeGVjU2NhbkFjY2Vz c0JhdGNoTXRkIGFjY2Vzc0JhdGNoTXRkLAorCQkJCQkJICBFeHByU3RhdGUgKnF1YWwsIFByb2pl Y3Rpb25JbmZvICpwcm9qSW5mbykKK3sKKwlFeHByQ29udGV4dCAqZWNvbnRleHQgPSBub2RlLT5w cy5wc19FeHByQ29udGV4dDsKKwlUdXBsZUJhdGNoICpiID0gbm9kZS0+cHMucHNfQmF0Y2g7CisK KwkvKiBCYXRjaCBwYXRoIGRvZXMgbm90IHN1cHBvcnQgRVBRICovCisJQXNzZXJ0KG5vZGUtPnBz LnN0YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCUFzc2VydChUdXBsZUJhdGNoSXNWYWxp ZChiKSk7CisKKwlmb3IgKDs7KQorCXsKKwkJVHVwbGVUYWJsZVNsb3QgKmluOworCisJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogR2V0IG5leHQgaW5wdXQgc2xvdCBmcm9tIGN1cnJl bnQgYmF0Y2gsIG9yIHJlZmlsbCAqLworCQlpZiAoIVR1cGxlQmF0Y2hIYXNNb3JlKGIpKQorCQl7 CisJCQlpZiAoIWFjY2Vzc0JhdGNoTXRkKG5vZGUpKQorCQkJCXJldHVybiBOVUxMOworCQl9CisK KwkJaW4gPSBUdXBsZUJhdGNoR2V0TmV4dFNsb3QoYik7CisJCUFzc2VydChpbik7CisKKwkJLyog Tm8gcXVhbCwgbm8gcHJvamVjdGlvbjogZGlyZWN0IHJldHVybiAqLworCQlpZiAocXVhbCA9PSBO VUxMICYmIHByb2pJbmZvID09IE5VTEwpCisJCQlyZXR1cm4gaW47CisKKwkJUmVzZXRFeHByQ29u dGV4dChlY29udGV4dCk7CisJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IGluOworCisJCS8q IFF1YWwgb25seSAqLworCQlpZiAocHJvakluZm8gPT0gTlVMTCkKKwkJeworCQkJaWYgKHF1YWwg PT0gTlVMTCB8fCBFeGVjUXVhbChxdWFsLCBlY29udGV4dCkpCisJCQkJcmV0dXJuIGluOworCQkJ ZWxzZQorCQkJCUluc3RyQ291bnRGaWx0ZXJlZDEobm9kZSwgMSk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCS8qIFByb2plY3Rpb24gKHdpdGggb3Igd2l0aG91dCBxdWFsKSAqLworCQlpZiAocXVh bCA9PSBOVUxMIHx8IEV4ZWNRdWFsKHF1YWwsIGVjb250ZXh0KSkKKwkJCXJldHVybiBFeGVjUHJv amVjdChwcm9qSW5mbyk7CisJCWVsc2UKKwkJCUluc3RyQ291bnRGaWx0ZXJlZDEobm9kZSwgMSk7 CisJCS8qIGVsc2UgdHJ5IG5leHQgdHVwbGUgKi8KKwl9Cit9CisKICNlbmRpZgkJCQkJCQkvKiBF WEVDU0NBTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5o IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAppbmRleCA1OTI5YWFiYzM1My4uZTgy ZmQ2YzBjOGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKKysr IGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApAQCAtNTc4LDEyICs1NzgsMTYgQEAg ZXh0ZXJuIERhdHVtIEV4ZWNNYWtlRnVuY3Rpb25SZXN1bHRTZXQoU2V0RXhwclN0YXRlICpmY2Fj aGUsCiAgKi8KIHR5cGVkZWYgVHVwbGVUYWJsZVNsb3QgKigqRXhlY1NjYW5BY2Nlc3NNdGQpIChT Y2FuU3RhdGUgKm5vZGUpOwogdHlwZWRlZiBib29sICgqRXhlY1NjYW5SZWNoZWNrTXRkKSAoU2Nh blN0YXRlICpub2RlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Cit0eXBlZGVmIGJvb2wgKCpFeGVj U2NhbkFjY2Vzc0JhdGNoTXRkKShTY2FuU3RhdGUgKm5vZGUpOwogCiBleHRlcm4gVHVwbGVUYWJs ZVNsb3QgKkV4ZWNTY2FuKFNjYW5TdGF0ZSAqbm9kZSwgRXhlY1NjYW5BY2Nlc3NNdGQgYWNjZXNz TXRkLAogCQkJCQkJCQlFeGVjU2NhblJlY2hlY2tNdGQgcmVjaGVja010ZCk7CisKIGV4dGVybiB2 b2lkIEV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm8oU2NhblN0YXRlICpub2RlKTsKIGV4dGVy biB2b2lkIEV4ZWNBc3NpZ25TY2FuUHJvamVjdGlvbkluZm9XaXRoVmFybm8oU2NhblN0YXRlICpu b2RlLCBpbnQgdmFybm8pOwogZXh0ZXJuIHZvaWQgRXhlY1NjYW5SZVNjYW4oU2NhblN0YXRlICpu b2RlKTsKK2V4dGVybiBib29sIFNjYW5DYW5Vc2VCYXRjaGluZyhTY2FuU3RhdGUgKnNjYW5zdGF0 ZSwgaW50IGVmbGFncyk7CitleHRlcm4gdm9pZCBTY2FuUmVzZXRCYXRjaGluZyhTY2FuU3RhdGUg KnNjYW5zdGF0ZSwgYm9vbCBkcm9wKTsKIAogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlv bnMgaW4gZXhlY1R1cGxlcy5jCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBi L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IGRiNTU5YjM5YzRkLi5mNmJkNTlmMmFmMSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2luY2x1ZGUvbWlz Y2FkbWluLmgKQEAgLTI4OCw2ICsyODgsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIFZh Y3V1bUNvc3REZWxheTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgVmFjdXVtQ29zdEJhbGFuY2U7 CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBWYWN1dW1Db3N0QWN0aXZlOwogCitleHRlcm4gUEdE TExJTVBPUlQgaW50IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CiAKIC8qIGluIHV0aWxzL21pc2Mvc3Rh Y2tfZGVwdGguYyAqLwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGY4MDUzZDllNTcyLi42YTE5 MTIwMmNlZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1 ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGNvbnZlcnQuaCIKKyNpbmNs dWRlICJleGVjdXRvci9leGVjQmF0Y2guaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50 LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmgiCiAjaW5jbHVkZSAiZm1n ci5oIgpAQCAtMTIwNiw2ICsxMjA3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhblN0YXRlCiAJRXhw ckNvbnRleHQgKnBzX0V4cHJDb250ZXh0OwkvKiBub2RlJ3MgZXhwcmVzc2lvbi1ldmFsdWF0aW9u IGNvbnRleHQgKi8KIAlQcm9qZWN0aW9uSW5mbyAqcHNfUHJvakluZm87CS8qIGluZm8gZm9yIGRv aW5nIHR1cGxlIHByb2plY3Rpb24gKi8KIAorCS8qIEJhdGNoaW5nIHN0YXRlIGlmIG5vZGUgc3Vw cG9ydHMgaXQuICovCisJVHVwbGVCYXRjaCAqcHNfQmF0Y2g7CisKIAlib29sCQlhc3luY19jYXBh YmxlOwkvKiB0cnVlIGlmIG5vZGUgaXMgYXN5bmMtY2FwYWJsZSAqLwogCiAJLyoKLS0gCjIuNDcu MwoK --000000000000bc2c07064981e6d7 Content-Type: application/octet-stream; name="v5-0003-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Disposition: attachment; filename="v5-0003-Add-EXPLAIN-BATCHES-option-for-tuple-batching-sta.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz4x7nd2 RnJvbSBmMjgyZjVkZGUzYjRiYzU4YjJjZDdiNjZlNTU4MDNkZjI2ZTM1N2FhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFNhdCwgMjAgRGVjIDIwMjUgMjM6MDk6MzcgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 IDMvNV0gQWRkIEVYUExBSU4gKEJBVENIRVMpIG9wdGlvbiBmb3IgdHVwbGUgYmF0Y2hpbmcKIHN0 YXRpc3RpY3MKCkFkZCBhIEJBVENIRVMgb3B0aW9uIHRvIEVYUExBSU4gdGhhdCByZXBvcnRzIHBl ci1ub2RlIGJhdGNoIHN0YXRpc3RpY3MKd2hlbiBhIG5vZGUgdXNlcyBiYXRjaCBtb2RlIGV4ZWN1 dGlvbi4KCkZvciBub2RlcyB0aGF0IHN1cHBvcnQgYmF0Y2hpbmcgKGN1cnJlbnRseSBTZXFTY2Fu KSwgdGhpcyBzaG93cyB0aGUKbnVtYmVyIG9mIGJhdGNoZXMgZmV0Y2hlZCBhbG9uZyB3aXRoIGF2 ZXJhZ2UsIG1pbmltdW0sIGFuZCBtYXhpbXVtCnJvd3MgcGVyIGJhdGNoLiBPdXRwdXQgaXMgc3Vw cG9ydGVkIGluIGJvdGggdGV4dCBhbmQgbm9uLXRleHQgZm9ybWF0cy4KCkFkZCByZWdyZXNzaW9u IHRlc3RzIGNvdmVyaW5nIHRleHQgb3V0cHV0LCBKU09OIGZvcm1hdCwgZmlsdGVyZWQgc2NhbnMs CkxJTUlULCBhbmQgZGlzYWJsZWQgYmF0Y2hpbmcuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGZkFZX1pGcU44d2NBRU13NzFUOWhNX2tBOFV0eUhhWlpFWnR1VDNVeW9n QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgfCAzMCArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbl9zdGF0 ZS5jICB8ICAyICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jICAgICAgfCAzMSAr KysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICB8IDI0 ICsrKysrKy0tLS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmggIHwgIDEg Kwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmggICAgICB8IDE2ICsrKysrKystCiBz cmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50LmggICAgIHwgIDEgKwogc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9leHBsYWluLm91dCB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysr Kwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgICAgICB8IDI3ICsrKysrKysrKysr KysKIDkgZmlsZXMgY2hhbmdlZCwgMTc3IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBiN2JiMTExNjg4Yy4uZjNkNTIxZTFmOTMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9l eHBsYWluX2Zvcm1hdC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKICNp bmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0JhdGNo LmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCiAj aW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKQEAgLTUxNyw2ICs1MTgsOCBAQCBFeHBsYWluT25l UGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxhaW5T dGF0ZSAqZXMsCiAJCWluc3RydW1lbnRfb3B0aW9uIHw9IElOU1RSVU1FTlRfQlVGRkVSUzsKIAlp ZiAoZXMtPndhbCkKIAkJaW5zdHJ1bWVudF9vcHRpb24gfD0gSU5TVFJVTUVOVF9XQUw7CisJaWYg KGVzLT5iYXRjaGVzKQorCQlpbnN0cnVtZW50X29wdGlvbiB8PSBJTlNUUlVNRU5UX0JBVENIRVM7 CiAKIAkvKgogCSAqIFdlIGFsd2F5cyBjb2xsZWN0IHRpbWluZyBmb3IgdGhlIGVudGlyZSBzdGF0 ZW1lbnQsIGV2ZW4gd2hlbiBub2RlLWxldmVsCkBAIC0yMjk0LDYgKzIyOTcsMzMgQEAgRXhwbGFp bk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJc2hvd19idWZm ZXJfdXNhZ2UoZXMsICZwbGFuc3RhdGUtPmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAlpZiAoZXMt PndhbCAmJiBwbGFuc3RhdGUtPmluc3RydW1lbnQpCiAJCXNob3dfd2FsX3VzYWdlKGVzLCAmcGxh bnN0YXRlLT5pbnN0cnVtZW50LT53YWx1c2FnZSk7CisJaWYgKGVzLT5iYXRjaGVzICYmIHBsYW5z dGF0ZS0+cHNfQmF0Y2gpCisJeworCQlUdXBsZUJhdGNoICpiID0gcGxhbnN0YXRlLT5wc19CYXRj aDsKKworCQlpZiAoYi0+c3RhdF9iYXRjaGVzID4gMCkKKwkJeworCQkJaWYgKGVzLT5mb3JtYXQg PT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwkJCXsKKwkJCQlFeHBsYWluSW5kZW50VGV4dChlcyk7 CisJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAorCQkJCQkJCQkgIkJhdGNoZXM6ICVsbGQg IEF2ZyBSb3dzOiAlLjFmICBNYXg6ICVkICBNaW46ICVkXG4iLAorCQkJCQkJCQkgKGxvbmcgbG9u ZykgYi0+c3RhdF9iYXRjaGVzLAorCQkJCQkJCQkgVHVwbGVCYXRjaEF2Z1Jvd3MoYiksCisJCQkJ CQkJCSBiLT5zdGF0X21heF9yb3dzLAorCQkJCQkJCQkgYi0+c3RhdF9taW5fcm93cyA9PSBJTlRf TUFYID8gMCA6IGItPnN0YXRfbWluX3Jvd3MpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUV4 cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkJhdGNoZXMiLCBOVUxMLCBiLT5zdGF0X2JhdGNoZXMsIGVz KTsKKwkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQXZlcmFnZSBCYXRjaCBSb3dzIiwgTlVMTCwK KwkJCQkJCQkJCSBUdXBsZUJhdGNoQXZnUm93cyhiKSwgMSwgZXMpOworCQkJCUV4cGxhaW5Qcm9w ZXJ0eUludGVnZXIoIk1heCBCYXRjaCBSb3dzIiwgTlVMTCwgYi0+c3RhdF9tYXhfcm93cywgZXMp OworCQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIk1pbiBCYXRjaCBSb3dzIiwgTlVMTCwKKwkJ CQkJCQkJCSAgIGItPnN0YXRfbWluX3Jvd3MgPT0gSU5UX01BWCA/IDAgOiBiLT5zdGF0X21pbl9y b3dzLCBlcyk7CisJCQl9CisJCX0KKwl9CiAKIAkvKiBQcmVwYXJlIHBlci13b3JrZXIgYnVmZmVy L1dBTCB1c2FnZSAqLwogCWlmIChlcy0+d29ya2Vyc19zdGF0ZSAmJiAoZXMtPmJ1ZmZlcnMgfHwg ZXMtPndhbCkgJiYgZXMtPnZlcmJvc2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluX3N0YXRlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluX3N0YXRlLmMK aW5kZXggODAzYzc0ZGQxNzguLmFkNWIyMjNlZGU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluX3N0YXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bl9zdGF0ZS5jCkBAIC0xNTksNiArMTU5LDggQEAgUGFyc2VFeHBsYWluT3B0aW9uTGlzdChFeHBs YWluU3RhdGUgKmVzLCBMaXN0ICpvcHRpb25zLCBQYXJzZVN0YXRlICpwc3RhdGUpCiAJCQkJCQkJ CSJFWFBMQUlOIiwgb3B0LT5kZWZuYW1lLCBwKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBvcHQtPmxvY2F0aW9uKSkpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRl Zm5hbWUsICJiYXRjaGVzIikgPT0gMCkKKwkJCWVzLT5iYXRjaGVzID0gZGVmR2V0Qm9vbGVhbihv cHQpOwogCQllbHNlIGlmICghQXBwbHlFeHRlbnNpb25FeHBsYWluT3B0aW9uKGVzLCBvcHQsIHBz dGF0ZSkpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQmF0Y2guYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNCYXRjaC5jCmluZGV4IDFlZjQxMTdiODdjLi5lZDU0ZTMx NjVjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0JhdGNoLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCQlB bGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBUdXBsZUJhdGNoIGVudmVsb3BlLgogICovCiBU dXBsZUJhdGNoICoKLVR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNjIHNjYW5kZXNjLCBpbnQgY2Fw YWNpdHkpCitUdXBsZUJhdGNoQ3JlYXRlKFR1cGxlRGVzYyBzY2FuZGVzYywgaW50IGNhcGFjaXR5 LCBib29sIHRyYWNrX3N0YXRzKQogewogCVR1cGxlQmF0Y2ggICpiOwogCVR1cGxlVGFibGVTbG90 ICoqaW5zbG90cywKQEAgLTQ3LDYgKzQ3LDEyIEBAIFR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNj IHNjYW5kZXNjLCBpbnQgY2FwYWNpdHkpCiAJYi0+bnZhbGlkID0gMDsKIAliLT5uZXh0ID0gMDsK IAorCWItPnRyYWNrX3N0YXRzID0gdHJhY2tfc3RhdHM7CisJYi0+c3RhdF9iYXRjaGVzID0gMDsK KwliLT5zdGF0X3Jvd3MgPSAwOworCWItPnN0YXRfbWF4X3Jvd3MgPSAwOworCWItPnN0YXRfbWlu X3Jvd3MgPSBJTlRfTUFYOworCiAJcmV0dXJuIGI7CiB9CiAKQEAgLTExMCwzICsxMTYsMjYgQEAg VHVwbGVCYXRjaEdldE51bVZhbGlkKFR1cGxlQmF0Y2ggKmIpCiB7CiAJcmV0dXJuIGItPm52YWxp ZDsKIH0KKwordm9pZAorVHVwbGVCYXRjaFJlY29yZFN0YXRzKFR1cGxlQmF0Y2ggKmIsIGludCBy b3dzKQoreworCWlmICghYi0+dHJhY2tfc3RhdHMpCisJCXJldHVybjsKKworCWItPnN0YXRfYmF0 Y2hlcysrOworCWItPnN0YXRfcm93cyArPSByb3dzOworCWlmIChyb3dzID4gYi0+c3RhdF9tYXhf cm93cykKKwkJYi0+c3RhdF9tYXhfcm93cyA9IHJvd3M7CisJaWYgKHJvd3MgPCBiLT5zdGF0X21p bl9yb3dzICYmIHJvd3MgPiAwKQorCQliLT5zdGF0X21pbl9yb3dzID0gcm93czsKK30KKworZG91 YmxlCitUdXBsZUJhdGNoQXZnUm93cyhUdXBsZUJhdGNoICpiKQoreworCWlmIChiLT5zdGF0X2Jh dGNoZXMgPT0gMCkKKwkJcmV0dXJuIDAuMDsKKworCXJldHVybiAoZG91YmxlKSBiLT5zdGF0X3Jv d3MgLyBiLT5zdGF0X2JhdGNoZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwppbmRl eCAwOGQ5M2U2ZjBiZS4uZjM2YjMxZDRmYmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVTZXFzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4u YwpAQCAtMjEzLDggKzIxMyw5IEBAIFNlcU5leHRCYXRjaChTZXFTY2FuU3RhdGUgKm5vZGUpCiAJ VGFibGVTY2FuRGVzYyBzY2FuZGVzYzsKIAlFU3RhdGUJICAgKmVzdGF0ZTsKIAlTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbjsKKwlUdXBsZUJhdGNoICpiID0gbm9kZS0+c3MucHMucHNfQmF0Y2g7CiAK LQlBc3NlcnQobm9kZS0+c3MucHMucHNfQmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KGIgIT0gTlVM TCk7CiAKIAkvKgogCSAqIGdldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlc3RhdGUgYW5kIHNjYW4g c3RhdGUKQEAgLTIzNywyMiArMjM4LDIxIEBAIFNlcU5leHRCYXRjaChTZXFTY2FuU3RhdGUgKm5v ZGUpCiAJfQogCiAJLyogTGF6aWx5IGNyZWF0ZSB0aGUgQU0gYmF0Y2ggcGF5bG9hZC4gKi8KLQlp ZiAobm9kZS0+c3MucHMucHNfQmF0Y2gtPmFtX3BheWxvYWQgPT0gTlVMTCkKKwlpZiAoYi0+YW1f cGF5bG9hZCA9PSBOVUxMKQogCXsKIAkJY29uc3QgVGFibGVBbVJvdXRpbmUgKnRhbSBQR19VU0VE X0ZPUl9BU1NFUlRTX09OTFkgPSBzY2FuZGVzYy0+cnNfcmQtPnJkX3RhYmxlYW07CiAKIAkJQXNz ZXJ0KHRhbSAmJiB0YW0tPnNjYW5fYmVnaW5fYmF0Y2gpOwotCQlub2RlLT5zcy5wcy5wc19CYXRj aC0+YW1fcGF5bG9hZCA9Ci0JCQl0YWJsZV9zY2FuX2JlZ2luX2JhdGNoKHNjYW5kZXNjLCBub2Rl LT5zcy5wcy5wc19CYXRjaC0+bWF4c2xvdHMpOwotCQlub2RlLT5zcy5wcy5wc19CYXRjaC0+b3Bz ID0gdGFibGVfYmF0Y2hfY2FsbGJhY2tzKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbik7CisJ CWItPmFtX3BheWxvYWQgPSB0YWJsZV9zY2FuX2JlZ2luX2JhdGNoKHNjYW5kZXNjLCBiLT5tYXhz bG90cyk7CisJCWItPm9wcyA9IHRhYmxlX2JhdGNoX2NhbGxiYWNrcyhub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24pOwogCX0KIAotCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udHVwbGVzID0KLQkJ dGFibGVfc2Nhbl9nZXRuZXh0YmF0Y2goc2NhbmRlc2MsIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5h bV9wYXlsb2FkLCBkaXJlY3Rpb24pOwotCW5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udmFsaWQgPSBu b2RlLT5zcy5wcy5wc19CYXRjaC0+bnR1cGxlczsKLQlub2RlLT5zcy5wcy5wc19CYXRjaC0+bWF0 ZXJpYWxpemVkID0gZmFsc2U7CisJYi0+bnR1cGxlcyA9IHRhYmxlX3NjYW5fZ2V0bmV4dGJhdGNo KHNjYW5kZXNjLCBiLT5hbV9wYXlsb2FkLCBkaXJlY3Rpb24pOworCWItPm52YWxpZCA9IGItPm50 dXBsZXM7CisJYi0+bWF0ZXJpYWxpemVkID0gZmFsc2U7CisJVHVwbGVCYXRjaFJlY29yZFN0YXRz KGIsIGItPm50dXBsZXMpOwogCi0JcmV0dXJuIG5vZGUtPnNzLnBzLnBzX0JhdGNoLT5udHVwbGVz ID4gMDsKKwlyZXR1cm4gYi0+bnR1cGxlcyA+IDA7CiB9CiAKIHN0YXRpYyBib29sCkBAIC0zNDAs OCArMzQwLDEwIEBAIFNlcVNjYW5Jbml0QmF0Y2hpbmcoU2VxU2NhblN0YXRlICpzY2Fuc3RhdGUs IGludCBlZmxhZ3MpCiB7CiAJY29uc3QgaW50IGNhcCA9IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CiAJ VHVwbGVEZXNjCXNjYW5kZXNjID0gUmVsYXRpb25HZXREZXNjcihzY2Fuc3RhdGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbik7CisJRVN0YXRlICplc3RhdGUgPSBzY2Fuc3RhdGUtPnNzLnBzLnN0YXRl OworCWJvb2wgdHJhY2tfc3RhdHMgPSBlc3RhdGUtPmVzX2luc3RydW1lbnQgJiYgKGVzdGF0ZS0+ ZXNfaW5zdHJ1bWVudCAmIElOU1RSVU1FTlRfQkFUQ0hFUyk7CiAKLQlzY2Fuc3RhdGUtPnNzLnBz LnBzX0JhdGNoID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVzYywgY2FwKTsKKwlzY2Fuc3RhdGUt PnNzLnBzLnBzX0JhdGNoID0gVHVwbGVCYXRjaENyZWF0ZShzY2FuZGVzYywgY2FwLCB0cmFja19z dGF0cyk7CiAKIAkvKiBDaG9vc2UgYmF0Y2ggdmFyaWFudCB0byBwcmVzZXJ2ZSB5b3VyIHNwZWNp YWxpemF0aW9uIG1hdHJpeCAqLwogCWlmIChzY2Fuc3RhdGUtPnNzLnBzLnF1YWwgPT0gTlVMTCkK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAppbmRleCAwYjY5NWY3ZDgxMi4uMGE5OWYw ZjIzNDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluX3N0YXRlLmgKQEAgLTU1LDYgKzU1LDcg QEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0YXRlCiAJYm9vbAkJbWVtb3J5OwkJCS8qIHByaW50 IHBsYW5uZXIncyBtZW1vcnkgdXNhZ2UgaW5mb3JtYXRpb24gKi8KIAlib29sCQlzZXR0aW5nczsJ CS8qIHByaW50IG1vZGlmaWVkIHNldHRpbmdzICovCiAJYm9vbAkJZ2VuZXJpYzsJCS8qIGdlbmVy YXRlIGEgZ2VuZXJpYyBwbGFuICovCisJYm9vbAkJYmF0Y2hlczsJCS8qIHByaW50IGJhdGNoIHN0 YXRpc3RpY3MgKi8KIAlFeHBsYWluU2VyaWFsaXplT3B0aW9uIHNlcmlhbGl6ZTsJLyogc2VyaWFs aXplIHRoZSBxdWVyeSdzIG91dHB1dD8gKi8KIAlFeHBsYWluRm9ybWF0IGZvcm1hdDsJCS8qIG91 dHB1dCBmb3JtYXQgKi8KIAkvKiBzdGF0ZSBmb3Igb3V0cHV0IGZvcm1hdHRpbmcgLS0tIG5vdCBy ZXNldCBmb3IgZWFjaCBuZXcgcGxhbiB0cmVlICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjQmF0Y2guaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNCYXRjaC5oCmlu ZGV4IDJkMDA2NjEwM2NlLi4xZWZjMTk0ZDhmZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0JhdGNoLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0JhdGNoLmgK QEAgLTEzLDYgKzEzLDggQEAKICNpZm5kZWYgRVhFQ0JBVENIX0gKICNkZWZpbmUgRVhFQ0JBVENI X0gKIAorI2luY2x1ZGUgPGxpbWl0cy5oPgorCiAjaW5jbHVkZSAiZXhlY3V0b3IvdHVwdGFibGUu aCIKIAogLyoKQEAgLTQ1LDExICs0NywxOCBAQCB0eXBlZGVmIHN0cnVjdCBUdXBsZUJhdGNoCiAK IAlpbnQJCW52YWxpZDsJCS8qIG51bWJlciBvZiByZXR1cm5hYmxlIHR1cGxlcyBpbiBvdXRzbG90 cyAqLwogCWludAkJbmV4dDsJCS8qIDAtYmFzZWQgaW5kZXggb2YgbmV4dCB0dXBsZSB0byBiZSBy ZXR1cm5lZCAqLworCisJLyogU3RhdGlzdGljcyAocG9wdWxhdGVkIHdoZW4gRVhQTEFJTiBBTkFM WVpFIEJBVENIRVMpICovCisJYm9vbAl0cmFja19zdGF0czsJLyogd2hldGhlciB0byBjb2xsZWN0 IHN0YXRzICovCisJaW50NjQJc3RhdF9iYXRjaGVzOwkvKiB0b3RhbCBudW1iZXIgb2YgYmF0Y2hl cyBmZXRjaGVkICovCisJaW50NjQJc3RhdF9yb3dzOwkJLyogdG90YWwgdHVwbGVzIGFjcm9zcyBh bGwgYmF0Y2hlcyAqLworCWludAkJc3RhdF9tYXhfcm93czsJLyogbWF4IHJvd3MgaW4gYW55IHNp bmdsZSBiYXRjaCAqLworCWludAkJc3RhdF9taW5fcm93czsJLyogbWluIHJvd3MgaW4gYW55IHNp bmdsZSBiYXRjaCAobm9uLXplcm8pICovCiB9IFR1cGxlQmF0Y2g7CiAKIAogLyogSGVscGVycyAq LwotZXh0ZXJuIFR1cGxlQmF0Y2ggKlR1cGxlQmF0Y2hDcmVhdGUoVHVwbGVEZXNjIHNjYW5kZXNj LCBpbnQgY2FwYWNpdHkpOworZXh0ZXJuIFR1cGxlQmF0Y2ggKlR1cGxlQmF0Y2hDcmVhdGUoVHVw bGVEZXNjIHNjYW5kZXNjLCBpbnQgY2FwYWNpdHksIGJvb2wgdHJhY2tfc3RhdHMpOwogZXh0ZXJu IHZvaWQgVHVwbGVCYXRjaFJlc2V0KFR1cGxlQmF0Y2ggKmIsIGJvb2wgZHJvcF9zbG90cyk7CiBl eHRlcm4gdm9pZCBUdXBsZUJhdGNoVXNlSW5wdXQoVHVwbGVCYXRjaCAqYiwgaW50IG52YWxpZCk7 CiBleHRlcm4gdm9pZCBUdXBsZUJhdGNoVXNlT3V0cHV0KFR1cGxlQmF0Y2ggKmIsIGludCBudmFs aWQpOwpAQCAtOTYsNCArMTA1LDkgQEAgVHVwbGVCYXRjaE1hdGVyaWFsaXplQWxsKFR1cGxlQmF0 Y2ggKmIpCiAJVHVwbGVCYXRjaFVzZUlucHV0KGIsIGItPm50dXBsZXMpOwogfQogCisvKiA9PT0g QmF0Y2hpbmcgc3RhdHMuID09PSovCisKK2V4dGVybiB2b2lkIFR1cGxlQmF0Y2hSZWNvcmRTdGF0 cyhUdXBsZUJhdGNoICpiLCBpbnQgcm93cyk7CitleHRlcm4gZG91YmxlIFR1cGxlQmF0Y2hBdmdS b3dzKFR1cGxlQmF0Y2ggKmIpOworCiAjZW5kaWYJLyogRVhFQ0JBVENIX0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2luc3RydW1lbnQuaAppbmRleCA5NzU5ZjNlYTVkOC4uYmVlNjliNGFjOGYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnQuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9pbnN0cnVtZW50LmgKQEAgLTY0LDYgKzY0LDcgQEAgdHlwZWRlZiBlbnVtIEluc3Ry dW1lbnRPcHRpb24KIAlJTlNUUlVNRU5UX0JVRkZFUlMgPSAxIDw8IDEsCS8qIG5lZWRzIGJ1ZmZl ciB1c2FnZSAqLwogCUlOU1RSVU1FTlRfUk9XUyA9IDEgPDwgMiwJLyogbmVlZHMgcm93IGNvdW50 ICovCiAJSU5TVFJVTUVOVF9XQUwgPSAxIDw8IDMsCS8qIG5lZWRzIFdBTCB1c2FnZSAqLworCUlO U1RSVU1FTlRfQkFUQ0hFUyA9IDEgPDwgNCwgLyogbmVlZHMgYmF0Y2hlcyAqLwogCUlOU1RSVU1F TlRfQUxMID0gUEdfSU5UMzJfTUFYCiB9IEluc3RydW1lbnRPcHRpb247CiAKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2V4cGxhaW4ub3V0CmluZGV4IDdjMWYyNmIxODJjLi4xYmVjNTllZWE5ZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4ub3V0CkBAIC04MjIsMyArODIyLDYxIEBAIHNl bGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixjb3N0cyBv ZmYpIHNlbGVjdCBzdW0obikgb3ZlCiAoOSByb3dzKQogCiByZXNldCB3b3JrX21lbTsKKy0tIFRl c3QgQkFUQ0hFUyBvcHRpb24KK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7CitjcmVhdGUg dGFibGUgYmF0Y2hfdGVzdCAoYSBpbnQsIGIgdGV4dCk7CitpbnNlcnQgaW50byBiYXRjaF90ZXN0 IHNlbGVjdCBpLCByZXBlYXQoJ3gnLCAxMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAw KSBpOworYW5hbHl6ZSBiYXRjaF90ZXN0OworLS0gQmFzaWMgYmF0Y2ggc3RhdHMgb3V0cHV0Citz ZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMg b2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0Y2hfdGVzdCcpOworICAgICAgICAgICAg ICAgICAgICAgICAgIGV4cGxhaW5fZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIGJhdGNoX3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5OIHJvd3M9 Ti5OIGxvb3BzPU4pCisgICBCYXRjaGVzOiBOICBBdmcgUm93czogTi5OICBNYXg6IE4gIE1pbjog TgorIFBsYW5uaW5nIFRpbWU6IE4uTiBtcworIEV4ZWN1dGlvbiBUaW1lOiBOLk4gbXMKKyg0IHJv d3MpCisKKy0tIFdpdGggZmlsdGVyCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4cGxhaW4gKGFu YWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gYmF0 Y2hfdGVzdCB3aGVyZSBhID4gNTAwMCcpOworICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxh aW5fZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9u IGJhdGNoX3Rlc3QgKGFjdHVhbCB0aW1lPU4uTi4uTi5OIHJvd3M9Ti5OIGxvb3BzPU4pCisgICBG aWx0ZXI6IChhID4gTikKKyAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IE4KKyAgIEJhdGNoZXM6 IE4gIEF2ZyBSb3dzOiBOLk4gIE1heDogTiAgTWluOiBOCisgUGxhbm5pbmcgVGltZTogTi5OIG1z CisgRXhlY3V0aW9uIFRpbWU6IE4uTiBtcworKDYgcm93cykKKworLS0gV2l0aCBMSU1JVCAtIHBh cnRpYWwgc2NhbiBzaG93cyBmZXdlciBiYXRjaGVzCitzZWxlY3QgZXhwbGFpbl9maWx0ZXIoJ2V4 cGxhaW4gKGFuYWx5emUsIGJhdGNoZXMsIGJ1ZmZlcnMgb2ZmLCBjb3N0cyBvZmYpIHNlbGVjdCAq IGZyb20gYmF0Y2hfdGVzdCBsaW1pdCAxMDAnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBleHBsYWluX2ZpbHRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBMaW1pdCAoYWN0dWFsIHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikKKyAgIC0+ ICBTZXEgU2NhbiBvbiBiYXRjaF90ZXN0IChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4uTiBs b29wcz1OKQorICAgICAgICAgQmF0Y2hlczogTiAgQXZnIFJvd3M6IE4uTiAgTWF4OiBOICBNaW46 IE4KKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoNSBy b3dzKQorCistLSBCYXRjaGluZyBkaXNhYmxlZCAtIG5vIGJhdGNoIGxpbmUKK3NldCBleGVjdXRv cl9iYXRjaF9yb3dzID0gMDsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6 ZSwgYmF0Y2hlcywgYnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90 ZXN0Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl9maWx0ZXIgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gYmF0Y2hfdGVzdCAoYWN0dWFs IHRpbWU9Ti5OLi5OLk4gcm93cz1OLk4gbG9vcHM9TikKKyBQbGFubmluZyBUaW1lOiBOLk4gbXMK KyBFeGVjdXRpb24gVGltZTogTi5OIG1zCisoMyByb3dzKQorCityZXNldCBleGVjdXRvcl9iYXRj aF9yb3dzOworLS0gSlNPTiBmb3JtYXQKK3NlbGVjdCBleHBsYWluX2ZpbHRlcl90b19qc29uKCdl eHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgZm9ybWF0IGpzb24pIHNlbGVj dCAqIGZyb20gYmF0Y2hfdGVzdCB3aGVyZSBhIDwgMTAwMCcpICM+ICd7MCxQbGFuLEJhdGNoZXN9 JzsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAwCisoMSByb3cpCisKK2Ryb3AgdGFibGUgYmF0 Y2hfdGVzdDsKK3Jlc2V0IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9leHBsYWluLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4u c3FsCmluZGV4IGViZGFiNDI2MDRiLi43ODgxYzY3NDQ5NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFp bi5zcWwKQEAgLTE4OCwzICsxODgsMzAgQEAgc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWlu IChhbmFseXplLGJ1ZmZlcnMgb2ZmLGNvc3RzIG9mZikgc2VsZWN0IHN1bShuKSBvdmUKIC0tIFRl c3QgdHVwbGVzdG9yZSBzdG9yYWdlIHVzYWdlIGluIFdpbmRvdyBhZ2dyZWdhdGUgKG1lbW9yeSBh bmQgZGlzayBjYXNlLCBmaW5hbCByZXN1bHQgaXMgZGlzaykKIHNlbGVjdCBleHBsYWluX2ZpbHRl cignZXhwbGFpbiAoYW5hbHl6ZSxidWZmZXJzIG9mZixjb3N0cyBvZmYpIHNlbGVjdCBzdW0obikg b3ZlcihwYXJ0aXRpb24gYnkgbSkgZnJvbSAoU0VMRUNUIG4gPCAzIGFzIG0sIG4gZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMSwyNTAwKSBhKG4pKScpOwogcmVzZXQgd29ya19tZW07CisKKy0tIFRlc3Qg QkFUQ0hFUyBvcHRpb24KK3NldCBleGVjdXRvcl9iYXRjaF9yb3dzID0gNjQ7CisKK2NyZWF0ZSB0 YWJsZSBiYXRjaF90ZXN0IChhIGludCwgYiB0ZXh0KTsKK2luc2VydCBpbnRvIGJhdGNoX3Rlc3Qg c2VsZWN0IGksIHJlcGVhdCgneCcsIDEwMCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAp IGk7CithbmFseXplIGJhdGNoX3Rlc3Q7CisKKy0tIEJhc2ljIGJhdGNoIHN0YXRzIG91dHB1dAor c2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBidWZmZXJz IG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3QnKTsKKworLS0gV2l0aCBm aWx0ZXIKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywg YnVmZmVycyBvZmYsIGNvc3RzIG9mZikgc2VsZWN0ICogZnJvbSBiYXRjaF90ZXN0IHdoZXJlIGEg PiA1MDAwJyk7CisKKy0tIFdpdGggTElNSVQgLSBwYXJ0aWFsIHNjYW4gc2hvd3MgZmV3ZXIgYmF0 Y2hlcworc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLCBiYXRjaGVzLCBi dWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3QgbGltaXQgMTAw Jyk7CisKKy0tIEJhdGNoaW5nIGRpc2FibGVkIC0gbm8gYmF0Y2ggbGluZQorc2V0IGV4ZWN1dG9y X2JhdGNoX3Jvd3MgPSAwOworc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXpl LCBiYXRjaGVzLCBidWZmZXJzIG9mZiwgY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rl c3QnKTsKK3Jlc2V0IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7CisKKy0tIEpTT04gZm9ybWF0CitzZWxl Y3QgZXhwbGFpbl9maWx0ZXJfdG9fanNvbignZXhwbGFpbiAoYW5hbHl6ZSwgYmF0Y2hlcywgYnVm ZmVycyBvZmYsIGZvcm1hdCBqc29uKSBzZWxlY3QgKiBmcm9tIGJhdGNoX3Rlc3Qgd2hlcmUgYSA8 IDEwMDAnKSAjPiAnezAsUGxhbixCYXRjaGVzfSc7CisKK2Ryb3AgdGFibGUgYmF0Y2hfdGVzdDsK K3Jlc2V0IGV4ZWN1dG9yX2JhdGNoX3Jvd3M7Ci0tIAoyLjQ3LjMKCg== --000000000000bc2c07064981e6d7 Content-Type: application/octet-stream; name="v5-0004-WIP-Add-ExecQualBatch-for-batched-qual-evaluation.patch" Content-Disposition: attachment; filename="v5-0004-WIP-Add-ExecQualBatch-for-batched-qual-evaluation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz4x7ng3 RnJvbSBlMTU1ZGM3MGUwMzcwNDM1MDYxZGE3MDM2MjE3NTI1NWQ4M2EzNmVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgMjYgSmFuIDIwMjYgMTE6MDE6NDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 IDQvNV0gV0lQOiBBZGQgRXhlY1F1YWxCYXRjaCgpIGZvciBiYXRjaGVkIHF1YWwgZXZhbHVhdGlv bgoKSW50cm9kdWNlIGJhdGNoZWQgcXVhbCBldmFsdWF0aW9uIGZvciBTZXFTY2FuIHdoZW4gcXVh bHMgYXJlIHNpbXBsZQpBTkQtdHJlZXMgb2YgVmFyIG9wIENvbnN0LCBWYXIgb3AgVmFyLCBvciBO dWxsVGVzdCBleHByZXNzaW9ucy4KVGhlIGJhdGNoIGlzIGV2YWx1YXRlZCB1c2luZyBhIGJpdG1h c2ssIGF2b2lkaW5nIHBlci10dXBsZSBFeGVjUXVhbCgpCm92ZXJoZWFkLgoKT25seSBsZWFrcHJv b2Ygb3BlcmF0b3JzIGFyZSBlbGlnaWJsZSBmb3IgYmF0Y2hpbmcsIHNpbmNlIGJhdGNoaW5nCmNo YW5nZXMgZXZhbHVhdGlvbiBvcmRlciB3aGljaCBjb3VsZCBvdGhlcndpc2UgbGVhayBkYXRhIHRo cm91Z2gKc2lkZSBjaGFubmVscyBiZWZvcmUgc2VjdXJpdHkgYmFycmllciBxdWFscyBmaWx0ZXIg cm93cy4KCkFkZCBzdXBwb3J0aW5nIGluZnJhc3RydWN0dXJlOiBFRU9QX1NDQU5fRkVUQ0hTT01F X0JBVENIIHRvIGRlZm9ybQphbGwgdHVwbGVzIGluIGEgYmF0Y2ggYW5kIEV4cHJDb250ZXh0LnNj YW5fYmF0Y2ggZmllbGQuCgpUaGUgcG9zdGdyZXNfZmR3IHJlZ3Jlc3Npb24gdGVzdCBpcyB1cGRh dGVkIHRvIGRpc2FibGUgYmF0Y2hpbmcgZm9yCmEgcXVlcnkgd2l0aCBMSU1JVCwgc2luY2UgYmF0 Y2hpbmcgcHJvY2Vzc2VzIGVudGlyZSBiYXRjaGVzIGJlZm9yZQpjaGVja2luZyBMSU1JVCwgcmVz dWx0aW5nIGluIGRpZmZlcmVudCAiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIKY291bnRzIGluIEVY UExBSU4gQU5BTFlaRSBvdXRwdXQuCi0tLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0 Z3Jlc19mZHcub3V0ICAgIHwgICAxICsKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jl c19mZHcuc3FsICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAg ICAgICAgICAgICAgfCAzMzUgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjRXhwckludGVycC5jICAgICAgICAgfCAyMjQgKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgICAgICAgfCAgMzIgKysKIHNyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMgICAgICAgICAgICB8ICAyOCArLQogc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMgICAgICAgICAgIHwgIDM1ICsrCiBzcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0V4cHIuaCAgICAgICAgICAgICAgIHwgIDg0ICsrKystCiBzcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjU2Nhbi5oICAgICAgICAgICAgICAgfCAgNDYgKysrCiBzcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvZXhl Y3V0b3IvdHVwdGFibGUuaCAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAxMSArLQogMTMgZmlsZXMgY2hhbmdlZCwg ODAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKaW5kZXggNjA2NjUxMGM3YzAuLjY3ZGY0MjMz MjM1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19m ZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQKQEAgLTEyMjA4LDYgKzEyMjA4LDcgQEAgU0VMRUNUICogRlJPTSBhc3luY19wdCB0MSBXSEVS RSB0MS5iID09PSA1MDUgTElNSVQgMTsKICAgICAgICAgICAgICAgIEZpbHRlcjogKHQxXzMuYiA9 PT0gNTA1KQogKDE0IHJvd3MpCiAKK1NFVCBleGVjdXRvcl9iYXRjaF9yb3dzID0gMTsKIEVYUExB SU4gKEFOQUxZWkUsIENPU1RTIE9GRiwgU1VNTUFSWSBPRkYsIFRJTUlORyBPRkYsIEJVRkZFUlMg T0ZGKQogU0VMRUNUICogRlJPTSBhc3luY19wdCB0MSBXSEVSRSB0MS5iID09PSA1MDUgTElNSVQg MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwKaW5kZXggNGY3YWIyZWQwYWMuLmRhZmZjNTQ1YTVjIDEwMDY0NAotLS0gYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtNDEyNiw2ICs0MTI2LDcgQEAgU0VMRUNU ICogRlJPTSBsb2NhbF90YmwgdDEgTEVGVCBKT0lOIChTRUxFQ1QgKiwgKFNFTEVDVCBjb3VudCgq KSBGUk9NIGFzeW5jX3B0IFcKIAogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQogU0VMRUNU ICogRlJPTSBhc3luY19wdCB0MSBXSEVSRSB0MS5iID09PSA1MDUgTElNSVQgMTsKK1NFVCBleGVj dXRvcl9iYXRjaF9yb3dzID0gMTsKIEVYUExBSU4gKEFOQUxZWkUsIENPU1RTIE9GRiwgU1VNTUFS WSBPRkYsIFRJTUlORyBPRkYsIEJVRkZFUlMgT0ZGKQogU0VMRUNUICogRlJPTSBhc3luY19wdCB0 MSBXSEVSRSB0MS5iID09PSA1MDUgTElNSVQgMTsKIFNFTEVDVCAqIEZST00gYXN5bmNfcHQgdDEg V0hFUkUgdDEuYiA9PT0gNTA1IExJTUlUIDE7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRleCAw ODhlY2EyNDAyMS4uY2M3NmI3NjBlZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAtMTA0 LDYgKzEwNCwxNiBAQCBzdGF0aWMgdm9pZCBFeGVjSW5pdEpzb25Db2VyY2lvbihFeHByU3RhdGUg KnN0YXRlLCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCiAJCQkJCQkJCSBib29sIGV4aXN0c19j b2VyY2UsCiAJCQkJCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCk7CiAKKy8qIHByaXZh dGUgY29udGV4dCBmb3IgdGhlIHdhbGtlciAqLwordHlwZWRlZiBzdHJ1Y3QgUXVhbEJhdGNoQ29u dGV4dAoreworCUxpc3QgICAgICAqbGVhdmVzOyAgICAgIC8qIExpc3Q8Tm9kZSo+IG9mIGFjY2Vw dGVkIGxlYXZlcyAqLworCUJpdG1hcHNldCAqYXR0bm9zOyAgICAgIC8qIFZhcnMgcmVmZXJlbmNl ZCBieSBhY2NlcHRlZCBsZWF2ZXMgKi8KKwlib29sCQlvazsJCQkvKiBzdGF5cyB0cnVlIGlmIGJh dGNoYWJsZSAqLworCUF0dHJOdW1iZXIJbGFzdF9zY2FuOwkvKiBsYXN0IG5lZWRlZCBhdHRyaWJ1 dGUgaW4gc2NhbiBzbG90ICovCit9IFF1YWxCYXRjaENvbnRleHQ7CisKK3N0YXRpYyBib29sIHF1 YWxfYmF0Y2hhYmxlX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KTsKIAogLyoKICAq IEV4ZWNJbml0RXhwcjogcHJlcGFyZSBhbiBleHByZXNzaW9uIHRyZWUgZm9yIGV4ZWN1dGlvbgpA QCAtNTA2NCwzICs1MDc0LDMyOCBAQCBFeGVjSW5pdEpzb25Db2VyY2lvbihFeHByU3RhdGUgKnN0 YXRlLCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCiAJCURvbWFpbkhhc0NvbnN0cmFpbnRzKHJl dHVybmluZy0+dHlwaWQpOwogCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKIH0K KworLyoKKyAqIEV4dHJhY3QgVmFyIGF0dG5vIGZyb20gZXhwcmVzc2lvbiwgdW53cmFwcGluZyBS ZWxhYmVsVHlwZS9UYXJnZXRFbnRyeS4KKyAqIFJldHVybnMgYXR0bm8gPiAwIG9uIHN1Y2Nlc3Ms IDAgb24gZmFpbHVyZSAobm90IGEgVmFyLCBvciBzeXN0ZW0gY29sdW1uKS4KKyAqLworc3RhdGlj IEF0dHJOdW1iZXIKK2V4dHJhY3RfdmFyX2F0dG5vKEV4cHIgKmV4cHIpCit7CisJaWYgKGV4cHIg PT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKElzQShleHByLCBUYXJnZXRFbnRyeSkpCisJCXJl dHVybiBleHRyYWN0X3Zhcl9hdHRubygoKFRhcmdldEVudHJ5ICopIGV4cHIpLT5leHByKTsKKwlp ZiAoSXNBKGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJcmV0dXJuIGV4dHJhY3RfdmFyX2F0dG5vKChF eHByICopICgoUmVsYWJlbFR5cGUgKikgZXhwciktPmFyZyk7CisJaWYgKElzQShleHByLCBWYXIp ICYmICgoVmFyICopIGV4cHIpLT52YXJhdHRubyA+IDApCisJCXJldHVybiAoKFZhciAqKSBleHBy KS0+dmFyYXR0bm87CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBxdWFsX2JhdGNoYWJsZV93YWxr ZXIKKyAqCQlDaGVjayBpZiBhIHF1YWwgdHJlZSBpcyBlbGlnaWJsZSBmb3IgYmF0Y2hlZCBldmFs dWF0aW9uLgorICoKKyAqIFdhbGtzIHRoZSBxdWFsIHRyZWUgYW5kIHZhbGlkYXRlcyB0aGF0IGl0 IGNvbnNpc3RzIG9ubHkgb2Y6CisgKiAgIC0gQU5EIGV4cHJlc3Npb25zIChPUi9OT1QgZGlzcXVh bGlmeSkKKyAqICAgLSBOdWxsVGVzdCBvbiBzaW1wbGUgVmFycworICogICAtIEJpbmFyeSBPcEV4 cHIgd2l0aCBWYXIgb3AgQ29uc3Qgb3IgVmFyIG9wIFZhciBhcmd1bWVudHMKKyAqCisgKiBGb3Ig T3BFeHByLCB0aGUgb3BlcmF0b3IgbXVzdCBiZToKKyAqICAgLSBTdHJpY3Q6IGVuc3VyZXMgTlVM TCBpbnB1dHMgcHJvZHVjZSBOVUxML2ZhbHNlLCBtYXRjaGluZyBXSEVSRSBzZW1hbnRpY3MKKyAq ICAgLSBMZWFrcHJvb2Y6IHJlcXVpcmVkIGJlY2F1c2UgYmF0Y2hpbmcgZXZhbHVhdGVzIGFsbCBy b3dzIGJlZm9yZSBmaWx0ZXJpbmcsCisgKiAgICAgd2hpY2ggY291bGQgbGVhayBkYXRhIHRvIG5v bi1sZWFrcHJvb2Ygb3BlcmF0b3JzIGJlZm9yZSBzZWN1cml0eSBiYXJyaWVyCisgKiAgICAgcXVh bHMgaGF2ZSBhIGNoYW5jZSB0byBmaWx0ZXIgcm93cworICoKKyAqIE9uIHN1Y2Nlc3MsIHBvcHVs YXRlcyBjeHQtPmxlYXZlcyB3aXRoIHRoZSBsZWFmIG5vZGVzIGFuZCBjeHQtPmF0dG5vcyB3aXRo CisgKiB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgbnVtYmVycy4gU2V0cyBjeHQtPm9rID0gZmFs c2UgaWYgYW55IG5vZGUgZmFpbHMKKyAqIHZhbGlkYXRpb24uCisgKi8KK3N0YXRpYyBib29sCitx dWFsX2JhdGNoYWJsZV93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKK3sKKwlRdWFs QmF0Y2hDb250ZXh0ICpjeHQgPSAoUXVhbEJhdGNoQ29udGV4dCAqKSBjb250ZXh0OworCisJaWYg KG5vZGUgPT0gTlVMTCB8fCAhY3h0LT5vaykKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChu b2RlVGFnKG5vZGUpKQorCXsKKwkJY2FzZSBUX0xpc3Q6CisJCQlyZXR1cm4gZXhwcmVzc2lvbl90 cmVlX3dhbGtlcihub2RlLCBxdWFsX2JhdGNoYWJsZV93YWxrZXIsIGN4dCk7CisKKwkJY2FzZSBU X0Jvb2xFeHByOgorCQl7CisJCQlCb29sRXhwciAqYiA9IChCb29sRXhwciAqKSBub2RlOworCisJ CQkvKiBPbmx5IEFORCB0cmVlcyBhcmUgYWxsb3dlZCAqLworCQkJaWYgKGItPmJvb2xvcCAhPSBB TkRfRVhQUikKKwkJCXsKKwkJCQljeHQtPm9rID0gZmFsc2U7CisJCQkJcmV0dXJuIHRydWU7CisJ CQl9CisJCQkvKiBSZWN1cnNlIG5vcm1hbGx5IG92ZXIgY2hpbGRyZW4gKi8KKwkJCXJldHVybiBl eHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsIHF1YWxfYmF0Y2hhYmxlX3dhbGtlciwgY3h0KTsK KwkJfQorCisJCWNhc2UgVF9OdWxsVGVzdDoKKwkJeworCQkJTnVsbFRlc3QgKm50ID0gKE51bGxU ZXN0ICopIG5vZGU7CisJCQlBdHRyTnVtYmVyICBhdHRubyA9IGV4dHJhY3RfdmFyX2F0dG5vKG50 LT5hcmcpOworCisJCQlpZiAoYXR0bm8gPT0gMCkKKwkJCXsKKwkJCQljeHQtPm9rID0gZmFsc2U7 CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisKKwkJCWN4dC0+YXR0bm9zID0gYm1zX2FkZF9tZW1i ZXIoY3h0LT5hdHRub3MsIGF0dG5vKTsKKwkJCWlmIChhdHRubyA+IGN4dC0+bGFzdF9zY2FuKQor CQkJCWN4dC0+bGFzdF9zY2FuID0gYXR0bm87CisJCQljeHQtPmxlYXZlcyA9IGxhcHBlbmQoY3h0 LT5sZWF2ZXMsIG5vZGUpOworCisJCQkvKiBEbyBOT1QgcmVjdXJzZSBpbnRvIGxlYWYgKi8KKwkJ CXJldHVybiBmYWxzZTsKKwkJfQorCisJCWNhc2UgVF9PcEV4cHI6CisJCXsKKwkJCU9wRXhwciAq b3AgPSAoT3BFeHByICopIG5vZGU7CisJCQlMaXN0ICAgKmFyZ3MgPSBvcC0+YXJnczsKKwkJCUF0 dHJOdW1iZXIJbGF0dG5vLAorCQkJCQkJcmF0dG5vOworCisJCQkvKiBPbmx5IGJpbmFyeSBvcGVy YXRvcnMgKi8KKwkJCWlmIChsaXN0X2xlbmd0aChhcmdzKSAhPSAyKQorCQkJeworCQkJCWN4dC0+ b2sgPSBmYWxzZTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCS8qIE11c3QgYmUgc3RyaWN0 IChOVUxMIGlucHV0IC0+IE5VTEwvZmFsc2UgcmVzdWx0KSAqLworCQkJaWYgKCFmdW5jX3N0cmlj dChvcC0+b3BmdW5jaWQpKQorCQkJeworCQkJCWN4dC0+b2sgPSBmYWxzZTsKKwkJCQlyZXR1cm4g dHJ1ZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBNdXN0IGJlIGxlYWtwcm9vZi4gQmF0Y2hpbmcgY2hh bmdlcyBldmFsdWF0aW9uIG9yZGVyLCB3aGljaAorCQkJICogY291bGQgbGVhayBkYXRhIHRocm91 Z2ggc2lkZSBjaGFubmVscyBiZWZvcmUgc2VjdXJpdHkgYmFycmllcgorCQkJICogcXVhbHMgZmls dGVyIHJvd3MuCisJCQkgKi8KKwkJCWlmICghZ2V0X2Z1bmNfbGVha3Byb29mKG9wLT5vcGZ1bmNp ZCkpCisJCQl7CisJCQkJY3h0LT5vayA9IGZhbHNlOworCQkJCXJldHVybiB0cnVlOworCQkJfQor CisJCQkvKiBMZWZ0IGFyZyBtdXN0IGJlIGEgVmFyICovCisJCQlsYXR0bm8gPSBleHRyYWN0X3Zh cl9hdHRubyhsaW5pdGlhbChvcC0+YXJncykpOworCQkJaWYgKGxhdHRubyA9PSAwKQorCQkJewor CQkJCWN4dC0+b2sgPSBmYWxzZTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCWN4dC0+YXR0 bm9zID0gYm1zX2FkZF9tZW1iZXIoY3h0LT5hdHRub3MsIGxhdHRubyk7CisJCQlpZiAobGF0dG5v ID4gY3h0LT5sYXN0X3NjYW4pCisJCQkJY3h0LT5sYXN0X3NjYW4gPSBsYXR0bm87CisKKwkJCS8q IFJpZ2h0IGFyZyBtdXN0IGJlIENvbnN0IG9yIFZhciAqLworCQkJaWYgKCFJc0EobHNlY29uZChv cC0+YXJncyksIENvbnN0KSkKKwkJCXsKKwkJCQlyYXR0bm8gPSBleHRyYWN0X3Zhcl9hdHRubyhs c2Vjb25kKG9wLT5hcmdzKSk7CisJCQkJaWYgKHJhdHRubyA9PSAwKQorCQkJCXsKKwkJCQkJY3h0 LT5vayA9IGZhbHNlOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJY3h0LT5hdHRub3Mg PSBibXNfYWRkX21lbWJlcihjeHQtPmF0dG5vcywgcmF0dG5vKTsKKwkJCQlpZiAocmF0dG5vID4g Y3h0LT5sYXN0X3NjYW4pCisJCQkJCWN4dC0+bGFzdF9zY2FuID0gcmF0dG5vOworCQkJfQorCisJ CQljeHQtPmxlYXZlcyA9IGxhcHBlbmQoY3h0LT5sZWF2ZXMsIG5vZGUpOworCisJCQlyZXR1cm4g ZmFsc2U7CS8qIGxlYWY7IGRvbid0IHJlY3Vyc2UgKi8KKwkJfQorCisJCS8qIFVuaGFuZGxlZCBu b2RlIHR5cGU7IGZhbGwgYmFjayB0byBwZXItdHVwbGUgZXZhbHVhdGlvbiAqLworCQlkZWZhdWx0 OgorCQkJY3h0LT5vayA9IGZhbHNlOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qIGJ1aWxkIGEgQmF0Y2hRdWFsVGVybSBmcm9tIGEgdmFsaWRhdGVkIGxlYWYgKi8KK3N0 YXRpYyBCYXRjaFF1YWxUZXJtICoKK2J1aWxkX3Rlcm1fZnJvbV9sZWFmKE5vZGUgKm4pCit7CisJ QmF0Y2hRdWFsVGVybSAqdGVybTsKKwlCYXRjaFF1YWxUZXJtS2luZCBraW5kOworCWJvb2wJCXN0 cmljdDsKKwlBdHRyTnVtYmVyCWxfYXR0bm87CisJQXR0ck51bWJlcglyX2F0dG5vOworCURhdHVt CQlyX2NvbnN0ID0gKERhdHVtKSAwOworCWJvb2wJCXJfaXNudWxsID0gZmFsc2U7CisJRm1ncklu Zm8gICAqZmluZm8gPSBOVUxMOworCU9pZAkJCWNvbGxhdGlvbjsKKworCWlmIChJc0EobiwgTnVs bFRlc3QpKQorCXsKKwkJTnVsbFRlc3QgKm50ID0gKE51bGxUZXN0ICopIG47CisKKwkJa2luZCA9 IG50LT5udWxsdGVzdHR5cGUgPT0gSVNfTlVMTCA/IEJRVEtfSVNfTlVMTCA6IEJRVEtfSVNfTk9U X05VTEw7CisJCWxfYXR0bm8gPSBleHRyYWN0X3Zhcl9hdHRubyhudC0+YXJnKTsKKwkJcl9hdHRu byA9IDA7CisJCXN0cmljdCA9IGZhbHNlOworCQljb2xsYXRpb24gPSBJbnZhbGlkT2lkOworCisJ CWlmIChsX2F0dG5vID09IDApCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJZWxzZSBpZiAoSXNBKG4s IE9wRXhwcikpCisJeworCQlPcEV4cHIgKm9wID0gKE9wRXhwciAqKSBuOworCQlFeHByICAgKmwg ID0gbGluaXRpYWwob3AtPmFyZ3MpOworCQlFeHByICAgKnIgID0gbHNlY29uZChvcC0+YXJncyk7 CisKKwkJbF9hdHRubyA9IGV4dHJhY3RfdmFyX2F0dG5vKGwpOworCQlpZiAobF9hdHRubyA9PSAw KQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKElzQShyLCBDb25zdCkpCisJCXsKKwkJCUNvbnN0 ICpjID0gKENvbnN0ICopIHI7CisKKwkJCWtpbmQgPSBCUVRLX1ZBUl9DT05TVDsKKwkJCXJfY29u c3QgPSBjLT5jb25zdHZhbHVlOworCQkJcl9pc251bGwgPSBjLT5jb25zdGlzbnVsbDsKKwkJCXJf YXR0bm8gPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJcl9hdHRubyA9IGV4dHJhY3RfdmFyX2F0 dG5vKHIpOworCQkJaWYgKHJfYXR0bm8gPT0gMCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWtpbmQg PSBCUVRLX1ZBUl9WQVI7CisJCX0KKworCQlzdHJpY3QgPSBmdW5jX3N0cmljdChvcC0+b3BmdW5j aWQpOworCQljb2xsYXRpb24gPSBleHBySW5wdXRDb2xsYXRpb24oKE5vZGUgKikgb3ApOworCQlm aW5mbyA9IHBhbGxvYyhzaXplb2YoRm1nckluZm8pKTsKKwkJZm1ncl9pbmZvKG9wLT5vcGZ1bmNp ZCwgZmluZm8pOworCX0KKwllbHNlCisJCXJldHVybiBOVUxMOworCisJdGVybSA9IHBhbGxvYyhz aXplb2YoQmF0Y2hRdWFsVGVybSkpOworCXRlcm0tPmtpbmQgPSBraW5kOworCXRlcm0tPnN0cmlj dCA9IHN0cmljdDsKKwl0ZXJtLT5sX2F0dG5vID0gbF9hdHRubzsKKwl0ZXJtLT5yX2F0dG5vID0g cl9hdHRubzsKKwl0ZXJtLT5yX2NvbnN0ID0gcl9jb25zdDsKKwl0ZXJtLT5yX2lzbnVsbCA9IHJf aXNudWxsOworCXRlcm0tPmZpbmZvID0gZmluZm87CisJdGVybS0+Y29sbGF0aW9uID0gY29sbGF0 aW9uOworCisJcmV0dXJuIHRlcm07Cit9CisKKy8qCisgKiBFeGVjSW5pdFF1YWxCYXRjaAorICoJ CUJ1aWxkIGEgYmF0Y2hlZC1xdWFsIEV4cHJTdGF0ZSBmb3IgZXZhbHVhdGluZyBzY2FuIHF1YWxz IG92ZXIgYSBUdXBsZUJhdGNoLgorICoKKyAqIFJldHVybnMgYSBkZWRpY2F0ZWQgRXhwclN0YXRl IHRoYXQgZXZhbHVhdGVzIHRoZSBwbGFuJ3MgcXVhbHMgaW4gYmF0Y2ggbW9kZSwKKyAqIG9yIE5V TEwgaWYgdGhlIHF1YWxzIGFyZSBub3QgZWxpZ2libGUgZm9yIGJhdGNoaW5nLiBUaGUgY2FsbGVy IHNob3VsZCByZXRhaW4KKyAqIHRoZSByZWd1bGFyIHBzLT5xdWFsIGZvciBmYWxsYmFjayB3aGVu IGJhdGNoaW5nIGlzIG5vdCB1c2VkLgorICoKKyAqIEJhdGNoaW5nIGlzIG9ubHkgcG9zc2libGUg d2hlbiB0aGUgcXVhbCB0cmVlIGNvbnNpc3RzIG9mOgorICoJLSBUb3AtbGV2ZWwgQU5EIG9mIHNp bXBsZSBjbGF1c2VzIChubyBPUiwgTk9UKQorICoJLSBOdWxsVGVzdCBvbiBhIHNpbXBsZSBWYXIK KyAqCS0gQmluYXJ5IE9wRXhwciB3aXRoIChWYXIgb3AgQ29uc3QpIG9yIChWYXIgb3AgVmFyKSwg d2hlcmUgdGhlIG9wZXJhdG9yCisgKgkgIGlzIGJvdGggc3RyaWN0IChmb3IgcHJvcGVyIE5VTEwg aGFuZGxpbmcpIGFuZCBsZWFrcHJvb2YgKHRvIGF2b2lkCisgKgkgIGxlYWtpbmcgZGF0YSB3aGVu IGV2YWx1YXRpb24gb3JkZXIgY2hhbmdlcyB2cy4gc2VjdXJpdHkgYmFycmllciBxdWFscykKKyAq CisgKiBUaGUgZ2VuZXJhdGVkIEVFT1AgcHJvZ3JhbToKKyAqCTEuIEVFT1BfU0NBTl9GRVRDSFNP TUVfQkFUQ0ggLSBkZWZvcm1zIGFsbCBzbG90cyBpbiB0aGUgYmF0Y2gKKyAqCTIuIEVFT1BfUVVB TF9CQVRDSF9JTklUTUFTSyAtIGluaXRpYWxpemVzIGJpdG1hc2sgdG8gYWxsLXBhc3MKKyAqCTMu IEVFT1BfUVVBTF9CQVRDSF9URVJNIChwZXIgbGVhZikgLSBldmFsdWF0ZXMgdGVybSwgY2xlYXJz IGZhaWxpbmcgYml0cworICoKKyAqIFRoZSByZXN1bHQgYml0bWFzayBpcyBzdG9yZWQgaW4gQmF0 Y2hRdWFsUnVudGltZSAodmlhIEV4cHJTdGF0ZS5iYXRjaF9wcml2YXRlKQorICogZm9yIHRoZSBj YWxsZXIgdG8gdXNlIHdoZW4gcG9wdWxhdGluZyBvdXRwdXQgc2xvdHMuCisgKi8KK0V4cHJTdGF0 ZSAqCitFeGVjSW5pdFF1YWxCYXRjaChQbGFuU3RhdGUgKnBzKQoreworCU5vZGUJICAgKnF1YWwg PSAoTm9kZSAqKSBwcy0+cGxhbi0+cXVhbDsKKwlRdWFsQmF0Y2hDb250ZXh0IGN4dCA9IHtOSUws IE5VTEwsIHRydWUsIDB9OworCUJhdGNoUXVhbFJ1bnRpbWUgKnJ0OworCUV4cHJTdGF0ZSAgKnN0 YXRlOworCWludAkJCW1heHJvd3MgPSBleGVjdXRvcl9iYXRjaF9yb3dzOworCXVpbnQ2NAkgICAq bWFzazsKKwlpbnQJCQltYXNrX3dvcmRzOworCUxpc3RDZWxsICAgKmxjOworCUV4cHJFdmFsU3Rl cCBzY3JhdGNoID0gezB9OworCisJaWYgKHF1YWwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKgorCSAqIENoZWNrIGlmIHF1YWwgdHJlZSBpcyBiYXRjaGFibGU7IGNvbGxlY3QgbGVhZiBu b2RlcyBhbmQgcmVmZXJlbmNlZAorCSAqIGF0dG5vcy4KKwkgKi8KKwkodm9pZCkgcXVhbF9iYXRj aGFibGVfd2Fsa2VyKHF1YWwsICZjeHQpOworCWlmICghY3h0Lm9rIHx8IGN4dC5sZWF2ZXMgPT0g TklMIHx8IGJtc19pc19lbXB0eShjeHQuYXR0bm9zKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBB bGxvY2F0ZSBiaXRtYXNrOiBvbmUgYml0IHBlciByb3csIHJvdW5kZWQgdXAgdG8gNjQtYml0IHdv cmRzICovCisJbWFza193b3JkcyA9IChtYXhyb3dzICsgNjMpID4+IDY7CisJbWFzayA9ICh1aW50 NjQgKikgcGFsbG9jMChzaXplb2YodWludDY0KSAqIG1hc2tfd29yZHMpOworCisJLyogQnVuZGxl IHJ1bnRpbWUgc3RhdGU7IGF0dGFjaGVkIHRvIEV4cHJTdGF0ZSBmb3IgYWNjZXNzIGR1cmluZyBl eGVjdXRpb24gKi8KKwlydCA9IHBhbGxvYzAoc2l6ZW9mKEJhdGNoUXVhbFJ1bnRpbWUpKTsKKwly dC0+bWFzayA9IG1hc2s7CisJcnQtPm1hc2tfd29yZHMgPSBtYXNrX3dvcmRzOworCisJLyogQ3Jl YXRlIEV4cHJTdGF0ZSBmb3IgdGhlIGJhdGNoZWQgcHJvZ3JhbSAqLworCXN0YXRlID0gbWFrZU5v ZGUoRXhwclN0YXRlKTsKKwlzdGF0ZS0+ZXhwciA9IChFeHByICopIHF1YWw7CisJc3RhdGUtPnBh cmVudCA9IHBzOworCXN0YXRlLT5leHRfcGFyYW1zID0gTlVMTDsKKwlzdGF0ZS0+ZmxhZ3MgPSBF RU9fRkxBR19JU19RVUFMOworCXN0YXRlLT5iYXRjaF9wcml2YXRlID0gKHZvaWQgKikgcnQ7CisK KwkvKiBTdGVwIDE6IGRlZm9ybSBhbGwgc2xvdHMgaW4gYmF0Y2ggdXAgdG8gaGlnaGVzdCByZWZl cmVuY2VkIGF0dHJpYnV0ZSAqLworCXNjcmF0Y2gub3Bjb2RlID0gRUVPUF9TQ0FOX0ZFVENIU09N RV9CQVRDSDsKKwlzY3JhdGNoLmQuZmV0Y2hfYmF0Y2gubGFzdF92YXIgPSBjeHQubGFzdF9zY2Fu OworCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKKworCS8qIFN0ZXAgMiBpbml0 aWFsaXplIG1hc2sgdG8gYWxsLW9uZXMgKGFsbCByb3dzIHBhc3MgaW5pdGlhbGx5KSAqLworCXNj cmF0Y2gub3Bjb2RlID0gRUVPUF9RVUFMX0JBVENIX0lOSVRNQVNLOworCXNjcmF0Y2guZC5xdWFs YmF0Y2hfaW5pdC5tYXNrID0gbWFzazsKKwlzY3JhdGNoLmQucXVhbGJhdGNoX2luaXQubWFza193 b3JkcyA9IG1hc2tfd29yZHM7CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOwor CisJLyogU3RlcCAzOiBvbmUgVEVSTSBwZXIgcXVhbCBsZWFmOyBlYWNoIGNsZWFycyBtYXNrIGJp dHMgZm9yIGZhaWxpbmcgcm93cyAqLworCWZvcmVhY2gobGMsIGN4dC5sZWF2ZXMpCisJeworCQlC YXRjaFF1YWxUZXJtICp0ZXJtID0gYnVpbGRfdGVybV9mcm9tX2xlYWYoKE5vZGUgKikgbGZpcnN0 KGxjKSk7CisKKwkJaWYgKHRlcm0gPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCisJCXNjcmF0 Y2gub3Bjb2RlID0gRUVPUF9RVUFMX0JBVENIX1RFUk07CisJCXNjcmF0Y2guZC5xdWFsYmF0Y2hf dGVybS50ZXJtID0gdGVybTsJCS8qIGJ5IHZhbHVlICovCisJCUV4cHJFdmFsUHVzaFN0ZXAoc3Rh dGUsICZzY3JhdGNoKTsKKwl9CisKKwkvKiBEb25lOyBtYXNrIG5vdyBpbmRpY2F0ZXMgd2hpY2gg cm93cyBzdXJ2aXZlZCBhbGwgcXVhbHMgKi8KKwlzY3JhdGNoLm9wY29kZSA9IEVFT1BfRE9ORV9O T19SRVRVUk47CisJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgJnNjcmF0Y2gpOworCisJRXhlY1Jl YWR5RXhwcihzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYwppbmRleCBhN2E1YWMxZTgzYi4uMzA0YzdmNGUwZmIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgImFj Y2Vzcy9oZWFwdG9hc3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNCYXRjaC5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWNFeHByLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZVN1 YnBsYW4uaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCkBAIC00NjYsNiArNDY3LDcgQEAgRXhlY0lu dGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICpp c251bGwpCiAJVHVwbGVUYWJsZVNsb3QgKnNjYW5zbG90OwogCVR1cGxlVGFibGVTbG90ICpvbGRz bG90OwogCVR1cGxlVGFibGVTbG90ICpuZXdzbG90OworCVR1cGxlQmF0Y2ggKnNjYW5iYXRjaDsK IAogCS8qCiAJICogVGhpcyBhcnJheSBoYXMgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgZW51 bSBFeHByRXZhbE9wLgpAQCAtNTkyLDYgKzU5NCw5IEBAIEV4ZWNJbnRlcnBFeHByKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCQkmJkNBU0Vf RUVPUF9BR0dfUFJFU09SVEVEX0RJU1RJTkNUX01VTFRJLAogCQkmJkNBU0VfRUVPUF9BR0dfT1JE RVJFRF9UUkFOU19EQVRVTSwKIAkJJiZDQVNFX0VFT1BfQUdHX09SREVSRURfVFJBTlNfVFVQTEUs CisJCSYmQ0FTRV9FRU9QX1NDQU5fRkVUQ0hTT01FX0JBVENILAorCQkmJkNBU0VfRUVPUF9RVUFM X0JBVENIX0lOSVRNQVNLLAorCQkmJkNBU0VfRUVPUF9RVUFMX0JBVENIX1RFUk0sCiAJCSYmQ0FT RV9FRU9QX0xBU1QKIAl9OwogCkBAIC02MTIsNiArNjE3LDcgQEAgRXhlY0ludGVycEV4cHIoRXhw clN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJc2Nh bnNsb3QgPSBlY29udGV4dC0+ZWN4dF9zY2FudHVwbGU7CiAJb2xkc2xvdCA9IGVjb250ZXh0LT5l Y3h0X29sZHR1cGxlOwogCW5ld3Nsb3QgPSBlY29udGV4dC0+ZWN4dF9uZXd0dXBsZTsKKwlzY2Fu YmF0Y2ggPSBlY29udGV4dC0+c2Nhbl9iYXRjaDsKIAogI2lmIGRlZmluZWQoRUVPX1VTRV9DT01Q VVRFRF9HT1RPKQogCUVFT19ESVNQQVRDSCgpOwpAQCAtMjI2NSw2ICsyMjcxLDI4IEBAIEV4ZWNJ bnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAq aXNudWxsKQogCQkJRUVPX05FWFQoKTsKIAkJfQogCisJCUVFT19DQVNFKEVFT1BfU0NBTl9GRVRD SFNPTUVfQkFUQ0gpCisJCXsKKwkJCUNoZWNrT3BTbG90Q29tcGF0aWJpbGl0eShvcCwgc2NhbnNs b3QpOworCisJCQlBc3NlcnQoc2NhbmJhdGNoKTsKKwkJCXNsb3RfZ2V0c29tZWF0dHJzX2JhdGNo KHNjYW5iYXRjaCwgb3AtPmQuZmV0Y2hfYmF0Y2gubGFzdF92YXIpOworCisJCQlFRU9fTkVYVCgp OworCQl9CisKKwkJRUVPX0NBU0UoRUVPUF9RVUFMX0JBVENIX0lOSVRNQVNLKQorCQl7CisJCQlF eGVjUXVhbEJhdGNoSW5pdE1hc2soc3RhdGUsIG9wLCBlY29udGV4dCk7CisJCQlFRU9fTkVYVCgp OworCQl9CisKKwkJRUVPX0NBU0UoRUVPUF9RVUFMX0JBVENIX1RFUk0pCisJCXsKKwkJCUV4ZWNR dWFsQmF0Y2hUZXJtKHN0YXRlLCBvcCwgZWNvbnRleHQpOworCQkJRUVPX05FWFQoKTsKKwkJfQor CiAJCUVFT19DQVNFKEVFT1BfTEFTVCkKIAkJewogCQkJLyogdW5yZWFjaGFibGUgKi8KQEAgLTU5 MTQsMyArNTk0MiwxOTkgQEAgRXhlY0FnZ1BsYWluVHJhbnNCeVJlZihBZ2dTdGF0ZSAqYWdnc3Rh dGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMsCiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkQ29udGV4dCk7CiB9CisKKy8qIHNldCBtYXNrIGJpdHMgWzAuLm52YWxpZF9iaXRzKSB0byAx OyBjbGVhciBwYWRkaW5nIGluIHRoZSBsYXN0IHdvcmQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor bWFza19pbml0X2FsbF9vbmVzKHVpbnQ2NCAqYSwgaW50IG53b3JkcywgaW50IG52YWxpZF9iaXRz KQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgbndvcmRzOyBpKyspCisJCWFbaV0gPSB+VUlOVDY0 Q09OU1QoMCk7CisKKwlpZiAoKG52YWxpZF9iaXRzICYgNjMpICE9IDApCisJeworCQlpbnQgcmVt ID0gbnZhbGlkX2JpdHMgJiA2MzsKKworCQlhW253b3JkcyAtIDFdICY9ICh+VUlOVDY0Q09OU1Qo MCkpID4+ICg2NCAtIHJlbSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK21hc2tfY2xl YXJfYml0KHVpbnQ2NCAqYSwgaW50IGkpCit7CisJYVtpID4+IDZdICY9IH4oVUlOVDY0Q09OU1Qo MSkgPDwgKGkgJiA2MykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK21hc2tfaXNfZW1wdHko Y29uc3QgdWludDY0ICptYXNrLCBpbnQgbndvcmRzKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwg bndvcmRzOyBpKyspCisJeworCQlpZiAobWFza1tpXSAhPSAwKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZAorRXhlY1F1YWxCYXRjaEluaXRNYXNrKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCkKK3sK KwlUdXBsZUJhdGNoICpiID0gZWNvbnRleHQtPnNjYW5fYmF0Y2g7CisJdWludDY0ICAgICAgKm1h c2sgPSBvcC0+ZC5xdWFsYmF0Y2hfaW5pdC5tYXNrOworCWludCAgICAgICAgICBud29yZHMgPSBv cC0+ZC5xdWFsYmF0Y2hfaW5pdC5tYXNrX3dvcmRzOworCWludCAgICAgICAgICBuID0gYi0+bnR1 cGxlczsKKworCS8qIGluaXRpYWxpemUgdG8gYWxsLXBhc3MgZm9yIGN1cnJlbnQgYmF0Y2ggc2l6 ZSAqLworCW1hc2tfaW5pdF9hbGxfb25lcyhtYXNrLCBud29yZHMsIG4pOworfQorCit2b2lkCitF eGVjUXVhbEJhdGNoVGVybShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHBy Q29udGV4dCAqZWNvbnRleHQpCit7CisJQmF0Y2hRdWFsUnVudGltZSAqcnQgPSBFeGVjR2V0QmF0 Y2hRdWFsUnVudGltZShzdGF0ZSk7CisJVHVwbGVCYXRjaCAqYiA9IGVjb250ZXh0LT5zY2FuX2Jh dGNoOworCVR1cGxlVGFibGVTbG90ICoqc2xvdHMgPSBiLT5hY3RpdmVzbG90czsKKwl1aW50NjQg ICAgICAgICAqbWFzayA9IHJ0LT5tYXNrOworCWludAkJCQltYXNrX3dvcmRzID0gcnQtPm1hc2tf d29yZHM7CisJQmF0Y2hRdWFsVGVybSAgKnQgICAgPSBvcC0+ZC5xdWFsYmF0Y2hfdGVybS50ZXJt OworCWludCAgICAgICAgICAgICBuICAgID0gYi0+bnR1cGxlczsKKworCS8qIEVhcmx5IGV4aXQg aWYgbm8gcm93cyByZW1haW4gKi8KKwlpZiAobWFza19pc19lbXB0eShtYXNrLCBtYXNrX3dvcmRz KSkKKwkJcmV0dXJuOworCisJc3dpdGNoICh0LT5raW5kKQorCXsKKwkJY2FzZSBCUVRLX0lTX05V TEw6CisJCXsKKwkJCS8qIGtlZXAgYml0IHNldCBvbmx5IGlmIHZhbHVlIElTIE5VTEw7IGNsZWFy IG90aGVyd2lzZSAqLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisJCQl7CisJCQkJ aWYgKCFzbG90c1tpXS0+dHRzX2lzbnVsbFt0LT5sX2F0dG5vLTFdKQorCQkJCQltYXNrX2NsZWFy X2JpdChtYXNrLCBpKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBCUVRLX0lTX05P VF9OVUxMOgorCQl7CisJCQkvKiBrZWVwIGJpdCBzZXQgb25seSBpZiB2YWx1ZSBJUyBOT1QgTlVM TDsgY2xlYXIgaWYgTlVMTCAqLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisJCQl7 CisJCQkJaWYgKHNsb3RzW2ldLT50dHNfaXNudWxsW3QtPmxfYXR0bm8tMV0pCisJCQkJCW1hc2tf Y2xlYXJfYml0KG1hc2ssIGkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQljYXNlIEJRVEtf VkFSX0NPTlNUOgorCQl7CisJCQljb25zdCBib29sICByX2lzbnVsbCA9IHQtPnJfaXNudWxsOwor CQkJY29uc3QgRGF0dW0gcl9jb25zdCAgPSB0LT5yX2NvbnN0OworCQkJY29uc3QgYm9vbCAgc3Ry aWN0ICAgPSB0LT5zdHJpY3Q7CisJCQljb25zdCBPaWQgICBjb2xsICAgICA9IHQtPmNvbGxhdGlv bjsKKwkJCUZtZ3JJbmZvICAgKmZpbmZvICAgID0gdC0+ZmluZm87CisKKwkJCWZvciAoaW50IGkg PSAwOyBpIDwgbjsgaSsrKQorCQkJeworCQkJCWJvb2wgbG4gPSBzbG90c1tpXS0+dHRzX2lzbnVs bFt0LT5sX2F0dG5vLTFdOworCQkJCWJvb2wgcGFzczsKKworCQkJCS8qIFdIRVJFIHRyZWF0cyBO VUxMIGFzIGZhbHNlOyBzdHJpY3Qgb3BzIHNob3J0LWNpcmN1aXQgKi8KKwkJCQlpZiAoc3RyaWN0 ICYmIChsbiB8fCByX2lzbnVsbCkpCisJCQkJCXBhc3MgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJ eworCQkJCQlEYXR1bSBsdiA9IHNsb3RzW2ldLT50dHNfdmFsdWVzW3QtPmxfYXR0bm8tMV07CisK KwkJCQkJcGFzcyA9IERhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbChmaW5mbywgY29sbCwg bHYsIHJfY29uc3QpKTsKKwkJCQl9CisKKwkJCQlpZiAoIXBhc3MpCisJCQkJCW1hc2tfY2xlYXJf Yml0KG1hc2ssIGkpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQljYXNlIEJRVEtfVkFSX1ZB UjoKKwkJeworCQkJY29uc3QgYm9vbCAgc3RyaWN0ID0gdC0+c3RyaWN0OworCQkJY29uc3QgT2lk ICAgY29sbCAgID0gdC0+Y29sbGF0aW9uOworCQkJRm1nckluZm8gICAqZmluZm8gID0gdC0+Zmlu Zm87CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJeworCQkJCWJvb2wJbG4g PSBzbG90c1tpXS0+dHRzX2lzbnVsbFt0LT5sX2F0dG5vLTFdOworCQkJCWJvb2wJcm4gPSBzbG90 c1tpXS0+dHRzX2lzbnVsbFt0LT5yX2F0dG5vLTFdOworCQkJCWJvb2wJcGFzczsKKworCQkJCWlm IChzdHJpY3QgJiYgKGxuIHx8IHJuKSkKKwkJCQkJcGFzcyA9IGZhbHNlOworCQkJCWVsc2UKKwkJ CQl7CisJCQkJCURhdHVtIGx2ID0gc2xvdHNbaV0tPnR0c192YWx1ZXNbdC0+bF9hdHRuby0xXTsK KwkJCQkJRGF0dW0gcnYgPSBzbG90c1tpXS0+dHRzX3ZhbHVlc1t0LT5yX2F0dG5vLTFdOworCisJ CQkJCXBhc3MgPSBEYXR1bUdldEJvb2woRnVuY3Rpb25DYWxsMkNvbGwoZmluZm8sIGNvbGwsIGx2 LCBydikpOworCQkJCX0KKworCQkJCWlmICghcGFzcykKKwkJCQkJbWFza19jbGVhcl9iaXQobWFz aywgaSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQkvKiBzaG91bGQg bm90IGhhcHBlbjsgbGVhdmUgbWFzayB1bmNoYW5nZWQgKi8KKwkJCWJyZWFrOworCX0KK30KKwor LyoKKyAqIEV4ZWNRdWFsQmF0Y2gKKyAqCQlFdmFsdWF0ZSBhIGJhdGNoZWQgcXVhbCBvdmVyIGFs bCByb3dzIGluIGEgVHVwbGVCYXRjaC4KKyAqCisgKiBSdW5zIHRoZSBFRU9QIHByb2dyYW0gYnVp bHQgYnkgRXhlY0luaXRRdWFsQmF0Y2gsIHdoaWNoIHByb2R1Y2VzIGEgYml0bWFzaworICogaW5k aWNhdGluZyB3aGljaCByb3dzIHBhc3MgdGhlIHF1YWwuIFJvd3MgdGhhdCBwYXNzIGFyZSBjb3Bp ZWQgdG8gdGhlCisgKiBiYXRjaCdzIG91dHB1dCBzbG90cyAoYi0+b3V0c2xvdHMpLgorICoKKyAq IFJldHVybnMgdGhlIG51bWJlciBvZiBxdWFsaWZ5aW5nIHJvd3MuIFRoZSBjYWxsZXIgc2hvdWxk IHRoZW4gY2FsbAorICogVHVwbGVCYXRjaFVzZU91dHB1dChiLCBxdWFsaWZpZWQpIHRvIHN3aXRj aCB0aGUgYmF0Y2ggdG8gcmV0dXJuIGZyb20KKyAqIG91dHNsb3RzLgorICoKKyAqIFRoZSBiYXRj aCBtdXN0IGJlIG1hdGVyaWFsaXplZCAoc2xvdHMgcG9wdWxhdGVkKSBiZWZvcmUgY2FsbGluZyB0 aGlzLgorICovCitpbnQKK0V4ZWNRdWFsQmF0Y2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBUdXBsZUJhdGNoICpiKQoreworCWludAkJaTsKKwl1aW50NjQgKm1hc2s7 CisJaW50CQlrZXB0ID0gMDsKKwlCYXRjaFF1YWxSdW50aW1lICpydCA9IEV4ZWNHZXRCYXRjaFF1 YWxSdW50aW1lKHN0YXRlKTsKKworCS8qIHZlcmlmeSB0aGF0IGV4cHJlc3Npb24gd2FzIGNvbXBp bGVkIHVzaW5nIEV4ZWNJbml0UXVhbEJhdGNoICovCisJQXNzZXJ0KHN0YXRlLT5mbGFncyAmIEVF T19GTEFHX0lTX1FVQUwpOworCUFzc2VydChydCAmJiBydC0+bWFzayAmJiBydC0+bWFza193b3Jk cyk7CisKKwkvKiBydW4gdGhlIGJhdGNoZWQgRUVPUCBwcm9ncmFtIG9uY2UgKi8KKwllY29udGV4 dC0+c2Nhbl9iYXRjaCA9IGI7CisJRXhlY0V2YWxFeHByTm9SZXR1cm4oc3RhdGUsIGVjb250ZXh0 KTsKKworCW1hc2sgPSBydC0+bWFzazsKKwlpZiAobWFza19pc19lbXB0eShtYXNrLCBydC0+bWFz a193b3JkcykpCisJCXJldHVybiAwOworCisJLyogQWRkIHN1cnZpdm9ycyBpbnRvIG91dHNsb3Rz ICovCisJVHVwbGVCYXRjaFJld2luZChiKTsKKwlpID0gMDsKKwl3aGlsZSAoVHVwbGVCYXRjaEhh c01vcmUoYikpCisJeworCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9IFR1cGxlQmF0Y2hHZXROZXh0 U2xvdChiKTsKKworCQkvKiBtYXNrIGJpdCBzZXQgPT4gcm93IHN1cnZpdmVzICovCisJCWlmICht YXNrW2kgPj4gNl0gJiAoVUlOVDY0Q09OU1QoMSkgPDwgKGkgJiA2MykpKQorCQkJVHVwbGVCYXRj aFN0b3JlSW5PdXQoYiwga2VwdCsrLCBzbG90KTsKKwkJaSsrOworCX0KKworCXJldHVybiBrZXB0 OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCmluZGV4IGI3NjhlYWU5ZTUzLi41MDgyZDhl Y2QzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBsZXMuYwpAQCAtMjExMSw2ICsyMTExLDM4IEBA IHNsb3RfZ2V0c29tZWF0dHJzX2ludChUdXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGF0dG51bSkK IAl9CiB9CiAKK3ZvaWQKK3Nsb3RfZ2V0c29tZWF0dHJzX2JhdGNoKHN0cnVjdCBUdXBsZUJhdGNo ICpiLCBpbnQgYXR0bnVtKQoreworCXdoaWxlIChUdXBsZUJhdGNoSGFzTW9yZShiKSkKKwl7CisJ CVR1cGxlVGFibGVTbG90ICpzbG90ID0gVHVwbGVCYXRjaEdldE5leHRTbG90KGIpOworCisJCS8q IENoZWNrIGZvciBjYWxsZXIgZXJyb3JzICovCisJCUFzc2VydChhdHRudW0gPiAwKTsKKworCQlp ZiAodW5saWtlbHkoYXR0bnVtID4gc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvci0+bmF0dHMpKQor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXR0cmlidXRlIG51bWJlciAlZCIsIGF0dG51bSk7CisK KwkJLyogWFhYIC0gdGhlcmUgc2hvdWxkIHBlcmhhcHMgYWxzbyBiZSBhIGJhdGNoLWxldmVsIGF0 dF9udmFsaWQgKi8KKwkJaWYgKGF0dG51bSA8IHNsb3QtPnR0c19udmFsaWQpCisJCQljb250aW51 ZTsKKworCQkvKiBGZXRjaCBhcyBtYW55IGF0dHJpYnV0ZXMgYXMgcG9zc2libGUgZnJvbSB0aGUg dW5kZXJseWluZyB0dXBsZS4gKi8KKwkJc2xvdC0+dHRzX29wcy0+Z2V0c29tZWF0dHJzKHNsb3Qs IGF0dG51bSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHVuZGVybHlpbmcgdHVwbGUgZG9lc24ndCBo YXZlIGVub3VnaCBhdHRyaWJ1dGVzLCB0dXBsZQorCQkgKiBkZXNjcmlwdG9yIG11c3QgaGF2ZSB0 aGUgbWlzc2luZyBhdHRyaWJ1dGVzLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHNsb3QtPnR0c19u dmFsaWQgPCBhdHRudW0pKQorCQl7CisJCQlzbG90X2dldG1pc3NpbmdhdHRycyhzbG90LCBzbG90 LT50dHNfbnZhbGlkLCBhdHRudW0pOworCQkJc2xvdC0+dHRzX252YWxpZCA9IGF0dG51bTsKKwkJ fQorCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNUeXBlRnJvbVRMCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVTZXFzY2FuLmMKaW5kZXggZjM2YjMxZDRmYmIuLjE2ZjE1ZWQ2OGFhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKQEAgLTI4MSw2ICsyODEsMjggQEAgRXhlY1NlcVNjYW5C YXRjaFNsb3QoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCQkJCQkgTlVMTCwgTlVMTCk7CiB9CiAK K3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqCitFeGVjU2VxU2NhbkJhdGNoU2xvdFdpdGhCYXRjaFF1 YWwoUGxhblN0YXRlICpwc3RhdGUpCit7CisJU2VxU2NhblN0YXRlICpub2RlID0gY2FzdE5vZGUo U2VxU2NhblN0YXRlLCBwc3RhdGUpOworCVR1cGxlQmF0Y2ggKmIgPSBwc3RhdGUtPnBzX0JhdGNo OworCisJLyoKKwkgKiBVc2UgcGdfYXNzdW1lKCkgZm9yICE9IE5VTEwgdGVzdHMgdG8gbWFrZSB0 aGUgY29tcGlsZXIgcmVhbGl6ZSBubworCSAqIHJ1bnRpbWUgY2hlY2sgZm9yIHRoZSBmaWVsZCBp cyBuZWVkZWQgaW4gRXhlY1NjYW5FeHRlbmRlZCgpLgorCSAqLworCUFzc2VydChwc3RhdGUtPnN0 YXRlLT5lc19lcHFfYWN0aXZlID09IE5VTEwpOworCXBnX2Fzc3VtZShwc3RhdGUtPnF1YWxfYmF0 Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHBzdGF0ZS0+cHNfUHJvakluZm8gPT0gTlVMTCk7CisKKwlp ZiAoIVR1cGxlQmF0Y2hIYXNNb3JlKGIpKQorCQliID0gRXhlY1NjYW5FeHRlbmRlZEJhdGNoKCZu b2RlLT5zcywKKwkJCQkJCQkJICAoRXhlY1NjYW5BY2Nlc3NCYXRjaE10ZCkgU2VxTmV4dEJhdGNo TWF0ZXJpYWxpemUsCisJCQkJCQkJCSAgcHN0YXRlLT5xdWFsX2JhdGNoLCBOVUxMKTsKKworCXJl dHVybiBiID8gVHVwbGVCYXRjaEdldE5leHRTbG90KGIpIDogTlVMTDsKK30KKwogc3RhdGljIFR1 cGxlVGFibGVTbG90ICoKIEV4ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aFF1YWwoUGxhblN0YXRlICpw c3RhdGUpCiB7CkBAIC0zNDQsNiArMzY2LDcgQEAgU2VxU2NhbkluaXRCYXRjaGluZyhTZXFTY2Fu U3RhdGUgKnNjYW5zdGF0ZSwgaW50IGVmbGFncykKIAlib29sIHRyYWNrX3N0YXRzID0gZXN0YXRl LT5lc19pbnN0cnVtZW50ICYmIChlc3RhdGUtPmVzX2luc3RydW1lbnQgJiBJTlNUUlVNRU5UX0JB VENIRVMpOwogCiAJc2NhbnN0YXRlLT5zcy5wcy5wc19CYXRjaCA9IFR1cGxlQmF0Y2hDcmVhdGUo c2NhbmRlc2MsIGNhcCwgdHJhY2tfc3RhdHMpOworCXNjYW5zdGF0ZS0+c3MucHMucXVhbF9iYXRj aCA9IEV4ZWNJbml0UXVhbEJhdGNoKChQbGFuU3RhdGUgKikgc2NhbnN0YXRlKTsKIAogCS8qIENo b29zZSBiYXRjaCB2YXJpYW50IHRvIHByZXNlcnZlIHlvdXIgc3BlY2lhbGl6YXRpb24gbWF0cml4 ICovCiAJaWYgKHNjYW5zdGF0ZS0+c3MucHMucXVhbCA9PSBOVUxMKQpAQCAtMzYxLDcgKzM4NCwx MCBAQCBTZXFTY2FuSW5pdEJhdGNoaW5nKFNlcVNjYW5TdGF0ZSAqc2NhbnN0YXRlLCBpbnQgZWZs YWdzKQogCXsKIAkJaWYgKHNjYW5zdGF0ZS0+c3MucHMucHNfUHJvakluZm8gPT0gTlVMTCkKIAkJ ewotCQkJc2NhbnN0YXRlLT5zcy5wcy5FeGVjUHJvY05vZGUgPSBFeGVjU2VxU2NhbkJhdGNoU2xv dFdpdGhRdWFsOworCQkJaWYgKHNjYW5zdGF0ZS0+c3MucHMucXVhbF9iYXRjaCA9PSBOVUxMKQor CQkJCXNjYW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhlY1NlcVNjYW5CYXRjaFNsb3RX aXRoUXVhbDsKKwkJCWVsc2UKKwkJCQlzY2Fuc3RhdGUtPnNzLnBzLkV4ZWNQcm9jTm9kZSA9IEV4 ZWNTZXFTY2FuQmF0Y2hTbG90V2l0aEJhdGNoUXVhbDsKIAkJfQogCQllbHNlCiAJCXsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggNjUwZjFkNDJhOTMuLjg0N2YyNjVkZjNiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMv YmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpAQCAtMTA5LDYgKzEwOSw5IEBAIGxsdm1f Y29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJTExWTVZhbHVlUmVmIHZfbmV3c2xvdDsK IAlMTFZNVmFsdWVSZWYgdl9yZXN1bHRzbG90OwogCisJLyogYmF0Y2hlcyAqLworCUxMVk1WYWx1 ZVJlZiB2X3NjYW5iYXRjaDsKKwogCS8qIG51bGxzL3ZhbHVlcyBvZiBzbG90cyAqLwogCUxMVk1W YWx1ZVJlZiB2X2lubmVydmFsdWVzOwogCUxMVk1WYWx1ZVJlZiB2X2lubmVybnVsbHM7CkBAIC0y MjEsNiArMjI0LDExIEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJ CQkJCQkgdl9zdGF0ZSwKIAkJCQkJCQkJCSBGSUVMRE5PX0VYUFJTVEFURV9SRVNVTFRTTE9ULAog CQkJCQkJCQkJICJ2X3Jlc3VsdHNsb3QiKTsKKwl2X3NjYW5iYXRjaCA9IGxfbG9hZF9zdHJ1Y3Rf Z2VwKGIsCisJCQkJCQkJCQlTdHJ1Y3RFeHByQ29udGV4dCwKKwkJCQkJCQkJCXZfZWNvbnRleHQs CisJCQkJCQkJCQlGSUVMRE5PX0VYUFJDT05URVhUX1NDQU5CQVRDSCwKKwkJCQkJCQkJCSJ2X3Nj YW5iYXRjaCIpOwogCiAJLyogYnVpbGQgZ2xvYmFsIHZhbHVlcy9pc251bGwgcG9pbnRlcnMgKi8K IAl2X3NjYW52YWx1ZXMgPSBsX2xvYWRfc3RydWN0X2dlcChiLApAQCAtMjk0MCw2ICsyOTQ4LDMz IEBAIGxsdm1fY29tcGlsZV9leHByKEV4cHJTdGF0ZSAqc3RhdGUpCiAJCQkJTExWTUJ1aWxkQnIo Yiwgb3BibG9ja3Nbb3BubyArIDFdKTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBFRU9QX1NDQU5f RkVUQ0hTT01FX0JBVENIOgorCQkJCXsKKwkJCQkJTExWTVZhbHVlUmVmIHBhcmFtc1syXTsKKwor CQkJCQlwYXJhbXNbMF0gPSB2X3NjYW5iYXRjaDsKKwkJCQkJcGFyYW1zWzFdID0gbF9pbnQzMl9j b25zdChsYywgb3AtPmQuZmV0Y2hfYmF0Y2gubGFzdF92YXIpOworCisJCQkJCQlsX2NhbGwoYiwK KwkJCQkJCQkgICBsbHZtX3BnX3Zhcl9mdW5jX3R5cGUoInNsb3RfZ2V0c29tZWF0dHJzX2JhdGNo IiksCisJCQkJCQkJICAgbGx2bV9wZ19mdW5jKG1vZCwgInNsb3RfZ2V0c29tZWF0dHJzX2JhdGNo IiksCisJCQkJCQkJICAgcGFyYW1zLCBsZW5ndGhvZihwYXJhbXMpLCAiIik7CisKKwkJCQkJTExW TUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3BubyArIDFdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJ CQljYXNlIEVFT1BfUVVBTF9CQVRDSF9JTklUTUFTSzoKKwkJCQlidWlsZF9FdmFsWEZ1bmMoYiwg bW9kLCAiRXhlY1F1YWxCYXRjaEluaXRNYXNrIiwKKwkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNv bnRleHQpOworCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CisJCQkJYnJl YWs7CisJCQljYXNlIEVFT1BfUVVBTF9CQVRDSF9URVJNOgorCQkJCWJ1aWxkX0V2YWxYRnVuYyhi LCBtb2QsICJFeGVjUXVhbEJhdGNoVGVybSIsCisJCQkJCQkJCXZfc3RhdGUsIG9wLCB2X2Vjb250 ZXh0KTsKKwkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcG5vICsgMV0pOworCQkJCWJyZWFr OworCiAJCQljYXNlIEVFT1BfTEFTVDoKIAkJCQlBc3NlcnQoZmFsc2UpOwogCQkJCWJyZWFrOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jIGIvc3JjL2Jh Y2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCmluZGV4IDQ2MzZiOTBjZDBmLi41YmE5OTIw ZjNmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCisr KyBiL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwpAQCAtMTc5LDcgKzE3OSwx MCBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlNYWtlRXhwYW5kZWRPYmpl Y3RSZWFkT25seUludGVybmFsLAogCXNsb3RfZ2V0bWlzc2luZ2F0dHJzLAogCXNsb3RfZ2V0c29t ZWF0dHJzX2ludCwKKwlzbG90X2dldHNvbWVhdHRyc19iYXRjaCwKIAlzdHJsZW4sCiAJdmFyc2l6 ZV9hbnksCiAJRXhlY0ludGVycEV4cHJTdGlsbFZhbGlkLAorCUV4ZWNRdWFsQmF0Y2hJbml0TWFz aywKKwlFeGVjUXVhbEJhdGNoVGVybSwKIH07CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBh YTliMzYxZmEzMS4uMjY3MmQyNjc0Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNFeHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMjky LDExICsyOTIsMjkgQEAgdHlwZWRlZiBlbnVtIEV4cHJFdmFsT3AKIAlFRU9QX0FHR19PUkRFUkVE X1RSQU5TX0RBVFVNLAogCUVFT1BfQUdHX09SREVSRURfVFJBTlNfVFVQTEUsCiAKKwkvKgorCSAq IEJhdGNoZWQgcXVhbCBldmFsdWF0aW9uIG9wY29kZXMKKwkgKgorCSAqIFRoZXNlIG9wY29kZXMg aW1wbGVtZW50IGJhdGNoLW1vZGUgcXVhbCBldmFsdWF0aW9uIHdoZXJlIGFuIGVudGlyZQorCSAq IFR1cGxlQmF0Y2ggaXMgcHJvY2Vzc2VkIGF0IG9uY2UgcmF0aGVyIHRoYW4gdHVwbGUtYnktdHVw bGUuCisJICoKKwkgKiBFRU9QX1NDQU5fRkVUQ0hTT01FX0JBVENIOiBDYWxsIHNsb3RfZ2V0c29t ZWF0dHJzKCkgb24gYWxsIHNsb3RzIGluCisJICogICAgIHRoZSBiYXRjaCB0byBlbnN1cmUgbmVl ZGVkIGF0dHJpYnV0ZXMgYXJlIGRlZm9ybWVkLgorCSAqCisJICogRUVPUF9RVUFMX0JBVENIX0lO SVRNQVNLOiBJbml0aWFsaXplIHRoZSByZXN1bHQgYml0bWFzayB0byBhbGwtb25lcworCSAqICAg ICAoYWxsIHJvd3MgaW5pdGlhbGx5IHBhc3MpLgorCSAqCisJICogRUVPUF9RVUFMX0JBVENIX1RF Uk06IEV2YWx1YXRlIG9uZSBxdWFsIGxlYWYgKE51bGxUZXN0IG9yIE9wRXhwcikgb3ZlcgorCSAq ICAgICBhbGwgcm93cywgY2xlYXJpbmcgbWFzayBiaXRzIGZvciByb3dzIHRoYXQgZmFpbC4KKwkg Ki8KKwlFRU9QX1NDQU5fRkVUQ0hTT01FX0JBVENILAorCUVFT1BfUVVBTF9CQVRDSF9JTklUTUFT SywKKwlFRU9QX1FVQUxfQkFUQ0hfVEVSTSwKKwogCS8qIG5vbi1leGlzdGVudCBvcGVyYXRpb24s IHVzZWQgZS5nLiB0byBjaGVjayBhcnJheSBsZW5ndGhzICovCiAJRUVPUF9MQVNUCiB9IEV4cHJF dmFsT3A7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiB7CiAJLyoKQEAgLTMzMSw2 ICszNDksMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCQljb25zdCBUdXBsZVRh YmxlU2xvdE9wcyAqa2luZDsKIAkJfQkJCWZldGNoOwogCisJCXN0cnVjdAorCQl7CisJCQkvKiBh dHRyaWJ1dGUgbnVtYmVyIHVwIHRvIHdoaWNoIHRvIGZldGNoIChpbmNsdXNpdmUpICovCisJCQlp bnQJCQlsYXN0X3ZhcjsKKwkJfQkJCWZldGNoX2JhdGNoOworCiAJCS8qIGZvciBFRU9QX0lOTkVS L09VVEVSL1NDQU4vT0xEL05FV19bU1lTXVZBUiAqLwogCQlzdHJ1Y3QKIAkJewpAQCAtNzY5LDYg Kzc5MywxNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByRXZhbFN0ZXAKIAkJCXZvaWQJICAgKmpzb25f Y29lcmNpb25fY2FjaGU7CiAJCQlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CiAJCX0JCQlq c29uZXhwcl9jb2VyY2lvbjsKKworCQlzdHJ1Y3QKKwkJeworCQkJdWludDY0CQkJICAgKm1hc2s7 CQkvKiBzaGFyZWQgbWFzayBidWZmZXIgZm9yIHRoaXMgcHJvZ3JhbSAqLworCQkJaW50CQkJCQlt YXNrX3dvcmRzOyAvKiBjZWlsKGVzX21heF9iYXRjaC82NCkgKi8KKwkJfQkJCXF1YWxiYXRjaF9p bml0OwkJCS8qIEVFT1BfUVVBTF9CQVRDSF9JTklUTUFTSyAqLworCisJCXN0cnVjdAorCQl7CisJ CQlzdHJ1Y3QgQmF0Y2hRdWFsVGVybSAqdGVybTsJCS8qIGNvbXBpbGVkIGxlYWYgKi8KKwkJfQkJ CXF1YWxiYXRjaF90ZXJtOwkJCS8qIEVFT1BfUVVBTF9CQVRDSF9URVJNICovCiAJfQkJCWQ7CiB9 IEV4cHJFdmFsU3RlcDsKIApAQCAtOTE3LDQgKzk1Miw1MSBAQCBleHRlcm4gdm9pZCBFeGVjRXZh bEFnZ09yZGVyZWRUcmFuc0RhdHVtKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3As CiBleHRlcm4gdm9pZCBFeGVjRXZhbEFnZ09yZGVyZWRUcmFuc1R1cGxlKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7 CiAKKy8qIFNlZSBFeGVjUXVhbEJhdGNoVGVybSgpLiAqLwordHlwZWRlZiBlbnVtIEJhdGNoUXVh bFRlcm1LaW5kCit7CisJQlFUS19WQVJfQ09OU1QsCisJQlFUS19WQVJfVkFSLAorCUJRVEtfSVNf TlVMTCwKKwlCUVRLX0lTX05PVF9OVUxMLAorfSBCYXRjaFF1YWxUZXJtS2luZDsKKwordHlwZWRl ZiBzdHJ1Y3QgQmF0Y2hRdWFsVGVybQoreworCUJhdGNoUXVhbFRlcm1LaW5kIGtpbmQ7CisJYm9v bAkJc3RyaWN0OwkJLyogZm9sbG93IHN0cmljdCBOVUxMIHNlbWFudGljcyBpZiB0cnVlICovCisJ QXR0ck51bWJlcglsX2F0dG5vOwkvKiBsZWZ0IFZBUiBjb2x1bW4gKi8KKwlBdHRyTnVtYmVyCXJf YXR0bm87CS8qIHJpZ2h0IFZBUiBjb2x1bW4sIG9yIC0xIGlmIENvbnN0ICovCisJRGF0dW0JCXJf Y29uc3Q7CS8qIGZvciBWQVJfQ09OU1QgKi8KKwlib29sCQlyX2lzbnVsbDsJLyogZm9yIFZBUl9D T05TVCAqLworCUZtZ3JJbmZvICAgKmZpbmZvOwkJLyogZm1nciBmb3IgZ2VuZXJpYyBiaW5hcnkg b3BzICovCisJT2lkCQkJY29sbGF0aW9uOwkvKiBvcCBjb2xsYXRpb24gKi8KK30gQmF0Y2hRdWFs VGVybTsKKworLyoKKyAqIEJhdGNoUXVhbFJ1bnRpbWUgLSBleGVjdXRpb24gc3RhdGUgZm9yIGJh dGNoZWQgcXVhbCBldmFsdWF0aW9uCisgKgorICogQXR0YWNoZWQgdG8gRXhwclN0YXRlLmJhdGNo X3ByaXZhdGUgZm9yIHRoZSBiYXRjaGVkIHF1YWwgcHJvZ3JhbS4KKyAqIENvbnRhaW5zIHRoZSBi aXRtYXNrIHRoYXQgdHJhY2tzIHdoaWNoIHJvd3MgcGFzcyB0aGUgcXVhbCAoYml0IHNldCA9IHBh c3MpLAorICogYW5kIHJlZmVyZW5jZXMgdG8gdGhlIEJhdGNoVmVjdG9yIGZvciBFRU9QX1FVQUxf QkFUQ0hfVEVSTSB0byB1c2UuCisgKgorICogVGhlIG1hc2sgdXNlcyBzdGFuZGFyZCBiaXQgb3Bl cmF0aW9uczogd29yZCA9IGkvNjQsIGJpdCA9IGklNjQuCisgKiBJbml0aWFsaXplZCB0byBhbGwt b25lcyBieSBFRU9QX1FVQUxfQkFUQ0hfSU5JVE1BU0ssIHRoZW4gZWFjaAorICogRUVPUF9RVUFM X0JBVENIX1RFUk0gY2xlYXJzIGJpdHMgZm9yIGZhaWxpbmcgcm93cy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgQmF0Y2hRdWFsUnVudGltZQoreworCXVpbnQ2NAkJICAgKm1hc2s7CisJaW50CQkJCW1h c2tfd29yZHM7Cit9IEJhdGNoUXVhbFJ1bnRpbWU7CisKK3N0YXRpYyBpbmxpbmUgQmF0Y2hRdWFs UnVudGltZSAqCitFeGVjR2V0QmF0Y2hRdWFsUnVudGltZShFeHByU3RhdGUgKmJhdGNoX3F1YWwp Cit7CisJcmV0dXJuIChCYXRjaFF1YWxSdW50aW1lICopIGJhdGNoX3F1YWwtPmJhdGNoX3ByaXZh dGU7Cit9CisKK2V4dGVybiB2b2lkIEV4ZWNRdWFsQmF0Y2hJbml0TWFzayhFeHByU3RhdGUgKnN0 YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQpOworZXh0ZXJuIHZv aWQgRXhlY1F1YWxCYXRjaFRlcm0oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwg RXhwckNvbnRleHQgKmVjb250ZXh0KTsKKwogI2VuZGlmCQkJCQkJCS8qIEVYRUNfRVhQUl9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjU2Nhbi5oIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaAppbmRleCBkOTE4NTMzMWUyMi4uMDA4NzgwZWEyMzAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNTY2FuLmgKKysrIGIvc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY1NjYW4uaApAQCAtMzIwLDQgKzMyMCw1MCBAQCBFeGVjU2NhbkV4dGVu ZGVkQmF0Y2hTbG90KFNjYW5TdGF0ZSAqbm9kZSwKIAl9CiB9CiAKKy8qCisgKiBFeGVjU2NhbkV4 dGVuZGVkQmF0Y2gKKyAqCQlCYXRjaC1kcml2ZW4gc2NhbiB3aXRoIGJhdGNoZWQgcXVhbCBldmFs dWF0aW9uLgorICoKKyAqIFVubGlrZSBFeGVjU2NhbkV4dGVuZGVkQmF0Y2hTbG90IHdoaWNoIGV2 YWx1YXRlcyBxdWFscyB0dXBsZS1hdC1hLXRpbWUsCisgKiB0aGlzIGZ1bmN0aW9uIHVzZXMgRXhl Y1F1YWxCYXRjaCgpIHRvIGV2YWx1YXRlIHRoZSBlbnRpcmUgYmF0Y2ggYXQgb25jZQorICogdXNp bmcgYSBiaXRtYXNrLiBRdWFsaWZ5aW5nIHR1cGxlcyBhcmUgY29sbGVjdGVkIGludG8gYi0+b3V0 c2xvdHMuCisgKgorICogUmV0dXJucyB0aGUgVHVwbGVCYXRjaCB3aXRoIG52YWxpZCBzZXQgdG8g dGhlIG51bWJlciBvZiBxdWFsaWZ5aW5nIHJvd3MsCisgKiBvciBOVUxMIGF0IGVuZC1vZi1zY2Fu LiBDYWxsZXIgaXRlcmF0ZXMgYi0+b3V0c2xvdHNbMC4ubnZhbGlkLTFdLgorICoKKyAqIE5vdGU6 IEVQUSBpcyBub3Qgc3VwcG9ydGVkOyBwcm9qZWN0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQu CisgKi8KK3N0YXRpYyBpbmxpbmUgVHVwbGVCYXRjaCAqCitFeGVjU2NhbkV4dGVuZGVkQmF0Y2go U2NhblN0YXRlICpub2RlLAorCQkJCQkgIEV4ZWNTY2FuQWNjZXNzQmF0Y2hNdGQgYWNjZXNzQmF0 Y2hNdGQsCisJCQkJCSAgRXhwclN0YXRlICpxdWFsX2JhdGNoLCBQcm9qZWN0aW9uSW5mbyAqcHJv akluZm8pCit7CisJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbm9kZS0+cHMucHNfRXhwckNvbnRl eHQ7CisJVHVwbGVCYXRjaCAqYiA9IG5vZGUtPnBzLnBzX0JhdGNoOworCWludAkJCXF1YWxpZmll ZDsKKworCS8qIEJhdGNoIHBhdGggZG9lcyBub3Qgc3VwcG9ydCBFUFEgKi8KKwlBc3NlcnQobm9k ZS0+cHMuc3RhdGUtPmVzX2VwcV9hY3RpdmUgPT0gTlVMTCk7CisJQXNzZXJ0KFR1cGxlQmF0Y2hJ c1ZhbGlkKGIpKTsKKworCWZvciAoOzspCisJeworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwor CisJCS8qIEdldCBuZXh0IGJhdGNoIGZyb20gdGhlIEFNICovCisJCWlmICghYWNjZXNzQmF0Y2hN dGQobm9kZSkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlSZXNldEV4cHJDb250ZXh0KGVjb250ZXh0 KTsKKwkJcXVhbGlmaWVkID0gRXhlY1F1YWxCYXRjaChxdWFsX2JhdGNoLCBlY29udGV4dCwgYik7 CisJCUluc3RyQ291bnRGaWx0ZXJlZDEobm9kZSwgYi0+bnZhbGlkIC0gcXVhbGlmaWVkKTsKKwkJ LyogVXBkYXRlIGNvdW50IGFuZCBzdGFydCB1c2luZyBiLT5vdXRzbG90cy4gKi8KKwkJVHVwbGVC YXRjaFVzZU91dHB1dChiLCBxdWFsaWZpZWQpOworCisJCWlmIChxdWFsaWZpZWQgPiAwKQorCQkJ cmV0dXJuIGI7CisJCS8qIGVsc2UgZ2V0IHRoZSBuZXh0IGJhdGNoIGZyb20gdGhlIEFNICovCisJ fQorfQorCiAjZW5kaWYJCQkJCQkJLyogRVhFQ1NDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKaW5kZXggZTgyZmQ2YzBjOGEuLjhjZGVkMTVkZWM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKQEAgLTMyNiw2ICszMjYsNyBAQCBFeGVjUHJvY05vZGUoUGxhblN0YXRlICpub2RlKQogZXh0 ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRFeHByKEV4cHIgKm5vZGUsIFBsYW5TdGF0ZSAqcGFyZW50 KTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0RXhwcldpdGhQYXJhbXMoRXhwciAqbm9kZSwg UGFyYW1MaXN0SW5mbyBleHRfcGFyYW1zKTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0UXVh bChMaXN0ICpxdWFsLCBQbGFuU3RhdGUgKnBhcmVudCk7CitleHRlcm4gRXhwclN0YXRlICpFeGVj SW5pdFF1YWxCYXRjaChQbGFuU3RhdGUgKnBzKTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0 Q2hlY2soTGlzdCAqcXVhbCwgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIExpc3QgKkV4ZWNJ bml0RXhwckxpc3QoTGlzdCAqbm9kZXMsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHBy U3RhdGUgKkV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgc3RydWN0IEFnZ1N0 YXRlUGVyUGhhc2VEYXRhICpwaGFzZSwKQEAgLTU1Myw2ICs1NTQsOCBAQCBFeGVjUXVhbEFuZFJl c2V0KEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCkKIH0KICNlbmRpZgog CitleHRlcm4gaW50IEV4ZWNRdWFsQmF0Y2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQg KmVjb250ZXh0LCBUdXBsZUJhdGNoICpiKTsKKwogZXh0ZXJuIGJvb2wgRXhlY0NoZWNrKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCk7CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVw dGFibGUuaAppbmRleCBhMmRmZDcwN2U3OC4uYjA2YmU4M2IxNDEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVw dGFibGUuaApAQCAtMzQ2LDYgKzM0Niw4IEBAIGV4dGVybiBEYXR1bSBFeGVjRmV0Y2hTbG90SGVh cFR1cGxlRGF0dW0oVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIHZvaWQgc2xvdF9nZXRt aXNzaW5nYXR0cnMoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBzdGFydEF0dE51bSwKIAkJCQkJ CQkJIGludCBsYXN0QXR0TnVtKTsKIGV4dGVybiB2b2lkIHNsb3RfZ2V0c29tZWF0dHJzX2ludChU dXBsZVRhYmxlU2xvdCAqc2xvdCwgaW50IGF0dG51bSk7CitzdHJ1Y3QgVHVwbGVCYXRjaDsKK2V4 dGVybiB2b2lkIHNsb3RfZ2V0c29tZWF0dHJzX2JhdGNoKHN0cnVjdCBUdXBsZUJhdGNoICpiLCBp bnQgYXR0bnVtKTsKIAogCiAjaWZuZGVmIEZST05URU5ECmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4 IDZhMTkxMjAyY2VkLi5jNzllZTk2NTM3MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE0OCw2 ICsxNDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKIAkgKiBFeGVjSW5pdEV4cHJSZWMo KS4KIAkgKi8KIAlFcnJvclNhdmVDb250ZXh0ICplc2NvbnRleHQ7CisKKwkvKiBiYXRjaGVkLXBy b2dyYW0gcnVudGltZSAoZS5nLiwgQmF0Y2hRdWFsUnVudGltZSkgKi8KKwl2b2lkCSAqYmF0Y2hf cHJpdmF0ZTsKIH0gRXhwclN0YXRlOwogCiAKQEAgLTMxNCw2ICszMTcsMTAgQEAgdHlwZWRlZiBz dHJ1Y3QgRXhwckNvbnRleHQKICNkZWZpbmUgRklFTEROT19FWFBSQ09OVEVYVF9ORVdUVVBMRSAx NQogCVR1cGxlVGFibGVTbG90ICplY3h0X25ld3R1cGxlOwogCisJLyogRm9yIGJhdGNoZWQgZXZh bHVhdGlvbiB1c2luZyBiYXRjaC1hd2FyZSBFRU9QcyAqLworI2RlZmluZSBGSUVMRE5PX0VYUFJD T05URVhUX1NDQU5CQVRDSCAxNgorCVR1cGxlQmF0Y2gJICAgKnNjYW5fYmF0Y2g7CisKIAkvKiBM aW5rIHRvIGNvbnRhaW5pbmcgRVN0YXRlIChOVUxMIGlmIGEgc3RhbmRhbG9uZSBFeHByQ29udGV4 dCkgKi8KIAlzdHJ1Y3QgRVN0YXRlICplY3h0X2VzdGF0ZTsKIApAQCAtMTE4Niw3ICsxMTkzLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUGxhblN0YXRlCiAJICogc3RhdGUgdHJlZXMgcGFyYWxsZWwgbGlu a3MgaW4gdGhlIGFzc29jaWF0ZWQgcGxhbiB0cmVlIChleGNlcHQgZm9yIHRoZQogCSAqIHN1YlBs YW4gbGlzdCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gdGhlIHBsYW4gdHJlZSkuCiAJICovCi0J RXhwclN0YXRlICAqcXVhbDsJCQkvKiBib29sZWFuIHF1YWwgY29uZGl0aW9uICovCisJRXhwclN0 YXRlICAqcXVhbDsJCQkvKiBib29sZWFuIHF1YWwgY29uZGl0aW9uIChwZXIgdHVwbGUpICovCisJ RXhwclN0YXRlICAqcXVhbF9iYXRjaDsJCS8qIGJhdGNoZWQgcXVhbCBwcm9ncmFtLCBOVUxMIGlm IHF1YWwgbm90CisJCQkJCQkJCSAqIGJhdGNoYWJsZSAqLwogCVBsYW5TdGF0ZSAgKmxlZnR0cmVl OwkJLyogaW5wdXQgcGxhbiB0cmVlKHMpICovCiAJUGxhblN0YXRlICAqcmlnaHR0cmVlOwogCi0t IAoyLjQ3LjMKCg== --000000000000bc2c07064981e6d7 Content-Type: application/octet-stream; name="v5-0005-WIP-Use-dedicated-interpreter-for-batched-qual-ev.patch" Content-Disposition: attachment; filename="v5-0005-WIP-Use-dedicated-interpreter-for-batched-qual-ev.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkz4x7ni4 RnJvbSA0OTE2YTA4OTFiMmU3MTc2ZGVlM2MyYTNhODAxOGE0ZDE3NGRkMzczIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFRodSwgMjkgSmFuIDIwMjYgMDU6MDM6NTUgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1 IDUvNV0gV0lQOiBVc2UgZGVkaWNhdGVkIGludGVycHJldGVyIGZvciBiYXRjaGVkIHF1YWwKIGV2 YWx1YXRpb24KCk1vdmUgYmF0Y2gtcmVsYXRlZCBvcGNvZGVzIChFRU9QX1NDQU5fRkVUQ0hTT01F X0JBVENILApFRU9QX1FVQUxfQkFUQ0hfSU5JVE1BU0ssIEVFT1BfUVVBTF9CQVRDSF9URVJNKSBv dXQgb2YgdGhlIG1haW4KRXhlY0ludGVycEV4cHIgc3dpdGNoIGFuZCBpbnRvIGEgZGVkaWNhdGVk IEV4ZWNJbnRlcnBRdWFsQmF0Y2gKZnVuY3Rpb24uCgpBZGRpbmcgb3Bjb2RlcyB0byBFeGVjSW50 ZXJwRXhwciBtYXkgYWZmZWN0IHBlcmZvcm1hbmNlIGV2ZW4gd2hlbgp0aGV5IGFyZSBub3QgZXhl Y3V0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjaGFuZ2VzIGluIHJlZ2lzdGVyIGFsbG9jYXRpb24sCmp1 bXAgdGFibGUgbGF5b3V0LCBvciBjb2RlIHNpemUuIFVzZSBhIHNlcGFyYXRlIGludGVycHJldGVy IHRvIGF2b2lkCmFueSByaXNrIG9mIGltcGFjdGluZyB0aGUgZXhpc3RpbmcgcGVyLXR1cGxlIGV2 YWx1YXRpb24gcGF0aC4KClRoZSBiYXRjaGVkIHF1YWwgcHJvZ3JhbSBoYXMgYSBzaW1wbGUgbGlu ZWFyIHN0cnVjdHVyZSAoZmV0Y2ggLT4KaW5pdG1hc2sgLT4gdGVybSogLT4gZG9uZSkgdGhhdCBk b2Vzbid0IG5lZWQgY29tcHV0ZWQgZ290byBkaXNwYXRjaAphbnl3YXkuCi0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyB8IDcyICsrKysrKysrKysrKysrKysrLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYyAgICB8ICA2ICstLQogMiBm aWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCAzMDRjN2Y0ZTBmYi4uMDRhNDBlYzkzMmMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtMTg5LDYgKzE4OSw4IEBA IHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkIEV4ZWNBZ2dQbGFpblRyYW5z QnlSZWYoQWdnU3RhdGUgKmFnZ3N0YXRlCiAJCQkJCQkJCQkJCQkJCQkgIGludCBzZXRubyk7CiBz dGF0aWMgY2hhciAqRXhlY0dldEpzb25WYWx1ZUl0ZW1TdHJpbmcoSnNvbmJWYWx1ZSAqaXRlbSwg Ym9vbCAqcmVzbnVsbCk7CiAKK3N0YXRpYyBEYXR1bSBFeGVjSW50ZXJwUXVhbEJhdGNoKEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCk7CisKIC8qCiAgKiBTY2FsYXJBcnJh eU9wRXhwckhhc2hFbnRyeQogICogCQlIYXNoIHRhYmxlIGVudHJ5IHR5cGUgdXNlZCBkdXJpbmcg RUVPUF9IQVNIRURfU0NBTEFSQVJSQVlPUApAQCAtMjY2LDYgKzI2OCwxMiBAQCBFeGVjUmVhZHlJ bnRlcnByZXRlZEV4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkgKi8KIAlzdGF0ZS0+ZXZhbGZ1bmMg PSBFeGVjSW50ZXJwRXhwclN0aWxsVmFsaWQ7CiAKKwlpZiAoc3RhdGUtPmJhdGNoX3ByaXZhdGUp CisJeworCQlzdGF0ZS0+ZXZhbGZ1bmNfcHJpdmF0ZSA9ICh2b2lkICopIEV4ZWNJbnRlcnBRdWFs QmF0Y2g7CisJCXJldHVybjsKKwl9CisKIAkvKiBESVJFQ1RfVEhSRUFERUQgc2hvdWxkIG5vdCBh bHJlYWR5IGJlIHNldCAqLwogCUFzc2VydCgoc3RhdGUtPmZsYWdzICYgRUVPX0ZMQUdfRElSRUNU X1RIUkVBREVEKSA9PSAwKTsKIApAQCAtNDY3LDcgKzQ3NSw2IEBAIEV4ZWNJbnRlcnBFeHByKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQogCVR1 cGxlVGFibGVTbG90ICpzY2Fuc2xvdDsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdDsKIAlUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdDsKLQlUdXBsZUJhdGNoICpzY2FuYmF0Y2g7CiAKIAkvKgogCSAq IFRoaXMgYXJyYXkgaGFzIHRvIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGVudW0gRXhwckV2YWxP cC4KQEAgLTU5NCw5ICs2MDEsOSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBF eHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZDQVNFX0VFT1BfQUdHX1BS RVNPUlRFRF9ESVNUSU5DVF9NVUxUSSwKIAkJJiZDQVNFX0VFT1BfQUdHX09SREVSRURfVFJBTlNf REFUVU0sCiAJCSYmQ0FTRV9FRU9QX0FHR19PUkRFUkVEX1RSQU5TX1RVUExFLAotCQkmJkNBU0Vf RUVPUF9TQ0FOX0ZFVENIU09NRV9CQVRDSCwKLQkJJiZDQVNFX0VFT1BfUVVBTF9CQVRDSF9JTklU TUFTSywKLQkJJiZDQVNFX0VFT1BfUVVBTF9CQVRDSF9URVJNLAorCQkmJkNBU0VfRUVPUF9CQVRD SF9VTlJFQUNIQUJMRSwgIC8qIEVFT1BfU0NBTl9GRVRDSFNPTUVfQkFUQ0ggKi8KKwkJJiZDQVNF X0VFT1BfQkFUQ0hfVU5SRUFDSEFCTEUsICAvKiBFRU9QX1FVQUxfQkFUQ0hfSU5JVE1BU0sgKi8K KwkJJiZDQVNFX0VFT1BfQkFUQ0hfVU5SRUFDSEFCTEUsICAvKiBFRU9QX1FVQUxfQkFUQ0hfVEVS TSAqLwogCQkmJkNBU0VfRUVPUF9MQVNUCiAJfTsKIApAQCAtNjE3LDcgKzYyNCw2IEBAIEV4ZWNJ bnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAq aXNudWxsKQogCXNjYW5zbG90ID0gZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlOwogCW9sZHNsb3Qg PSBlY29udGV4dC0+ZWN4dF9vbGR0dXBsZTsKIAluZXdzbG90ID0gZWNvbnRleHQtPmVjeHRfbmV3 dHVwbGU7Ci0Jc2NhbmJhdGNoID0gZWNvbnRleHQtPnNjYW5fYmF0Y2g7CiAKICNpZiBkZWZpbmVk KEVFT19VU0VfQ09NUFVURURfR09UTykKIAlFRU9fRElTUEFUQ0goKTsKQEAgLTIyNzEsMzQgKzIy NzcsMTggQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LCBib29sICppc251bGwpCiAJCQlFRU9fTkVYVCgpOwogCQl9CiAKLQkJRUVPX0NBU0Uo RUVPUF9TQ0FOX0ZFVENIU09NRV9CQVRDSCkKLQkJewotCQkJQ2hlY2tPcFNsb3RDb21wYXRpYmls aXR5KG9wLCBzY2Fuc2xvdCk7Ci0KLQkJCUFzc2VydChzY2FuYmF0Y2gpOwotCQkJc2xvdF9nZXRz b21lYXR0cnNfYmF0Y2goc2NhbmJhdGNoLCBvcC0+ZC5mZXRjaF9iYXRjaC5sYXN0X3Zhcik7Ci0K LQkJCUVFT19ORVhUKCk7Ci0JCX0KLQotCQlFRU9fQ0FTRShFRU9QX1FVQUxfQkFUQ0hfSU5JVE1B U0spCi0JCXsKLQkJCUV4ZWNRdWFsQmF0Y2hJbml0TWFzayhzdGF0ZSwgb3AsIGVjb250ZXh0KTsK LQkJCUVFT19ORVhUKCk7Ci0JCX0KLQotCQlFRU9fQ0FTRShFRU9QX1FVQUxfQkFUQ0hfVEVSTSkK LQkJewotCQkJRXhlY1F1YWxCYXRjaFRlcm0oc3RhdGUsIG9wLCBlY29udGV4dCk7Ci0JCQlFRU9f TkVYVCgpOwotCQl9Ci0KIAkJRUVPX0NBU0UoRUVPUF9MQVNUKQogCQl7CiAJCQkvKiB1bnJlYWNo YWJsZSAqLwogCQkJQXNzZXJ0KGZhbHNlKTsKIAkJCWdvdG8gb3V0X2Vycm9yOwogCQl9CisKKwkJ RUVPX0NBU0UoRUVPUF9CQVRDSF9VTlJFQUNIQUJMRSkKKwkJeworCQkJQXNzZXJ0KGZhbHNlICYm ICJiYXRjaCBvcGNvZGVzIHVzZSBkZWRpY2F0ZWQgaW50ZXJwcmV0ZXIiKTsKKwkJCXBnX3VucmVh Y2hhYmxlKCk7CisJCX0KIAl9CiAKIG91dF9lcnJvcjoKQEAgLTYwODksNiArNjA3OSwzNCBAQCBF eGVjUXVhbEJhdGNoVGVybShFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHBy Q29udGV4dCAqZWNvbnRleHQpCiAJfQogfQogCitzdGF0aWMgRGF0dW0KK0V4ZWNJbnRlcnBRdWFs QmF0Y2goRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0KQoreworCUV4cHJF dmFsU3RlcCAqb3AgPSBzdGF0ZS0+c3RlcHM7CisJVHVwbGVCYXRjaCAqc2NhbmJhdGNoID0gZWNv bnRleHQtPnNjYW5fYmF0Y2g7CisKKwkvKiBTdGVwIDE6IGZldGNoL2RlZm9ybSBhbGwgc2xvdHMg Ki8KKwlBc3NlcnQoRXhlY0V2YWxTdGVwT3Aoc3RhdGUsIG9wKSA9PSBFRU9QX1NDQU5fRkVUQ0hT T01FX0JBVENIKTsKKwlzbG90X2dldHNvbWVhdHRyc19iYXRjaChzY2FuYmF0Y2gsIG9wLT5kLmZl dGNoX2JhdGNoLmxhc3RfdmFyKTsKKwlvcCsrOworCisJLyogU3RlcCAyOiBpbml0aWFsaXplIG1h c2sgKi8KKwlBc3NlcnQoRXhlY0V2YWxTdGVwT3Aoc3RhdGUsIG9wKSA9PSBFRU9QX1FVQUxfQkFU Q0hfSU5JVE1BU0spOworCUV4ZWNRdWFsQmF0Y2hJbml0TWFzayhzdGF0ZSwgb3AsIGVjb250ZXh0 KTsKKwlvcCsrOworCisJLyogU3RlcCAzOiBwcm9jZXNzIGFsbCBURVJNIHN0ZXBzICovCisJd2hp bGUgKEV4ZWNFdmFsU3RlcE9wKHN0YXRlLCBvcCkgPT0gRUVPUF9RVUFMX0JBVENIX1RFUk0pCisJ eworCQlFeGVjUXVhbEJhdGNoVGVybShzdGF0ZSwgb3AsIGVjb250ZXh0KTsKKwkJb3ArKzsKKwl9 CisKKwlBc3NlcnQoRXhlY0V2YWxTdGVwT3Aoc3RhdGUsIG9wKSA9PSBFRU9QX0RPTkVfTk9fUkVU VVJOKTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKIC8qCiAgKiBFeGVjUXVhbEJhdGNoCiAg KgkJRXZhbHVhdGUgYSBiYXRjaGVkIHF1YWwgb3ZlciBhbGwgcm93cyBpbiBhIFR1cGxlQmF0Y2gu CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlU2Vxc2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwppbmRleCAxNmYxNWVkNjhhYS4uNGE3NjEwOGJk MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVTZXFzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVNlcXNjYW4uYwpAQCAtNDA0LDcgKzQwNCw2IEBAIFNl cVNjYW5TdGF0ZSAqCiBFeGVjSW5pdFNlcVNjYW4oU2VxU2NhbiAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiB7CiAJU2VxU2NhblN0YXRlICpzY2Fuc3RhdGU7Ci0JYm9vbAl1c2Vf YmF0Y2hpbmc7CiAKIAkvKgogCSAqIE9uY2UgdXBvbiBhIHRpbWUgaXQgd2FzIHBvc3NpYmxlIHRv IGhhdmUgYW4gb3V0ZXJQbGFuIG9mIGEgU2VxU2NhbiwgYnV0CkBAIC00MzUsMTIgKzQzNCw5IEBA IEV4ZWNJbml0U2VxU2NhbihTZXFTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFn cykKIAkJCQkJCQkgbm9kZS0+c2Nhbi5zY2FucmVsaWQsCiAJCQkJCQkJIGVmbGFncyk7CiAKLQl1 c2VfYmF0Y2hpbmcgPSBTY2FuQ2FuVXNlQmF0Y2hpbmcoJnNjYW5zdGF0ZS0+c3MsIGVmbGFncyk7 Ci0KIAkvKiBhbmQgY3JlYXRlIHNsb3Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcm93dHlwZSAqLwog CUV4ZWNJbml0U2NhblR1cGxlU2xvdChlc3RhdGUsICZzY2Fuc3RhdGUtPnNzLAogCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKSwKLQkJCQkJ CSAgdXNlX2JhdGNoaW5nID8gJlRUU09wc0hlYXBUdXBsZSA6CiAJCQkJCQkgIHRhYmxlX3Nsb3Rf Y2FsbGJhY2tzKHNjYW5zdGF0ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uKSk7CiAKIAkvKgpAQCAt NDc3LDcgKzQ3Myw3IEBAIEV4ZWNJbml0U2VxU2NhbihTZXFTY2FuICpub2RlLCBFU3RhdGUgKmVz dGF0ZSwgaW50IGVmbGFncykKIAkJCXNjYW5zdGF0ZS0+c3MucHMuRXhlY1Byb2NOb2RlID0gRXhl Y1NlcVNjYW5XaXRoUXVhbFByb2plY3Q7CiAJfQogCi0JaWYgKHVzZV9iYXRjaGluZykKKwlpZiAo U2NhbkNhblVzZUJhdGNoaW5nKCZzY2Fuc3RhdGUtPnNzLCBlZmxhZ3MpKQogCQlTZXFTY2FuSW5p dEJhdGNoaW5nKHNjYW5zdGF0ZSwgZWZsYWdzKTsKIAogCXJldHVybiBzY2Fuc3RhdGU7Ci0tIAoy LjQ3LjMKCg== --000000000000bc2c07064981e6d7--