From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 10/38] drm/i915: Defer active reference until required Date: Tue, 20 Sep 2016 09:29:44 +0100 Message-ID: <20160920083012.2754-11-chris@chris-wilson.co.uk> References: <20160920083012.2754-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 mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 490866E67C for ; Tue, 20 Sep 2016 08:30:31 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id 133so2070971wmq.2 for ; Tue, 20 Sep 2016 01:30:31 -0700 (PDT) In-Reply-To: <20160920083012.2754-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 Cc: mika.kuoppala@intel.com List-Id: intel-gfx@lists.freedesktop.org V2Ugb25seSBuZWVkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHRvIGtlZXAgdGhlIG9iamVjdCBhbGl2 ZSBhZnRlciB0aGUKaGFuZGxlIGhhcyBiZWVuIGRlbGV0ZWQgKHNvIGFzIHRvIHByZXZlbnQgYSBz eW5jaHJvbm91cyBnZW1fY2xvc2UpLiBXaHkKdGhlbiBwYXkgdGhlIHByaWNlIG9mIGEga3JlZiBv biBldmVyeSBleGVjYnVmIHdoZW4gd2UgY2FuIGluc2VydCB0aGF0CmZpbmFsIGFjdGl2ZSByZWYg anVzdCBpbiB0aW1lIGZvciB0aGUgaGFuZGxlIGRlbGV0aW9uPwoKU2lnbmVkLW9mZi1ieTogQ2hy aXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgICB8IDI1 ICsrKysrKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRj aF9wb29sLmMgICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMgICAgICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVy LmMgICB8ICAyIC0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyAgICAgICAg ICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuYyB8 ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgICAgICB8ICA0 ICsrLS0KIDggZmlsZXMgY2hhbmdlZCwgNjQgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBhMzQwMTQxOGJmNGQuLjg5ZWFiODVhYjExYyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0yMjE0LDYgKzIyMTQsMTMgQEAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgewogCSgoUkVBRF9PTkNFKChibyktPmZsYWdzKSA+PiBJOTE1X0JP X0FDVElWRV9TSElGVCkgJiBJOTE1X0JPX0FDVElWRV9NQVNLKQogCiAJLyoqCisJICogSGF2ZSB3 ZSB0YWtlbiBhIHJlZmVyZW5jZSBmb3IgdGhlIG9iamVjdCBmb3IgaW5jb21wbGV0ZSBHUFUKKwkg KiBhY3Rpdml0eT8KKwkgKi8KKyNkZWZpbmUgSTkxNV9CT19BQ1RJVkVfUkVGX1NISUZUIChJOTE1 X0JPX0FDVElWRV9TSElGVCArIEk5MTVfTlVNX0VOR0lORVMpCisjZGVmaW5lIEk5MTVfQk9fQUNU SVZFX1JFRiBCSVQoSTkxNV9CT19BQ1RJVkVfUkVGX1NISUZUKQorCisJLyoqCiAJICogVGhpcyBp cyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNpbmNlIGxhc3QgYm91bmQK IAkgKiB0byB0aGUgR1RUCiAJICovCkBAIC0yMzgzLDYgKzIzOTAsMjggQEAgaTkxNV9nZW1fb2Jq ZWN0X2hhc19hY3RpdmVfZW5naW5lKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAJcmV0dXJuIG9iai0+ZmxhZ3MgJiBCSVQoZW5naW5lICsgSTkxNV9CT19BQ1RJVkVfU0hJ RlQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wKK2k5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZl X3JlZmVyZW5jZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXJl dHVybiBvYmotPmZsYWdzICYgSTkxNV9CT19BQ1RJVkVfUkVGOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQKK2k5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5k ZXYtPnN0cnVjdF9tdXRleCk7CisJb2JqLT5mbGFncyB8PSBJOTE1X0JPX0FDVElWRV9SRUY7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2NsZWFyX2FjdGl2ZV9yZWZl cmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCW9iai0+ZmxhZ3MgJj0gfkk5 MTVfQk9fQUNUSVZFX1JFRjsKK30KKwordm9pZCBfX2k5MTVfZ2VtX29iamVjdF9yZWxlYXNlX3Vu bGVzc19hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisKIHN0YXRpYyBp bmxpbmUgdW5zaWduZWQgaW50CiBpOTE1X2dlbV9vYmplY3RfZ2V0X3RpbGluZyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewpAQCAtMjQxMyw2ICsyNDQyLDExIEBAIHN0YXRpYyBp bmxpbmUgdm9pZCBpOTE1X3ZtYV9wdXQoc3RydWN0IGk5MTVfdm1hICp2bWEpCiAJaTkxNV9nZW1f b2JqZWN0X3B1dCh2bWEtPm9iaik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3ZtYV9w dXRfaW50ZXJuYWwoc3RydWN0IGk5MTVfdm1hICp2bWEpCit7CisJX19pOTE1X2dlbV9vYmplY3Rf cmVsZWFzZV91bmxlc3NfYWN0aXZlKHZtYS0+b2JqKTsKK30KKwogLyoKICAqIE9wdGltaXNlZCBT R0wgaXRlcmF0b3IgZm9yIEdFTSBvYmplY3RzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmlu ZGV4IGQ5MjE0YzlkMzFkMi4uZTgzNzNmMjY0ODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK QEAgLTI2MTgsNyArMjYxOCwxMCBAQCBpOTE1X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKHN0cnVj dCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZSwKIAkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+Z2xvYmFs X2xpc3QsCiAJCQkgICAgICAgJnJlcXVlc3QtPmk5MTUtPm1tLmJvdW5kX2xpc3QpOwogCi0JaTkx NV9nZW1fb2JqZWN0X3B1dChvYmopOworCWlmIChpOTE1X2dlbV9vYmplY3RfaGFzX2FjdGl2ZV9y ZWZlcmVuY2Uob2JqKSkgeworCQlpOTE1X2dlbV9vYmplY3RfY2xlYXJfYWN0aXZlX3JlZmVyZW5j ZShvYmopOworCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJfQogfQogCiBzdGF0aWMgYm9v bCBpOTE1X2NvbnRleHRfaXNfYmFubmVkKGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgpCkBAIC0yODgxLDYgKzI4ODQsMTIgQEAgdm9pZCBpOTE1X2dlbV9jbG9zZV9vYmplY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUodm1hLCB2biwgJm9iai0+dm1hX2xpc3QsIG9ial9saW5rKQogCQlp ZiAodm1hLT52bS0+ZmlsZSA9PSBmcHJpdikKIAkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwlp ZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopICYmCisJICAgICFpOTE1X2dlbV9vYmpl Y3RfaGFzX2FjdGl2ZV9yZWZlcmVuY2Uob2JqKSkgeworCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2Fj dGl2ZV9yZWZlcmVuY2Uob2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOworCX0KIAlt dXRleF91bmxvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CiB9CiAKQEAgLTQzNTgs NiArNDM2NywyMCBAQCB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtX29iaikKIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CiB9CiAKK3Zv aWQgX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCit7CisJaWYgKCFvYmopCisJCXJldHVybjsKKworCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisKKwlHRU1fQlVHX09O KGk5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVyZW5jZShvYmopKTsKKwlpZiAoaTkxNV9n ZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKQorCQlpOTE1X2dlbV9vYmplY3Rfc2V0X2FjdGl2ZV9y ZWZlcmVuY2Uob2JqKTsKKwllbHNlCisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKK30KKwog aW50IGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKaW5kZXggZWQ5ODk1OTZkOWEzLi5jYjI1Y2Fk MzMxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bv b2wuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKQEAg LTczLDcgKzczLDcgQEAgdm9pZCBpOTE1X2dlbV9iYXRjaF9wb29sX2Zpbmkoc3RydWN0IGk5MTVf Z2VtX2JhdGNoX3Bvb2wgKnBvb2wpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5l eHQsCiAJCQkJCSAmcG9vbC0+Y2FjaGVfbGlzdFtuXSwKIAkJCQkJIGJhdGNoX3Bvb2xfbGluaykK LQkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwkJCV9faTkxNV9nZW1fb2JqZWN0X3JlbGVh c2VfdW5sZXNzX2FjdGl2ZShvYmopOwogCiAJCUlOSVRfTElTVF9IRUFEKCZwb29sLT5jYWNoZV9s aXN0W25dKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9j b250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKaW5kZXgg ZGYxMGY0ZTk1NzM2Li4xZDJhYjczYThmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9jb250ZXh0LmMKQEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJl ZShzdHJ1Y3Qga3JlZiAqY3R4X3JlZikKIAkJaWYgKGNlLT5yaW5nKQogCQkJaW50ZWxfcmluZ19m cmVlKGNlLT5yaW5nKTsKIAotCQlpOTE1X3ZtYV9wdXQoY2UtPnN0YXRlKTsKKwkJX19pOTE1X2dl bV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKGNlLT5zdGF0ZS0+b2JqKTsKIAl9CiAKIAlw dXRfcGlkKGN0eC0+cGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYwppbmRleCAzM2M4NTIyNzY0M2QuLjI0M2Y1MDY3ZTdhYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwpAQCAtMTI5OSw4ICsxMjk5LDYgQEAgdm9pZCBp OTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkgKiBhZGQgdGhl IGFjdGl2ZSByZWZlcmVuY2UgZmlyc3QgYW5kIHF1ZXVlIGZvciBpdCB0byBiZSBkcm9wcGVkCiAJ ICogKmxhc3QqLgogCSAqLwotCWlmICghaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKQot CQlpOTE1X2dlbV9vYmplY3RfZ2V0KG9iaik7CiAJaTkxNV9nZW1fb2JqZWN0X3NldF9hY3RpdmUo b2JqLCBpZHgpOwogCWk5MTVfZ2VtX2FjdGl2ZV9zZXQoJm9iai0+bGFzdF9yZWFkW2lkeF0sIHJl cSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggNzkwNmZjM2FhNDg4Li5l ZDNjZDcxNGRkMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0 dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCkBAIC0zNzE4LDUg KzM3MTgsNSBAQCB2b2lkIGk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKHN0cnVjdCBpOTE1X3Zt YSAqKnBfdm1hKQogCQlyZXR1cm47CiAKIAlpOTE1X3ZtYV91bnBpbih2bWEpOwotCWk5MTVfdm1h X3B1dCh2bWEpOworCWk5MTVfdm1hX3B1dF9pbnRlcm5hbCh2bWEpOwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0YXRlLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9yZW5kZXJfc3RhdGUuYwppbmRleCA5NWI3ZTlhZmQ1ZjguLjA1 NTEzOTM0MzEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVu ZGVyX3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVuZGVyX3N0 YXRlLmMKQEAgLTIyNSw2ICsyMjUsNiBAQCBpbnQgaTkxNV9nZW1fcmVuZGVyX3N0YXRlX2luaXQo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCiBlcnJfdW5waW46CiAJaTkxNV92bWFf dW5waW4oc28udm1hKTsKIGVycl9vYmo6Ci0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCV9f aTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfdW5sZXNzX2FjdGl2ZShvYmopOwogCXJldHVybiByZXQ7 CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggNGJmNmJkMDU2 YjI2Li42NTMwYWNkOGJlNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JpbmdidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVy LmMKQEAgLTE4MjYsNyArMTgyNiw3IEBAIHN0YXRpYyB2b2lkIGNsZWFudXBfc3RhdHVzX3BhZ2Uo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCiAJaTkxNV92bWFfdW5waW4odm1hKTsK IAlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKHZtYS0+b2JqKTsKLQlpOTE1X3ZtYV9wdXQodm1h KTsKKwlpOTE1X3ZtYV9wdXRfaW50ZXJuYWwodm1hKTsKIH0KIAogc3RhdGljIGludCBpbml0X3N0 YXR1c19wYWdlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKQEAgLTIwMjMsNyArMjAy Myw3IEBAIGludGVsX2VuZ2luZV9jcmVhdGVfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIGludCBzaXplKQogdm9pZAogaW50ZWxfcmluZ19mcmVlKHN0cnVjdCBpbnRlbF9yaW5n ICpyaW5nKQogewotCWk5MTVfdm1hX3B1dChyaW5nLT52bWEpOworCWk5MTVfdm1hX3B1dF9pbnRl cm5hbChyaW5nLT52bWEpOwogCWtmcmVlKHJpbmcpOwogfQogCi0tIAoyLjkuMwoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==