From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xin Li Subject: [PATCH 2/2] xen/xsm: Add new SILO mode for XSM Date: Tue, 3 Jul 2018 09:26:29 +0800 Message-ID: <20180703012629.507-2-xin.li@citrix.com> References: <20180703012629.507-1-xin.li@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180703012629.507-1-xin.li@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Sergey Dyasli , Stefano Stabellini , Wei Liu , George Dunlap , Xin Li , Tim Deegan , Jan Beulich , Andrew Cooper , Ming Lu , Daniel De Graaf List-Id: xen-devel@lists.xenproject.org V2hlbiBTSUxPIGlzIGVuYWJsZWQsIHRoZXJlIHdvdWxkIGJlIG5vIHBhZ2Utc2hhcmluZyBvciBl dmVudCBub3RpZmljYXRpb25zCmJldHdlZW4gdW5wcml2aWxlZ2VkIFZNcyAobm8gZ3JhbnQgdGFi bGVzIG9yIGV2ZW50IGNoYW5uZWxzKS4KClNpZ25lZC1vZmYtYnk6IFhpbiBMaSA8eGluLmxpQGNp dHJpeC5jb20+CgotLS0KQ0M6IERhbmllbCBEZSBHcmFhZiA8ZGdkZWdyYUB0eWNoby5uc2EuZ292 PgpDQzogR2VvcmdlIER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgpDQzogSmFu IEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29tPgpDQzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxr b25yYWQud2lsa0BvcmFjbGUuY29tPgpDQzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGlu aUBrZXJuZWwub3JnPgpDQzogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+CkNDOiBXZWkgTGl1IDx3 ZWkubGl1MkBjaXRyaXguY29tPgpDQzogU2VyZ2V5IER5YXNsaSA8c2VyZ2V5LmR5YXNsaUBjaXRy aXguY29tPgpDQzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQ0M6 IE1pbmcgTHUgPG1pbmcubHVAY2l0cml4LmNvbT4KCnYyClRvIGZ1cnRoZXIgZGlzY3VzczoKMSkg aXMgdGhlIG5ldyBLY29uZmlnIG9wdGlvbiBYU01fU0lMTyBuZWNlc3Nhcnk/CndlIGNhbiBoYW5k bGUgU0lMTyBzaW1pbGFyIGFzIERVTU1ZLCB1c2luZyBleHN0aW5nIENPTkZJR19YU00uCgoyKSBl eHBsYWluICJ1bm1lZGlhdGVkIGNvbW11bmljYXRpb24gY2hhbm5lbCIKCjMpIGlzIGl0IE9LIHRv IHVzZSB0aGUgaW5kaXJlY3QgY2FsbCBkdW1teV94c21fb3BzLmV2dGNobl91bmJvdW5kPwoKLS0t CiBkb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93biB8ICAgNSArLQogeGVuL2NvbW1v bi9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgMTIgKysrKwogeGVuL2luY2x1ZGUveHNtL3hz bS5oICAgICAgICAgICAgICAgfCAgIDYgKysKIHhlbi94c20vTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHhlbi94c20vc2lsby5jICAgICAgICAgICAgICAgICAgICAgIHwgMTAy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi94c20veHNtX2NvcmUuYyAgICAgICAg ICAgICAgICAgIHwgICA5ICsrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMzQgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi94c20vc2lsby5jCgpkaWZmIC0t Z2l0IGEvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24gYi9kb2NzL21pc2MveGVu LWNvbW1hbmQtbGluZS5tYXJrZG93bgppbmRleCA3Y2EzNGFhMjczLi42YmJkNjdiNDM2IDEwMDY0 NAotLS0gYS9kb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgorKysgYi9kb2NzL21p c2MveGVuLWNvbW1hbmQtbGluZS5tYXJrZG93bgpAQCAtODY2LDcgKzg2Niw3IEBAIE5vdGUgdGhh dCBzcGVjaWZ5aW5nIHplcm8gYXMgZG9tVSB2YWx1ZSBtZWFucyB6ZXJvLCB3aGlsZSBmb3IgZG9t MCBpdCBtZWFucwogdG8gdXNlIHRoZSBkZWZhdWx0LgogCiAjIyMgeHNtCi0+IGA9IGR1bW15IHwg Zmxhc2tgCis+IGA9IGR1bW15IHwgZmxhc2sgfCBzaWxvYAogCiA+IERlZmF1bHQ6IGBkdW1teWAK IApAQCAtODc3LDYgKzg3Nyw5IEBAIHRoZSBoeXBlcnZpc29yIHdhcyBjb21waWxlZCB3aXRoIFhT TSBzdXBwb3J0LgogICBpdCdzIGFsc28gdXNlZCB3aGVuIFhTTSBpcyBjb21waWxlZCBvdXQuCiAq IGBmbGFza2A6IHRoaXMgaXMgdGhlIHBvbGljeSBiYXNlZCBhY2Nlc3MgY29udHJvbC4gIFRvIGNo b29zZSB0aGlzLCB0aGUKICAgc2VwYXJhdGVkIG9wdGlvbiBpbiBrY29uZmlnIG11c3QgYWxzbyBi ZSBlbmFibGVkLgorKiBgc2lsb2A6IHRoaXMgd2lsbCBkZW55IGFueSB1bm1lZGlhdGVkIGNvbW11 bmljYXRpb24gY2hhbm5lbHMgYmV0d2VlbgorICB1bnByaXZpbGVnZWQgVk1zLiAgVG8gY2hvb3Nl IHRoaXMsIHRoZSBzZXBhcmF0ZWQgb3B0aW9uIGluIGtjb25maWcgbXVzdCBhbHNvCisgIGJlIGVu YWJsZWQuCiAKICMjIyBmbGFzawogPiBgPSBwZXJtaXNzaXZlIHwgZW5mb3JjaW5nIHwgbGF0ZSB8 IGRpc2FibGVkYApkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9LY29uZmlnIGIveGVuL2NvbW1vbi9L Y29uZmlnCmluZGV4IDA2OGMzMjA2YTEuLjFmMzZkZmNjNWYgMTAwNjQ0Ci0tLSBhL3hlbi9jb21t b24vS2NvbmZpZworKysgYi94ZW4vY29tbW9uL0tjb25maWcKQEAgLTE0Myw2ICsxNDMsMTggQEAg Y29uZmlnIFhTTV9GTEFTS19QT0xJQ1kKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmln IFhTTV9TSUxPCisJZGVmX2Jvb2wgeQorCXByb21wdCAiU0lMTyBzdXBwb3J0IgorCWRlcGVuZHMg b24gWFNNCisJLS0taGVscC0tLQorCSAgRW5hYmxlcyBTSUxPIGFzIHRoZSBhY2Nlc3MgY29udHJv bCBtZWNoYW5pc20gdXNlZCBieSB0aGUgWFNNIGZyYW1ld29yay4KKwkgIFRoaXMgaXMgbm90IHRo ZSBkZWZhdWx0IG1vZHVsZSwgYWRkIGJvb3QgcGFyYW1ldGVyIHhzbT1zaWxvIHRvIGNob29zZQor CSAgaXQuIFRoaXMgd2lsbCBkZW55IGFueSB1bm1lZGlhdGVkIGNvbW11bmljYXRpb24gY2hhbm5l bHMgKGdyYW50IHRhYmxlcworCSAgYW5kIGV2ZW50IGNoYW5uZWxzKSBiZXR3ZWVuIHVucHJpdmls ZWdlZCBWTXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBMQVRFX0hXRE9NCiAJ Ym9vbCAiRGVkaWNhdGVkIGhhcmR3YXJlIGRvbWFpbiIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBh L3hlbi9pbmNsdWRlL3hzbS94c20uaCBiL3hlbi9pbmNsdWRlL3hzbS94c20uaAppbmRleCA3MGU3 YTY4NDlmLi4xMTUxOGU1YmQ2IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS94c20veHNtLmgKKysr IGIveGVuL2luY2x1ZGUveHNtL3hzbS5oCkBAIC03MzMsNiArNzMzLDEyIEBAIGV4dGVybiBjb25z dCB1bnNpZ25lZCBjaGFyIHhzbV9pbml0X2ZsYXNrX3BvbGljeVtdOwogZXh0ZXJuIGNvbnN0IHVu c2lnbmVkIGludCB4c21faW5pdF9mbGFza19wb2xpY3lfc2l6ZTsKICNlbmRpZgogCisjaWZkZWYg Q09ORklHX1hTTV9TSUxPCitleHRlcm4gdm9pZCBzaWxvX2luaXQodm9pZCk7CisjZWxzZQorc3Rh dGljIGlubGluZSB2b2lkIHNpbG9faW5pdCh2b2lkKSB7fQorI2VuZGlmCisKICNlbHNlIC8qIENP TkZJR19YU00gKi8KIAogI2luY2x1ZGUgPHhzbS9kdW1teS5oPgpkaWZmIC0tZ2l0IGEveGVuL3hz bS9NYWtlZmlsZSBiL3hlbi94c20vTWFrZWZpbGUKaW5kZXggOGJiNGEyNGYwOS4uZTRkNTgxZTA2 NSAxMDA2NDQKLS0tIGEveGVuL3hzbS9NYWtlZmlsZQorKysgYi94ZW4veHNtL01ha2VmaWxlCkBA IC0xLDUgKzEsNiBAQAogb2JqLXkgKz0geHNtX2NvcmUubwogb2JqLSQoQ09ORklHX1hTTSkgKz0g eHNtX3BvbGljeS5vCiBvYmotJChDT05GSUdfWFNNKSArPSBkdW1teS5vCitvYmotJChDT05GSUdf WFNNX1NJTE8pICs9IHNpbG8ubwogCiBzdWJkaXItJChDT05GSUdfWFNNX0ZMQVNLKSArPSBmbGFz awpkaWZmIC0tZ2l0IGEveGVuL3hzbS9zaWxvLmMgYi94ZW4veHNtL3NpbG8uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kNDQxNmYzYTk1Ci0tLSAvZGV2L251bGwKKysr IGIveGVuL3hzbS9zaWxvLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqIHhzbS9zaWxvLmMKKyAqCisgKiBTSUxPIG1vZHVsZSBmb3IgWFNNKFhlbiBTZWN1cml0 eSBNb2R1bGVzKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBDaXRyaXggU3lzdGVtcyBMdGQu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDx4 ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4c20veHNtLmg+CisKK3N0cnVjdCB4c21fb3BlcmF0aW9u cyBzaWxvX3hzbV9vcHM7CisKKy8qCisgKiBDaGVjayBpZiBpbnRlci1kb21haW4gY29tbXVuaWNh dGlvbiBpcyBhbGxvd2VkLgorICogUmV0dXJuIHRydWUgd2hlbiBwYXNzIGNoZWNrLgorICovCitz dGF0aWMgYm9vbCBzaWxvX21vZGVfZG9tX2NoZWNrKHN0cnVjdCBkb21haW4gKmxkb20sIHN0cnVj dCBkb21haW4gKnJkb20pCit7CisgICAgc3RydWN0IGRvbWFpbiAqY3VyX2RvbSA9IGN1cnJlbnQt PmRvbWFpbjsKKworICAgIHJldHVybiAoaXNfY29udHJvbF9kb21haW4oY3VyX2RvbSkgfHwgaXNf Y29udHJvbF9kb21haW4obGRvbSkgfHwKKyAgICAgICAgICAgIGlzX2NvbnRyb2xfZG9tYWluKHJk b20pIHx8IGxkb20gPT0gcmRvbSk7Cit9CisKK3N0YXRpYyBpbnQgc2lsb19ldnRjaG5fdW5ib3Vu ZChzdHJ1Y3QgZG9tYWluICpkMSwgc3RydWN0IGV2dGNobiAqY2huLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvbWlkX3QgaWQyKQoreworICAgIGludCByYyA9IC1FUEVSTTsKKyAg ICBzdHJ1Y3QgZG9tYWluICpkMiA9IHJjdV9sb2NrX2RvbWFpbl9ieV9pZChpZDIpOworICAgIGlm ICggZDIgIT0gTlVMTCAmJiBzaWxvX21vZGVfZG9tX2NoZWNrKGQxLCBkMikgKQorICAgICAgICBy YyA9IGR1bW15X3hzbV9vcHMuZXZ0Y2huX3VuYm91bmQoZDEsIGNobiwgaWQyKTsKKyAgICByY3Vf dW5sb2NrX2RvbWFpbihkMik7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNpbG9f ZXZ0Y2huX2ludGVyZG9tYWluKHN0cnVjdCBkb21haW4gKmQxLCBzdHJ1Y3QgZXZ0Y2huICpjaGFu MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvbWFpbiAqZDIs IHN0cnVjdCBldnRjaG4gKmNoYW4yKQoreworICAgIGlmICggc2lsb19tb2RlX2RvbV9jaGVjayhk MSwgZDIpICkKKyAgICAgICAgcmV0dXJuIGR1bW15X3hzbV9vcHMuZXZ0Y2huX2ludGVyZG9tYWlu KGQxLCBjaGFuMSwgZDIsIGNoYW4yKTsKKyAgICByZXR1cm4gLUVQRVJNOworfQorCitzdGF0aWMg aW50IHNpbG9fZ3JhbnRfbWFwcmVmKHN0cnVjdCBkb21haW4gKmQxLCBzdHJ1Y3QgZG9tYWluICpk MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZmxhZ3MpCit7CisgICAg aWYgKCBzaWxvX21vZGVfZG9tX2NoZWNrKGQxLCBkMikgKQorICAgICAgICByZXR1cm4gZHVtbXlf eHNtX29wcy5ncmFudF9tYXByZWYoZDEsIGQyLCBmbGFncyk7CisgICAgcmV0dXJuIC1FUEVSTTsK K30KKworc3RhdGljIGludCBzaWxvX2dyYW50X3RyYW5zZmVyKHN0cnVjdCBkb21haW4gKmQxLCBz dHJ1Y3QgZG9tYWluICpkMikKK3sKKyAgICBpZiAoIHNpbG9fbW9kZV9kb21fY2hlY2soZDEsIGQy KSApCisgICAgICAgIHJldHVybiBkdW1teV94c21fb3BzLmdyYW50X3RyYW5zZmVyKGQxLCBkMik7 CisgICAgcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGljIGludCBzaWxvX2dyYW50X2NvcHkoc3Ry dWN0IGRvbWFpbiAqZDEsIHN0cnVjdCBkb21haW4gKmQyKQoreworICAgIGlmICggc2lsb19tb2Rl X2RvbV9jaGVjayhkMSwgZDIpICkKKyAgICAgICAgcmV0dXJuIGR1bW15X3hzbV9vcHMuZ3JhbnRf Y29weShkMSwgZDIpOworICAgIHJldHVybiAtRVBFUk07Cit9CisKK3ZvaWQgX19pbml0IHNpbG9f aW5pdCh2b2lkKQoreworICAgIHByaW50aygiSW5pdGlhbGlzaW5nIFhTTSBTSUxPIG1vZGVcbiIp OworCisgICAgc2lsb194c21fb3BzID0gZHVtbXlfeHNtX29wczsKKworICAgIHNpbG9feHNtX29w cy5ldnRjaG5fdW5ib3VuZCA9IHNpbG9fZXZ0Y2huX3VuYm91bmQ7CisgICAgc2lsb194c21fb3Bz LmV2dGNobl9pbnRlcmRvbWFpbiA9IHNpbG9fZXZ0Y2huX2ludGVyZG9tYWluOworICAgIHNpbG9f eHNtX29wcy5ncmFudF9tYXByZWYgPSBzaWxvX2dyYW50X21hcHJlZjsKKyAgICBzaWxvX3hzbV9v cHMuZ3JhbnRfdHJhbnNmZXIgPSBzaWxvX2dyYW50X3RyYW5zZmVyOworICAgIHNpbG9feHNtX29w cy5ncmFudF9jb3B5ID0gc2lsb19ncmFudF9jb3B5OworCisgICAgeHNtX29wcyA9ICZzaWxvX3hz bV9vcHM7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZp bGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0Cisg KiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL3hz bS94c21fY29yZS5jIGIveGVuL3hzbS94c21fY29yZS5jCmluZGV4IGQ0NjY4ZWRhZDcuLjg5ZDVm ZDNiMmUgMTAwNjQ0Ci0tLSBhL3hlbi94c20veHNtX2NvcmUuYworKysgYi94ZW4veHNtL3hzbV9j b3JlLmMKQEAgLTM0LDYgKzM0LDcgQEAgc3RydWN0IHhzbV9vcGVyYXRpb25zICp4c21fb3BzOwog ZW51bSB4c21fYm9vdHBhcmFtIHsKICAgICBYU01fQk9PVFBBUkFNX0RVTU1ZLAogICAgIFhTTV9C T09UUEFSQU1fRkxBU0ssCisgICAgWFNNX0JPT1RQQVJBTV9TSUxPLAogfTsKIAogc3RhdGljIGVu dW0geHNtX2Jvb3RwYXJhbSBfX2luaXRkYXRhIHhzbV9ib290cGFyYW0gPSBYU01fQk9PVFBBUkFN X0RVTU1ZOwpAQCAtNDYsNiArNDcsMTAgQEAgc3RhdGljIGludCBfX2luaXQgcGFyc2VfeHNtX3Bh cmFtKGNvbnN0IGNoYXIgKnMpCiAjaWZkZWYgQ09ORklHX1hTTV9GTEFTSwogICAgIGVsc2UgaWYg KCAhc3RyY21wKHMsICJmbGFzayIpICkKICAgICAgICAgeHNtX2Jvb3RwYXJhbSA9IFhTTV9CT09U UEFSQU1fRkxBU0s7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWFNNX1NJTE8KKyAgICBlbHNlIGlm ICggIXN0cmNtcChzLCAic2lsbyIpICkKKyAgICAgICAgeHNtX2Jvb3RwYXJhbSA9IFhTTV9CT09U UEFSQU1fU0lMTzsKICNlbmRpZgogICAgIGVsc2UKICAgICAgICAgcmMgPSAtRUlOVkFMOwpAQCAt OTEsNiArOTYsMTAgQEAgc3RhdGljIGludCBfX2luaXQgeHNtX2NvcmVfaW5pdChjb25zdCB2b2lk ICpwb2xpY3lfYnVmZmVyLCBzaXplX3QgcG9saWN5X3NpemUpCiAgICAgICAgIGZsYXNrX2luaXQo cG9saWN5X2J1ZmZlciwgcG9saWN5X3NpemUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2Ug WFNNX0JPT1RQQVJBTV9TSUxPOgorICAgICAgICBzaWxvX2luaXQoKTsKKyAgICAgICAgYnJlYWs7 CisKICAgICBkZWZhdWx0OgogICAgICAgICBwcmludGsoIlhTTTogSW52YWxpZCB2YWx1ZSBmb3Ig eHNtPSBib290IHBhcmFtZXRlci5cbiIpOwogICAgICAgICBicmVhazsKLS0gCjIuMTguMAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=