From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com Subject: [PATCH 06/10] drm/edid: Reduce the number of times we parse the CEA extension block Date: Wed, 28 Sep 2016 16:51:39 +0300 Message-ID: <1475070703-6435-7-git-send-email-ville.syrjala@linux.intel.com> References: <1475070703-6435-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1475070703-6435-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCklu c3RlYWQgb2YgcGFyc2luZyBwYXJ0cyBvZiB0aGUgQ0VBIGV4dGVuc2lvbiBibG9jayBpbiB0d28g cGxhY2VzCnRvIGRldGVybWluZSBzdXBwb3J0ZWQgY29sb3IgZm9ybWF0cyBhbmQgd2hhdG5vdCwg bGV0J3MganVzdApjb25zb2xpZGF0ZSBpdCB0byBvbmUgZnVuY3Rpb24uIFRoaXMgYWxzbyBtYWtl cyBpdCBwb3NzaWJsZSB0byBuZWF0bHkKZmxhdHRlbiBkcm1fYXNzaWduX2hkbWlfZGVlcF9jb2xv cl9pbmZvKCkuCgpTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFA bGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtv ZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIHwgMTg1ICsrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDg4IGluc2VydGlvbnMoKyksIDk3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggY2Fh ODRhMDU2Nzc5Li5lZjhhZTY5MWY3YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZWRpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jCkBAIC0zNzMzLDEwNSArMzcz MywxMTAgQEAgYm9vbCBkcm1fcmdiX3F1YW50X3JhbmdlX3NlbGVjdGFibGUoc3RydWN0IGVkaWQg KmVkaWQpCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9yZ2JfcXVhbnRfcmFuZ2Vfc2VsZWN0YWJsZSk7 CiAKLS8qCi0gKiBQYXJzZSB0aGUgQ0VBIGV4dGVuc2lvbiBhY2NvcmRpbmcgdG8gQ0VBLTg2MS1C LgotICogUmV0dXJuIHRydWUgaWYgSERNSSBkZWVwIGNvbG9yIHN1cHBvcnRlZCwgZmFsc2UgaWYg bm90IG9yIHVua25vd24uCi0gKi8KLXN0YXRpYyBib29sIGRybV9hc3NpZ25faGRtaV9kZWVwX2Nv bG9yX2luZm8oc3RydWN0IGVkaWQgKmVkaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCitzdGF0aWMg dm9pZCBkcm1fcGFyc2VfaGRtaV9kZWVwX2NvbG9yX2luZm8oc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKKwkJCQkJICAgY29uc3QgdTggKmhkbWkpCiB7CiAJc3RydWN0IGRybV9kaXNw bGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Ci0JdTggKmVkaWRfZXh0 LCAqaGRtaTsKLQlpbnQgaTsKLQlpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OwogCXVuc2ln bmVkIGludCBkY19icGMgPSAwOwogCi0JZWRpZF9leHQgPSBkcm1fZmluZF9jZWFfZXh0ZW5zaW9u KGVkaWQpOwotCWlmICghZWRpZF9leHQpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBIRE1JIHN1cHBv cnRzIGF0IGxlYXN0IDggYnBjICovCisJaW5mby0+YnBjID0gODsKIAotCWlmIChjZWFfZGJfb2Zm c2V0cyhlZGlkX2V4dCwgJnN0YXJ0X29mZnNldCwgJmVuZF9vZmZzZXQpKQotCQlyZXR1cm4gZmFs c2U7CisJaWYgKGNlYV9kYl9wYXlsb2FkX2xlbihoZG1pKSA8IDYpCisJCXJldHVybjsKKworCWlm IChoZG1pWzZdICYgRFJNX0VESURfSERNSV9EQ18zMCkgeworCQlkY19icGMgPSAxMDsKKwkJaW5m by0+ZWRpZF9oZG1pX2RjX21vZGVzIHw9IERSTV9FRElEX0hETUlfRENfMzA7CisJCURSTV9ERUJV RygiJXM6IEhETUkgc2luayBkb2VzIGRlZXAgY29sb3IgMzAuXG4iLAorCQkJICBjb25uZWN0b3It Pm5hbWUpOworCX0KKworCWlmIChoZG1pWzZdICYgRFJNX0VESURfSERNSV9EQ18zNikgeworCQlk Y19icGMgPSAxMjsKKwkJaW5mby0+ZWRpZF9oZG1pX2RjX21vZGVzIHw9IERSTV9FRElEX0hETUlf RENfMzY7CisJCURSTV9ERUJVRygiJXM6IEhETUkgc2luayBkb2VzIGRlZXAgY29sb3IgMzYuXG4i LAorCQkJICBjb25uZWN0b3ItPm5hbWUpOworCX0KKworCWlmIChoZG1pWzZdICYgRFJNX0VESURf SERNSV9EQ180OCkgeworCQlkY19icGMgPSAxNjsKKwkJaW5mby0+ZWRpZF9oZG1pX2RjX21vZGVz IHw9IERSTV9FRElEX0hETUlfRENfNDg7CisJCURSTV9ERUJVRygiJXM6IEhETUkgc2luayBkb2Vz IGRlZXAgY29sb3IgNDguXG4iLAorCQkJICBjb25uZWN0b3ItPm5hbWUpOworCX0KKworCWlmIChk Y19icGMgPT0gMCkgeworCQlEUk1fREVCVUcoIiVzOiBObyBkZWVwIGNvbG9yIHN1cHBvcnQgb24g dGhpcyBIRE1JIHNpbmsuXG4iLAorCQkJICBjb25uZWN0b3ItPm5hbWUpOworCQlyZXR1cm47CisJ fQorCisJRFJNX0RFQlVHKCIlczogQXNzaWduaW5nIEhETUkgc2luayBjb2xvciBkZXB0aCBhcyAl ZCBicGMuXG4iLAorCQkgIGNvbm5lY3Rvci0+bmFtZSwgZGNfYnBjKTsKKwlpbmZvLT5icGMgPSBk Y19icGM7CiAKIAkvKgotCSAqIEJlY2F1c2UgSERNSSBpZGVudGlmaWVyIGlzIGluIFZlbmRvciBT cGVjaWZpYyBCbG9jaywKLQkgKiBzZWFyY2ggaXQgZnJvbSBhbGwgZGF0YSBibG9ja3Mgb2YgQ0VB IGV4dGVuc2lvbi4KKwkgKiBEZWVwIGNvbG9yIHN1cHBvcnQgbWFuZGF0ZXMgUkdCNDQ0IHN1cHBv cnQgZm9yIGFsbCB2aWRlbworCSAqIG1vZGVzIGFuZCBmb3JiaWRzIFlDUkNCNDIyIHN1cHBvcnQg Zm9yIGFsbCB2aWRlbyBtb2RlcyBwZXIKKwkgKiBIRE1JIDEuMyBzcGVjLgogCSAqLwotCWZvcl9l YWNoX2NlYV9kYihlZGlkX2V4dCwgaSwgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0KSB7Ci0JCWlm IChjZWFfZGJfaXNfaGRtaV92c2RiKCZlZGlkX2V4dFtpXSkpIHsKLQkJCS8qIEhETUkgc3VwcG9y dHMgYXQgbGVhc3QgOCBicGMgKi8KLQkJCWluZm8tPmJwYyA9IDg7Ci0KLQkJCWhkbWkgPSAmZWRp ZF9leHRbaV07Ci0JCQlpZiAoY2VhX2RiX3BheWxvYWRfbGVuKGhkbWkpIDwgNikKLQkJCQlyZXR1 cm4gZmFsc2U7Ci0KLQkJCWlmIChoZG1pWzZdICYgRFJNX0VESURfSERNSV9EQ18zMCkgewotCQkJ CWRjX2JwYyA9IDEwOwotCQkJCWluZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8PSBEUk1fRURJRF9I RE1JX0RDXzMwOwotCQkJCURSTV9ERUJVRygiJXM6IEhETUkgc2luayBkb2VzIGRlZXAgY29sb3Ig MzAuXG4iLAotCQkJCQkJICBjb25uZWN0b3ItPm5hbWUpOwotCQkJfQorCWluZm8tPmNvbG9yX2Zv cm1hdHMgPSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NDsKIAotCQkJaWYgKGhkbWlbNl0gJiBEUk1f RURJRF9IRE1JX0RDXzM2KSB7Ci0JCQkJZGNfYnBjID0gMTI7Ci0JCQkJaW5mby0+ZWRpZF9oZG1p X2RjX21vZGVzIHw9IERSTV9FRElEX0hETUlfRENfMzY7Ci0JCQkJRFJNX0RFQlVHKCIlczogSERN SSBzaW5rIGRvZXMgZGVlcCBjb2xvciAzNi5cbiIsCi0JCQkJCQkgIGNvbm5lY3Rvci0+bmFtZSk7 Ci0JCQl9CisJLyogWUNSQ0I0NDQgaXMgb3B0aW9uYWwgYWNjb3JkaW5nIHRvIHNwZWMuICovCisJ aWYgKGhkbWlbNl0gJiBEUk1fRURJRF9IRE1JX0RDX1k0NDQpIHsKKwkJaW5mby0+Y29sb3JfZm9y bWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDQ0OworCQlEUk1fREVCVUcoIiVzOiBIRE1J IHNpbmsgZG9lcyBZQ1JDQjQ0NCBpbiBkZWVwIGNvbG9yLlxuIiwKKwkJCSAgY29ubmVjdG9yLT5u YW1lKTsKKwl9CiAKLQkJCWlmIChoZG1pWzZdICYgRFJNX0VESURfSERNSV9EQ180OCkgewotCQkJ CWRjX2JwYyA9IDE2OwotCQkJCWluZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8PSBEUk1fRURJRF9I RE1JX0RDXzQ4OwotCQkJCURSTV9ERUJVRygiJXM6IEhETUkgc2luayBkb2VzIGRlZXAgY29sb3Ig NDguXG4iLAotCQkJCQkJICBjb25uZWN0b3ItPm5hbWUpOwotCQkJfQorCS8qCisJICogU3BlYyBz YXlzIHRoYXQgaWYgYW55IGRlZXAgY29sb3IgbW9kZSBpcyBzdXBwb3J0ZWQgYXQgYWxsLAorCSAq IHRoZW4gZGVlcCBjb2xvciAzNiBiaXQgbXVzdCBiZSBzdXBwb3J0ZWQuCisJICovCisJaWYgKCEo aGRtaVs2XSAmIERSTV9FRElEX0hETUlfRENfMzYpKSB7CisJCURSTV9ERUJVRygiJXM6IEhETUkg c2luayBzaG91bGQgZG8gRENfMzYsIGJ1dCBkb2VzIG5vdCFcbiIsCisJCQkgIGNvbm5lY3Rvci0+ bmFtZSk7CisJfQorfQogCi0JCQlpZiAoZGNfYnBjID4gMCkgewotCQkJCURSTV9ERUJVRygiJXM6 IEFzc2lnbmluZyBIRE1JIHNpbmsgY29sb3IgZGVwdGggYXMgJWQgYnBjLlxuIiwKLQkJCQkJCSAg Y29ubmVjdG9yLT5uYW1lLCBkY19icGMpOwotCQkJCWluZm8tPmJwYyA9IGRjX2JwYzsKLQotCQkJ CS8qCi0JCQkJICogRGVlcCBjb2xvciBzdXBwb3J0IG1hbmRhdGVzIFJHQjQ0NCBzdXBwb3J0IGZv ciBhbGwgdmlkZW8KLQkJCQkgKiBtb2RlcyBhbmQgZm9yYmlkcyBZQ1JDQjQyMiBzdXBwb3J0IGZv ciBhbGwgdmlkZW8gbW9kZXMgcGVyCi0JCQkJICogSERNSSAxLjMgc3BlYy4KLQkJCQkgKi8KLQkJ CQlpbmZvLT5jb2xvcl9mb3JtYXRzID0gRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQ7Ci0KLQkJCQkv KiBZQ1JDQjQ0NCBpcyBvcHRpb25hbCBhY2NvcmRpbmcgdG8gc3BlYy4gKi8KLQkJCQlpZiAoaGRt aVs2XSAmIERSTV9FRElEX0hETUlfRENfWTQ0NCkgewotCQkJCQlpbmZvLT5jb2xvcl9mb3JtYXRz IHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQ7Ci0JCQkJCURSTV9ERUJVRygiJXM6IEhETUkg c2luayBkb2VzIFlDUkNCNDQ0IGluIGRlZXAgY29sb3IuXG4iLAotCQkJCQkJCSAgY29ubmVjdG9y LT5uYW1lKTsKLQkJCQl9CitzdGF0aWMgdm9pZCBkcm1fcGFyc2VfY2VhX2V4dChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJICAgICAgc3RydWN0IGVkaWQgKmVkaWQpCit7CisJ c3RydWN0IGRybV9kaXNwbGF5X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87 CisJY29uc3QgdTggKmVkaWRfZXh0OworCWludCBpLCBzdGFydCwgZW5kOwogCi0JCQkJLyoKLQkJ CQkgKiBTcGVjIHNheXMgdGhhdCBpZiBhbnkgZGVlcCBjb2xvciBtb2RlIGlzIHN1cHBvcnRlZCBh dCBhbGwsCi0JCQkJICogdGhlbiBkZWVwIGNvbG9yIDM2IGJpdCBtdXN0IGJlIHN1cHBvcnRlZC4K LQkJCQkgKi8KLQkJCQlpZiAoIShoZG1pWzZdICYgRFJNX0VESURfSERNSV9EQ18zNikpIHsKLQkJ CQkJRFJNX0RFQlVHKCIlczogSERNSSBzaW5rIHNob3VsZCBkbyBEQ18zNiwgYnV0IGRvZXMgbm90 IVxuIiwKLQkJCQkJCQkgIGNvbm5lY3Rvci0+bmFtZSk7Ci0JCQkJfQorCWVkaWRfZXh0ID0gZHJt X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkKTsKKwlpZiAoIWVkaWRfZXh0KQorCQlyZXR1cm47CiAK LQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCURSTV9ERUJVRygiJXM6IE5v IGRlZXAgY29sb3Igc3VwcG9ydCBvbiB0aGlzIEhETUkgc2luay5cbiIsCi0JCQkJCQkgIGNvbm5l Y3Rvci0+bmFtZSk7Ci0JCQl9Ci0JCX0KLQl9CisJaW5mby0+Y2VhX3JldiA9IGVkaWRfZXh0WzFd OwogCi0JcmV0dXJuIGZhbHNlOworCS8qIFRoZSBleGlzdGVuY2Ugb2YgYSBDRUEgYmxvY2sgc2hv dWxkIGltcGx5IFJHQiBzdXBwb3J0ICovCisJaW5mby0+Y29sb3JfZm9ybWF0cyA9IERSTV9DT0xP Ul9GT1JNQVRfUkdCNDQ0OworCWlmIChlZGlkX2V4dFszXSAmIEVESURfQ0VBX1lDUkNCNDQ0KQor CQlpbmZvLT5jb2xvcl9mb3JtYXRzIHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0NDQ7CisJaWYg KGVkaWRfZXh0WzNdICYgRURJRF9DRUFfWUNSQ0I0MjIpCisJCWluZm8tPmNvbG9yX2Zvcm1hdHMg fD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQyMjsKKworCWlmIChjZWFfZGJfb2Zmc2V0cyhlZGlk X2V4dCwgJnN0YXJ0LCAmZW5kKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfY2VhX2RiKGVkaWRf ZXh0LCBpLCBzdGFydCwgZW5kKSB7CisJCWNvbnN0IHU4ICpkYiA9ICZlZGlkX2V4dFtpXTsKKwor CQlpZiAoIWNlYV9kYl9pc19oZG1pX3ZzZGIoZGIpKQorCQkJY29udGludWU7CisKKwkJZHJtX3Bh cnNlX2hkbWlfZGVlcF9jb2xvcl9pbmZvKGNvbm5lY3RvciwgZGIpOworCX0KIH0KIAotc3RhdGlj IHZvaWQgZHJtX2FkZF9kaXNwbGF5X2luZm8oc3RydWN0IGVkaWQgKmVkaWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor c3RhdGljIHZvaWQgZHJtX2FkZF9kaXNwbGF5X2luZm8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkgc3RydWN0IGVkaWQgKmVkaWQpCiB7CiAJc3RydWN0IGRybV9kaXNwbGF5 X2luZm8gKmluZm8gPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Ci0JdTggKmVkaWRfZXh0Owog CiAJaW5mby0+d2lkdGhfbW0gPSBlZGlkLT53aWR0aF9jbSAqIDEwOwogCWluZm8tPmhlaWdodF9t bSA9IGVkaWQtPmhlaWdodF9jbSAqIDEwOwpAQCAtMzg0NiwyMSArMzg1MSw3IEBAIHN0YXRpYyB2 b2lkIGRybV9hZGRfZGlzcGxheV9pbmZvKHN0cnVjdCBlZGlkICplZGlkLAogCWlmICghKGVkaWQt PmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkpCiAJCXJldHVybjsKIAotCS8qIEdldCBk YXRhIGZyb20gQ0VBIGJsb2NrcyBpZiBwcmVzZW50ICovCi0JZWRpZF9leHQgPSBkcm1fZmluZF9j ZWFfZXh0ZW5zaW9uKGVkaWQpOwotCWlmIChlZGlkX2V4dCkgewotCQlpbmZvLT5jZWFfcmV2ID0g ZWRpZF9leHRbMV07Ci0KLQkJLyogVGhlIGV4aXN0ZW5jZSBvZiBhIENFQSBibG9jayBzaG91bGQg aW1wbHkgUkdCIHN1cHBvcnQgKi8KLQkJaW5mby0+Y29sb3JfZm9ybWF0cyA9IERSTV9DT0xPUl9G T1JNQVRfUkdCNDQ0OwotCQlpZiAoZWRpZF9leHRbM10gJiBFRElEX0NFQV9ZQ1JDQjQ0NCkKLQkJ CWluZm8tPmNvbG9yX2Zvcm1hdHMgfD0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ1JDQjQ0NDsKLQkJaWYg KGVkaWRfZXh0WzNdICYgRURJRF9DRUFfWUNSQ0I0MjIpCi0JCQlpbmZvLT5jb2xvcl9mb3JtYXRz IHw9IERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0MjI7Ci0JfQotCi0JLyogSERNSSBkZWVwIGNvbG9y IG1vZGVzIHN1cHBvcnRlZD8gQXNzaWduIHRvIGluZm8sIGlmIHNvICovCi0JZHJtX2Fzc2lnbl9o ZG1pX2RlZXBfY29sb3JfaW5mbyhlZGlkLCBjb25uZWN0b3IpOworCWRybV9wYXJzZV9jZWFfZXh0 KGNvbm5lY3RvciwgZWRpZCk7CiAKIAkvKgogCSAqIERpZ2l0YWwgc2luayB3aXRoICJERlAgMS54 IGNvbXBsaWFudCBUTURTIiBhY2NvcmRpbmcgdG8gRURJRCAxLjM/CkBAIC00MDk2LDcgKzQwODcs NyBAQCBpbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIHN0cnVjdCBlZGlkICplZGlkKQogCWlmIChxdWlya3MgJiAoRURJRF9RVUlSS19QUkVGRVJf TEFSR0VfNjAgfCBFRElEX1FVSVJLX1BSRUZFUl9MQVJHRV83NSkpCiAJCWVkaWRfZml4dXBfcHJl ZmVycmVkKGNvbm5lY3RvciwgcXVpcmtzKTsKIAotCWRybV9hZGRfZGlzcGxheV9pbmZvKGVkaWQs IGNvbm5lY3Rvcik7CisJZHJtX2FkZF9kaXNwbGF5X2luZm8oY29ubmVjdG9yLCBlZGlkKTsKIAog CWlmIChxdWlya3MgJiBFRElEX1FVSVJLX0ZPUkNFXzZCUEMpCiAJCWNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLmJwYyA9IDY7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==