Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pSwNG-0001PK-09 for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Feb 2023 08:45:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pSwNE-0007qk-Tg for pgsql-hackers@arkaria.postgresql.org; Fri, 17 Feb 2023 08:45:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pSwLt-0003Bs-9p for pgsql-hackers@lists.postgresql.org; Fri, 17 Feb 2023 08:44:21 +0000 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pSwLq-0000Sm-HZ for pgsql-hackers@lists.postgresql.org; Fri, 17 Feb 2023 08:44:20 +0000 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-170c8a8e206so570915fac.10 for ; Fri, 17 Feb 2023 00:44:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=njIRIpybPagFFNFwStdFULWG3OTE2DMWpMyTcmD38VM=; b=SK0XptIKxIuws4u3rEiKE4v9YCBaXf6zD38sVbmuK1pek33xYQlIiKKqWx1M+KLCU2 P17OkTZt/mQBt8sMLNL4kZchGbFSN+Wx0OA2KzNGy12vRBnk1c0ajlI8ohn5H/sTUQlE Jbd1LvzeYHZuip5D1rQV9W/pQ0iaidKUmtU87ZtY4tdVfIXoZhZOgPhXE2IES578ptFk y0OvdEDEheiZLaIKqoan16l9nDc+4hmgwWvDRXqRgqvEqk/wwUHSpklTbZBiWP/sG5ap MJmzDmtXFZvXdHKR3Au9vj3BIi+fshI2/NwEjKvLsj09LDdGHOuBt5s+k9n67g/fouNA wd+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=njIRIpybPagFFNFwStdFULWG3OTE2DMWpMyTcmD38VM=; b=CTfMY85eMm4tloyiCFNtaZ+Zv71YUIVd4jo9YiRG4LK3uKs6e2Gnyu2DZRJyreU32T fAM0m59QF/Roby1L3KtQKhfOInjc2TjI2RHZ803gvVjDuPFeCxUaBPMwHAdrFJnWcV5q jFuoGJVZjVlvVHzn8EOV5q63DZm0yk+dWvh2+2yDyltoY2v5BjNtEYU8GjORYkFTXAcc MitAAQpbpoWcChVwCgi5nLzHhwKG4vU9oT3WgrErzRfUuWFdcixnJ1YrMD2vmKd+IxoF aJnE1J/K7K5pzanU7f+Pq0SIR8PribtxlT4Vz8QqzC/KGicMkLnSPKdlZpg/gebf2JNT shiQ== X-Gm-Message-State: AO0yUKXils5ieeCEhGpwh0JZtWreodnQgQmaWR+deaC1Zo9m37FP/L8L GL10hdL+BpuLBRNBr6gA/jVaHdwQjkrQ55OwDSDg1g4tNzw= X-Google-Smtp-Source: AK7set9fH2kQ4K4N8Huad5CNJz4KL1iAx82bW1YEOPqWLQTrlWbD8Tz+sKSV/OCBvJDwqyPnvePfR1rC24ZaDYNRSfM= X-Received: by 2002:a05:6871:829:b0:16e:8db9:141a with SMTP id q41-20020a056871082900b0016e8db9141amr198207oap.259.1676623457885; Fri, 17 Feb 2023 00:44:17 -0800 (PST) MIME-Version: 1.0 References: <20230217010155.7gzsligvn5dgosu5@awork3.anarazel.de> In-Reply-To: <20230217010155.7gzsligvn5dgosu5@awork3.anarazel.de> From: David Rowley Date: Fri, 17 Feb 2023 21:44:06 +1300 Message-ID: Subject: Re: Make set_ps_display faster and easier to use To: Andres Freund Cc: PostgreSQL Developers Content-Type: multipart/mixed; boundary="000000000000a137a905f4e151e4" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a137a905f4e151e4 Content-Type: text/plain; charset="UTF-8" Thank you for having a look at this. On Fri, 17 Feb 2023 at 14:01, Andres Freund wrote: > > +set_ps_display_suffix(const char *suffix) > > +{ > > + size_t len; > > Think this will give you an unused-variable warning in the PS_USE_NONE case. Fixed > > +#ifndef PS_USE_NONE > > + /* update_process_title=off disables updates */ > > + if (!update_process_title) > > + return; > > + > > + /* no ps display for stand-alone backend */ > > + if (!IsUnderPostmaster) > > + return; > > + > > +#ifdef PS_USE_CLOBBER_ARGV > > + /* If ps_buffer is a pointer, it might still be null */ > > + if (!ps_buffer) > > + return; > > +#endif > > This bit is now repeated three times. How about putting it into a helper? Good idea. Done. > > +set_ps_display_internal(void) > > Very very minor nit: Perhaps this should be update_ps_display() or > flush_ps_display() instead? I called the precheck helper update_ps_display_precheck(), so went with flush_ps_display() for updating the display so they both didn't start with "update". Updated patch attached. David --000000000000a137a905f4e151e4 Content-Type: text/plain; charset="US-ASCII"; name="optimize_and_make_set_ps_display_better_v2.patch" Content-Disposition: attachment; filename="optimize_and_make_set_ps_display_better_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_le8a9s0b0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAuYyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3N5bmNyZXAuYwppbmRleCA4MGQ2ODFiNzFjLi44ODllMjBiNWRkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zeW5jcmVwLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vc3luY3JlcC5jCkBAIC0xNDgsOCArMTQ4LDYgQEAgc3RhdGljIGJv b2wgU3luY1JlcFF1ZXVlSXNPcmRlcmVkQnlMU04oaW50IG1vZGUpOwogdm9pZAogU3luY1JlcFdh aXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJvb2wgY29tbWl0KQogewotCWNoYXIJICAgKm5ld19z dGF0dXMgPSBOVUxMOwotCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7CiAJaW50CQkJbW9kZTsKIAog CS8qCkBAIC0yMTYsMTUgKzIxNCwxMCBAQCBTeW5jUmVwV2FpdEZvckxTTihYTG9nUmVjUHRyIGxz biwgYm9vbCBjb21taXQpCiAJLyogQWx0ZXIgcHMgZGlzcGxheSB0byBzaG93IHdhaXRpbmcgZm9y IHN5bmMgcmVwLiAqLwogCWlmICh1cGRhdGVfcHJvY2Vzc190aXRsZSkKIAl7Ci0JCWludAkJCWxl bjsKLQotCQlvbGRfc3RhdHVzID0gZ2V0X3BzX2Rpc3BsYXkoJmxlbik7Ci0JCW5ld19zdGF0dXMg PSAoY2hhciAqKSBwYWxsb2MobGVuICsgMzIgKyAxKTsKLQkJbWVtY3B5KG5ld19zdGF0dXMsIG9s ZF9zdGF0dXMsIGxlbik7Ci0JCXNwcmludGYobmV3X3N0YXR1cyArIGxlbiwgIiB3YWl0aW5nIGZv ciAlWC8lWCIsCi0JCQkJTFNOX0ZPUk1BVF9BUkdTKGxzbikpOwotCQlzZXRfcHNfZGlzcGxheShu ZXdfc3RhdHVzKTsKLQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIg d2FpdGluZyAuLi4iICovCisJCWNoYXIJCWJ1ZmZlclszMl07CisKKwkJc3ByaW50ZihidWZmZXIs ICJ3YWl0aW5nIGZvciAlWC8lWCIsIExTTl9GT1JNQVRfQVJHUyhsc24pKTsKKwkJc2V0X3BzX2Rp c3BsYXlfc3VmZml4KGJ1ZmZlcik7CiAJfQogCiAJLyoKQEAgLTMyMiwxMiArMzE1LDkgQEAgU3lu Y1JlcFdhaXRGb3JMU04oWExvZ1JlY1B0ciBsc24sIGJvb2wgY29tbWl0KQogCU15UHJvYy0+c3lu Y1JlcFN0YXRlID0gU1lOQ19SRVBfTk9UX1dBSVRJTkc7CiAJTXlQcm9jLT53YWl0TFNOID0gMDsK IAotCWlmIChuZXdfc3RhdHVzKQotCXsKLQkJLyogUmVzZXQgcHMgZGlzcGxheSAqLwotCQlzZXRf cHNfZGlzcGxheShuZXdfc3RhdHVzKTsKLQkJcGZyZWUobmV3X3N0YXR1cyk7Ci0JfQorCS8qIHJl c2V0IHBzIGRpc3BsYXkgdG8gcmVtb3ZlIHRoZSBzdWZmaXggKi8KKwlpZiAodXBkYXRlX3Byb2Nl c3NfdGl0bGUpCisJCXNldF9wc19kaXNwbGF5X3JlbW92ZV9zdWZmaXgoKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggMmQ2ZGJjNjU2MS4uOTg5MDRhN2MwNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTQzMDIsOCArNDMwMiw4IEBAIHZv aWQKIExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCWNoYXIJICAgKm5ld19zdGF0dXMgPSBOVUxMOwogCVRpbWVzdGFtcFR6IHdhaXRT dGFydCA9IDA7CisJYm9vbAkJd2FpdGluZyA9IGZhbHNlOwogCWJvb2wJCWxvZ2dlZF9yZWNvdmVy eV9jb25mbGljdCA9IGZhbHNlOwogCiAJQXNzZXJ0KEJ1ZmZlcklzUGlubmVkKGJ1ZmZlcikpOwpA QCAtNDM1MCwxMSArNDM1MCwxMSBAQCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVy KQogCQkJCQkJCQkJd2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCiAJCQkJCQkJCQlO VUxMLCBmYWxzZSk7CiAKLQkJCS8qIFJlcG9ydCBjaGFuZ2UgdG8gbm9uLXdhaXRpbmcgc3RhdHVz ICovCi0JCQlpZiAobmV3X3N0YXR1cykKKwkJCWlmICh3YWl0aW5nKQogCQkJewotCQkJCXNldF9w c19kaXNwbGF5KG5ld19zdGF0dXMpOwotCQkJCXBmcmVlKG5ld19zdGF0dXMpOworCQkJCS8qIHJl c2V0IHBzIGRpc3BsYXkgdG8gcmVtb3ZlIHRoZSBzdWZmaXggaWYgd2UgYWRkZWQgb25lICovCisJ CQkJc2V0X3BzX2Rpc3BsYXlfcmVtb3ZlX3N1ZmZpeCgpOworCQkJCXdhaXRpbmcgPSBmYWxzZTsK IAkJCX0KIAkJCXJldHVybjsKIAkJfQpAQCAtNDM3NCwxOCArNDM3NCwxMSBAQCBMb2NrQnVmZmVy Rm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogCQkvKiBXYWl0IHRvIGJlIHNpZ25hbGVkIGJ5IFVu cGluQnVmZmVyKCkgKi8KIAkJaWYgKEluSG90U3RhbmRieSkKIAkJewotCQkJLyogUmVwb3J0IGNo YW5nZSB0byB3YWl0aW5nIHN0YXR1cyAqLwotCQkJaWYgKHVwZGF0ZV9wcm9jZXNzX3RpdGxlICYm IG5ld19zdGF0dXMgPT0gTlVMTCkKKwkJCWlmICghd2FpdGluZykKIAkJCXsKLQkJCQljb25zdCBj aGFyICpvbGRfc3RhdHVzOwotCQkJCWludAkJCWxlbjsKLQotCQkJCW9sZF9zdGF0dXMgPSBnZXRf cHNfZGlzcGxheSgmbGVuKTsKLQkJCQluZXdfc3RhdHVzID0gKGNoYXIgKikgcGFsbG9jKGxlbiAr IDggKyAxKTsKLQkJCQltZW1jcHkobmV3X3N0YXR1cywgb2xkX3N0YXR1cywgbGVuKTsKLQkJCQlz dHJjcHkobmV3X3N0YXR1cyArIGxlbiwgIiB3YWl0aW5nIik7Ci0JCQkJc2V0X3BzX2Rpc3BsYXko bmV3X3N0YXR1cyk7Ci0JCQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2Zm ICIgd2FpdGluZyIgKi8KKwkJCQkvKiBhZGp1c3QgdGhlIHByb2Nlc3MgdGl0bGUgdG8gaW5kaWNh dGUgdGhhdCBpdCdzIHdhaXRpbmcgKi8KKwkJCQlzZXRfcHNfZGlzcGxheV9zdWZmaXgoIndhaXRp bmciKTsKKwkJCQl3YWl0aW5nID0gdHJ1ZTsKIAkJCX0KIAogCQkJLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYwppbmRleCA5NGNjODYwZjVmLi45YTczYWU2N2QwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc3RhbmRieS5jCkBAIC0zNjIsNyArMzYyLDcgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoVmlydHVhbFhJRHMoVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRsaXN0LAogCQkJCQkJCQkJ ICAgYm9vbCByZXBvcnRfd2FpdGluZykKIHsKIAlUaW1lc3RhbXBUeiB3YWl0U3RhcnQgPSAwOwot CWNoYXIJICAgKm5ld19zdGF0dXMgPSBOVUxMOworCWJvb2wJCXdhaXRpbmcgPSBmYWxzZTsKIAli b29sCQlsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QgPSBmYWxzZTsKIAogCS8qIEZhc3QgZXhpdCwg dG8gYXZvaWQgYSBrZXJuZWwgY2FsbCBpZiB0aGVyZSdzIG5vIHdvcmsgdG8gYmUgZG9uZS4gKi8K QEAgLTQwMCwxNCArNDAwLDE0IEBAIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxY SURzKFZpcnR1YWxUcmFuc2FjdGlvbklkICp3YWl0bGlzdCwKIAkJCQkJcGdfdXNsZWVwKDUwMDBM KTsKIAkJCX0KIAotCQkJaWYgKHdhaXRTdGFydCAhPSAwICYmICghbG9nZ2VkX3JlY292ZXJ5X2Nv bmZsaWN0IHx8IG5ld19zdGF0dXMgPT0gTlVMTCkpCisJCQlpZiAod2FpdFN0YXJ0ICE9IDAgJiYg KCFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QgfHwgIXdhaXRpbmcpKQogCQkJewogCQkJCVRpbWVz dGFtcFR6IG5vdyA9IDA7CiAJCQkJYm9vbAkJbWF5YmVfbG9nX2NvbmZsaWN0OwogCQkJCWJvb2wJ CW1heWJlX3VwZGF0ZV90aXRsZTsKIAogCQkJCW1heWJlX2xvZ19jb25mbGljdCA9IChsb2dfcmVj b3ZlcnlfY29uZmxpY3Rfd2FpdHMgJiYgIWxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCk7Ci0JCQkJ bWF5YmVfdXBkYXRlX3RpdGxlID0gKHVwZGF0ZV9wcm9jZXNzX3RpdGxlICYmIG5ld19zdGF0dXMg PT0gTlVMTCk7CisJCQkJbWF5YmVfdXBkYXRlX3RpdGxlID0gKHVwZGF0ZV9wcm9jZXNzX3RpdGxl ICYmICF3YWl0aW5nKTsKIAogCQkJCS8qIEdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaWYgbm90 IHJlcG9ydCB5ZXQgKi8KIAkJCQlpZiAobWF5YmVfbG9nX2NvbmZsaWN0IHx8IG1heWJlX3VwZGF0 ZV90aXRsZSkKQEAgLTQyMCwxNSArNDIwLDggQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRo VmlydHVhbFhJRHMoVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRsaXN0LAogCQkJCWlmIChtYXli ZV91cGRhdGVfdGl0bGUgJiYKIAkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0 YXJ0LCBub3csIDUwMCkpCiAJCQkJewotCQkJCQljb25zdCBjaGFyICpvbGRfc3RhdHVzOwotCQkJ CQlpbnQJCQlsZW47Ci0KLQkJCQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNwbGF5KCZsZW4pOwot CQkJCQluZXdfc3RhdHVzID0gKGNoYXIgKikgcGFsbG9jKGxlbiArIDggKyAxKTsKLQkJCQkJbWVt Y3B5KG5ld19zdGF0dXMsIG9sZF9zdGF0dXMsIGxlbik7Ci0JCQkJCXN0cmNweShuZXdfc3RhdHVz ICsgbGVuLCAiIHdhaXRpbmciKTsKLQkJCQkJc2V0X3BzX2Rpc3BsYXkobmV3X3N0YXR1cyk7Ci0J CQkJCW5ld19zdGF0dXNbbGVuXSA9ICdcMCc7IC8qIHRydW5jYXRlIG9mZiAiIHdhaXRpbmciICov CisJCQkJCXNldF9wc19kaXNwbGF5X3N1ZmZpeCgid2FpdGluZyIpOworCQkJCQl3YWl0aW5nID0g dHJ1ZTsKIAkJCQl9CiAKIAkJCQkvKgpAQCAtNDU2LDEyICs0NDksMTAgQEAgUmVzb2x2ZVJlY292 ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRHMoVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRsaXN0 LAogCQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJlYXNvbiwgd2FpdFN0YXJ0LCBHZXRDdXJyZW50VGlt ZXN0YW1wKCksCiAJCQkJCQkJTlVMTCwgZmFsc2UpOwogCi0JLyogUmVzZXQgcHMgZGlzcGxheSBp ZiB3ZSBjaGFuZ2VkIGl0ICovCi0JaWYgKG5ld19zdGF0dXMpCi0JewotCQlzZXRfcHNfZGlzcGxh eShuZXdfc3RhdHVzKTsKLQkJcGZyZWUobmV3X3N0YXR1cyk7Ci0JfQorCS8qIHJlc2V0IHBzIGRp c3BsYXkgdG8gcmVtb3ZlIHRoZSBzdWZmaXggaWYgd2UgYWRkZWQgb25lICovCisJaWYgKHdhaXRp bmcpCisJCXNldF9wc19kaXNwbGF5X3JlbW92ZV9zdWZmaXgoKTsKKwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sb2NrLmMKaW5kZXggYTg3MzcyZjMzZi4uYWYxYjAxNDZhOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvbG9jay5jCkBAIC0xODEwLDI0ICsxODEwLDEyIEBAIFdhaXRPbkxvY2soTE9DQUxMT0NL ICpsb2NhbGxvY2ssIFJlc291cmNlT3duZXIgb3duZXIpCiB7CiAJTE9DS01FVEhPRElEIGxvY2tt ZXRob2RpZCA9IExPQ0FMTE9DS19MT0NLTUVUSE9EKCpsb2NhbGxvY2spOwogCUxvY2tNZXRob2QJ bG9ja01ldGhvZFRhYmxlID0gTG9ja01ldGhvZHNbbG9ja21ldGhvZGlkXTsKLQljaGFyCSAgICp2 b2xhdGlsZSBuZXdfc3RhdHVzID0gTlVMTDsKIAogCUxPQ0tfUFJJTlQoIldhaXRPbkxvY2s6IHNs ZWVwaW5nIG9uIGxvY2siLAogCQkJICAgbG9jYWxsb2NrLT5sb2NrLCBsb2NhbGxvY2stPnRhZy5t b2RlKTsKIAotCS8qIFJlcG9ydCBjaGFuZ2UgdG8gd2FpdGluZyBzdGF0dXMgKi8KLQlpZiAodXBk YXRlX3Byb2Nlc3NfdGl0bGUpCi0JewotCQljb25zdCBjaGFyICpvbGRfc3RhdHVzOwotCQlpbnQJ CQlsZW47Ci0KLQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNwbGF5KCZsZW4pOwotCQluZXdfc3Rh dHVzID0gKGNoYXIgKikgcGFsbG9jKGxlbiArIDggKyAxKTsKLQkJbWVtY3B5KG5ld19zdGF0dXMs IG9sZF9zdGF0dXMsIGxlbik7Ci0JCXN0cmNweShuZXdfc3RhdHVzICsgbGVuLCAiIHdhaXRpbmci KTsKLQkJc2V0X3BzX2Rpc3BsYXkobmV3X3N0YXR1cyk7Ci0JCW5ld19zdGF0dXNbbGVuXSA9ICdc MCc7IC8qIHRydW5jYXRlIG9mZiAiIHdhaXRpbmciICovCi0JfQorCS8qIGFkanVzdCB0aGUgcHJv Y2VzcyB0aXRsZSB0byBpbmRpY2F0ZSB0aGF0IGl0J3Mgd2FpdGluZyAqLworCXNldF9wc19kaXNw bGF5X3N1ZmZpeCgid2FpdGluZyIpOwogCiAJYXdhaXRlZExvY2sgPSBsb2NhbGxvY2s7CiAJYXdh aXRlZE93bmVyID0gb3duZXI7CkBAIC0xODc0LDEyICsxODYyLDggQEAgV2FpdE9uTG9jayhMT0NB TExPQ0sgKmxvY2FsbG9jaywgUmVzb3VyY2VPd25lciBvd25lcikKIAl7CiAJCS8qIEluIHRoaXMg cGF0aCwgYXdhaXRlZExvY2sgcmVtYWlucyBzZXQgdW50aWwgTG9ja0Vycm9yQ2xlYW51cCAqLwog Ci0JCS8qIFJlcG9ydCBjaGFuZ2UgdG8gbm9uLXdhaXRpbmcgc3RhdHVzICovCi0JCWlmICh1cGRh dGVfcHJvY2Vzc190aXRsZSkKLQkJewotCQkJc2V0X3BzX2Rpc3BsYXkobmV3X3N0YXR1cyk7Ci0J CQlwZnJlZShuZXdfc3RhdHVzKTsKLQkJfQorCQkvKiByZXNldCBwcyBkaXNwbGF5IHRvIHJlbW92 ZSB0aGUgc3VmZml4IGlmIHdlIGFkZGVkIG9uZSAqLworCQlzZXRfcHNfZGlzcGxheV9yZW1vdmVf c3VmZml4KCk7CiAKIAkJLyogYW5kIHByb3BhZ2F0ZSB0aGUgZXJyb3IgKi8KIAkJUEdfUkVfVEhS T1coKTsKQEAgLTE4ODgsMTIgKzE4NzIsOCBAQCBXYWl0T25Mb2NrKExPQ0FMTE9DSyAqbG9jYWxs b2NrLCBSZXNvdXJjZU93bmVyIG93bmVyKQogCiAJYXdhaXRlZExvY2sgPSBOVUxMOwogCi0JLyog UmVwb3J0IGNoYW5nZSB0byBub24td2FpdGluZyBzdGF0dXMgKi8KLQlpZiAodXBkYXRlX3Byb2Nl c3NfdGl0bGUpCi0JewotCQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKLQkJcGZyZWUobmV3 X3N0YXR1cyk7Ci0JfQorCS8qIHJlc2V0IHBzIGRpc3BsYXkgdG8gcmVtb3ZlIHRoZSBzdWZmaXgg aWYgd2UgYWRkZWQgb25lICovCisJc2V0X3BzX2Rpc3BsYXlfcmVtb3ZlX3N1ZmZpeCgpOwogCiAJ TE9DS19QUklOVCgiV2FpdE9uTG9jazogd2FrZXVwIG9uIGxvY2siLAogCQkJICAgbG9jYWxsb2Nr LT5sb2NrLCBsb2NhbGxvY2stPnRhZy5tb2RlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA1ZDQzOWYy NzEwLi5jYWI3MDliMDdiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC0xMDcxLDYgKzEwNzEsOCBAQCBl eGVjX3NpbXBsZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCVBvcnRhbAkJcG9y dGFsOwogCQlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOwogCQlpbnQxNgkJZm9ybWF0OworCQljb25z dCBjaGFyICpjbWR0YWduYW1lOworCQlzaXplX3QJCWNtZHRhZ2xlbjsKIAogCQlwZ3N0YXRfcmVw b3J0X3F1ZXJ5X2lkKDAsIHRydWUpOwogCkBAIC0xMDgxLDggKzEwODMsOSBAQCBleGVjX3NpbXBs ZV9xdWVyeShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcpCiAJCSAqIGRlc3RpbmF0aW9uLgogCQkg Ki8KIAkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlLT5zdG10KTsKKwkJ Y21kdGFnbmFtZSA9IEdldENvbW1hbmRUYWdOYW1lQW5kTGVuKGNvbW1hbmRUYWcsICZjbWR0YWds ZW4pOwogCi0JCXNldF9wc19kaXNwbGF5KEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRUYWcpKTsK KwkJc2V0X3BzX2Rpc3BsYXlfd2l0aF9sZW4oY21kdGFnbmFtZSwgY21kdGFnbGVuKTsKIAogCQlC ZWdpbkNvbW1hbmQoY29tbWFuZFRhZywgZGVzdCk7CiAKQEAgLTIwNjQsNiArMjA2Nyw4IEBAIGV4 ZWNfZXhlY3V0ZV9tZXNzYWdlKGNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lLCBsb25nIG1heF9yb3dz KQogCWNoYXIJCW1zZWNfc3RyWzMyXTsKIAlQYXJhbXNFcnJvckNiRGF0YSBwYXJhbXNfZGF0YTsK IAlFcnJvckNvbnRleHRDYWxsYmFjayBwYXJhbXNfZXJyY3h0OworCWNvbnN0IGNoYXIgKmNtZHRh Z25hbWU7CisJc2l6ZV90CQljbWR0YWdsZW47CiAKIAkvKiBBZGp1c3QgZGVzdGluYXRpb24gdG8g dGVsbCBwcmludHR1cC5jIHdoYXQgdG8gZG8gKi8KIAlkZXN0ID0gd2hlcmVUb1NlbmRPdXRwdXQ7 CkBAIC0yMTEwLDcgKzIxMTUsOSBAQCBleGVjX2V4ZWN1dGVfbWVzc2FnZShjb25zdCBjaGFyICpw b3J0YWxfbmFtZSwgbG9uZyBtYXhfcm93cykKIAogCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RB VEVfUlVOTklORywgc291cmNlVGV4dCk7CiAKLQlzZXRfcHNfZGlzcGxheShHZXRDb21tYW5kVGFn TmFtZShwb3J0YWwtPmNvbW1hbmRUYWcpKTsKKwljbWR0YWduYW1lID0gR2V0Q29tbWFuZFRhZ05h bWVBbmRMZW4ocG9ydGFsLT5jb21tYW5kVGFnLCAmY21kdGFnbGVuKTsKKworCXNldF9wc19kaXNw bGF5X3dpdGhfbGVuKGNtZHRhZ25hbWUsIGNtZHRhZ2xlbik7CiAKIAlpZiAoc2F2ZV9sb2dfc3Rh dGVtZW50X3N0YXRzKQogCQlSZXNldFVzYWdlKCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL3BzX3N0YXR1cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wc19zdGF0dXMu YwppbmRleCBjOTlhNGYxMGZhLi43MjA0ODJlNTgxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL3BzX3N0YXR1cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcHNfc3Rh dHVzLmMKQEAgLTg2LDEyICs4NiwxOSBAQCBzdGF0aWMgc2l6ZV90IHBzX2J1ZmZlcl9jdXJfbGVu OwkvKiBub21pbmFsIHN0cmxlbihwc19idWZmZXIpICovCiAKIHN0YXRpYyBzaXplX3QgcHNfYnVm ZmVyX2ZpeGVkX3NpemU7IC8qIHNpemUgb2YgdGhlIGNvbnN0YW50IHByZWZpeCAqLwogCisvKgor ICogTGVuZ3RoIG9mIHBzX2J1ZmZlciBiZWZvcmUgdGhlIHN1ZmZpeCB3YXMgYXBwZW5lZGVkIHRv IHRoZSBlbmQsIG9yIDAgaWYgd2UKKyAqIGRpZG4ndCBzZXQgYSBzdWZmaXguCisgKi8KK3N0YXRp YyBzaXplX3QgcHNfYnVmZmVyX25vc3VmZml4X2xlbjsKKwogI2VuZGlmCQkJCQkJCS8qIG5vdCBQ U19VU0VfTk9ORSAqLwogCiAvKiBzYXZlIHRoZSBvcmlnaW5hbCBhcmd2W10gbG9jYXRpb24gaGVy ZSAqLwogc3RhdGljIGludAlzYXZlX2FyZ2M7CiBzdGF0aWMgY2hhciAqKnNhdmVfYXJndjsKIAor c3RhdGljIHZvaWQgZmx1c2hfcHNfZGlzcGxheSh2b2lkKTsKIAogLyoKICAqIENhbGwgdGhpcyBl YXJseSBpbiBzdGFydHVwIHRvIHNhdmUgdGhlIG9yaWdpbmFsIGFyZ2MvYXJndiB2YWx1ZXMuCkBA IC0zMDAsMzcgKzMwNywxNTIgQEAgaW5pdF9wc19kaXNwbGF5KGNvbnN0IGNoYXIgKmZpeGVkX3Bh cnQpCiAjZW5kaWYJCQkJCQkJLyogbm90IFBTX1VTRV9OT05FICovCiB9CiAKKyNpZm5kZWYgUFNf VVNFX05PTkUKK3N0YXRpYyBib29sCit1cGRhdGVfcHNfZGlzcGxheV9wcmVjaGVjayh2b2lkKQor eworCS8qIHVwZGF0ZV9wcm9jZXNzX3RpdGxlPW9mZiBkaXNhYmxlcyB1cGRhdGVzICovCisJaWYg KCF1cGRhdGVfcHJvY2Vzc190aXRsZSkKKwkJcmV0dXJuIGZhbHNlOwogCisJLyogbm8gcHMgZGlz cGxheSBmb3Igc3RhbmQtYWxvbmUgYmFja2VuZCAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIp CisJCXJldHVybiBmYWxzZTsKKworI2lmZGVmIFBTX1VTRV9DTE9CQkVSX0FSR1YKKwkvKiBJZiBw c19idWZmZXIgaXMgYSBwb2ludGVyLCBpdCBtaWdodCBzdGlsbCBiZSBudWxsICovCisJaWYgKCFw c19idWZmZXIpCisJCXJldHVybiBmYWxzZTsKKyNlbmRpZgorCisJcmV0dXJuIHRydWU7Cit9Cisj ZW5kaWYJCQkJCQkJLyogbm90IFBTX1VTRV9OT05FICovCiAKIC8qCi0gKiBDYWxsIHRoaXMgdG8g dXBkYXRlIHRoZSBwcyBzdGF0dXMgZGlzcGxheSB0byBhIGZpeGVkIHByZWZpeCBwbHVzIGFuCi0g KiBpbmRpY2F0aW9uIG9mIHdoYXQgeW91J3JlIGN1cnJlbnRseSBkb2luZyBwYXNzZWQgaW4gdGhl IGFyZ3VtZW50LgorICogc2V0X3BzX2Rpc3BsYXlfc3VmZml4CisgKgkJQWRqdXN0IHRoZSBwcm9j ZXNzIHRpdGxlIHRvIGFwcGVuZCAnc3VmZml4JyBvbnRvIHRoZSBlbmQgd2l0aCBhIHNwYWNlCisg KgkJYmV0d2VlbiBpdCBhbmQgdGhlIGN1cnJlbnQgcHJvY2VzcyB0aXRsZS4KICAqLwogdm9pZAot c2V0X3BzX2Rpc3BsYXkoY29uc3QgY2hhciAqYWN0aXZpdHkpCitzZXRfcHNfZGlzcGxheV9zdWZm aXgoY29uc3QgY2hhciAqc3VmZml4KQogewogI2lmbmRlZiBQU19VU0VfTk9ORQotCS8qIHVwZGF0 ZV9wcm9jZXNzX3RpdGxlPW9mZiBkaXNhYmxlcyB1cGRhdGVzICovCi0JaWYgKCF1cGRhdGVfcHJv Y2Vzc190aXRsZSkKKwlzaXplX3QJbGVuOworCisJLyogZmlyc3QsIGNoZWNrIGlmIHdlIG5lZWQg dG8gdXBkYXRlIHRoZSBwcm9jZXNzIHRpdGxlICovCisJaWYgKCF1cGRhdGVfcHNfZGlzcGxheV9w cmVjaGVjaygpKQogCQlyZXR1cm47CiAKLQkvKiBubyBwcyBkaXNwbGF5IGZvciBzdGFuZC1hbG9u ZSBiYWNrZW5kICovCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwlpZiAocHNfYnVmZmVyX25v c3VmZml4X2xlbiA+IDApCisJCXBzX2J1ZmZlcl9jdXJfbGVuID0gcHNfYnVmZmVyX25vc3VmZml4 X2xlbjsKKwllbHNlCisJCXBzX2J1ZmZlcl9ub3N1ZmZpeF9sZW4gPSBwc19idWZmZXJfY3VyX2xl bjsKKworCWxlbiA9IHN0cmxlbihzdWZmaXgpOworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBlbm91 Z2ggc3BhY2UgdG8gYXBwZW5kIHRoZSBzdWZmaXggKi8KKwlpZiAocHNfYnVmZmVyX2N1cl9sZW4g KyBsZW4gKyAxID49IHBzX2J1ZmZlcl9zaXplKQorCXsKKwkJLyogbm90IGVub3VnaCBzcGFjZS4g IENoZWNrIHRoZSBidWZmZXIgaXNuJ3QgZnVsbCBhbHJlYWR5ICovCisJCWlmIChwc19idWZmZXJf Y3VyX2xlbiA8IHBzX2J1ZmZlcl9zaXplIC0gMSkKKwkJeworCQkJLyogYXBwZW5kIGEgc3BhY2Ug YmVmb3JlIHRoZSBzdWZmaXggKi8KKwkJCXBzX2J1ZmZlcltwc19idWZmZXJfY3VyX2xlbisrXSA9 ICcgJzsKKworCQkJLyogTm90IGVub3VnaCBzcGFjZS4gIEp1c3QgYWRkIHdoYXQgd2UgY2FuICov CisJCQltZW1jcHkocHNfYnVmZmVyICsgcHNfYnVmZmVyX2N1cl9sZW4sIHN1ZmZpeCwKKwkJCQkg ICBwc19idWZmZXJfc2l6ZSAtIHBzX2J1ZmZlcl9jdXJfbGVuIC0gMSk7CisJCQlwc19idWZmZXJb cHNfYnVmZmVyX3NpemUgLSAxXSA9ICdcMCc7CisJCQlwc19idWZmZXJfY3VyX2xlbiA9IHBzX2J1 ZmZlcl9zaXplIC0gMTsKKwkJfQorCX0KKwllbHNlCisJeworCQlwc19idWZmZXJbcHNfYnVmZmVy X2N1cl9sZW4rK10gPSAnICc7CisJCW1lbWNweShwc19idWZmZXIgKyBwc19idWZmZXJfY3VyX2xl biwgc3VmZml4LCBsZW4gKyAxKTsKKwkJcHNfYnVmZmVyX2N1cl9sZW4gPSBwc19idWZmZXJfY3Vy X2xlbiArIGxlbjsKKwl9CisKKwlBc3NlcnQoc3RybGVuKHBzX2J1ZmZlcikgPT0gcHNfYnVmZmVy X2N1cl9sZW4pOworCisJLyogYW5kIHNldCB0aGUgbmV3IHRpdGxlICovCisJZmx1c2hfcHNfZGlz cGxheSgpOworI2VuZGlmCQkJCQkJCS8qIG5vdCBQU19VU0VfTk9ORSAqLworfQorCisvKgorICog c2V0X3BzX2Rpc3BsYXlfcmVtb3ZlX3N1ZmZpeAorICoJCVJlbW92ZSB0aGUgcHJvY2VzcyBkaXNw bGF5IHN1ZmZpeCBhZGRlZCBieSBzZXRfcHNfZGlzcGxheV9zdWZmaXgKKyAqLwordm9pZAorc2V0 X3BzX2Rpc3BsYXlfcmVtb3ZlX3N1ZmZpeCh2b2lkKQoreworI2lmbmRlZiBQU19VU0VfTk9ORQor CS8qIGZpcnN0LCBjaGVjayBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcHJvY2VzcyB0aXRsZSAq LworCWlmICghdXBkYXRlX3BzX2Rpc3BsYXlfcHJlY2hlY2soKSkKIAkJcmV0dXJuOwogCi0jaWZk ZWYgUFNfVVNFX0NMT0JCRVJfQVJHVgotCS8qIElmIHBzX2J1ZmZlciBpcyBhIHBvaW50ZXIsIGl0 IG1pZ2h0IHN0aWxsIGJlIG51bGwgKi8KLQlpZiAoIXBzX2J1ZmZlcikKKwkvKiBjaGVjayB3ZSBh ZGRlZCBhIHN1ZmZpeCAqLworCWlmIChwc19idWZmZXJfbm9zdWZmaXhfbGVuID09IDApCisJCXJl dHVybjsJCS8qIG5vIHN1ZmZpeCAqLworCisJLyogcmVtb3ZlIHRoZSBzdWZmaXggZnJvbSBwc19i dWZmZXIgKi8KKwlwc19idWZmZXJbcHNfYnVmZmVyX25vc3VmZml4X2xlbl0gPSAnXDAnOworCXBz X2J1ZmZlcl9jdXJfbGVuID0gcHNfYnVmZmVyX25vc3VmZml4X2xlbjsKKwlwc19idWZmZXJfbm9z dWZmaXhfbGVuID0gMDsKKworCUFzc2VydChwc19idWZmZXJfY3VyX2xlbiA9PSBzdHJsZW4ocHNf YnVmZmVyKSk7CisKKwkvKiBhbmQgc2V0IHRoZSBuZXcgdGl0bGUgKi8KKwlmbHVzaF9wc19kaXNw bGF5KCk7CisjZW5kaWYJCQkJCQkJLyogbm90IFBTX1VTRV9OT05FICovCit9CisKKy8qCisgKiBD YWxsIHRoaXMgdG8gdXBkYXRlIHRoZSBwcyBzdGF0dXMgZGlzcGxheSB0byBhIGZpeGVkIHByZWZp eCBwbHVzIGFuCisgKiBpbmRpY2F0aW9uIG9mIHdoYXQgeW91J3JlIGN1cnJlbnRseSBkb2luZyBw YXNzZWQgaW4gdGhlIGFyZ3VtZW50LgorICoKKyAqICdsZW4nIG11c3QgYmUgdGhlIHNhbWUgYXMg c3RybGVuKGFjdGl2aXR5KQorICovCit2b2lkCitzZXRfcHNfZGlzcGxheV93aXRoX2xlbihjb25z dCBjaGFyICphY3Rpdml0eSwgc2l6ZV90IGxlbikKK3sKKwlBc3NlcnQoc3RybGVuKGFjdGl2aXR5 KSA9PSBsZW4pOworCisjaWZuZGVmIFBTX1VTRV9OT05FCisJLyogZmlyc3QsIGNoZWNrIGlmIHdl IG5lZWQgdG8gdXBkYXRlIHRoZSBwcm9jZXNzIHRpdGxlICovCisJaWYgKCF1cGRhdGVfcHNfZGlz cGxheV9wcmVjaGVjaygpKQogCQlyZXR1cm47Ci0jZW5kaWYKKworCS8qIHdpcGUgb3V0IHRoZSBz dWZmaXggd2hlbiB0aGUgdGl0bGUgaXMgY29tcGxldGVseSBjaGFuZ2VkICovCisJcHNfYnVmZmVy X25vc3VmZml4X2xlbiA9IDA7CiAKIAkvKiBVcGRhdGUgcHNfYnVmZmVyIHRvIGNvbnRhaW4gYm90 aCBmaXhlZCBwYXJ0IGFuZCBhY3Rpdml0eSAqLwotCXN0cmxjcHkocHNfYnVmZmVyICsgcHNfYnVm ZmVyX2ZpeGVkX3NpemUsIGFjdGl2aXR5LAotCQkJcHNfYnVmZmVyX3NpemUgLSBwc19idWZmZXJf Zml4ZWRfc2l6ZSk7Ci0JcHNfYnVmZmVyX2N1cl9sZW4gPSBzdHJsZW4ocHNfYnVmZmVyKTsKKwlp ZiAocHNfYnVmZmVyX2ZpeGVkX3NpemUgKyBsZW4gPj0gcHNfYnVmZmVyX3NpemUpCisJeworCQkv KiBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgcHNfYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3Bh Y2UgKi8KKwkJbWVtY3B5KHBzX2J1ZmZlciArIHBzX2J1ZmZlcl9maXhlZF9zaXplLCBhY3Rpdml0 eSwKKwkJCSAgIHBzX2J1ZmZlcl9zaXplIC0gcHNfYnVmZmVyX2ZpeGVkX3NpemUgLSAxKTsKKwkJ cHNfYnVmZmVyW3BzX2J1ZmZlcl9zaXplIC0gMV0gPSAnXDAnOworCQlwc19idWZmZXJfY3VyX2xl biA9IHBzX2J1ZmZlcl9zaXplIC0gMTsKKwl9CisJZWxzZQorCXsKKwkJbWVtY3B5KHBzX2J1ZmZl ciArIHBzX2J1ZmZlcl9maXhlZF9zaXplLCBhY3Rpdml0eSwgbGVuICsgMSk7CisJCXBzX2J1ZmZl cl9jdXJfbGVuID0gcHNfYnVmZmVyX2ZpeGVkX3NpemUgKyBsZW47CisJfQorCUFzc2VydChzdHJs ZW4ocHNfYnVmZmVyKSA9PSBwc19idWZmZXJfY3VyX2xlbik7CiAKIAkvKiBUcmFuc21pdCBuZXcg c2V0dGluZyB0byBrZXJuZWwsIGlmIG5lY2Vzc2FyeSAqLworCWZsdXNoX3BzX2Rpc3BsYXkoKTsK KyNlbmRpZgkJCQkJCQkvKiBub3QgUFNfVVNFX05PTkUgKi8KK30KIAorI2lmbmRlZiBQU19VU0Vf Tk9ORQorc3RhdGljIHZvaWQKK2ZsdXNoX3BzX2Rpc3BsYXkodm9pZCkKK3sKICNpZmRlZiBQU19V U0VfU0VUUFJPQ1RJVExFCiAJc2V0cHJvY3RpdGxlKCIlcyIsIHBzX2J1ZmZlcik7CiAjZWxpZiBk ZWZpbmVkKFBTX1VTRV9TRVRQUk9DVElUTEVfRkFTVCkKQEAgLTM2Myw5ICs0ODUsOCBAQCBzZXRf cHNfZGlzcGxheShjb25zdCBjaGFyICphY3Rpdml0eSkKIAkJaWRlbnRfaGFuZGxlID0gQ3JlYXRl RXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIG5hbWUpOwogCX0KICNlbmRpZgkJCQkJCQkvKiBQU19V U0VfV0lOMzIgKi8KLSNlbmRpZgkJCQkJCQkvKiBub3QgUFNfVVNFX05PTkUgKi8KIH0KLQorI2Vu ZGlmCiAKIC8qCiAgKiBSZXR1cm5zIHdoYXQncyBjdXJyZW50bHkgaW4gdGhlIHBzIGRpc3BsYXks IGluIGNhc2Ugc29tZW9uZSBuZWVkcwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcHNf c3RhdHVzLmggYi9zcmMvaW5jbHVkZS91dGlscy9wc19zdGF0dXMuaAppbmRleCA2OTUzYTMyNmYx Li5mZjVhMmIyYjhhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9wc19zdGF0dXMuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9wc19zdGF0dXMuaApAQCAtMjUsNyArMjUsMjIgQEAgZXh0 ZXJuIGNoYXIgKipzYXZlX3BzX2Rpc3BsYXlfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwog CiBleHRlcm4gdm9pZCBpbml0X3BzX2Rpc3BsYXkoY29uc3QgY2hhciAqZml4ZWRfcGFydCk7CiAK LWV4dGVybiB2b2lkIHNldF9wc19kaXNwbGF5KGNvbnN0IGNoYXIgKmFjdGl2aXR5KTsKK2V4dGVy biB2b2lkIHNldF9wc19kaXNwbGF5X3N1ZmZpeChjb25zdCBjaGFyICpzdWZmaXgpOworCitleHRl cm4gdm9pZCBzZXRfcHNfZGlzcGxheV9yZW1vdmVfc3VmZml4KHZvaWQpOworCitleHRlcm4gdm9p ZCBzZXRfcHNfZGlzcGxheV93aXRoX2xlbihjb25zdCBjaGFyICphY3Rpdml0eSwgc2l6ZV90IGxl bik7CisKKy8qCisgKiBzZXRfcHNfZGlzcGxheQorICoJCWlubGluZWQgdG8gYWxsb3cgc3RybGVu IHRvIGJlIGV2YWx1YXRlZCBkdXJpbmcgY29tcGlsYXRpb24gd2hlbgorICoJCXBhc3Npbmcgc3Ry aW5nIGNvbnN0YW50cy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzZXRfcHNfZGlzcGxheShj b25zdCBjaGFyICphY3Rpdml0eSkKK3sKKwlzZXRfcHNfZGlzcGxheV93aXRoX2xlbihhY3Rpdml0 eSwgc3RybGVuKGFjdGl2aXR5KSk7Cit9CiAKIGV4dGVybiBjb25zdCBjaGFyICpnZXRfcHNfZGlz cGxheShpbnQgKmRpc3BsZW4pOwogCg== --000000000000a137a905f4e151e4--