From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH] TGL HAX drm/i915/tgl: Interrupts are overrated Date: Thu, 3 Oct 2019 23:10:39 +0100 Message-ID: <20191003221039.19006-1-chris@chris-wilson.co.uk> References: <20191003185613.27484-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 926AE6EA88 for ; Thu, 3 Oct 2019 22:11:39 +0000 (UTC) In-Reply-To: <20191003185613.27484-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2h5IHNsZWVwIHdoZW4geW91IGNhbiBidXN5d2FpdCBmb3IgYW4gaW50ZXJydXB0PyBUaHJvdyBv dXQgdGhlIG9sZCBpcnEKaGFuZGxlcnMsIGFuZCB1c2UgaXJxX3BvbGwgaW5zdGVhZC4KClJlZmVy ZW5jZXM6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTg4 MApTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4K Q2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAbGludXguaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgICAgICAgICAgICAgICAgIHwgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvS2NvbmZpZy5kZWJ1ZyAgICAgICAgICAgfCAgNSArKysKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oIHwgIDMgKysKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2d0X2lycS5jICAgICAgIHwgMTAgKysrLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyAgICAgICAgICB8IDM1ICsrKysrKysrKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICB8ICA3ICsr Ky0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGNpLmMgICAgICAgICAgICAgIHwgIDEgLQog NyBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9LY29uZmlnCmluZGV4IDBkMjE0MDI5NDVhYi4uYmYyYjI3YjZlYmYyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tj b25maWcKQEAgLTEzLDYgKzEzLDcgQEAgY29uZmlnIERSTV9JOTE1CiAJc2VsZWN0IERSTV9QQU5F TAogCXNlbGVjdCBEUk1fTUlQSV9EU0kKIAlzZWxlY3QgUkVMQVkKKwlzZWxlY3QgSVJRX1BPTEwK IAlzZWxlY3QgSVJRX1dPUksKIAkjIGk5MTUgZGVwZW5kcyBvbiBBQ1BJX1ZJREVPIHdoZW4gQUNQ SSBpcyBlbmFibGVkCiAJIyBidXQgZm9yIHNlbGVjdCB0byB3b3JrLCBuZWVkIHRvIHNlbGVjdCBB Q1BJX1ZJREVPJ3MgZGVwZW5kZW5jaWVzLCBpY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L0tjb25maWcuZGVidWcgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9LY29uZmlnLmRlYnVn CmluZGV4IDRhODAwZmFhMjc1Yy4uNGQyM2E4NGFjMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9LY29uZmlnLmRlYnVnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25m aWcuZGVidWcKQEAgLTQ0LDYgKzQ0LDcgQEAgY29uZmlnIERSTV9JOTE1X0RFQlVHCiAJc2VsZWN0 IERSTV9JOTE1X1NFTEZURVNUCiAJc2VsZWN0IERSTV9JOTE1X0RFQlVHX1JVTlRJTUVfUE0KIAlz ZWxlY3QgRFJNX0k5MTVfREVCVUdfTU1JTworCXNlbGVjdCBUSUdFUkxBS0VfREVCVUdfSVJRCiAg ICAgICAgIGRlZmF1bHQgbgogICAgICAgICBoZWxwCiAgICAgICAgICAgQ2hvb3NlIHRoaXMgb3B0 aW9uIHRvIHR1cm4gb24gZXh0cmEgZHJpdmVyIGRlYnVnZ2luZyB0aGF0IG1heSBhZmZlY3QKQEAg LTIyMCwzICsyMjEsNyBAQCBjb25maWcgRFJNX0k5MTVfREVCVUdfUlVOVElNRV9QTQogCSAgZHJp dmVyIGxvYWRpbmcsIHN1c3BlbmQgYW5kIHJlc3VtZSBvcGVyYXRpb25zLgogCiAJICBJZiBpbiBk b3VidCwgc2F5ICJOIgorCitjb25maWcgVElHRVJMQUtFX0RFQlVHX0lSUQorCWJvb2wgIltUR0xd IFJlZHVjZSBJUlEgZnVuY3Rpb25hbGl0eSBmb3Igc3RhYmlsaXR5IgorCWRlZmF1bHQgbgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAppbmRleCA5NDNmMDY2 MzgzN2UuLjUzMjY1YWRkODFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfZW5naW5lX3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX3R5cGVzLmgKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIF9fSU5URUxfRU5HSU5FX1RZ UEVTX18KIAogI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ly cV9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4KICNpbmNsdWRlIDxsaW51eC9r cmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMzMwLDYgKzMzMSw4IEBAIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpkZWZhdWx0 X3N0YXRlOwogCXZvaWQgKnBpbm5lZF9kZWZhdWx0X3N0YXRlOwogCisJc3RydWN0IGlycV9wb2xs IGlycV9wb2xsOworCiAJc3RydWN0IHsKIAkJc3RydWN0IGludGVsX3JpbmcgKnJpbmc7CiAJCXN0 cnVjdCBpbnRlbF90aW1lbGluZSAqdGltZWxpbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0X2lycS5jCmluZGV4IDM0YTRmYjYyNGJmNy4uMTEwY2Q4ZTFjMDVmIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndF9pcnEuYwpAQCAtMjA5LDEyICsyMDksMTQgQEAgdm9pZCBnZW4x MV9ndF9pcnFfcmVzZXQoc3RydWN0IGludGVsX2d0ICpndCkKIAogdm9pZCBnZW4xMV9ndF9pcnFf cG9zdGluc3RhbGwoc3RydWN0IGludGVsX2d0ICpndCkKIHsKLQljb25zdCB1MzIgaXJxcyA9IEdU X1JFTkRFUl9VU0VSX0lOVEVSUlVQVCB8IEdUX0NPTlRFWFRfU1dJVENIX0lOVEVSUlVQVDsKIAlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBndC0+dW5jb3JlOwotCWNvbnN0IHUzMiBkbWFz ayA9IGlycXMgPDwgMTYgfCBpcnFzOwotCWNvbnN0IHUzMiBzbWFzayA9IGlycXMgPDwgMTY7CisJ dTMyIGlycXMsIGRtYXNrLCBzbWFzazsKIAotCUJVSUxEX0JVR19PTihpcnFzICYgMHhmZmZmMDAw MCk7CisJaXJxcyA9IEdUX1JFTkRFUl9VU0VSX0lOVEVSUlVQVCB8IEdUX0NPTlRFWFRfU1dJVENI X0lOVEVSUlVQVDsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfVElHRVJMQUtFX0RFQlVHX0lSUSkg JiYgSVNfVElHRVJMQUtFKGd0LT5pOTE1KSkKKwkJaXJxcyA9IDA7IC8qIFhYWCBsYWxhbGFsYSAq LworCXNtYXNrID0gaXJxcyA8PCAxNjsKKwlkbWFzayA9IHNtYXNrIHwgaXJxczsKIAogCS8qIEVu YWJsZSBSQ1MsIEJDUywgVkNTIGFuZCBWRUNTIGNsYXNzIGludGVycnVwdHMuICovCiAJaW50ZWxf dW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOMTFfUkVOREVSX0NPUFlfSU5UUl9FTkFCTEUsIGRtYXNr KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKaW5kZXggNDMxZDNiOGMzMzcxLi5mZmE5 OWJhOWVhZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCkBAIC0xOTQ0LDYgKzE5 NDQsOCBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCiAKIAkJCUdFTV9CVUdfT04oZXhlY2xpc3RzLT5hY3RpdmUgLSBleGVjbGlzdHMtPmlu ZmxpZ2h0ID4KIAkJCQkgICBleGVjbGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cykpOworCisJCQlp bnRlbF9lbmdpbmVfcXVldWVfYnJlYWRjcnVtYnMoZW5naW5lKTsKIAkJfQogCX0gd2hpbGUgKGhl YWQgIT0gdGFpbCk7CiAKQEAgLTE5ODcsNiArMTk4OSwyNyBAQCBzdGF0aWMgdm9pZCBleGVjbGlz dHNfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIAl9CiB9CiAKK3N0YXRp YyBpbnQgaW9wX2hhbmRsZXIoc3RydWN0IGlycV9wb2xsICppb3AsIGludCBidWRnZXQpCit7CisJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KKwkJY29udGFpbmVyX29mKGlvcCwgdHlw ZW9mKCplbmdpbmUpLCBpcnFfcG9sbCk7CisJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMg KmV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg KnQgPSAmZXhlY2xpc3RzLT50YXNrbGV0OworCisJaWYgKGV4ZWNsaXN0cy0+Y3NiX2hlYWQgPT0g UkVBRF9PTkNFKCpleGVjbGlzdHMtPmNzYl93cml0ZSkpCisJCXJldHVybiAwOworCisJaWYgKCF0 YXNrbGV0X3RyeWxvY2sodCkpCisJCXJldHVybiAwOworCisJLyogTXVzdCB3YWl0IGZvciBhbnkg R1BVIHJlc2V0IGluIHByb2dyZXNzLiAqLworCWlmIChfX3Rhc2tsZXRfaXNfZW5hYmxlZCh0KSkK KwkJdC0+ZnVuYyh0LT5kYXRhKTsKKworCXRhc2tsZXRfdW5sb2NrKHQpOworCXJldHVybiAwOwor fQorCiBzdGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWlzc2lvbl90aW1lcihzdHJ1Y3QgdGltZXJf bGlzdCAqdGltZXIpCiB7CiAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0KQEAgLTM0 MTQsOSArMzQzNywxNiBAQCBnZW4xMl9lbWl0X2ZpbmlfYnJlYWRjcnVtYl9yY3Moc3RydWN0IGk5 MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyICpjcykKIAlyZXR1cm4gZ2VuMTJfZW1pdF9maW5pX2Jy ZWFkY3J1bWJfZm9vdGVyKHJlcXVlc3QsIGNzKTsKIH0KIAorc3RhdGljIHZvaWQgdGdsX3VucGFy ayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJY2xlYXJfYml0KElSUV9QT0xM X0ZfRElTQUJMRSwgJmVuZ2luZS0+aXJxX3BvbGwuc3RhdGUpOworCWlycV9wb2xsX3NjaGVkKCZl bmdpbmUtPmlycV9wb2xsKTsKK30KKwogc3RhdGljIHZvaWQgZXhlY2xpc3RzX3Bhcmsoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCWRlbF90aW1lcigmZW5naW5lLT5leGVjbGlz dHMudGltZXIpOworCXNldF9iaXQoSVJRX1BPTExfRl9ESVNBQkxFLCAmZW5naW5lLT5pcnFfcG9s bC5zdGF0ZSk7CiB9CiAKIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3NldF9kZWZhdWx0X3N1Ym1pc3Np b24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQpAQCAtMzQzMiw2ICszNDYyLDkgQEAg dm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiAKIAllbmdpbmUtPnBhcmsgPSBleGVjbGlzdHNfcGFyazsKIAll bmdpbmUtPnVucGFyayA9IE5VTEw7CisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1RJR0VSTEFLRV9E RUJVR19JUlEpICYmCisJICAgIElTX1RJR0VSTEFLRShlbmdpbmUtPmk5MTUpKQorCQllbmdpbmUt PnVucGFyayA9IHRnbF91bnBhcms7CiAKIAllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX1NV UFBPUlRTX1NUQVRTOwogCWlmICghaW50ZWxfdmdwdV9hY3RpdmUoZW5naW5lLT5pOTE1KSkgewpA QCAtMzQ0Niw2ICszNDc5LDcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3Vi bWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19kZXN0cm95KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKKwlpcnFf cG9sbF9kaXNhYmxlKCZlbmdpbmUtPmlycV9wb2xsKTsKIAlpbnRlbF9lbmdpbmVfY2xlYW51cF9j b21tb24oZW5naW5lKTsKIAlscmNfZGVzdHJveV93YV9jdHgoZW5naW5lKTsKIAlrZnJlZShlbmdp bmUpOwpAQCAtMzUzMiw2ICszNTY2LDcgQEAgc3RhdGljIHZvaWQgcmNzX3N1Ym1pc3Npb25fb3Zl cnJpZGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiBpbnQgaW50ZWxfZXhlY2xp c3RzX3N1Ym1pc3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewor CWlycV9wb2xsX2luaXQoJmVuZ2luZS0+aXJxX3BvbGwsIC0xLCBpb3BfaGFuZGxlcik7CiAJdGFz a2xldF9pbml0KCZlbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0LAogCQkgICAgIGV4ZWNsaXN0c19z dWJtaXNzaW9uX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWVuZ2luZSk7CiAJdGltZXJfc2V0dXAo JmVuZ2luZS0+ZXhlY2xpc3RzLnRpbWVyLCBleGVjbGlzdHNfc3VibWlzc2lvbl90aW1lciwgMCk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBiYzgzZjA5NDA2NWEuLjM1ZDI2MGQzZTZkNyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0zNjAsNiArMzYwLDkgQEAgdm9pZCBnZW42X2Vu YWJsZV9ycHNfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJ aWYgKFJFQURfT05DRShycHMtPmludGVycnVwdHNfZW5hYmxlZCkpCiAJCXJldHVybjsKIAorCWlm ICghZGV2X3ByaXYtPnBtX3Jwc19ldmVudHMpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnEo Jmd0LT5pcnFfbG9jayk7CiAJV0FSTl9PTl9PTkNFKHJwcy0+cG1faWlyKTsKIApAQCAtNDMxNCw3 ICs0MzE3LDkgQEAgdm9pZCBpbnRlbF9pcnFfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiAJCWRldl9wcml2LT5ndC5wbV9ndWNfZXZlbnRzID0gR1VDX0lOVFJfR1VDMkhP U1QgPDwgMTY7CiAKIAkvKiBMZXQncyB0cmFjayB0aGUgZW5hYmxlZCBycHMgZXZlbnRzICovCi0J aWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKQorCWlmIChJU19FTkFCTEVEKENPTkZJR19USUdF UkxBS0VfREVCVUdfSVJRKSAmJiBJU19USUdFUkxBS0UoZGV2X3ByaXYpKQorCQlkZXZfcHJpdi0+ cG1fcnBzX2V2ZW50cyA9IDA7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCiAJ CS8qIFdhR3N2UkMwUmVzaWRlbmN5TWV0aG9kOnZsdiAqLwogCQlkZXZfcHJpdi0+cG1fcnBzX2V2 ZW50cyA9IEdFTjZfUE1fUlBfVVBfRUlfRVhQSVJFRDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3BjaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w Y2kuYwppbmRleCAxY2JmMzk5OGIzNjEuLjg2YmUxMGNjNmE3MCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BjaS5jCkBAIC04MDYsNyArODA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZp Y2VfaW5mbyBpbnRlbF90aWdlcmxha2VfMTJfaW5mbyA9IHsKIAkuZGlzcGxheS5oYXNfbW9kdWxh cl9maWEgPSAxLAogCS5lbmdpbmVfbWFzayA9CiAJCUJJVChSQ1MwKSB8IEJJVChCQ1MwKSB8IEJJ VChWRUNTMCkgfCBCSVQoVkNTMCkgfCBCSVQoVkNTMiksCi0JLmhhc19ycHMgPSBmYWxzZSwgLyog WFhYIGRpc2FibGVkIGZvciBkZWJ1Z2dpbmcgKi8KIH07CiAKICN1bmRlZiBHRU4KLS0gCjIuMjMu MAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4