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 1w0Hs9-001mO0-0V for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 11:37:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0Hs7-008l0W-1V for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 11:37:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0Hs7-008l0O-0O for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 11:37:03 +0000 Received: from mail-dl1-x1236.google.com ([2607:f8b0:4864:20::1236]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0Hs5-000000027zT-0LOj for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 11:37:03 +0000 Received: by mail-dl1-x1236.google.com with SMTP id a92af1059eb24-128b9b7e3edso1433879c88.0 for ; Wed, 11 Mar 2026 04:37:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773229019; cv=none; d=google.com; s=arc-20240605; b=F5/BBK9GlpZyZvikyi5HXUjQoLjuYDcCpFozoCAAGBCWqoIlV+QIJcVWcli8QuhFih HRolgdVPPzX2QK26ZvK/vRXpvCqv5Oe5/LPJIf49ol17gL8Sf5WnUFYOQUc4iPIY2qhf COt1oZKdqX2NlTcLMGWUWU/vteOM79I+yK6uypN8ynkav6t6tEs/aT3a3I3r+gszFZ32 j4gEml9wraCmHW+6MTzXAnNdaFL+lzcN13P7FWjvX8/yJHuxCrHPTZCMyBIKlGWjYUrw pQyQng3d8ddor5OsnmLkTqiC/loXBDafYD2G8x9EEcb2q1mJ+0+Fz5v/nMC3p9ovvTvF ZkCw== 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=3GxxWjDlatYJffIY4h6bcWpCFjB51l0iIJLkWkcDYTk=; fh=semW7w9d/IGSg/mZu0fSlYTUu2GrUcrNKD0H6uKw9ds=; b=Vo4XyezCaOCR0Mtn8STNOFE9aCYcIPklBa2ToO8b6xpysCwuRHauF2lKNMgwb89Ot/ fSNpyvMG3IiXHFjBM1IYRREWrMT+ocb+6JjTGT4X/i2E2xzNTdNU0yZJ1e4syvd25naS E4W5l8hZN64IO8TQsTwoSVAH3lws8zTyFw46vhBwbaIM0HFZlX8onT2ssXPm+499xQQO MEUSIz3qU0TGoQBOjceplBZZKH7Zan9c9nLlSCgBAYixEScyyv+CqEbD6POxRNZfLfxk Am7xEWquQCmchqvXnul1PPO9tqdpMiTecCc0ryOagrUKOP+5mrr3shHHGazDerXk/4WO 75/A==; 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=1773229019; x=1773833819; 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=3GxxWjDlatYJffIY4h6bcWpCFjB51l0iIJLkWkcDYTk=; b=X9vVzj3oYRelUeUH4vpJqpaw6GJg821ovO656qTMNfT6s1vMi1+bryKBEjo7GFJ0cY uZ1WYAYSCdRuJDYKBVCXr8ACmJQwDY6ctfn24yVTRU5RqXU0QUetrTybWOrq8icmmVzx uOBEXt/ZSFKgP2pwiSn9npQNm1BvBvo7+1Y/KoPm9NPIwU1s7WLQNVoVmLklVhKnLOyb 1blx23QAWxOF0a3AtxF6cI0P1U8WbCsUZkXuFCL1iAbaRNMbyOMybRaz1VjouHPsHQKE hYAzy6Q1fC186sauaJoRl/6xWAOt2QZ6UnDGpBDT74kMjK70Bv+N0EYeScPpsDtfgqD8 GQZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773229019; x=1773833819; 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=3GxxWjDlatYJffIY4h6bcWpCFjB51l0iIJLkWkcDYTk=; b=hCtEhxQkR8ry1L/6N09nrzVKXDSa7oO4Kk+LNJibeb99o4WtB3V/d6i6EiehR0bfM0 U0RdPH2sky3MCcf4aTFzn5e7nLJQyxvXtaJfsIx0NQpUJd6jSrGtDJ3rEMgCehadRiDs xIV75rD/SW1urVjnRDKrgM5AvLhDSNaNJ3Wi4Tp46rARwVRUdlNXpWxMPaZ4R+gnKlTY e2ou3Mzyq59kX+UH1ni4F/u7MJzCowvxReuePjBU7Yp/oOKnGgJKQm1SV/2eT5cu3LUI n3n0IlOAS0ZFNfzUOsI955SptiSziYM7a8PllCYB1sJhqJ7F0NC4bAHsKdPM++m4sf0M qpRA== X-Forwarded-Encrypted: i=1; AJvYcCWSFeTx7AE2nvLQULW+OMptgV96hqDxQ2FUL/su4Ck7cDlqZ4Z5Don7PIhxpAtewxCrb1iCF2cXSgLcxynT@postgresql.org X-Gm-Message-State: AOJu0YzzGhUEbuUmi/F3w7EBzjP6+d4O47BxPjOcbf5VSsjyFDxLus2Z QIQH6+Qms83gajGDBuRFu1WHQaQF5HASlwlDzqh1rI6HRzZBN+Ta6rwm1HTAMfZbr9YInUCiFR3 PmN6WT7NbhApDpPakGtRtGM2YzAQDONs= X-Gm-Gg: ATEYQzwdckaN7UKUIDn2oWaWi95MHAWi1hCjGE9WOnJaY8Qw+u/psEhUTpkfmSedr+V SRLOwcbPROrbm/4ZLF4l3+xb8+FwYd+ab1KbBWh7M/TlCi4PcSIpkqRK9u3BHXJbEtkhmOIfA8B oreg2BqdwgdnOyuPRDocj43CtrxQXwYhim3dxtmj1ViiWNWGHZWvypUl/Gr/iQLFuIDzQGWpclh GNC6T2xrD5LJvcLGSw46ZAySwqyE15pDA+TL3RQsqhAp9aAbLYS/Scp9J9tzsK9mdB99OwAW4tv NG74A5I= X-Received: by 2002:a05:7022:11d:b0:127:3440:e5d5 with SMTP id a92af1059eb24-128e781feabmr964951c88.21.1773229018596; Wed, 11 Mar 2026 04:36:58 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Nazir Bilal Yavuz Date: Wed, 11 Mar 2026 14:36:46 +0300 X-Gm-Features: AaiRm50YrfaRvJ842KPZD46-LLN7C2TnmoKBs4GhFXaGviED07vBOCE2CbeaLXc Message-ID: Subject: Re: Speed up COPY FROM text/CSV parsing using SIMD To: Nathan Bossart Cc: Manni Wood , KAZAR Ayoub , Neil Conway , Andrew Dunstan , Shinya Kato , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000c2d40a064cbe0d59" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c2d40a064cbe0d59 Content-Type: text/plain; charset="UTF-8" Hi, On Tue, 10 Mar 2026 at 20:10, Nathan Bossart wrote: > > On Tue, Mar 10, 2026 at 03:35:30PM +0300, Nazir Bilal Yavuz wrote: > > Subject: [PATCH v12] Speed up COPY FROM text/CSV parsing using SIMD > > This looks pretty good to me. I'm hoping to take a closer look in the near > future, but I think we are approaching something committable. Thanks for looking into it! I am attaching v13 of the patch. 0001 is basically some typo fixes on top of v12, no functional changes. 0002 has an attempt to remove some branches from SIMD code but since it is kind of functional change, I wanted to attach that as another patch. I think we can apply some parts of this, if not all. -- Regards, Nazir Bilal Yavuz Microsoft --000000000000c2d40a064cbe0d59 Content-Type: text/x-patch; charset="US-ASCII"; name="v13-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Disposition: attachment; filename="v13-0001-Speed-up-COPY-FROM-text-CSV-parsing-using-SIMD.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmlyqmb10 RnJvbSBmM2U5YTIzNGRkYzUzNzU0NGQ1MTBhZDM0NGViMWI4ZWIyMTI3ODU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBXZWQsIDExIE1hciAyMDI2IDE0OjA0OjI5ICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MTMgMS8yXSBTcGVlZCB1cCBDT1BZIEZST00gdGV4dC9DU1YgcGFyc2luZyB1c2luZyBTSU1ECgpD T1BZIEZST00gdGV4dCBhbmQgQ1NWIHBhcnNpbmcgcHJldmlvdXNseSBzY2FubmVkIHRoZSBpbnB1 dCBidWZmZXIKb25lIGJ5dGUgYXQgYSB0aW1lIGxvb2tpbmcgZm9yIHNwZWNpYWwgY2hhcmFjdGVy cyAobmV3bGluZSwgY2FycmlhZ2UKcmV0dXJuLCBiYWNrc2xhc2gsIGFuZCBpbiBDU1YgbW9kZSwg cXVvdGUgYW5kIGVzY2FwZSBjaGFyYWN0ZXJzKS4KVGhpcyBwYXRjaCBhZGRzIGEgU0lNRC1hY2Nl bGVyYXRlZCBmYXN0IHBhdGggdGhhdCBwcm9jZXNzZXMgYSBmdWxsCnZlY3Rvci13aWR0aCBjaHVu ayBwZXIgaXRlcmF0aW9uLCBzaWduaWZpY2FudGx5IHJlZHVjaW5nIHRoZSBudW1iZXIKb2YgaXRl cmF0aW9ucyBuZWVkZWQgb24gaW5wdXRzIHdpdGggbG9uZyBsaW5lcy4KCkEgbmV3IGhlbHBlciBm dW5jdGlvbiwgQ29weVJlYWRMaW5lVGV4dFNJTURIZWxwZXIoKSwgbG9hZHMgY2h1bmtzCm9mIHRo ZSBpbnB1dCBidWZmZXIgaW50byB2ZWN0b3IgcmVnaXN0ZXJzIGFuZCBjaGVja3MgZm9yIGFueSBz cGVjaWFsCmNoYXJhY3RlcnMgdXNpbmcgU0lNRCBjb21wYXJpc29ucy4gV2hlbiBubyBzcGVjaWFs IGNoYXJhY3RlcnMgYXJlCmZvdW5kLCB0aGUgZW50aXJlIGNodW5rIGlzIHNraXBwZWQgYXQgb25j ZS4gV2hlbiBhIHNwZWNpYWwgY2hhcmFjdGVyCmlzIGZvdW5kLCB0aGUgaGVscGVyIGFkdmFuY2Vz IHRvIHRoYXQgcG9zaXRpb24gYW5kIGhhbmRzIG9mZiB0byB0aGUKZXhpc3Rpbmcgc2NhbGFyIGNv ZGUgdG8gaGFuZGxlIGl0IGNvcnJlY3RseS4KClRvIGF2b2lkIGEgcmVncmVzc2lvbiBvbiBpbnB1 dHMgdGhhdCBjb250YWluIG1hbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLApTSU1EIGlzIGRpc2FibGVk IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGlucHV0IG9uY2UgYQpub24tRU9MIHNw ZWNpYWwgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLiBTSU1EIGlzIGFsc28gZGlzYWJsZWQgd2hl bgp0aGUgcHJvY2Vzc2VkIGxpbmUgaXMgc2hvcnRlciB0aGFuIGEgZnVsbCB2ZWN0b3IsIHNpbmNl IFNJTUQgY2FuJ3QKcHJvdmlkZSBhIGJlbmVmaXQgdGhlcmUuCgpBdXRob3I6IFNoaW55YSBLYXRv IDxzaGlueWExMS5rYXRvQGdtYWlsLmNvbT4KQXV0aG9yOiBOYXppciBCaWxhbCBZYXZ1eiA8Ynlh dnV6ODFAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogS2F6YXIgQXlvdWIgPG1hX2themFyQGVzaS5k ej4KUmV2aWV3ZWQtYnk6IE5hdGhhbiBCb3NzYXJ0IDxuYXRoYW5kYm9zc2FydEBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBOZWlsIENvbndheSA8bmVpbC5jb253YXlAZ21haWwuY29tPgpSZXZpZXdl ZC1ieTogQW5kcmV3IER1bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+ClJldmlld2VkLWJ5OiBN YW5uaSBXb29kIDxtYW5uaS53b29kQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBNYXJr IFdvbmcgPG1hcmt3a21AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9t L0NBT3pFdXJTVzhjTnI2VFBLc2pyc3RuUGZoZjRReVFxQjR0blBYR0dlOE40ZV92N0ppZyU0MG1h aWwuZ21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAgICAg ICB8ICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgICAgIHwgMjA2 ICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9p bnRlcm5hbC5oIHwgICAzICsKIDMgZmlsZXMgY2hhbmdlZCwgMjA1IGluc2VydGlvbnMoKyksIDcg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20u YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKaW5kZXggMmY0MmY1NWUyMjkuLmZl MThiZDcwODkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTE3NDcsNiArMTc0Nyw5IEBA IEJlZ2luQ29weUZyb20oUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWNzdGF0ZS0+Y3VyX2F0dHZhbCA9 IE5VTEw7CiAJY3N0YXRlLT5yZWxuYW1lX29ubHkgPSBmYWxzZTsKIAorCS8qIEluaXRpYWxpemUg U0lNRCAqLworCWNzdGF0ZS0+c2ltZF9lbmFibGVkID0gdHJ1ZTsKKwogCS8qCiAJICogQWxsb2Nh dGUgYnVmZmVycyBmb3IgdGhlIGlucHV0IHBpcGVsaW5lLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5ZnJvbXBhcnNlLmMKaW5kZXggODRjODgwOWE4ODkuLjlmMTI1NjM1M2M0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9ydC9wZ19ic3dhcC5o IgorI2luY2x1ZGUgInBvcnQvc2ltZC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgpAQCAt MTU5LDYgKzE2MCwxMiBAQCBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBO ZXh0Q29weUZyb21SYXdGaWVsZHNJbnRlcm5hbChDb3B5RnJvbVN0YQogCQkJCQkJCQkJCQkJCQkJ CQkgaW50ICpuZmllbGRzLAogCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpc19jc3YpOwogCisvKiBT SU1EIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBVU0VfTk9fU0lNRAorc3RhdGljIGJvb2wgQ29weVJl YWRMaW5lVGV4dFNJTURIZWxwZXIoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2LAor CQkJCQkJCQkJICAgYm9vbCAqdGVtcF9oaXRfZW9mLCBpbnQgKnRlbXBfaW5wdXRfYnVmX3B0cik7 CisjZW5kaWYKKwogCiAvKiBMb3ctbGV2ZWwgY29tbXVuaWNhdGlvbnMgZnVuY3Rpb25zICovCiBz dGF0aWMgaW50CUNvcHlHZXREYXRhKENvcHlGcm9tU3RhdGUgY3N0YXRlLCB2b2lkICpkYXRhYnVm LApAQCAtMTMxMSw2ICsxMzE4LDE1NSBAQCBDb3B5UmVhZExpbmUoQ29weUZyb21TdGF0ZSBjc3Rh dGUsIGJvb2wgaXNfY3N2KQogCXJldHVybiByZXN1bHQ7CiB9CiAKKyNpZm5kZWYgVVNFX05PX1NJ TUQKKy8qCisgKiBVc2UgU0lNRCBpbnN0cnVjdGlvbnMgdG8gZWZmaWNpZW50bHkgc2NhbiB0aGUg aW5wdXQgYnVmZmVyIGZvciBzcGVjaWFsCisgKiBjaGFyYWN0ZXJzIChlLmcuLCBuZXdsaW5lLCBj YXJyaWFnZSByZXR1cm4sIHF1b3RlLCBhbmQgZXNjYXBlKS4gVGhpcyBpcworICogZmFzdGVyIHRo YW4gYnl0ZS1ieS1ieXRlIGl0ZXJhdGlvbiwgZXNwZWNpYWxseSBvbiBsYXJnZSBidWZmZXJzLgor ICoKKyAqIE5vdGUgdGhhdCwgU0lNRCBtYXkgYmVjb21lIHNsb3dlciB3aGVuIHRoZSBpbnB1dCBj b250YWlucyBtYW55IHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMuIFRvIGF2b2lkIHRoaXMgcmVncmVz c2lvbiwgd2UgZGlzYWJsZSBTSU1EIGZvciB0aGUgcmVzdCBvZiB0aGUKKyAqIGlucHV0IG9uY2Ug d2UgZW5jb3VudGVyIGEgc3BlY2lhbCBjaGFyYWN0ZXIgd2hpY2ggaXNuJ3QgRU9MLgorICogQWxz bywgU0lNRCBpcyBkaXNhYmxlZCB3aGVuIGl0IGVuY291bnRlcnMgYSBzaG9ydCBsaW5lIHRoYXQg U0lNRCBjYW4ndAorICogY3JlYXRlIGEgZnVsbCBzaXplZCB2ZWN0b3IsIHRvby4KKyAqLworc3Rh dGljIGJvb2wKK0NvcHlSZWFkTGluZVRleHRTSU1ESGVscGVyKENvcHlGcm9tU3RhdGUgY3N0YXRl LCBib29sIGlzX2NzdiwgYm9vbCAqdGVtcF9oaXRfZW9mLCBpbnQgKnRlbXBfaW5wdXRfYnVmX3B0 cikKK3sKKwljaGFyCQlxdW90ZWMgPSAnXDAnOworCWNoYXIJCWVzY2FwZWMgPSAnXDAnOworCWNo YXIJICAgKmNvcHlfaW5wdXRfYnVmOworCWludAkJCWlucHV0X2J1Zl9wdHI7CisJaW50CQkJY29w eV9idWZfbGVuOworCWJvb2wJCXJlc3VsdCA9IGZhbHNlOworCWJvb2wJCXVuaXF1ZV9lc2NhcGVj ID0gZmFsc2U7CisJYm9vbAkJZmlyc3RfdmVjdG9yID0gdHJ1ZTsKKwlWZWN0b3I4CQlubCA9IHZl Y3RvcjhfYnJvYWRjYXN0KCdcbicpOworCVZlY3RvcjgJCWNyID0gdmVjdG9yOF9icm9hZGNhc3Qo J1xyJyk7CisJVmVjdG9yOAkJYnMgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXFwnKTsKKwlWZWN0b3I4 CQlxdW90ZSA9IHZlY3RvcjhfYnJvYWRjYXN0KDApOworCVZlY3RvcjgJCWVzY2FwZSA9IHZlY3Rv cjhfYnJvYWRjYXN0KDApOworCisJaWYgKGlzX2NzdikKKwl7CisJCXF1b3RlYyA9IGNzdGF0ZS0+ b3B0cy5xdW90ZVswXTsKKwkJZXNjYXBlYyA9IGNzdGF0ZS0+b3B0cy5lc2NhcGVbMF07CisKKwkJ cXVvdGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdChxdW90ZWMpOworCQlpZiAocXVvdGVjICE9IGVzY2Fw ZWMpCisJCXsKKwkJCXVuaXF1ZV9lc2NhcGVjID0gdHJ1ZTsKKwkJCWVzY2FwZSA9IHZlY3Rvcjhf YnJvYWRjYXN0KGVzY2FwZWMpOworCQl9CisJfQorCisJLyogRm9yIGEgbGl0dGxlIGV4dHJhIHNw ZWVkIHdlIGNvcHkgdGhlc2UgaW50byBsb2NhbCB2YXJpYWJsZXMgKi8KKwljb3B5X2lucHV0X2J1 ZiA9IGNzdGF0ZS0+aW5wdXRfYnVmOworCWlucHV0X2J1Zl9wdHIgPSBjc3RhdGUtPmlucHV0X2J1 Zl9pbmRleDsKKwljb3B5X2J1Zl9sZW4gPSBjc3RhdGUtPmlucHV0X2J1Zl9sZW47CisKKwl3aGls ZSAodHJ1ZSkKKwl7CisJCS8qIExvYWQgbW9yZSBkYXRhIGlmIG5lZWRlZCAqLworCQlpZiAoc2l6 ZW9mKFZlY3RvcjgpID4gY29weV9idWZfbGVuIC0gaW5wdXRfYnVmX3B0cikKKwkJeworCQkJUkVG SUxMX0xJTkVCVUY7CisKKwkJCUNvcHlMb2FkSW5wdXRCdWYoY3N0YXRlKTsKKwkJCS8qIHVwZGF0 ZSBvdXIgbG9jYWwgdmFyaWFibGVzICovCisJCQkqdGVtcF9oaXRfZW9mID0gY3N0YXRlLT5pbnB1 dF9yZWFjaGVkX2VvZjsKKwkJCWlucHV0X2J1Zl9wdHIgPSBjc3RhdGUtPmlucHV0X2J1Zl9pbmRl eDsKKwkJCWNvcHlfYnVmX2xlbiA9IGNzdGF0ZS0+aW5wdXRfYnVmX2xlbjsKKworCQkJLyoKKwkJ CSAqIElmIHdlIGFyZSBjb21wbGV0ZWx5IG91dCBvZiBkYXRhLCBicmVhayBvdXQgb2YgdGhlIGxv b3AsCisJCQkgKiByZXBvcnRpbmcgRU9GLgorCQkJICovCisJCQlpZiAoSU5QVVRfQlVGX0JZVEVT KGNzdGF0ZSkgPD0gMCkKKwkJCXsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisKKwkJaWYgKGNvcHlfYnVmX2xlbiAtIGlucHV0X2J1Zl9wdHIgPj0gc2l6ZW9mKFZl Y3RvcjgpKQorCQl7CisJCQlWZWN0b3I4CQljaHVuazsKKwkJCVZlY3RvcjgJCW1hdGNoID0gdmVj dG9yOF9icm9hZGNhc3QoMCk7CisKKwkJCS8qIExvYWQgYSBjaHVuayBvZiBkYXRhIGludG8gYSB2 ZWN0b3IgcmVnaXN0ZXIgKi8KKwkJCXZlY3RvcjhfbG9hZCgmY2h1bmssIChjb25zdCB1aW50OCAq KSAmY29weV9pbnB1dF9idWZbaW5wdXRfYnVmX3B0cl0pOworCisJCQlpZiAoaXNfY3N2KQorCQkJ eworCQkJCW1hdGNoID0gdmVjdG9yOF9vcih2ZWN0b3I4X2VxKGNodW5rLCBubCksIHZlY3Rvcjhf ZXEoY2h1bmssIGNyKSk7CisJCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKG1hdGNoLCB2ZWN0b3I4X2Vx KGNodW5rLCBxdW90ZSkpOworCQkJCWlmICh1bmlxdWVfZXNjYXBlYykKKwkJCQkJbWF0Y2ggPSB2 ZWN0b3I4X29yKG1hdGNoLCB2ZWN0b3I4X2VxKGNodW5rLCBlc2NhcGUpKTsKKwkJCX0KKwkJCWVs c2UKKwkJCXsKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IodmVjdG9yOF9lcShjaHVuaywgbmwpLCB2 ZWN0b3I4X2VxKGNodW5rLCBjcikpOworCQkJCW1hdGNoID0gdmVjdG9yOF9vcihtYXRjaCwgdmVj dG9yOF9lcShjaHVuaywgYnMpKTsKKwkJCX0KKworCQkJLyogQ2hlY2sgaWYgd2UgZm91bmQgYW55 IHNwZWNpYWwgY2hhcmFjdGVycyAqLworCQkJaWYgKHZlY3RvcjhfaXNfaGlnaGJpdF9zZXQobWF0 Y2gpKQorCQkJeworCQkJCS8qCisJCQkJICogRm91bmQgYSBzcGVjaWFsIGNoYXJhY3Rlci4gQWR2 YW5jZSB1cCB0byB0aGF0IHBvaW50IGFuZCBsZXQKKwkJCQkgKiB0aGUgc2NhbGFyIGNvZGUgaGFu ZGxlIGl0LgorCQkJCSAqLworCQkJCXVpbnQzMgkJbWFzazsKKwkJCQlpbnQJCQlhZHZhbmNlOwor CQkJCWNoYXIJCWM7CisKKwkJCQltYXNrID0gdmVjdG9yOF9oaWdoYml0X21hc2sobWF0Y2gpOwor CQkJCWFkdmFuY2UgPSBwZ19yaWdodG1vc3Rfb25lX3BvczMyKG1hc2spOworCisJCQkJaW5wdXRf YnVmX3B0ciArPSBhZHZhbmNlOworCQkJCWMgPSBjb3B5X2lucHV0X2J1ZltpbnB1dF9idWZfcHRy XTsKKworCQkJCS8qCisJCQkJICogSWYgd2UgZW5jb3VudGVyZWQgYSBzcGVjaWFsIGNoYXJhY3Rl ciBpbiB0aGUgZmlyc3QgdmVjdG9yLAorCQkJCSAqIHRoaXMgbWVhbnMgbGluZSBpcyBub3QgbG9u ZyBlbm91Z2ggdG8gc2tpcCBmdWxseSBzaXplZAorCQkJCSAqIHZlY3Rvci4gVG8gYmUgY2F1dGlv dXMsIGRpc2FibGUgU0lNRCBmb3IgdGhlIHJlc3QuCisJCQkJICoKKwkJCQkgKiBPdGhlcndpc2Us IGRvIG5vdCBkaXNhYmxlIFNJTUQgd2hlbiB3ZSBoaXQgRU9MIGNoYXJhY3RlcnMuCisJCQkJICog V2UgZG9uJ3QgY2hlY2sgZm9yIEVPRiBiZWNhdXNlIHBhcnNpbmcgZW5kcyB0aGVyZS4KKwkJCQkg Ki8KKwkJCQlpZiAoZmlyc3RfdmVjdG9yIHx8ICEoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykpCisJ CQkJCWNzdGF0ZS0+c2ltZF9lbmFibGVkID0gZmFsc2U7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWVsc2UKKwkJCXsKKwkJCQkvKiBObyBzcGVjaWFsIGNoYXJhY3RlcnMgZm91bmQsIHNvIHNraXAg dGhlIGVudGlyZSBjaHVuayAqLworCQkJCWlucHV0X2J1Zl9wdHIgKz0gc2l6ZW9mKFZlY3Rvcjgp OworCQkJCWZpcnN0X3ZlY3RvciA9IGZhbHNlOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogQWx0 aG91Z2ggd2UgcmVmaWxsIGxpbmVidWYsIHRoZXJlIGlzIG5vdCBlbm91Z2ggY2hhcmFjdGVyIHRv IGZpbGwKKwkJICogZnVsbCBzaXplZCB2ZWN0b3IuIFRoaXMgZG9lc24ndCBtZWFuIHRoYXQgd2Ug ZW5jb3VudGVyZWQgYSBsaW5lCisJCSAqIHRoYXQgaXMgbm90IGVub3VnaCB0byBmaWxsIGEgZnVs bCBzaXplZCB2ZWN0b3IuCisJCSAqCisJCSAqIFNjYWxhciBjb2RlIHdpbGwgaGFuZGxlIHRoZSBy ZXN0IGZvciB0aGlzIGxpbmUuIFRoZW4sIFNJTUQgd2lsbAorCQkgKiBjb250aW51ZSBmcm9tIHRo ZSBuZXh0IGxpbmUuCisJCSAqLworCQllbHNlCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ KnRlbXBfaW5wdXRfYnVmX3B0ciA9IGlucHV0X2J1Zl9wdHI7CisJcmV0dXJuIHJlc3VsdDsKK30K KyNlbmRpZgorCiAvKgogICogQ29weVJlYWRMaW5lVGV4dCAtIGlubmVyIGxvb3Agb2YgQ29weVJl YWRMaW5lIGZvciB0ZXh0IG1vZGUKICAqLwpAQCAtMTMzOSw2ICsxNDk1LDQ5IEBAIENvcHlSZWFk TGluZVRleHQoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogCQkJZXNjYXBlYyA9 ICdcMCc7CiAJfQogCisJLyoKKwkgKiBpbnB1dF9idWZfcHRyIG1pZ2h0IGJlIHVwZGF0ZWQgaW4g dGhlIFNJTUQgSGVscGVyIGZ1bmN0aW9uLCBzbyBpdCBuZWVkcworCSAqIHRvIGJlIHNldCBiZWZv cmUgY2FsbGluZyBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcigpLgorCSAqLworCWlucHV0X2J1 Zl9wdHIgPSBjc3RhdGUtPmlucHV0X2J1Zl9pbmRleDsKKworI2lmbmRlZiBVU0VfTk9fU0lNRAor CS8qIEZpcnN0IHRyeSB0byBydW4gU0lNRCwgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBzY2FsYXIg cGF0aCAqLworCWlmIChjc3RhdGUtPnNpbWRfZW5hYmxlZCkKKwl7CisJCS8qCisJCSAqIFRlbXBv cmFyeSB2YXJpYWJsZXMgYXJlIHVzZWQgaGVyZSBpbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIGFjdHVh bAorCQkgKiB2YXJpYWJsZXMgKGVzcGVjaWFsbHkgaW5wdXRfYnVmX3B0cikgZGlyZWN0bHkgdG8g dGhlIGhlbHBlci4gVGFraW5nCisJCSAqIHRoZSBhZGRyZXNzIG9mIGEgbG9jYWwgdmFyaWFibGUg bWlnaHQgZm9yY2UgdGhlIGNvbXBpbGVyIHRvCisJCSAqIGFsbG9jYXRlIGl0IG9uIHRoZSBzdGFj ayByYXRoZXIgdGhhbiBpbiBhIHJlZ2lzdGVyLiAgQmVjYXVzZQorCQkgKiBpbnB1dF9idWZfcHRy IGlzIHVzZWQgaGVhdmlseSBpbiB0aGUgaG90IHNjYWxhciBwYXRoIGJlbG93LCBrZWVwaW5nCisJ CSAqIGl0IGluIGEgcmVnaXN0ZXIgaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4KKwkJICov CisJCWludAkJCXRlbXBfaW5wdXRfYnVmX3B0cjsKKwkJYm9vbAkJdGVtcF9oaXRfZW9mID0gaGl0 X2VvZjsKKworCQlyZXN1bHQgPSBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcihjc3RhdGUsIGlz X2NzdiwgJnRlbXBfaGl0X2VvZiwKKwkJCQkJCQkJCQkJJnRlbXBfaW5wdXRfYnVmX3B0cik7CisJ CWlucHV0X2J1Zl9wdHIgPSB0ZW1wX2lucHV0X2J1Zl9wdHI7CisJCWhpdF9lb2YgPSB0ZW1wX2hp dF9lb2Y7CisKKwkJLyogRWFybHkgZXhpdCBmcm9tIFNJTUQgKi8KKwkJaWYgKHJlc3VsdCkKKwkJ eworCQkJLyoKKwkJCSAqIFRyYW5zZmVyIGFueSBzdGlsbC11bmNvcGllZCBkYXRhIHRvIGxpbmVf YnVmLgorCQkJICovCisJCQlSRUZJTExfTElORUJVRjsKKworCQkJcmV0dXJuIHJlc3VsdDsKKwkJ fQorCX0KKyNlbmRpZgorCisJLyogRm9yIGEgbGl0dGxlIGV4dHJhIHNwZWVkIHdlIGNvcHkgdGhl c2UgaW50byBsb2NhbCB2YXJpYWJsZXMgKi8KKwljb3B5X2lucHV0X2J1ZiA9IGNzdGF0ZS0+aW5w dXRfYnVmOworCWNvcHlfYnVmX2xlbiA9IGNzdGF0ZS0+aW5wdXRfYnVmX2xlbjsKKwogCS8qCiAJ ICogVGhlIG9iamVjdGl2ZSBvZiB0aGlzIGxvb3AgaXMgdG8gdHJhbnNmZXIgdGhlIGVudGlyZSBu ZXh0IGlucHV0IGxpbmUKIAkgKiBpbnRvIGxpbmVfYnVmLiAgSGVuY2UsIHdlIG9ubHkgY2FyZSBm b3IgZGV0ZWN0aW5nIG5ld2xpbmVzIChcciBhbmQvb3IKQEAgLTEzNjAsMTQgKzE1NTksNyBAQCBD b3B5UmVhZExpbmVUZXh0KENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2NzdikKIAkgKiBj aGFyYWN0ZXIgdG8gZXhhbWluZTsgYW55IGNoYXJhY3RlcnMgZnJvbSBpbnB1dF9idWZfaW5kZXgg dG8KIAkgKiBpbnB1dF9idWZfcHRyIGhhdmUgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIHBhcnQgb2Yg dGhlIGxpbmUsIGJ1dCBub3QgeWV0CiAJICogdHJhbnNmZXJyZWQgdG8gbGluZV9idWYuCi0JICoK LQkgKiBGb3IgYSBsaXR0bGUgZXh0cmEgc3BlZWQgd2l0aGluIHRoZSBsb29wLCB3ZSBjb3B5IGlu cHV0X2J1ZiBhbmQKLQkgKiBpbnB1dF9idWZfbGVuIGludG8gbG9jYWwgdmFyaWFibGVzLgogCSAq LwotCWNvcHlfaW5wdXRfYnVmID0gY3N0YXRlLT5pbnB1dF9idWY7Ci0JaW5wdXRfYnVmX3B0ciA9 IGNzdGF0ZS0+aW5wdXRfYnVmX2luZGV4OwotCWNvcHlfYnVmX2xlbiA9IGNzdGF0ZS0+aW5wdXRf YnVmX2xlbjsKLQogCWZvciAoOzspCiAJewogCQlpbnQJCQlwcmV2X3Jhd19wdHI7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaAppbmRleCBmODkyYzM0MzE1Ny4uNWIwMjBi ZjRkMGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFs LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaApAQCAtODks NiArODksOSBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5RnJvbVN0YXRlRGF0YQogCWNvbnN0IGNoYXIg KmN1cl9hdHR2YWw7CQkvKiBjdXJyZW50IGF0dCB2YWx1ZSBmb3IgZXJyb3IgbWVzc2FnZXMgKi8K IAlib29sCQlyZWxuYW1lX29ubHk7CS8qIGRvbid0IG91dHB1dCBsaW5lIG51bWJlciwgYXR0LCBl dGMuICovCiAKKwkvKiBTSU1EIHZhcmlhYmxlcyAqLworCWJvb2wJCXNpbWRfZW5hYmxlZDsKKwog CS8qCiAJICogV29ya2luZyBzdGF0ZQogCSAqLwotLSAKMi40Ny4zCgo= --000000000000c2d40a064cbe0d59 Content-Type: text/x-patch; charset="US-ASCII"; name="v13-0002-Upcoming-improvements.patch" Content-Disposition: attachment; filename="v13-0002-Upcoming-improvements.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmlyqo5t1 RnJvbSAxMDA2ZGFjNDRjYjIwOGE4YjE2NGYyNTUzNzcyZGU5NDJlNzljMmQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOYXppciBCaWxhbCBZYXZ1eiA8YnlhdnV6ODFAZ21haWwuY29t PgpEYXRlOiBXZWQsIDExIE1hciAyMDI2IDE0OjA0OjU1ICswMzAwClN1YmplY3Q6IFtQQVRDSCB2 MTMgMi8yXSBVcGNvbWluZyBpbXByb3ZlbWVudHMKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weWZyb21wYXJzZS5jIHwgMjcgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggOWYxMjU2MzUzYzQuLjU1MTU5YjAxMjJjIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC0xMzMzLDggKzEzMzMsNiBAQCBDb3B5UmVh ZExpbmUoQ29weUZyb21TdGF0ZSBjc3RhdGUsIGJvb2wgaXNfY3N2KQogc3RhdGljIGJvb2wKIENv cHlSZWFkTGluZVRleHRTSU1ESGVscGVyKENvcHlGcm9tU3RhdGUgY3N0YXRlLCBib29sIGlzX2Nz diwgYm9vbCAqdGVtcF9oaXRfZW9mLCBpbnQgKnRlbXBfaW5wdXRfYnVmX3B0cikKIHsKLQljaGFy CQlxdW90ZWMgPSAnXDAnOwotCWNoYXIJCWVzY2FwZWMgPSAnXDAnOwogCWNoYXIJICAgKmNvcHlf aW5wdXRfYnVmOwogCWludAkJCWlucHV0X2J1Zl9wdHI7CiAJaW50CQkJY29weV9idWZfbGVuOwpA QCAtMTM0MywxNiArMTM0MSwxNSBAQCBDb3B5UmVhZExpbmVUZXh0U0lNREhlbHBlcihDb3B5RnJv bVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YsIGJvb2wgKnRlbXBfaGl0X2VvZgogCWJvb2wJCWZp cnN0X3ZlY3RvciA9IHRydWU7CiAJVmVjdG9yOAkJbmwgPSB2ZWN0b3I4X2Jyb2FkY2FzdCgnXG4n KTsKIAlWZWN0b3I4CQljciA9IHZlY3RvcjhfYnJvYWRjYXN0KCdccicpOwotCVZlY3RvcjgJCWJz ID0gdmVjdG9yOF9icm9hZGNhc3QoJ1xcJyk7Ci0JVmVjdG9yOAkJcXVvdGUgPSB2ZWN0b3I4X2Jy b2FkY2FzdCgwKTsKKwlWZWN0b3I4CQlic19vcl9xdW90ZSA9IHZlY3RvcjhfYnJvYWRjYXN0KCdc XCcpOwogCVZlY3RvcjgJCWVzY2FwZSA9IHZlY3RvcjhfYnJvYWRjYXN0KDApOwogCiAJaWYgKGlz X2NzdikKIAl7Ci0JCXF1b3RlYyA9IGNzdGF0ZS0+b3B0cy5xdW90ZVswXTsKLQkJZXNjYXBlYyA9 IGNzdGF0ZS0+b3B0cy5lc2NhcGVbMF07CisJCWNoYXIJCXF1b3RlYyA9IGNzdGF0ZS0+b3B0cy5x dW90ZVswXTsKKwkJY2hhcgkJZXNjYXBlYyA9IGNzdGF0ZS0+b3B0cy5lc2NhcGVbMF07CiAKLQkJ cXVvdGUgPSB2ZWN0b3I4X2Jyb2FkY2FzdChxdW90ZWMpOworCQlic19vcl9xdW90ZSA9IHZlY3Rv cjhfYnJvYWRjYXN0KHF1b3RlYyk7CiAJCWlmIChxdW90ZWMgIT0gZXNjYXBlYykKIAkJewogCQkJ dW5pcXVlX2VzY2FwZWMgPSB0cnVlOwpAQCAtMTM5NywxOCArMTM5NCwxMCBAQCBDb3B5UmVhZExp bmVUZXh0U0lNREhlbHBlcihDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgYm9vbCBpc19jc3YsIGJvb2wg KnRlbXBfaGl0X2VvZgogCQkJLyogTG9hZCBhIGNodW5rIG9mIGRhdGEgaW50byBhIHZlY3RvciBy ZWdpc3RlciAqLwogCQkJdmVjdG9yOF9sb2FkKCZjaHVuaywgKGNvbnN0IHVpbnQ4ICopICZjb3B5 X2lucHV0X2J1ZltpbnB1dF9idWZfcHRyXSk7CiAKLQkJCWlmIChpc19jc3YpCi0JCQl7Ci0JCQkJ bWF0Y2ggPSB2ZWN0b3I4X29yKHZlY3RvcjhfZXEoY2h1bmssIG5sKSwgdmVjdG9yOF9lcShjaHVu aywgY3IpKTsKLQkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gsIHZlY3RvcjhfZXEoY2h1bmss IHF1b3RlKSk7Ci0JCQkJaWYgKHVuaXF1ZV9lc2NhcGVjKQotCQkJCQltYXRjaCA9IHZlY3Rvcjhf b3IobWF0Y2gsIHZlY3RvcjhfZXEoY2h1bmssIGVzY2FwZSkpOwotCQkJfQotCQkJZWxzZQotCQkJ ewotCQkJCW1hdGNoID0gdmVjdG9yOF9vcih2ZWN0b3I4X2VxKGNodW5rLCBubCksIHZlY3Rvcjhf ZXEoY2h1bmssIGNyKSk7Ci0JCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKG1hdGNoLCB2ZWN0b3I4X2Vx KGNodW5rLCBicykpOwotCQkJfQorCQkJbWF0Y2ggPSB2ZWN0b3I4X29yKHZlY3RvcjhfZXEoY2h1 bmssIG5sKSwgdmVjdG9yOF9lcShjaHVuaywgY3IpKTsKKwkJCW1hdGNoID0gdmVjdG9yOF9vciht YXRjaCwgdmVjdG9yOF9lcShjaHVuaywgYnNfb3JfcXVvdGUpKTsKKwkJCWlmICh1bmlxdWVfZXNj YXBlYykKKwkJCQltYXRjaCA9IHZlY3Rvcjhfb3IobWF0Y2gsIHZlY3RvcjhfZXEoY2h1bmssIGVz Y2FwZSkpOwogCiAJCQkvKiBDaGVjayBpZiB3ZSBmb3VuZCBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJz ICovCiAJCQlpZiAodmVjdG9yOF9pc19oaWdoYml0X3NldChtYXRjaCkpCi0tIAoyLjQ3LjMKCg== --000000000000c2d40a064cbe0d59--