From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v5 12/13] x86/traps: move some PV specific functions to pv/traps.c Date: Mon, 26 Jun 2017 17:28:41 +0100 Message-ID: <20170626162842.482-13-wei.liu2@citrix.com> References: <20170626162842.482-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPX9a-0008Ac-K9 for xen-devel@lists.xenproject.org; Mon, 26 Jun 2017 16:46:22 +0000 In-Reply-To: <20170626162842.482-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhvc2UgZnVuY3Rpb25zIG11c3QgYmUgbW92ZWQgYXQgdGhlIHNhbWUgdGltZS4gQWxzbyBtb3Zl IHNvZnRpcnFfdHJhcApiZWNhdXNlIGl0IGlzIG9ubHkgdXNlZCB0aGVyZS4KCkZpeCBzb21lIGNv ZGluZyBzdHlsZSBpc3N1ZXMgd2hpbGUgbW92aW5nIGNvZGUuCgpTaWduZWQtb2ZmLWJ5OiBXZWkg TGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wdi90cmFwcy5jICAg ICB8IDEwNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVu L2FyY2gveDg2L3RyYXBzLmMgICAgICAgIHwgIDg4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvdHJhcHMuaCB8ICAgNiAtLS0KIDMgZmls ZXMgY2hhbmdlZCwgMTA0IGluc2VydGlvbnMoKyksIDk0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3hlbi9hcmNoL3g4Ni9wdi90cmFwcy5jIGIveGVuL2FyY2gveDg2L3B2L3RyYXBzLmMKaW5k ZXggN2QyZjlhYTYzOC4uMWZjZTdkZjBjMCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L3Ry YXBzLmMKKysrIGIveGVuL2FyY2gveDg2L3B2L3RyYXBzLmMKQEAgLTE5LDkgKzE5LDExIEBACiAg KiBDb3B5cmlnaHQgKGMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgTHRkLgogICovCiAKKyNpbmNsdWRl IDx4ZW4vZXZlbnQuaD4KICNpbmNsdWRlIDx4ZW4vaHlwZXJjYWxsLmg+CiAjaW5jbHVkZSA8eGVu L2xpYi5oPgogI2luY2x1ZGUgPHhlbi90cmFjZS5oPgorI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+ CiAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9zaGFyZWQuaD4KQEAgLTE0 OCw2ICsxNTAsMTA4IEBAIHZvaWQgaW5pdF9pbnQ4MF9kaXJlY3RfdHJhcChzdHJ1Y3QgdmNwdSAq dikKICAgICAgICAgdGItPmZsYWdzID0gVEJGX0VYQ0VQVElPTiB8IChUSV9HRVRfSUYodGkpID8g VEJGX0lOVEVSUlVQVCA6IDApOwogfQogCitzdHJ1Y3Qgc29mdGlycV90cmFwIHsKKyAgICBzdHJ1 Y3QgZG9tYWluICpkb21haW47IC8qIGRvbWFpbiB0byBpbmplY3QgdHJhcCAqLworICAgIHN0cnVj dCB2Y3B1ICp2Y3B1OyAgICAgLyogdmNwdSB0byBpbmplY3QgdHJhcCAqLworICAgIGludCBwcm9j ZXNzb3I7ICAgICAgICAgLyogcGh5c2ljYWwgY3B1IHRvIGluamVjdCB0cmFwICovCit9OworCitz dGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNvZnRpcnFfdHJhcCwgc29mdGlycV90cmFwKTsK Kworc3RhdGljIHZvaWQgbm1pX21jZV9zb2Z0aXJxKHZvaWQpCit7CisgICAgaW50IGNwdSA9IHNt cF9wcm9jZXNzb3JfaWQoKTsKKyAgICBzdHJ1Y3Qgc29mdGlycV90cmFwICpzdCA9ICZwZXJfY3B1 KHNvZnRpcnFfdHJhcCwgY3B1KTsKKworICAgIEJVR19PTihzdC0+dmNwdSA9PSBOVUxMKTsKKwor ICAgIC8qCisgICAgICogU2V0IHRoZSB0bXAgdmFsdWUgdW5jb25kaXRpb25hbGx5LCBzbyB0aGF0 IHRoZSBjaGVjayBpbiB0aGUgaXJldAorICAgICAqIGh5cGVyY2FsbCB3b3Jrcy4KKyAgICAgKi8K KyAgICBjcHVtYXNrX2NvcHkoc3QtPnZjcHUtPmNwdV9oYXJkX2FmZmluaXR5X3RtcCwKKyAgICAg ICAgICAgICAgICAgc3QtPnZjcHUtPmNwdV9oYXJkX2FmZmluaXR5KTsKKworICAgIGlmICggKGNw dSAhPSBzdC0+cHJvY2Vzc29yKSB8fAorICAgICAgICAgKHN0LT5wcm9jZXNzb3IgIT0gc3QtPnZj cHUtPnByb2Nlc3NvcikgKQorICAgIHsKKworICAgICAgICAvKgorCSAqIFdlIGFyZSBvbiBhIGRp ZmZlcmVudCBwaHlzaWNhbCBjcHUuICBNYWtlIHN1cmUgdG8gd2FrZXVwIHRoZSB2Y3B1IG9uCisJ ICogdGhlIHNwZWNpZmllZCBwcm9jZXNzb3IuCisgICAgICAgICAqLworICAgICAgICB2Y3B1X3Nl dF9oYXJkX2FmZmluaXR5KHN0LT52Y3B1LCBjcHVtYXNrX29mKHN0LT5wcm9jZXNzb3IpKTsKKwor ICAgICAgICAvKiBBZmZpbml0eSBpcyByZXN0b3JlZCBpbiB0aGUgaXJldCBoeXBlcmNhbGwuICov CisgICAgfQorCisgICAgLyoKKyAgICAgKiBPbmx5IHVzZWQgdG8gZGVmZXIgd2FrZXVwIG9mIGRv bWFpbi92Y3B1IHRvIGEgc2FmZSAobm9uLU5NSS9NQ0UpCisgICAgICogY29udGV4dC4KKyAgICAg Ki8KKyAgICB2Y3B1X2tpY2soc3QtPnZjcHUpOworICAgIHN0LT52Y3B1ID0gTlVMTDsKK30KKwor dm9pZCBfX2luaXQgcHZfdHJhcF9pbml0KHZvaWQpCit7CisgICAgLyogVGhlIDMyLW9uLTY0IGh5 cGVyY2FsbCB2ZWN0b3IgaXMgb25seSBhY2Nlc3NpYmxlIGZyb20gcmluZyAxLiAqLworICAgIF9z ZXRfZ2F0ZShpZHRfdGFibGUgKyBIWVBFUkNBTExfVkVDVE9SLAorICAgICAgICAgICAgICBTWVNf REVTQ190cmFwX2dhdGUsIDEsIGVudHJ5X2ludDgyKTsKKworICAgIC8qIEZhc3QgdHJhcCBmb3Ig aW50ODAgKGZhc3RlciB0aGFuIHRha2luZyB0aGUgI0dQLWZpeHVwIHBhdGgpLiAqLworICAgIF9z ZXRfZ2F0ZShpZHRfdGFibGUgKyBMRUdBQ1lfU1lTQ0FMTF9WRUNUT1IsIFNZU19ERVNDX3RyYXBf Z2F0ZSwgMywKKyAgICAgICAgICAgICAgJmludDgwX2RpcmVjdF90cmFwKTsKKworICAgIG9wZW5f c29mdGlycShOTUlfTUNFX1NPRlRJUlEsIG5taV9tY2Vfc29mdGlycSk7Cit9CisKK2ludCBwdl9y YWlzZV9pbnRlcnJ1cHQoc3RydWN0IHZjcHUgKnYsIHVpbnQ4X3QgdHJhcF9ucikKK3sKKyAgICBz dHJ1Y3Qgc29mdGlycV90cmFwICpzdCA9ICZwZXJfY3B1KHNvZnRpcnFfdHJhcCwgc21wX3Byb2Nl c3Nvcl9pZCgpKTsKKworICAgIHN3aXRjaCAoIHRyYXBfbnIgKQorICAgIHsKKyAgICBjYXNlIFRS QVBfbm1pOgorICAgICAgICBpZiAoIGNtcHhjaGdwdHIoJnN0LT52Y3B1LCBOVUxMLCB2KSApCisg ICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICBpZiAoICF0ZXN0X2FuZF9zZXRfYm9v bCh2LT5ubWlfcGVuZGluZykgKQorICAgICAgICB7CisgICAgICAgICAgICBzdC0+ZG9tYWluID0g di0+ZG9tYWluOworICAgICAgICAgICAgc3QtPnByb2Nlc3NvciA9IHYtPnByb2Nlc3NvcjsKKwor ICAgICAgICAgICAgLyogTm90IHNhZmUgdG8gd2FrZSB1cCBhIHZjcHUgaGVyZSAqLworICAgICAg ICAgICAgcmFpc2Vfc29mdGlycShOTUlfTUNFX1NPRlRJUlEpOworICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIH0KKyAgICAgICAgc3QtPnZjcHUgPSBOVUxMOworICAgICAgICBicmVhazsK KworICAgIGNhc2UgVFJBUF9tYWNoaW5lX2NoZWNrOgorICAgICAgICBpZiAoIGNtcHhjaGdwdHIo JnN0LT52Y3B1LCBOVUxMLCB2KSApCisgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCisgICAg ICAgIC8qCisJICogV2UgYXJlIGNhbGxlZCBieSB0aGUgbWFjaGluZSBjaGVjayAoZXhjZXB0aW9u IG9yIHBvbGxpbmcpIGhhbmRsZXJzCisJICogb24gdGhlIHBoeXNpY2FsIENQVSB0aGF0IHJlcG9y dGVkIGEgbWFjaGluZSBjaGVjayBlcnJvci4KKyAgICAgICAgICovCisgICAgICAgIGlmICggIXRl c3RfYW5kX3NldF9ib29sKHYtPm1jZV9wZW5kaW5nKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHN0LT5kb21haW4gPSB2LT5kb21haW47CisgICAgICAgICAgICBzdC0+cHJvY2Vzc29yID0gdi0+ cHJvY2Vzc29yOworCisgICAgICAgICAgICAvKiBub3Qgc2FmZSB0byB3YWtlIHVwIGEgdmNwdSBo ZXJlICovCisgICAgICAgICAgICByYWlzZV9zb2Z0aXJxKE5NSV9NQ0VfU09GVElSUSk7CisgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBzdC0+dmNwdSA9IE5VTEw7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIERlbGl2ZXJ5IGZhaWxlZCAqLworICAgIHJl dHVybiAtRUlPOworfQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L3RyYXBzLmMgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwppbmRl eCBmMTJhNTIwMzJhLi40ZDZmNDJkMTY4IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvdHJhcHMu YworKysgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwpAQCAtMTU0MCwzOSArMTU0MCw2IEBAIHZvaWQg ZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogICAgIHBh bmljKCJHRU5FUkFMIFBST1RFQ1RJT04gRkFVTFRcbltlcnJvcl9jb2RlPSUwNHhdIiwgcmVncy0+ ZXJyb3JfY29kZSk7CiB9CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29mdGlycV90 cmFwLCBzb2Z0aXJxX3RyYXApOwotCi1zdGF0aWMgdm9pZCBubWlfbWNlX3NvZnRpcnEodm9pZCkK LXsKLSAgICBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotICAgIHN0cnVjdCBzb2Z0aXJx X3RyYXAgKnN0ID0gJnBlcl9jcHUoc29mdGlycV90cmFwLCBjcHUpOwotCi0gICAgQlVHX09OKHN0 LT52Y3B1ID09IE5VTEwpOwotCi0gICAgLyogU2V0IHRoZSB0bXAgdmFsdWUgdW5jb25kaXRpb25h bGx5LCBzbyB0aGF0Ci0gICAgICogdGhlIGNoZWNrIGluIHRoZSBpcmV0IGh5cGVyY2FsbCB3b3Jr cy4gKi8KLSAgICBjcHVtYXNrX2NvcHkoc3QtPnZjcHUtPmNwdV9oYXJkX2FmZmluaXR5X3RtcCwK LSAgICAgICAgICAgICAgICAgc3QtPnZjcHUtPmNwdV9oYXJkX2FmZmluaXR5KTsKLQotICAgIGlm ICgoY3B1ICE9IHN0LT5wcm9jZXNzb3IpCi0gICAgICAgfHwgKHN0LT5wcm9jZXNzb3IgIT0gc3Qt PnZjcHUtPnByb2Nlc3NvcikpCi0gICAgewotICAgICAgICAvKiBXZSBhcmUgb24gYSBkaWZmZXJl bnQgcGh5c2ljYWwgY3B1LgotICAgICAgICAgKiBNYWtlIHN1cmUgdG8gd2FrZXVwIHRoZSB2Y3B1 IG9uIHRoZQotICAgICAgICAgKiBzcGVjaWZpZWQgcHJvY2Vzc29yLgotICAgICAgICAgKi8KLSAg ICAgICAgdmNwdV9zZXRfaGFyZF9hZmZpbml0eShzdC0+dmNwdSwgY3B1bWFza19vZihzdC0+cHJv Y2Vzc29yKSk7Ci0KLSAgICAgICAgLyogQWZmaW5pdHkgaXMgcmVzdG9yZWQgaW4gdGhlIGlyZXQg aHlwZXJjYWxsLiAqLwotICAgIH0KLQotICAgIC8qIE9ubHkgdXNlZCB0byBkZWZlciB3YWtldXAg b2YgZG9tYWluL3ZjcHUgdG8KLSAgICAgKiBhIHNhZmUgKG5vbi1OTUkvTUNFKSBjb250ZXh0Lgot ICAgICAqLwotICAgIHZjcHVfa2ljayhzdC0+dmNwdSk7Ci0gICAgc3QtPnZjcHUgPSBOVUxMOwot fQotCiBzdGF0aWMgdm9pZCBwY2lfc2Vycl9zb2Z0aXJxKHZvaWQpCiB7CiAgICAgcHJpbnRrKCJc blxuTk1JIC0gUENJIHN5c3RlbSBlcnJvciAoU0VSUilcbiIpOwpAQCAtMTkzNCwxOSArMTkwMSw2 IEBAIHZvaWQgX19pbml0IGluaXRfaWR0X3RyYXBzKHZvaWQpCiAgICAgdGhpc19jcHUoY29tcGF0 X2dkdF90YWJsZSkgPSBib290X2NwdV9jb21wYXRfZ2R0X3RhYmxlOwogfQogCi12b2lkIF9faW5p dCBwdl90cmFwX2luaXQodm9pZCkKLXsKLSAgICAvKiBUaGUgMzItb24tNjQgaHlwZXJjYWxsIHZl Y3RvciBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSByaW5nIDEuICovCi0gICAgX3NldF9nYXRlKGlk dF90YWJsZSArIEhZUEVSQ0FMTF9WRUNUT1IsCi0gICAgICAgICAgICAgIFNZU19ERVNDX3RyYXBf Z2F0ZSwgMSwgZW50cnlfaW50ODIpOwotCi0gICAgLyogRmFzdCB0cmFwIGZvciBpbnQ4MCAoZmFz dGVyIHRoYW4gdGFraW5nIHRoZSAjR1AtZml4dXAgcGF0aCkuICovCi0gICAgX3NldF9nYXRlKGlk dF90YWJsZSArIExFR0FDWV9TWVNDQUxMX1ZFQ1RPUiwgU1lTX0RFU0NfdHJhcF9nYXRlLCAzLAot ICAgICAgICAgICAgICAmaW50ODBfZGlyZWN0X3RyYXApOwotCi0gICAgb3Blbl9zb2Z0aXJxKE5N SV9NQ0VfU09GVElSUSwgbm1pX21jZV9zb2Z0aXJxKTsKLX0KLQogZXh0ZXJuIHZvaWQgKCpjb25z dCBhdXRvZ2VuX2VudHJ5cG9pbnRzW05SX1ZFQ1RPUlNdKSh2b2lkKTsKIHZvaWQgX19pbml0IHRy YXBfaW5pdCh2b2lkKQogewpAQCAtMTk3OSw0OCArMTkzMyw2IEBAIHZvaWQgX19pbml0IHRyYXBf aW5pdCh2b2lkKQogICAgIG9wZW5fc29mdGlycShQQ0lfU0VSUl9TT0ZUSVJRLCBwY2lfc2Vycl9z b2Z0aXJxKTsKIH0KIAotaW50IHB2X3JhaXNlX2ludGVycnVwdChzdHJ1Y3QgdmNwdSAqdiwgdWlu dDhfdCB0cmFwX25yKQotewotICAgIHN0cnVjdCBzb2Z0aXJxX3RyYXAgKnN0ID0gJnBlcl9jcHUo c29mdGlycV90cmFwLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0gICAgc3dpdGNoICh0cmFwX25y KSB7Ci0gICAgY2FzZSBUUkFQX25taToKLSAgICAgICAgaWYgKCBjbXB4Y2hncHRyKCZzdC0+dmNw dSwgTlVMTCwgdikgKQotICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgaWYgKCAh dGVzdF9hbmRfc2V0X2Jvb2wodi0+bm1pX3BlbmRpbmcpICkgewotICAgICAgICAgICAgICAgc3Qt PmRvbWFpbiA9IHYtPmRvbWFpbjsKLSAgICAgICAgICAgICAgIHN0LT5wcm9jZXNzb3IgPSB2LT5w cm9jZXNzb3I7Ci0KLSAgICAgICAgICAgICAgIC8qIG5vdCBzYWZlIHRvIHdha2UgdXAgYSB2Y3B1 IGhlcmUgKi8KLSAgICAgICAgICAgICAgIHJhaXNlX3NvZnRpcnEoTk1JX01DRV9TT0ZUSVJRKTsK LSAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIHN0LT52Y3B1ID0g TlVMTDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRSQVBfbWFjaGluZV9jaGVjazoKLSAg ICAgICAgaWYgKCBjbXB4Y2hncHRyKCZzdC0+dmNwdSwgTlVMTCwgdikgKQotICAgICAgICAgICAg cmV0dXJuIC1FQlVTWTsKLQotICAgICAgICAvKiBXZSBhcmUgY2FsbGVkIGJ5IHRoZSBtYWNoaW5l IGNoZWNrIChleGNlcHRpb24gb3IgcG9sbGluZykgaGFuZGxlcnMKLSAgICAgICAgICogb24gdGhl IHBoeXNpY2FsIENQVSB0aGF0IHJlcG9ydGVkIGEgbWFjaGluZSBjaGVjayBlcnJvci4gKi8KLQot ICAgICAgICBpZiAoICF0ZXN0X2FuZF9zZXRfYm9vbCh2LT5tY2VfcGVuZGluZykgKSB7Ci0gICAg ICAgICAgICAgICAgc3QtPmRvbWFpbiA9IHYtPmRvbWFpbjsKLSAgICAgICAgICAgICAgICBzdC0+ cHJvY2Vzc29yID0gdi0+cHJvY2Vzc29yOwotCi0gICAgICAgICAgICAgICAgLyogbm90IHNhZmUg dG8gd2FrZSB1cCBhIHZjcHUgaGVyZSAqLwotICAgICAgICAgICAgICAgIHJhaXNlX3NvZnRpcnEo Tk1JX01DRV9TT0ZUSVJRKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot ICAgICAgICBzdC0+dmNwdSA9IE5VTEw7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8q IGRlbGl2ZXJ5IGZhaWxlZCAqLwotICAgIHJldHVybiAtRUlPOwotfQotCiB2b2lkIGFjdGl2YXRl X2RlYnVncmVncyhjb25zdCBzdHJ1Y3QgdmNwdSAqY3VycikKIHsKICAgICBBU1NFUlQoY3VyciA9 PSBjdXJyZW50KTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvdHJhcHMuaCBiL3hl bi9pbmNsdWRlL2FzbS14ODYvdHJhcHMuaAppbmRleCAxZTNmOWM3ZmFkLi44ZDkwM2VjOTFiIDEw MDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3RyYXBzLmgKKysrIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni90cmFwcy5oCkBAIC0xOSwxMiArMTksNiBAQAogI2lmbmRlZiBBU01fVFJBUF9ICiAj ZGVmaW5lIEFTTV9UUkFQX0gKIAotc3RydWN0IHNvZnRpcnFfdHJhcCB7Ci0Jc3RydWN0IGRvbWFp biAqZG9tYWluOyAgLyogZG9tYWluIHRvIGluamVjdCB0cmFwICovCi0Jc3RydWN0IHZjcHUgKnZj cHU7CS8qIHZjcHUgdG8gaW5qZWN0IHRyYXAgKi8KLQlpbnQgcHJvY2Vzc29yOwkJLyogcGh5c2lj YWwgY3B1IHRvIGluamVjdCB0cmFwICovCi19OwotCiBzdHJ1Y3QgY3B1X3VzZXJfcmVnczsKIAog dm9pZCBhc3luY19leGNlcHRpb25fY2xlYW51cChzdHJ1Y3QgdmNwdSAqKTsKLS0gCjIuMTEuMAoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4u b3JnL3hlbi1kZXZlbAo=