From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v3 30/37] drm/i915: Introduce DRM_I915_GEM_MMAP_OFFSET Date: Fri, 9 Aug 2019 23:26:36 +0100 Message-ID: <20190809222643.23142-31-matthew.auld@intel.com> References: <20190809222643.23142-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809222643.23142-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: Abdiel Janulgue , dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWJkaWVsIEphbnVsZ3VlIDxhYmRpZWwuamFudWxndWVAbGludXguaW50ZWwuY29tPgoK QWRkIGEgbmV3IENQVSBtbWFwIGltcGxlbWVudGF0aW9uIHRoYXQgYWxsb3dzIG11bHRpcGxlIGZh dWx0IGhhbmRsZXJzCnRoYXQgZGVwZW5kcyBvbiB0aGUgb2JqZWN0J3MgYmFja2luZyBwYWdlcy4K Ck5vdGUgdGhhdCB3ZSBtdWx0aXBsZXggbW1hcF9ndHQgYW5kIG1tYXBfb2Zmc2V0IHRocm91Z2gg dGhlIHNhbWUgaW9jdGwsCmFuZCB1c2UgdGhlIHplcm8gZXh0ZW5kaW5nIGJlaGF2aW91ciBvZiBk cm0gdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuCnRoZW0sIHdoZW4gd2UgaW5zcGVjdCB0aGUgZmxh Z3MuCgpTaWduZWQtb2ZmLWJ5OiBBYmRpZWwgSmFudWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51 eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGlu dGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1faW9jdGxzLmggICAg fCAgMiArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYyAgICAgIHwg MzAgKysrKysrKysrKysrKysrKysrCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3RfdHlwZXMuaCAgfCAgMyArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAg ICAgICAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2V0cGFyYW0uYyAg ICAgICAgICB8ICAxICsKIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAg ICAgICB8IDMxICsrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9pb2N0bHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9pb2N0bHMuaAppbmRleCBkZGM3ZjJhNTJiM2UuLjVhYmQ1YjIxNzJmMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2lvY3Rscy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9pb2N0bHMuaApAQCAtMzAsNiArMzAsOCBAQCBpbnQg aTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAog CQkJc3RydWN0IGRybV9maWxlICpmaWxlKTsKIGludCBpOTE1X2dlbV9tbWFwX2d0dF9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSk7CitpbnQgaTkxNV9nZW1fbW1hcF9vZmZzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dik7CiBpbnQgaTkxNV9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogaW50IGk5MTVfZ2VtX3B3cml0 ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMKaW5kZXggZDRhOWQ1OTgwM2E3Li5hNjI2NTdhMWYw MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9tbWFuLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX21tYW4uYwpAQCAtNTM4LDEy ICs1MzgsNDIgQEAgaTkxNV9nZW1fbW1hcF9ndHRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX21tYXBfb2Zmc2V0ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsKKworCWlmIChhcmdzLT5mbGFncyAmIEk5MTVfTU1B UF9PRkZTRVRfRkxBR1MpCisJCXJldHVybiBpOTE1X2dlbV9tbWFwX29mZnNldF9pb2N0bChkZXYs IGRhdGEsIGZpbGUpOworCisJaWYgKCFIQVNfTUFQUEFCTEVfQVBFUlRVUkUoaTkxNSkpIHsKKwkJ RFJNX0VSUk9SKCJObyBhcGVydHVyZSwgY2Fubm90IG1tYXAgdmlhIGxlZ2FjeSBHVFRcbiIpOwor CQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gX19hc3NpZ25fZ2VtX29iamVjdF9tbWFw X2RhdGEoZmlsZSwgYXJncy0+aGFuZGxlLAogCQkJCQkgICAgIEk5MTVfTU1BUF9UWVBFX0dUVCwK IAkJCQkJICAgICAmYXJncy0+b2Zmc2V0KTsKIH0KIAoraW50IGk5MTVfZ2VtX21tYXBfb2Zmc2V0 X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgc3Ry dWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9vZmZzZXQg KmFyZ3MgPSBkYXRhOworCWVudW0gaTkxNV9tbWFwX3R5cGUgdHlwZTsKKworCWlmICgoYXJncy0+ ZmxhZ3MgJiAoSTkxNV9NTUFQX09GRlNFVF9XQyB8IEk5MTVfTU1BUF9PRkZTRVRfV0IpKSAmJgor CSAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BBVCkpCisJCXJldHVybiAtRU5PREVWOwor CisJaWYgKGFyZ3MtPmZsYWdzICYgSTkxNV9NTUFQX09GRlNFVF9XQykKKwkJdHlwZSA9IEk5MTVf TU1BUF9UWVBFX09GRlNFVF9XQzsKKwllbHNlIGlmIChhcmdzLT5mbGFncyAmIEk5MTVfTU1BUF9P RkZTRVRfV0IpCisJCXR5cGUgPSBJOTE1X01NQVBfVFlQRV9PRkZTRVRfV0I7CisJZWxzZSBpZiAo YXJncy0+ZmxhZ3MgJiBJOTE1X01NQVBfT0ZGU0VUX1VDKQorCQl0eXBlID0gSTkxNV9NTUFQX1RZ UEVfT0ZGU0VUX1VDOworCisJcmV0dXJuIF9fYXNzaWduX2dlbV9vYmplY3RfbW1hcF9kYXRhKGZp bGUsIGFyZ3MtPmhhbmRsZSwgdHlwZSwKKwkJCQkJICAgICAmYXJncy0+b2Zmc2V0KTsKK30KKwog dm9pZCBpOTE1X21tYXBfb2Zmc2V0X29iamVjdF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiB7 CiAJc3RydWN0IGk5MTVfbW1hcF9vZmZzZXQgKm1tbyA9IGNvbnRhaW5lcl9vZihyZWYsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXgg YTM3NDVmN2Q1N2ExLi40ZWE3OGQzYzkyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKQEAgLTY0LDYgKzY0LDkgQEAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3Rfb3BzIHsKIAogZW51bSBpOTE1X21tYXBfdHlwZSB7CiAJSTkxNV9N TUFQX1RZUEVfR1RUID0gMCwKKwlJOTE1X01NQVBfVFlQRV9PRkZTRVRfV0MsCisJSTkxNV9NTUFQ X1RZUEVfT0ZGU0VUX1dCLAorCUk5MTVfTU1BUF9UWVBFX09GRlNFVF9VQywKIH07CiAKIHN0cnVj dCBpOTE1X21tYXBfb2Zmc2V0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGZjZWUwNmVk MzQ2OS4uY2YzOTAwOTJjOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTI3MTAsNyAr MjcxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgaTkxNV9pb2N0bHNb XSA9IHsKIAlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9QUkVBRCwgaTkxNV9nZW1fcHJlYWRf aW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1BX UklURSwgaTkxNV9nZW1fcHdyaXRlX2lvY3RsLCBEUk1fUkVOREVSX0FMTE9XKSwKIAlEUk1fSU9D VExfREVGX0RSVihJOTE1X0dFTV9NTUFQLCBpOTE1X2dlbV9tbWFwX2lvY3RsLCBEUk1fUkVOREVS X0FMTE9XKSwKLQlEUk1fSU9DVExfREVGX0RSVihJOTE1X0dFTV9NTUFQX0dUVCwgaTkxNV9nZW1f bW1hcF9ndHRfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKEk5 MTVfR0VNX01NQVBfT0ZGU0VULCBpOTE1X2dlbV9tbWFwX2d0dF9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyksCiAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fU0VUX0RPTUFJTiwgaTkxNV9nZW1f c2V0X2RvbWFpbl9pb2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCiAJRFJNX0lPQ1RMX0RFRl9EUlYo STkxNV9HRU1fU1dfRklOSVNILCBpOTE1X2dlbV9zd19maW5pc2hfaW9jdGwsIERSTV9SRU5ERVJf QUxMT1cpLAogCURSTV9JT0NUTF9ERUZfRFJWKEk5MTVfR0VNX1NFVF9USUxJTkcsIGk5MTVfZ2Vt X3NldF90aWxpbmdfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZXRwYXJhbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZXRwYXJhbS5jCmluZGV4IDVkOTEwMTM3NmEzZC4uMjgxMjAyNDlhMjUwIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dldHBhcmFtLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZXRwYXJhbS5jCkBAIC0xMzAsNiArMTMwLDcgQEAgaW50IGk5MTVfZ2V0 cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAljYXNlIEk5 MTVfUEFSQU1fSEFTX0VYRUNfQkFUQ0hfRklSU1Q6CiAJY2FzZSBJOTE1X1BBUkFNX0hBU19FWEVD X0ZFTkNFX0FSUkFZOgogCWNhc2UgSTkxNV9QQVJBTV9IQVNfRVhFQ19TVUJNSVRfRkVOQ0U6CisJ Y2FzZSBJOTE1X1BBUkFNX01NQVBfT0ZGU0VUX1ZFUlNJT046CiAJCS8qIEZvciB0aGUgdGltZSBi ZWluZyBhbGwgb2YgdGhlc2UgYXJlIGFsd2F5cyB0cnVlOwogCQkgKiBpZiBzb21lIHN1cHBvcnRl ZCBoYXJkd2FyZSBkb2VzIG5vdCBoYXZlIG9uZSBvZiB0aGVzZQogCQkgKiBmZWF0dXJlcyB0aGlz IHZhbHVlIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGZyb20KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCA0Njlk YzUxMmNjYTMuLmZiODRhZWQxMDgyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1 X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaApAQCAtMzU5LDYgKzM1OSw3 IEBAIHR5cGVkZWYgc3RydWN0IF9kcm1faTkxNV9zYXJlYSB7CiAjZGVmaW5lIERSTV9JOTE1X1FV RVJZCQkJMHgzOQogI2RlZmluZSBEUk1fSTkxNV9HRU1fVk1fQ1JFQVRFCQkweDNhCiAjZGVmaW5l IERSTV9JOTE1X0dFTV9WTV9ERVNUUk9ZCQkweDNiCisjZGVmaW5lIERSTV9JOTE1X0dFTV9NTUFQ X09GRlNFVCAgIAlEUk1fSTkxNV9HRU1fTU1BUF9HVFQKIC8qIE11c3QgYmUga2VwdCBjb21wYWN0 IC0tIG5vIGhvbGVzICovCiAKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVygg RFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKQEAgLTQy MSw2ICs0MjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewogI2RlZmluZSBE Uk1fSU9DVExfSTkxNV9RVUVSWQkJCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkx NV9RVUVSWSwgc3RydWN0IGRybV9pOTE1X3F1ZXJ5KQogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9H RU1fVk1fQ1JFQVRFCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fVk1f Q1JFQVRFLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ZtX2NvbnRyb2wpCiAjZGVmaW5lIERSTV9JT0NU TF9JOTE1X0dFTV9WTV9ERVNUUk9ZCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkx NV9HRU1fVk1fREVTVFJPWSwgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sKQorI2RlZmlu ZSBEUk1fSU9DVExfSTkxNV9HRU1fTU1BUF9PRkZTRVQJCURSTV9JT1dSKERSTV9DT01NQU5EX0JB U0UgKyBEUk1fSTkxNV9HRU1fTU1BUF9PRkZTRVQsIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcF9v ZmZzZXQpCiAKIC8qIEFsbG93IGRyaXZlcnMgdG8gc3VibWl0IGJhdGNoYnVmZmVycyBkaXJlY3Rs eSB0byBoYXJkd2FyZSwgcmVseWluZwogICogb24gdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgcHJv dmlkZWQgYnkgaGFyZHdhcmUuCkBAIC02MTEsNiArNjEzLDEwIEBAIHR5cGVkZWYgc3RydWN0IGRy bV9pOTE1X2lycV93YWl0IHsKICAqIFNlZSBJOTE1X0VYRUNfRkVOQ0VfT1VUIGFuZCBJOTE1X0VY RUNfRkVOQ0VfU1VCTUlULgogICovCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNfU1VCTUlU X0ZFTkNFIDUzCisKKy8qIE1tYXAgb2Zmc2V0IGlvY3RsICovCisjZGVmaW5lIEk5MTVfUEFSQU1f TU1BUF9PRkZTRVRfVkVSU0lPTgk1NAorCiAvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBo b2xlcyBhbmQgd2VsbCBkb2N1bWVudGVkICovCiAKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dl dHBhcmFtIHsKQEAgLTc4Niw2ICs3OTIsMzEgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0 dCB7CiAJX191NjQgb2Zmc2V0OwogfTsKIAorc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX29mZnNl dCB7CisJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCisJX191MzIg aGFuZGxlOworCV9fdTMyIHBhZDsKKwkvKioKKwkgKiBGYWtlIG9mZnNldCB0byB1c2UgZm9yIHN1 YnNlcXVlbnQgbW1hcCBjYWxsCisJICoKKwkgKiBUaGlzIGlzIGEgZml4ZWQtc2l6ZSB0eXBlIGZv ciAzMi82NCBjb21wYXRpYmlsaXR5LgorCSAqLworCV9fdTY0IG9mZnNldDsKKworCS8qKgorCSAq IEZsYWdzIGZvciBleHRlbmRlZCBiZWhhdmlvdXIuCisJICoKKwkgKiBJdCBpcyBtYW5kYXRvcnkg dGhhdCBlaXRoZXIgb25lIG9mIHRoZSBfV0MvX1dCIGZsYWdzCisJICogc2hvdWxkIGJlIHBhc3Nl ZCBoZXJlLgorCSAqLworCV9fdTY0IGZsYWdzOworI2RlZmluZSBJOTE1X01NQVBfT0ZGU0VUX1dD ICgxIDw8IDApCisjZGVmaW5lIEk5MTVfTU1BUF9PRkZTRVRfV0IgKDEgPDwgMSkKKyNkZWZpbmUg STkxNV9NTUFQX09GRlNFVF9VQyAoMSA8PCAyKQorI2RlZmluZSBJOTE1X01NQVBfT0ZGU0VUX0ZM QUdTIFwKKwkoSTkxNV9NTUFQX09GRlNFVF9XQyB8IEk5MTVfTU1BUF9PRkZTRVRfV0IgfCBJOTE1 X01NQVBfT0ZGU0VUX1VDKQorfTsKKwogc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluIHsK IAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCiAJX191MzIgaGFuZGxlOwotLSAKMi4yMC4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=