From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Ali Bahrami Newsgroups: gmane.emacs.devel Subject: Finding the dump (redux) Date: Thu, 15 Apr 2021 13:38:37 -0600 Message-ID: <5decf0e7-8f26-3fc7-7094-1bfdb211eefc@emvision.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------15A14229C41F143A1435B0EC" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23969"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Apr 15 21:39:41 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lX7q0-00067D-Vi for ged-emacs-devel@m.gmane-mx.org; Thu, 15 Apr 2021 21:39:41 +0200 Original-Received: from localhost ([::1]:39352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lX7q0-0001Zu-1f for ged-emacs-devel@m.gmane-mx.org; Thu, 15 Apr 2021 15:39:40 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lX7pA-00016V-6m for emacs-devel@gnu.org; Thu, 15 Apr 2021 15:38:48 -0400 Original-Received: from gateway.emvision.com ([71.33.253.1]:63426 helo=emvision.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lX7p7-0001Za-Ny for emacs-devel@gnu.org; Thu, 15 Apr 2021 15:38:47 -0400 Original-Received: from [198.182.198.2] (moose.emvision.com [198.182.198.2]) by emvision.com (8.15.2+Sun/8.15.2) with ESMTP id 13FJccfh005643 for ; Thu, 15 Apr 2021 13:38:38 -0600 (MDT) Content-Language: en-US X-Greylist: inspected by milter-greylist-4.6.2 (emvision.com [192.168.0.2]); Thu, 15 Apr 2021 13:38:38 -0600 (MDT) for IP:'198.182.198.2' DOMAIN:'moose.emvision.com' HELO:'[198.182.198.2]' FROM:'ali_gnu2@emvision.com' RCPT:'' X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (emvision.com [192.168.0.2]); Thu, 15 Apr 2021 13:38:38 -0600 (MDT) Received-SPF: none client-ip=71.33.253.1; envelope-from=ali_gnu2@emvision.com; helo=emvision.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.399, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:268108 Archived-At: This is a multi-part message in MIME format. --------------15A14229C41F143A1435B0EC Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, I'm a bit late to the pdump party, as we had just updated the emacs delivered with Solaris shortly before the version with pdumper arrived, and we don't tend to update more than once every year or two. It's overdue though, and I've been playing with emacs 27.2 on Solaris this week. It's great, but I find myself wanting to request a small tweak to the search for the pdmp file. First though, I want to say that pdumper is awesome, and has exceeded my hopes and expectations. It seems just as fast, and it is so nice to be out of the unexec game. Who knows, we might someday even be able to get rid of the special dldump() function that was written for emacs decades ago. :-) In any event, I'm running 27.2 on my desktop as a position independent executable (PIE) and with ASLR enabled, and everything seems to working as it should. Thank You Daniel for persisting, and for this big step forward! The issue I'm hitting is similar to one discussed over 2 years ago: "Finding the dump" https://lists.gnu.org/archive/html/emacs-devel/2019-01/msg00558.html At that time, Eli made a change to improve the way pdmp files are found in PATH_EXEC, using the basename(argv[0]) to find matching dump files. It's useful, but not quite enough to handle the way we deliver emacs on Solaris. Like others, we deliver the 3 UI variants of emacs so that users have their choice. Along with that is a "mediator" symlink, provided by the packaging system, that provides the generic 'emacs' name, pointing at the default version. Mediators are a Solaris feature, and there's a packaging command by which the system owner can change them to point at their own favored default. On my desktop, it looks like this: % cd /usr/bin % ls -alFh emacs* lrwxrwxrwx 1 root root 9 Apr 14 22:15 emacs -> emacs-gtk* -r-xr-xr-x 2 root bin 7.05M Apr 14 22:15 emacs-gtk* -r-xr-xr-x 2 root bin 7.05M Apr 14 22:15 emacs-gtk-27.2* -r-xr-xr-x 2 root bin 6.09M Apr 14 22:15 emacs-nox* -r-xr-xr-x 2 root bin 6.09M Apr 14 22:15 emacs-nox-27.2* -r-xr-xr-x 2 root bin 7.07M Apr 14 22:15 emacs-x* -r-xr-xr-x 2 root bin 7.07M Apr 14 22:15 emacs-x-27.2* -r-xr-xr-x 1 root bin 47K Apr 14 22:15 emacsclient* And the pdmp files are similarly named, to match the emacs executables: % cd /usr/lib/emacs/27.2/x86_64-pc-solaris2.11 % ls -alhF *.pdmp -r--r--r-- 2 root bin 10.2M Apr 14 22:15 emacs-gtk-27.2.pdmp -r--r--r-- 2 root bin 10.2M Apr 14 22:15 emacs-gtk.pdmp -r--r--r-- 2 root bin 9.64M Apr 14 22:15 emacs-nox-27.2.pdmp -r--r--r-- 2 root bin 9.64M Apr 14 22:15 emacs-nox.pdmp -r--r--r-- 2 root bin 10.1M Apr 14 22:15 emacs-x-27.2.pdmp -r--r--r-- 2 root bin 10.1M Apr 14 22:15 emacs-x.pdmp As noted, the default is emacs-gtk, but I can change that: # pkg set-mediator -I emacs-x emacs <...pkg output elided...> # ls -alFh /usr/bin/emacs rwxrwxrwx 1 root root 7 Apr 15 11:47 /usr/bin/emacs -> emacs-x* Like a lot of GNU/Linux distributions, we used to use a shell script for this, but we moved to the mediator years ago. With the new emacs, this works well for the explicitly named versions (emacs-gtk, emacs-nox, and emacs-x). But, when run via the 'emacs' symlink (the usual case), the binary is unable to find its pdmp file. It still runs, but ends up loading all the separate elc files, which is undesirable. I can solve this without changing emacs, superficially, by just adding a corresponding mediator symlink for emacs.pdmp in the PATH_EXEC directory. But then, if an end user were to make their own symlink to one of these emacs variants, they'll still face this problem: % ln -s /usr/bin/emacs-gtk ~/bin/myemacs Sure, that user could specify the pdmp file on the command line, or wrap it in a shell script, but for default behavior, I don't think that should be necessary. Why shouldn't an emacs, found by whatever path, not be able to find its default pdmp file in PATH_EXEC? I believe that the search done by emacs is just missing a check that would solve this. The problem is that load_pdump() in src/emacs.c only searches PATH_EXEC for emacs.pdmp, and then for the pdmp file with the name given by: basename(argv[0]) If it were to also search for basename(realpath(argv[0])) then it would find pdmp files that match either the given, or "absolute" names, rather than just the given name, and symlinks that point at emacs executables would always find the default pdmp file that goes with them, whether we deliver them, or the user makes their own. I note that the discussion in 2019 spent a lot of time discussing how realpath(argv[0])) can be unreliable, and that applications can change argv[0]. That's true, but assuming that this is understood, it is still useful most of the time. Note that the code in load_pdump() already calls realpath(). It uses the result to locate the corresponding pdmp file in the directory containing the executable. The only thing missing is to take the next step, and apply the same information to the search of PATH_EXEC. It's not necessary to add more code to do this. It suffices to refactor the existing code into a couple of functions that can be used to cover the 2 existing cases, plus this new one. I've attached a patch to Emacs 27.2 that does that, to this message. Note however that I don't have a contributor agreement in place, and it might be difficult for me to do that any time soon. I'm hoping that this patch might still qualify, on the basis that it is just a rearrangement of the existing code, and not at all novel. Or, perhaps someone else will be willing to take the ideas and quickly put together an official fix independently. Those ideas are: - Move the repeated code into functions, to clean up load_pdump(). - Save the basename from the result of calling realpath() during the search of the executable directory. - During the PATH_EXEC stage, use the saved realpath basename to add a check for that name. Thanks for your consideration. - Ali --------------15A14229C41F143A1435B0EC Content-Type: text/plain; charset=UTF-8; name="mediator.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="mediator.patch" IyBFbmhhbmNlIGVtYWNzIHRvIGFsc28gbG9vayBmb3IgdGhlIHBkbXAgZmlsZSBpbiBQQVRI X0VYRUMgdXNpbmcgdGhlCiMgbmFtZSBzZWVuIGluIHJlYWxwYXRoKGFyZ3ZbMF0pLiBFbWFj cyBpcyB0eXBpY2FsbHkgcnVuIHZpYSB0aGUgbWVkaWF0ZWQKIyAvdXNyL2Jpbi9lbWFjcyBz eW1saW5rLCB3aGljaCBwb2ludHMgYXQgb25lIG9mIHRoZSBlbWFjcyB2YXJpYW50cwojIChl bWFjcy1ndGssIGVtYWNzLXgsIGVtYWNzLW5veCkuIEFkZGluZyB0aGUgY2hlY2sgZm9yIHRo ZSBuYW1lIGZvdW5kCiMgdmlhIHJlYWxwYXRoKCkgYWxsb3dzIHRoZSBhY3R1YWwgZW1hY3Mg YmluYXJ5IHRvIGZpbmQgaXRzIHBkdW1wIGZpbGUuCiMKLS0tIGVtYWNzLTI3LjIub3JpZy9z cmMvZW1hY3MuYwkyMDIxLTAxLTI4IDEwOjUyOjM4LjAwMDAwMDAwMCArMDAwMAorKysgZW1h Y3MtMjcuMi9zcmMvZW1hY3MuYwkyMDIxLTA0LTE0IDEzOjEyOjQ2LjczMjUzNzAxMCArMDAw MApAQCAtNzY2LDYgKzc2Niw1NSBAQAogI2VuZGlmCS8qICFXSU5ET1dTTlQgKi8KIH0KIAor LyoKKyAqIGJhc2VuYW1lKCkgZm9yIHBkdW1wIHBhdGhzCisgKi8KK3N0YXRpYyBjaGFyICoK K2xvYWRfcGR1bXBfYmFzZW5hbWUoY2hhciAqcGF0aCkKK3sKKyAgY2hhciAqcCwgKmxhc3Rf c2VwID0gTlVMTDsKKworICBmb3IgKHAgPSBwYXRoOyAqcDsgcCsrKQorICAgIHsKKyAgICAg IGlmIChJU19ESVJFQ1RPUllfU0VQICgqcCkpCisJIGxhc3Rfc2VwID0gcDsKKyAgICB9CisK KyAgICByZXR1cm4gbGFzdF9zZXAgPyBsYXN0X3NlcCArIDEgOiBwYXRoOworfQorCisvKgor ICogR2l2ZW4gYSBiYXNlbmFtZSBmb3IgdGhlIHJ1bm5pbmcgZW1hY3MsIGF0dGVtcHQgdG8g b3BlbgorICogdGhlIGNvcnJlc3BvbmRpbmcgcGR1bXAgZmlsZSBpbiB0aGUgZGlyZWN0b3J5 IGdpdmVuIGJ5IHBhdGguCisgKi8KK3N0YXRpYyBpbnQKK2xvYWRfcGR1bXBfZnJvbV9wYXRo KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN1ZmZp eCwKKwkJICAgICBjaGFyICoqZHVtcF9maWxlLCBwdHJkaWZmX3QgKmJ1ZnNpemUpCit7Cisg IHB0cmRpZmZfdCBuZWVkZWQgPSAoc3RybGVuIChwYXRoKQorCQkgICAgICArIDEKKwkJICAg ICAgKyBzdHJsZW4gKG5hbWUpCisJCSAgICAgICsgc3RybGVuIChzdWZmaXgpCisJCSAgICAg ICsgMSk7CisgIGlmICgqYnVmc2l6ZSA8IG5lZWRlZCkKKyAgICB7CisgICAgICB4ZnJlZSAo KmR1bXBfZmlsZSk7CisgICAgICAqZHVtcF9maWxlID0geG1hbGxvYyAobmVlZGVkKTsKKyAg ICAgICpidWZzaXplID0gbmVlZGVkOworICAgIH0KKyNpZmRlZiBET1NfTlQKKyAgcHRyZGlm Zl90IG5hbWVfbGVuID0gc3RybGVuIChuYW1lKTsKKyAgaWYgKG5hbWVfbGVuID49IDQKKyAg ICAgICYmIGNfc3RyY2FzZWNtcCAobmFtZSArIG5hbWVfbGVuIC0gNCwgIi5leGUiKSA9PSAw KQorICAgIHNwcmludGYgKCpkdW1wX2ZpbGUsICIlcyVjJS4qcyVzIiwgcGF0aCwgRElSRUNU T1JZX1NFUCwKKwkgICAgIChpbnQpKG5hbWVfbGVuIC0gNCksIG5hbWUsIHN1ZmZpeCk7Cisg IGVsc2UKKyNlbmRpZgorICAgIHNwcmludGYgKCpkdW1wX2ZpbGUsICIlcyVjJXMlcyIsCisJ ICAgICBwYXRoLCBESVJFQ1RPUllfU0VQLCBuYW1lLCBzdWZmaXgpOworICByZXR1cm4gcGR1 bXBlcl9sb2FkICgqZHVtcF9maWxlKTsKK30KKwogc3RhdGljIHZvaWQKIGxvYWRfcGR1bXAg KGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTgxNyw2ICs4NjYsNyBAQAogICAgICBl bmNvZGluZyB0aGUgc3lzdGVtIG5hdGl2ZWx5IHVzZXMgZm9yIGZpbGVzeXN0ZW0gYWNjZXNz LCBzbwogICAgICB0aGVyZSdzIG5vIG5lZWQgZm9yIGNoYXJhY3RlciBzZXQgY29udmVyc2lv bi4gICovCiAgIHB0cmRpZmZfdCBidWZzaXplOworICBjaGFyICphcmd2MF9yZWFsYmFzZSA9 IE5VTEw7CiAgIGR1bXBfZmlsZSA9IGxvYWRfcGR1bXBfZmluZF9leGVjdXRhYmxlIChhcmd2 WzBdLCAmYnVmc2l6ZSk7CiAKICAgLyogSWYgd2UgY291bGRuJ3QgZmluZCBvdXIgZXhlY3V0 YWJsZSwgZ28gc3RyYWlnaHQgdG8gbG9va2luZyBmb3IKQEAgLTgzOCw2ICs4ODgsOSBAQAog I2lmbmRlZiBXSU5ET1dTTlQKICAgICAgIGJ1ZnNpemUgPSBleGVuYW1lbGVuICsgMTsKICNl bmRpZgorICAgICAgLyogU2F2ZSB0aGUgcmVhbHBhdGggYmFzZW5hbWUgZm9yIHBvc3NpYmxl IHVzZSBiZWxvdyAqLworICAgICAgYXJndjBfcmVhbGJhc2UgPSB4c3RyZHVwIChsb2FkX3Bk dW1wX2Jhc2VuYW1lIChyZWFsX2V4ZW5hbWUpKTsKKwogICAgICAgaWYgKHN0cmlwX3N1ZmZp eCkKICAgICAgICAgewogCSAgcHRyZGlmZl90IHN0cmlwX3N1ZmZpeF9sZW5ndGggPSBzdHJs ZW4gKHN0cmlwX3N1ZmZpeCk7CkBAIC04NjksNTUgKzkyMiwyMyBAQAogICAvKiBMb29rIGZv ciAiZW1hY3MucGRtcCIgaW4gUEFUSF9FWEVDLiAgV2UgaGFyZGNvZGUgImVtYWNzIiBpbgog ICAgICAiZW1hY3MucGRtcCIgc28gdGhhdCB0aGUgRW1hY3MgYmluYXJ5IHN0aWxsIHdvcmtz IGlmIHRoZSB1c2VyCiAgICAgIGNvcGllcyBhbmQgcmVuYW1lcyBpdC4gICovCi0gIGNvbnN0 IGNoYXIgKmFyZ3YwX2Jhc2UgPSAiZW1hY3MiOwotICBwdHJkaWZmX3QgbmVlZGVkID0gKHN0 cmxlbiAocGF0aF9leGVjKQotICAgICAgICAgICAgICAgICAgICAgICsgMQotICAgICAgICAg ICAgICAgICAgICAgICsgc3RybGVuIChhcmd2MF9iYXNlKQotICAgICAgICAgICAgICAgICAg ICAgICsgc3RybGVuIChzdWZmaXgpCi0gICAgICAgICAgICAgICAgICAgICAgKyAxKTsKLSAg aWYgKGJ1ZnNpemUgPCBuZWVkZWQpCisgIHJlc3VsdCA9IGxvYWRfcGR1bXBfZnJvbV9wYXRo IChwYXRoX2V4ZWMsICJlbWFjcyIsIHN1ZmZpeCwKKwkJCQkgJmR1bXBfZmlsZSwgJmJ1ZnNp emUpOworCisgIC8qIEZpbmFsbHksIGxvb2sgZm9yIGJhc2VuYW1lKGFyZ3YwKSsiLnBkbXAi IGluIFBBVEhfRVhFQywgdXNpbmcgYm90aAorICAgICBhYnNvbHV0ZSAocmVhbHBhdGgpIGFu ZCBnaXZlbiBmb3Jtcy4gVGhpcyB3YXksIHRoZXkgY2FuIGFjY2VzcyBlbWFjcworICAgICB2 aWEgYSBzeW1saW5rIG9mIGEgZGlmZmVyZW50IG5hbWUsIG9yIHJlbmFtZSBib3RoIHRoZSBl eGVjdXRhYmxlIGFuZAorICAgICBpdHMgcGR1bXAgZmlsZSBpbiBQQVRIX0VYRUMsIGFuZCBo YXZlIHNldmVyYWwgRW1hY3MgY29uZmlndXJhdGlvbnMKKyAgICAgaW4gdGhlIHNhbWUgdmVy c2lvbmVkIGxpYmV4ZWMgc3ViZGlyZWN0b3J5LiAgKi8KKyAgaWYgKChyZXN1bHQgPT0gUERV TVBFUl9MT0FEX0ZJTEVfTk9UX0ZPVU5EKSAmJiAoYXJndjBfcmVhbGJhc2UgIT0gTlVMTCkp CiAgICAgewotICAgICAgeGZyZWUgKGR1bXBfZmlsZSk7Ci0gICAgICBkdW1wX2ZpbGUgPSB4 cGFsbG9jIChOVUxMLCAmYnVmc2l6ZSwgbmVlZGVkIC0gYnVmc2l6ZSwgLTEsIDEpOworICAg ICAgcmVzdWx0ID0gbG9hZF9wZHVtcF9mcm9tX3BhdGggKHBhdGhfZXhlYywgYXJndjBfcmVh bGJhc2UsIHN1ZmZpeCwKKwkJCQkgICAgICZkdW1wX2ZpbGUsICZidWZzaXplKTsKICAgICB9 Ci0gIHNwcmludGYgKGR1bXBfZmlsZSwgIiVzJWMlcyVzIiwKLSAgICAgICAgICAgcGF0aF9l eGVjLCBESVJFQ1RPUllfU0VQLCBhcmd2MF9iYXNlLCBzdWZmaXgpOwotICByZXN1bHQgPSBw ZHVtcGVyX2xvYWQgKGR1bXBfZmlsZSk7Ci0KICAgaWYgKHJlc3VsdCA9PSBQRFVNUEVSX0xP QURfRklMRV9OT1RfRk9VTkQpCiAgICAgewotICAgICAgLyogRmluYWxseSwgbG9vayBmb3Ig YmFzZW5hbWUoYXJndjApKyIucGRtcCIgaW4gUEFUSF9FWEVDLgotCSBUaGlzIHdheSwgdGhl eSBjYW4gcmVuYW1lIGJvdGggdGhlIGV4ZWN1dGFibGUgYW5kIGl0cyBwZHVtcAotCSBmaWxl IGluIFBBVEhfRVhFQywgYW5kIGhhdmUgc2V2ZXJhbCBFbWFjcyBjb25maWd1cmF0aW9ucyBp bgotCSB0aGUgc2FtZSB2ZXJzaW9uZWQgbGliZXhlYyBzdWJkaXJlY3RvcnkuICAqLwotICAg ICAgY2hhciAqcCwgKmxhc3Rfc2VwID0gTlVMTDsKLSAgICAgIGZvciAocCA9IGFyZ3ZbMF07 ICpwOyBwKyspCi0JewotCSAgaWYgKElTX0RJUkVDVE9SWV9TRVAgKCpwKSkKLQkgICAgbGFz dF9zZXAgPSBwOwotCX0KLSAgICAgIGFyZ3YwX2Jhc2UgPSBsYXN0X3NlcCA/IGxhc3Rfc2Vw ICsgMSA6IGFyZ3ZbMF07Ci0gICAgICBwdHJkaWZmX3QgbmVlZGVkID0gKHN0cmxlbiAocGF0 aF9leGVjKQotCQkJICArIDEKLQkJCSAgKyBzdHJsZW4gKGFyZ3YwX2Jhc2UpCi0JCQkgICsg c3RybGVuIChzdWZmaXgpCi0JCQkgICsgMSk7Ci0gICAgICBpZiAoYnVmc2l6ZSA8IG5lZWRl ZCkKLQl7Ci0JICB4ZnJlZSAoZHVtcF9maWxlKTsKLQkgIGR1bXBfZmlsZSA9IHhtYWxsb2Mg KG5lZWRlZCk7Ci0JfQotI2lmZGVmIERPU19OVAotICAgICAgcHRyZGlmZl90IGFyZ3YwX2xl biA9IHN0cmxlbiAoYXJndjBfYmFzZSk7Ci0gICAgICBpZiAoYXJndjBfbGVuID49IDQKLQkg ICYmIGNfc3RyY2FzZWNtcCAoYXJndjBfYmFzZSArIGFyZ3YwX2xlbiAtIDQsICIuZXhlIikg PT0gMCkKLQlzcHJpbnRmIChkdW1wX2ZpbGUsICIlcyVjJS4qcyVzIiwgcGF0aF9leGVjLCBE SVJFQ1RPUllfU0VQLAotCQkgKGludCkoYXJndjBfbGVuIC0gNCksIGFyZ3YwX2Jhc2UsIHN1 ZmZpeCk7Ci0gICAgICBlbHNlCi0jZW5kaWYKLSAgICAgIHNwcmludGYgKGR1bXBfZmlsZSwg IiVzJWMlcyVzIiwKLQkgICAgICAgcGF0aF9leGVjLCBESVJFQ1RPUllfU0VQLCBhcmd2MF9i YXNlLCBzdWZmaXgpOwotICAgICAgcmVzdWx0ID0gcGR1bXBlcl9sb2FkIChkdW1wX2ZpbGUp OworICAgICAgcmVzdWx0ID0gbG9hZF9wZHVtcF9mcm9tX3BhdGggKHBhdGhfZXhlYywgbG9h ZF9wZHVtcF9iYXNlbmFtZSAoYXJndlswXSksCisJCQkJICAgICBzdWZmaXgsICZkdW1wX2Zp bGUsICZidWZzaXplKTsKICAgICB9CiAKICAgaWYgKHJlc3VsdCAhPSBQRFVNUEVSX0xPQURf U1VDQ0VTUykKQEAgLTkyOSw2ICs5NTAsOCBAQAogCiAgb3V0OgogICB4ZnJlZSAoZHVtcF9m aWxlKTsKKyAgaWYgKGFyZ3YwX3JlYWxiYXNlKQorCSAgeGZyZWUgKGFyZ3YwX3JlYWxiYXNl KTsKIH0KICNlbmRpZiAvKiBIQVZFX1BEVU1QRVIgKi8KIAo= --------------15A14229C41F143A1435B0EC--