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 1x1h4m-005Mey-1M for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Sep 2026 09:16:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1x1h4l-00BhjB-0n for pgsql-hackers@arkaria.postgresql.org; Wed, 02 Sep 2026 09:16:11 +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 1x1h4k-00Bhiy-2p for pgsql-hackers@lists.postgresql.org; Wed, 02 Sep 2026 09:16:10 +0000 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1x1h4i-00000002WOC-2jwy for pgsql-hackers@postgresql.org; Wed, 02 Sep 2026 09:16:10 +0000 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-49b392ccaacso11361455e9.2 for ; Wed, 02 Sep 2026 02:16:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788340568; x=1788945368; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=LBUoja8MpVHqMxMypkZgPIjv0j/EMBwE+3bMcZd8jMg=; b=kX073n5fCq2gu+L/avqYqK57ZQoWp1EqTtSiwUMLJz+wm7xuID19WA0SICgXkFleyu cYA17sDuVaVfUbITTAWqMsjulekQv72KmT50j1eppK8ABLhz38PRLPOy6KgSv0k8TLOd DqOwbSc/xQ3STZkJvydoyZRvUMge/sO3qaB81I8fVagWmTKKw+s/bvyPhCnstgAFJFrv rLFJY0EQUGBaSd735Jw3qj25phyJ2LQ+DQWpIjIDGD2wWxDwnvuhYICUEBfm+eT2wjYP tn9ukl9CybmBXdRkZjALzEJHmbcYu0SCX6IxaVMgMJRXRcZu3wSPgU6782bHpR6aqfm/ H46g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788340568; x=1788945368; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LBUoja8MpVHqMxMypkZgPIjv0j/EMBwE+3bMcZd8jMg=; b=ohIq1fuPoDakz48ii9WukV+cb6kmyr3EvvU4e6Ay8n1IBeHAw/r96BobisXgsxmk1f J9d+3dcRxAH/oFLsY4aU6j5smqGa/alN0u3Zw/Mh7ND51axEkd8Q0nXnDFD7VqL5hZg2 lp8dWE5Ge88/M5IIeqSVgs3o/ynDZDcGi0n/yDeZAG5mBDUB2/Xj/eZqtQsB5xLJftUN GZRo/8j0LuTwCfLyJVf62V8Lf0tLzUtbX1pLPc2ewkuhfQlr2VEckdHto27g/mMeaZX/ 92zMBif9iSqeONsu+A27zPUNyx+RMd8X+cpJs58u+Ah1hN6u4uZWugoRGTePb5Cwdmhq /XEQ== X-Forwarded-Encrypted: i=1; AKwUvBzIJvy0vDowYEvBs0UgHXQwtHduiP1seR2jgvSynuOgy8ZFUN2/FmWEN7ylh4J7ZT1AwT1bOe1EOHh9FSUe@postgresql.org X-Gm-Message-State: AFuF++nmU7gHwDm3jR5Eb0bK9y2Tyjv4mBmfFaTIJpLgl2DNGU96A3/m q1hDzG/IKvRDxkLq2vwvm7A3mGJEYQQguEOkgOcB3PBUWzgt9e0f3uew X-Gm-Gg: AYBFou3kJody4D7f8Cm3qiqtziCfhKr6E+l4qhJEyH+R8KXLFKSNxLw+BU+AUob2Px8 GGmO+3/49a1ffMlqGKlcJjmjORnC8/szhyTxmWFUczNGzUIJoJsk3bqOXDL1wMWBc5wDYnOtYam v4GIjUpu45SRs6/fwmovuy1e7vSeBe0OWJsu3otnRpxA0cgshzOOerpdQnHKsJdj6jUXwbXvU8P NsxZrAOQlZZhwgkBxU7HsDcClgpys+KYUm+qQB8EYVssuQ4q199LKRs6H097OIzx4acPtoULUDQ tZzqURIc1LDFc9X4UWFkDFaf3qe8sXc2S/NnGioQWDj1Xg7hDgYYiCRy3/ffMq28JX9YdiwkJGA 8mVsYLuy67NC6+b5zj1nfKqWjSboDoCK1kjNuuPyay9eYgw53YUtQFYS2s+vf2SNQwzMbNI6iA1 1BvDXhSMqZmuoyMbpjFQ1o9ZtY/7saK8gMeOG4m7GimQxkm6PzcaGxiXIF X-Received: by 2002:a05:6000:610:b0:484:3f5d:7dc3 with SMTP id ffacd0b85a97d-48488deb512mr5664286f8f.5.1788340567332; Wed, 02 Sep 2026 02:16:07 -0700 (PDT) Received: from [172.31.5.233] ([165.225.27.25]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448eea5b4sm5183854f8f.27.2026.09.02.02.16.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 02 Sep 2026 02:16:06 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------2bU7fQ53J2kZutyYjAiNkrxb" Message-ID: Date: Wed, 2 Sep 2026 11:16:04 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Reduce build times of pg_trgm GIN indexes To: Japin Li Cc: Heikki Linnakangas , Matthias van de Meent , pgsql-hackers References: <5d366878-2007-4d31-861e-19294b7a583b@gmail.com> <9ac3931a-180e-4283-a7a8-05eb66099206@iki.fi> <2e11134f-02c3-43da-8c39-fb520a1a251d@iki.fi> <66620ec7-0f81-4813-9cf1-b901a56efcc3@gmail.com> <2a76b5ef-4b12-4023-93a1-eed6e64968f3@gmail.com> <6439c655-e281-409d-b884-6586750d5820@iki.fi> <5e74f77a-1dfc-45b5-9fcf-62afe8dbbaf2@gmail.com> <5650bf75-dcb8-446d-8cba-e626eb44594b@gmail.com> <10395cb6-a804-49ac-b2f1-3f98d7204359@gmail.com> Content-Language: en-US From: David Geier In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------2bU7fQ53J2kZutyYjAiNkrxb Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi! > Thanks for this—looks like a good improvement. Thanks for reviewing the patch. Attached is v9 with all reviewing comments from below addressed. > Here are some comments on v8 patches. > > v8-0001 > ======= > > 1. > @@ -194,12 +195,7 @@ btint4cmp(PG_FUNCTION_ARGS) > int32 a = PG_GETARG_INT32(0); > int32 b = PG_GETARG_INT32(1); > > - if (a > b) > - PG_RETURN_INT32(A_GREATER_THAN_B); > - else if (a == b) > - PG_RETURN_INT32(0); > - else > - PG_RETURN_INT32(A_LESS_THAN_B); > + PG_RETURN_INT32(pg_cmp_s32(a, b)); > } > > While we are in this area, would it make sense to apply the same treatment to > btint8cmp() using pg_cmp_s64()? Done. If there's no consensus that this optimization won't cause regressions we can also split it out from this patchset. I would then open a new thread with additional testing. > v8-0002 > ======= > > 1. > +static inline unsigned char FlipSign(char x) > > Coding style nit: suggest formatting this as: > > +static inline unsigned char > +FlipSign(char x) > > 2. > +static void radix_sort_trigrams_signed(trgm *trg, int count) > > Same as above. > > 3. > + for (int i=0; i + for (int j=0; j<3; j++) > > Spaces are required between operators and their operands. > > 4. > + for (int i=2; i>=0; i--) > + { > + trgm *old_from = from; > + trgm *next = to; > + > + for (int j=0; j<256; j++) > + { > + starts[j] = next; > + next += freqs[i][j]; > + } > + > + for (int j=0; j > Same as above. Done. Also renamed FlipSign() to flip_sign() for consistency. > v8-0003 > ======= > > 1. > +typedef struct GinHashKey > { > - GinEntryAccumulator *eo = (GinEntryAccumulator *) existing; > - const GinEntryAccumulator *en = (const GinEntryAccumulator *) newdata; > - BuildAccumulator *accum = (BuildAccumulator *) arg; > + OffsetNumber attnum; > + GinNullCategory category; > + Datum key; > +} GinHashKey; > ... > +typedef struct GinHashEntry > +{ > + GinHashKey hashkey; > + uint32 hash; > + char status; > + ItemPointerData * items; > + uint32 numItems; > + uint32 allocatedItems; > +} GinHashEntry; > + > +typedef struct GinSortEntry > +{ > + GinHashKey hashkey; > + ItemPointerData * items; > + uint32 numItems; > +} GinSortEntry; > > Since this patch introduces new typedefs, GinHashKey, GinHashEntry and > GinSortEntry, typedefs.list should probably be updated as well. Done. > 2. > + ItemPointerData * items; > > This is inconsistent with our coding style. > > 3. > -typedef struct GinEntryAccumulator > -{ > - RBTNode rbtnode; > - Datum key; > - GinNullCategory category; > - OffsetNumber attnum; > - bool shouldSort; > - ItemPointerData *list; > - uint32 maxcount; /* allocated size of list[] */ > - uint32 count; /* current number of list[] entries */ > -} GinEntryAccumulator; > > Remove GinEntryAccumulator from typedefs.list as well. Done. I realized that one elog(ERROR) got removed and another one with a different message got added. I haven't updated the translation files because, judging from the git log messages, that is done separately. How to best go about complying to the existing code style? I've been under the impression that especially indentation is mostly fixed up retroactively by pgindent. Do you run pgindent on the patch set prior to submitting the patch? -- David Geier --------------2bU7fQ53J2kZutyYjAiNkrxb Content-Type: text/x-patch; charset=UTF-8; name="v9-0003-Replace-RB-tree-with-hash-map-and-sort-in-GIN-ind.patch" Content-Disposition: attachment; filename*0="v9-0003-Replace-RB-tree-with-hash-map-and-sort-in-GIN-ind.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4YjIxNmM4YWI0ODIzYmM4MTFhZWM4ZTc5MTIzNWJlZmEwNzE5NTY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAyMiBBcHIgMjAyNiAxNDowMDo0MCArMDIwMApTdWJqZWN0OiBbUEFU Q0ggdjkgMy8zXSBSZXBsYWNlIFJCLXRyZWUgd2l0aCBoYXNoIG1hcCBhbmQgc29ydCBpbiBH SU4gaW5kZXgKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5idWxrLmMgfCAzNDMg KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dp bl9wcml2YXRlLmggfCAgMjQgKy0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCB8ICAgNCArLQogMyBmaWxlcyBjaGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKSwgMTk2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luYnVs ay5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5idWxrLmMKaW5kZXggODU4NjViMzkx MDUuLmFhM2U2NmRhNzk3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bmJ1bGsuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmJ1bGsuYwpAQCAtMTcs MTA3ICsxNywxMTggQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KIAogI2luY2x1ZGUgImFjY2Vz cy9naW5fcHJpdmF0ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRl ICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKKyNkZWZp bmUgREVGX05FTlRSWQkJCTIwNDgJLyogSW5pdGlhbCBoYXNoIHRhYmxlIHNpemUgKi8KKyNk ZWZpbmUgREVGX0lURU1TX1BFUl9LRVkJOAkJLyogSW5pdGlhbCBJdGVtUG9pbnRlciBhcnJh eSBzaXplIHBlciBrZXkgKi8KIAotI2RlZmluZSBERUZfTkVOVFJZCTIwNDgJCS8qIEdpbkVu dHJ5QWNjdW11bGF0b3IgYWxsb2NhdGlvbiBxdWFudHVtICovCi0jZGVmaW5lIERFRl9OUFRS CTUJCQkvKiBJdGVtUG9pbnRlciBpbml0aWFsIGFsbG9jYXRpb24gcXVhbnR1bSAqLwotCi0K LS8qIENvbWJpbmVyIGZ1bmN0aW9uIGZvciByYnRyZWUuYyAqLwotc3RhdGljIHZvaWQKLWdp bkNvbWJpbmVEYXRhKFJCVE5vZGUgKmV4aXN0aW5nLCBjb25zdCBSQlROb2RlICpuZXdkYXRh LCB2b2lkICphcmcpCit0eXBlZGVmIHN0cnVjdCBHaW5IYXNoS2V5CiB7Ci0JR2luRW50cnlB Y2N1bXVsYXRvciAqZW8gPSAoR2luRW50cnlBY2N1bXVsYXRvciAqKSBleGlzdGluZzsKLQlj b25zdCBHaW5FbnRyeUFjY3VtdWxhdG9yICplbiA9IChjb25zdCBHaW5FbnRyeUFjY3VtdWxh dG9yICopIG5ld2RhdGE7Ci0JQnVpbGRBY2N1bXVsYXRvciAqYWNjdW0gPSAoQnVpbGRBY2N1 bXVsYXRvciAqKSBhcmc7CisJT2Zmc2V0TnVtYmVyCWF0dG51bTsKKwlHaW5OdWxsQ2F0ZWdv cnkJY2F0ZWdvcnk7CisJRGF0dW0JCQlrZXk7Cit9IEdpbkhhc2hLZXk7CiAKLQkvKgotCSAq IE5vdGUgdGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBuZXdkYXRhIGNvbnRhaW5zIG9ubHkgb25l IGl0ZW1wb2ludGVyLgotCSAqLwotCWlmIChlby0+Y291bnQgPj0gZW8tPm1heGNvdW50KQot CXsKLQkJaWYgKGVvLT5tYXhjb3VudCA+IElOVF9NQVgpCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCQkg ZXJybXNnKCJwb3N0aW5nIGxpc3QgaXMgdG9vIGxvbmciKSwKLQkJCQkJIGVycmhpbnQoIlJl ZHVjZSBcIm1haW50ZW5hbmNlX3dvcmtfbWVtXCIuIikpKTsKK3R5cGVkZWYgc3RydWN0IEdp bkhhc2hFbnRyeQoreworCUdpbkhhc2hLZXkJCWhhc2hrZXk7CisJdWludDMyCQkJaGFzaDsK KwljaGFyCQkJc3RhdHVzOworCUl0ZW1Qb2ludGVyRGF0YQkqaXRlbXM7CisJdWludDMyCQkJ bnVtSXRlbXM7CisJdWludDMyCQkJYWxsb2NhdGVkSXRlbXM7Cit9IEdpbkhhc2hFbnRyeTsK KwordHlwZWRlZiBzdHJ1Y3QgR2luU29ydEVudHJ5Cit7CisJR2luSGFzaEtleQkJaGFzaGtl eTsKKwlJdGVtUG9pbnRlckRhdGEgKml0ZW1zOworCXVpbnQzMgkJCW51bUl0ZW1zOworfSBH aW5Tb3J0RW50cnk7CisKK3N0YXRpYyB1aW50MzIgZ2luX2hhc2hfa2V5KHN0cnVjdCBnaW5i dWlsZF9oYXNoICp0YiwgR2luSGFzaEtleSAqa2V5KTsKK3N0YXRpYyBib29sIGdpbl9lcXVh bF9rZXkoc3RydWN0IGdpbmJ1aWxkX2hhc2ggKnRiLCBHaW5IYXNoS2V5ICphLCBHaW5IYXNo S2V5ICpiKTsKKworI2RlZmluZSBTSF9QUkVGSVggZ2luYnVpbGQKKyNkZWZpbmUgU0hfRUxF TUVOVF9UWVBFIEdpbkhhc2hFbnRyeQorI2RlZmluZSBTSF9LRVlfVFlQRSBHaW5IYXNoS2V5 CisjZGVmaW5lIFNIX0tFWSBoYXNoa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkp IGdpbl9oYXNoX2tleSh0YiwgJmtleSkKKyNkZWZpbmUgU0hfRVFVQUwodGIsIGEsIGIpIGdp bl9lcXVhbF9rZXkodGIsICZhLCAmYikKKyNkZWZpbmUgU0hfU0NPUEUgc3RhdGljIGlubGlu ZQorI2RlZmluZSBTSF9TVE9SRV9IQVNICisjZGVmaW5lIFNIX0dFVF9IQVNIKHRiLCBhKSAo YSktPmhhc2gKKyNkZWZpbmUgU0hfREVGSU5FCisjZGVmaW5lIFNIX0RFQ0xBUkUKKyNpbmNs dWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdWludDMyCitnaW5faGFzaF9rZXko c3RydWN0IGdpbmJ1aWxkX2hhc2ggKnRiLCBHaW5IYXNoS2V5ICprZXkpCit7CisJQnVpbGRB Y2N1bXVsYXRvciAqYWNjdW0gPSAoQnVpbGRBY2N1bXVsYXRvciAqKSB0Yi0+cHJpdmF0ZV9k YXRhOworCXVpbnQzMgkJaGFzaDsKIAotCQlhY2N1bS0+YWxsb2NhdGVkTWVtb3J5IC09IEdl dE1lbW9yeUNodW5rU3BhY2UoZW8tPmxpc3QpOwotCQllby0+bWF4Y291bnQgKj0gMjsKLQkJ ZW8tPmxpc3QgPSAoSXRlbVBvaW50ZXJEYXRhICopCi0JCQlyZXBhbGxvY19odWdlKGVvLT5s aXN0LCBzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSAqIGVvLT5tYXhjb3VudCk7Ci0JCWFjY3Vt LT5hbGxvY2F0ZWRNZW1vcnkgKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShlby0+bGlzdCk7Ci0J fQorCWhhc2ggPSBoYXNoX2NvbWJpbmUoMCwgbXVybXVyaGFzaDMyKCh1aW50MzIpIGtleS0+ YXR0bnVtKSk7CisJaGFzaCA9IGhhc2hfY29tYmluZShoYXNoLCBtdXJtdXJoYXNoMzIoKHVp bnQzMikga2V5LT5jYXRlZ29yeSkpOwogCi0JLyogSWYgaXRlbSBwb2ludGVycyBhcmUgbm90 IG9yZGVyZWQsIHRoZXkgd2lsbCBuZWVkIHRvIGJlIHNvcnRlZCBsYXRlciAqLwotCWlmIChl by0+c2hvdWxkU29ydCA9PSBmYWxzZSkKKwlpZiAoa2V5LT5jYXRlZ29yeSA9PSBHSU5fQ0FU X05PUk1fS0VZKQogCXsKLQkJaW50CQkJcmVzOwotCi0JCXJlcyA9IGdpbkNvbXBhcmVJdGVt UG9pbnRlcnMoZW8tPmxpc3QgKyBlby0+Y291bnQgLSAxLCBlbi0+bGlzdCk7Ci0JCUFzc2Vy dChyZXMgIT0gMCk7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKIAotCQlpZiAocmVzID4g MCkKLQkJCWVvLT5zaG91bGRTb3J0ID0gdHJ1ZTsKKwkJYXR0ID0gVHVwbGVEZXNjQ29tcGFj dEF0dHIoYWNjdW0tPmdpbnN0YXRlLT5vcmlnVHVwZGVzYywga2V5LT5hdHRudW0gLSAxKTsK KwkJaGFzaCA9IGhhc2hfY29tYmluZShoYXNoLCBkYXR1bV9pbWFnZV9oYXNoKGtleS0+a2V5 LCBhdHQtPmF0dGJ5dmFsLCBhdHQtPmF0dGxlbikpOwogCX0KIAotCWVvLT5saXN0W2VvLT5j b3VudF0gPSBlbi0+bGlzdFswXTsKLQllby0+Y291bnQrKzsKKwlyZXR1cm4gaGFzaDsKIH0K IAotLyogQ29tcGFyYXRvciBmdW5jdGlvbiBmb3IgcmJ0cmVlLmMgKi8KLXN0YXRpYyBpbnQK LWNtcEVudHJ5QWNjdW11bGF0b3IoY29uc3QgUkJUTm9kZSAqYSwgY29uc3QgUkJUTm9kZSAq Yiwgdm9pZCAqYXJnKQorc3RhdGljIGJvb2wKK2dpbl9lcXVhbF9rZXkoc3RydWN0IGdpbmJ1 aWxkX2hhc2ggKnRiLCBHaW5IYXNoS2V5ICphLCBHaW5IYXNoS2V5ICpiKQogewotCWNvbnN0 IEdpbkVudHJ5QWNjdW11bGF0b3IgKmVhID0gKGNvbnN0IEdpbkVudHJ5QWNjdW11bGF0b3Ig KikgYTsKLQljb25zdCBHaW5FbnRyeUFjY3VtdWxhdG9yICplYiA9IChjb25zdCBHaW5FbnRy eUFjY3VtdWxhdG9yICopIGI7Ci0JQnVpbGRBY2N1bXVsYXRvciAqYWNjdW0gPSAoQnVpbGRB Y2N1bXVsYXRvciAqKSBhcmc7Ci0KLQlyZXR1cm4gZ2luQ29tcGFyZUF0dEVudHJpZXMoYWNj dW0tPmdpbnN0YXRlLAotCQkJCQkJCQllYS0+YXR0bnVtLCBlYS0+a2V5LCBlYS0+Y2F0ZWdv cnksCi0JCQkJCQkJCWViLT5hdHRudW0sIGViLT5rZXksIGViLT5jYXRlZ29yeSk7Ci19CisJ QnVpbGRBY2N1bXVsYXRvciAqYWNjdW0gPSAoQnVpbGRBY2N1bXVsYXRvciAqKSB0Yi0+cHJp dmF0ZV9kYXRhOworCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dDsKIAotLyogQWxsb2NhdG9yIGZ1 bmN0aW9uIGZvciByYnRyZWUuYyAqLwotc3RhdGljIFJCVE5vZGUgKgotZ2luQWxsb2NFbnRy eUFjY3VtdWxhdG9yKHZvaWQgKmFyZykKLXsKLQlCdWlsZEFjY3VtdWxhdG9yICphY2N1bSA9 IChCdWlsZEFjY3VtdWxhdG9yICopIGFyZzsKLQlHaW5FbnRyeUFjY3VtdWxhdG9yICplYTsK KwlpZiAoYS0+YXR0bnVtICE9IGItPmF0dG51bSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChh LT5jYXRlZ29yeSAhPSBiLT5jYXRlZ29yeSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChhLT5j YXRlZ29yeSAhPSBHSU5fQ0FUX05PUk1fS0VZKQorCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCi0J ICogQWxsb2NhdGUgbWVtb3J5IGJ5IHJhdGhlciBiaWcgY2h1bmtzIHRvIGRlY3JlYXNlIG92 ZXJoZWFkLiAgV2UgaGF2ZSBubwotCSAqIG5lZWQgdG8gcmVjbGFpbSBSQlROb2RlcyBpbmRp dmlkdWFsbHksIHNvIHRoaXMgY29zdHMgbm90aGluZy4KKwkgKiBDb21wYXJlIHRoZSBhY3R1 YWwga2V5IHZhbHVlcyB1c2luZyBpbWFnZSBlcXVhbGl0eS4KKwkgKiBUaGlzIGlzIGNvcnJl Y3QgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlZHVwbGljYXRlIGF0IHRoaXMgcG9pbnQu CiAJICovCi0JaWYgKGFjY3VtLT5lbnRyeWFsbG9jYXRvciA9PSBOVUxMIHx8IGFjY3VtLT5l YXNfdXNlZCA+PSBERUZfTkVOVFJZKQotCXsKLQkJYWNjdW0tPmVudHJ5YWxsb2NhdG9yID0g cGFsbG9jX2FycmF5KEdpbkVudHJ5QWNjdW11bGF0b3IsIERFRl9ORU5UUlkpOwotCQlhY2N1 bS0+YWxsb2NhdGVkTWVtb3J5ICs9IEdldE1lbW9yeUNodW5rU3BhY2UoYWNjdW0tPmVudHJ5 YWxsb2NhdG9yKTsKLQkJYWNjdW0tPmVhc191c2VkID0gMDsKLQl9Ci0KLQkvKiBBbGxvY2F0 ZSBuZXcgUkJUTm9kZSBmcm9tIGN1cnJlbnQgY2h1bmsgKi8KLQllYSA9IGFjY3VtLT5lbnRy eWFsbG9jYXRvciArIGFjY3VtLT5lYXNfdXNlZDsKLQlhY2N1bS0+ZWFzX3VzZWQrKzsKLQot CXJldHVybiAoUkJUTm9kZSAqKSBlYTsKKwlhdHQgPSBUdXBsZURlc2NDb21wYWN0QXR0cihh Y2N1bS0+Z2luc3RhdGUtPm9yaWdUdXBkZXNjLCBhLT5hdHRudW0gLSAxKTsKKwlyZXR1cm4g ZGF0dW1Jc0VxdWFsKGEtPmtleSwgYi0+a2V5LCBhdHQtPmF0dGJ5dmFsLCBhdHQtPmF0dGxl bik7CiB9CiAKKyNkZWZpbmUgU1RfU09SVCBzb3J0X2l0ZW1wb2ludGVycworI2RlZmluZSBT VF9FTEVNRU5UX1RZUEUgSXRlbVBvaW50ZXJEYXRhCisjZGVmaW5lIFNUX0NPTVBBUkUoYSwg YikgZ2luQ29tcGFyZUl0ZW1Qb2ludGVycyhhLCBiKQorI2RlZmluZSBTVF9TQ09QRSBzdGF0 aWMKKyNkZWZpbmUgU1RfREVGSU5FCisjaW5jbHVkZSAibGliL3NvcnRfdGVtcGxhdGUuaCIK KworI2RlZmluZSBTVF9TT1JUIHNvcnRfa2V5cworI2RlZmluZSBTVF9FTEVNRU5UX1RZUEUg R2luU29ydEVudHJ5CisjZGVmaW5lIFNUX0NPTVBBUkVfQVJHX1RZUEUgR2luU3RhdGUKKyNk ZWZpbmUgU1RfQ09NUEFSRShhLCBiLCBzdGF0ZSkgZ2luQ29tcGFyZUF0dEVudHJpZXMoc3Rh dGUsIGEtPmhhc2hrZXkuYXR0bnVtLCBhLT5oYXNoa2V5LmtleSwgYS0+aGFzaGtleS5jYXRl Z29yeSwgYi0+aGFzaGtleS5hdHRudW0sIGItPmhhc2hrZXkua2V5LCBiLT5oYXNoa2V5LmNh dGVnb3J5KQorI2RlZmluZSBTVF9TQ09QRSBzdGF0aWMKKyNkZWZpbmUgU1RfREVGSU5FCisj aW5jbHVkZSAibGliL3NvcnRfdGVtcGxhdGUuaCIKKwogdm9pZAogZ2luSW5pdEJBKEJ1aWxk QWNjdW11bGF0b3IgKmFjY3VtKQogewogCS8qIGFjY3VtLT5naW5zdGF0ZSBpcyBpbnRlbnRp b25hbGx5IG5vdCBzZXQgaGVyZSAqLwotCWFjY3VtLT5hbGxvY2F0ZWRNZW1vcnkgPSAwOwot CWFjY3VtLT5lbnRyeWFsbG9jYXRvciA9IE5VTEw7Ci0JYWNjdW0tPmVhc191c2VkID0gMDsK LQlhY2N1bS0+dHJlZSA9IHJidF9jcmVhdGUoc2l6ZW9mKEdpbkVudHJ5QWNjdW11bGF0b3Ip LAotCQkJCQkJCSBjbXBFbnRyeUFjY3VtdWxhdG9yLAotCQkJCQkJCSBnaW5Db21iaW5lRGF0 YSwKLQkJCQkJCQkgZ2luQWxsb2NFbnRyeUFjY3VtdWxhdG9yLAotCQkJCQkJCSBOVUxMLAkv KiBubyBmcmVlZnVuYyBuZWVkZWQgKi8KLQkJCQkJCQkgYWNjdW0pOworCWFjY3VtLT5oYXNo ID0gZ2luYnVpbGRfY3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LCBERUZfTkVOVFJZLCBh Y2N1bSk7CisJYWNjdW0tPmFsbG9jYXRlZE1lbW9yeSA9IGFjY3VtLT5oYXNoLT5zaXplICog c2l6ZW9mKEdpbkhhc2hFbnRyeSk7CisJYWNjdW0tPnNvcnRlZF9lbnRyaWVzID0gTlVMTDsK KwlhY2N1bS0+bnVtX2VudHJpZXMgPSAwOworCWFjY3VtLT5jdXJyZW50X3BvcyA9IDA7CiB9 CiAKIC8qCkBAIC0xNDIsMTI0ICsxNTMsMTA5IEBAIGdldERhdHVtQ29weShCdWlsZEFjY3Vt dWxhdG9yICphY2N1bSwgT2Zmc2V0TnVtYmVyIGF0dG51bSwgRGF0dW0gdmFsdWUpCiB9CiAK IC8qCi0gKiBGaW5kL3N0b3JlIG9uZSBlbnRyeSBmcm9tIGluZGV4ZWQgdmFsdWUuCisgKiBJ bnNlcnQgb25lIGVudHJ5IGludG8gdGhlIGhhc2ggbWFwLgorICogSWYgdGhlIGtleSBhbHJl YWR5IGV4aXN0cywgYXBwZW5kIHRvIGl0cyBJdGVtUG9pbnRlciBhcnJheS4KKyAqIE90aGVy d2lzZSwgY3JlYXRlIGEgbmV3IGhhc2ggZW50cnkgd2l0aCBhIG5ldyBJdGVtUG9pbnRlciBh cnJheS4KICAqLwogc3RhdGljIHZvaWQKIGdpbkluc2VydEJBRW50cnkoQnVpbGRBY2N1bXVs YXRvciAqYWNjdW0sCiAJCQkJIEl0ZW1Qb2ludGVyIGhlYXBwdHIsIE9mZnNldE51bWJlciBh dHRudW0sCiAJCQkJIERhdHVtIGtleSwgR2luTnVsbENhdGVnb3J5IGNhdGVnb3J5KQogewot CUdpbkVudHJ5QWNjdW11bGF0b3IgZWF0bXA7Ci0JR2luRW50cnlBY2N1bXVsYXRvciAqZWE7 Ci0JYm9vbAkJaXNOZXc7Ci0KLQkvKgotCSAqIEZvciB0aGUgbW9tZW50LCBmaWxsIG9ubHkg dGhlIGZpZWxkcyBvZiBlYXRtcCB0aGF0IHdpbGwgYmUgbG9va2VkIGF0IGJ5Ci0JICogY21w RW50cnlBY2N1bXVsYXRvciBvciBnaW5Db21iaW5lRGF0YS4KLQkgKi8KLQllYXRtcC5hdHRu dW0gPSBhdHRudW07Ci0JZWF0bXAua2V5ID0ga2V5OwotCWVhdG1wLmNhdGVnb3J5ID0gY2F0 ZWdvcnk7Ci0JLyogdGVtcG9yYXJpbHkgc2V0IHVwIHNpbmdsZS1lbnRyeSBpdGVtcG9pbnRl ciBsaXN0ICovCi0JZWF0bXAubGlzdCA9IGhlYXBwdHI7CisJR2luSGFzaEtleQloYXNoa2V5 OworCUdpbkhhc2hFbnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJdWludDY0CQlvbGRz aXplOworCisJaGFzaGtleS5hdHRudW0gPSBhdHRudW07CisJaGFzaGtleS5jYXRlZ29yeSA9 IGNhdGVnb3J5OworCWlmIChjYXRlZ29yeSA9PSBHSU5fQ0FUX05PUk1fS0VZKQorCQloYXNo a2V5LmtleSA9IGdldERhdHVtQ29weShhY2N1bSwgYXR0bnVtLCBrZXkpOworCWVsc2UKKwkJ aGFzaGtleS5rZXkgPSBrZXk7CiAKLQllYSA9IChHaW5FbnRyeUFjY3VtdWxhdG9yICopIHJi dF9pbnNlcnQoYWNjdW0tPnRyZWUsIChSQlROb2RlICopICZlYXRtcCwKLQkJCQkJCQkJCQkJ JmlzTmV3KTsKKwlvbGRzaXplID0gYWNjdW0tPmhhc2gtPnNpemU7CisJZW50cnkgPSBnaW5i dWlsZF9pbnNlcnQoYWNjdW0tPmhhc2gsIGhhc2hrZXksICZmb3VuZCk7CiAKLQlpZiAoaXNO ZXcpCisJaWYgKCFmb3VuZCkKIAl7Ci0JCS8qCi0JCSAqIEZpbmlzaCBpbml0aWFsaXppbmcg bmV3IHRyZWUgZW50cnksIGluY2x1ZGluZyBtYWtpbmcgcGVybWFuZW50Ci0JCSAqIGNvcGll cyBvZiB0aGUgZGF0dW0gKGlmIGl0J3Mgbm90IG51bGwpIGFuZCBpdGVtcG9pbnRlci4KLQkJ ICovCi0JCWlmIChjYXRlZ29yeSA9PSBHSU5fQ0FUX05PUk1fS0VZKQotCQkJZWEtPmtleSA9 IGdldERhdHVtQ29weShhY2N1bSwgYXR0bnVtLCBrZXkpOwotCQllYS0+bWF4Y291bnQgPSBE RUZfTlBUUjsKLQkJZWEtPmNvdW50ID0gMTsKLQkJZWEtPnNob3VsZFNvcnQgPSBmYWxzZTsK LQkJZWEtPmxpc3QgPSBwYWxsb2NfYXJyYXkoSXRlbVBvaW50ZXJEYXRhLCBERUZfTlBUUik7 Ci0JCWVhLT5saXN0WzBdID0gKmhlYXBwdHI7Ci0JCWFjY3VtLT5hbGxvY2F0ZWRNZW1vcnkg Kz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShlYS0+bGlzdCk7CisJCWVudHJ5LT5pdGVtcyA9IHBh bGxvY19hcnJheShJdGVtUG9pbnRlckRhdGEsIERFRl9JVEVNU19QRVJfS0VZKTsKKwkJZW50 cnktPm51bUl0ZW1zID0gMDsKKwkJZW50cnktPmFsbG9jYXRlZEl0ZW1zID0gREVGX0lURU1T X1BFUl9LRVk7CisJCWFjY3VtLT5hbGxvY2F0ZWRNZW1vcnkgKz0gKGFjY3VtLT5oYXNoLT5z aXplIC0gb2xkc2l6ZSkgKiBzaXplb2YoR2luSGFzaEVudHJ5KTsKKwkJYWNjdW0tPmFsbG9j YXRlZE1lbW9yeSArPSBHZXRNZW1vcnlDaHVua1NwYWNlKGVudHJ5LT5pdGVtcyk7CiAJfQot CWVsc2UKKworCWlmIChlbnRyeS0+bnVtSXRlbXMgPj0gZW50cnktPmFsbG9jYXRlZEl0ZW1z KQogCXsKLQkJLyoKLQkJICogZ2luQ29tYmluZURhdGEgZGlkIGV2ZXJ5dGhpbmcgbmVlZGVk LgotCQkgKi8KKwkJdWludDMyCQluZXdfYWxsb2NhdGVkOworCisJCWlmIChlbnRyeS0+YWxs b2NhdGVkSXRlbXMgPiBVSU5UMzJfTUFYIC8gMikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1JVF9FWENFRURFRCksCisJCQkJCSBlcnJt c2coInRvbyBtYW55IEdJTiBpdGVtIHBvaW50ZXJzIGZvciBhIHNpbmdsZSBrZXkiKSwKKwkJ CQkJIGVycmhpbnQoIlJlZHVjZSBcIm1haW50ZW5hbmNlX3dvcmtfbWVtXCIuIikpKTsKKwor CQlhY2N1bS0+YWxsb2NhdGVkTWVtb3J5IC09IEdldE1lbW9yeUNodW5rU3BhY2UoZW50cnkt Pml0ZW1zKTsKKwkJbmV3X2FsbG9jYXRlZCA9IGVudHJ5LT5hbGxvY2F0ZWRJdGVtcyAqIDI7 CisJCWVudHJ5LT5pdGVtcyA9IHJlcGFsbG9jX2h1Z2UoZW50cnktPml0ZW1zLCBtdWxfc2l6 ZShzaXplb2YoSXRlbVBvaW50ZXJEYXRhKSwgbmV3X2FsbG9jYXRlZCkpOworCQllbnRyeS0+ YWxsb2NhdGVkSXRlbXMgPSBuZXdfYWxsb2NhdGVkOworCQlhY2N1bS0+YWxsb2NhdGVkTWVt b3J5ICs9IEdldE1lbW9yeUNodW5rU3BhY2UoZW50cnktPml0ZW1zKTsKIAl9CisKKwllbnRy eS0+aXRlbXNbZW50cnktPm51bUl0ZW1zKytdID0gKmhlYXBwdHI7CiB9CiAKLS8qCi0gKiBJ bnNlcnQgdGhlIGVudHJpZXMgZm9yIG9uZSBoZWFwIHBvaW50ZXIuCi0gKgotICogU2luY2Ug dGhlIGVudHJpZXMgYXJlIGJlaW5nIGluc2VydGVkIGludG8gYSBiYWxhbmNlZCBiaW5hcnkg dHJlZSwgeW91Ci0gKiBtaWdodCB0aGluayB0aGF0IHRoZSBvcmRlciBvZiBpbnNlcnRpb24g d291bGRuJ3QgYmUgY3JpdGljYWwsIGJ1dCBpdCB0dXJucwotICogb3V0IHRoYXQgaW5zZXJ0 aW5nIHRoZSBlbnRyaWVzIGluIHNvcnRlZCBvcmRlciByZXN1bHRzIGluIGEgbG90IG9mCi0g KiByZWJhbGFuY2luZyBvcGVyYXRpb25zIGFuZCBpcyBzbG93LiAgVG8gcHJldmVudCB0aGlz LCB3ZSBhdHRlbXB0IHRvIGluc2VydAotICogdGhlIG5vZGVzIGluIGFuIG9yZGVyIHRoYXQg d2lsbCBwcm9kdWNlIGEgbmVhcmx5LWJhbGFuY2VkIHRyZWUgaWYgdGhlIGlucHV0Ci0gKiBp cyBpbiBmYWN0IHNvcnRlZC4KLSAqCi0gKiBXZSBkbyB0aGlzIGFzIGZvbGxvd3MuICBGaXJz dCwgd2UgaW1hZ2luZSB0aGF0IHdlIGhhdmUgYW4gYXJyYXkgd2hvc2Ugc2l6ZQotICogaXMg dGhlIHNtYWxsZXN0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhl IGFjdHVhbCBhcnJheQotICogc2l6ZS4gIFNlY29uZCwgd2UgaW5zZXJ0IHRoZSBtaWRkbGUg ZW50cnkgb2Ygb3VyIHZpcnR1YWwgYXJyYXkgaW50byB0aGUKLSAqIHRyZWU7IHRoZW4sIHdl IGluc2VydCB0aGUgbWlkZGxlcyBvZiBlYWNoIGhhbGYgb2Ygb3VyIHZpcnR1YWwgYXJyYXks IHRoZW4KLSAqIG1pZGRsZXMgb2YgcXVhcnRlcnMsIGV0Yy4KLSAqLwogdm9pZAogZ2luSW5z ZXJ0QkFFbnRyaWVzKEJ1aWxkQWNjdW11bGF0b3IgKmFjY3VtLAogCQkJCSAgIEl0ZW1Qb2lu dGVyIGhlYXBwdHIsIE9mZnNldE51bWJlciBhdHRudW0sCiAJCQkJICAgRGF0dW0gKmVudHJp ZXMsIEdpbk51bGxDYXRlZ29yeSAqY2F0ZWdvcmllcywKIAkJCQkgICBpbnQzMiBuZW50cmll cykKIHsKLQl1aW50MzIJCXN0ZXAgPSBuZW50cmllczsKLQogCWlmIChuZW50cmllcyA8PSAw KQogCQlyZXR1cm47CiAKIAlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKGhlYXBwdHIpICYm IGF0dG51bSA+PSBGaXJzdE9mZnNldE51bWJlcik7CiAKLQkvKgotCSAqIHN0ZXAgd2lsbCBj b250YWluIGxhcmdlc3QgcG93ZXIgb2YgMiBhbmQgPD0gbmVudHJpZXMKLQkgKi8KLQlzdGVw IHw9IChzdGVwID4+IDEpOwotCXN0ZXAgfD0gKHN0ZXAgPj4gMik7Ci0Jc3RlcCB8PSAoc3Rl cCA+PiA0KTsKLQlzdGVwIHw9IChzdGVwID4+IDgpOwotCXN0ZXAgfD0gKHN0ZXAgPj4gMTYp OwotCXN0ZXAgPj49IDE7Ci0Jc3RlcCsrOwotCi0Jd2hpbGUgKHN0ZXAgPiAwKQotCXsKLQkJ aW50CQkJaTsKLQotCQlmb3IgKGkgPSBzdGVwIC0gMTsgaSA8IG5lbnRyaWVzICYmIGkgPj0g MDsgaSArPSBzdGVwIDw8IDEgLyogKjIgKi8gKQotCQkJZ2luSW5zZXJ0QkFFbnRyeShhY2N1 bSwgaGVhcHB0ciwgYXR0bnVtLAotCQkJCQkJCSBlbnRyaWVzW2ldLCBjYXRlZ29yaWVzW2ld KTsKLQotCQlzdGVwID4+PSAxOwkJCQkvKiAvMiAqLwotCX0KKwlmb3IgKGludCBpID0gMDsg aSA8IG5lbnRyaWVzOyBpKyspCisJCWdpbkluc2VydEJBRW50cnkoYWNjdW0sIGhlYXBwdHIs IGF0dG51bSwgZW50cmllc1tpXSwgY2F0ZWdvcmllc1tpXSk7CiB9CiAKLXN0YXRpYyBpbnQK LXFzb3J0Q29tcGFyZUl0ZW1Qb2ludGVycyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi KQotewotCWludAkJCXJlcyA9IGdpbkNvbXBhcmVJdGVtUG9pbnRlcnMoKGNvbnN0IEl0ZW1Q b2ludGVyRGF0YSAqKSBhLCAoY29uc3QgSXRlbVBvaW50ZXJEYXRhICopIGIpOwotCi0JLyog QXNzZXJ0IHRoYXQgdGhlcmUgYXJlIG5vIGVxdWFsIGl0ZW0gcG9pbnRlcnMgYmVpbmcgc29y dGVkICovCi0JQXNzZXJ0KHJlcyAhPSAwKTsKLQlyZXR1cm4gcmVzOwotfQotCi0vKiBQcmVw YXJlIHRvIHJlYWQgb3V0IHRoZSByYnRyZWUgY29udGVudHMgdXNpbmcgZ2luR2V0QkFFbnRy eSAqLworLyogUHJlcGFyZSB0byByZWFkIG91dCB0aGUgaGFzaCB0YWJsZSBjb250ZW50cyB1 c2luZyBnaW5HZXRCQUVudHJ5ICovCiB2b2lkCiBnaW5CZWdpbkJBU2NhbihCdWlsZEFjY3Vt dWxhdG9yICphY2N1bSkKIHsKLQlyYnRfYmVnaW5faXRlcmF0ZShhY2N1bS0+dHJlZSwgTGVm dFJpZ2h0V2FsaywgJmFjY3VtLT50cmVlX3dhbGspOworCWdpbmJ1aWxkX2l0ZXJhdG9yIGl0 ZXI7CisJR2luSGFzaEVudHJ5ICplbnRyeTsKKwl1aW50MzIJCWkgPSAwOworCisJYWNjdW0t Pm51bV9lbnRyaWVzID0gYWNjdW0tPmhhc2gtPm1lbWJlcnM7CisJYWNjdW0tPmN1cnJlbnRf cG9zID0gMDsKKworCWlmIChhY2N1bS0+bnVtX2VudHJpZXMgPT0gMCkKKwkJcmV0dXJuOwor CisJYWNjdW0tPnNvcnRlZF9lbnRyaWVzID0gcGFsbG9jX2FycmF5KEdpblNvcnRFbnRyeSwg YWNjdW0tPm51bV9lbnRyaWVzKTsKKwlnaW5idWlsZF9zdGFydF9pdGVyYXRlKGFjY3VtLT5o YXNoLCAmaXRlcik7CisKKwl3aGlsZSAoKGVudHJ5ID0gZ2luYnVpbGRfaXRlcmF0ZShhY2N1 bS0+aGFzaCwgJml0ZXIpKSAhPSBOVUxMKQorCXsKKwkJR2luU29ydEVudHJ5ICpzZSA9ICZh Y2N1bS0+c29ydGVkX2VudHJpZXNbaV07CisJCXNvcnRfaXRlbXBvaW50ZXJzKGVudHJ5LT5p dGVtcywgZW50cnktPm51bUl0ZW1zKTsKKworCQlzZS0+aGFzaGtleSA9IGVudHJ5LT5oYXNo a2V5OworCQlzZS0+aXRlbXMgPSBlbnRyeS0+aXRlbXM7CisJCXNlLT5udW1JdGVtcyA9IGVu dHJ5LT5udW1JdGVtczsKKwkJaSsrOworCX0KKworCUFzc2VydChpID09IGFjY3VtLT5udW1f ZW50cmllcyk7CisJc29ydF9rZXlzKGFjY3VtLT5zb3J0ZWRfZW50cmllcywgYWNjdW0tPm51 bV9lbnRyaWVzLCBhY2N1bS0+Z2luc3RhdGUpOworCWFjY3VtLT5jdXJyZW50X3BvcyA9IDA7 CiB9CiAKIC8qCi0gKiBHZXQgdGhlIG5leHQgZW50cnkgaW4gc2VxdWVuY2UgZnJvbSB0aGUg QnVpbGRBY2N1bXVsYXRvcidzIHJidHJlZS4KKyAqIEdldCB0aGUgbmV4dCBlbnRyeSBpbiBz ZXF1ZW5jZSBmcm9tIHRoZSBCdWlsZEFjY3VtdWxhdG9yJ3Mgc29ydGVkIGhhc2ggZW50cmll cy4KICAqIFRoaXMgY29uc2lzdHMgb2YgYSBzaW5nbGUga2V5IGRhdHVtIGFuZCBhIGxpc3Qg KGFycmF5KSBvZiBvbmUgb3IgbW9yZQogICogaGVhcCBUSURzIGluIHdoaWNoIHRoYXQga2V5 IGlzIGZvdW5kLiAgVGhlIGxpc3QgaXMgZ3VhcmFudGVlZCBzb3J0ZWQuCiAgKi8KQEAgLTI2 OCwyNSArMjY0LDE4IEBAIGdpbkdldEJBRW50cnkoQnVpbGRBY2N1bXVsYXRvciAqYWNjdW0s CiAJCQkgIE9mZnNldE51bWJlciAqYXR0bnVtLCBEYXR1bSAqa2V5LCBHaW5OdWxsQ2F0ZWdv cnkgKmNhdGVnb3J5LAogCQkJICB1aW50MzIgKm4pCiB7Ci0JR2luRW50cnlBY2N1bXVsYXRv ciAqZW50cnk7Ci0JSXRlbVBvaW50ZXJEYXRhICpsaXN0OwotCi0JZW50cnkgPSAoR2luRW50 cnlBY2N1bXVsYXRvciAqKSByYnRfaXRlcmF0ZSgmYWNjdW0tPnRyZWVfd2Fsayk7CisJR2lu U29ydEVudHJ5ICplbnRyeTsKIAotCWlmIChlbnRyeSA9PSBOVUxMKQorCWlmIChhY2N1bS0+ Y3VycmVudF9wb3MgPj0gYWNjdW0tPm51bV9lbnRyaWVzKQogCQlyZXR1cm4gTlVMTDsJCQkv KiBubyBtb3JlIGVudHJpZXMgKi8KIAotCSphdHRudW0gPSBlbnRyeS0+YXR0bnVtOwotCSpr ZXkgPSBlbnRyeS0+a2V5OwotCSpjYXRlZ29yeSA9IGVudHJ5LT5jYXRlZ29yeTsKLQlsaXN0 ID0gZW50cnktPmxpc3Q7Ci0JKm4gPSBlbnRyeS0+Y291bnQ7Ci0KLQlBc3NlcnQobGlzdCAh PSBOVUxMICYmIGVudHJ5LT5jb3VudCA+IDApOworCWVudHJ5ID0gJmFjY3VtLT5zb3J0ZWRf ZW50cmllc1thY2N1bS0+Y3VycmVudF9wb3NdOworCWFjY3VtLT5jdXJyZW50X3BvcysrOwog Ci0JaWYgKGVudHJ5LT5zaG91bGRTb3J0ICYmIGVudHJ5LT5jb3VudCA+IDEpCi0JCXFzb3J0 KGxpc3QsIGVudHJ5LT5jb3VudCwgc2l6ZW9mKEl0ZW1Qb2ludGVyRGF0YSksCi0JCQkgIHFz b3J0Q29tcGFyZUl0ZW1Qb2ludGVycyk7CisJKmF0dG51bSA9IGVudHJ5LT5oYXNoa2V5LmF0 dG51bTsKKwkqa2V5ID0gZW50cnktPmhhc2hrZXkua2V5OworCSpjYXRlZ29yeSA9IGVudHJ5 LT5oYXNoa2V5LmNhdGVnb3J5OworCSpuID0gZW50cnktPm51bUl0ZW1zOwogCi0JcmV0dXJu IGxpc3Q7CisJcmV0dXJuIGVudHJ5LT5pdGVtczsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9naW5fcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl9wcml2 YXRlLmgKaW5kZXggM2M1ZmQ2YmE4MTcuLmRmNmI0NDc5NmM2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2luX3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2luX3ByaXZhdGUuaApAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgImNvbW1vbi9pbnQu aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKICNpbmNsdWRlICJmbWdyLmgiCi0j aW5jbHVkZSAibGliL3JidHJlZS5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAKQEAgLTQyMCwyNiArNDE5LDE1IEBAIGV4 dGVybiB2b2lkIGdpbmFkanVzdG1lbWJlcnMoT2lkIG9wZmFtaWx5b2lkLAogCQkJCQkJCSBM aXN0ICpmdW5jdGlvbnMpOwogCiAvKiBnaW5idWxrLmMgKi8KLXR5cGVkZWYgc3RydWN0IEdp bkVudHJ5QWNjdW11bGF0b3IKLXsKLQlSQlROb2RlCQlyYnRub2RlOwotCURhdHVtCQlrZXk7 Ci0JR2luTnVsbENhdGVnb3J5IGNhdGVnb3J5OwotCU9mZnNldE51bWJlciBhdHRudW07Ci0J Ym9vbAkJc2hvdWxkU29ydDsKLQlJdGVtUG9pbnRlckRhdGEgKmxpc3Q7Ci0JdWludDMyCQlt YXhjb3VudDsJCS8qIGFsbG9jYXRlZCBzaXplIG9mIGxpc3RbXSAqLwotCXVpbnQzMgkJY291 bnQ7CQkJLyogY3VycmVudCBudW1iZXIgb2YgbGlzdFtdIGVudHJpZXMgKi8KLX0gR2luRW50 cnlBY2N1bXVsYXRvcjsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQlHaW5TdGF0ZSAgICpnaW5z dGF0ZTsKLQlTaXplCQlhbGxvY2F0ZWRNZW1vcnk7Ci0JR2luRW50cnlBY2N1bXVsYXRvciAq ZW50cnlhbGxvY2F0b3I7Ci0JdWludDMyCQllYXNfdXNlZDsKLQlSQlRyZWUJICAgKnRyZWU7 Ci0JUkJUcmVlSXRlcmF0b3IgdHJlZV93YWxrOworCUdpblN0YXRlICoJCQkJZ2luc3RhdGU7 CisJU2l6ZQkJCQkJYWxsb2NhdGVkTWVtb3J5OworCXN0cnVjdCBnaW5idWlsZF9oYXNoICoJ aGFzaDsKKwlzdHJ1Y3QgR2luU29ydEVudHJ5ICoJc29ydGVkX2VudHJpZXM7CisJdWludDMy CQkJCQludW1fZW50cmllczsKKwl1aW50MzIJCQkJCWN1cnJlbnRfcG9zOwogfSBCdWlsZEFj Y3VtdWxhdG9yOwogCiBleHRlcm4gdm9pZCBnaW5Jbml0QkEoQnVpbGRBY2N1bXVsYXRvciAq YWNjdW0pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjNTQ2YjNkNjM3NS4u ZmU4MjY1MWU4NmQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTIxLDcg KzExMjEsOCBAQCBHaW5CdWlsZFNoYXJlZAogR2luQnVpbGRTdGF0ZQogR2luQ2hrVmFsCiBH aW5FbnRyaWVzCi1HaW5FbnRyeUFjY3VtdWxhdG9yCitHaW5IYXNoRW50cnkKK0dpbkhhc2hL ZXkKIEdpbkluZGV4U3RhdAogR2luTGVhZGVyCiBHaW5NZXRhUGFnZURhdGEKQEAgLTExNDEs NiArMTE0Miw3IEBAIEdpblNjYW5LZXlEYXRhCiBHaW5TY2FuT3BhcXVlCiBHaW5TY2FuT3Bh cXVlRGF0YQogR2luU2VnbWVudEluZm8KK0dpblNvcnRFbnRyeQogR2luU3RhdGUKIEdpblN0 YXRzRGF0YQogR2luVGVybmFyeVZhbHVlCi0tIAoyLjUxLjAKCg== --------------2bU7fQ53J2kZutyYjAiNkrxb Content-Type: text/x-patch; charset=UTF-8; name="v9-0002-Optimize-generate_trgm-with-radix-sort.patch" Content-Disposition: attachment; filename="v9-0002-Optimize-generate_trgm-with-radix-sort.patch" Content-Transfer-Encoding: base64 RnJvbSBhY2I1N2JkMjM2ZDZjNGU1MTg4YTcxODI0YThjMTYyYWY0MjNhMDhjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogVHVlLCAxMSBOb3YgMjAyNSAxMzoxODo1OSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjkgMi8zXSBPcHRpbWl6ZSBnZW5lcmF0ZV90cmdtKCkgd2l0aCByYWRpeCBzb3J0Cgot LS0KIGNvbnRyaWIvcGdfdHJnbS90cmdtX29wLmMgfCA2MSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCsp LCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdHJnbS90cmdtX29w LmMgYi9jb250cmliL3BnX3RyZ20vdHJnbV9vcC5jCmluZGV4IDIyYmNjM2MzMzYxLi5jZGI4 ZDdkODcxYiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ190cmdtL3RyZ21fb3AuYworKysgYi9j b250cmliL3BnX3RyZ20vdHJnbV9vcC5jCkBAIC0yMjYsMTMgKzIyNiw1OCBAQCBDTVBUUkdN X0NIT09TRShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogCXJldHVybiBDTVBUUkdN KGEsIGIpOwogfQogCi0jZGVmaW5lIFNUX1NPUlQgdHJpZ3JhbV9xc29ydF9zaWduZWQKLSNk ZWZpbmUgU1RfRUxFTUVOVF9UWVBFX1ZPSUQKLSNkZWZpbmUgU1RfQ09NUEFSRShhLCBiKSBD TVBUUkdNX1NJR05FRChhLCBiKQotI2RlZmluZSBTVF9TQ09QRSBzdGF0aWMKLSNkZWZpbmUg U1RfREVGSU5FCi0jZGVmaW5lIFNUX0RFQ0xBUkUKLSNpbmNsdWRlICJsaWIvc29ydF90ZW1w bGF0ZS5oIgorLyoKKyAqIE5lZWRlZCB0byBwcm9wZXJseSBoYW5kbGUgbmVnYXRpdmUgbnVt YmVycyBpbiBjYXNlIGNoYXIgaXMgc2lnbmVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGNoYXIKK2ZsaXBfc2lnbihjaGFyIHgpCit7CisJcmV0dXJuIHggXiAweDgwOworfQor CitzdGF0aWMgdm9pZAorcmFkaXhfc29ydF90cmlncmFtc19zaWduZWQodHJnbSAqdHJnLCBp bnQgY291bnQpCit7CisJdHJnbSAqYnVmZmVyID0gcGFsbG9jX2FycmF5KHRyZ20sIGNvdW50 KTsKKwl0cmdtICpzdGFydHNbMjU2XTsKKwl0cmdtICpmcm9tID0gdHJnOworCXRyZ20gKnRv ID0gYnVmZmVyOworCWludCBmcmVxc1szXVsyNTZdOworCisJLyoKKwkgKiBDb21wdXRlIGZy ZXF1ZW5jaWVzIHRvIHBhcnRpdGlvbiB0aGUgYnVmZmVyLgorCSAqLworCW1lbXNldChmcmVx cywgMCwgc2l6ZW9mKGZyZXFzKSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp KyspCisJCWZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQorCQkJZnJlcXNbal1bZmxpcF9z aWduKHRyZ1tpXVtqXSldKys7CisKKwkvKgorCSAqIERvIHRoZSBzb3J0aW5nLiBTdGFydCB3 aXRoIGxhc3QgY2hhcmFjdGVyIGJlY2F1c2UgdGhhdCdzIHRoZSBpcyAiTFNCIgorCSAqIGlu IGEgdHJpZ3JhbS4gQXZvaWQgdW5uZWNlc3NhcnkgY29waWVzIGJ5IHBpbmctcG9uZ2luZyBi ZXR3ZWVuIHRoZSBidWZmZXJzLgorCSAqLworCWZvciAoaW50IGkgPSAyOyBpID49IDA7IGkt LSkKKwl7CisJCXRyZ20gKm9sZF9mcm9tID0gZnJvbTsKKwkJdHJnbSAqbmV4dCA9IHRvOwor CisJCWZvciAoaW50IGogPSAwOyBqIDwgMjU2OyBqKyspCisJCXsKKwkJCXN0YXJ0c1tqXSA9 IG5leHQ7CisJCQluZXh0ICs9IGZyZXFzW2ldW2pdOworCQl9CisKKwkJZm9yIChpbnQgaiA9 IDA7IGogPCBjb3VudDsgaisrKQorCQkJbWVtY3B5KHN0YXJ0c1tmbGlwX3NpZ24oZnJvbVtq XVtpXSldKyssIGZyb21bal0sIHNpemVvZih0cmdtKSk7CisKKwkJZnJvbSA9IHRvOworCQl0 byA9IG9sZF9mcm9tOworCX0KKworCW1lbWNweSh0cmcsIGJ1ZmZlciwgc2l6ZW9mKHRyZ20p ICogY291bnQpOworCXBmcmVlKGJ1ZmZlcik7Cit9CiAKICNkZWZpbmUgU1RfU09SVCB0cmln cmFtX3Fzb3J0X3Vuc2lnbmVkCiAjZGVmaW5lIFNUX0VMRU1FTlRfVFlQRV9WT0lECkBAIC0y NDcsNyArMjkyLDcgQEAgc3RhdGljIHZvaWQKIHRyaWdyYW1fcXNvcnQodHJnbSAqYXJyYXks IHNpemVfdCBuKQogewogCWlmIChHZXREZWZhdWx0Q2hhclNpZ25lZG5lc3MoKSkKLQkJdHJp Z3JhbV9xc29ydF9zaWduZWQoYXJyYXksIG4sIHNpemVvZih0cmdtKSk7CisJCXJhZGl4X3Nv cnRfdHJpZ3JhbXNfc2lnbmVkKGFycmF5LCBuKTsKIAllbHNlCiAJCXRyaWdyYW1fcXNvcnRf dW5zaWduZWQoYXJyYXksIG4sIHNpemVvZih0cmdtKSk7CiB9Ci0tIAoyLjUxLjAKCg== --------------2bU7fQ53J2kZutyYjAiNkrxb Content-Type: text/x-patch; charset=UTF-8; name="v9-0001-Make-btint4cmp-and-btint8cmp-branchless.patch" Content-Disposition: attachment; filename="v9-0001-Make-btint4cmp-and-btint8cmp-branchless.patch" Content-Transfer-Encoding: base64 RnJvbSAzZmRiNDE2Njk1NTA0ZjdkMzFjZDE5MTNmNTQ1MTQ1ZDJlZDJkMmYxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBHZWllciA8Z2VpZGF2LnBnQGdtYWlsLmNv bT4KRGF0ZTogTW9uLCAxMCBOb3YgMjAyNSAxNTo0MDoxMSArMDEwMApTdWJqZWN0OiBbUEFU Q0ggdjkgMS8zXSBNYWtlIGJ0aW50NGNtcCgpIGFuZCBidGludDhjbXAoKSBicmFuY2hsZXNz CgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0Y29tcGFyZS5jIHwgMTUgKysr LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxMiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGNv bXBhcmUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0Y29tcGFyZS5jCmluZGV4 IDRlM2EzYTBmN2NlLi44MGRlYzIwMGEzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRjb21wYXJlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRjb21wYXJlLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJ1dGlscy9mbWdy cHJvdG9zLmgiCiAjaW5jbHVkZSAidXRpbHMvc2tpcHN1cHBvcnQuaCIKICNpbmNsdWRlICJ1 dGlscy9zb3J0c3VwcG9ydC5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKIAogI2lmZGVm IFNUUkVTU19TT1JUX0lOVF9NSU4KICNkZWZpbmUgQV9MRVNTX1RIQU5fQgkJSU5UX01JTgpA QCAtMTk0LDEyICsxOTUsNyBAQCBidGludDRjbXAoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQz MgkJYSA9IFBHX0dFVEFSR19JTlQzMigwKTsKIAlpbnQzMgkJYiA9IFBHX0dFVEFSR19JTlQz MigxKTsKIAotCWlmIChhID4gYikKLQkJUEdfUkVUVVJOX0lOVDMyKEFfR1JFQVRFUl9USEFO X0IpOwotCWVsc2UgaWYgKGEgPT0gYikKLQkJUEdfUkVUVVJOX0lOVDMyKDApOwotCWVsc2UK LQkJUEdfUkVUVVJOX0lOVDMyKEFfTEVTU19USEFOX0IpOworCVBHX1JFVFVSTl9JTlQzMihw Z19jbXBfczMyKGEsIGIpKTsKIH0KIAogRGF0dW0KQEAgLTI2MiwxMiArMjU4LDcgQEAgYnRp bnQ4Y21wKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW50NjQJCWEgPSBQR19HRVRBUkdfSU5UNjQo MCk7CiAJaW50NjQJCWIgPSBQR19HRVRBUkdfSU5UNjQoMSk7CiAKLQlpZiAoYSA+IGIpCi0J CVBHX1JFVFVSTl9JTlQzMihBX0dSRUFURVJfVEhBTl9CKTsKLQllbHNlIGlmIChhID09IGIp Ci0JCVBHX1JFVFVSTl9JTlQzMigwKTsKLQllbHNlCi0JCVBHX1JFVFVSTl9JTlQzMihBX0xF U1NfVEhBTl9CKTsKKwlQR19SRVRVUk5fSU5UMzIocGdfY21wX3M2NChhLCBiKSk7CiB9CiAK IERhdHVtCi0tIAoyLjUxLjAKCg== --------------2bU7fQ53J2kZutyYjAiNkrxb--