From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 03/22] drm/i915: introduce intel_memory_region Date: Fri, 27 Sep 2019 18:33:50 +0100 Message-ID: <20190927173409.31175-4-matthew.auld@intel.com> References: <20190927173409.31175-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 769266E170 for ; Fri, 27 Sep 2019 17:34:16 +0000 (UTC) In-Reply-To: <20190927173409.31175-1-matthew.auld@intel.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 Cc: daniel.vetter@ffwll.ch List-Id: intel-gfx@lists.freedesktop.org U3VwcG9ydCBtZW1vcnkgcmVnaW9ucywgYXMgZGVmaW5lZCBieSBhIGdpdmVuIChzdGFydCwgZW5k KSwgYW5kIGFsbG93CmNyZWF0aW5nIEdFTSBvYmplY3RzIHdoaWNoIGFyZSBiYWNrZWQgYnkgc2Fp ZCByZWdpb24uIFRoZSBpbW1lZGlhdGUgZ29hbApoZXJlIGlzIHRvIGhhdmUgc29tZXRoaW5nIHRv IHJlcHJlc2VudCBvdXIgZGV2aWNlIG1lbW9yeSwgYnV0IGxhdGVyIG9uCndlIGFsc28gd2FudCB0 byByZXByZXNlbnQgZXZlcnkgbWVtb3J5IGRvbWFpbiB3aXRoIGEgcmVnaW9uLCBzbyBzdG9sZW4s CnNobWVtLCBhbmQgb2YgY291cnNlIGRldmljZS4gQXQgc29tZSBwb2ludCB3ZSBhcmUgcHJvYmFi bHkgZ29pbmcgdG8gd2FudAp1c2UgYSBjb21tb24gc3RydWN0IGhlcmUsIHN1Y2ggdGhhdCB3ZSBh cmUgYmV0dGVyIGFsaWduZWQgd2l0aCBzYXkgVFRNLgoKU2lnbmVkLW9mZi1ieTogTWF0dGhldyBB dWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBBYmRpZWwgSmFudWxn dWUgPGFiZGllbC5qYW51bGd1ZUBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE5pcmFu amFuYSBWaXNod2FuYXRoYXB1cmEgPG5pcmFuamFuYS52aXNod2FuYXRoYXB1cmFAaW50ZWwuY29t PgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiAr CiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaCAgfCAgIDkgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5jICAgIHwgMTMzICsrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmggICAg fCAgMjggKysrCiAuLi4vZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAg fCAgNzggKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMg ICAgfCAxNzMgKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9t ZW1vcnlfcmVnaW9uLmggICAgfCAgNzcgKysrKysrKysKIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCiAuLi4vZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX21lbW9yeV9yZWdpb24uYyAgfCAxMjQgKysrKysrKysrKysrKwogLi4uL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jICB8ICA1OSArKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5oICB8ICAxNiArKwogMTMgZmlsZXMgY2hhbmdl ZCwgNzAyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lv bi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfcmVnaW9uLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvbW9ja19yZWdpb24uaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggNjMxM2U3YjRiZDc4 Li5kODQ5ZGZmMzFmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC01MCw2ICs1MCw3IEBAIGk5 MTUteSArPSBpOTE1X2Rydi5vIFwKIAkgIGk5MTVfdXRpbHMubyBcCiAJICBpbnRlbF9jc3IubyBc CiAJICBpbnRlbF9kZXZpY2VfaW5mby5vIFwKKwkgIGludGVsX21lbW9yeV9yZWdpb24ubyBcCiAJ ICBpbnRlbF9wY2gubyBcCiAJICBpbnRlbF9wbS5vIFwKIAkgIGludGVsX3J1bnRpbWVfcG0ubyBc CkBAIC0xMTgsNiArMTE5LDcgQEAgZ2VtLXkgKz0gXAogCWdlbS9pOTE1X2dlbV9wYWdlcy5vIFwK IAlnZW0vaTkxNV9nZW1fcGh5cy5vIFwKIAlnZW0vaTkxNV9nZW1fcG0ubyBcCisJZ2VtL2k5MTVf Z2VtX3JlZ2lvbi5vIFwKIAlnZW0vaTkxNV9nZW1fc2htZW0ubyBcCiAJZ2VtL2k5MTVfZ2VtX3No cmlua2VyLm8gXAogCWdlbS9pOTE1X2dlbV9zdG9sZW4ubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgKaW5kZXggZDY5NWYxODdiNzkwLi5k MzZjODYwYzljNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3RfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f b2JqZWN0X3R5cGVzLmgKQEAgLTE1OCw2ICsxNTgsMTUgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgewogCQlhdG9taWNfdCBwYWdlc19waW5fY291bnQ7CiAJCWF0b21pY190IHNocmlua19w aW47CiAKKwkJLyoqCisJCSAqIE1lbW9yeSByZWdpb24gZm9yIHRoaXMgb2JqZWN0LgorCQkgKi8K KwkJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKnJlZ2lvbjsKKwkJLyoqCisJCSAqIExpc3Qg b2YgbWVtb3J5IHJlZ2lvbiBibG9ja3MgYWxsb2NhdGVkIGZvciB0aGlzIG9iamVjdC4KKwkJICov CisJCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tzOworCiAJCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7 CiAJCXZvaWQgKm1hcHBpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9yZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9y ZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVjM2JmYzEy MTkyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9yZWdpb24uYwpAQCAtMCwwICsxLDEzMyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKwor I2luY2x1ZGUgImludGVsX21lbW9yeV9yZWdpb24uaCIKKyNpbmNsdWRlICJpOTE1X2dlbV9yZWdp b24uaCIKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCit2b2lkCitpOTE1X2dlbV9vYmplY3RfcHV0 X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJc3RydWN0 IHNnX3RhYmxlICpwYWdlcykKK3sKKwlfX2ludGVsX21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1 ZGR5KG9iai0+bW0ucmVnaW9uLCAmb2JqLT5tbS5ibG9ja3MpOworCisJb2JqLT5tbS5kaXJ0eSA9 IGZhbHNlOworCXNnX2ZyZWVfdGFibGUocGFnZXMpOworCWtmcmVlKHBhZ2VzKTsKK30KKworaW50 CitpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCit7CisJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSA9IG9iai0+bW0u cmVnaW9uOworCXN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcyA9ICZvYmotPm1tLmJsb2NrczsKKwl1 bnNpZ25lZCBpbnQgZmxhZ3MgPSBJOTE1X0FMTE9DX01JTl9QQUdFX1NJWkU7CisJcmVzb3VyY2Vf c2l6ZV90IHNpemUgPSBvYmotPmJhc2Uuc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgcHJldl9lbmQ7 CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBzZ190YWJsZSAqc3Q7 CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgc2dfcGFnZV9zaXplczsK Kwl1bnNpZ25lZCBsb25nIGk7CisJaW50IHJldDsKKworCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0 KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoc2df YWxsb2NfdGFibGUoc3QsIHNpemUgPj4gaWxvZzIobWVtLT5tbS5jaHVua19zaXplKSwgR0ZQX0tF Uk5FTCkpIHsKKwkJa2ZyZWUoc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBf X2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5KG1lbSwgc2l6ZSwgZmxhZ3MsIGJs b2Nrcyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9zZzsKKworCUdFTV9CVUdfT04obGlz dF9lbXB0eShibG9ja3MpKTsKKworCXNnID0gc3QtPnNnbDsKKwlzdC0+bmVudHMgPSAwOworCXNn X3BhZ2Vfc2l6ZXMgPSAwOworCWkgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9jaywg YmxvY2tzLCBsaW5rKSB7CisJCXU2NCBibG9ja19zaXplLCBvZmZzZXQ7CisKKwkJYmxvY2tfc2l6 ZSA9IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZSgmbWVtLT5tbSwgYmxvY2spOworCQlvZmZzZXQgPSBp OTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7CisKKwkJR0VNX0JVR19PTihvdmVyZmxvd3Nf dHlwZShibG9ja19zaXplLCBzZy0+bGVuZ3RoKSk7CisKKwkJaWYgKCFpIHx8IG9mZnNldCAhPSBw cmV2X2VuZCB8fAorCQkgICAgYWRkX292ZXJmbG93c190KHR5cGVvZihzZy0+bGVuZ3RoKSwgc2ct Pmxlbmd0aCwgYmxvY2tfc2l6ZSkpIHsKKwkJCWlmIChpKSB7CisJCQkJc2dfcGFnZV9zaXplcyB8 PSBzZy0+bGVuZ3RoOworCQkJCXNnID0gX19zZ19uZXh0KHNnKTsKKwkJCX0KKworCQkJc2dfZG1h X2FkZHJlc3Moc2cpID0gbWVtLT5yZWdpb24uc3RhcnQgKyBvZmZzZXQ7CisJCQlzZ19kbWFfbGVu KHNnKSA9IGJsb2NrX3NpemU7CisKKwkJCXNnLT5sZW5ndGggPSBibG9ja19zaXplOworCisJCQlz dC0+bmVudHMrKzsKKwkJfSBlbHNlIHsKKwkJCXNnLT5sZW5ndGggKz0gYmxvY2tfc2l6ZTsKKwkJ CXNnX2RtYV9sZW4oc2cpICs9IGJsb2NrX3NpemU7CisJCX0KKworCQlwcmV2X2VuZCA9IG9mZnNl dCArIGJsb2NrX3NpemU7CisJCWkrKzsKKwl9OworCisJc2dfcGFnZV9zaXplcyB8PSBzZy0+bGVu Z3RoOworCXNnX21hcmtfZW5kKHNnKTsKKwlpOTE1X3NnX3RyaW0oc3QpOworCisJX19pOTE1X2dl bV9vYmplY3Rfc2V0X3BhZ2VzKG9iaiwgc3QsIHNnX3BhZ2Vfc2l6ZXMpOworCisJcmV0dXJuIDA7 CisKK2Vycl9mcmVlX3NnOgorCXNnX2ZyZWVfdGFibGUoc3QpOworCWtmcmVlKHN0KTsKKwlyZXR1 cm4gcmV0OworfQorCit2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0X21lbW9yeV9yZWdpb24oc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKm1lbSkKK3sKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5tbS5ibG9ja3MpOworCW9iai0+ bW0ucmVnaW9uID0gbWVtOworfQorCit2b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21lbW9y eV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKK30KKworc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKgoraTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24oc3Ry dWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKKwkJCSAgICAgIHJlc291cmNlX3NpemVfdCBz aXplLAorCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7CisKKwlpZiAoIW1lbSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7 CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgbWVtLT5taW5fcGFnZV9zaXplKTsKKworCUdFTV9C VUdfT04oIXNpemUpOworCUdFTV9CVUdfT04oIUlTX0FMSUdORUQoc2l6ZSwgSTkxNV9HVFRfTUlO X0FMSUdOTUVOVCkpOworCisJaWYgKHNpemUgPj4gUEFHRV9TSElGVCA+IElOVF9NQVgpCisJCXJl dHVybiBFUlJfUFRSKC1FMkJJRyk7CisKKwlpZiAob3ZlcmZsb3dzX3R5cGUoc2l6ZSwgb2JqLT5i YXNlLnNpemUpKQorCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJcmV0dXJuIG1lbS0+b3Bz LT5jcmVhdGVfb2JqZWN0KG1lbSwgc2l6ZSwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uZWJkZGM4NmQ3OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBD b3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JOTE1X0dFTV9SRUdJT05fSF9fCisjZGVmaW5l IF9fSTkxNV9HRU1fUkVHSU9OX0hfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3Ry dWN0IGludGVsX21lbW9yeV9yZWdpb247CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKK3N0 cnVjdCBzZ190YWJsZTsKKworaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfYnVkZHkoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXNfYnVkZHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIHN0 cnVjdCBzZ190YWJsZSAqcGFnZXMpOworCit2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0X21lbW9y eV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb24gKm1lbSk7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF9yZWxlYXNlX21l bW9yeV9yZWdpb24oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisKK3N0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICoKK2k5MTVfZ2VtX29iamVjdF9jcmVhdGVfcmVnaW9uKHN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6 ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwppbmRleCBjNWNlYTQzNzky MTYuLjRlMTgwNWFhZWI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3Nl bGZ0ZXN0cy9odWdlX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0 ZXN0cy9odWdlX3BhZ2VzLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlICJpOTE1X3NlbGZ0 ZXN0LmgiCiAKKyNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcmVnaW9uLmgiCiAjaW5jbHVkZSAiZ2Vt L2k5MTVfZ2VtX3BtLmgiCiAKICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgpAQCAtMTcsNiArMTgs NyBAQAogCiAjaW5jbHVkZSAic2VsZnRlc3RzL21vY2tfZHJtLmgiCiAjaW5jbHVkZSAic2VsZnRl c3RzL21vY2tfZ2VtX2RldmljZS5oIgorI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5o IgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X3JhbmRvbS5oIgogCiBzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IHBhZ2Vfc2l6ZXNbXSA9IHsKQEAgLTQ0Nyw2ICs0NDksODEgQEAgc3RhdGljIGlu dCBpZ3RfbW9ja19leGhhdXN0X2RldmljZV9zdXBwb3J0ZWRfcGFnZXModm9pZCAqYXJnKQogCXJl dHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgaWd0X21vY2tfbWVtb3J5X3JlZ2lvbl9odWdlX3Bh Z2VzKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBhcmc7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBwcGd0dC0+dm0uaTkxNTsKKwl1bnNpZ25lZCBs b25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6ZXM7CisJc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb24gKm1lbTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCWludCBiaXQ7CisJaW50IGVyciA9IDA7CisKKwlt ZW0gPSBtb2NrX3JlZ2lvbl9jcmVhdGUoaTkxNSwgMCwgU1pfMkcsCisJCQkJIEk5MTVfR1RUX1BB R0VfU0laRV80SywgMCk7CisJaWYgKElTX0VSUihtZW0pKSB7CisJCXByX2VycigiZmFpbGVkIHRv IGNyZWF0ZSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobWVtKTsKKwl9CisK Kwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnN1cHBvcnRlZCwgaWxvZzIoSTkxNV9HVFRfTUFYX1BB R0VfU0laRSkgKyAxKSB7CisJCXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBCSVQoYml0KTsKKwkJ cmVzb3VyY2Vfc2l6ZV90IHBoeXM7CisKKwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9y ZWdpb24obWVtLCBwYWdlX3NpemUsIDApOworCQlpZiAoSVNfRVJSKG9iaikpIHsKKwkJCWVyciA9 IFBUUl9FUlIob2JqKTsKKwkJCWdvdG8gb3V0X2Rlc3Ryb3lfZGV2aWNlOworCQl9CisKKwkJdm1h ID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPnZtLCBOVUxMKTsKKwkJaWYgKElTX0VS Uih2bWEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF9wdXQ7CisJCX0K KworCQllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7CisJCWlmIChlcnIp CisJCQlnb3RvIG91dF9jbG9zZTsKKworCQlwaHlzID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFf YWRkcmVzcyhvYmosIDApOworCQlpZiAoIUlTX0FMSUdORUQocGh5cywgcGFnZV9zaXplKSkgewor CQkJcHJfZXJyKCJtZW1vcnkgcmVnaW9uIG1pc2FsaWduZWQoJXBhKVxuIiwgJnBoeXMpOworCQkJ ZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X2Nsb3NlOworCQl9CisKKwkJaWYgKHZtYS0+cGFn ZV9zaXplcy5ndHQgIT0gcGFnZV9zaXplKSB7CisJCQlwcl9lcnIoInBhZ2Vfc2l6ZXMuZ3R0PSV1 LCBleHBlY3RlZD0ldVxuIiwKKwkJCSAgICAgICB2bWEtPnBhZ2Vfc2l6ZXMuZ3R0LCBwYWdlX3Np emUpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJaTkx NV92bWFfdW5waW4odm1hKTsKKwkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKworCQlpOTE1X2dlbV9v YmplY3RfcHV0KG9iaik7CisJfQorCisJZ290byBvdXRfZGVzdHJveV9kZXZpY2U7CisKK291dF91 bnBpbjoKKwlpOTE1X3ZtYV91bnBpbih2bWEpOworb3V0X2Nsb3NlOgorCWk5MTVfdm1hX2Nsb3Nl KHZtYSk7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKK291dF9kZXN0cm95 X2RldmljZToKKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCWk5MTVf Z2VtX2RyYWluX2ZyZWVkX29iamVjdHMoaTkxNSk7CisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7CisJaW50ZWxfbWVtb3J5X3JlZ2lvbl9kZXN0cm95KG1lbSk7CisKKwlyZXR1 cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGlndF9tb2NrX3BwZ3R0X21pc2FsaWduZWRfZG1hKHZv aWQgKmFyZykKIHsKIAlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBhcmc7CkBAIC0xNjEwLDYg KzE2ODcsNyBAQCBpbnQgaTkxNV9nZW1faHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKHZvaWQpCiB7 CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKIAkJU1VCVEVT VChpZ3RfbW9ja19leGhhdXN0X2RldmljZV9zdXBwb3J0ZWRfcGFnZXMpLAorCQlTVUJURVNUKGln dF9tb2NrX21lbW9yeV9yZWdpb25faHVnZV9wYWdlcyksCiAJCVNVQlRFU1QoaWd0X21vY2tfcHBn dHRfbWlzYWxpZ25lZF9kbWEpLAogCQlTVUJURVNUKGlndF9tb2NrX3BwZ3R0X2h1Z2VfZmlsbCks CiAJCVNVQlRFU1QoaWd0X21vY2tfcHBndHRfNjRLKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmlu ZGV4IDBkYzUwNGZjNmZmYy4uOGVkNGI4YzI0ODRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK QEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlICJpbnRlbF9kZXZpY2VfaW5mby5oIgogI2luY2x1 ZGUgImludGVsX3BjaC5oIgogI2luY2x1ZGUgImludGVsX3J1bnRpbWVfcG0uaCIKKyNpbmNsdWRl ICJpbnRlbF9tZW1vcnlfcmVnaW9uLmgiCiAjaW5jbHVkZSAiaW50ZWxfdW5jb3JlLmgiCiAjaW5j bHVkZSAiaW50ZWxfd2FrZXJlZi5oIgogI2luY2x1ZGUgImludGVsX3dvcGNtLmgiCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi5lNDhkNWMzN2M0ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKQEAgLTAsMCArMSwxNzMgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJpbnRlbF9tZW1vcnlfcmVnaW9u LmgiCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworc3RhdGljIHU2NAoraW50ZWxfbWVtb3J5X3Jl Z2lvbl9mcmVlX3BhZ2VzKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkgICAg ICAgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tzKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2Nr ICpibG9jaywgKm9uOworCXU2NCBzaXplID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShibG9jaywgb24sIGJsb2NrcywgbGluaykgeworCQlzaXplICs9IGk5MTVfYnVkZHlfYmxvY2tf c2l6ZSgmbWVtLT5tbSwgYmxvY2spOworCQlpOTE1X2J1ZGR5X2ZyZWUoJm1lbS0+bW0sIGJsb2Nr KTsKKwl9CisJSU5JVF9MSVNUX0hFQUQoYmxvY2tzKTsKKworCXJldHVybiBzaXplOworfQorCit2 b2lkCitfX2ludGVsX21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICptZW0sCisJCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tzKQor eworCW11dGV4X2xvY2soJm1lbS0+bW1fbG9jayk7CisJaW50ZWxfbWVtb3J5X3JlZ2lvbl9mcmVl X3BhZ2VzKG1lbSwgYmxvY2tzKTsKKwltdXRleF91bmxvY2soJm1lbS0+bW1fbG9jayk7Cit9CisK K3ZvaWQKK19faW50ZWxfbWVtb3J5X3JlZ2lvbl9wdXRfYmxvY2tfYnVkZHkoc3RydWN0IGk5MTVf YnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tzOworCisJSU5J VF9MSVNUX0hFQUQoJmJsb2Nrcyk7CisJbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsK KwlfX2ludGVsX21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5KGJsb2NrLT5wcml2YXRlLCAm YmxvY2tzKTsKK30KKworaW50CitfX2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5 KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkJICAgICAgcmVzb3VyY2Vfc2l6 ZV90IHNpemUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCSAgICAgIHN0cnVj dCBsaXN0X2hlYWQgKmJsb2NrcykKK3sKKwl1bnNpZ25lZCBsb25nIG5fcGFnZXMgPSBzaXplID4+ IGlsb2cyKG1lbS0+bW0uY2h1bmtfc2l6ZSk7CisJdW5zaWduZWQgaW50IG1pbl9vcmRlciA9IDA7 CisKKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIG1lbS0+bW0uY2h1bmtfc2l6ZSkpOwor CUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoYmxvY2tzKSk7CisKKwlpZiAoZmxhZ3MgJiBJOTE1X0FM TE9DX01JTl9QQUdFX1NJWkUpIHsKKwkJbWluX29yZGVyID0gaWxvZzIobWVtLT5taW5fcGFnZV9z aXplKSAtCisJCQkgICAgaWxvZzIobWVtLT5tbS5jaHVua19zaXplKTsKKwl9CisKKwltdXRleF9s b2NrKCZtZW0tPm1tX2xvY2spOworCisJZG8geworCQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2s7CisJCXVuc2lnbmVkIGludCBvcmRlcjsKKworCQlvcmRlciA9IGZscyhuX3BhZ2VzKSAt IDE7CisJCUdFTV9CVUdfT04ob3JkZXIgPiBtZW0tPm1tLm1heF9vcmRlcik7CisJCUdFTV9CVUdf T04ob3JkZXIgPCBtaW5fb3JkZXIpOworCisJCWRvIHsKKwkJCWJsb2NrID0gaTkxNV9idWRkeV9h bGxvYygmbWVtLT5tbSwgb3JkZXIpOworCQkJaWYgKCFJU19FUlIoYmxvY2spKQorCQkJCWJyZWFr OworCisJCQlpZiAob3JkZXItLSA9PSBtaW5fb3JkZXIpCisJCQkJZ290byBlcnJfZnJlZV9ibG9j a3M7CisJCX0gd2hpbGUgKDEpOworCisJCW5fcGFnZXMgLT0gQklUKG9yZGVyKTsKKworCQlibG9j ay0+cHJpdmF0ZSA9IG1lbTsKKwkJbGlzdF9hZGQoJmJsb2NrLT5saW5rLCBibG9ja3MpOworCisJ CWlmICghbl9wYWdlcykKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJbXV0ZXhfdW5sb2Nr KCZtZW0tPm1tX2xvY2spOworCXJldHVybiAwOworCitlcnJfZnJlZV9ibG9ja3M6CisJaW50ZWxf bWVtb3J5X3JlZ2lvbl9mcmVlX3BhZ2VzKG1lbSwgYmxvY2tzKTsKKwltdXRleF91bmxvY2soJm1l bS0+bW1fbG9jayk7CisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RydWN0IGk5MTVfYnVkZHlfYmxv Y2sgKgorX19pbnRlbF9tZW1vcnlfcmVnaW9uX2dldF9ibG9ja19idWRkeShzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkJCSAgICAgIHJlc291cmNlX3NpemVfdCBzaXplKQorewor CXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2Nr czsKKwlpbnQgcmV0OworCisJSU5JVF9MSVNUX0hFQUQoJmJsb2Nrcyk7CisJcmV0ID0gX19pbnRl bF9tZW1vcnlfcmVnaW9uX2dldF9wYWdlc19idWRkeShtZW0sIHNpemUsIDAsICZibG9ja3MpOwor CWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlibG9jayA9IGxpc3RfZmlyc3Rf ZW50cnkoJmJsb2NrcywgdHlwZW9mKCpibG9jayksIGxpbmspOworCWxpc3RfZGVsX2luaXQoJmJs b2NrLT5saW5rKTsKKwlyZXR1cm4gYmxvY2s7Cit9CisKK2ludCBpbnRlbF9tZW1vcnlfcmVnaW9u X2luaXRfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSkKK3sKKwlyZXR1cm4g aTkxNV9idWRkeV9pbml0KCZtZW0tPm1tLCByZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbiksCisJ CQkgICAgICAgUEFHRV9TSVpFKTsKK30KKwordm9pZCBpbnRlbF9tZW1vcnlfcmVnaW9uX3JlbGVh c2VfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSkKK3sKKwlpOTE1X2J1ZGR5 X2ZpbmkoJm1lbS0+bW0pOworfQorCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCitpbnRl bF9tZW1vcnlfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJ CSAgIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJCSAgIHJlc291cmNlX3NpemVfdCBzaXplLAor CQkJICAgcmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3NpemUsCisJCQkgICByZXNvdXJjZV9zaXpl X3QgaW9fc3RhcnQsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMg Km9wcykKK3sKKwlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtOworCWludCBlcnI7CisK KwltZW0gPSBremFsbG9jKHNpemVvZigqbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW0pCisJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbWVtLT5pOTE1ID0gaTkxNTsKKwltZW0tPnJl Z2lvbiA9IChzdHJ1Y3QgcmVzb3VyY2UpREVGSU5FX1JFU19NRU0oc3RhcnQsIHNpemUpOworCW1l bS0+aW9fc3RhcnQgPSBpb19zdGFydDsKKwltZW0tPm1pbl9wYWdlX3NpemUgPSBtaW5fcGFnZV9z aXplOworCW1lbS0+b3BzID0gb3BzOworCisJbXV0ZXhfaW5pdCgmbWVtLT5tbV9sb2NrKTsKKwor CWlmIChvcHMtPmluaXQpIHsKKwkJZXJyID0gb3BzLT5pbml0KG1lbSk7CisJCWlmIChlcnIpIHsK KwkJCWtmcmVlKG1lbSk7CisJCQltZW0gPSBFUlJfUFRSKGVycik7CisJCX0KKwl9CisKKwlyZXR1 cm4gbWVtOworfQorCit2b2lkCitpbnRlbF9tZW1vcnlfcmVnaW9uX2Rlc3Ryb3koc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb24gKm1lbSkKK3sKKwlpZiAobWVtLT5vcHMtPnJlbGVhc2UpCisJCW1l bS0+b3BzLT5yZWxlYXNlKG1lbSk7CisKKwlrZnJlZShtZW0pOworfQorCisjaWYgSVNfRU5BQkxF RChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCisjaW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX21l bW9yeV9yZWdpb24uYyIKKyNpbmNsdWRlICJzZWxmdGVzdHMvbW9ja19yZWdpb24uYyIKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWUxY2UyOThiY2QxCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCkBAIC0wLDAg KzEsNzcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX19JTlRFTF9N RU1PUllfUkVHSU9OX0hfXworI2RlZmluZSBfX0lOVEVMX01FTU9SWV9SRUdJT05fSF9fCisKKyNp bmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgImk5MTVfYnVkZHkuaCIKKworc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGU7CitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdDsKK3N0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uOworc3RydWN0IHNnX3RhYmxlOworCisjZGVmaW5lIEk5MTVf QUxMT0NfTUlOX1BBR0VfU0laRSAgIEJJVCgwKQorCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lv bl9vcHMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKworCWludCAoKmluaXQpKHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICopOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqKTsKKworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKKwkoKmNyZWF0ZV9v YmplY3QpKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICosCisJCQkgcmVzb3VyY2Vfc2l6ZV90 LAorCQkJIHVuc2lnbmVkIGludCk7Cit9OworCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiB7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7CisKKwljb25zdCBzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbl9vcHMgKm9wczsKKworCXN0cnVjdCBpb19tYXBwaW5nIGlvbWFwOworCXN0 cnVjdCByZXNvdXJjZSByZWdpb247CisKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKKwlzdHJ1 Y3QgbXV0ZXggbW1fbG9jazsKKworCXJlc291cmNlX3NpemVfdCBpb19zdGFydDsKKwlyZXNvdXJj ZV9zaXplX3QgbWluX3BhZ2Vfc2l6ZTsKKworCXVuc2lnbmVkIGludCB0eXBlOworCXVuc2lnbmVk IGludCBpbnN0YW5jZTsKKwl1bnNpZ25lZCBpbnQgaWQ7Cit9OworCitpbnQgaW50ZWxfbWVtb3J5 X3JlZ2lvbl9pbml0X2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pOwordm9p ZCBpbnRlbF9tZW1vcnlfcmVnaW9uX3JlbGVhc2VfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9y ZWdpb24gKm1lbSk7CisKK2ludCBfX2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5 KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkJCSAgcmVzb3VyY2Vfc2l6ZV90 IHNpemUsCisJCQkJCSAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hl YWQgKmJsb2Nrcyk7CitzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqCitfX2ludGVsX21lbW9yeV9y ZWdpb25fZ2V0X2Jsb2NrX2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJ CQkJICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7Cit2b2lkIF9faW50ZWxfbWVtb3J5X3JlZ2lv bl9wdXRfcGFnZXNfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKKwkJCQkJ ICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3MpOwordm9pZCBfX2ludGVsX21lbW9yeV9yZWdpb25f cHV0X2Jsb2NrX2J1ZGR5KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jayk7CisKK3N0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK2ludGVsX21lbW9yeV9yZWdpb25fY3JlYXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAor CQkJICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCQkgICByZXNvdXJjZV9zaXplX3QgbWluX3Bh Z2Vfc2l6ZSwKKwkJCSAgIHJlc291cmNlX3NpemVfdCBpb19zdGFydCwKKwkJCSAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uX29wcyAqb3BzKTsKK3ZvaWQKK2ludGVsX21lbW9yeV9y ZWdpb25fZGVzdHJveShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3Nl bGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxm dGVzdHMuaAppbmRleCBiODgwODRmZTMyNjkuLmFhNWEwZTdmNWQ5ZSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCkBAIC0y NiwzICsyNiw0IEBAIHNlbGZ0ZXN0KGd0dCwgaTkxNV9nZW1fZ3R0X21vY2tfc2VsZnRlc3RzKQog c2VsZnRlc3QoaHVnZXBhZ2VzLCBpOTE1X2dlbV9odWdlX3BhZ2VfbW9ja19zZWxmdGVzdHMpCiBz ZWxmdGVzdChjb250ZXh0cywgaTkxNV9nZW1fY29udGV4dF9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0 ZXN0KGJ1ZGR5LCBpOTE1X2J1ZGR5X21vY2tfc2VsZnRlc3RzKQorc2VsZnRlc3QobWVtb3J5X3Jl Z2lvbiwgaW50ZWxfbWVtb3J5X3JlZ2lvbl9tb2NrX3NlbGZ0ZXN0cykKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTRmOWE2MjRiNGUxCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdp b24uYwpAQCAtMCwwICsxLDEyNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMuaD4KKworI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3Qu aCIKKworI2luY2x1ZGUgIm1vY2tfZHJtLmgiCisjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgi CisjaW5jbHVkZSAibW9ja19yZWdpb24uaCIKKworI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9yZWdp b24uaCIKKyNpbmNsdWRlICJnZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5oIgorCitzdGF0aWMg dm9pZCBjbG9zZV9vYmplY3RzKHN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBOVUxMOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosICpvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLCBvYmpl Y3RzLCBzdF9saW5rKSB7CisJCWk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCQlpZiAo aTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkKKwkJCWk5MTVfZ2VtX29iamVj dF91bnBpbl9wYWdlcyhvYmopOworCQkvKiBObyBwb2xsdXRpbmcgdGhlIG1lbW9yeSByZWdpb24g YmV0d2VlbiB0ZXN0cyAqLworCQlfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1 X01NX05PUk1BTCk7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwkJbGlzdF9kZWwoJm9i ai0+c3RfbGluayk7CisJfQorCisJaWYgKGk5MTUpIHsKKwkJY29uZF9yZXNjaGVkKCk7CisKKwkJ bXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwkJaTkxNV9nZW1fZHJhaW5f ZnJlZWRfb2JqZWN0cyhpOTE1KTsKKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CisJfQorfQorCitzdGF0aWMgaW50IGlndF9tb2NrX2ZpbGwodm9pZCAqYXJnKQoreworCXN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0gPSBhcmc7CisJcmVzb3VyY2Vfc2l6ZV90IHRv dGFsID0gcmVzb3VyY2Vfc2l6ZSgmbWVtLT5yZWdpb24pOworCXJlc291cmNlX3NpemVfdCBwYWdl X3NpemU7CisJcmVzb3VyY2Vfc2l6ZV90IHJlbTsKKwl1bnNpZ25lZCBsb25nIG1heF9wYWdlczsK Kwl1bnNpZ25lZCBsb25nIHBhZ2VfbnVtOworCUxJU1RfSEVBRChvYmplY3RzKTsKKwlpbnQgZXJy ID0gMDsKKworCXBhZ2Vfc2l6ZSA9IG1lbS0+bW0uY2h1bmtfc2l6ZTsKKwltYXhfcGFnZXMgPSBk aXY2NF91NjQodG90YWwsIHBhZ2Vfc2l6ZSk7CisJcmVtID0gdG90YWw7CisKKwlmb3JfZWFjaF9w cmltZV9udW1iZXJfZnJvbShwYWdlX251bSwgMSwgbWF4X3BhZ2VzKSB7CisJCXJlc291cmNlX3Np emVfdCBzaXplID0gcGFnZV9udW0gKiBwYWdlX3NpemU7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7CisKKwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9yZWdpb24obWVt LCBzaXplLCAwKTsKKwkJaWYgKElTX0VSUihvYmopKSB7CisJCQllcnIgPSBQVFJfRVJSKG9iaik7 CisJCQlicmVhazsKKwkJfQorCisJCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2Jq KTsKKwkJaWYgKGVycikgeworCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCQkJYnJlYWs7 CisJCX0KKworCQlsaXN0X2FkZCgmb2JqLT5zdF9saW5rLCAmb2JqZWN0cyk7CisJCXJlbSAtPSBz aXplOworCX0KKworCWlmIChlcnIgPT0gLUVOT01FTSkKKwkJZXJyID0gMDsKKwlpZiAoZXJyID09 IC1FTlhJTykgeworCQlpZiAocGFnZV9udW0gKiBwYWdlX3NpemUgPD0gcmVtKSB7CisJCQlwcl9l cnIoImlndF9tb2NrX2ZpbGwgZmFpbGVkLCBzcGFjZSBzdGlsbCBsZWZ0IGluIHJlZ2lvblxuIik7 CisJCQllcnIgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJZXJyID0gMDsKKwkJfQorCX0KKwor CWNsb3NlX29iamVjdHMoJm9iamVjdHMpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGludGVs X21lbW9yeV9yZWdpb25fbW9ja19zZWxmdGVzdHModm9pZCkKK3sKKwlzdGF0aWMgY29uc3Qgc3Ry dWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0geworCQlTVUJURVNUKGlndF9tb2NrX2ZpbGwpLAor CX07CisJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbTsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKKwlpbnQgZXJyOworCisJaTkxNSA9IG1vY2tfZ2VtX2RldmljZSgpOwor CWlmICghaTkxNSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW0gPSBtb2NrX3JlZ2lvbl9jcmVh dGUoaTkxNSwgMCwgU1pfMkcsCisJCQkJIEk5MTVfR1RUX1BBR0VfU0laRV80SywgMCk7CisJaWYg KElTX0VSUihtZW0pKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBtZW1vcnkgcmVnaW9u XG4iKTsKKwkJZXJyID0gUFRSX0VSUihtZW0pOworCQlnb3RvIG91dF91bnJlZjsKKwl9CisKKwlt dXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwllcnIgPSBpOTE1X3N1YnRlc3Rz KHRlc3RzLCBtZW0pOworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisK KwlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKGk5MTUpOworCWludGVsX21lbW9yeV9yZWdp b25fZGVzdHJveShtZW0pOworCitvdXRfdW5yZWY6CisJZHJtX2Rldl9wdXQoJmk5MTUtPmRybSk7 CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L21vY2tfZ2VtX2RldmljZS5jCmluZGV4IDkxZjE1ZmE3MjhjZC4uMzJlMzJiMWNkNTY2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZ2VtX2RldmljZS5jCkBA IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgiCiAjaW5jbHVkZSAi bW9ja19ndHQuaCIKICNpbmNsdWRlICJtb2NrX3VuY29yZS5oIgorI2luY2x1ZGUgIm1vY2tfcmVn aW9uLmgiCiAKICNpbmNsdWRlICJnZW0vc2VsZnRlc3RzL21vY2tfY29udGV4dC5oIgogI2luY2x1 ZGUgImdlbS9zZWxmdGVzdHMvbW9ja19nZW1fb2JqZWN0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uMGU5YTU3NWVkZTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMKQEAgLTAsMCArMSw1OSBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVs IENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1ZGUgImdlbS9pOTE1X2dlbV9yZWdpb24uaCIKKyNp bmNsdWRlICJpbnRlbF9tZW1vcnlfcmVnaW9uLmgiCisKKyNpbmNsdWRlICJtb2NrX3JlZ2lvbi5o IgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIG1vY2tfcmVn aW9uX29ial9vcHMgPSB7CisJLmdldF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNf YnVkZHksCisJLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfYnVkZHksCisJ LnJlbGVhc2UgPSBpOTE1X2dlbV9vYmplY3RfcmVsZWFzZV9tZW1vcnlfcmVnaW9uLAorfTsKKwor c3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKK21vY2tfb2JqZWN0X2NyZWF0ZShz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkgICByZXNvdXJjZV9zaXplX3Qgc2l6 ZSwKKwkJICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gbWVtLT5pOTE1OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisK KwlpZiAoc2l6ZSA+IEJJVChtZW0tPm1tLm1heF9vcmRlcikgKiBtZW0tPm1tLmNodW5rX3NpemUp CisJCXJldHVybiBFUlJfUFRSKC1FMkJJRyk7CisKKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfYWxs b2MoKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm1fZ2Vt X3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgJm9iai0+YmFzZSwgc2l6ZSk7CisJaTkx NV9nZW1fb2JqZWN0X2luaXQob2JqLCAmbW9ja19yZWdpb25fb2JqX29wcyk7CisKKwlvYmotPnJl YWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFUgfCBJOTE1X0dFTV9ET01BSU5fR1RUOwor CisJaTkxNV9nZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NBQ0hFX05P TkUpOworCisJaTkxNV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3JlZ2lvbihvYmosIG1lbSk7CisK KwlyZXR1cm4gb2JqOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdp b25fb3BzIG1vY2tfcmVnaW9uX29wcyA9IHsKKwkuaW5pdCA9IGludGVsX21lbW9yeV9yZWdpb25f aW5pdF9idWRkeSwKKwkucmVsZWFzZSA9IGludGVsX21lbW9yeV9yZWdpb25fcmVsZWFzZV9idWRk eSwKKwkuY3JlYXRlX29iamVjdCA9IG1vY2tfb2JqZWN0X2NyZWF0ZSwKK307CisKK3N0cnVjdCBp bnRlbF9tZW1vcnlfcmVnaW9uICoKK21vY2tfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKKwkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkgICByZXNvdXJj ZV9zaXplX3Qgc2l6ZSwKKwkJICAgcmVzb3VyY2Vfc2l6ZV90IG1pbl9wYWdlX3NpemUsCisJCSAg IHJlc291cmNlX3NpemVfdCBpb19zdGFydCkKK3sKKwlyZXR1cm4gaW50ZWxfbWVtb3J5X3JlZ2lv bl9jcmVhdGUoaTkxNSwgc3RhcnQsIHNpemUsIG1pbl9wYWdlX3NpemUsCisJCQkJCSAgaW9fc3Rh cnQsICZtb2NrX3JlZ2lvbl9vcHMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvbW9ja19yZWdpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjI0NjA4MDg5ZDgzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9tb2NrX3JlZ2lvbi5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbgorICovCisKKyNpZm5kZWYgX19NT0NLX1JFR0lPTl9ICisjZGVmaW5lIF9fTU9DS19SRUdJ T05fSAorCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCittb2NrX3JlZ2lvbl9jcmVhdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCSAgIHJlc291cmNlX3NpemVfdCBzdGFy dCwKKwkJICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCSAgIHJlc291cmNlX3NpemVfdCBtaW5f cGFnZV9zaXplLAorCQkgICByZXNvdXJjZV9zaXplX3QgaW9fc3RhcnQpOworCisjZW5kaWYgLyog IV9fTU9DS19SRUdJT05fSCAqLwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZng=