From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: [PATCH 127/138] drm/amd/powerplay: add function to update overdrive settings Date: Fri, 25 Jan 2019 18:25:34 +0800 Message-ID: <1548411945-12396-128-git-send-email-ray.huang@amd.com> References: <1548411945-12396-1-git-send-email-ray.huang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1548411945-12396-1-git-send-email-ray.huang-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Likun Gao , Kevin Wang , Chengming Gui RnJvbTogTGlrdW4gR2FvIDxMaWt1bi5HYW9AYW1kLmNvbT4KCkFkZCBmdW5jdGlvbiBvZiBzbXVf dXBkYXRlX3NwZWNpZmllZF9vZDhfdmFsdWUgdG8gbW9kaWZ5IHNwZWNpZmllZApvdmVyZHJpdmUg dmFsdWUuCkFkZCBmdWNudGlvbiBvZiBzbXVfdXBkYXRlX29kOF9zZXR0aW5ncyB0byB1cGRhdGUg b3ZlcmRyaXZlIHRhYmxlLgoKU2lnbmVkLW9mZi1ieTogTGlrdW4gR2FvIDxMaWt1bi5HYW9AYW1k LmNvbT4KUmV2aWV3ZWQtYnk6IEh1YW5nIFJ1aSA8cmF5Lmh1YW5nQGFtZC5jb20+ClJldmlld2Vk LWJ5OiBLZXZpbiBXYW5nIDxrZXZpbjEud2FuZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211LmggfCAxMCArKysrCiBkcml2ZXJzL2dwdS9k cm0vYW1kL3Bvd2VycGxheS9zbXVfdjExXzAuYyAgICAgIHwgMjcgKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMgICAgIHwgNzggKysrKysrKysrKysr KysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTE1IGluc2VydGlvbnMoKykKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1X3NtdS5oIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaAppbmRleCBhZTlh Y2E0Li4xOWJmOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9p bmMvYW1kZ3B1X3NtdS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9h bWRncHVfc211LmgKQEAgLTQxMCw2ICs0MTAsOSBAQCBzdHJ1Y3QgcHB0YWJsZV9mdW5jcyB7CiAJ aW50ICgqcHJpbnRfY2xrX2xldmVscykoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsIGVudW0gcHBf Y2xvY2tfdHlwZSB0eXBlLCBjaGFyICpidWYpOwogCWludCAoKmZvcmNlX2Nsa19sZXZlbHMpKHN0 cnVjdCBzbXVfY29udGV4dCAqc211LCBlbnVtIHBwX2Nsb2NrX3R5cGUgdHlwZSwgdWludDMyX3Qg bWFzayk7CiAJaW50ICgqc2V0X2RlZmF1bHRfb2Q4X3NldHRpbmdzKShzdHJ1Y3Qgc211X2NvbnRl eHQgKnNtdSk7CisJaW50ICgqdXBkYXRlX3NwZWNpZmllZF9vZDhfdmFsdWUpKHN0cnVjdCBzbXVf Y29udGV4dCAqc211LAorCQkJCQkgIHVpbnQzMl90IGluZGV4LAorCQkJCQkgIHVpbnQzMl90IHZh bHVlKTsKIAlpbnQgKCpnZXRfb2RfcGVyY2VudGFnZSkoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUs IGVudW0gcHBfY2xvY2tfdHlwZSB0eXBlKTsKIAlpbnQgKCpnZXRfY2xvY2tfYnlfdHlwZV93aXRo X2xhdGVuY3kpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAogCQkJCQkgICAgICBlbnVtIGFtZF9w cF9jbG9ja190eXBlIHR5cGUsCkBAIC00OTgsNiArNTAxLDkgQEAgc3RydWN0IHNtdV9mdW5jcwog CWludCAoKmNvbnZfcG93ZXJfcHJvZmlsZV90b19wcGxpYl93b3JrbG9hZCkoaW50IHBvd2VyX3By b2ZpbGUpOwogCWludCAoKmdldF9wb3dlcl9wcm9maWxlX21vZGUpKHN0cnVjdCBzbXVfY29udGV4 dCAqc211LCBjaGFyICpidWYpOwogCWludCAoKnNldF9wb3dlcl9wcm9maWxlX21vZGUpKHN0cnVj dCBzbXVfY29udGV4dCAqc211LCBsb25nICppbnB1dCwgdWludDMyX3Qgc2l6ZSk7CisJaW50ICgq dXBkYXRlX29kOF9zZXR0aW5ncykoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkJICAgdWlu dDMyX3QgaW5kZXgsCisJCQkJICAgdWludDMyX3QgdmFsdWUpOwogfTsKIAogI2RlZmluZSBzbXVf aW5pdF9taWNyb2NvZGUoc211KSBcCkBAIC01NDYsNiArNTUyLDggQEAgc3RydWN0IHNtdV9mdW5j cwogCSgoc211KS0+ZnVuY3MtPmluaXRfbWF4X3N1c3RhaW5hYmxlX2Nsb2NrcyA/IChzbXUpLT5m dW5jcy0+aW5pdF9tYXhfc3VzdGFpbmFibGVfY2xvY2tzKChzbXUpKSA6IDApCiAjZGVmaW5lIHNt dV9zZXRfb2Q4X2RlZmF1bHRfc2V0dGluZ3Moc211KSBcCiAJKChzbXUpLT5mdW5jcy0+c2V0X29k OF9kZWZhdWx0X3NldHRpbmdzID8gKHNtdSktPmZ1bmNzLT5zZXRfb2Q4X2RlZmF1bHRfc2V0dGlu Z3MoKHNtdSkpIDogMCkKKyNkZWZpbmUgc211X3VwZGF0ZV9vZDhfc2V0dGluZ3Moc211LCBpbmRl eCwgdmFsdWUpIFwKKwkoKHNtdSktPmZ1bmNzLT51cGRhdGVfb2Q4X3NldHRpbmdzID8gKHNtdSkt PmZ1bmNzLT51cGRhdGVfb2Q4X3NldHRpbmdzKChzbXUpLCAoaW5kZXgpLCAodmFsdWUpKSA6IDAp CiAjZGVmaW5lIHNtdV9zZW5kX3NtY19tc2coc211LCBtc2cpIFwKIAkoKHNtdSktPmZ1bmNzLT5z ZW5kX3NtY19tc2c/IChzbXUpLT5mdW5jcy0+c2VuZF9zbWNfbXNnKChzbXUpLCAobXNnKSkgOiAw KQogI2RlZmluZSBzbXVfc2VuZF9zbWNfbXNnX3dpdGhfcGFyYW0oc211LCBtc2csIHBhcmFtKSBc CkBAIC01NzgsNiArNTg2LDggQEAgc3RydWN0IHNtdV9mdW5jcwogCSgoc211KS0+cHB0X2Z1bmNz LT5wb3B1bGF0ZV91bWRfc3RhdGVfY2xrID8gKHNtdSktPnBwdF9mdW5jcy0+cG9wdWxhdGVfdW1k X3N0YXRlX2Nsaygoc211KSkgOiAwKQogI2RlZmluZSBzbXVfc2V0X2RlZmF1bHRfb2Q4X3NldHRp bmdzKHNtdSkgXAogCSgoc211KS0+cHB0X2Z1bmNzLT5zZXRfZGVmYXVsdF9vZDhfc2V0dGluZ3Mg PyAoc211KS0+cHB0X2Z1bmNzLT5zZXRfZGVmYXVsdF9vZDhfc2V0dGluZ3MoKHNtdSkpIDogMCkK KyNkZWZpbmUgc211X3VwZGF0ZV9zcGVjaWZpZWRfb2Q4X3ZhbHVlKHNtdSwgaW5kZXgsIHZhbHVl KSBcCisJKChzbXUpLT5wcHRfZnVuY3MtPnVwZGF0ZV9zcGVjaWZpZWRfb2Q4X3ZhbHVlID8gKHNt dSktPnBwdF9mdW5jcy0+dXBkYXRlX3NwZWNpZmllZF9vZDhfdmFsdWUoKHNtdSksIChpbmRleCks ICh2YWx1ZSkpIDogMCkKICNkZWZpbmUgc211X2dldF9wb3dlcl9saW1pdChzbXUpIFwKIAkoKHNt dSktPmZ1bmNzLT5nZXRfcG93ZXJfbGltaXQ/IChzbXUpLT5mdW5jcy0+Z2V0X3Bvd2VyX2xpbWl0 KChzbXUpKSA6IDApCiAjZGVmaW5lIHNtdV9nZXRfY3VycmVudF9jbGtfZnJlcShzbXUsIGNsa19p ZCwgdmFsdWUpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3Nt dV92MTFfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211X3YxMV8wLmMKaW5k ZXggM2IyNDY0Zi4uMTMwNGJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dl cnBsYXkvc211X3YxMV8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvc211 X3YxMV8wLmMKQEAgLTE1MjEsNiArMTUyMSwzMiBAQCBzdGF0aWMgaW50IHNtdV92MTFfMF9zZXRf cG93ZXJfcHJvZmlsZV9tb2RlKHN0cnVjdCBzbXVfY29udGV4dCAqc211LCBsb25nICppbnB1dAog CXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc211X3YxMV8wX3VwZGF0ZV9vZDhfc2V0dGlu Z3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCisJCQkJCXVpbnQzMl90IGluZGV4LAorCQkJCQl1 aW50MzJfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc211X3RhYmxlX2NvbnRleHQgKnRhYmxlX2NvbnRl eHQgPSAmc211LT5zbXVfdGFibGU7CisJaW50IHJldDsKKworCXJldCA9IHNtdV91cGRhdGVfdGFi bGUoc211LCBUQUJMRV9PVkVSRFJJVkUsCisJCQkgICAgICAgdGFibGVfY29udGV4dC0+b3ZlcmRy aXZlX3RhYmxlLCBmYWxzZSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxlZCB0byBleHBv cnQgb3ZlciBkcml2ZSB0YWJsZSFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNtdV91cGRh dGVfc3BlY2lmaWVkX29kOF92YWx1ZShzbXUsIGluZGV4LCB2YWx1ZSk7CisKKwlyZXQgPSBzbXVf dXBkYXRlX3RhYmxlKHNtdSwgVEFCTEVfT1ZFUkRSSVZFLAorCQkJICAgICAgIHRhYmxlX2NvbnRl eHQtPm92ZXJkcml2ZV90YWJsZSwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIkZhaWxl ZCB0byBpbXBvcnQgb3ZlciBkcml2ZSB0YWJsZSFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNtdV9mdW5jcyBzbXVfdjExXzBf ZnVuY3MgPSB7CiAJLmluaXRfbWljcm9jb2RlID0gc211X3YxMV8wX2luaXRfbWljcm9jb2RlLAog CS5sb2FkX21pY3JvY29kZSA9IHNtdV92MTFfMF9sb2FkX21pY3JvY29kZSwKQEAgLTE1NjQsNiAr MTU5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc211X2Z1bmNzIHNtdV92MTFfMF9mdW5jcyA9 IHsKIAkuY29udl9wb3dlcl9wcm9maWxlX3RvX3BwbGliX3dvcmtsb2FkID0gc211X3YxMV8wX2Nv bnZfcG93ZXJfcHJvZmlsZV90b19wcGxpYl93b3JrbG9hZCwKIAkuZ2V0X3Bvd2VyX3Byb2ZpbGVf bW9kZSA9IHNtdV92MTFfMF9nZXRfcG93ZXJfcHJvZmlsZV9tb2RlLAogCS5zZXRfcG93ZXJfcHJv ZmlsZV9tb2RlID0gc211X3YxMV8wX3NldF9wb3dlcl9wcm9maWxlX21vZGUsCisJLnVwZGF0ZV9v ZDhfc2V0dGluZ3MgPSBzbXVfdjExXzBfdXBkYXRlX29kOF9zZXR0aW5ncywKIH07CiAKIHZvaWQg c211X3YxMV8wX3NldF9zbXVfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMKaW5kZXggZGZmNWQ4My4uZGEyMjRk OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvdmVnYTIwX3BwdC5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L3ZlZ2EyMF9wcHQuYwpAQCAtMTg0 Nyw2ICsxODQ3LDgzIEBAIHZlZ2EyMF9mb3JjZV9wZXJmb3JtYW5jZV9sZXZlbChzdHJ1Y3Qgc211 X2NvbnRleHQgKnNtdSwgZW51bSBhbWRfZHBtX2ZvcmNlZF9sZXZlCiAJcmV0dXJuIHJldDsKIH0K IAorc3RhdGljIGludCB2ZWdhMjBfdXBkYXRlX3NwZWNpZmllZF9vZDhfdmFsdWUoc3RydWN0IHNt dV9jb250ZXh0ICpzbXUsCisJCQkJCSAgICAgdWludDMyX3QgaW5kZXgsCisJCQkJCSAgICAgdWlu dDMyX3QgdmFsdWUpCit7CisJc3RydWN0IHNtdV90YWJsZV9jb250ZXh0ICp0YWJsZV9jb250ZXh0 ID0gJnNtdS0+c211X3RhYmxlOworCU92ZXJEcml2ZVRhYmxlX3QgKm9kX3RhYmxlID0KKwkJKE92 ZXJEcml2ZVRhYmxlX3QgKikodGFibGVfY29udGV4dC0+b3ZlcmRyaXZlX3RhYmxlKTsKKwlzdHJ1 Y3QgdmVnYTIwX29kOF9zZXR0aW5ncyAqb2Q4X3NldHRpbmdzID0KKwkJKHN0cnVjdCB2ZWdhMjBf b2Q4X3NldHRpbmdzICopdGFibGVfY29udGV4dC0+b2Q4X3NldHRpbmdzOworCisJc3dpdGNoIChp bmRleCkgeworCWNhc2UgT0Q4X1NFVFRJTkdfR0ZYQ0xLX0ZNSU46CisJCW9kX3RhYmxlLT5HZnhj bGtGbWluID0gKHVpbnQxNl90KXZhbHVlOworCQlicmVhazsKKworCWNhc2UgT0Q4X1NFVFRJTkdf R0ZYQ0xLX0ZNQVg6CisJCWlmICh2YWx1ZSA8IG9kOF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2Fy cmF5W09EOF9TRVRUSU5HX0dGWENMS19GTUFYXS5taW5fdmFsdWUgfHwKKwkJICAgIHZhbHVlID4g b2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfR0ZYQ0xLX0ZNQVhd Lm1heF92YWx1ZSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlvZF90YWJsZS0+R2Z4Y2xrRm1heCA9 ICh1aW50MTZfdCl2YWx1ZTsKKwkJYnJlYWs7CisKKwljYXNlIE9EOF9TRVRUSU5HX0dGWENMS19G UkVRMToKKwkJb2RfdGFibGUtPkdmeGNsa0ZyZXExID0gKHVpbnQxNl90KXZhbHVlOworCQlicmVh azsKKworCWNhc2UgT0Q4X1NFVFRJTkdfR0ZYQ0xLX1ZPTFRBR0UxOgorCQlvZF90YWJsZS0+R2Z4 Y2xrVm9sdDEgPSAodWludDE2X3QpdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBPRDhfU0VUVElO R19HRlhDTEtfRlJFUTI6CisJCW9kX3RhYmxlLT5HZnhjbGtGcmVxMiA9ICh1aW50MTZfdCl2YWx1 ZTsKKwkJYnJlYWs7CisKKwljYXNlIE9EOF9TRVRUSU5HX0dGWENMS19WT0xUQUdFMjoKKwkJb2Rf dGFibGUtPkdmeGNsa1ZvbHQyID0gKHVpbnQxNl90KXZhbHVlOworCQlicmVhazsKKworCWNhc2Ug T0Q4X1NFVFRJTkdfR0ZYQ0xLX0ZSRVEzOgorCQlvZF90YWJsZS0+R2Z4Y2xrRnJlcTMgPSAodWlu dDE2X3QpdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBPRDhfU0VUVElOR19HRlhDTEtfVk9MVEFH RTM6CisJCW9kX3RhYmxlLT5HZnhjbGtWb2x0MyA9ICh1aW50MTZfdCl2YWx1ZTsKKwkJYnJlYWs7 CisKKwljYXNlIE9EOF9TRVRUSU5HX1VDTEtfRk1BWDoKKwkJaWYgKHZhbHVlIDwgb2Q4X3NldHRp bmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfVUNMS19GTUFYXS5taW5fdmFsdWUg fHwKKwkJICAgIHZhbHVlID4gb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NF VFRJTkdfVUNMS19GTUFYXS5tYXhfdmFsdWUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJb2RfdGFi bGUtPlVjbGtGbWF4ID0gKHVpbnQxNl90KXZhbHVlOworCQlicmVhazsKKworCWNhc2UgT0Q4X1NF VFRJTkdfUE9XRVJfUEVSQ0VOVEFHRToKKwkJb2RfdGFibGUtPk92ZXJEcml2ZVBjdCA9IChpbnQx Nl90KXZhbHVlOworCQlicmVhazsKKworCWNhc2UgT0Q4X1NFVFRJTkdfRkFOX0FDT1VTVElDX0xJ TUlUOgorCQlvZF90YWJsZS0+RmFuTWF4aW11bVJwbSA9ICh1aW50MTZfdCl2YWx1ZTsKKwkJYnJl YWs7CisKKwljYXNlIE9EOF9TRVRUSU5HX0ZBTl9NSU5fU1BFRUQ6CisJCW9kX3RhYmxlLT5GYW5N aW5pbXVtUHdtID0gKHVpbnQxNl90KXZhbHVlOworCQlicmVhazsKKworCWNhc2UgT0Q4X1NFVFRJ TkdfRkFOX1RBUkdFVF9URU1QOgorCQlvZF90YWJsZS0+RmFuVGFyZ2V0VGVtcGVyYXR1cmUgPSAo dWludDE2X3QpdmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBPRDhfU0VUVElOR19PUEVSQVRJTkdf VEVNUF9NQVg6CisJCW9kX3RhYmxlLT5NYXhPcFRlbXAgPSAodWludDE2X3QpdmFsdWU7CisJCWJy ZWFrOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBwdGFibGVf ZnVuY3MgdmVnYTIwX3BwdF9mdW5jcyA9IHsKIAkuYWxsb2NfZHBtX2NvbnRleHQgPSB2ZWdhMjBf YWxsb2NhdGVfZHBtX2NvbnRleHQsCiAJLnN0b3JlX3Bvd2VycGxheV90YWJsZSA9IHZlZ2EyMF9z dG9yZV9wb3dlcnBsYXlfdGFibGUsCkBAIC0xODY2LDYgKzE5NDMsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IHBwdGFibGVfZnVuY3MgdmVnYTIwX3BwdF9mdW5jcyA9IHsKIAkuZ2V0X29kX3BlcmNl bnRhZ2UgPSB2ZWdhMjBfZ2V0X29kX3BlcmNlbnRhZ2UsCiAJLmdldF9wZXJmb3JtYW5jZV9sZXZl bCA9IHZlZ2EyMF9nZXRfcGVyZm9ybWFuY2VfbGV2ZWwsCiAJLmZvcmNlX3BlcmZvcm1hbmNlX2xl dmVsID0gdmVnYTIwX2ZvcmNlX3BlcmZvcm1hbmNlX2xldmVsLAorCS51cGRhdGVfc3BlY2lmaWVk X29kOF92YWx1ZSA9IHZlZ2EyMF91cGRhdGVfc3BlY2lmaWVkX29kOF92YWx1ZSwKIH07CiAKIHZv aWQgdmVnYTIwX3NldF9wcHRfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCi0tIAoyLjcu NAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdm eCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==