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 1vsSSa-0024v2-0F for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Feb 2026 21:18:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsSSY-00CGIv-2E for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Feb 2026 21:18:18 +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 1vsSSY-00CGIn-14 for pgsql-hackers@lists.postgresql.org; Tue, 17 Feb 2026 21:18:18 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vsSSW-00000001G16-0JWg for pgsql-hackers@postgresql.org; Tue, 17 Feb 2026 21:18:18 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fFstk5Vxcz49PyF; Tue, 17 Feb 2026 23:18:06 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1771363089; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=de1wBpxK5JqIhDA+a/SwZ6PNqBx/IDt1FeAmitJ2fvo=; b=Co5ThM0ApJG8pbdGtyEMkc8peYsxfGR+yAp6muqAuAl+DG/I/ETE0Vbbi2Nwe/TPqr2Vmr f/iBbSBm6WE2j4hg1YIiJQGikF9LPZotOOstfF3p9HcHsHASQw3RM+dnctBYo08yZ2rNbk zb/cPgVjPg2aF8DnHdGxd9ZVbc7xiBJPcJNkkh1Lqq8eKCzGJXfBG4aNEx/ignAHbNb7Lq Ij45MWwci+vUjwOrzrjjOPtokC0YKKvSt1zQnzZcq/L1uCBnHjlEKOuijeVYiignjHPgXU 6FNfeNoS/qz8aI7TB/YVhyNzF9XqCOo8BxPArEEjSPE5h3on89OgG11z0Azcmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1771363089; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type; bh=de1wBpxK5JqIhDA+a/SwZ6PNqBx/IDt1FeAmitJ2fvo=; b=mrRfJKYk38BA1bdVB/50qO9yYtSNNhP581uSf4afePl3neoOifUg18ys0lfQekLf6uQW38 sF9k87hEnSPhd3YT1n6sB0GNPUl63MiLtR1F/Putl609etfuQtxR9URaWFenArC2xhcx16 EAT4etSpATOx6cDATHPQv9lG4vxi9YorCTcao4I9InZNu3MNcsNfVCFpvWI0pIny17LvXJ bOYKGa3VUbz6RHvZdfdWq4PGOZxCcWrUpim+rw8jE6kd7nd3OZbhBvi0PnQMo7FiTKYrwW CgZ6iTmQzQo/p+TmrgI2NzSNNiq5ZLhHPCgDs6jGLM7JoIIPn8NxL8vfnzwwYg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1771363089; b=ADuh0UdMiXoCeJbpQtBpaiktJnujPD47TWk3aorScT0dbW79ZiAmMCBHpc77a6aT1KcQtj RG/lRQ2Dr1+OqJ6uqywSvt8uvAEdV2hC8xM3LlT1Cuf6GShaaHhSOe8lYZkyz1e56dWuO/ HVstTgMDuZ7KgaGBZA0XQW/JhfWeh7hZB/CdylZPpKyxur+GSlttnigzANuqJdwEJ5KQ1J p1i7DEYUTlMrPEgsy50DaaeIcy7duUO8A+XPpEEWNK4oFbVLFXtBZ2S1fqX3hOepxgqea8 QgP+PC/+hw/vRDF4rY7gathI9v+4jw4PZkSu4sKva7J9VKTBQaGpIx/YLsz7VA== Content-Type: multipart/mixed; boundary="------------821Y1a610sPtsp0oz5x1P0gt" Message-ID: <5238fe45-e486-4c62-a7f3-c7d8d416e812@iki.fi> Date: Tue, 17 Feb 2026 23:18:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Heikki Linnakangas To: Andres Freund Cc: "pgsql-hackers@postgresql.org" Subject: Use standard die() handler for SIGTERM in bgworkers 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. --------------821Y1a610sPtsp0oz5x1P0gt Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Starting a separate thread for this change that was part of the giant "Interrupts vs signals" patch set [https://www.postgresql.org/message-id/818bafaf-1e77-4c78-8037-d7120878d87c%40iki.fi] On 14/02/2026 23:56, Andres Freund wrote: >> From 63d1a57f4906a924c426def4e1a7f27a71611b28 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Tue, 20 Jan 2026 16:57:25 +0200 >> Subject: [PATCH 3/5] Use standard die() handler for SIGTERM in bgworkers >> -/* >> - * Standard SIGTERM handler for background workers >> - */ >> -static void >> -bgworker_die(SIGNAL_ARGS) >> -{ >> - sigprocmask(SIG_SETMASK, &BlockSig, NULL); >> - >> - ereport(FATAL, >> - (errcode(ERRCODE_ADMIN_SHUTDOWN), >> - errmsg("terminating background worker \"%s\" due to administrator command", >> - MyBgworkerEntry->bgw_type))); >> -} >> - >> /* >> * Main entry point for background worker processes. >> */ > > Uh, huh. So we were defaulting to completely unsafe code in bgworkers all this > time? This obviously can self-deadlock against memory allocations etc in the > interrupted code... Or cause confusion with the IO streams for stderr. Or ... Yep. Here's this patch again, now with updated documentation. > We really need some instrumentation that fails if we do allocations in signal > handlers etc. Yeah, that would be nice.. - Heikki --------------821Y1a610sPtsp0oz5x1P0gt Content-Type: text/x-patch; charset=UTF-8; name="0001-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch" Content-Disposition: attachment; filename*0="0001-Use-standard-die-handler-for-SIGTERM-in-bgworkers.patch" Content-Transfer-Encoding: base64 RnJvbSAzOWYxZTk3Mjg5NWZiMzJmYTIwZTk2ZjRhZGM0MmEwMjY3Zjk1M2E4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTcgRmViIDIwMjYgMjM6MDQ6MjYgKzAyMDAK U3ViamVjdDogW1BBVENIIDEvMV0gVXNlIHN0YW5kYXJkIGRpZSgpIGhhbmRsZXIgZm9yIFNJ R1RFUk0gaW4gYmd3b3JrZXJzCgpUaGUgcHJldmlvdXMgZGVmYXVsdCBiZ3dvcmtlcl9kaWUo KSBzaWduYWwgd291bGQgZXhpdCB3aXRoIGVsb2coRkFUQUwpCmRpcmVjdGx5IGZyb20gdGhl IHNpZ25hbCBoYW5kbGVyLiBUaGF0IGNvdWxkIGNhdXNlIGRlYWRsb2NrcyBvcgpjcmFzaGVz IGlmIHRoZSBzaWduYWwgaGFuZGxlciBydW5zIHdoaWxlIHdlJ3JlIGUuZyBob2xkaW5nIGEg c3BpbmxvY2sKb3IgaW4gdGhlIG1pZGRsZSBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uLgoKQWxs IHRoZSBidWlsdC1pbiBiYWNrZ3JvdW5kIHdvcmtlcnMgb3ZlcnJvZGUgdGhhdCB0byB1c2Ug dGhlIG5vcm1hbApkaWUoKSBoYW5kbGVyIGFuZCBDSEVDS19GT1JfSU5URVJSVVBUUygpLiBM ZXQncyBtYWtlIHRoYXQgdGhlIGRlZmF1bHQKZm9yIGFsbCBiYWNrZ3JvdW5kIHdvcmtlcnMu IFNvbWUgZXh0ZW5zaW9ucyByZWx5aW5nIG9uIHRoZSBvbGQKYmVoYXZpb3IgbWlnaHQgbmVl ZCB0byBhZGFwdCwgYnV0IHRoZSBuZXcgZGVmYXVsdCBpcyBtdWNoIHNhZmVyIGFuZAp0aGUg cmlnaHQgdGhpbmcgdG8gZG8gZm9yIG1vc3QgYmFja2dyb3VuZCB3b3JrZXJzLgotLS0KIGRv Yy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsr KysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgICAgICAg ICAgICB8ICAxIC0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyAgICAgICAg ICAgICAgICB8IDE2ICstLS0tLS0tLS0tLS0tLS0KIC4uLi9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYyAgICB8ICAxIC0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAgICAgICB8ICAxIC0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICAgICB8ICAxIC0KIDYgZmlsZXMgY2hhbmdl ZCwgMTEgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2Jnd29ya2VyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvYmd3b3JrZXIuc2dtbApp bmRleCA0Njk5ZWY2MzQ1Zi4uMmFmZmJhNzQzODIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9iZ3dvcmtlci5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9iZ3dvcmtlci5zZ21sCkBAIC0y MzIsNiArMjMyLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQmFja2dyb3VuZFdvcmtlcgogICA8L3Bh cmE+CiAKICAgPHBhcmE+CisgICBBIHdlbGwtYmVoYXZlZCBiYWNrZ3JvdW5kIHdvcmtlciBt dXN0IHJlYWN0IHByb21wdGx5IHRvIHN0YW5kYXJkIHNpZ25hbHMKKyAgIHRoYXQgdGhlIHBv c3RtYXN0ZXIgdXNlcyB0byBjb250cm9sIGl0cyBjaGlsZCBwcm9jZXNzZXMuCiAgICBTaWdu YWxzIGFyZSBpbml0aWFsbHkgYmxvY2tlZCB3aGVuIGNvbnRyb2wgcmVhY2hlcyB0aGUKICAg IGJhY2tncm91bmQgd29ya2VyJ3MgbWFpbiBmdW5jdGlvbiwgYW5kIG11c3QgYmUgdW5ibG9j a2VkIGJ5IGl0OyB0aGlzIGlzIHRvCiAgICBhbGxvdyB0aGUgcHJvY2VzcyB0byBjdXN0b21p emUgaXRzIHNpZ25hbCBoYW5kbGVycywgaWYgbmVjZXNzYXJ5LgpAQCAtMjQwLDYgKzI0Miwx NCBAQCB0eXBlZGVmIHN0cnVjdCBCYWNrZ3JvdW5kV29ya2VyCiAgICA8ZnVuY3Rpb24+QmFj a2dyb3VuZFdvcmtlckJsb2NrU2lnbmFsczwvZnVuY3Rpb24+LgogICA8L3BhcmE+CiAKKyAg PHBhcmE+CisgICBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlcnMgbWVyZWx5IHNldCBpbnRl cnJ1cHQgZmxhZ3MKKyAgIHRoYXQgYXJlIHByb2Nlc3NlZCBsYXRlciBieSA8ZnVuY3Rpb24+ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTwvZnVuY3Rpb24+LgorICAgPGZ1bmN0aW9uPkNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk8L2Z1bmN0aW9uPiBzaG91bGQgYmUgY2FsbGVkIGluIGFueQor ICAgbG9uZy1ydW5uaW5nIGxvb3AgdG8gZW5zdXJlIHRoYXQgdGhlIGJhY2tncm91bmQgd29y a2VyIGRvZXNuJ3QgcHJldmVudCB0aGUKKyAgIHN5c3RlbSBmcm9tIHNodXR0aW5nIGRvd24g aW4gYSB0aW1lbHkgZmFzaGlvbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgSWYgPHN0 cnVjdGZpZWxkPmJnd19yZXN0YXJ0X3RpbWU8L3N0cnVjdGZpZWxkPiBmb3IgYSBiYWNrZ3Jv dW5kIHdvcmtlciBpcwogICAgY29uZmlndXJlZCBhcyA8bGl0ZXJhbD5CR1dfTkVWRVJfUkVT VEFSVDwvbGl0ZXJhbD4sIG9yIGlmIGl0IGV4aXRzIHdpdGggYW4gZXhpdApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKaW5kZXggZmUwMDQ4ODQ4N2QuLjQ0Nzg2ZGMx MzFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKQEAgLTEzMjcs NyArMTMyNyw2IEBAIFBhcmFsbGVsV29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlJbml0 aWFsaXppbmdQYXJhbGxlbFdvcmtlciA9IHRydWU7CiAKIAkvKiBFc3RhYmxpc2ggc2lnbmFs IGhhbmRsZXJzLiAqLwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CiAJQmFja2dyb3VuZFdv cmtlclVuYmxvY2tTaWduYWxzKCk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHNldCBvdXIgcGFy YWxsZWwgd29ya2VyIG51bWJlci4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpp bmRleCAyNjFjY2QzZjU5Yy4uODY3OGVhNGUxMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d29ya2VyLmMKQEAgLTcxOCwyMCArNzE4LDYgQEAgU2FuaXR5Q2hlY2tCYWNrZ3JvdW5kV29y a2VyKEJhY2tncm91bmRXb3JrZXIgKndvcmtlciwgaW50IGVsZXZlbCkKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAotLyoKLSAqIFN0YW5kYXJkIFNJR1RFUk0gaGFuZGxlciBmb3IgYmFja2dyb3Vu ZCB3b3JrZXJzCi0gKi8KLXN0YXRpYyB2b2lkCi1iZ3dvcmtlcl9kaWUoU0lHTkFMX0FSR1Mp Ci17Ci0Jc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9ja1NpZywgTlVMTCk7Ci0KLQll cmVwb3J0KEZBVEFMLAotCQkJKGVycmNvZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiksCi0J CQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBiYWNrZ3JvdW5kIHdvcmtlciBcIiVzXCIgZHVlIHRv IGFkbWluaXN0cmF0b3IgY29tbWFuZCIsCi0JCQkJCU15Qmd3b3JrZXJFbnRyeS0+Ymd3X3R5 cGUpKSk7Ci19Ci0KIC8qCiAgKiBNYWluIGVudHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdv cmtlciBwcm9jZXNzZXMuCiAgKi8KQEAgLTc4Nyw3ICs3NzMsNyBAQCBCYWNrZ3JvdW5kV29y a2VyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKQogCQlwcXNpZ25hbChTSUdVU1IxLCBTSUdfSUdOKTsKIAkJcHFzaWduYWwoU0lHRlBF LCBTSUdfSUdOKTsKIAl9Ci0JcHFzaWduYWwoU0lHVEVSTSwgYmd3b3JrZXJfZGllKTsKKwlw cXNpZ25hbChTSUdURVJNLCBkaWUpOwogCS8qIFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFk eSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwogCXBxc2lnbmFsKFNJR0hVUCwg U0lHX0lHTik7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9hcHBseXBhcmFsbGVsd29ya2VyLmMKaW5kZXggOGEwMWYxNmEyY2EuLjE3MzBhY2U1 NDkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2FwcGx5 cGFyYWxsZWx3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L2FwcGx5cGFyYWxsZWx3b3JrZXIuYwpAQCAtODc5LDcgKzg3OSw2IEBAIFBhcmFsbGVsQXBw bHlXb3JrZXJNYWluKERhdHVtIG1haW5fYXJnKQogCSAqIHJlY2VpdmluZyBTSUdURVJNLgog CSAqLwogCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNvbmZpZ1JlbG9hZCk7 Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKIAlwcXNpZ25hbChTSUdVU1IyLCBTaWduYWxI YW5kbGVyRm9yU2h1dGRvd25SZXF1ZXN0KTsKIAlCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1Np Z25hbHMoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hl ci5jCmluZGV4IDNlZDg2NDgwYmUyLi5lNjExMmUxMWVjMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtMTIxMyw3ICsxMjEzLDYgQEAg QXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAKIAkvKiBFc3RhYmxpc2ggc2ln bmFsIGhhbmRsZXJzLiAqLwogCXBxc2lnbmFsKFNJR0hVUCwgU2lnbmFsSGFuZGxlckZvckNv bmZpZ1JlbG9hZCk7Ci0JcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKIAlCYWNrZ3JvdW5kV29y a2VyVW5ibG9ja1NpZ25hbHMoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC93b3JrZXIuYwppbmRleCAzMjcyNWM0ODYyMy4uNzVhZjNhNzFjYTggMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtNTg5MCw3ICs1 ODkwLDYgQEAgU2V0dXBBcHBseU9yU3luY1dvcmtlcihpbnQgd29ya2VyX3Nsb3QpCiAKIAkv KiBTZXR1cCBzaWduYWwgaGFuZGxpbmcgKi8KIAlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhh bmRsZXJGb3JDb25maWdSZWxvYWQpOwotCXBxc2lnbmFsKFNJR1RFUk0sIGRpZSk7CiAJQmFj a2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CiAKIAkvKgotLSAKMi40Ny4zCgo= --------------821Y1a610sPtsp0oz5x1P0gt--