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 1wFe2Y-005OTj-2M for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 20:19:19 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wFe2X-00FC3e-2p for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Apr 2026 20:19:17 +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 1wFe2X-00FC3W-0i for pgsql-hackers@lists.postgresql.org; Wed, 22 Apr 2026 20:19:17 +0000 Received: from mail-43103.protonmail.ch ([185.70.43.103]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wFe2U-00000002Iyt-0MdM for pgsql-hackers@lists.postgresql.org; Wed, 22 Apr 2026 20:19:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1776889150; x=1777148350; bh=S6cJxBpOSbemvxOJHB4TN4l0egM7edOPHoNS2ki5svw=; h=Date:To:From:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=sKg6x71V0lNvH+GjmEXE2tLGve6K/ydTARh1DnzA5mUW2Hx+4tB0vGQDmieNFSbqn yE7aTDOUko3vXfY5RxMJEu2Ev+tSVVeTD/u2dd5kXMX/XOKI9qQDRiiK5jpFsNu78T UmK1r5hCVmSszX1G4+Ho/nlZUaezUGDgVS/gWNPwdcXkGpfw/xbd3nKsdLDU00FE8y 8nvNBCYaQHwiL87DivHogZ6SazMr1mqnUu8GPAVk2oQypgQD9fXXU6S9JBS+AMAyVi /MQ5C8K0tIDnnqZiPr4FW83PdsiqIbLCm8XxENHzQRrwKuxX+7W8XvYA/6tXVxYYLE /gN+j73sVkxog== Date: Wed, 22 Apr 2026 20:18:55 +0000 To: "pgsql-hackers@lists.postgresql.org" From: Mok Subject: New vacuum config to avoid anti wraparound vacuums Message-ID: Feedback-ID: 4918997:user:proton X-Pm-Message-ID: 6714cb9849087f81614b9776469f30140a91d497 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1=_ojWIIGH4FsBf6LzW4LwnlsjeqgpbjR1m6trQbGOZ1U" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b1=_ojWIIGH4FsBf6LzW4LwnlsjeqgpbjR1m6trQbGOZ1U Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello hackers.=20 Hope you are all keeping well.=20 I have an idea for managing vacuums. When managing vacuums it can sometimes= be a struggle to manage the config settings for them, especially when tryi= ng to avoid anti wraparound vacuums. Some tables are massive and needs scal= e factor settings in the fractions of percent, sometimes, with no guarantee= that enough actions cross that threshold. Increasing the autovacuum_freeze= _max_age to keep up with an growing number of transactions across an instan= ce is just kicking the can down the road. Engineers run backfills that thro= w off any calculations you may use to work out these scale factors and usin= g the same values across an instance is too simple while managing individua= lly for tables can be too messy. Or you run a cron type job so you don't ha= ve to think about it at all.=20 So I thought a nice way to avoid anti wraparound vacuums is to use the age = of the table as the trigger.=20 We could add, yet another, vacuum configuration. Eg autovacuum_age_scale_fa= ctor as a percentage of autovacuum_freeze_max_age.=20 For example, set to 0.8 a 'standard' vacuum would be triggered when the tab= le reached 160million with a default 200million setting.=20 As a noddy example.=20 create table a ( a int) ; create table b ( a int) ;=20 alter table a set ( autovacuum_freeze_max_age=3D100000, autovacuum_age_scal= e_factor=3D0.1) // 10% of max age=20 Then run some activity table b keeping a inactive to increase its age, but = not trigger a vacuum using scale factor or threshold settings.=20 When the table reaches ~10000 age it will trigger a pre-emptive vacuum to p= revent wraparound vacuum occurring.=20 The log entry for the event would appear like:=20 [56957] LOG: automatic vacuum (age-based proactive) of table "postgres.pub= lic.atable": index scans: 0 I thought I would put the idea out there. I've attached a patch file if any= one wants to try it. Its built against the REL_18_3 tag.=20 Happy Postgresing=20 Gurmokh --b1=_ojWIIGH4FsBf6LzW4LwnlsjeqgpbjR1m6trQbGOZ1U Content-Type: application/octet-stream; name=0001-age-based-vacuum.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-age-based-vacuum.patch RnJvbSBhOWUzYTQ1YmQzODU5ZmMzYjg5ZTI1MjkxYzA3ZmM1NmEyOWE0NzU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBndXJtb2toIDxndXJtb2toQGdtYWlsLmNvbT4KRGF0ZTogVHVl LCAyMSBBcHIgMjAyNiAwODoyOTozNyArMDEwMApTdWJqZWN0OiBbUEFUQ0hdIGFnZSBiYXNlZCB2 YWN1dW0KCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgfCAxMSAr KysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jICAgfCAgOSArKystCiBz cmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKy0t LS0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oICAgICAgICAgIHwgIDEgKwogc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmggICAgfCAgMSArCiBzcmMvaW5jbHVkZS91dGls cy9yZWwuaCAgICAgICAgICAgICAgICB8ICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgODAgaW5zZXJ0 aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlv bnMuYwppbmRleCA1MDc0N2MxNjM5Ni4uZDgzNGQ2ZDhmODQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9j b21tb24vcmVsb3B0aW9ucy5jCkBAIC0zODgsNiArMzg4LDE1IEBAIHN0YXRpYyByZWxvcHRfaW50 IGludFJlbE9wdHNbXSA9CiAKIHN0YXRpYyByZWxvcHRfcmVhbCByZWFsUmVsT3B0c1tdID0KIHsK Kwl7CisJCXsKKwkJCSJhdXRvdmFjdXVtX2FnZV9zY2FsZV9mYWN0b3IiLAorCQkJIkFnZSBhcyBh IHBlcmNlbnRhZ2Ugb2YgYXV0b3ZhY3V1bV9tYXhfZnJlZXplX2FnZSIsCisJCQlSRUxPUFRfS0lO RF9IRUFQIHwgUkVMT1BUX0tJTkRfVE9BU1QsCisJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sK KwkJfSwKKwkJLTEsIDAuMCwgMTAwLjAKKwl9LAogCXsKIAkJewogCQkJImF1dG92YWN1dW1fdmFj dXVtX2Nvc3RfZGVsYXkiLApAQCAtMTg5NCw2ICsxOTAzLDggQEAgZGVmYXVsdF9yZWxvcHRpb25z KERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUsIHJlbG9wdF9raW5kIGtpbmQpCiAJCW9m ZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihBdXRvVmFjT3B0cywg bXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKX0sCiAJCXsiYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJl ZXplX3RhYmxlX2FnZSIsIFJFTE9QVF9UWVBFX0lOVCwKIAkJb2Zmc2V0b2YoU3RkUmRPcHRpb25z LCBhdXRvdmFjdXVtKSArIG9mZnNldG9mKEF1dG9WYWNPcHRzLCBtdWx0aXhhY3RfZnJlZXplX3Rh YmxlX2FnZSl9LAorCQl7ImF1dG92YWN1dW1fYWdlX3NjYWxlX2ZhY3RvciIsIFJFTE9QVF9UWVBF X1JFQUwsCisJCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgYXV0b3ZhY3V1bSkgKyBvZmZzZXRvZihB dXRvVmFjT3B0cywgYXV0b3ZhY3V1bV9hZ2Vfc2NhbGVfZmFjdG9yKX0sCiAJCXsibG9nX2F1dG92 YWN1dW1fbWluX2R1cmF0aW9uIiwgUkVMT1BUX1RZUEVfSU5ULAogCQlvZmZzZXRvZihTdGRSZE9w dGlvbnMsIGF1dG92YWN1dW0pICsgb2Zmc2V0b2YoQXV0b1ZhY09wdHMsIGxvZ19taW5fZHVyYXRp b24pfSwKIAkJeyJ0b2FzdF90dXBsZV90YXJnZXQiLCBSRUxPUFRfVFlQRV9JTlQsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKaW5kZXggOGZiYWYxMjY3NTYuLmYyZjk0MjY2ZjE2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92YWN1dW1sYXp5LmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCkBAIC05OTUsNyArOTk1LDE0IEBAIGhl YXBfdmFjdXVtX3JlbChSZWxhdGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJCSAq IGltcGxpZXMgYWdncmVzc2l2ZS4gIFByb2R1Y2UgZGlzdGluY3Qgb3V0cHV0IGZvciB0aGUgY29y bmVyCiAJCQkJICogY2FzZSBhbGwgdGhlIHNhbWUsIGp1c3QgaW4gY2FzZS4KIAkJCQkgKi8KLQkJ CQlpZiAodmFjcmVsLT5hZ2dyZXNzaXZlKQorCQkJCWlmIChwYXJhbXMtPmlzX2FnZV9iYXNlZCkK KwkJCQl7CisJCQkJCWlmICh2YWNyZWwtPmFnZ3Jlc3NpdmUpCisJCQkJCQltc2dmbXQgPSBfKCJh dXRvbWF0aWMgYWdncmVzc2l2ZSB2YWN1dW0gKGFnZS1iYXNlZCBwcm9hY3RpdmUpIG9mIHRhYmxl IFwiJXMuJXMuJXNcIjogaW5kZXggc2NhbnM6ICVkXG4iKTsKKwkJCQkJZWxzZQorCQkJCQkJbXNn Zm10ID0gXygiYXV0b21hdGljIHZhY3V1bSAoYWdlLWJhc2VkIHByb2FjdGl2ZSkgb2YgdGFibGUg XCIlcy4lcy4lc1wiOiBpbmRleCBzY2FuczogJWRcbiIpOworCQkJCX0KKwkJCQllbHNlIGlmICh2 YWNyZWwtPmFnZ3Jlc3NpdmUpCiAJCQkJCW1zZ2ZtdCA9IF8oImF1dG9tYXRpYyBhZ2dyZXNzaXZl IHZhY3V1bSB0byBwcmV2ZW50IHdyYXBhcm91bmQgb2YgdGFibGUgXCIlcy4lcy4lc1wiOiBpbmRl eCBzY2FuczogJWRcbiIpOwogCQkJCWVsc2UKIAkJCQkJbXNnZm10ID0gXygiYXV0b21hdGljIHZh Y3V1bSB0byBwcmV2ZW50IHdyYXBhcm91bmQgb2YgdGFibGUgXCIlcy4lcy4lc1wiOiBpbmRleCBz Y2FuczogJWRcbiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBiZTg2M2RiODFjYi4uNDBlYWQ2 YWYxODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC00MTgsNiArNDE4LDcgQEAgRXhlY1ZhY3V1 bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZl bCkKIAogCS8qIHVzZXItaW52b2tlZCB2YWN1dW0gaXMgbmV2ZXIgImZvciB3cmFwYXJvdW5kIiAq LwogCXBhcmFtcy5pc193cmFwYXJvdW5kID0gZmFsc2U7CisJcGFyYW1zLmlzX2FnZV9iYXNlZCA9 IGZhbHNlOwogCiAJLyogdXNlci1pbnZva2VkIHZhY3V1bSB1c2VzIFZBQ09QVF9WRVJCT1NFIGlu c3RlYWQgb2YgbG9nX21pbl9kdXJhdGlvbiAqLwogCXBhcmFtcy5sb2dfbWluX2R1cmF0aW9uID0g LTE7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDY2NjIwZmI0NzU1Li5mNzMy YTNmOTRlOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMK KysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAgLTEyOSw2ICsxMjks NyBAQCBpbnQJCQlhdXRvdmFjdXVtX2FubF90aHJlc2g7CiBkb3VibGUJCWF1dG92YWN1dW1fYW5s X3NjYWxlOwogaW50CQkJYXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZTsKIGludAkJCWF1dG92YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOworZG91YmxlCQlhdXRvdmFjdXVtX2FnZV9zY2Fs ZTsKIAogZG91YmxlCQlhdXRvdmFjdXVtX3ZhY19jb3N0X2RlbGF5OwogaW50CQkJYXV0b3ZhY3V1 bV92YWNfY29zdF9saW1pdDsKQEAgLTMzNiwxMyArMzM3LDE0IEBAIHN0YXRpYyBhdXRvdmFjX3Rh YmxlICp0YWJsZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlkLCBIVEFCICp0YWJsZV90b2FzdF9t YXAsCiBzdGF0aWMgdm9pZCByZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJl bGlkLCBBdXRvVmFjT3B0cyAqYXZvcHRzLAogCQkJCQkJCQkJCQkgIEZvcm1fcGdfY2xhc3MgY2xh c3NGb3JtLAogCQkJCQkJCQkJCQkgIGludCBlZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhf YWdlLAotCQkJCQkJCQkJCQkgIGJvb2wgKmRvdmFjdXVtLCBib29sICpkb2FuYWx5emUsIGJvb2wg KndyYXBhcm91bmQpOworCQkJCQkJCQkJCQkgIGJvb2wgKmRvdmFjdXVtLCBib29sICpkb2FuYWx5 emUsCisJCQkJCQkJCQkJCSAgYm9vbCAqd3JhcGFyb3VuZCwgYm9vbCAqaXNfYWdlX2Jhc2VkKTsK IHN0YXRpYyB2b2lkIHJlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLCBBdXRvVmFj T3B0cyAqcmVsb3B0cywKIAkJCQkJCQkJCSAgRm9ybV9wZ19jbGFzcyBjbGFzc0Zvcm0sCiAJCQkJ CQkJCQkgIFBnU3RhdF9TdGF0VGFiRW50cnkgKnRhYmVudHJ5LAogCQkJCQkJCQkJICBpbnQgZWZm ZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwKLQkJCQkJCQkJCSAgYm9vbCAqZG92YWN1 dW0sIGJvb2wgKmRvYW5hbHl6ZSwgYm9vbCAqd3JhcGFyb3VuZCk7Ci0KKwkJCQkJCQkJCSAgYm9v bCAqZG92YWN1dW0sIGJvb2wgKmRvYW5hbHl6ZSwKKwkJCQkJCQkJCSAgYm9vbCAqd3JhcGFyb3Vu ZCwgYm9vbCAqaXNfYWdlX2Jhc2VkKTsKIHN0YXRpYyB2b2lkIGF1dG92YWN1dW1fZG9fdmFjX2Fu YWx5emUoYXV0b3ZhY190YWJsZSAqdGFiLAogCQkJCQkJCQkJICBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBic3RyYXRlZ3kpOwogc3RhdGljIEF1dG9WYWNPcHRzICpleHRyYWN0X2F1dG92YWNfb3B0cyhI ZWFwVHVwbGUgdHVwLApAQCAtMjAwMCw2ICsyMDAyLDggQEAgZG9fYXV0b3ZhY3V1bSh2b2lkKQog CQlib29sCQlkb3ZhY3V1bTsKIAkJYm9vbAkJZG9hbmFseXplOwogCQlib29sCQl3cmFwYXJvdW5k OworCQlib29sCQlhZ2VfYmFzZWQ7CisKIAogCQlpZiAoY2xhc3NGb3JtLT5yZWxraW5kICE9IFJF TEtJTkRfUkVMQVRJT04gJiYKIAkJCWNsYXNzRm9ybS0+cmVsa2luZCAhPSBSRUxLSU5EX01BVFZJ RVcpCkBAIC0yMDQwLDcgKzIwNDQsOCBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJCS8qIENoZWNr IGlmIGl0IG5lZWRzIHZhY3V1bSBvciBhbmFseXplICovCiAJCXJlbGF0aW9uX25lZWRzX3ZhY2Fu YWx5emUocmVsaWQsIHJlbG9wdHMsIGNsYXNzRm9ybSwgdGFiZW50cnksCiAJCQkJCQkJCSAgZWZm ZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwKLQkJCQkJCQkJICAmZG92YWN1dW0sICZk b2FuYWx5emUsICZ3cmFwYXJvdW5kKTsKKwkJCQkJCQkJICAmZG92YWN1dW0sICZkb2FuYWx5emUs ICZ3cmFwYXJvdW5kLAorCQkJCQkJCQkgICZhZ2VfYmFzZWQpOwogCiAJCS8qIFJlbGF0aW9ucyB0 aGF0IG5lZWQgd29yayBhcmUgYWRkZWQgdG8gdGFibGVfb2lkcyAqLwogCQlpZiAoZG92YWN1dW0g fHwgZG9hbmFseXplKQpAQCAtMjEwMCw2ICsyMTA1LDcgQEAgZG9fYXV0b3ZhY3V1bSh2b2lkKQog CQlib29sCQlkb3ZhY3V1bTsKIAkJYm9vbAkJZG9hbmFseXplOwogCQlib29sCQl3cmFwYXJvdW5k OworCQlib29sCQlhZ2VfYmFzZWQ7CiAKIAkJLyoKIAkJICogV2UgY2Fubm90IHNhZmVseSBwcm9j ZXNzIG90aGVyIGJhY2tlbmRzJyB0ZW1wIHRhYmxlcywgc28gc2tpcCAnZW0uCkBAIC0yMTMyLDcg KzIxMzgsOCBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAKIAkJcmVsYXRpb25fbmVlZHNfdmFjYW5h bHl6ZShyZWxpZCwgcmVsb3B0cywgY2xhc3NGb3JtLCB0YWJlbnRyeSwKIAkJCQkJCQkJICBlZmZl Y3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLAotCQkJCQkJCQkgICZkb3ZhY3V1bSwgJmRv YW5hbHl6ZSwgJndyYXBhcm91bmQpOworCQkJCQkJCQkgICZkb3ZhY3V1bSwgJmRvYW5hbHl6ZSwg JndyYXBhcm91bmQsCisJCQkJCQkJCSAgJmFnZV9iYXNlZCk7CiAKIAkJLyogaWdub3JlIGFuYWx5 emUgZm9yIHRvYXN0IHRhYmxlcyAqLwogCQlpZiAoZG92YWN1dW0pCkBAIC0yNzU2LDYgKzI3NjMs NyBAQCB0YWJsZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlkLCBIVEFCICp0YWJsZV90b2FzdF9t YXAsCiAJYm9vbAkJZG9hbmFseXplOwogCWF1dG92YWNfdGFibGUgKnRhYiA9IE5VTEw7CiAJYm9v bAkJd3JhcGFyb3VuZDsKKwlib29sCQlhZ2VfYmFzZWQ7CiAJQXV0b1ZhY09wdHMgKmF2b3B0czsK IAlib29sCQlmcmVlX2F2b3B0cyA9IGZhbHNlOwogCkBAIC0yNzg1LDcgKzI3OTMsOCBAQCB0YWJs ZV9yZWNoZWNrX2F1dG92YWMoT2lkIHJlbGlkLCBIVEFCICp0YWJsZV90b2FzdF9tYXAsCiAKIAly ZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUocmVsaWQsIGF2b3B0cywgY2xhc3NGb3Jt LAogCQkJCQkJCQkJICBlZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLAotCQkJCQkJ CQkJICAmZG92YWN1dW0sICZkb2FuYWx5emUsICZ3cmFwYXJvdW5kKTsKKwkJCQkJCQkJCSAgJmRv dmFjdXVtLCAmZG9hbmFseXplLCAmd3JhcGFyb3VuZCwKKwkJCQkJCQkJCSAgJmFnZV9iYXNlZCk7 CiAKIAkvKiBPSywgaXQgbmVlZHMgc29tZXRoaW5nIGRvbmUgKi8KIAlpZiAoZG9hbmFseXplIHx8 IGRvdmFjdXVtKQpAQCAtMjg1Nyw2ICsyODY2LDcgQEAgdGFibGVfcmVjaGVja19hdXRvdmFjKE9p ZCByZWxpZCwgSFRBQiAqdGFibGVfdG9hc3RfbWFwLAogCQl0YWItPmF0X3BhcmFtcy5tdWx0aXhh Y3RfZnJlZXplX21pbl9hZ2UgPSBtdWx0aXhhY3RfZnJlZXplX21pbl9hZ2U7CiAJCXRhYi0+YXRf cGFyYW1zLm11bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlID0gbXVsdGl4YWN0X2ZyZWV6ZV90YWJs ZV9hZ2U7CiAJCXRhYi0+YXRfcGFyYW1zLmlzX3dyYXBhcm91bmQgPSB3cmFwYXJvdW5kOworCQl0 YWItPmF0X3BhcmFtcy5pc19hZ2VfYmFzZWQgPSBhZ2VfYmFzZWQ7CiAJCXRhYi0+YXRfcGFyYW1z LmxvZ19taW5fZHVyYXRpb24gPSBsb2dfbWluX2R1cmF0aW9uOwogCQl0YWItPmF0X3BhcmFtcy50 b2FzdF9wYXJlbnQgPSBJbnZhbGlkT2lkOwogCkBAIC0yOTAzLDcgKzI5MTMsOCBAQCByZWNoZWNr X3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLAogCQkJCQkJCQkgIGludCBlZmZl Y3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLAogCQkJCQkJCQkgIGJvb2wgKmRvdmFjdXVt LAogCQkJCQkJCQkgIGJvb2wgKmRvYW5hbHl6ZSwKLQkJCQkJCQkJICBib29sICp3cmFwYXJvdW5k KQorCQkJCQkJCQkgIGJvb2wgKndyYXBhcm91bmQsCisJCQkJCQkJCSAgYm9vbCAqaXNfYWdlX2Jh c2VkKQogewogCVBnU3RhdF9TdGF0VGFiRW50cnkgKnRhYmVudHJ5OwogCkBAIC0yOTEzLDcgKzI5 MjQsOCBAQCByZWNoZWNrX3JlbGF0aW9uX25lZWRzX3ZhY2FuYWx5emUoT2lkIHJlbGlkLAogCiAJ cmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6ZShyZWxpZCwgYXZvcHRzLCBjbGFzc0Zvcm0sIHRhYmVu dHJ5LAogCQkJCQkJCSAgZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwKLQkJCQkJ CQkgIGRvdmFjdXVtLCBkb2FuYWx5emUsIHdyYXBhcm91bmQpOworCQkJCQkJCSAgZG92YWN1dW0s IGRvYW5hbHl6ZSwgd3JhcGFyb3VuZCwKKwkJCQkJCQkgIGlzX2FnZV9iYXNlZCk7CiAKIAkvKiBS ZWxlYXNlIHRhYmVudHJ5IHRvIGF2b2lkIGxlYWthZ2UgKi8KIAlpZiAodGFiZW50cnkpCkBAIC0y OTcyLDkgKzI5ODQsMTEgQEAgcmVsYXRpb25fbmVlZHNfdmFjYW5hbHl6ZShPaWQgcmVsaWQsCiAg Lyogb3V0cHV0IHBhcmFtcyBiZWxvdyAqLwogCQkJCQkJICBib29sICpkb3ZhY3V1bSwKIAkJCQkJ CSAgYm9vbCAqZG9hbmFseXplLAotCQkJCQkJICBib29sICp3cmFwYXJvdW5kKQorCQkJCQkJICBi b29sICp3cmFwYXJvdW5kLAorCQkJCQkJICBib29sICppc19hZ2VfYmFzZWQpCiB7CiAJYm9vbAkJ Zm9yY2VfdmFjdXVtOworCWJvb2wJCWZvcmNlX3ZhY3V1bV9hZ2UgPSBmYWxzZTsKIAlib29sCQlh dl9lbmFibGVkOwogCiAJLyogY29uc3RhbnRzIGZyb20gcmVsb3B0aW9ucyBvciBHVUMgdmFyaWFi bGVzICovCkBAIC0yOTg0LDcgKzI5OTgsOSBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9p ZCByZWxpZCwKIAkJCQlhbmxfYmFzZV90aHJlc2g7CiAJZmxvYXQ0CQl2YWNfc2NhbGVfZmFjdG9y LAogCQkJCXZhY19pbnNfc2NhbGVfZmFjdG9yLAotCQkJCWFubF9zY2FsZV9mYWN0b3I7CisJCQkJ YW5sX3NjYWxlX2ZhY3RvciwKKwkJCQlhZ2Vfc2NhbGVfZmFjdG9yOworCiAKIAkvKiB0aHJlc2hv bGRzIGNhbGN1bGF0ZWQgZnJvbSBhYm92ZSBjb25zdGFudHMgKi8KIAlmbG9hdDQJCXZhY3RocmVz aCwKQEAgLTMwMTcsNiArMzAzMywxMCBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCBy ZWxpZCwKIAkJPyByZWxvcHRzLT52YWN1dW1fc2NhbGVfZmFjdG9yCiAJCTogYXV0b3ZhY3V1bV92 YWNfc2NhbGU7CiAKKwlhZ2Vfc2NhbGVfZmFjdG9yID0gKHJlbG9wdHMgJiYgcmVsb3B0cy0+YXV0 b3ZhY3V1bV9hZ2Vfc2NhbGVfZmFjdG9yID49IDApCisJCT8gcmVsb3B0cy0+YXV0b3ZhY3V1bV9h Z2Vfc2NhbGVfZmFjdG9yCisJCTogYXV0b3ZhY3V1bV9hZ2Vfc2NhbGU7CisKIAl2YWNfYmFzZV90 aHJlc2ggPSAocmVsb3B0cyAmJiByZWxvcHRzLT52YWN1dW1fdGhyZXNob2xkID49IDApCiAJCT8g cmVsb3B0cy0+dmFjdXVtX3RocmVzaG9sZAogCQk6IGF1dG92YWN1dW1fdmFjX3RocmVzaDsKQEAg LTMwNjksOCArMzA4OSwzNSBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxpZCwK IAkJCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRpWGFjdElkOwogCQlmb3JjZV92YWN1dW0g PSBNdWx0aVhhY3RJZElzVmFsaWQocmVsbWlubXhpZCkgJiYKIAkJCU11bHRpWGFjdElkUHJlY2Vk ZXMocmVsbWlubXhpZCwgbXVsdGlGb3JjZUxpbWl0KTsKKworCQkvKgorCQkgKiArCSAqIFByb2Fj dGl2ZWx5IHZhY3V1bSBpZiB0aGUgdGFibGUncyBYSUQgYWdlIGV4Y2VlZHMgKwkgKgorCQkgKiBh Z2Vfc2NhbGVfZmFjdG9yICogZnJlZXplX21heF9hZ2UuICBUaGlzIHRyaWdnZXJzIHZhY3V1bSBi ZWZvcmUgdGhlCisJCSAqICsJICogaGFyZCB3cmFwYXJvdW5kIGFudGktZnJlZXplIGxpbWl0IGlz IHJlYWNoZWQuICsKKwkJICovCisJCWlmICghZm9yY2VfdmFjdXVtICYmIGFnZV9zY2FsZV9mYWN0 b3IgPiAwICYmCisJCQlUcmFuc2FjdGlvbklkSXNOb3JtYWwocmVsZnJvemVueGlkKSkKKwkJewor CQkJaW50CQkJYWdlX3RocmVzaCA9IChpbnQpIChhZ2Vfc2NhbGVfZmFjdG9yICogZnJlZXplX21h eF9hZ2UpOworCQkJVHJhbnNhY3Rpb25JZCBhZ2VGb3JjZUxpbWl0ID0gcmVjZW50WGlkIC0gYWdl X3RocmVzaDsKKwkJCWludAkJCXhpZF9hZ2U7CisKKwkJCWlmIChhZ2VGb3JjZUxpbWl0IDwgRmly c3ROb3JtYWxUcmFuc2FjdGlvbklkKQorCQkJCWFnZUZvcmNlTGltaXQgLT0gRmlyc3ROb3JtYWxU cmFuc2FjdGlvbklkOworCQkJZm9yY2VfdmFjdXVtX2FnZSA9IFRyYW5zYWN0aW9uSWRQcmVjZWRl cyhyZWxmcm96ZW54aWQsIGFnZUZvcmNlTGltaXQpOworCQkJaWYgKGZvcmNlX3ZhY3V1bV9hZ2Up CisJCQkJZm9yY2VfdmFjdXVtID0gdHJ1ZTsKKworCQkJeGlkX2FnZSA9IChpbnQzMikgKHJlY2Vu dFhpZCAtIHJlbGZyb3plbnhpZCk7CisJCQllbG9nKERFQlVHMywgIiVzOiBhZ2UtYmFzZWQgY2hl Y2s6IHhpZCBhZ2UgJWQsIHRocmVzaG9sZCAlZCAoJS4xZiUlIG9mIGZyZWV6ZV9tYXhfYWdlICVk KSVzIiwKKwkJCQkgTmFtZVN0cihjbGFzc0Zvcm0tPnJlbG5hbWUpLAorCQkJCSB4aWRfYWdlLCBh Z2VfdGhyZXNoLAorCQkJCSAoZG91YmxlKSBhZ2Vfc2NhbGVfZmFjdG9yICogMTAwLjAsIGZyZWV6 ZV9tYXhfYWdlLAorCQkJCSBmb3JjZV92YWN1dW1fYWdlID8gIiAtLSB0cmlnZ2VyaW5nIHByb2Fj dGl2ZSB2YWN1dW0iIDogIiIpOworCQl9CiAJfQogCSp3cmFwYXJvdW5kID0gZm9yY2VfdmFjdXVt OworCSppc19hZ2VfYmFzZWQgPSBmb3JjZV92YWN1dW1fYWdlOwogCiAJLyogVXNlciBkaXNhYmxl ZCBpdCBpbiBwZ19jbGFzcy5yZWxvcHRpb25zPyAgKEJ1dCBpZ25vcmUgaWYgYXQgcmlzaykgKi8K IAlpZiAoIWF2X2VuYWJsZWQgJiYgIWZvcmNlX3ZhY3V1bSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgKaW5k ZXggYmMzN2E4MGRjNzQuLjk1ZDRhZGFiY2M2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaApAQCAtMjI0 LDYgKzIyNCw3IEBAIHR5cGVkZWYgc3RydWN0IFZhY3V1bVBhcmFtcwogCWludAkJCW11bHRpeGFj dF9mcmVlemVfdGFibGVfYWdlOyAvKiBtdWx0aXhhY3QgYWdlIGF0IHdoaWNoIHRvIHNjYW4KIAkJ CQkJCQkJCQkJICogd2hvbGUgdGFibGUgKi8KIAlib29sCQlpc193cmFwYXJvdW5kOwkvKiBmb3Jj ZSBhIGZvci13cmFwYXJvdW5kIHZhY3V1bSAqLworCWJvb2wJCWlzX2FnZV9iYXNlZDsKIAlpbnQJ CQlsb2dfbWluX2R1cmF0aW9uOwkvKiBtaW5pbXVtIGV4ZWN1dGlvbiB0aHJlc2hvbGQgaW4gbXMg YXQKIAkJCQkJCQkJCSAqIHdoaWNoIGF1dG92YWN1dW0gaXMgbG9nZ2VkLCAtMSB0byB1c2UKIAkJ CQkJCQkJCSAqIGRlZmF1bHQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv YXV0b3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKaW5kZXgg ZTgxMzVmNDFhMWMuLmEyYzNhOWY0ZjgyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL2F1dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0u aApAQCAtNDMsNiArNDMsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IGF1dG92YWN1dW1fZnJl ZXplX21heF9hZ2U7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGF1dG92YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV9tYXhfYWdlOwogZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBhdXRvdmFjdXVtX3Zh Y19jb3N0X2RlbGF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBhdXRvdmFjdXVtX3ZhY19jb3N0 X2xpbWl0OworZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBhdXRvdmFjdXVtX2FnZV9zY2FsZTsK IAogLyogYXV0b3ZhY3V1bSBsYXVuY2hlciBQSUQsIG9ubHkgdmFsaWQgd2hlbiB3b3JrZXIgaXMg c2h1dHRpbmcgZG93biAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBBdXRvdmFjdXVtTGF1bmNo ZXJQaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL3JlbC5oCmluZGV4IGI1NTIzNTk5MTVmLi44ZDFlNWRmZDM3ZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAg LTMyNyw2ICszMjcsNyBAQCB0eXBlZGVmIHN0cnVjdCBBdXRvVmFjT3B0cwogCWZsb2F0OAkJdmFj dXVtX3NjYWxlX2ZhY3RvcjsKIAlmbG9hdDgJCXZhY3V1bV9pbnNfc2NhbGVfZmFjdG9yOwogCWZs b2F0OAkJYW5hbHl6ZV9zY2FsZV9mYWN0b3I7CisJZmxvYXQ4CQlhdXRvdmFjdXVtX2FnZV9zY2Fs ZV9mYWN0b3I7CiB9IEF1dG9WYWNPcHRzOwogCiAvKiBTdGRSZE9wdGlvbnMtPnZhY3V1bV9pbmRl eF9jbGVhbnVwIHZhbHVlcyAqLwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --b1=_ojWIIGH4FsBf6LzW4LwnlsjeqgpbjR1m6trQbGOZ1U--