From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.bugs Subject: bug#45198: 28.0.50; Sandbox mode Date: Sat, 19 Dec 2020 19:18:48 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000004c40a805b6d54284" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2318"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Bastien , 45198@debbugs.gnu.org, =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Dec 19 19:20:21 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1kqgq4-0000Qz-IH for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 19 Dec 2020 19:20:20 +0100 Original-Received: from localhost ([::1]:33030 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kqgq3-00026y-LC for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 19 Dec 2020 13:20:19 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:58118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kqgpm-00026o-Hl for bug-gnu-emacs@gnu.org; Sat, 19 Dec 2020 13:20:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:59816) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kqgpm-0000Qf-9t for bug-gnu-emacs@gnu.org; Sat, 19 Dec 2020 13:20:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kqgpm-0001A3-4N for bug-gnu-emacs@gnu.org; Sat, 19 Dec 2020 13:20:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Philipp Stephani Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 19 Dec 2020 18:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 45198 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 45198-submit@debbugs.gnu.org id=B45198.16084019504394 (code B ref 45198); Sat, 19 Dec 2020 18:20:02 +0000 Original-Received: (at 45198) by debbugs.gnu.org; 19 Dec 2020 18:19:10 +0000 Original-Received: from localhost ([127.0.0.1]:43129 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kqgov-00018n-Ed for submit@debbugs.gnu.org; Sat, 19 Dec 2020 13:19:10 -0500 Original-Received: from mail-ot1-f53.google.com ([209.85.210.53]:43260) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kqgos-00018F-39 for 45198@debbugs.gnu.org; Sat, 19 Dec 2020 13:19:08 -0500 Original-Received: by mail-ot1-f53.google.com with SMTP id q25so5144883otn.10 for <45198@debbugs.gnu.org>; Sat, 19 Dec 2020 10:19:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=UO+uHMzdtVCuhaWgbdTCxeeCbKdJ5CVPUAN0TpANr3s=; b=M1MAyUrmQbiN8cXCw49fsR9sb3st7nRvSQUNDkELVt5a9d+umt9LrJxwmXU+qWZl+Z iJONl/EUE35P64Cj5kfAH25VRKQILSG8DfF5w+3M8ANS7QFXElzLIy0LGlNViUk8xIei zPqHGCPSMjM//5R1nspj5fNVGklxFTwbSw28Sh1Uoro13aeVSQppaZXmg7zWxgiWYZhg mJaxWZW2pKHdyXzfUuDOO+iVmDKF9OviwXLDo7ox0whQn70syREQdpFNKcVBsFdIhrzB hnuCwQ4xZ3dinhvPLzHbjW5/Rt2gXI5tZwOtTe5OiPqm/yUcQNHwNyBgJcEbFC95TXkJ xrZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UO+uHMzdtVCuhaWgbdTCxeeCbKdJ5CVPUAN0TpANr3s=; b=OUVgBJatZB0n61KiWgatYCe2SWhC82/RMuz8BgUBluRLddgFRi6sKppFHxzmXgFYGc z6sQSPhukCnFzHts8FW3/90FW9YcO/bkZ2KOv73DBiZXN5Ks14hLWebs69YLc/sES1JV 5bMRxUt7xMiwkFs5VglclT7gcbTK/iCdbBm1IWkddw1kRaLu2L2UXiAI5ZyKKpPz8ino F9I9bBBitQN784fKudyfJ073dQy5UnZP/xo/1A+bDNc8LjxZLwjcgVoDpr+jbAZ4KrtY XXgJVfMw6yGP73LnqHMAwc3zQapq4AyK/lSR5EO8Qi6rYw03CEaTEumoPL6nYSlzkcQv gA+w== X-Gm-Message-State: AOAM530/2Ow0BukvPO0v9uJJMLYfC8FC3Lxm3Y9QnCWtjazxgOKi0c3S 3rG5LrsTjYpM068nqgbD7Grpm++WAer9kl8cn+0= X-Google-Smtp-Source: ABdhPJxThOUH47ZplwyOAd2EaCQalVqgGe/91SaetkFO6b+aCawHG1VCsn9JbOcoMct39a7/MeFHQnqeGgXS1cLeP3w= X-Received: by 2002:a9d:72c4:: with SMTP id d4mr7076971otk.149.1608401940105; Sat, 19 Dec 2020 10:19:00 -0800 (PST) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:196410 Archived-At: --0000000000004c40a805b6d54284 Content-Type: text/plain; charset="UTF-8" Am Mo., 14. Dez. 2020 um 12:05 Uhr schrieb Philipp Stephani : > > > >> - This will need someone else doing the implementation. > > > Looks like we already have a volunteer for macOS. > > > For Linux, this shouldn't be that difficult either. The sandbox needs > > > to install a mount namespace that only allows read access to Emacs's > > > installation directory plus any input file and write access to known > > > output files, and enable syscall filters that forbid everything except > > > a list of known-safe syscalls (especially exec). I can take a stab at > > > that, but I can't promise anything ;-) > > > > Looking forward to it. > > > > I've looked into this, and what I'd suggest for now is: > 1. Add a --seccomp=FILE command-line option that loads seccomp filters > from FILE and applies them directly after startup (first thing in > main). Why do this in Emacs? Because that's the easiest way to prevent > execve. When installing a seccomp filter in a separate process, execve > needs to be allowed because otherwise there'd be no way to execute the > Emacs binary. While there are workarounds (ptrace, LD_PRELOAD), it's > easiest to install the seccomp filter directly in the Emacs process. I've attached a patch for this. --0000000000004c40a805b6d54284 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-support-for-seccomp-command-line-option.patch" Content-Disposition: attachment; filename="0001-Add-support-for-seccomp-command-line-option.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiw0xspy0 RnJvbSA4MGZjMGFiOTJlMWYwMjVhOGE0MTA0N2Q3OTA5YmU2YTk3ZjViMDlhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IE1vbiwgMTQgRGVjIDIwMjAgMjE6MjU6MTEgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQg c3VwcG9ydCBmb3IgLS1zZWNjb21wIGNvbW1hbmQtbGluZSBvcHRpb24uCgpXaGVuIHBhc3Npbmcg dGhpcyBvcHRpb24gb24gR05VL0xpbnV4LCBFbWFjcyBpbnN0YWxscyBhIFNlY3VyZQpDb21wdXRp bmcga2VybmVsIHN5c3RlbSBjYWxsIGZpbHRlci4gIFNlZSBCdWcjNDUxOTguCgoqIGNvbmZpZ3Vy ZS5hYzogQ2hlY2sgZm9yIHNlY2NvbXAgaGVhZGVyLgoKKiBzcmMvZW1hY3MuYyAodXNhZ2VfbWVz c2FnZSk6IERvY3VtZW50IC0tc2VjY29tcCBvcHRpb24uCihlbWFjc19zZWNjb21wKTogTmV3IHdy YXBwZXIgZm9yICdzZWNjb21wJyBzeXNjYWxsLgoobG9hZF9zZWNjb21wLCBtYXliZV9sb2FkX3Nl Y2NvbXAsIHJlYWRfZnVsbCk6IE5ldyBoZWxwZXIgZnVuY3Rpb25zLgoobWFpbik6IFBvdGVudGlh bGx5IGxvYWQgc2VjY29tcCBmaWx0ZXJzIGR1cmluZyBzdGFydHVwLgooc3RhbmRhcmRfYXJncyk6 IEFkZCAtLXNlY2NvbXAgb3B0aW9uLgoKKiBsaXNwL3N0YXJ0dXAuZWwgKGNvbW1hbmQtbGluZSk6 IERldGVjdCBhbmQgaWdub3JlIC0tc2VjY29tcCBvcHRpb24uCgoqIHRlc3Qvc3JjL2VtYWNzLXRl c3RzLmVsIChlbWFjcy10ZXN0cy9zZWNjb21wL2Fic2VudC1maWxlKQooZW1hY3MtdGVzdHMvc2Vj Y29tcC9lbXB0eS1maWxlKQooZW1hY3MtdGVzdHMvc2VjY29tcC9pbnZhbGlkLWZpbGUtc2l6ZSk6 IE5ldyB1bml0IHRlc3RzLgooZW1hY3MtdGVzdHMtLXdpdGgtdGVtcC1maWxlKTogTmV3IGhlbHBl ciBtYWNyby4KCiogZXRjL05FV1M6IERvY3VtZW50IG5ldyAtLXNlY2NvbXAgb3B0aW9uLgotLS0K IGNvbmZpZ3VyZS5hYyAgICAgICAgICAgIHwgICAyICsKIGV0Yy9ORVdTICAgICAgICAgICAgICAg IHwgIDEwICsrKwogbGlzcC9zdGFydHVwLmVsICAgICAgICAgfCAgIDQgKy0KIHNyYy9lbWFjcy5j ICAgICAgICAgICAgIHwgMTY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIHRlc3Qvc3JjL2VtYWNzLXRlc3RzLmVsIHwgIDg2ICsrKysrKysrKysrKysrKysrKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDI2NyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3Qvc3JjL2VtYWNzLXRlc3RzLmVsCgpkaWZmIC0tZ2l0IGEvY29uZmln dXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDg4OGI0MTUxNDguLjA4N2RkNjdlMTggMTAwNjQ0 Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTQxODQsNiArNDE4NCw4 IEBAIEFDX0RFRlVOCiBBQ19TVUJTVChbQkxFU1NNQUlMX1RBUkdFVF0pCiBBQ19TVUJTVChbTElC U19NQUlMXSkKIAorQUNfQ0hFQ0tfSEVBREVSUyhbbGludXgvc2VjY29tcC5oXSkKKwogT0xEX0xJ QlM9JExJQlMKIExJQlM9IiRMSUJfUFRIUkVBRCAkTElCX01BVEggJExJQlMiCiBBQ19DSEVDS19G VU5DUyhhY2NlcHQ0IGZjaGRpciBnZXRob3N0bmFtZSBcCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBi L2V0Yy9ORVdTCmluZGV4IDRhOGU3MGU2YTYuLmJkMjU1ZmFjYTQgMTAwNjQ0Ci0tLSBhL2V0Yy9O RVdTCisrKyBiL2V0Yy9ORVdTCkBAIC04Miw2ICs4MiwxNiBAQCBsYWNrcyB0aGUgdGVybWluZm8g ZGF0YWJhc2UsIHlvdSBjYW4gaW5zdHJ1Y3QgRW1hY3MgdG8gc3VwcG9ydCAyNC1iaXQKIHRydWUg Y29sb3IgYnkgc2V0dGluZyAnQ09MT1JURVJNPXRydWVjb2xvcicgaW4gdGhlIGVudmlyb25tZW50 LiAgVGhpcyBpcwogdXNlZnVsIG9uIHN5c3RlbXMgc3VjaCBhcyBGcmVlQlNEIHdoaWNoIHNoaXBz IG9ubHkgd2l0aCAiZXRjL3Rlcm1jYXAiLgogCisqKiBPbiBHTlUvTGludXggc3lzdGVtcywgRW1h Y3Mgbm93IHN1cHBvcnRzIGxvYWRpbmcgYSBTZWN1cmUgQ29tcHV0aW5nCitmaWx0ZXIuICBUbyB1 c2UgdGhpcywgeW91IGNhbiBwYXNzIGEgLS1zZWNjb21wPUZJTEUgY29tbWFuZC1saW5lCitvcHRp b24gdG8gRW1hY3MuICBGSUxFIG11c3QgbmFtZSBhIGJpbmFyeSBmaWxlIGNvbnRhaW5pbmcgYW4g YXJyYXkgb2YKKydzdHJ1Y3Qgc29ja19maWx0ZXInIHN0cnVjdHVyZXMuICBFbWFjcyB3aWxsIHRo ZW4gaW5zdGFsbCB0aGF0IGxpc3Qgb2YKK1NlY3VyZSBDb21wdXRpbmcgZmlsdGVycyBpbnRvIGl0 cyBvd24gcHJvY2VzcyBlYXJseSBkdXJpbmcgdGhlIHN0YXJ0dXAKK3Byb2Nlc3MuICBZb3UgY2Fu IHVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gcHV0IGFuIEVtYWNzIHByb2Nlc3MgaW4gYQorc2Fu ZGJveCB0byBhdm9pZCBzZWN1cml0eSBpc3N1ZXMgd2hlbiBleGVjdXRpbmcgdW50cnVzdGVkIGNv ZGUuICBTZWUKK3RoZSBtYW51YWwgcGFnZSBmb3IgJ3NlY2NvbXAnIGZvciBkZXRhaWxzIGFib3V0 IFNlY3VyZSBDb21wdXRpbmcKK2ZpbHRlcnMuCisKIAwKICogQ2hhbmdlcyBpbiBFbWFjcyAyOC4x CiAKZGlmZiAtLWdpdCBhL2xpc3Avc3RhcnR1cC5lbCBiL2xpc3Avc3RhcnR1cC5lbAppbmRleCBi MTEyOGY2ZDAyLi45YjEzNDZlNDQ4IDEwMDY0NAotLS0gYS9saXNwL3N0YXJ0dXAuZWwKKysrIGIv bGlzcC9zdGFydHVwLmVsCkBAIC0xMDk0LDcgKzEwOTQsNyBAQCBjb21tYW5kLWxpbmUKICAgICAg ICAgICAgICAgICAgICAgICAgICAoIi0tbm8teC1yZXNvdXJjZXMiKSAoIi0tZGVidWctaW5pdCIp CiAgICAgICAgICAgICAgICAgICAgICAgICAgKCItLXVzZXIiKSAoIi0taWNvbmljIikgKCItLWlj b24tdHlwZSIpICgiLS1xdWljayIpCiAJCQkgKCItLW5vLWJsaW5raW5nLWN1cnNvciIpICgiLS1i YXNpYy1kaXNwbGF5IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAoIi0tZHVtcC1maWxlIikg KCItLXRlbWFjcyIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAoIi0tZHVtcC1maWxlIikg KCItLXRlbWFjcyIpICgiLS1zZWNjb21wIikpKQogICAgICAgICAgICAgIChhcmdpIChwb3AgYXJn cykpCiAgICAgICAgICAgICAgKG9yaWctYXJnaSBhcmdpKQogICAgICAgICAgICAgIGFyZ3ZhbCkK QEAgLTExNDYsNyArMTE0Niw3IEBAIGNvbW1hbmQtbGluZQogCSAgKHB1c2ggJyh2aXNpYmlsaXR5 IC4gaWNvbikgaW5pdGlhbC1mcmFtZS1hbGlzdCkpCiAJICgobWVtYmVyIGFyZ2kgJygiLW5iYyIg Ii1uby1ibGlua2luZy1jdXJzb3IiKSkKIAkgIChzZXRxIG5vLWJsaW5raW5nLWN1cnNvciB0KSkK LSAgICAgICAgICgobWVtYmVyIGFyZ2kgJygiLWR1bXAtZmlsZSIgIi10ZW1hY3MiKSkgIDsgSGFu ZGxlZCBpbiBDCisgICAgICAgICAoKG1lbWJlciBhcmdpICcoIi1kdW1wLWZpbGUiICItdGVtYWNz IiAiLXNlY2NvbXAiKSkgIDsgSGFuZGxlZCBpbiBDCiAgICAgICAgICAgKG9yIGFyZ3ZhbCAocG9w IGFyZ3MpKQogICAgICAgICAgIChzZXRxIGFyZ3ZhbCBuaWwpKQogCSA7OyBQdXNoIHRoZSBwb3Bw ZWQgYXJnIGJhY2sgb24gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLgpkaWZmIC0tZ2l0IGEvc3JjL2Vt YWNzLmMgYi9zcmMvZW1hY3MuYwppbmRleCAyYTMyMDgzYmExLi4wYTkzOWZjOTAxIDEwMDY0NAot LS0gYS9zcmMvZW1hY3MuYworKysgYi9zcmMvZW1hY3MuYwpAQCAtNjEsNiArNjEsMTMgQEAgI2Rl ZmluZSBNQUlOX1BST0dSQU0KICMgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAKKyNp ZmRlZiBIQVZFX0xJTlVYX1NFQ0NPTVBfSAorIyBpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+Cisj IGluY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorIyBpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyMgaW5j bHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9XSU5ET1dfU1lTVEVN CiAjaW5jbHVkZSBURVJNX0hFQURFUgogI2VuZGlmIC8qIEhBVkVfV0lORE9XX1NZU1RFTSAqLwpA QCAtMjM5LDYgKzI0NiwxMSBAQCAjZGVmaW5lIE1BSU5fUFJPR1JBTQogICAgICJcCiAtLWR1bXAt ZmlsZSBGSUxFICAgICAgICAgICAgcmVhZCBkdW1wZWQgc3RhdGUgZnJvbSBGSUxFXG5cCiAiLAor I2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9TRUNDT01QX0gKKyAgICAiXAorLS1zYW5kYm94PUZJ TEUgICAgICAgICAgICAgIHJlYWQgU2VjY29tcCBCUEYgZmlsdGVyIGZyb20gRklMRVxuXAorIgog I2VuZGlmCiAgICAgIlwKIC0tbm8tYnVpbGQtZGV0YWlscyAgICAgICAgICBkbyBub3QgYWRkIGJ1 aWxkIGRldGFpbHMgc3VjaCBhcyB0aW1lIHN0YW1wc1xuXApAQCAtOTM3LDYgKzk0OSwxNTAgQEAg bG9hZF9wZHVtcCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogfQogI2VuZGlmIC8qIEhBVkVfUERV TVBFUiAqLwogCisjaWZkZWYgSEFWRV9MSU5VWF9TRUNDT01QX0gKKworLyogV3JhcHBlciBmdW5j dGlvbiBmb3IgdGhlIGBzZWNjb21wJyBzeXN0ZW0gY2FsbCBvbiBHTlUvTGludXguICBUaGlzIHN5 c3RlbQorICAgY2FsbCB1c3VhbGx5IGRvZXNuJ3QgaGF2ZSBhIHdyYXBwZXIgZnVuY3Rpb24uICBT ZWUgdGhlIG1hbnVhbCBwYWdlIG9mCisgICBgc2VjY29tcCcgZm9yIHRoZSBzaWduYXR1cmUuICAq LworCitzdGF0aWMgaW50CitlbWFjc19zZWNjb21wICh1bnNpZ25lZCBpbnQgb3BlcmF0aW9uLCB1 bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKmFyZ3MpCit7CisjaWZkZWYgU1lTX3NlY2NvbXAKKyAg cmV0dXJuIHN5c2NhbGwgKFNZU19zZWNjb21wLCBvcGVyYXRpb24sIGZsYWdzLCBhcmdzKTsKKyNl bHNlCisgIGVycm5vID0gRU5PU1lTOworICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworLyogUmVh ZCBleGFjdGx5IFNJWkUgYnl0ZXMgaW50byBCVUZGRVIuICBSZXR1cm4gZmFsc2Ugb24gc2hvcnQg cmVhZC4gICovCisKK3N0YXRpYyBib29sCityZWFkX2Z1bGwgKGludCBmZCwgdm9pZCAqYnVmZmVy LCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKFNTSVpFX01BWCA8IHNpemUpCisgICAgeworICAgICAg ZXJybm8gPSBFRkJJRzsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIGNoYXIgKnB0ciA9 IGJ1ZmZlcjsKKyAgd2hpbGUgKHNpemUgIT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBjYW4ndCB1 c2UgYGVtYWNzX3JlYWQnIHlldCBiZWNhdXNlIHF1aXR0aW5nIGRvZXNuJ3Qgd29yayBoZXJlCisg ICAgICAgICB5ZXQuICAqLworICAgICAgc3NpemVfdCByZXQgPSBURU1QX0ZBSUxVUkVfUkVUUlkg KHJlYWQgKGZkLCBwdHIsIHNpemUpKTsKKyAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgICBpZiAocmV0ID09IDApCisgICAgICAgIGJyZWFrOyAgLyogQXZvaWQg aW5maW5pdGUgbG9vcCBvbiBlbmNvdW50ZXJpbmcgRU9GLiAgKi8KKyAgICAgIGVhc3NlcnQgKHJl dCA8PSBzaXplKTsKKyAgICAgIHNpemUgLT0gcmV0OworICAgICAgcHRyICs9IHJldDsKKyAgICB9 CisgIGlmIChzaXplICE9IDApCisgICAgZXJybm8gPSBFTk9EQVRBOworICByZXR1cm4gc2l6ZSA9 PSAwOworfQorCisvKiBBdHRlbXB0IHRvIGxvYWQgU2VjdXJlIENvbXB1dGluZyBmaWx0ZXJzIGZy b20gRklMRS4gIFJldHVybiBmYWxzZSBpZiB0aGF0CisgICBkb2Vzbid0IHdvcmsgZm9yIHNvbWUg cmVhc29uLiAgKi8KKworc3RhdGljIGJvb2wKK2xvYWRfc2VjY29tcCAoY29uc3QgY2hhciAqZmls ZSkKK3sKKyAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgIHN0cnVjdCBzb2NrX2Zwcm9nIHByb2dy YW0gPSB7MCwgTlVMTH07CisgIC8qIFdlIGNhbid0IHVzZSBgZW1hY3Nfb3BlbicgeWV0IGJlY2F1 c2UgcXVpdHRpbmcgZG9lc24ndCB3b3JrIGhlcmUgeWV0LiAgKi8KKyAgaW50IGZkID0gVEVNUF9G QUlMVVJFX1JFVFJZIChvcGVuIChmaWxlLCBPX1JET05MWSB8IE9fQklOQVJZIHwgT19DTE9FWEVD KSk7CisgIGlmIChmZCA8IDApCisgICAgeworICAgICAgZW1hY3NfcGVycm9yICgib3BlbiIpOwor ICAgICAgZ290byBvdXQ7CisgICAgfQorICBzdHJ1Y3Qgc3RhdCBzdGF0OworICBpZiAoZnN0YXQg KGZkLCAmc3RhdCkgPCAwKQorICAgIHsKKyAgICAgIGVtYWNzX3BlcnJvciAoImZzdGF0Iik7Cisg ICAgICBnb3RvIG91dDsKKyAgICB9CisgIGlmIChzdGF0LnN0X3NpemUgPD0gMCB8fCBTSVpFX01B WCA8IHN0YXQuc3Rfc2l6ZQorICAgICAgfHwgKHNpemVfdCkgc3RhdC5zdF9zaXplICUgc2l6ZW9m ICpwcm9ncmFtLmZpbHRlciAhPSAwKQorICAgIHsKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInNl Y2NvbXAgZmlsdGVyICVzIGhhcyBpbnZhbGlkIHNpemUgJWpkXG4iLCBmaWxlLAorICAgICAgICAg ICAgICAgKGludG1heF90KSBzdGF0LnN0X3NpemUpOworICAgICAgZ290byBvdXQ7CisgICAgfQor ICBzaXplX3Qgc2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKyAgc2l6ZV90IGNvdW50ID0gc2l6ZSAvIHNp emVvZiAqcHJvZ3JhbS5maWx0ZXI7CisgIGVhc3NlcnQgKDAgPCBzaXplICYmIDAgPCBjb3VudCk7 CisgIGlmIChVU0hSVF9NQVggPCBjb3VudCkKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIs ICJzZWNjb21wIGZpbHRlciAlcyBpcyB0b28gYmlnIiwgZmlsZSk7CisgICAgICBnb3RvIG91dDsK KyAgICB9CisgIHByb2dyYW0ubGVuID0gY291bnQ7CisgIHByb2dyYW0uZmlsdGVyID0gbWFsbG9j IChzaXplKTsKKyAgaWYgKHByb2dyYW0uZmlsdGVyID09IE5VTEwpCisgICAgeworICAgICAgZW1h Y3NfcGVycm9yICgibWFsbG9jIik7CisgICAgICBnb3RvIG91dDsKKyAgICB9CisgIGlmICghcmVh ZF9mdWxsIChmZCwgcHJvZ3JhbS5maWx0ZXIsIHNpemUpKQorICAgIHsKKyAgICAgIGVtYWNzX3Bl cnJvciAoInJlYWQiKTsKKyAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgaWYgKGNsb3NlIChmZCkg IT0gMCkKKyAgICBlbWFjc19wZXJyb3IgKCJjbG9zZSIpOyAgLyogbm90IGNyaXRpY2FsICovCisg IGZkID0gLTE7CisKKyAgLyogU2VlIG1hbiBwYWdlIG9mIGBzZWNjb21wJyB3aHkgdGhpcyBpcyBu ZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UKKyAgICAgaW50ZW50aW9uYWxseSBkb24ndCBjaGVjayB0 aGUgcmV0dXJuIHZhbHVlOiBhIHBhcmVudCBwcm9jZXNzIG1pZ2h0IGhhdmUKKyAgICAgbWFkZSB0 aGlzIGNhbGwgYmVmb3JlLCBpbiB3aGljaCBjYXNlIGl0IHdvdWxkIGZhaWw7IG9yLCBpZiBlbmFi bGluZworICAgICBwcml2aWxlZ2UtcmVzdHJpY3RpbmcgbW9kZSBmYWlscywgdGhlIGBzZWNjb21w JyBzeXNjYWxsIHdpbGwgZmFpbAorICAgICBhbnl3YXkuICAqLworICBwcmN0bCAoUFJfU0VUX05P X05FV19QUklWUywgMSwgMCwgMCwgMCk7CisgIC8qIEluc3RhbGwgdGhlIGZpbHRlci4gIE1ha2Ug c3VyZSB0aGF0IHBvdGVudGlhbCBvdGhlciB0aHJlYWRzIGNhbid0IGVzY2FwZQorICAgICBpdC4g ICovCisgIGlmIChlbWFjc19zZWNjb21wIChTRUNDT01QX1NFVF9NT0RFX0ZJTFRFUiwgU0VDQ09N UF9GSUxURVJfRkxBR19UU1lOQywKKyAgICAgICAgICAgICAgICAgICAgICZwcm9ncmFtKQorICAg ICAgIT0gMCkKKyAgICB7CisgICAgICBlbWFjc19wZXJyb3IgKCJzZWNjb21wIik7CisgICAgICBn b3RvIG91dDsKKyAgICB9CisgIHN1Y2Nlc3MgPSB0cnVlOworCisgb3V0OgorICBmcmVlIChwcm9n cmFtLmZpbHRlcik7CisgIGNsb3NlIChmZCk7CisgIHJldHVybiBzdWNjZXNzOworfQorCisvKiBM b2FkIFNlY3VyZSBDb21wdXRpbmcgZmlsdGVyIGZyb20gZmlsZSBzcGVjaWZpZWQgd2l0aCB0aGUg LS1zZWNjb21wIG9wdGlvbi4KKyAgIEV4aXQgaWYgdGhhdCBmYWlscy4gICovCisKK3N0YXRpYyB2 b2lkCittYXliZV9sb2FkX3NlY2NvbXAgKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50 IHNraXBfYXJncyA9IDA7CisgIGNoYXIgKmZpbGUgPSBOVUxMOworICB3aGlsZSAoc2tpcF9hcmdz IDwgYXJnYyAtIDEpCisgICAgeworICAgICAgaWYgKGFyZ21hdGNoIChhcmd2LCBhcmdjLCAiLXNl Y2NvbXAiLCAiLS1zZWNjb21wIiwgOSwgJmZpbGUsICZza2lwX2FyZ3MpCisgICAgICAgICAgfHwg YXJnbWF0Y2ggKGFyZ3YsIGFyZ2MsICItLSIsIE5VTEwsIDIsIE5VTEwsICZza2lwX2FyZ3MpKQor ICAgICAgICBicmVhazsKKyAgICAgICsrc2tpcF9hcmdzOworICAgIH0KKyAgaWYgKGZpbGUgPT0g TlVMTCkKKyAgICByZXR1cm47CisgIGlmICghbG9hZF9zZWNjb21wIChmaWxlKSkKKyAgICBmYXRh bCAoImNhbm5vdCBlbmFibGUgc2VjY29tcCBmaWx0ZXIgZnJvbSAlcyIsIGZpbGUpOworfQorCisj ZW5kaWYgIC8qIEhBVkVfTElOVVhfU0VDQ09NUF9IICovCisKIGludAogbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogewpAQCAtOTQ0LDYgKzExMDAsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogICAgICBmb3IgcG9pbnRlcnMuICAqLwogICB2b2lkICpzdGFja19ib3R0b21f dmFyaWFibGU7CiAKKyAgLyogRmlyc3QsIGNoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGFwcGx5IGEg c2VjY29tcCBmaWx0ZXIuICBUaGlzIHNob3VsZCBjb21lIGF0CisgICAgIHRoZSB2ZXJ5IGJlZ2lu bmluZyB0byBhbGxvdyB0aGUgZmlsdGVyIHRvIHByb3RlY3QgdGhlIGluaXRpYWxpemF0aW9uCisg ICAgIHBoYXNlLiAgKi8KKyNpZmRlZiBIQVZFX0xJTlVYX1NFQ0NPTVBfSAorICBtYXliZV9sb2Fk X3NlY2NvbXAgKGFyZ2MsIGFyZ3YpOworI2VuZGlmCisKICAgYm9vbCBub19sb2FkdXAgPSBmYWxz ZTsKICAgY2hhciAqanVuayA9IDA7CiAgIGNoYXIgKmRuYW1lX2FyZyA9IDA7CkBAIC0yMTM3LDEy ICsyMzAwLDE1IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgeyAiLWNvbG9yIiwg Ii0tY29sb3IiLCA1LCAwfSwKICAgeyAiLW5vLXNwbGFzaCIsICItLW5vLXNwbGFzaCIsIDMsIDAg fSwKICAgeyAiLW5vLWRlc2t0b3AiLCAiLS1uby1kZXNrdG9wIiwgMywgMCB9LAotICAvKiBUaGUg Zm9sbG93aW5nIHR3byBtdXN0IGJlIGp1c3QgYWJvdmUgdGhlIGZpbGUtbmFtZSBhcmdzLCB0byBn ZXQKKyAgLyogVGhlIGZvbGxvd2luZyB0aHJlZSBtdXN0IGJlIGp1c3QgYWJvdmUgdGhlIGZpbGUt bmFtZSBhcmdzLCB0byBnZXQKICAgICAgdGhlbSBvdXQgb2Ygb3VyIHdheSwgYnV0IHdpdGhvdXQg bWl4aW5nIHRoZW0gd2l0aCBmaWxlIG5hbWVzLiAgKi8KICAgeyAiLXRlbWFjcyIsICItLXRlbWFj cyIsIDEsIDEgfSwKICNpZmRlZiBIQVZFX1BEVU1QRVIKICAgeyAiLWR1bXAtZmlsZSIsICItLWR1 bXAtZmlsZSIsIDEsIDEgfSwKICNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfU0VDQ09NUF9ICisg IHsgIi1zZWNjb21wIiwgIi0tc2VjY29tcCIsIDEsIDEgfSwKKyNlbmRpZgogI2lmZGVmIEhBVkVf TlMKICAgeyAiLU5TQXV0b0xhdW5jaCIsIDAsIDUsIDEgfSwKICAgeyAiLU5YQXV0b0xhdW5jaCIs IDAsIDUsIDEgfSwKZGlmZiAtLWdpdCBhL3Rlc3Qvc3JjL2VtYWNzLXRlc3RzLmVsIGIvdGVzdC9z cmMvZW1hY3MtdGVzdHMuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u Mjc5ZWNiMjEwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qvc3JjL2VtYWNzLXRlc3RzLmVsCkBA IC0wLDAgKzEsODYgQEAKKzs7OyBlbWFjcy10ZXN0cy5lbCAtLS0gdW5pdCB0ZXN0cyBmb3IgZW1h Y3MuYyAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAyMDIw ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgVGhpcyBmaWxlIGlzIHBhcnQg b2YgR05VIEVtYWNzLgorCis7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y Cis7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis7OyBHTlUgRW1hY3Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZQorOzsgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNl ZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCis7OzsgQ29tbWVudGFyeToKKwor OzsgVW5pdCB0ZXN0cyBmb3Igc3JjL2VtYWNzLmMuCisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAn Y2wtbGliKQorKHJlcXVpcmUgJ2VydCkKKworKGVydC1kZWZ0ZXN0IGVtYWNzLXRlc3RzL3NlY2Nv bXAvYWJzZW50LWZpbGUgKCkKKyAgKGxldCAoKGVtYWNzIChleHBhbmQtZmlsZS1uYW1lIGludm9j YXRpb24tbmFtZSBpbnZvY2F0aW9uLWRpcmVjdG9yeSkpCisgICAgICAgIChwcm9jZXNzLWVudmly b25tZW50IG5pbCkpCisgICAgKHNraXAtdW5sZXNzIChmaWxlLWV4ZWN1dGFibGUtcCBlbWFjcykp CisgICAgKHNob3VsZC1ub3QgKGZpbGUtZXhpc3RzLXAgIi9kb2VzLW5vdC1leGlzdC5icGYiKSkK KyAgICAoc2hvdWxkLW5vdAorICAgICAoZXFsIChjYWxsLXByb2Nlc3MgZW1hY3MgbmlsIG5pbCBu aWwKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXF1aWNrIiAiLS1iYXRjaCIgIi0tc2VjY29t cD0vZG9lcy1ub3QtZXhpc3QuYnBmIikKKyAgICAgICAgICAwKSkpKQorCisoY2wtZGVmbWFjcm8g ZW1hY3MtdGVzdHMtLXdpdGgtdGVtcC1maWxlCisgICAgKHZhciAocHJlZml4ICZvcHRpb25hbCBz dWZmaXggdGV4dCkgJnJlc3QgYm9keSkKKyAgIkV2YWx1YXRlIEJPRFkgd2hpbGUgYSBuZXcgdGVt cG9yYXJ5IGZpbGUgZXhpc3RzLgorQmluZCBWQVIgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUuICBQ YXNzIFBSRUZJWCwgU1VGRklYLCBhbmQgVEVYVAordG8gYG1ha2UtdGVtcC1maWxlJywgd2hpY2gg c2VlLiIKKyAgKGRlY2xhcmUgKGluZGVudCAyKSAoZGVidWcgKHN5bWJvbHAgKGZvcm0gZm9ybSBm b3JtKSBib2R5KSkpCisgIChjbC1jaGVjay10eXBlIHZhciBzeW1ib2wpCisgIDs7IFVzZSBhbiB1 bmludGVybmVkIHN5bWJvbCBzbyB0aGF0IHRoZSBjb2RlIHN0aWxsIHdvcmtzIGlmIEJPRFkgY2hh bmdlcyBWQVIuCisgIChsZXQgKChmaWxlbmFtZSAobWFrZS1zeW1ib2wgImZpbGVuYW1lIikpKQor ICAgIGAobGV0ICgoLGZpbGVuYW1lIChtYWtlLXRlbXAtZmlsZSAscHJlZml4IG5pbCAsc3VmZml4 ICx0ZXh0KSkpCisgICAgICAgKHVud2luZC1wcm90ZWN0CisgICAgICAgICAgIChsZXQgKCgsdmFy ICxmaWxlbmFtZSkpCisgICAgICAgICAgICAgLEBib2R5KQorICAgICAgICAgKGRlbGV0ZS1maWxl ICxmaWxlbmFtZSkpKSkpCisKKyhlcnQtZGVmdGVzdCBlbWFjcy10ZXN0cy9zZWNjb21wL2VtcHR5 LWZpbGUgKCkKKyAgKGxldCAoKGVtYWNzIChleHBhbmQtZmlsZS1uYW1lIGludm9jYXRpb24tbmFt ZSBpbnZvY2F0aW9uLWRpcmVjdG9yeSkpCisgICAgICAgIChwcm9jZXNzLWVudmlyb25tZW50IG5p bCkpCisgICAgKHNraXAtdW5sZXNzIChmaWxlLWV4ZWN1dGFibGUtcCBlbWFjcykpCisgICAgKGVt YWNzLXRlc3RzLS13aXRoLXRlbXAtZmlsZSBmaWx0ZXIgKCJzZWNjb21wLWludmFsaWQtIiAiLmJw ZiIpCisgICAgICA7OyBUaGUgLS1zZWNjb21wIG9wdGlvbiBpcyBwcm9jZXNzZWQgZWFybHksIHdp dGhvdXQgZmlsZW5hbWUgaGFuZGxlcnMuCisgICAgICA7OyBUaGVyZWZvcmUgcmVtb3RlIG9yIHF1 b3RlZCBmaWxlbmFtZXMgd291bGRuJ3Qgd29yay4KKyAgICAgIChzaG91bGQtbm90IChmaWxlLXJl bW90ZS1wIGZpbHRlcikpCisgICAgICAoY2wtY2FsbGYgZmlsZS1uYW1lLXVucXVvdGUgZmlsdGVy KQorICAgICAgOzsgQWNjb3JkaW5nIHRvIHRoZSBTZWNjb21wIG1hbiBwYWdlLCBhIGZpbHRlciBt dXN0IGhhdmUgYXQgbGVhc3Qgb25lCisgICAgICA7OyBlbGVtZW50LCBzbyBFbWFjcyBzaG91bGQg cmVqZWN0IGFuIGVtcHR5IGZpbGUuCisgICAgICAoc2hvdWxkLW5vdAorICAgICAgIChlcWwgKGNh bGwtcHJvY2VzcyBlbWFjcyBuaWwgbmlsIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAi LS1xdWljayIgIi0tYmF0Y2giIChjb25jYXQgIi0tc2VjY29tcD0iIGZpbHRlcikpCisgICAgICAg ICAgICAwKSkpKSkKKworKGVydC1kZWZ0ZXN0IGVtYWNzLXRlc3RzL3NlY2NvbXAvaW52YWxpZC1m aWxlLXNpemUgKCkKKyAgKGxldCAoKGVtYWNzIChleHBhbmQtZmlsZS1uYW1lIGludm9jYXRpb24t bmFtZSBpbnZvY2F0aW9uLWRpcmVjdG9yeSkpCisgICAgICAgIChwcm9jZXNzLWVudmlyb25tZW50 IG5pbCkpCisgICAgKHNraXAtdW5sZXNzIChmaWxlLWV4ZWN1dGFibGUtcCBlbWFjcykpCisgICAg KGVtYWNzLXRlc3RzLS13aXRoLXRlbXAtZmlsZSBmaWx0ZXIgKCJzZWNjb21wLWludmFsaWQtIiAi LmJwZiIgIjEyMzQ1NiIpCisgICAgICA7OyBUaGUgLS1zZWNjb21wIG9wdGlvbiBpcyBwcm9jZXNz ZWQgZWFybHksIHdpdGhvdXQgZmlsZW5hbWUgaGFuZGxlcnMuCisgICAgICA7OyBUaGVyZWZvcmUg cmVtb3RlIG9yIHF1b3RlZCBmaWxlbmFtZXMgd291bGRuJ3Qgd29yay4KKyAgICAgIChzaG91bGQt bm90IChmaWxlLXJlbW90ZS1wIGZpbHRlcikpCisgICAgICAoY2wtY2FsbGYgZmlsZS1uYW1lLXVu cXVvdGUgZmlsdGVyKQorICAgICAgOzsgVGhlIFNlY2NvbXAgZmlsdGVyIGZpbGUgbXVzdCBoYXZl IGEgZmlsZSBzaXplIHRoYXQncyBhIG11bHRpcGxlIG9mIHRoZQorICAgICAgOzsgc2l6ZSBvZiBz dHJ1Y3Qgc29ja19maWx0ZXIsIHdoaWNoIGlzIDggb3IgMTYsIGJ1dCBuZXZlciA2LgorICAgICAg KHNob3VsZC1ub3QKKyAgICAgICAoZXFsIChjYWxsLXByb2Nlc3MgZW1hY3MgbmlsIG5pbCBuaWwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcXVpY2siICItLWJhdGNoIiAoY29uY2F0ICIt LXNlY2NvbXA9IiBmaWx0ZXIpKQorICAgICAgICAgICAgMCkpKSkpCisKKzs7OyBlbWFjcy10ZXN0 cy5lbCBlbmRzIGhlcmUKLS0gCjIuMjkuMi43MjkuZzQ1ZGFmODc3N2QtZ29vZwoK --0000000000004c40a805b6d54284--