Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [5/5] EDAC, skx_edac: Add address translation for non-volatile DIMMs. From: "Luck, Tony" Message-Id: <20180924201613.14070-6-tony.luck@intel.com> Date: Mon, 24 Sep 2018 13:16:13 -0700 To: Borislav Petkov Cc: Qiuxu Zhuo , Tony Luck , Aristeu Rozanski , Mauro Carvalho Chehab , linux-edac@vger.kernel.org List-ID: RnJvbTogUWl1eHUgWmh1byA8cWl1eHUuemh1b0BpbnRlbC5jb20+CgpDdXJyZW50IHNreF9lZGFj IGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYWRkcmVzcyB0cmFuc2xhdGlvbiBmb3IKbm9uLXZvbGF0 aWxlIERJTU1zLgoKVGhlIHdyYXBwZWQgQUNQSSBEU00gbWV0aG9kcyBzdXBwb3J0IGFkZHJlc3Mg dHJhbnNsYXRpb24gZm9yIGJvdGgKdm9sYXRpbGUgRElNTXMgYW5kIG5vbi12b2xhdGlsZSBESU1N cy4gU28gc3dpdGNoIHNreF9lZGFjIHRvIHVzZQp0aGUgd3JhcHBlZCBBQ1BJIERTTSBtZXRob2Rz LCBpZiB0aGV5IGFyZSBzdXBwb3J0ZWQgYW5kIHRoZXJlIGFyZQpub24tdm9sYXRpbGUgRElNTXMg cG9wdWxhdGVkIG9uIHRoZSBzeXN0ZW0uCgpTaWduZWQtb2ZmLWJ5OiBRaXV4dSBaaHVvIDxxaXV4 dS56aHVvQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50 ZWwuY29tPgotLS0KIGRyaXZlcnMvZWRhYy9za3hfZWRhYy5jIHwgMTQyICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9u cygrKSwgMTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3NreF9lZGFj LmMgYi9kcml2ZXJzL2VkYWMvc2t4X2VkYWMuYwppbmRleCBiYTJjNDc0NTU5ZTAuLmUyMzcyMTY4 NWJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3NreF9lZGFjLmMKKysrIGIvZHJpdmVycy9l ZGFjL3NreF9lZGFjLmMKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJlZGFjX21vZHVsZS5o IgogCiAjZGVmaW5lIEVEQUNfTU9EX1NUUiAgICAic2t4X2VkYWMiCisjZGVmaW5lIERTTV9NT0Rf U1RSCSJkc21fZWRhYyIKKyNkZWZpbmUgTVNHX1NJWkUJMTAyNAogCiAvKgogICogRGVidWcgbWFj cm9zCkBAIC01NCw2ICs1NiwxNyBAQAogc3RhdGljIExJU1RfSEVBRChza3hfZWRhY19saXN0KTsK IAogc3RhdGljIHU2NCBza3hfdG9sbSwgc2t4X3RvaG07CitzdGF0aWMgaW50IG52ZGltbV9jb3Vu dDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWRhY19kc21fb3BlcmF0aW9ucyAqZHNtX29wczsKK3N0 YXRpYyBjaGFyIGNvbXBvbmVudF9uYW1lc1tdWzMyXSA9IHsKKwkiUHJvY2Vzc29yU29ja2V0SWQi LAorCSJNZW1vcnlDb250cm9sbGVySWQiLAorCSJDaGFubmVsSWQiLAorCSJEaW1tU2xvdElkIiwK KwkiIgorfTsKKworc3RhdGljIGludCBjb21wb25lbnRfaW5kaWNlc1tBUlJBWV9TSVpFKGNvbXBv bmVudF9uYW1lcyldOwogCiAjZGVmaW5lIE5VTV9JTUMJCQkyCS8qIG1lbW9yeSBjb250cm9sbGVy cyBwZXIgc29ja2V0ICovCiAjZGVmaW5lIE5VTV9DSEFOTkVMUwkJMwkvKiBjaGFubmVscyBwZXIg bWVtb3J5IGNvbnRyb2xsZXIgKi8KQEAgLTEwMiwxMSArMTE1LDExIEBAIHN0cnVjdCBkZWNvZGVk X2FkZHIgewogCXU2NAlhZGRyOwogCWludAlzb2NrZXQ7CiAJaW50CWltYzsKLQlpbnQJY2hhbm5l bDsKKwl1NjQJY2hhbm5lbDsKIAl1NjQJY2hhbl9hZGRyOwogCWludAlza3R3YXlzOwogCWludAlj aGFud2F5czsKLQlpbnQJZGltbTsKKwl1NjQJZGltbTsKIAlpbnQJcmFuazsKIAlpbnQJY2hhbm5l bF9yYW5rOwogCXU2NAlyYW5rX2FkZHJlc3M7CkBAIC0zOTMsNiArNDA2LDggQEAgc3RhdGljIGlu dCBnZXRfbnZkaW1tX2luZm8oc3RydWN0IGRpbW1faW5mbyAqZGltbSwgc3RydWN0IHNreF9pbWMg KmltYywKIAl1MTYgZmxhZ3M7CiAJdTY0IHNpemUgPSAwOwogCisJbnZkaW1tX2NvdW50Kys7CisK IAlkZXZfaGFuZGxlID0gQUNQSV9ORklUX0JVSUxEX0RFVklDRV9IQU5ETEUoZGltbW5vLCBjaGFu LCBpbWMtPmxtYywKIAkJCQkJCSAgIGltYy0+c3JjX2lkLCAwKTsKIApAQCAtNjgyLDcgKzY5Nyw3 IEBAIHN0YXRpYyBib29sIHNreF9zYWRfZGVjb2RlKHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcykK IAlyZXMtPmltYyA9IEdFVF9CSVRGSUVMRChkLT5tY3JvdXRlLCBsY2hhbiAqIDMsIGxjaGFuICog MyArIDIpOwogCXJlcy0+Y2hhbm5lbCA9IEdFVF9CSVRGSUVMRChkLT5tY3JvdXRlLCBsY2hhbiAq IDIgKyAxOCwgbGNoYW4gKiAyICsgMTkpOwogCi0JZWRhY19kYmcoMiwgIiVsbHg6IHNvY2tldD0l ZCBpbWM9JWQgY2hhbm5lbD0lZFxuIiwKKwllZGFjX2RiZygyLCAiJWxseDogc29ja2V0PSVkIGlt Yz0lZCBjaGFubmVsPSVsbHVcbiIsCiAJCSByZXMtPmFkZHIsIHJlcy0+c29ja2V0LCByZXMtPmlt YywgcmVzLT5jaGFubmVsKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTgxOCw3ICs4MzMsNyBAQCBz dGF0aWMgYm9vbCBza3hfcmlyX2RlY29kZShzdHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMpCiAJcmVz LT5kaW1tID0gY2hhbl9yYW5rIC8gNDsKIAlyZXMtPnJhbmsgPSBjaGFuX3JhbmsgJSA0OwogCi0J ZWRhY19kYmcoMiwgIiVsbHg6IGRpbW09JWQgcmFuaz0lZCBjaGFuX3Jhbms9JWQgcmFua19hZGRy PSVsbHhcbiIsCisJZWRhY19kYmcoMiwgIiVsbHg6IGRpbW09JWxsdSByYW5rPSVkIGNoYW5fcmFu az0lZCByYW5rX2FkZHI9JWxseFxuIiwKIAkJIHJlcy0+YWRkciwgcmVzLT5kaW1tLCByZXMtPnJh bmssCiAJCSByZXMtPmNoYW5uZWxfcmFuaywgcmVzLT5yYW5rX2FkZHJlc3MpOwogCXJldHVybiB0 cnVlOwpAQCAtODk0LDEyICs5MDksMzIgQEAgc3RhdGljIGJvb2wgc2t4X2RlY29kZShzdHJ1Y3Qg ZGVjb2RlZF9hZGRyICpyZXMpCiAJCXNreF9yaXJfZGVjb2RlKHJlcykgJiYgc2t4X21hZF9kZWNv ZGUocmVzKTsKIH0KIAorc3RhdGljIGJvb2wgc2t4X2RzbV9kZWNvZGUodTY0IGFkZHIsIGNoYXIg Km1zZywgaW50IG1zZ2xlbiwKKwkJCSAgIGludCBpbmRpY2VzW10sIHU2NCAqc29jaywgdTY0ICpp bWMsCisJCQkgICB1NjQgKmNoYW4sIHU2NCAqZGltbSkKKworeworCWlmIChhZGRyID49IHNreF90 b2htIHx8IChhZGRyID49IHNreF90b2xtICYmIGFkZHIgPCBCSVRfVUxMKDMyKSkpIHsKKwkJZWRh Y19kYmcoMCwgIkFkZHJlc3MgJWxseCBvdXQgb2YgcmFuZ2VcbiIsIGFkZHIpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJaWYgKGRzbV9vcHMtPmRlY29kZShhZGRyLCBtc2csIG1zZ2xlbiwgaW5k aWNlcywKKwkJCSAgICBzb2NrLCBpbWMsIGNoYW4sIGRpbW0pKSB7CisJCWVkYWNfZGJnKDAsICJG YWlsZWQgdG8gZGVjb2RlIDB4JWxseFxuIiwgYWRkcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgc2t4X21jZV9vdXRwdXRfZXJyb3Ioc3Ry dWN0IG1lbV9jdGxfaW5mbyAqbWNpLAogCQkJCSBjb25zdCBzdHJ1Y3QgbWNlICptLAotCQkJCSBz dHJ1Y3QgZGVjb2RlZF9hZGRyICpyZXMpCisJCQkJIHN0cnVjdCBkZWNvZGVkX2FkZHIgKnJlcywK KwkJCQkgY2hhciAqbXNnKQogewogCWVudW0gaHdfZXZlbnRfbWNfZXJyX3R5cGUgdHBfZXZlbnQ7 Ci0JY2hhciAqdHlwZSwgKm9wdHlwZSwgbXNnWzI1Nl07CisJY2hhciAqdHlwZSwgKm9wdHlwZTsK IAlib29sIHJpcHYgPSBHRVRfQklURklFTEQobS0+bWNnc3RhdHVzLCAwLCAwKTsKIAlib29sIG92 ZXJmbG93ID0gR0VUX0JJVEZJRUxEKG0tPnN0YXR1cywgNjIsIDYyKTsKIAlib29sIHVuY29ycmVj dGVkX2Vycm9yID0gR0VUX0JJVEZJRUxEKG0tPnN0YXR1cywgNjEsIDYxKTsKQEAgLTk2MCwxMyAr OTk1LDExIEBAIHN0YXRpYyB2b2lkIHNreF9tY2Vfb3V0cHV0X2Vycm9yKHN0cnVjdCBtZW1fY3Rs X2luZm8gKm1jaSwKIAkJfQogCX0KIAotCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCi0JCSAi JXMlcyBlcnJfY29kZTolMDR4OiUwNHggc29ja2V0OiVkIGltYzolZCByYW5rOiVkIGJnOiVkIGJh OiVkIHJvdzoleCBjb2w6JXgiLAorCXNucHJpbnRmKG1zZywgTVNHX1NJWkUsCisJCSAiJXMlcyBl cnJfY29kZTolMDR4OiUwNHggJXMiLAogCQkgb3ZlcmZsb3cgPyAiIE9WRVJGTE9XIiA6ICIiLAog CQkgKHVuY29ycmVjdGVkX2Vycm9yICYmIHJlY292ZXJhYmxlKSA/ICIgcmVjb3ZlcmFibGUiIDog IiIsCi0JCSBtc2NvZCwgZXJyY29kZSwKLQkJIHJlcy0+c29ja2V0LCByZXMtPmltYywgcmVzLT5y YW5rLAotCQkgcmVzLT5iYW5rX2dyb3VwLCByZXMtPmJhbmtfYWRkcmVzcywgcmVzLT5yb3csIHJl cy0+Y29sdW1uKTsKKwkJIG1zY29kLCBlcnJjb2RlLCBtc2cgKyBNU0dfU0laRSk7CiAKIAllZGFj X2RiZygwLCAiJXNcbiIsIG1zZyk7CiAKQEAgLTk3NywxMyArMTAxMCwzMyBAQCBzdGF0aWMgdm9p ZCBza3hfbWNlX291dHB1dF9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAJCQkgICAg IG9wdHlwZSwgbXNnKTsKIH0KIAorc3RhdGljIHN0cnVjdCBtZW1fY3RsX2luZm8gKmdldF9tY2ko dTY0IHNyY19pZCwgdTY0IGxtYykKK3sKKwlzdHJ1Y3Qgc2t4X2RldiAqZDsKKworCWlmIChsbWMg PiBOVU1fSU1DIC0gMSkgeworCQlza3hfcHJpbnRrKEtFUk5fRVJSLCAiQmFkIG1jIyAweCVsbHhc biIsIGxtYyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwg JnNreF9lZGFjX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGQtPmltY1swXS5zcmNfaWQgPT0gc3JjX2lk KQorCQkJcmV0dXJuIGQtPmltY1tsbWNdLm1jaTsKKwl9CisKKwlza3hfcHJpbnRrKEtFUk5fRVJS LCAiTm8gbWNpIGZvciBzcmNfaWQgJWxseCBsbWMgJWxseFxuIiwgc3JjX2lkLCBsbWMpOworCisJ cmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2t4X21jZV9jaGVja19lcnJvcihzdHJ1Y3Qg bm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwKIAkJCSAgICAgICB2b2lkICpk YXRhKQogewogCXN0cnVjdCBtY2UgKm1jZSA9IChzdHJ1Y3QgbWNlICopZGF0YTsKIAlzdHJ1Y3Qg ZGVjb2RlZF9hZGRyIHJlczsKIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2k7Ci0JY2hhciAqdHlw ZTsKKwl1NjQgc29ja2V0LCBtZW1jdHJsOworCWNoYXIgKnR5cGUsICptc2c7CiAKIAlpZiAoZWRh Y19nZXRfcmVwb3J0X3N0YXR1cygpID09IEVEQUNfUkVQT1JUSU5HX0RJU0FCTEVEKQogCQlyZXR1 cm4gTk9USUZZX0RPTkU7CkBAIC05OTIsMTEgKzEwNDUsMzYgQEAgc3RhdGljIGludCBza3hfbWNl X2NoZWNrX2Vycm9yKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFs LAogCWlmICgobWNlLT5zdGF0dXMgJiAweGVmZmYpID4+IDcgIT0gMSB8fCAhKG1jZS0+c3RhdHVz ICYgTUNJX1NUQVRVU19BRERSVikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAorCW1zZyA9IGt6 YWxsb2MoTVNHX1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuIE5P VElGWV9ET05FOworCisJaWYgKGRzbV9vcHMpCisJCWdvdG8gZHNtX2RlY29kaW5nOworCiAJcmVz LmFkZHIgPSBtY2UtPmFkZHI7CiAJaWYgKCFza3hfZGVjb2RlKCZyZXMpKQogCQlyZXR1cm4gTk9U SUZZX0RPTkU7CiAJbWNpID0gcmVzLmRldi0+aW1jW3Jlcy5pbWNdLm1jaTsKIAorCXNucHJpbnRm KG1zZyArIE1TR19TSVpFLCBNU0dfU0laRSwKKwkJICJzb2NrZXQ6JWQgaW1jOiVkIGNoYW46JWxs dSBkaW1tOiVsbHUgcmFuazolZCBiZzolZCBiYTolZCByb3c6JXggY29sOiV4IiwKKwkJIHJlcy5z b2NrZXQsIHJlcy5pbWMsIHJlcy5jaGFubmVsLCByZXMuZGltbSwgcmVzLnJhbmssCisJCSByZXMu YmFua19ncm91cCwgcmVzLmJhbmtfYWRkcmVzcywgcmVzLnJvdywgcmVzLmNvbHVtbik7CisKKwln b3RvIGRlY29kZWQ7CisKK2RzbV9kZWNvZGluZzoKKwlpZiAoIXNreF9kc21fZGVjb2RlKG1jZS0+ YWRkciwgbXNnICsgTVNHX1NJWkUsIE1TR19TSVpFLAorCQkJICAgIGNvbXBvbmVudF9pbmRpY2Vz LCAmc29ja2V0LCAmbWVtY3RybCwKKwkJCSAgICAmcmVzLmNoYW5uZWwsICZyZXMuZGltbSkpCisJ CWdvdG8gb3V0OworCisJbWNpID0gZ2V0X21jaShzb2NrZXQsIG1lbWN0cmwpOworCWlmICghbWNp KQorCQlnb3RvIG91dDsKKworZGVjb2RlZDoKIAlpZiAobWNlLT5tY2dzdGF0dXMgJiBNQ0dfU1RB VFVTX01DSVApCiAJCXR5cGUgPSAiRXhjZXB0aW9uIjsKIAllbHNlCkBAIC0xMDE1LDggKzEwOTMs MTAgQEAgc3RhdGljIGludCBza3hfbWNlX2NoZWNrX2Vycm9yKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAogCQkJICAiJXUgQVBJQyAleFxuIiwgbWNlLT5jcHV2 ZW5kb3IsIG1jZS0+Y3B1aWQsCiAJCQkgIG1jZS0+dGltZSwgbWNlLT5zb2NrZXRpZCwgbWNlLT5h cGljaWQpOwogCi0Jc2t4X21jZV9vdXRwdXRfZXJyb3IobWNpLCBtY2UsICZyZXMpOworCXNreF9t Y2Vfb3V0cHV0X2Vycm9yKG1jaSwgbWNlLCAmcmVzLCBtc2cpOwogCitvdXQ6CisJa2ZyZWUobXNn KTsKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKQEAgLTEwODgsNiArMTE2OCwyOSBAQCBzdGF0 aWMgdm9pZCBza3hfcmVtb3ZlKHZvaWQpCiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgc2t4 X2RzbV9nZXQodm9pZCkKK3sKKwlkc21fb3BzID0gZWRhY19kc21fZ2V0X29wcygpOworCWlmICgh ZHNtX29wcyAmJiAhcmVxdWVzdF9tb2R1bGUoRFNNX01PRF9TVFIpKQorCQlkc21fb3BzID0gZWRh Y19kc21fZ2V0X29wcygpOworCisJaWYgKCFkc21fb3BzKSB7CisJCXNreF9wcmludGsoS0VSTl9O T1RJQ0UsICJObyBmaXJtd2FyZSBzdXBwb3J0cyBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbi4iKTsK KwkJc2t4X3ByaW50ayhLRVJOX0NPTlQsICIgT25seSBkZWNvZGluZyBERFI0IGFkZHJlc3MhXG4i KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChkc21fb3BzLT5jaGVjayhjb21wb25lbnRfbmFtZXMs IGNvbXBvbmVudF9pbmRpY2VzKSkgeworCQllZGFjX2RzbV9wdXRfb3BzKGRzbV9vcHMpOworCQlk c21fb3BzID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNreF9kc21fcHV0KHZvaWQpCit7 CisJZWRhY19kc21fcHV0X29wcyhkc21fb3BzKTsKK30KKwogLyoKICAqIHNreF9pbml0OgogICoJ bWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBjb3JyZWN0IGNwdSBtb2RlbApAQCAtMTE1 Miw2ICsxMjU1LDkgQEAgc3RhdGljIGludCBfX2luaXQgc2t4X2luaXQodm9pZCkKIAkJfQogCX0K IAorCWlmIChudmRpbW1fY291bnQpCisJCXNreF9kc21fZ2V0KCk7CisKIAkvKiBFbnN1cmUgdGhh dCB0aGUgT1BTVEFURSBpcyBzZXQgY29ycmVjdGx5IGZvciBQT0xMIG9yIE5NSSAqLwogCW9wc3Rh dGVfaW5pdCgpOwogCkBAIC0xMTcxLDYgKzEyNzcsOCBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgc2t4 X2V4aXQodm9pZCkKIAltY2VfdW5yZWdpc3Rlcl9kZWNvZGVfY2hhaW4oJnNreF9tY2VfZGVjKTsK IAlza3hfcmVtb3ZlKCk7CiAJdGVhcmRvd25fc2t4X2RlYnVnKCk7CisJaWYgKGRzbV9vcHMpCisJ CXNreF9kc21fcHV0KCk7CiB9CiAKIG1vZHVsZV9pbml0KHNreF9pbml0KTsKQEAgLTExNzgsNiAr MTI4NiwxNCBAQCBtb2R1bGVfZXhpdChza3hfZXhpdCk7CiAKIG1vZHVsZV9wYXJhbShlZGFjX29w X3N0YXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhlZGFjX29wX3N0YXRlLCAiRURB QyBFcnJvciBSZXBvcnRpbmcgc3RhdGU6IDA9UG9sbCwxPU5NSSIpOworbW9kdWxlX3BhcmFtX3N0 cmluZyhzb2NrLCBjb21wb25lbnRfbmFtZXNbMF0sIHNpemVvZihjb21wb25lbnRfbmFtZXNbMF0p LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc29jaywgIlN0cmluZyB0byBnZXQgc29ja2V0IElE Iik7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGltYywgY29tcG9uZW50X25hbWVzWzFdLCBzaXplb2Yo Y29tcG9uZW50X25hbWVzWzFdKSwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGltYywgIlN0cmlu ZyB0byBnZXQgSU1DIElEIik7Cittb2R1bGVfcGFyYW1fc3RyaW5nKGNoYW4sIGNvbXBvbmVudF9u YW1lc1syXSwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lc1syXSksIDA2NDQpOworTU9EVUxFX1BBUk1f REVTQyhjaGFuLCAiU3RyaW5nIHRvIGdldCBjaGFubmVsIElEIik7Cittb2R1bGVfcGFyYW1fc3Ry aW5nKGRpbW0sIGNvbXBvbmVudF9uYW1lc1szXSwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lc1szXSks IDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkaW1tLCAiU3RyaW5nIHRvIGdldCBESU1NIElEIik7 CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1IoIlRvbnkgTHVjayIp Owo=