From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kenny Ho Subject: [PATCH RFC v4 07/16] drm, cgroup: Add total GEM buffer allocation limit Date: Thu, 29 Aug 2019 02:05:24 -0400 Message-ID: <20190829060533.32315-8-Kenny.Ho@amd.com> References: <20190829060533.32315-1-Kenny.Ho@amd.com> Mime-Version: 1.0 Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190829060533.32315-1-Kenny.Ho@amd.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Content-Type: text/plain; charset="us-ascii" To: y2kenny@gmail.com, cgroups@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, tj@kernel.org, alexander.deucher@amd.com, christian.koenig@amd.com, felix.kuehling@amd.com, joseph.greathouse@amd.com, jsparks@cray.com, lkaplan@cray.com, daniel@ffwll.ch Cc: Kenny Ho VGhlIGRybSByZXNvdXJjZSBiZWluZyBsaW1pdGVkIGhlcmUgaXMgdGhlIEdFTSBidWZmZXIgb2Jq ZWN0cy4gIFVzZXIKYXBwbGljYXRpb25zIGFsbG9jYXRlIGFuZCBmcmVlIHRoZXNlIGJ1ZmZlcnMu ICBJbiBhZGRpdGlvbiwgYSBwcm9jZXNzCmNhbiBhbGxvY2F0ZSBhIGJ1ZmZlciBhbmQgc2hhcmUg aXQgd2l0aCBhbm90aGVyIHByb2Nlc3MuICBUaGUgY29uc3VtZXIKb2YgYSBzaGFyZWQgYnVmZmVy IGNhbiBhbHNvIG91dGxpdmUgdGhlIGFsbG9jYXRvciBvZiB0aGUgYnVmZmVyLgoKRm9yIHRoZSBw dXJwb3NlIG9mIGNncm91cCBhY2NvdW50aW5nIGFuZCBsaW1pdGluZywgb3duZXJzaGlwIG9mIHRo ZQpidWZmZXIgaXMgZGVlbWVkIHRvIGJlIHRoZSBjZ3JvdXAgZm9yIHdoaWNoIHRoZSBhbGxvY2F0 aW5nIHByb2Nlc3MKYmVsb25ncyB0by4gIFRoZXJlIGlzIG9uZSBjZ3JvdXAgbGltaXQgcGVyIGRy bSBkZXZpY2UuCgpUaGUgbGltaXRpbmcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZCB0byB0aGUgcHJl dmlvdXMgc3RhdHMgY29sbGVjdGlvbgpmdW5jdGlvbi4gIFRoZSBkcm1fZ2VtX3ByaXZhdGVfb2Jq ZWN0X2luaXQgaXMgbW9kaWZpZWQgdG8gaGF2ZSBhIHJldHVybgp2YWx1ZSB0byBhbGxvdyBmYWls dXJlIGR1ZSB0byBjZ3JvdXAgbGltaXQuCgpUaGUgdHJ5X2NoZyBmdW5jdGlvbiBvbmx5IGZhaWxz IGlmIHRoZSBEUk0gY2dyb3VwIHByb3BlcnRpZXMgaGFzCmxpbWl0X2VuZm9yY2VkIHNldCB0byB0 cnVlIGZvciB0aGUgRFJNIGRldmljZS4gIFRoaXMgaXMgdG8gYWxsb3cgdGhlIERSTQpjZ3JvdXAg Y29udHJvbGxlciB0byBjb2xsZWN0IHVzYWdlIHN0YXRzIHdpdGhvdXQgZW5mb3JjaW5nIHRoZSBs aW1pdHMuCgpkcm0uYnVmZmVyLmRlZmF1bHQKICAgICAgICBBIHJlYWQtb25seSBmbGF0LWtleWVk IGZpbGUgd2hpY2ggZXhpc3RzIG9uIHRoZSByb290IGNncm91cC4KICAgICAgICBFYWNoIGVudHJ5 IGlzIGtleWVkIGJ5IHRoZSBkcm0gZGV2aWNlJ3MgbWFqb3I6bWlub3IuCgogICAgICAgIERlZmF1 bHQgbGltaXRzIG9uIHRoZSB0b3RhbCBHRU0gYnVmZmVyIGFsbG9jYXRpb24gaW4gYnl0ZXMuCgpk cm0uYnVmZmVyLm1heAogICAgICAgIEEgcmVhZC13cml0ZSBmbGF0LWtleWVkIGZpbGUgd2hpY2gg ZXhpc3RzIG9uIGFsbCBjZ3JvdXBzLiAgRWFjaAogICAgICAgIGVudHJ5IGlzIGtleWVkIGJ5IHRo ZSBkcm0gZGV2aWNlJ3MgbWFqb3I6bWlub3IuCgogICAgICAgIFBlciBkZXZpY2UgbGltaXRzIG9u IHRoZSB0b3RhbCBHRU0gYnVmZmVyIGFsbG9jYXRpb24gaW4gYnl0ZS4KICAgICAgICBUaGlzIGlz IGEgaGFyZCBsaW1pdC4gIEF0dGVtcHRzIGluIGFsbG9jYXRpbmcgYmV5b25kIHRoZSBjZ3JvdXAK ICAgICAgICBsaW1pdCB3aWxsIHJlc3VsdCBpbiBFTk9NRU0uICBTaG9ydGhhbmQgdW5kZXJzdG9v ZCBieSBtZW1wYXJzZQogICAgICAgIChzdWNoIGFzIGssIG0sIGcpIGNhbiBiZSB1c2VkLgoKICAg ICAgICBTZXQgYWxsb2NhdGlvbiBsaW1pdCBmb3IgL2Rldi9kcmkvY2FyZDEgdG8gMUdCCiAgICAg ICAgZWNobyAiMjI2OjEgMWciID4gZHJtLmJ1ZmZlci50b3RhbC5tYXgKCiAgICAgICAgU2V0IGFs bG9jYXRpb24gbGltaXQgZm9yIC9kZXYvZHJpL2NhcmQwIHRvIDUxMk1CCiAgICAgICAgZWNobyAi MjI2OjAgNTEybSIgPiBkcm0uYnVmZmVyLnRvdGFsLm1heAoKQ2hhbmdlLUlkOiBJOTZlMGI3YWRk NGQzMzFlZDhiYjI2N2IzYzkyNDNkMzYwYzZlOTkwMwpTaWduZWQtb2ZmLWJ5OiBLZW5ueSBIbyA8 S2VubnkuSG9AYW1kLmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12 Mi5yc3QgICAgfCAgMjEgKysKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYu YyAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMg fCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgICAgICAgICAgICAgICAgICB8ICAx MSArLQogaW5jbHVkZS9kcm0vZHJtX2Nncm91cC5oICAgICAgICAgICAgICAgICAgIHwgICA3ICst CiBpbmNsdWRlL2RybS9kcm1fZ2VtLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGlu Y2x1ZGUvbGludXgvY2dyb3VwX2RybS5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBrZXJuZWwv Y2dyb3VwL2RybS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAyMjEgKysrKysrKysrKysrKysr KysrKystCiA4IGZpbGVzIGNoYW5nZWQsIDI2MCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3Qg Yi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5yc3QKaW5kZXggNGRjNzIzMzlh OWI2Li5lOGZhYzI2ODQxNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUv Y2dyb3VwLXYyLnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Nncm91cC12Mi5y c3QKQEAgLTE5MTksNiArMTkxOSwyNyBAQCBEUk0gSW50ZXJmYWNlIEZpbGVzCiAKIAlUb3RhbCBu dW1iZXIgb2YgR0VNIGJ1ZmZlciBhbGxvY2F0ZWQuCiAKKyAgZHJtLmJ1ZmZlci5kZWZhdWx0CisJ QSByZWFkLW9ubHkgZmxhdC1rZXllZCBmaWxlIHdoaWNoIGV4aXN0cyBvbiB0aGUgcm9vdCBjZ3Jv dXAuCisJRWFjaCBlbnRyeSBpcyBrZXllZCBieSB0aGUgZHJtIGRldmljZSdzIG1ham9yOm1pbm9y LgorCisJRGVmYXVsdCBsaW1pdHMgb24gdGhlIHRvdGFsIEdFTSBidWZmZXIgYWxsb2NhdGlvbiBp biBieXRlcy4KKworICBkcm0uYnVmZmVyLm1heAorCUEgcmVhZC13cml0ZSBmbGF0LWtleWVkIGZp bGUgd2hpY2ggZXhpc3RzIG9uIGFsbCBjZ3JvdXBzLiAgRWFjaAorCWVudHJ5IGlzIGtleWVkIGJ5 IHRoZSBkcm0gZGV2aWNlJ3MgbWFqb3I6bWlub3IuCisKKwlQZXIgZGV2aWNlIGxpbWl0cyBvbiB0 aGUgdG90YWwgR0VNIGJ1ZmZlciBhbGxvY2F0aW9uIGluIGJ5dGUuCisJVGhpcyBpcyBhIGhhcmQg bGltaXQuICBBdHRlbXB0cyBpbiBhbGxvY2F0aW5nIGJleW9uZCB0aGUgY2dyb3VwCisJbGltaXQg d2lsbCByZXN1bHQgaW4gRU5PTUVNLiAgU2hvcnRoYW5kIHVuZGVyc3Rvb2QgYnkgbWVtcGFyc2UK Kwkoc3VjaCBhcyBrLCBtLCBnKSBjYW4gYmUgdXNlZC4KKworCVNldCBhbGxvY2F0aW9uIGxpbWl0 IGZvciAvZGV2L2RyaS9jYXJkMSB0byAxR0IKKwllY2hvICIyMjY6MSAxZyIgPiBkcm0uYnVmZmVy LnRvdGFsLm1heAorCisJU2V0IGFsbG9jYXRpb24gbGltaXQgZm9yIC9kZXYvZHJpL2NhcmQwIHRv IDUxMk1CCisJZWNobyAiMjI2OjAgNTEybSIgPiBkcm0uYnVmZmVyLnRvdGFsLm1heAorCiBHRU0g QnVmZmVyIE93bmVyc2hpcAogfn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2Rydi5jCmluZGV4IGMwYmJkM2FhMDU1OC4uMTYzYTRmYmYwNjExIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCkBAIC0xMzk1LDYgKzEzOTUs MTIgQEAgYW1kZ3B1X2dldF9jcnRjX3NjYW5vdXRfcG9zaXRpb24oc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdW5zaWduZWQgaW50IHBpcGUsCiAJCQkJCQkgIHN0aW1lLCBldGltZSwgbW9kZSk7CiB9 CiAKK3N0YXRpYyB2b2lkIGFtZGdwdV9kcm1jZ19jdXN0b21faW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCXN0cnVjdCBkcm1jZ19wcm9wcyAqcHJvcHMpCit7CisJcHJvcHMtPmxpbWl0X2Vu Zm9yY2VkID0gdHJ1ZTsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGttc19kcml2ZXIg PSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9CiAJICAgIERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX0FU T01JQyB8CkBAIC0xNDMxLDYgKzE0MzcsOCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIga21z X2RyaXZlciA9IHsKIAkuZ2VtX3ByaW1lX3Z1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVubWFw LAogCS5nZW1fcHJpbWVfbW1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfbW1hcCwKIAorCS5kcm1jZ19j dXN0b21faW5pdCA9IGFtZGdwdV9kcm1jZ19jdXN0b21faW5pdCwKKwogCS5uYW1lID0gRFJJVkVS X05BTUUsCiAJLmRlc2MgPSBEUklWRVJfREVTQywKIAkuZGF0ZSA9IERSSVZFUl9EQVRFLApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCmluZGV4IDk4OWI3YjU1Y2Iy ZS4uYjFiZDY2YmUzZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfb2JqZWN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29i amVjdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRl IDxkcm0vYW1kZ3B1X2RybS5oPgogI2luY2x1ZGUgPGRybS9kcm1fY2FjaGUuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2Nncm91cC5oPgogI2luY2x1ZGUgImFtZGdwdS5oIgogI2luY2x1ZGUgImFtZGdw dV90cmFjZS5oIgogI2luY2x1ZGUgImFtZGdwdV9hbWRrZmQuaCIKQEAgLTQ1NCw3ICs0NTUsMTAg QEAgc3RhdGljIGludCBhbWRncHVfYm9fZG9fY3JlYXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LAogCWJvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFtZGdwdV9ibyksIEdGUF9LRVJORUwp OwogCWlmIChibyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkcm1fZ2VtX3ByaXZhdGVf b2JqZWN0X2luaXQoYWRldi0+ZGRldiwgJmJvLT5nZW1fYmFzZSwgc2l6ZSk7CisJaWYgKCFkcm1f Z2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoYWRldi0+ZGRldiwgJmJvLT5nZW1fYmFzZSwgc2l6ZSkp IHsKKwkJa2ZyZWUoYm8pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJSU5JVF9MSVNUX0hFQUQo JmJvLT5zaGFkb3dfbGlzdCk7CiAJYm8tPnZtX2JvID0gTlVMTDsKIAliby0+cHJlZmVycmVkX2Rv bWFpbnMgPSBicC0+cHJlZmVycmVkX2RvbWFpbiA/IGJwLT5wcmVmZXJyZWRfZG9tYWluIDoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2dlbS5jCmluZGV4IDUxN2I3MWE2ZjRkNC4uNzg4N2YxNTNhYjgzIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKQEAg LTE0NSwxMSArMTQ1LDE3IEBAIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfaW5pdCk7CiAg KiBubyBHRU0gcHJvdmlkZWQgYmFja2luZyBzdG9yZS4gSW5zdGVhZCB0aGUgY2FsbGVyIGlzIHJl c3BvbnNpYmxlIGZvcgogICogYmFja2luZyB0aGUgb2JqZWN0IGFuZCBoYW5kbGluZyBpdC4KICAq Lwotdm9pZCBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKK2Jvb2wgZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJCQkJIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzaXplX3Qgc2l6ZSkKIHsKIAlC VUdfT04oKHNpemUgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApOwogCisJb2JqLT5kcm1jZyA9IGRy bWNnX2dldChjdXJyZW50KTsKKwlpZiAoIWRybWNnX3RyeV9jaGdfYm9fYWxsb2Mob2JqLT5kcm1j ZywgZGV2LCBzaXplKSkgeworCQlkcm1jZ19wdXQob2JqLT5kcm1jZyk7CisJCW9iai0+ZHJtY2cg PSBOVUxMOworCQlyZXR1cm4gZmFsc2U7CisJfQogCW9iai0+ZGV2ID0gZGV2OwogCW9iai0+Zmls cCA9IE5VTEw7CiAKQEAgLTE2Miw4ICsxNjgsNyBAQCB2b2lkIGRybV9nZW1fcHJpdmF0ZV9vYmpl Y3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJZHJtX3ZtYV9ub2RlX3Jlc2V0KCZv YmotPnZtYV9ub2RlKTsKIAotCW9iai0+ZHJtY2cgPSBkcm1jZ19nZXQoY3VycmVudCk7Ci0JZHJt Y2dfY2hnX2JvX2FsbG9jKG9iai0+ZHJtY2csIGRldiwgc2l6ZSk7CisJcmV0dXJuIHRydWU7CiB9 CiBFWFBPUlRfU1lNQk9MKGRybV9nZW1fcHJpdmF0ZV9vYmplY3RfaW5pdCk7CiAKZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL2RybV9jZ3JvdXAuaCBiL2luY2x1ZGUvZHJtL2RybV9jZ3JvdXAuaApp bmRleCAxZmEzN2QxYWQ0NGMuLjQ5YzVkMzVmZjZlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0v ZHJtX2Nncm91cC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jZ3JvdXAuaApAQCAtMTEsMTMgKzEx LDE2IEBACiAgKiBvZiBzdG9yaW5nIHBlciBkZXZpY2UgZGVmYXVsdHMKICAqLwogc3RydWN0IGRy bWNnX3Byb3BzIHsKKwlib29sCQkJbGltaXRfZW5mb3JjZWQ7CisKKwlzNjQJCQlib19saW1pdHNf dG90YWxfYWxsb2NhdGVkX2RlZmF1bHQ7CiB9OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9EUk0K IAogdm9pZCBkcm1jZ19kZXZpY2VfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXZpY2UpOwog dm9pZCBkcm1jZ19kZXZpY2VfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2aWNlKTsK LXZvaWQgZHJtY2dfY2hnX2JvX2FsbG9jKHN0cnVjdCBkcm1jZyAqZHJtY2csIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCitib29sIGRybWNnX3RyeV9jaGdfYm9fYWxsb2Moc3RydWN0IGRybWNnICpk cm1jZywgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJc2l6ZV90IHNpemUpOwogdm9pZCBkcm1j Z191bmNoZ19ib19hbGxvYyhzdHJ1Y3QgZHJtY2cgKmRybWNnLCBzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCQlzaXplX3Qgc2l6ZSk7CkBAIC0zMCw3ICszMyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBkcm1jZ19kZXZpY2VfZWFybHlfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2aWNlKQogewog fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJtY2dfY2hnX2JvX2FsbG9jKHN0cnVjdCBkcm1jZyAq ZHJtY2csCitzdGF0aWMgaW5saW5lIHZvaWQgZHJtY2dfdHJ5X2NoZ19ib19hbGxvYyhzdHJ1Y3Qg ZHJtY2cgKmRybWNnLAogCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAlzaXplX3Qgc2l6ZSkKIHsK IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW0uaCBiL2luY2x1ZGUvZHJtL2RybV9n ZW0uaAppbmRleCA2MDQ3OTY4YmRkMTcuLjJiZjBjMDk2MmRkZiAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX2dlbS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9nZW0uaApAQCAtMzM0LDcgKzMz NCw3IEBAIHZvaWQgZHJtX2dlbV9vYmplY3RfcmVsZWFzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaik7CiB2b2lkIGRybV9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpOwogaW50 IGRybV9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIGRybV9nZW1fcHJpdmF0ZV9v YmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorYm9vbCBkcm1fZ2VtX3ByaXZhdGVf b2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHNpemVfdCBzaXplKTsKIHZvaWQgZHJtX2dlbV92bV9vcGVuKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgZHJtX2dlbV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9kcm0uaCBi L2luY2x1ZGUvbGludXgvY2dyb3VwX2RybS5oCmluZGV4IDk3MmY3YWE5NzViNS4uZWI1NGU1NmYy MGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9kcm0uaAorKysgYi9pbmNsdWRl L2xpbnV4L2Nncm91cF9kcm0uaApAQCAtMjYsNiArMjYsNyBAQCBlbnVtIGRybWNnX3Jlc190eXBl IHsKIHN0cnVjdCBkcm1jZ19kZXZpY2VfcmVzb3VyY2UgewogCS8qIGZvciBwZXIgZGV2aWNlIHN0 YXRzICovCiAJczY0CQkJYm9fc3RhdHNfdG90YWxfYWxsb2NhdGVkOworCXM2NAkJCWJvX2xpbWl0 c190b3RhbF9hbGxvY2F0ZWQ7CiAKIAlzNjQJCQlib19zdGF0c19wZWFrX2FsbG9jYXRlZDsKIApk aWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC9kcm0uYyBiL2tlcm5lbC9jZ3JvdXAvZHJtLmMKaW5k ZXggODVlNDZlY2U0YTgyLi43MTYxZmE0MGUxNTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAv ZHJtLmMKKysrIGIva2VybmVsL2Nncm91cC9kcm0uYwpAQCAtMjcsNiArMjcsOCBAQCBzdGF0aWMg REVGSU5FX01VVEVYKGRybWNnX211dGV4KTsKIAogZW51bSBkcm1jZ19maWxlX3R5cGUgewogCURS TUNHX0ZUWVBFX1NUQVRTLAorCURSTUNHX0ZUWVBFX0xJTUlULAorCURSTUNHX0ZUWVBFX0RFRkFV TFQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGRybWNnICpyb290X2RybWNnIF9fcmVhZF9tb3N0bHk7 CkBAIC03MCw2ICs3Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGluaXRfZHJtY2dfc2luZ2xlKHN0 cnVjdCBkcm1jZyAqZHJtY2csIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJZHJtY2ctPmRldl9y ZXNvdXJjZXNbbWlub3JdID0gZGRyOwogCiAJLyogc2V0IGRlZmF1bHRzIGhlcmUgKi8KKwlkZHIt PmJvX2xpbWl0c190b3RhbF9hbGxvY2F0ZWQgPQorCQlkZXYtPmRybWNnX3Byb3BzLmJvX2xpbWl0 c190b3RhbF9hbGxvY2F0ZWRfZGVmYXVsdDsKIAogCW11dGV4X3VubG9jaygmZGV2LT5kcm1jZ19t dXRleCk7CiAJcmV0dXJuIDA7CkBAIC0xNDEsNiArMTQ1LDM4IEBAIHN0YXRpYyB2b2lkIGRybWNn X3ByaW50X3N0YXRzKHN0cnVjdCBkcm1jZ19kZXZpY2VfcmVzb3VyY2UgKmRkciwKIAl9CiB9CiAK K3N0YXRpYyB2b2lkIGRybWNnX3ByaW50X2xpbWl0cyhzdHJ1Y3QgZHJtY2dfZGV2aWNlX3Jlc291 cmNlICpkZHIsCisJCXN0cnVjdCBzZXFfZmlsZSAqc2YsIGVudW0gZHJtY2dfcmVzX3R5cGUgdHlw ZSkKK3sKKwlpZiAoZGRyID09IE5VTEwpIHsKKwkJc2VxX3B1dHMoc2YsICJcbiIpOworCQlyZXR1 cm47CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBEUk1DR19UWVBFX0JPX1RPVEFMOgor CQlzZXFfcHJpbnRmKHNmLCAiJWxsZFxuIiwgZGRyLT5ib19saW1pdHNfdG90YWxfYWxsb2NhdGVk KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2VxX3B1dHMoc2YsICJcbiIpOworCQlicmVhazsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIGRybWNnX3ByaW50X2RlZmF1bHQoc3RydWN0IGRybWNnX3By b3BzICpwcm9wcywKKwkJc3RydWN0IHNlcV9maWxlICpzZiwgZW51bSBkcm1jZ19yZXNfdHlwZSB0 eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRFJNQ0dfVFlQRV9CT19UT1RBTDoKKwkJ c2VxX3ByaW50ZihzZiwgIiVsbGRcbiIsCisJCQlwcm9wcy0+Ym9fbGltaXRzX3RvdGFsX2FsbG9j YXRlZF9kZWZhdWx0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2VxX3B1dHMoc2YsICJcbiIp OworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZHJtY2dfc2VxX3Nob3dfZm4oaW50IGlk LCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRybV9taW5vciAqbWlub3IgPSBw dHI7CkBAIC0xNjMsNiArMTk5LDEyIEBAIHN0YXRpYyBpbnQgZHJtY2dfc2VxX3Nob3dfZm4oaW50 IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCiAJY2FzZSBEUk1DR19GVFlQRV9TVEFUUzoKIAkJ ZHJtY2dfcHJpbnRfc3RhdHMoZGRyLCBzZiwgdHlwZSk7CiAJCWJyZWFrOworCWNhc2UgRFJNQ0df RlRZUEVfTElNSVQ6CisJCWRybWNnX3ByaW50X2xpbWl0cyhkZHIsIHNmLCB0eXBlKTsKKwkJYnJl YWs7CisJY2FzZSBEUk1DR19GVFlQRV9ERUZBVUxUOgorCQlkcm1jZ19wcmludF9kZWZhdWx0KCZt aW5vci0+ZGV2LT5kcm1jZ19wcm9wcywgc2YsIHR5cGUpOworCQlicmVhazsKIAlkZWZhdWx0Ogog CQlzZXFfcHV0cyhzZiwgIlxuIik7CiAJCWJyZWFrOwpAQCAtMTc2LDYgKzIxOCwxMjQgQEAgaW50 IGRybWNnX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpCiAJcmV0dXJuIGRy bV9taW5vcl9mb3JfZWFjaCgmZHJtY2dfc2VxX3Nob3dfZm4sIHNmKTsKIH0KIAorc3RhdGljIHZv aWQgZHJtY2dfcHJfY2Z0X2Vycihjb25zdCBzdHJ1Y3QgZHJtY2cgKmRybWNnLAorCQlpbnQgcmMs IGNvbnN0IGNoYXIgKmNmdF9uYW1lLCBpbnQgbWlub3IpCit7CisJcHJfZXJyKCJkcm1jZzogZXJy b3IgcGFyc2luZyAlcywgbWlub3IgJWQsIHJjICVkICIsCisJCQljZnRfbmFtZSwgbWlub3IsIHJj KTsKKwlwcl9jb250X2Nncm91cF9uYW1lKGRybWNnLT5jc3MuY2dyb3VwKTsKKwlwcl9jb250KCJc biIpOworfQorCitzdGF0aWMgaW50IGRybWNnX3Byb2Nlc3NfbGltaXRfczY0X3ZhbChjaGFyICpz dmFsLCBib29sIGlzX21lbSwKKwkJCXM2NCBkZWZfdmFsLCBzNjQgbWF4X3ZhbCwgczY0ICpyZXRf dmFsKQoreworCWludCByYyA9IHN0cmNtcCgibWF4Iiwgc3ZhbCk7CisKKworCWlmICghcmMpCisJ CSpyZXRfdmFsID0gbWF4X3ZhbDsKKwllbHNlIHsKKwkJcmMgPSBzdHJjbXAoImRlZmF1bHQiLCBz dmFsKTsKKworCQlpZiAoIXJjKQorCQkJKnJldF92YWwgPSBkZWZfdmFsOworCX0KKworCWlmIChy YykgeworCQlpZiAoaXNfbWVtKSB7CisJCQkqcmV0X3ZhbCA9IG1lbXBhcnNlKHN2YWwsIE5VTEwp OworCQkJcmMgPSAwOworCQl9IGVsc2UgeworCQkJcmMgPSBrc3RydG9sbChzdmFsLCAwLCByZXRf dmFsKTsKKwkJfQorCX0KKworCWlmICgqcmV0X3ZhbCA+IG1heF92YWwpCisJCXJjID0gLUVJTlZB TDsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHJtY2dfdmFsdWVfYXBwbHkoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgczY0ICpkc3QsIHM2NCB2YWwpCit7CisJbXV0ZXhfbG9jaygm ZGV2LT5kcm1jZ19tdXRleCk7CisJKmRzdCA9IHZhbDsKKwltdXRleF91bmxvY2soJmRldi0+ZHJt Y2dfbXV0ZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBkcm1jZ19saW1pdF93cml0ZShzdHJ1Y3Qg a2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZiwKKwkJc2l6ZV90IG5ieXRlcywgbG9mZl90 IG9mZikKK3sKKwlzdHJ1Y3QgZHJtY2cgKmRybWNnID0gY3NzX3RvX2RybWNnKG9mX2NzcyhvZikp OworCXN0cnVjdCBkcm1jZyAqcGFyZW50ID0gZHJtY2dfcGFyZW50KGRybWNnKTsKKwllbnVtIGRy bWNnX3Jlc190eXBlIHR5cGUgPQorCQlEUk1DR19DVEZfUFJJVjJSRVNUWVBFKG9mX2NmdChvZikt PnByaXZhdGUpOworCWNoYXIgKmNmdF9uYW1lID0gb2ZfY2Z0KG9mKS0+bmFtZTsKKwljaGFyICps aW1pdHMgPSBzdHJzdHJpcChidWYpOworCXN0cnVjdCBkcm1jZ19kZXZpY2VfcmVzb3VyY2UgKmRk cjsKKwlzdHJ1Y3QgZHJtY2dfcHJvcHMgKnByb3BzOworCXN0cnVjdCBkcm1fbWlub3IgKmRtOwor CWNoYXIgKmxpbmU7CisJY2hhciBzYXR0clsyNTZdOworCXM2NCB2YWw7CisJczY0IHBfbWF4Owor CWludCByYzsKKwlpbnQgbWlub3I7CisKKwl3aGlsZSAobGltaXRzICE9IE5VTEwpIHsKKwkJbGlu ZSA9ICBzdHJzZXAoJmxpbWl0cywgIlxuIik7CisKKwkJaWYgKHNzY2FuZihsaW5lLAorCQkJX19z dHJpbmdpZnkoRFJNX01BSk9SKSI6JXUgJTI1NVteXHRcbl0iLAorCQkJCQkJCSZtaW5vciwgc2F0 dHIpICE9IDIpIHsKKwkJCXByX2VycigiZHJtY2c6IGVycm9yIHBhcnNpbmcgJXMgIiwgY2Z0X25h bWUpOworCQkJcHJfY29udF9jZ3JvdXBfbmFtZShkcm1jZy0+Y3NzLmNncm91cCk7CisJCQlwcl9j b250KCJcbiIpOworCisJCQljb250aW51ZTsKKwkJfQorCisJCWRtID0gZHJtX21pbm9yX2FjcXVp cmUobWlub3IpOworCQlpZiAoSVNfRVJSKGRtKSkgeworCQkJcHJfZXJyKCJkcm1jZzogaW52YWxp ZCBtaW5vciAlZCBmb3IgJXMgIiwKKwkJCQkJbWlub3IsIGNmdF9uYW1lKTsKKwkJCXByX2NvbnRf Y2dyb3VwX25hbWUoZHJtY2ctPmNzcy5jZ3JvdXApOworCQkJcHJfY29udCgiXG4iKTsKKworCQkJ Y29udGludWU7CisJCX0KKworCQlkZHIgPSBkcm1jZy0+ZGV2X3Jlc291cmNlc1ttaW5vcl07CisJ CXByb3BzID0gJmRtLT5kZXYtPmRybWNnX3Byb3BzOworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2Fz ZSBEUk1DR19UWVBFX0JPX1RPVEFMOgorCQkJcF9tYXggPSBwYXJlbnQgPT0gTlVMTCA/IFM2NF9N QVggOgorCQkJCXBhcmVudC0+ZGV2X3Jlc291cmNlc1ttaW5vcl0tPgorCQkJCWJvX2xpbWl0c190 b3RhbF9hbGxvY2F0ZWQ7CisKKwkJCXJjID0gZHJtY2dfcHJvY2Vzc19saW1pdF9zNjRfdmFsKHNh dHRyLCB0cnVlLAorCQkJCXByb3BzLT5ib19saW1pdHNfdG90YWxfYWxsb2NhdGVkX2RlZmF1bHQs CisJCQkJcF9tYXgsCisJCQkJJnZhbCk7CisKKwkJCWlmIChyYyB8fCB2YWwgPCAwKSB7CisJCQkJ ZHJtY2dfcHJfY2Z0X2Vycihkcm1jZywgcmMsIGNmdF9uYW1lLCBtaW5vcik7CisJCQkJYnJlYWs7 CisJCQl9CisKKwkJCWRybWNnX3ZhbHVlX2FwcGx5KGRtLT5kZXYsCisJCQkJCSZkZHItPmJvX2xp bWl0c190b3RhbF9hbGxvY2F0ZWQsIHZhbCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJy ZWFrOworCQl9CisJCWRybV9kZXZfcHV0KGRtLT5kZXYpOyAvKiByZWxlYXNlIGZyb20gZHJtX21p bm9yX2FjcXVpcmUgKi8KKwl9CisKKwlyZXR1cm4gbmJ5dGVzOworfQorCiBzdHJ1Y3QgY2Z0eXBl IGZpbGVzW10gPSB7CiAJewogCQkubmFtZSA9ICJidWZmZXIudG90YWwuc3RhdHMiLApAQCAtMTgz LDYgKzM0MywyMCBAQCBzdHJ1Y3QgY2Z0eXBlIGZpbGVzW10gPSB7CiAJCS5wcml2YXRlID0gRFJN Q0dfQ1RGX1BSSVYoRFJNQ0dfVFlQRV9CT19UT1RBTCwKIAkJCQkJCURSTUNHX0ZUWVBFX1NUQVRT KSwKIAl9LAorCXsKKwkJLm5hbWUgPSAiYnVmZmVyLnRvdGFsLmRlZmF1bHQiLAorCQkuc2VxX3No b3cgPSBkcm1jZ19zZXFfc2hvdywKKwkJLmZsYWdzID0gQ0ZUWVBFX09OTFlfT05fUk9PVCwKKwkJ LnByaXZhdGUgPSBEUk1DR19DVEZfUFJJVihEUk1DR19UWVBFX0JPX1RPVEFMLAorCQkJCQkJRFJN Q0dfRlRZUEVfREVGQVVMVCksCisJfSwKKwl7CisJCS5uYW1lID0gImJ1ZmZlci50b3RhbC5tYXgi LAorCQkud3JpdGUgPSBkcm1jZ19saW1pdF93cml0ZSwKKwkJLnNlcV9zaG93ID0gZHJtY2dfc2Vx X3Nob3csCisJCS5wcml2YXRlID0gRFJNQ0dfQ1RGX1BSSVYoRFJNQ0dfVFlQRV9CT19UT1RBTCwK KwkJCQkJCURSTUNHX0ZUWVBFX0xJTUlUKSwKKwl9LAogCXsKIAkJLm5hbWUgPSAiYnVmZmVyLnBl YWsuc3RhdHMiLAogCQkuc2VxX3Nob3cgPSBkcm1jZ19zZXFfc2hvdywKQEAgLTI1MCwxMiArNDI0 LDE2IEBAIEVYUE9SVF9TWU1CT0woZHJtY2dfZGV2aWNlX3VwZGF0ZSk7CiAgKi8KIHZvaWQgZHJt Y2dfZGV2aWNlX2Vhcmx5X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlkZXYtPmRy bWNnX3Byb3BzLmxpbWl0X2VuZm9yY2VkID0gZmFsc2U7CisKKwlkZXYtPmRybWNnX3Byb3BzLmJv X2xpbWl0c190b3RhbF9hbGxvY2F0ZWRfZGVmYXVsdCA9IFM2NF9NQVg7CisKIAlkcm1jZ191cGRh dGVfY2dfdHJlZShkZXYpOwogfQogRVhQT1JUX1NZTUJPTChkcm1jZ19kZXZpY2VfZWFybHlfaW5p dCk7CiAKIC8qKgotICogZHJtY2dfY2hnX2JvX2FsbG9jIC0gY2hhcmdlIEdFTSBidWZmZXIgdXNh Z2UgZm9yIGEgZGV2aWNlIGFuZCBjZ3JvdXAKKyAqIGRybWNnX3RyeV9jaGdfYm9fYWxsb2MgLSBj aGFyZ2UgR0VNIGJ1ZmZlciB1c2FnZSBmb3IgYSBkZXZpY2UgYW5kIGNncm91cAogICogQGRybWNn OiB0aGUgRFJNIGNncm91cCB0byBiZSBjaGFyZ2VkIHRvCiAgKiBAZGV2OiB0aGUgZGV2aWNlIHRo ZSB1c2FnZSBzaG91bGQgYmUgY2hhcmdlZCB0bwogICogQHNpemU6IHNpemUgb2YgdGhlIEdFTSBi dWZmZXIgdG8gYmUgYWNjb3VudGVkIGZvcgpAQCAtMjY0LDI5ICs0NDIsNTIgQEAgRVhQT1JUX1NZ TUJPTChkcm1jZ19kZXZpY2VfZWFybHlfaW5pdCk7CiAgKiBmb3IgdGhlIHV0aWxpemF0aW9uLiAg VGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgaXMgc2hhcmVkICgKICAq IHRoZSBHRU0gYnVmZmVyJ3MgcmVmZXJlbmNlIGNvdW50IGJlaW5nIGluY3JlbWVudGVkLikKICAq Lwotdm9pZCBkcm1jZ19jaGdfYm9fYWxsb2Moc3RydWN0IGRybWNnICpkcm1jZywgc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKK2Jvb2wgZHJtY2dfdHJ5X2NoZ19ib19hbGxvYyhzdHJ1Y3QgZHJtY2cg KmRybWNnLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1 Y3QgZHJtY2dfZGV2aWNlX3Jlc291cmNlICpkZHI7CiAJaW50IGRldklkeCA9IGRldi0+cHJpbWFy eS0+aW5kZXg7CisJc3RydWN0IGRybWNnX3Byb3BzICpwcm9wcyA9ICZkZXYtPmRybWNnX3Byb3Bz OworCXN0cnVjdCBkcm1jZyAqZHJtY2dfY3VyID0gZHJtY2c7CisJYm9vbCByZXN1bHQgPSB0cnVl OworCXM2NCBkZWx0YSA9IDA7CiAKIAlpZiAoZHJtY2cgPT0gTlVMTCkKLQkJcmV0dXJuOworCQly ZXR1cm4gdHJ1ZTsKIAogCW11dGV4X2xvY2soJmRldi0+ZHJtY2dfbXV0ZXgpOwotCWZvciAoIDsg ZHJtY2cgIT0gTlVMTDsgZHJtY2cgPSBkcm1jZ19wYXJlbnQoZHJtY2cpKSB7Ci0JCWRkciA9IGRy bWNnLT5kZXZfcmVzb3VyY2VzW2RldklkeF07CisgICAgICAgIGlmIChwcm9wcy0+bGltaXRfZW5m b3JjZWQpIHsKKwkJZm9yICggOyBkcm1jZyAhPSBOVUxMOyBkcm1jZyA9IGRybWNnX3BhcmVudChk cm1jZykpIHsKKwkJCWRkciA9IGRybWNnLT5kZXZfcmVzb3VyY2VzW2RldklkeF07CisJCQlkZWx0 YSA9IGRkci0+Ym9fbGltaXRzX3RvdGFsX2FsbG9jYXRlZCAtCisJCQkJCWRkci0+Ym9fc3RhdHNf dG90YWxfYWxsb2NhdGVkOworCisJCQlpZiAoZGVsdGEgPD0gMCB8fCBzaXplID4gZGVsdGEpIHsK KwkJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWRybWNn ID0gZHJtY2dfY3VyOworCisJaWYgKHJlc3VsdCB8fCAhcHJvcHMtPmxpbWl0X2VuZm9yY2VkKSB7 CisJCWZvciAoIDsgZHJtY2cgIT0gTlVMTDsgZHJtY2cgPSBkcm1jZ19wYXJlbnQoZHJtY2cpKSB7 CisJCQlkZHIgPSBkcm1jZy0+ZGV2X3Jlc291cmNlc1tkZXZJZHhdOwogCi0JCWRkci0+Ym9fc3Rh dHNfdG90YWxfYWxsb2NhdGVkICs9IChzNjQpc2l6ZTsKKwkJCWRkci0+Ym9fc3RhdHNfdG90YWxf YWxsb2NhdGVkICs9IChzNjQpc2l6ZTsKIAotCQlpZiAoZGRyLT5ib19zdGF0c19wZWFrX2FsbG9j YXRlZCA8IChzNjQpc2l6ZSkKLQkJCWRkci0+Ym9fc3RhdHNfcGVha19hbGxvY2F0ZWQgPSAoczY0 KXNpemU7CisJCQlpZiAoZGRyLT5ib19zdGF0c19wZWFrX2FsbG9jYXRlZCA8IChzNjQpc2l6ZSkK KwkJCQlkZHItPmJvX3N0YXRzX3BlYWtfYWxsb2NhdGVkID0gKHM2NClzaXplOwogCi0JCWRkci0+ Ym9fc3RhdHNfY291bnRfYWxsb2NhdGVkKys7CisJCQlkZHItPmJvX3N0YXRzX2NvdW50X2FsbG9j YXRlZCsrOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmZGV2LT5kcm1jZ19tdXRleCk7CisKKwly ZXR1cm4gcmVzdWx0OwogfQotRVhQT1JUX1NZTUJPTChkcm1jZ19jaGdfYm9fYWxsb2MpOworRVhQ T1JUX1NZTUJPTChkcm1jZ190cnlfY2hnX2JvX2FsbG9jKTsKIAogLyoqCiAgKiBkcm1jZ191bmNo Z19ib19hbGxvYyAtCi0tIAoyLjIyLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbA==