From mboxrd@z Thu Jan 1 00:00:00 1970 From: Todd Previte Subject: [PATCH 09/10] drm/i915: Add debugfs test control files for Displayport compliance testing Date: Wed, 15 Apr 2015 08:38:46 -0700 Message-ID: <1429112327-7695-10-git-send-email-tprevite@gmail.com> References: <1429112327-7695-1-git-send-email-tprevite@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pd0-f175.google.com (mail-pd0-f175.google.com [209.85.192.175]) by gabe.freedesktop.org (Postfix) with ESMTP id 1494C6E888 for ; Wed, 15 Apr 2015 08:39:18 -0700 (PDT) Received: by pdbnk13 with SMTP id nk13so56530286pdb.0 for ; Wed, 15 Apr 2015 08:39:17 -0700 (PDT) In-Reply-To: <1429112327-7695-1-git-send-email-tprevite@gmail.com> 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 VGhpcyBwYXRjaCBhZGRzIDMgZGVidWdmcyBmaWxlcyBmb3IgaGFuZGxpbmcgRGlzcGxheXBvcnQg Y29tcGxpYW5jZSB0ZXN0aW5nCmFuZCBzdXBlcmNlZGVzIHRoZSBwcmV2aW91cyBwYXRjaGVzIHRo YXQgaW1wbGVtZW50ZWQgZGVidWdmcyBzdXBwb3J0IGZvcgpjb21wbGlhbmNlIHRlc3RpbmcuIFRo b3NlIHBhdGNoZXMgd2VyZToKCi0gW1BBVENIIDA0LzE3XSBkcm0vaTkxNTogQWRkIGRlYnVnZnMg ZnVuY3Rpb25zIGZvciBEaXNwbGF5cG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBs aWFuY2UgdGVzdGluZwotIFtQQVRDSCAwOC8xN10gZHJtL2k5MTU6IEFkZCBuZXcgZGVidWdmcyBm aWxlIGZvciBEaXNwbGF5cG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsaWFuY2Ug dGVzdCBjb250cm9sCi0gW1BBVENIIDA5LzE3XSBkcm0vaTkxNTogQWRkIGRlYnVnZnMgd3JpdGUg YW5kIHRlc3QgcGFyYW0gcGFyc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u cyBmb3IgRFAgdGVzdCBjb250cm9sCgpUaGlzIG5ldyBwYXRjaCBzaW1wbGlmaWVzIHRoZSBkZWJ1 Z2ZzIGltcGxlbWVudGF0aW9uIGJ5IHBsYWNlcyBhIHNpbmdsZQp0ZXN0IGNvbnRyb2wgdmFsdWUg aW50byBhbiBpbmRpdmlkdWFsIGZpbGUuIEVhY2ggZmlsZSBpcyByZWFkYWJsZSBieQp0aGUgdXNl cnNhcGNlIGFwcGxpY2F0aW9uIGFuZCB0aGUgdGVzdF9hY3RpdmUgZmlsZSBpcyB3cml0YWJsZSB0 bwppbmRpY2F0ZSB0byB0aGUga2VybmVsIHdoZW4gdXNlcnNwYWNlIGhhcyBjb21wbGV0ZWQgaXRz IHBvcnRpb24gb2YgdGhlCnRlc3Qgc2VxdWVuY2UuCgpSZXBsYWNpbmcgdGhlIHByZXZpb3VzIGZp bGVzIHNpbXBsaWZpZXMgb3BlcmF0aW9uIGFuZCBzcGVlZHMgcmVzcG9uc2UKdGltZSBmb3IgdGhl IHVzZXIgYXBwLCBhcyBpdCBpcyByZXF1aXJlZCB0byBwb2xsIG9uIHRoZSB0ZXN0X2FjdGl2ZSBm aWxlCmluIG9yZGVyIHRvIGRldGVybWluZSB3aGVuIGl0IG5lZWRzIHRvIGJlZ2luIGl0cyBvcGVy YXRpb25zLgoKVjI6Ci0gVXBkYXRlZCB0aGUgdGVzdCBhY3RpdmUgdmFyaWFibGUgbmFtZSB0byBt YXRjaCB0aGUgY2hhbmdlIGluCiAgdGhlIGluaXRpYWwgcGF0Y2ggb2YgdGhlIHNlcmllcwpWMzoK LSBBZGRlZCBhIGZpeCBpbiB0aGUgdGVzdF9hY3RpdmVfd3JpdGUgZnVuY3Rpb24gdG8gcHJldmVu dCBhIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlIGlmIHRoZSBlbmNvZGVyIG9uIHRoZSBjb25u ZWN0b3IgaXMgaW52YWxpZAoKU2lnbmVkLW9mZi1ieTogVG9kZCBQcmV2aXRlIDx0cHJldml0ZUBn bWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgfCAyMDkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjA5 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDIzOTQ5 MjQuLmMzM2QzOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0zOTM3LDYg KzM5MzcsMjEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk5MTVfZGlz cGxheV9jcmNfY3RsX2ZvcHMgPSB7CiAJLndyaXRlID0gZGlzcGxheV9jcmNfY3RsX3dyaXRlCiB9 OwogCitzdGF0aWMgc3NpemVfdCBpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX3dyaXRlKHN0 cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJ CSAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZnApCit7CisJY2hhciAqaW5wdXRfYnVmZmVyOwor CWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBzZXFfZmlsZSAqbTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGxpc3Rf aGVhZCAqY29ubmVjdG9yX2xpc3Q7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKKwlpbnQg dmFsID0gMDsKKworCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKCFtKSB7CisJCXN0YXR1 cyA9IC1FTk9ERVY7CisJCXJldHVybiBzdGF0dXM7CisJfQorCWRldiA9IG0tPnByaXZhdGU7CisK KwlpZiAoIWRldikgeworCQlzdGF0dXMgPSAtRU5PREVWOworCQlyZXR1cm4gc3RhdHVzOworCX0K Kwljb25uZWN0b3JfbGlzdCA9ICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0OworCisJ aWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlucHV0X2J1ZmZlciA9IGttYWxsb2MobGVu ICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnB1dF9idWZmZXIpCisJCXJldHVybiAtRU5PTUVN OworCisJaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0X2J1ZmZlciwgdWJ1ZiwgbGVuKSkgeworCQlz dGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisKKwlpbnB1dF9idWZmZXJbbGVuXSA9 ICdcMCc7CisJRFJNX0RFQlVHX0RSSVZFUigiQ29waWVkICVkIGJ5dGVzIGZyb20gdXNlclxuIiwg KHVuc2lnbmVkIGludClsZW4pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsIGNv bm5lY3Rvcl9saXN0LCBoZWFkKSB7CisKKwkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUg IT0KKwkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwkJCWNvbnRpbnVlOwor CisJCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09CisJCSAgICBEUk1fTU9ERV9DT05O RUNUT1JfRGlzcGxheVBvcnQgJiYKKwkJICAgIGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkICYmCisJCSAgICBjb25uZWN0b3ItPmVuY29kZXIgIT0gTlVMTCkg eworCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoY29ubmVjdG9yLT5lbmNvZGVyKTsKKwkJ CXN0YXR1cyA9IGtzdHJ0b2ludChpbnB1dF9idWZmZXIsIDEwLCAmdmFsKTsKKwkJCWlmIChzdGF0 dXMgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJRFJNX0RFQlVHX0RSSVZFUigiR290ICVkIGZvciB0 ZXN0IGFjdGl2ZVxuIiwgdmFsKTsKKwkJCS8qIFRvIHByZXZlbnQgZXJyb25lb3VzIGFjdGl2YXRp b24gb2YgdGhlIGNvbXBsaWFuY2UKKwkJCSAqIHRlc3RpbmcgY29kZSwgb25seSBhY2NlcHQgYW4g YWN0dWFsIHZhbHVlIG9mIDEgaGVyZQorCQkJICovCisJCQlpZiAodmFsID09IDEpCisJCQkJaW50 ZWxfZHAtPmNvbXBsaWFuY2VfdGVzdF9hY3RpdmUgPSAxOworCQkJZWxzZQorCQkJCWludGVsX2Rw LT5jb21wbGlhbmNlX3Rlc3RfYWN0aXZlID0gMDsKKwkJfQorCX0KK291dDoKKwlrZnJlZShpbnB1 dF9idWZmZXIpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJKm9mZnAg Kz0gbGVuOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9kaXNwbGF5cG9ydF90 ZXN0X2FjdGl2ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yOworCXN0cnVjdCBsaXN0X2hlYWQgKmNvbm5lY3Rvcl9saXN0ID0gJmRldi0+bW9k ZV9jb25maWcuY29ubmVjdG9yX2xpc3Q7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsKKwor CWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29u bmVjdG9yLCBjb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCisJCWlmIChjb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlICE9CisJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpCisJCQlj b250aW51ZTsKKworCQlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQgJiYKKwkJICAgIGNvbm5lY3Rvci0+ZW5jb2RlciAhPSBOVUxMKSB7CisJCQlpbnRl bF9kcCA9IGVuY190b19pbnRlbF9kcChjb25uZWN0b3ItPmVuY29kZXIpOworCQkJaWYgKGludGVs X2RwLT5jb21wbGlhbmNlX3Rlc3RfYWN0aXZlKQorCQkJCXNlcV9wdXRzKG0sICIxIik7CisJCQll bHNlCisJCQkJc2VxX3B1dHMobSwgIjAiKTsKKwkJfSBlbHNlCisJCQlzZXFfcHV0cyhtLCAiMCIp OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVz dF9hY3RpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZmls ZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW5vZGUtPmlfcHJpdmF0ZTsK KworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZl X3Nob3csIGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGk5 MTVfZGlzcGxheXBvcnRfdGVzdF9hY3RpdmVfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVM RSwKKwkub3BlbiA9IGk5MTVfZGlzcGxheXBvcnRfdGVzdF9hY3RpdmVfb3BlbiwKKwkucmVhZCA9 IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVs ZWFzZSwKKwkud3JpdGUgPSBpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX3dyaXRlCit9Owor CitzdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVzdF9kYXRhX3Nob3coc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtLT5wcml2 YXRlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGxpc3RfaGVh ZCAqY29ubmVjdG9yX2xpc3QgPSAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdDsKKwlz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVW OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsIGNvbm5lY3Rvcl9saXN0LCBoZWFk KSB7CisKKwkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0KKwkJICAgIERSTV9NT0RF X0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjb25uZWN0b3It PnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCAmJgorCQkgICAgY29ubmVjdG9y LT5lbmNvZGVyICE9IE5VTEwpIHsKKwkJCWludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGNvbm5l Y3Rvci0+ZW5jb2Rlcik7CisJCQlzZXFfcHJpbnRmKG0sICIlbHgiLCBpbnRlbF9kcC0+Y29tcGxp YW5jZV90ZXN0X2RhdGEpOworCQl9IGVsc2UKKwkJCXNlcV9wdXRzKG0sICIwIik7CisJfQorCisJ cmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVzdF9kYXRhX29wZW4o c3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gc2lu Z2xlX29wZW4oZmlsZSwgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X2RhdGFfc2hvdywgZGV2KTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9kaXNwbGF5cG9ydF90 ZXN0X2RhdGFfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGk5MTVf ZGlzcGxheXBvcnRfdGVzdF9kYXRhX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVr ID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK3N0YXRpYyBp bnQgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X3R5cGVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG0tPnByaXZhdGU7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjb25uZWN0 b3JfbGlzdCA9ICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0OworCXN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKworCQlp ZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQorCQkgICAgRFJNX01PREVfQ09OTkVDVE9S X0Rpc3BsYXlQb3J0KQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09 IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkICYmCisJCSAgICBjb25uZWN0b3ItPmVuY29kZXIg IT0gTlVMTCkgeworCQkJaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoY29ubmVjdG9yLT5lbmNv ZGVyKTsKKwkJCXNlcV9wcmludGYobSwgIiUwMmx4IiwgaW50ZWxfZHAtPmNvbXBsaWFuY2VfdGVz dF90eXBlKTsKKwkJfSBlbHNlCisJCQlzZXFfcHV0cyhtLCAiMCIpOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGk5MTVfZGlzcGxheXBvcnRfdGVzdF90eXBlX29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGlub2RlLT5pX3ByaXZhdGU7CisKKwlyZXR1cm4gc2luZ2xlX29w ZW4oZmlsZSwgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X3R5cGVfc2hvdywgZGV2KTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaTkxNV9kaXNwbGF5cG9ydF90ZXN0X3R5 cGVfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGk5MTVfZGlzcGxh eXBvcnRfdGVzdF90eXBlX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2Vx X2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKIHN0YXRpYyB2b2lkIHdt X2xhdGVuY3lfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVpbnQxNl90IHdtWzhdKQog ewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtLT5wcml2YXRlOwpAQCAtNDgzMiw2ICs1MDM4 LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X2RlYnVnZnNfZmlsZXMgewogCXsiaTkxNV9z cHJfd21fbGF0ZW5jeSIsICZpOTE1X3Nwcl93bV9sYXRlbmN5X2ZvcHN9LAogCXsiaTkxNV9jdXJf d21fbGF0ZW5jeSIsICZpOTE1X2N1cl93bV9sYXRlbmN5X2ZvcHN9LAogCXsiaTkxNV9mYmNfZmFs c2VfY29sb3IiLCAmaTkxNV9mYmNfZmNfZm9wc30sCisJeyJpOTE1X2RwX3Rlc3RfZGF0YSIsICZp OTE1X2Rpc3BsYXlwb3J0X3Rlc3RfZGF0YV9mb3BzfSwKKwl7Imk5MTVfZHBfdGVzdF90eXBlIiwg Jmk5MTVfZGlzcGxheXBvcnRfdGVzdF90eXBlX2ZvcHN9LAorCXsiaTkxNV9kcF90ZXN0X2FjdGl2 ZSIsICZpOTE1X2Rpc3BsYXlwb3J0X3Rlc3RfYWN0aXZlX2ZvcHN9CiB9OwogCiB2b2lkIGludGVs X2Rpc3BsYXlfY3JjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKLS0gCjEuOS4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=