From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 2/2] drm/amdgpu: bind GTT on demand Date: Tue, 6 Sep 2016 11:41:06 +0200 Message-ID: <1473154866-2448-2-git-send-email-deathsimple@vodafone.de> References: <1473154866-2448-1-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1473154866-2448-1-git-send-email-deathsimple-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgoKV2UgZG9u J3QgcmVhbGx5IG5lZWQgdGhlIEdUVCB0YWJsZSBhbnkgbW9yZSBtb3N0IG9mIHRoZSB0aW1lLiBT byBiaW5kIGl0Cm9ubHkgb24gZGVtYW5kLgoKU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5p ZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdS5oICAgICAgICB8ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9jcy5jICAgICB8IDM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIHwgIDcgKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAgfCAzMyArKysrKysrKysrKysrKysr KysrKysrKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oICAg IHwgIDMgKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMgICAgfCAg NCArKysrCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMgICAgfCAgNiAr KysrKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAgICB8ICAzICsr LQogOCBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKaW5kZXggOWQzOWZhOC4uMjhkNGE2NyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKQEAgLTI1MjEsNiArMjUyMSw3IEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBhbWRncHVfYWNwaV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KSB7 IH0KIHN0cnVjdCBhbWRncHVfYm9fdmFfbWFwcGluZyAqCiBhbWRncHVfY3NfZmluZF9tYXBwaW5n KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwYXJzZXIsCiAJCSAgICAgICB1aW50NjRfdCBhZGRy LCBzdHJ1Y3QgYW1kZ3B1X2JvICoqYm8pOworaW50IGFtZGdwdV9jc19zeXN2bV9hY2Nlc3NfcmVx dWlyZWQoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnBhcnNlcik7CiAKICNpZiBkZWZpbmVkKENP TkZJR19EUk1fQU1EX0RBTCkKIGludCBhbWRncHVfZG1fZGlzcGxheV9yZXN1bWUoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMK aW5kZXggMjBhMTk2Mi4uZTA2OTk3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2NzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2NzLmMKQEAgLTY0MCw4ICs2NDAsMTIgQEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2Jv cyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCwKIAkJfQogCX0KIAotCWlmIChwLT51Zl9lbnRy eS5yb2JqKQotCQlwLT5qb2ItPnVmX2FkZHIgKz0gYW1kZ3B1X2JvX2dwdV9vZmZzZXQocC0+dWZf ZW50cnkucm9iaik7CisJaWYgKCFyICYmIHAtPnVmX2VudHJ5LnJvYmopIHsKKwkJc3RydWN0IGFt ZGdwdV9ibyAqdWYgPSBwLT51Zl9lbnRyeS5yb2JqOworCisJCXIgPSBhbWRncHVfdHRtX2JpbmQo dWYtPnRiby50dG0sICZ1Zi0+dGJvLm1lbSk7CisJCXAtPmpvYi0+dWZfYWRkciArPSBhbWRncHVf Ym9fZ3B1X29mZnNldCh1Zik7CisJfQogCiBlcnJvcl92YWxpZGF0ZToKIAlpZiAocikgewpAQCAt MTE1NiwzICsxMTYwLDI5IEBAIGFtZGdwdV9jc19maW5kX21hcHBpbmcoc3RydWN0IGFtZGdwdV9j c19wYXJzZXIgKnBhcnNlciwKIAogCXJldHVybiBOVUxMOwogfQorCisvKioKKyAqIGFtZGdwdV9j c19zeXN2bV9hY2Nlc3NfcmVxdWlyZWQgLSBtYWtlIEJPcyBhY2Nlc3NpYmxlIGJ5IHRoZSBzeXN0 ZW0gVk0KKyAqCisgKiBAcGFyc2VyOiBjb21tYW5kIHN1Ym1pc3Npb24gcGFyc2VyIGNvbnRleHQK KyAqCisgKiBIZWxwZXIgZm9yIFVWRC9WQ0UgVk0gZW11bGF0aW9uLCBtYWtlIHN1cmUgQk9zIGFy ZSBhY2Nlc3NpYmxlIGJ5IHRoZSBzeXN0ZW0gVk0uCisgKi8KK2ludCBhbWRncHVfY3Nfc3lzdm1f YWNjZXNzX3JlcXVpcmVkKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwYXJzZXIpCit7CisJdW5z aWduZWQgaTsKKwlpbnQgcjsKKworCWlmICghcGFyc2VyLT5ib19saXN0KQorCQlyZXR1cm4gMDsK KworCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPmJvX2xpc3QtPm51bV9lbnRyaWVzOyBpKyspIHsK KwkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSBwYXJzZXItPmJvX2xpc3QtPmFycmF5W2ldLnJvYmo7 CisKKwkJciA9IGFtZGdwdV90dG1fYmluZChiby0+dGJvLnR0bSwgJmJvLT50Ym8ubWVtKTsKKwkJ aWYgKHVubGlrZWx5KHIpKQorCQkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKaW5kZXggYjE3NzM0ZS4uZGM3 M2YxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVj dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwpAQCAt NjQ2LDYgKzY0NiwxMSBAQCBpbnQgYW1kZ3B1X2JvX3Bpbl9yZXN0cmljdGVkKHN0cnVjdCBhbWRn cHVfYm8gKmJvLCB1MzIgZG9tYWluLAogCQlkZXZfZXJyKGJvLT5hZGV2LT5kZXYsICIlcCBwaW4g ZmFpbGVkXG4iLCBibyk7CiAJCWdvdG8gZXJyb3I7CiAJfQorCXIgPSBhbWRncHVfdHRtX2JpbmQo Ym8tPnRiby50dG0sICZiby0+dGJvLm1lbSk7CisJaWYgKHVubGlrZWx5KHIpKSB7CisJCWRldl9l cnIoYm8tPmFkZXYtPmRldiwgIiVwIGJpbmQgZmFpbGVkXG4iLCBibyk7CisJCWdvdG8gZXJyb3I7 CisJfQogCiAJYm8tPnBpbl9jb3VudCA9IDE7CiAJaWYgKGdwdV9hZGRyICE9IE5VTEwpCkBAIC05 MTgsNiArOTIzLDggQEAgdm9pZCBhbWRncHVfYm9fZmVuY2Uoc3RydWN0IGFtZGdwdV9ibyAqYm8s IHN0cnVjdCBmZW5jZSAqZmVuY2UsCiB1NjQgYW1kZ3B1X2JvX2dwdV9vZmZzZXQoc3RydWN0IGFt ZGdwdV9ibyAqYm8pCiB7CiAJV0FSTl9PTl9PTkNFKGJvLT50Ym8ubWVtLm1lbV90eXBlID09IFRU TV9QTF9TWVNURU0pOworCVdBUk5fT05fT05DRShiby0+dGJvLm1lbS5tZW1fdHlwZSA9PSBUVE1f UExfVFQgJiYKKwkJICAgICAhYW1kZ3B1X3R0bV9pc19ib3VuZChiby0+dGJvLnR0bSkpOwogCVdB Uk5fT05fT05DRSghd3dfbXV0ZXhfaXNfbG9ja2VkKCZiby0+dGJvLnJlc3YtPmxvY2spICYmCiAJ CSAgICAgIWJvLT5waW5fY291bnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dHRtLmMKaW5kZXggNDMzN2IzYS4uYzI5NGFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV90dG0uYwpAQCAtMjU2LDggKzI1NiwxMiBAQCBzdGF0aWMgaW50IGFtZGdwdV9tb3Zl X2JsaXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAluZXdfc3RhcnQgPSAodTY0KW5l d19tZW0tPnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAKIAlzd2l0Y2ggKG9sZF9tZW0tPm1lbV90eXBl KSB7Ci0JY2FzZSBUVE1fUExfVlJBTToKIAljYXNlIFRUTV9QTF9UVDoKKwkJciA9IGFtZGdwdV90 dG1fYmluZChiby0+dHRtLCBvbGRfbWVtKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKworCWNh c2UgVFRNX1BMX1ZSQU06CiAJCW9sZF9zdGFydCArPSBiby0+YmRldi0+bWFuW29sZF9tZW0tPm1l bV90eXBlXS5ncHVfb2Zmc2V0OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjY1LDggKzI2OSwx MiBAQCBzdGF0aWMgaW50IGFtZGdwdV9tb3ZlX2JsaXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICpibywKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXN3aXRjaCAobmV3X21lbS0+bWVtX3R5cGUp IHsKLQljYXNlIFRUTV9QTF9WUkFNOgogCWNhc2UgVFRNX1BMX1RUOgorCQlyID0gYW1kZ3B1X3R0 bV9iaW5kKGJvLT50dG0sIG5ld19tZW0pOworCQlpZiAocikKKwkJCXJldHVybiByOworCisJY2Fz ZSBUVE1fUExfVlJBTToKIAkJbmV3X3N0YXJ0ICs9IGJvLT5iZGV2LT5tYW5bbmV3X21lbS0+bWVt X3R5cGVdLmdwdV9vZmZzZXQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC02MzksNyArNjQ3LDYg QEAgc3RhdGljIGludCBhbWRncHVfdHRtX2JhY2tlbmRfYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0s CiAJCQkJICAgc3RydWN0IHR0bV9tZW1fcmVnICpib19tZW0pCiB7CiAJc3RydWN0IGFtZGdwdV90 dG1fdHQgKmd0dCA9ICh2b2lkKil0dG07Ci0JdWludDMyX3QgZmxhZ3MgPSBhbWRncHVfdHRtX3R0 X3B0ZV9mbGFncyhndHQtPmFkZXYsIHR0bSwgYm9fbWVtKTsKIAlpbnQgcjsKIAogCWlmIChndHQt PnVzZXJwdHIpIHsKQEAgLTY2MCw2ICs2NjcsMjYgQEAgc3RhdGljIGludCBhbWRncHVfdHRtX2Jh Y2tlbmRfYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCiAJICAgIGJvX21lbS0+bWVtX3R5cGUgPT0g QU1ER1BVX1BMX09BKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJldHVybiAwOworfQorCitib29s IGFtZGdwdV90dG1faXNfYm91bmQoc3RydWN0IHR0bV90dCAqdHRtKQoreworCXN0cnVjdCBhbWRn cHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKKworCXJldHVybiBndHQgJiYgIWxpc3RfZW1w dHkoJmd0dC0+bGlzdCk7Cit9CisKK2ludCBhbWRncHVfdHRtX2JpbmQoc3RydWN0IHR0bV90dCAq dHRtLCBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3R0bV90 dCAqZ3R0ID0gKHZvaWQgKil0dG07CisJdWludDMyX3QgZmxhZ3M7CisJaW50IHI7CisKKwlpZiAo IXR0bSB8fCBhbWRncHVfdHRtX2lzX2JvdW5kKHR0bSkpCisJCXJldHVybiAwOworCisJZmxhZ3Mg PSBhbWRncHVfdHRtX3R0X3B0ZV9mbGFncyhndHQtPmFkZXYsIHR0bSwgYm9fbWVtKTsKIAlyID0g YW1kZ3B1X2dhcnRfYmluZChndHQtPmFkZXYsIGd0dC0+b2Zmc2V0LCB0dG0tPm51bV9wYWdlcywK IAkJdHRtLT5wYWdlcywgZ3R0LT50dG0uZG1hX2FkZHJlc3MsIGZsYWdzKTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oCmluZGV4IDcyZjZiZmMuLjIxNGJhZTkgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uaAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgKQEAgLTc3LDQgKzc3LDcgQEAgaW50 IGFtZGdwdV9maWxsX2J1ZmZlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibywKIAkJCXN0cnVjdCBmZW5j ZSAqKmZlbmNlKTsKIAogaW50IGFtZGdwdV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Citib29sIGFtZGdwdV90dG1faXNfYm91bmQoc3RydWN0IHR0 bV90dCAqdHRtKTsKK2ludCBhbWRncHVfdHRtX2JpbmQoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1 Y3QgdHRtX21lbV9yZWcgKmJvX21lbSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3V2ZC5jCmluZGV4IDU4ODhlOGEuLmZhYjdiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdXZkLmMKQEAgLTg5MSw2ICs4OTEsMTAgQEAgaW50IGFtZGdwdV91 dmRfcmluZ19wYXJzZV9jcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcGFyc2VyLCB1aW50MzJf dCBpYl9pZHgpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXIgPSBhbWRncHVfY3Nfc3lzdm1f YWNjZXNzX3JlcXVpcmVkKHBhcnNlcik7CisJaWYgKHIpCisJCXJldHVybiByOworCiAJY3R4LnBh cnNlciA9IHBhcnNlcjsKIAljdHguYnVmX3NpemVzID0gYnVmX3NpemVzOwogCWN0eC5pYl9pZHgg PSBpYl9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdmNlLmMKaW5kZXggOWI3 MWQ2Yy4uYjBjNjcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92Y2UuYwpA QCAtNjM0LDcgKzYzNCwxMSBAQCBpbnQgYW1kZ3B1X3ZjZV9yaW5nX3BhcnNlX2NzKHN0cnVjdCBh bWRncHVfY3NfcGFyc2VyICpwLCB1aW50MzJfdCBpYl9pZHgpCiAJdWludDMyX3QgYWxsb2NhdGVk ID0gMDsKIAl1aW50MzJfdCB0bXAsIGhhbmRsZSA9IDA7CiAJdWludDMyX3QgKnNpemUgPSAmdG1w OwotCWludCBpLCByID0gMCwgaWR4ID0gMDsKKwlpbnQgaSwgciwgaWR4ID0gMDsKKworCXIgPSBh bWRncHVfY3Nfc3lzdm1fYWNjZXNzX3JlcXVpcmVkKHApOworCWlmIChyKQorCQlyZXR1cm4gcjsK IAogCXdoaWxlIChpZHggPCBpYi0+bGVuZ3RoX2R3KSB7CiAJCXVpbnQzMl90IGxlbiA9IGFtZGdw dV9nZXRfaWJfdmFsdWUocCwgaWJfaWR4LCBpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uYwppbmRleCA3NjYwZjgyLi5hNTQ5YWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdm0uYwpAQCAtMTE2Miw3ICsxMTYyLDggQEAgaW50IGFtZGdwdV92bV9ib191 cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJfQogCiAJZmxhZ3MgPSBhbWRncHVf dHRtX3R0X3B0ZV9mbGFncyhhZGV2LCBib192YS0+Ym8tPnRiby50dG0sIG1lbSk7Ci0JZ3R0X2Zs YWdzID0gKGFkZXYgPT0gYm9fdmEtPmJvLT5hZGV2KSA/IGZsYWdzIDogMDsKKwlndHRfZmxhZ3Mg PSAoYW1kZ3B1X3R0bV9pc19ib3VuZChib192YS0+Ym8tPnRiby50dG0pICYmCisJCWFkZXYgPT0g Ym9fdmEtPmJvLT5hZGV2KSA/IGZsYWdzIDogMDsKIAogCXNwaW5fbG9jaygmdm0tPnN0YXR1c19s b2NrKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmJvX3ZhLT52bV9zdGF0dXMpKQotLSAKMi41LjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFp bGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=