From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FC6AC31E4B for ; Fri, 14 Jun 2019 15:36:23 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E53232173C for ; Fri, 14 Jun 2019 15:36:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E53232173C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hboFN-0006S5-U6; Fri, 14 Jun 2019 15:36:09 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1hboFL-0006Rx-Ka for xen-devel@lists.xenproject.org; Fri, 14 Jun 2019 15:36:07 +0000 X-Inumbo-ID: 1da5a004-8eba-11e9-91f4-fff24d50e22d Received: from prv1-mh.provo.novell.com (unknown [137.65.248.33]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 1da5a004-8eba-11e9-91f4-fff24d50e22d; Fri, 14 Jun 2019 15:36:03 +0000 (UTC) Received: from INET-PRV1-MTA by prv1-mh.provo.novell.com with Novell_GroupWise; Fri, 14 Jun 2019 09:36:02 -0600 Message-Id: <5D03BEDE0200007800238613@prv1-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 18.1.1 Date: Fri, 14 Jun 2019 09:35:58 -0600 From: "Jan Beulich" To: "xen-devel" References: <5D03BE5102000078002385FE@prv1-mh.provo.novell.com> In-Reply-To: <5D03BE5102000078002385FE@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Disposition: inline Subject: [Xen-devel] [PATCH 1/4] x86/mcheck: allow varying bank counts per CPU X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: George Dunlap , Andrew Cooper , WeiLiu , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" VXAgdG8gbm93IHdlJ3ZlIGJlZW4gYXNzdW1pbmcgdGhhdCBhbGwgQ1BVcyB3b3VsZCBoYXZlIHRo ZSBzYW1lIG51bWJlcgpvZiByZXBvcnRpbmcgYmFua3MuIEhvd2V2ZXIsIG9uIHVwY29taW5nIEFN RCBDUFVzIHRoaXMgaXNuJ3QgdGhlIGNhc2UsCmFuZCBvbmUgY2FuIG9ic2VydmUKCihYRU4pIG1j ZS5jOjY2NjogRGlmZmVyZW50IGJhbmsgbnVtYmVyIG9uIGNwdSA8Tj4KCmluZGljYXRpbmcgdGhh dCBNYWNoaW5lIENoZWNrIHN1cHBvcnQgd291bGQgbm90IGJlIGVuYWJsZWQgb24gdGhlCmFmZmVj dGVkIENQVXMuIENvbnZlcnQgdGhlIGNvdW50IHZhcmlhYmxlIHRvIGEgcGVyLUNQVSBvbmUsIGFu ZCBhZGp1c3QKY29kZSB3aGVyZSBuZWVkZWQgdG8gY29wZSB3aXRoIHRoZSB2YWx1ZXMgbm90IGJl aW5nIHRoZSBzYW1lLiBJbgpwYXJ0aWN1bGFyIHRoZSBtY2FiYW5rc19hbGxvYygpIGludm9jYXRp b25zIGR1cmluZyBBUCBicmluZ3VwIG5lZWQgdG8Kbm93IGFsbG9jYXRlIG1heGltdW0tc2l6ZSBi aXRtYXBzLCBiZWNhdXNlIHRoZSB0cnVseSBuZWVkZWQgc2l6ZSBjYW4ndApiZSBrbm93biB1bnRp bCB3ZSBhY3R1YWxseSBleGVjdXRlIG9uIHRoYXQgQ1BVLCB5ZXQgbWNoZWNrX2luaXQoKSBnZXRz CmNhbGxlZCB0b28gZWFybHkgdG8gZG8gYW55IGFsbG9jYXRpb25zIGl0c2VsZi4KClRha2UgdGhl IGxpYmVydHkgYW5kIGFsc28KLSBtYWtlIG1jYV9jYXBfaW5pdCgpIHN0YXRpYywKLSByZXBsYWNl IHNldmVyYWwgX19nZXRfY3B1X3ZhcigpIHVzZXMgd2hlbiBhIGxvY2FsIHZhcmlhYmxlIHN1aXRh YmxlCiAgZm9yIHVzZSB3aXRoIHBlcl9jcHUoKSBhcHBlYXJzLAotIGNvcnJlY3Qgd2hpY2ggQ1BV J3MgY3B1X2RhdGFbXSBlbnRyeSB4ODZfbWNfbXNyaW5qZWN0X3ZlcmlmeSgpIHVzZXMsCi0gcmVw bGFjZSBhIEJVRygpIGJ5IHBhbmljKCkuCgpTaWduZWQtb2ZmLWJ5OiBKYW4gQmV1bGljaCA8amJl dWxpY2hAc3VzZS5jb20+CgotLS0gYS94ZW4vYXJjaC94ODYvY3B1L21jaGVjay9tY2UuYworKysg Yi94ZW4vYXJjaC94ODYvY3B1L21jaGVjay9tY2UuYwpAQCAtMzQsNyArMzQsNyBAQCBib29sIF9f cmVhZF9tb3N0bHkgb3B0X21jZSA9IHRydWU7CiBib29sZWFuX3BhcmFtKCJtY2UiLCBvcHRfbWNl KTsKIGJvb2wgX19yZWFkX21vc3RseSBtY2VfYnJvYWRjYXN0OwogYm9vbCBpc19tY19wYW5pYzsK LXVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG5yX21jZV9iYW5rczsKK0RFRklORV9QRVJfQ1BV X1JFQURfTU9TVExZKHVuc2lnbmVkIGludCwgbnJfbWNlX2JhbmtzKTsKIHVuc2lnbmVkIGludCBf X3JlYWRfbW9zdGx5IGZpcnN0YmFuazsKIHVpbnQ4X3QgX19yZWFkX21vc3RseSBjbWNpX2FwaWNf dmVjdG9yOwogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBtY2VfcmVjb3ZlcmFibGVfcmVnaXN0 ZXIobWNlX3JlY292ZQogICAgIG1jX3JlY292ZXJhYmxlX3NjYW4gPSBjYmZ1bmM7CiB9CiAKLXN0 cnVjdCBtY2FfYmFua3MgKm1jYWJhbmtzX2FsbG9jKHZvaWQpCitzdHJ1Y3QgbWNhX2JhbmtzICpt Y2FiYW5rc19hbGxvYyh1bnNpZ25lZCBpbnQgbnJfbWNlX2JhbmtzKQogewogICAgIHN0cnVjdCBt Y2FfYmFua3MgKm1iOwogCkBAIC0xMjgsNiArMTI4LDEzIEBAIHN0cnVjdCBtY2FfYmFua3MgKm1j YWJhbmtzX2FsbG9jKHZvaWQpCiAgICAgaWYgKCAhbWIgKQogICAgICAgICByZXR1cm4gTlVMTDsK IAorICAgIC8qCisgICAgICogRm9yIEFQcyBhbGxvY2F0aW9ucyBnZXQgZG9uZSBieSB0aGUgQlNQ LCBpLmUuIHdoZW4gdGhlIGJhbmsgY291bnQgbWF5CisgICAgICogbWF5IG5vdCBiZSBrbm93biB5 ZXQuIEEgemVybyBiYW5rIGNvdW50IGlzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiB0aGlzLgorICAg ICAqLworICAgIGlmICggIW5yX21jZV9iYW5rcyApCisgICAgICAgIG5yX21jZV9iYW5rcyA9IE1D R19DQVBfQ09VTlQ7CisKICAgICBtYi0+YmFua19tYXAgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVk IGxvbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRTX1RPX0xPTkdTKG5y X21jZV9iYW5rcykpOwogICAgIGlmICggIW1iLT5iYW5rX21hcCApCkBAIC0zMTksNyArMzI2LDcg QEAgbWNoZWNrX21jYV9sb2dvdXQoZW51bSBtY2Ffc291cmNlIHdobywgcwogICAgICAqLwogICAg IHJlY292ZXIgPSBtY19yZWNvdmVyYWJsZV9zY2FuID8gMSA6IDA7CiAKLSAgICBmb3IgKCBpID0g MDsgaSA8IG5yX21jZV9iYW5rczsgaSsrICkKKyAgICBmb3IgKCBpID0gMDsgaSA8IHRoaXNfY3B1 KG5yX21jZV9iYW5rcyk7IGkrKyApCiAgICAgewogICAgICAgICAvKiBTa2lwIGJhbmsgaWYgY29y cmVzcG9uZGluZyBiaXQgaW4gYmFua21hc2sgaXMgY2xlYXIgKi8KICAgICAgICAgaWYgKCAhbWNh YmFua3NfdGVzdChpLCBiYW5rbWFzaykgKQpAQCAtNTY1LDcgKzU3Miw3IEBAIHZvaWQgbWNoZWNr X21jYV9jbGVhcmJhbmtzKHN0cnVjdCBtY2FfYmEKIHsKICAgICBpbnQgaTsKIAotICAgIGZvciAo IGkgPSAwOyBpIDwgbnJfbWNlX2JhbmtzOyBpKysgKQorICAgIGZvciAoIGkgPSAwOyBpIDwgdGhp c19jcHUobnJfbWNlX2JhbmtzKTsgaSsrICkKICAgICB7CiAgICAgICAgIGlmICggIW1jYWJhbmtz X3Rlc3QoaSwgYmFua21hc2spICkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjM4LDU0ICs2 NDUsNTYgQEAgc3RhdGljIHZvaWQgc2V0X3BvbGxfYmFua21hc2soc3RydWN0IGNwdQogCiAgICAg aWYgKCBjbWNpX3N1cHBvcnQgJiYgb3B0X21jZSApCiAgICAgewotICAgICAgICBtYi0+bnVtID0g cGVyX2NwdShub19jbWNpX2JhbmtzLCBjcHUpLT5udW07Ci0gICAgICAgIGJpdG1hcF9jb3B5KG1i LT5iYW5rX21hcCwgcGVyX2NwdShub19jbWNpX2JhbmtzLCBjcHUpLT5iYW5rX21hcCwKLSAgICAg ICAgICAgICAgICAgICAgbnJfbWNlX2JhbmtzKTsKKyAgICAgICAgY29uc3Qgc3RydWN0IG1jYV9i YW5rcyAqY21jaSA9IHBlcl9jcHUobm9fY21jaV9iYW5rcywgY3B1KTsKKworICAgICAgICBpZiAo IHVubGlrZWx5KGNtY2ktPm51bSA8IG1iLT5udW0pICkKKyAgICAgICAgICAgIGJpdG1hcF9maWxs KG1iLT5iYW5rX21hcCwgbWItPm51bSk7CisgICAgICAgIGJpdG1hcF9jb3B5KG1iLT5iYW5rX21h cCwgY21jaS0+YmFua19tYXAsIG1pbihtYi0+bnVtLCBjbWNpLT5udW0pKTsKICAgICB9CiAgICAg ZWxzZQogICAgIHsKLSAgICAgICAgYml0bWFwX2NvcHkobWItPmJhbmtfbWFwLCBtY2FfYWxsYmFu a3MtPmJhbmtfbWFwLCBucl9tY2VfYmFua3MpOworICAgICAgICBiaXRtYXBfY29weShtYi0+YmFu a19tYXAsIG1jYV9hbGxiYW5rcy0+YmFua19tYXAsCisgICAgICAgICAgICAgICAgICAgIHBlcl9j cHUobnJfbWNlX2JhbmtzLCBjcHUpKTsKICAgICAgICAgaWYgKCBtY2VfZmlyc3RiYW5rKGMpICkK ICAgICAgICAgICAgIG1jYWJhbmtzX2NsZWFyKDAsIG1iKTsKICAgICB9CiB9CiAKIC8qIFRoZSBw ZXJiYW5rIGN0bC9zdGF0dXMgaW5pdCBpcyBwbGF0Zm9ybSBzcGVjaWZpYyBiZWNhdXNlIG9mIEFN RCdzIHF1aXJrICovCi1pbnQgbWNhX2NhcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IG1jYV9jYXBf aW5pdCh2b2lkKQogewogICAgIHVpbnQ2NF90IG1zcl9jb250ZW50OworICAgIHVuc2lnbmVkIGlu dCBuciwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAgICAgcmRtc3JsKE1TUl9JQTMyX01D R19DQVAsIG1zcl9jb250ZW50KTsKIAogICAgIGlmICggbXNyX2NvbnRlbnQgJiBNQ0dfQ1RMX1Ag KSAvKiBDb250cm9sIHJlZ2lzdGVyIHByZXNlbnQgPyAqLwogICAgICAgICB3cm1zcmwoTVNSX0lB MzJfTUNHX0NUTCwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKTsKIAotICAgIGlmICggbnJfbWNlX2Jh bmtzICYmIChtc3JfY29udGVudCAmIE1DR19DQVBfQ09VTlQpICE9IG5yX21jZV9iYW5rcyApCi0g ICAgewotICAgICAgICBkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRGlmZmVyZW50IGJhbmsgbnVt YmVyIG9uIGNwdSAleFxuIiwKLSAgICAgICAgICAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOwot ICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9Ci0gICAgbnJfbWNlX2JhbmtzID0gbXNyX2Nv bnRlbnQgJiBNQ0dfQ0FQX0NPVU5UOworICAgIHBlcl9jcHUobnJfbWNlX2JhbmtzLCBjcHUpID0g bnIgPSBNQVNLX0VYVFIobXNyX2NvbnRlbnQsIE1DR19DQVBfQ09VTlQpOwogCi0gICAgaWYgKCAh bnJfbWNlX2JhbmtzICkKKyAgICBpZiAoICFuciApCiAgICAgewotICAgICAgICBwcmludGsoWEVO TE9HX0lORk8gIkNQVSV1OiBObyBNQ0UgYmFua3MgcHJlc2VudC4gIgotICAgICAgICAgICAgICAg Ik1hY2hpbmUgY2hlY2sgc3VwcG9ydCBkaXNhYmxlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsK KyAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZPCisgICAgICAgICAgICAgICAiQ1BVJXU6IE5vIE1D RSBiYW5rcyBwcmVzZW50LiBNYWNoaW5lIGNoZWNrIHN1cHBvcnQgZGlzYWJsZWRcbiIsCisgICAg ICAgICAgICAgICBjcHUpOwogICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICB9CiAKICAgICAv KiBtY2FiYW5rc19hbGxvYyBkZXBlbmRzIG9uIG5yX21jZV9iYW5rcyAqLwotICAgIGlmICggIW1j YV9hbGxiYW5rcyApCisgICAgaWYgKCAhbWNhX2FsbGJhbmtzIHx8IG5yID4gbWNhX2FsbGJhbmtz LT5udW0gKQogICAgIHsKLSAgICAgICAgaW50IGk7CisgICAgICAgIHVuc2lnbmVkIGludCBpOwor ICAgICAgICBzdHJ1Y3QgbWNhX2JhbmtzICphbGwgPSBtY2FiYW5rc19hbGxvYyhucik7CiAKLSAg ICAgICAgbWNhX2FsbGJhbmtzID0gbWNhYmFua3NfYWxsb2MoKTsKLSAgICAgICAgZm9yICggaSA9 IDA7IGkgPCBucl9tY2VfYmFua3M7IGkrKyApCisgICAgICAgIGlmICggIWFsbCApCisgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucjsgaSsrICkK ICAgICAgICAgICAgIG1jYWJhbmtzX3NldChpLCBtY2FfYWxsYmFua3MpOworICAgICAgICBtY2Fi YW5rc19mcmVlKHhjaGcoJm1jYV9hbGxiYW5rcywgYWxsKSk7CiAgICAgfQogCi0gICAgcmV0dXJu IG1jYV9hbGxiYW5rcyA/IDAgOiAtRU5PTUVNOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMg dm9pZCBjcHVfYmFua19mcmVlKHVuc2lnbmVkIGludCBjcHUpCkBAIC03MDIsOCArNzExLDkgQEAg c3RhdGljIHZvaWQgY3B1X2JhbmtfZnJlZSh1bnNpZ25lZCBpbnQgYwogCiBzdGF0aWMgaW50IGNw dV9iYW5rX2FsbG9jKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgc3RydWN0IG1jYV9iYW5rcyAq cG9sbCA9IHBlcl9jcHUocG9sbF9iYW5rbWFzaywgY3B1KSA/OiBtY2FiYW5rc19hbGxvYygpOwot ICAgIHN0cnVjdCBtY2FfYmFua3MgKmNsciA9IHBlcl9jcHUobWNlX2NsZWFyX2JhbmtzLCBjcHUp ID86IG1jYWJhbmtzX2FsbG9jKCk7CisgICAgdW5zaWduZWQgaW50IG5yID0gcGVyX2NwdShucl9t Y2VfYmFua3MsIGNwdSk7CisgICAgc3RydWN0IG1jYV9iYW5rcyAqcG9sbCA9IHBlcl9jcHUocG9s bF9iYW5rbWFzaywgY3B1KSA/OiBtY2FiYW5rc19hbGxvYyhucik7CisgICAgc3RydWN0IG1jYV9i YW5rcyAqY2xyID0gcGVyX2NwdShtY2VfY2xlYXJfYmFua3MsIGNwdSkgPzogbWNhYmFua3NfYWxs b2MobnIpOwogCiAgICAgaWYgKCAhcG9sbCB8fCAhY2xyICkKICAgICB7CkBAIC03NTIsNiArNzYy LDcgQEAgc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfbmZiID0gewogdm9pZCBtY2hl Y2tfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGJvb2wgYnNwKQogewogICAgIGVudW0gbWNo ZWNrX3R5cGUgaW5pdGVkID0gbWNoZWNrX25vbmU7CisgICAgdW5zaWduZWQgaW50IGNwdSA9IHNt cF9wcm9jZXNzb3JfaWQoKTsKIAogICAgIGlmICggIW9wdF9tY2UgKQogICAgIHsKQEAgLTc2Miw4 ICs3NzMsNyBAQCB2b2lkIG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYywKIAogICAg IGlmICggIW1jZV9hdmFpbGFibGUoYykgKQogICAgIHsKLSAgICAgICAgcHJpbnRrKFhFTkxPR19J TkZPICJDUFUlaTogTm8gbWFjaGluZSBjaGVjayBzdXBwb3J0IGF2YWlsYWJsZVxuIiwKLSAgICAg ICAgICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisgICAgICAgIHByaW50ayhYRU5MT0dfSU5G TyAiQ1BVJWk6IE5vIG1hY2hpbmUgY2hlY2sgc3VwcG9ydCBhdmFpbGFibGVcbiIsIGNwdSk7CiAg ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTc3MSw5ICs3ODEsMTMgQEAgdm9pZCBtY2hlY2tf aW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCiAgICAgaWYgKCBtY2FfY2FwX2luaXQoKSApCiAg ICAgICAgIHJldHVybjsKIAotICAgIC8qIEVhcmx5IE1DRSBpbml0aWFsaXNhdGlvbiBmb3IgQlNQ LiAqLwotICAgIGlmICggYnNwICYmIGNwdV9iYW5rX2FsbG9jKHNtcF9wcm9jZXNzb3JfaWQoKSkg KQotICAgICAgICBCVUcoKTsKKyAgICBpZiAoICFic3AgKQorICAgIHsKKyAgICAgICAgcGVyX2Nw dShwb2xsX2JhbmttYXNrLCBjcHUpLT5udW0gPSBwZXJfY3B1KG5yX21jZV9iYW5rcywgY3B1KTsK KyAgICAgICAgcGVyX2NwdShtY2VfY2xlYXJfYmFua3MsIGNwdSktPm51bSA9IHBlcl9jcHUobnJf bWNlX2JhbmtzLCBjcHUpOworICAgIH0KKyAgICBlbHNlIGlmICggY3B1X2JhbmtfYWxsb2MoY3B1 KSApCisgICAgICAgIHBhbmljKCJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBNQ0UgYmFuayBhbGxv Y2F0aW9uc1xuIik7CiAKICAgICBzd2l0Y2ggKCBjLT54ODZfdmVuZG9yICkKICAgICB7CkBAIC0x MTExLDI0ICsxMTI1LDIyIEBAIGJvb2wgaW50cG9zZV9pbnZhbCh1bnNpZ25lZCBpbnQgY3B1X25y LAogICAgIHJldHVybiB0cnVlOwogfQogCi0jZGVmaW5lIElTX01DQV9CQU5LUkVHKHIpIFwKKyNk ZWZpbmUgSVNfTUNBX0JBTktSRUcociwgY3B1KSBcCiAgICAgKChyKSA+PSBNU1JfSUEzMl9NQzBf Q1RMICYmIFwKLSAgICAocikgPD0gTVNSX0lBMzJfTUN4X01JU0MobnJfbWNlX2JhbmtzIC0gMSkg JiYgXAotICAgICgocikgLSBNU1JfSUEzMl9NQzBfQ1RMKSAlIDQgIT0gMCkgLyogZXhjbHVkZXMg TUNpX0NUTCAqLworICAgICAocikgPD0gTVNSX0lBMzJfTUN4X01JU0MocGVyX2NwdShucl9tY2Vf YmFua3MsIGNwdSkgLSAxKSAmJiBcCisgICAgICgocikgLSBNU1JfSUEzMl9NQzBfQ1RMKSAlIDQp IC8qIGV4Y2x1ZGVzIE1DaV9DVEwgKi8KIAogc3RhdGljIGJvb2wgeDg2X21jX21zcmluamVjdF92 ZXJpZnkoc3RydWN0IHhlbl9tY19tc3JpbmplY3QgKm1jaSkKIHsKLSAgICBzdHJ1Y3QgY3B1aW5m b194ODYgKmM7CisgICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhW21j aS0+bWNpbmpfY3B1bnJdOwogICAgIGludCBpLCBlcnJzID0gMDsKIAotICAgIGMgPSAmY3B1X2Rh dGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQogICAgIGZvciAoIGkgPSAwOyBpIDwgbWNpLT5tY2lu al9jb3VudDsgaSsrICkKICAgICB7CiAgICAgICAgIHVpbnQ2NF90IHJlZyA9IG1jaS0+bWNpbmpf bXNyW2ldLnJlZzsKICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uID0gTlVMTDsKIAotICAgICAg ICBpZiAoIElTX01DQV9CQU5LUkVHKHJlZykgKQorICAgICAgICBpZiAoIElTX01DQV9CQU5LUkVH KHJlZywgbWNpLT5tY2lual9jcHVucikgKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIGMt Png4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgKQogICAgICAgICAgICAgewpAQCAtMTQ0OCw3 ICsxNDYwLDcgQEAgbG9uZyBkb19tY2EoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fbQogICAg ICAgICBicmVhazsKIAogICAgIGNhc2UgWEVOX01DX21zcmluamVjdDoKLSAgICAgICAgaWYgKCBu cl9tY2VfYmFua3MgPT0gMCApCisgICAgICAgIGlmICggIW1jYV9hbGxiYW5rcyB8fCAhbWNhX2Fs bGJhbmtzLT5udW0gKQogICAgICAgICAgICAgcmV0dXJuIHg4Nl9tY2VycigiZG9fbWNhIGluamVj dCIsIC1FTk9ERVYpOwogCiAgICAgICAgIG1jX21zcmluamVjdCA9ICZvcC0+dS5tY19tc3Jpbmpl Y3Q7CkBAIC0xNDYxLDYgKzE0NzMsOSBAQCBsb25nIGRvX21jYShYRU5fR1VFU1RfSEFORExFX1BB UkFNKHhlbl9tCiAgICAgICAgICAgICByZXR1cm4geDg2X21jZXJyKCJkb19tY2EgaW5qZWN0OiB0 YXJnZXQgb2ZmbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FSU5WQUwpOwog CisgICAgICAgIGlmICggIXBlcl9jcHUobnJfbWNlX2JhbmtzLCB0YXJnZXQpICkKKyAgICAgICAg ICAgIHJldHVybiB4ODZfbWNlcnIoImRvX21jYSBpbmplY3Q6IG5vIGJhbmtzIiwgLUVOT0VOVCk7 CisKICAgICAgICAgaWYgKCBtY19tc3JpbmplY3QtPm1jaW5qX2NvdW50ID09IDAgKQogICAgICAg ICAgICAgcmV0dXJuIDA7CiAKQEAgLTE1MjEsNyArMTUzNiw3IEBAIGxvbmcgZG9fbWNhKFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0oeGVuX20KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFhFTl9N Q19tY2VpbmplY3Q6Ci0gICAgICAgIGlmICggbnJfbWNlX2JhbmtzID09IDAgKQorICAgICAgICBp ZiAoICFtY2FfYWxsYmFua3MgfHwgIW1jYV9hbGxiYW5rcy0+bnVtICkKICAgICAgICAgICAgIHJl dHVybiB4ODZfbWNlcnIoImRvX21jYSAjTUMiLCAtRU5PREVWKTsKIAogICAgICAgICBtY19tY2Vp bmplY3QgPSAmb3AtPnUubWNfbWNlaW5qZWN0OwpAQCAtMTUzMyw2ICsxNTQ4LDkgQEAgbG9uZyBk b19tY2EoWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4ZW5fbQogICAgICAgICBpZiAoICFjcHVfb25s aW5lKHRhcmdldCkgKQogICAgICAgICAgICAgcmV0dXJuIHg4Nl9tY2VycigiZG9fbWNhICNNQzog dGFyZ2V0IG9mZmxpbmUiLCAtRUlOVkFMKTsKIAorICAgICAgICBpZiAoICFwZXJfY3B1KG5yX21j ZV9iYW5rcywgdGFyZ2V0KSApCisgICAgICAgICAgICByZXR1cm4geDg2X21jZXJyKCJkb19tY2Eg I01DOiBubyBiYW5rcyIsIC1FTk9FTlQpOworCiAgICAgICAgIGFkZF90YWludChUQUlOVF9FUlJP Ul9JTkpFQ1QpOwogCiAgICAgICAgIGlmICggbWNlX2Jyb2FkY2FzdCApCkBAIC0xNTQ4LDcgKzE1 NjYsNyBAQCBsb25nIGRvX21jYShYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9tCiAgICAgICAg IGNwdW1hc2tfdmFyX3QgY212OwogICAgICAgICBib29sIGJyb2FkY2FzdCA9IG9wLT51Lm1jX2lu amVjdF92Mi5mbGFncyAmIFhFTl9NQ19JTkpFQ1RfQ1BVX0JST0FEQ0FTVDsKIAotICAgICAgICBp ZiAoIG5yX21jZV9iYW5rcyA9PSAwICkKKyAgICAgICAgaWYgKCAhbWNhX2FsbGJhbmtzIHx8ICFt Y2FfYWxsYmFua3MtPm51bSApCiAgICAgICAgICAgICByZXR1cm4geDg2X21jZXJyKCJkb19tY2Eg I01DIiwgLUVOT0RFVik7CiAKICAgICAgICAgaWYgKCBicm9hZGNhc3QgKQpAQCAtMTU3MCw2ICsx NTg4LDE2IEBAIGxvbmcgZG9fbWNhKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX20KICAgICAg ICAgICAgICAgICAgICAgICAgICJOb3QgYWxsIHJlcXVpcmVkIENQVXMgYXJlIG9ubGluZVxuIik7 CiAgICAgICAgIH0KIAorICAgICAgICBmb3JfZWFjaF9jcHUodGFyZ2V0LCBjcHVtYXApCisgICAg ICAgICAgICBpZiAoIGNwdV9vbmxpbmUodGFyZ2V0KSAmJiAhcGVyX2NwdShucl9tY2VfYmFua3Ms IHRhcmdldCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IHg4Nl9tY2Vy cigiZG9fbWNhICNNQzogQ1BVJXUgaGFzIG5vIGJhbmtzIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLUVOT0VOVCwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgaWYgKCByZXQgKQorICAgICAgICAgICAgYnJlYWs7CisKICAg ICAgICAgc3dpdGNoICggb3AtPnUubWNfaW5qZWN0X3YyLmZsYWdzICYgWEVOX01DX0lOSkVDVF9U WVBFX01BU0sgKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgWEVOX01DX0lOSkVDVF9UWVBFX01D RToKLS0tIGEveGVuL2FyY2gveDg2L2NwdS9tY2hlY2svbWNlX2FtZC5jCisrKyBiL3hlbi9hcmNo L3g4Ni9jcHUvbWNoZWNrL21jZV9hbWQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBAIGFtZF9tY2hlY2tf aW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmNpKQogICAgIHg4Nl9tY2VfdmVjdG9yX3JlZ2lzdGVy KG1jaGVja19jbW5faGFuZGxlcik7CiAgICAgbWNlX25lZWRfY2xlYXJiYW5rX3JlZ2lzdGVyKGFt ZF9uZWVkX2NsZWFyYmFua19zY2FuKTsKIAotICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfbWNlX2Jh bmtzOyBpKysgKQorICAgIGZvciAoIGkgPSAwOyBpIDwgdGhpc19jcHUobnJfbWNlX2JhbmtzKTsg aSsrICkKICAgICB7CiAgICAgICAgIGlmICggcXVpcmtmbGFnID09IE1DRVFVSVJLX0s4X0dBUlQg JiYgaSA9PSA0ICkKICAgICAgICAgICAgIG1jZXF1aXJrX2FtZF9hcHBseShxdWlya2ZsYWcpOwot LS0gYS94ZW4vYXJjaC94ODYvY3B1L21jaGVjay9tY2VfaW50ZWwuYworKysgYi94ZW4vYXJjaC94 ODYvY3B1L21jaGVjay9tY2VfaW50ZWwuYwpAQCAtNTM1LDE2ICs1MzUsMTYgQEAgb3V0Ogogc3Rh dGljIHZvaWQgY21jaV9kaXNjb3Zlcih2b2lkKQogewogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0gICAgaW50IGk7CisgICAgdW5zaWduZWQgaW50IGksIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQo KTsKICAgICBtY3RlbGVtX2Nvb2tpZV90IG1jdGM7CiAgICAgc3RydWN0IG1jYV9zdW1tYXJ5IGJz OwogCi0gICAgbWNlX3ByaW50ayhNQ0VfVkVSQk9TRSwgIkNNQ0k6IGZpbmQgb3duZXIgb24gQ1BV JWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisgICAgbWNlX3ByaW50ayhNQ0VfVkVSQk9TRSwg IkNNQ0k6IGZpbmQgb3duZXIgb24gQ1BVJXVcbiIsIGNwdSk7CiAKICAgICBzcGluX2xvY2tfaXJx c2F2ZSgmY21jaV9kaXNjb3Zlcl9sb2NrLCBmbGFncyk7CiAKLSAgICBmb3IgKCBpID0gMDsgaSA8 IG5yX21jZV9iYW5rczsgaSsrICkKLSAgICAgICAgaWYgKCAhbWNhYmFua3NfdGVzdChpLCBfX2dl dF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpICkKKyAgICBmb3IgKCBpID0gMDsgaSA8IHBlcl9j cHUobnJfbWNlX2JhbmtzLCBjcHUpOyBpKysgKQorICAgICAgICBpZiAoICFtY2FiYW5rc190ZXN0 KGksIHBlcl9jcHUobWNlX2JhbmtzX293bmVkLCBjcHUpKSApCiAgICAgICAgICAgICBkb19jbWNp X2Rpc2NvdmVyKGkpOwogCiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21jaV9kaXNjb3Zl cl9sb2NrLCBmbGFncyk7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIHZvaWQgY21jaV9kaXNj b3Zlcih2b2lkKQogICAgICAqLwogCiAgICAgbWN0YyA9IG1jaGVja19tY2FfbG9nb3V0KAotICAg ICAgICBNQ0FfQ01DSV9IQU5ETEVSLCBfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCksICZi cywgTlVMTCk7CisgICAgICAgIE1DQV9DTUNJX0hBTkRMRVIsIHBlcl9jcHUobWNlX2JhbmtzX293 bmVkLCBjcHUpLCAmYnMsIE5VTEwpOwogCiAgICAgaWYgKCBicy5lcnJjbnQgJiYgbWN0YyAhPSBO VUxMICkKICAgICB7CkBAIC01NzYsOSArNTc2LDkgQEAgc3RhdGljIHZvaWQgY21jaV9kaXNjb3Zl cih2b2lkKQogICAgICAgICBtY3RlbGVtX2Rpc21pc3MobWN0Yyk7CiAKICAgICBtY2VfcHJpbnRr KE1DRV9WRVJCT1NFLCAiQ01DSTogQ1BVJWQgb3duZXJfbWFwWyVseF0sIG5vX2NtY2lfbWFwWyVs eF1cbiIsCi0gICAgICAgICAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksCi0gICAgICAgICAgICAg ICAqKCh1bnNpZ25lZCBsb25nICopX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpLT5iYW5r X21hcCksCi0gICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopX19nZXRfY3B1X3Zhcihu b19jbWNpX2JhbmtzKS0+YmFua19tYXApKTsKKyAgICAgICAgICAgICAgIGNwdSwKKyAgICAgICAg ICAgICAgIHBlcl9jcHUobWNlX2JhbmtzX293bmVkLCBjcHUpLT5iYW5rX21hcFswXSwKKyAgICAg ICAgICAgICAgIHBlcl9jcHUobm9fY21jaV9iYW5rcywgY3B1KS0+YmFua19tYXBbMF0pOwogfQog CiAvKgpAQCAtNjEzLDI0ICs2MTMsMjQgQEAgc3RhdGljIHZvaWQgY3B1X21jaGVja19kaXN0cmli dXRlX2NtY2kodgogCiBzdGF0aWMgdm9pZCBjbGVhcl9jbWNpKHZvaWQpCiB7Ci0gICAgaW50IGk7 CisgICAgdW5zaWduZWQgaW50IGksIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogICAgIGlm ICggIWNtY2lfc3VwcG9ydCB8fCAhb3B0X21jZSApCiAgICAgICAgIHJldHVybjsKIAotICAgIG1j ZV9wcmludGsoTUNFX1ZFUkJPU0UsICJDTUNJOiBjbGVhcl9jbWNpIHN1cHBvcnQgb24gQ1BVJWRc biIsCi0gICAgICAgICAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkpOworICAgIG1jZV9wcmludGso TUNFX1ZFUkJPU0UsICJDTUNJOiBjbGVhcl9jbWNpIHN1cHBvcnQgb24gQ1BVJXVcbiIsIGNwdSk7 CiAKLSAgICBmb3IgKCBpID0gMDsgaSA8IG5yX21jZV9iYW5rczsgaSsrICkKKyAgICBmb3IgKCBp ID0gMDsgaSA8IHBlcl9jcHUobnJfbWNlX2JhbmtzLCBjcHUpOyBpKysgKQogICAgIHsKICAgICAg ICAgdW5zaWduZWQgbXNyID0gTVNSX0lBMzJfTUN4X0NUTDIoaSk7CiAgICAgICAgIHU2NCB2YWw7 Ci0gICAgICAgIGlmICggIW1jYWJhbmtzX3Rlc3QoaSwgX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nf b3duZWQpKSApCisKKyAgICAgICAgaWYgKCAhbWNhYmFua3NfdGVzdChpLCBwZXJfY3B1KG1jZV9i YW5rc19vd25lZCwgY3B1KSkgKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHJkbXNy bChtc3IsIHZhbCk7CiAgICAgICAgIGlmICggdmFsICYgKENNQ0lfRU58Q01DSV9USFJFU0hPTERf TUFTSykgKQogICAgICAgICAgICAgd3Jtc3JsKG1zciwgdmFsICYgfihDTUNJX0VOfENNQ0lfVEhS RVNIT0xEX01BU0spKTsKLSAgICAgICAgbWNhYmFua3NfY2xlYXIoaSwgX19nZXRfY3B1X3Zhciht Y2VfYmFua3Nfb3duZWQpKTsKKyAgICAgICAgbWNhYmFua3NfY2xlYXIoaSwgcGVyX2NwdShtY2Vf YmFua3Nfb3duZWQsIGNwdSkpOwogICAgIH0KIH0KIApAQCAtODI2LDcgKzgyNiw3IEBAIHN0YXRp YyB2b2lkIGludGVsX2luaXRfbWNlKHZvaWQpCiAgICAgaW50ZWxfbWNlX3Bvc3RfcmVzZXQoKTsK IAogICAgIC8qIGNsZWFyIGFsbCBiYW5rcyAqLwotICAgIGZvciAoIGkgPSBmaXJzdGJhbms7IGkg PCBucl9tY2VfYmFua3M7IGkrKyApCisgICAgZm9yICggaSA9IGZpcnN0YmFuazsgaSA8IHRoaXNf Y3B1KG5yX21jZV9iYW5rcyk7IGkrKyApCiAgICAgewogICAgICAgICAvKgogICAgICAgICAgKiBT b21lIGJhbmtzIGFyZSBzaGFyZWQgYWNyb3NzIGNvcmVzLCB1c2UgTUNpX0NUUkwgdG8ganVkZ2Ug d2hldGhlcgpAQCAtODY2LDggKzg2Niw5IEBAIHN0YXRpYyB2b2lkIGNwdV9tY2FiYW5rX2ZyZWUo dW5zaWduZWQgaW4KIAogc3RhdGljIGludCBjcHVfbWNhYmFua19hbGxvYyh1bnNpZ25lZCBpbnQg Y3B1KQogewotICAgIHN0cnVjdCBtY2FfYmFua3MgKmNtY2kgPSBtY2FiYW5rc19hbGxvYygpOwot ICAgIHN0cnVjdCBtY2FfYmFua3MgKm93bmVkID0gbWNhYmFua3NfYWxsb2MoKTsKKyAgICB1bnNp Z25lZCBpbnQgbnIgPSBwZXJfY3B1KG5yX21jZV9iYW5rcywgY3B1KTsKKyAgICBzdHJ1Y3QgbWNh X2JhbmtzICpjbWNpID0gbWNhYmFua3NfYWxsb2MobnIpOworICAgIHN0cnVjdCBtY2FfYmFua3Mg Km93bmVkID0gbWNhYmFua3NfYWxsb2MobnIpOwogCiAgICAgaWYgKCAhY21jaSB8fCAhb3duZWQg KQogICAgICAgICBnb3RvIG91dDsKQEAgLTkyNCw2ICs5MjUsMTMgQEAgZW51bSBtY2hlY2tfdHlw ZSBpbnRlbF9tY2hlY2tfaW5pdChzdHJ1YwogICAgICAgICByZWdpc3Rlcl9jcHVfbm90aWZpZXIo JmNwdV9uZmIpOwogICAgICAgICBtY2hlY2tfaW50ZWxfdGhlcm1faW5pdCgpOwogICAgIH0KKyAg ICBlbHNlCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9p ZCgpOworCisgICAgICAgIHBlcl9jcHUobm9fY21jaV9iYW5rcywgY3B1KS0+bnVtID0gcGVyX2Nw dShucl9tY2VfYmFua3MsIGNwdSk7CisgICAgICAgIHBlcl9jcHUobWNlX2JhbmtzX293bmVkLCBj cHUpLT5udW0gPSBwZXJfY3B1KG5yX21jZV9iYW5rcywgY3B1KTsKKyAgICB9CiAKICAgICBpbnRl bF9pbml0X21jYShjKTsKIAotLS0gYS94ZW4vYXJjaC94ODYvY3B1L21jaGVjay94ODZfbWNhLmgK KysrIGIveGVuL2FyY2gveDg2L2NwdS9tY2hlY2sveDg2X21jYS5oCkBAIC0xMjUsNyArMTI1LDcg QEAgc3RhdGljIGlubGluZSBpbnQgbWNhYmFua3NfdGVzdChpbnQgYml0LAogICAgIHJldHVybiB0 ZXN0X2JpdChiaXQsIGJhbmtzLT5iYW5rX21hcCk7CiB9CiAKLXN0cnVjdCBtY2FfYmFua3MgKm1j YWJhbmtzX2FsbG9jKHZvaWQpOworc3RydWN0IG1jYV9iYW5rcyAqbWNhYmFua3NfYWxsb2ModW5z aWduZWQgaW50IG5yKTsKIHZvaWQgbWNhYmFua3NfZnJlZShzdHJ1Y3QgbWNhX2JhbmtzICpiYW5r cyk7CiBleHRlcm4gc3RydWN0IG1jYV9iYW5rcyAqbWNhX2FsbGJhbmtzOwogCi0tLSBhL3hlbi9h cmNoL3g4Ni9odm0vc3ZtL3N2bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vc3ZtL3N2bS5jCkBA IC0yMzc0LDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IHN2bV9pc19lcnJhdHVtXzM4MyhzdHJ1Y3Qg Y3B1CiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8qIENsZWFyIE1DaV9TVEFUVVMgcmVn aXN0ZXJzICovCi0gICAgZm9yIChpID0gMDsgaSA8IG5yX21jZV9iYW5rczsgaSsrKQorICAgIGZv ciAoaSA9IDA7IGkgPCB0aGlzX2NwdShucl9tY2VfYmFua3MpOyBpKyspCiAgICAgICAgIHdybXNy bChNU1JfSUEzMl9NQ3hfU1RBVFVTKGkpLCAwVUxMKTsKICAgICAKICAgICByZG1zcmwoTVNSX0lB MzJfTUNHX1NUQVRVUywgbXNyX2NvbnRlbnQpOwotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L21j ZS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvbWNlLmgKQEAgLTQwLDYgKzQwLDYgQEAgZXh0 ZXJuIGludCB2bWNlX3JkbXNyKHVpbnQzMl90IG1zciwgdWludAogZXh0ZXJuIGJvb2wgdm1jZV9o YXNfbG1jZShjb25zdCBzdHJ1Y3QgdmNwdSAqdik7CiBleHRlcm4gaW50IHZtY2VfZW5hYmxlX21j YV9jYXAoc3RydWN0IGRvbWFpbiAqZCwgdWludDY0X3QgY2FwKTsKIAotZXh0ZXJuIHVuc2lnbmVk IGludCBucl9tY2VfYmFua3M7CitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCBucl9tY2Vf YmFua3MpOwogCiAjZW5kaWYKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=