From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 1/6] drm/i915: store all subslice masks Date: Thu, 11 Jan 2018 15:57:37 +0000 Message-ID: <308a0604-6239-d481-b06f-8445b5353f6f@linux.intel.com> References: <20171218153520.14181-1-lionel.g.landwerlin@intel.com> <20171218153520.14181-2-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id E93446E21A for ; Thu, 11 Jan 2018 15:57:40 +0000 (UTC) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDExLzAxLzIwMTggMTU6NDgsIExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+IE9uIDExLzAx LzE4IDExOjEyLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4KPj4gT24gMTgvMTIvMjAxNyAxNToz NSwgTGlvbmVsIExhbmR3ZXJsaW4gd3JvdGU6Cj4+PiBVcCB0byBub3csIHN1YnNsaWNlIG1hc2sg d2FzIGFzc3VtZWQgdG8gYmUgdW5pZm9ybSBhY3Jvc3Mgc2xpY2VzLiBCdXQKPj4+IHN0YXJ0aW5n IHdpdGggQ2Fubm9ubGFrZSwgc2xpY2VzIGNhbiBiZSBhc3ltZXRyaWMgKGZvciBleGFtcGxlIHNs aWNlMAo+Pgo+PiBhc3ltbWV0cmljLCB0aGFua3MgYXV0byBzcGVsbCBjaGVja2VyLiA6KQo+IAo+ IERvbmUsIHRoYW5rcy4KPiAKPj4KPj4+IGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIHN1YnNsaWNl cyBhcyBzbGljZTErKS4gVGhpcyBjaGFuZ2Ugc3RvcmVzIGFsbAo+Pj4gc3Vic2xpY2VzIG1hc2tz IGZvciBhbGwgc2xpY2VzIHJhdGhlciB0aGFuIGhhdmluZyBhIHNpbmdsZSBtYXNrIHRoYXQKPj4+ IGFwcGxpZXMgdG8gYWxsIHNsaWNlcy4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBMaW9uZWwgTGFu ZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+Cj4+PiAtLS0KPj4+IMKgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jwqDCoMKgwqDCoCB8wqAgMjQgKysrLS0K Pj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmPCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMiArLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKg wqDCoMKgwqDCoCB8wqAgMjMgKysrKy0KPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RldmljZV9pbmZvLmMgfCAxNjkgCj4+PiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t Cj4+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuY8KgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMiArLQo+Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5o wqAgfMKgwqAgMiArLQo+Pj4gwqAgNiBmaWxlcyBjaGFuZ2VkLCAxNjEgaW5zZXJ0aW9ucygrKSwg NjEgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZGVidWdmcy5jIAo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu Ywo+Pj4gaW5kZXggMGRkY2U3MjU1MmJmLi4wYzc4OTBiNjk1YzUgMTAwNjQ0Cj4+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPj4+IEBAIC00MjkzLDcgKzQyOTMsNyBAQCBzdGF0aWMg dm9pZCAKPj4+IGNoZXJyeXZpZXdfc3NldV9kZXZpY2Vfc3RhdHVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVl Owo+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgPSBCSVQoMCk7Cj4+ PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayB8PSBCSVQoc3MpOwo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrWzBdIHw9IEJJVChzcyk7Cj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgZXVfY250ID0gKChzaWcxW3NzXSAmIENIVl9FVTA4X1BHX0VOQUJMRSkg PyAwIDogMikgKwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKHNpZzFbc3NdICYg Q0hWX0VVMTlfUEdfRU5BQkxFKSA/IDAgOiAyKSArCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICgoc2lnMVtzc10gJiBDSFZfRVUyMTBfUEdfRU5BQkxFKSA/IDAgOiAyKSArCj4+PiBA QCAtNDM0MCw3ICs0MzQwLDcgQEAgc3RhdGljIHZvaWQgZ2VuMTBfc3NldV9kZXZpY2Vfc3RhdHVz KHN0cnVjdCAKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ c2xpY2VfbWFzayB8PSBCSVQocyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2Vf bWFzayA9IGluZm8tPnNzZXUuc3Vic2xpY2VfbWFzazsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1 LT5zdWJzbGljZXNfbWFza1tzXSA9IGluZm8tPnNzZXUuc3Vic2xpY2VzX21hc2tbc107Cj4+PiDC oCDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwgc3NfbWF4OyBzcysrKSB7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgZXVfY250Owo+Pj4gQEAg LTQzOTUsOCArNDM5NSw4IEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9kZXZpY2Vfc3RhdHVzKHN0 cnVjdCAKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIHNzZXUtPnNsaWNlX21hc2sgfD0gQklUKHMpOwo+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChJU19HRU45X0JDKGRldl9wcml2KSkKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNz ZXUtPnN1YnNsaWNlX21hc2sgPQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJ TlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZV9tYXNrOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21hc2tbc10gPQo+Pj4gKyBJTlRFTF9JTkZPKGRl dl9wcml2KS0+c3NldS5zdWJzbGljZXNfbWFza1tzXTsKPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDC oCBmb3IgKHNzID0gMDsgc3MgPCBzc19tYXg7IHNzKyspIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVuc2lnbmVkIGludCBldV9jbnQ7Cj4+PiBAQCAtNDQwNiw3ICs0NDA2LDcgQEAg c3RhdGljIHZvaWQgZ2VuOV9zc2V1X2RldmljZV9zdGF0dXMoc3RydWN0IAo+Pj4gZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogc2tpcCBkaXNhYmxlZCBzdWJzbGljZSAqLwo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gwqAgLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9IEJJVChzcyk7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdIHw9 IEJJVChzcyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoCDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBldV9jbnQgPSAyICogaHdlaWdodDMyKGV1X3JlZ1syKnMgKyBz cy8yXSAmCj4+PiBAQCAtNDQyOCw5ICs0NDI4LDEyIEBAIHN0YXRpYyB2b2lkIAo+Pj4gYnJvYWR3 ZWxsX3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4+PiDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgPSBzbGljZV9pbmZvICYgR0VOOF9MU0xJ Q0VTVEFUX01BU0s7Cj4+PiDCoCDCoMKgwqDCoMKgIGlmIChzc2V1LT5zbGljZV9tYXNrKSB7Cj4+ PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayA9IElOVEVMX0lORk8oZGV2X3By aXYpLT5zc2V1LnN1YnNsaWNlX21hc2s7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVf cGVyX3N1YnNsaWNlID0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSU5U RUxfSU5GTyhkZXZfcHJpdiktPnNzZXUuZXVfcGVyX3N1YnNsaWNlOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGZvciAocyA9IDA7IHMgPCBmbHMoc3NldS0+c2xpY2VfbWFzayk7IHMrKykgewo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VzX21hc2tbc10gPQo+Pj4gKyBJTlRF TF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZXNfbWFza1tzXTsKPj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgPSBzc2V1LT5ldV9w ZXJfc3Vic2xpY2UgKgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNz ZXVfc3Vic2xpY2VfdG90YWwoc3NldSk7Cj4+PiDCoCBAQCAtNDQ0OSw2ICs0NDUyLDcgQEAgc3Rh dGljIHZvaWQgaTkxNV9wcmludF9zc2V1X2luZm8oc3RydWN0IAo+Pj4gc2VxX2ZpbGUgKm0sIGJv b2wgaXNfYXZhaWxhYmxlX2luZm8sCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGVfdG9faTkxNShtLT5wcml2YXRlKTsKPj4+IMKg wqDCoMKgwqAgY29uc3QgY2hhciAqdHlwZSA9IGlzX2F2YWlsYWJsZV9pbmZvID8gIkF2YWlsYWJs ZSIgOiAiRW5hYmxlZCI7Cj4+PiArwqDCoMKgIGludCBzOwo+Pj4gwqAgwqDCoMKgwqDCoCBzZXFf cHJpbnRmKG0sICLCoCAlcyBTbGljZSBNYXNrOiAlMDR4XG4iLCB0eXBlLAo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2spOwo+Pj4gQEAgLTQ0NTYsMTAgKzQ0NjAs MTAgQEAgc3RhdGljIHZvaWQgaTkxNV9wcmludF9zc2V1X2luZm8oc3RydWN0IAo+Pj4gc2VxX2Zp bGUgKm0sIGJvb2wgaXNfYXZhaWxhYmxlX2luZm8sCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaHdlaWdodDgoc3NldS0+c2xpY2VfbWFzaykpOwo+Pj4gwqDCoMKgwqDCoCBzZXFfcHJpbnRm KG0sICLCoCAlcyBTdWJzbGljZSBUb3RhbDogJXVcbiIsIHR5cGUsCj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3NldV9zdWJzbGljZV90b3RhbChzc2V1KSk7Cj4+PiAtwqDCoMKgIHNlcV9w cmludGYobSwgIsKgICVzIFN1YnNsaWNlIE1hc2s6ICUwNHhcbiIsIHR5cGUsCj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3NldS0+c3Vic2xpY2VfbWFzayk7Cj4+PiAtwqDCoMKgIHNlcV9wcmlu dGYobSwgIsKgICVzIFN1YnNsaWNlIFBlciBTbGljZTogJXVcbiIsIHR5cGUsCj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqAgaHdlaWdodDgoc3NldS0+c3Vic2xpY2VfbWFzaykpOwo+Pj4gK8KgwqDC oCBmb3IgKHMgPSAwOyBzIDwgZmxzKHNzZXUtPnNsaWNlX21hc2spOyBzKyspIHsKPj4KPj4gU2xp Y2UgbWFzayBpcyBhbHdheXMgY29udGlndW91cyBiaXRzPwo+IAo+IEkgaGF2ZSBhIDJ4NiBCWFQg b24gbXkgZGVzayB3aGVyZSB0aGUgc3Vic2xpY2UwIGFwcGVhcnMgdG8gYmUgZnVzZWQtb2ZmLgo+ IEkgYXNzdW1lZCBzYW1lIGNvdWxkIGJlIHRydWUgZm9yIHNsaWNlcy4KPiBmbHMoKSBzaG91bGQg bWFrZSB1cyBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBzbGljZXMgKGV2ZW4gdGhlIGZ1c2VkIG9m ZiAKPiBvbmVzKS4KCkRvIHlvdSB0aGVuIHdhbnQgdG8gc2tpcCBwcmludGluZyB0aGUgZnVzZWQg b2ZmIG9uZXM/IEp1c3QgYXNraW5nLCBkb24ndCAKdGhpbmsgaXQgbWF0dGVycyBodWdlbHkuCgo+ Pgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYobSwgIsKgICVzIFNsaWNlJWkgU3Vic2xp Y2UgTWFzazogJTA0eFxuIiwgdHlwZSwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHMsIHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdKTsKPj4KPj4gRG9uJ3Qgd2FudCB0byBrZWVwIHBy aW50aW5nIHRoZSBjb3VudD8gTGlrZSBtYXliZSAiICVzIFNsaWNlJXUgJXUgCj4+IHN1YmxpY2Vz LCBtYXNrPSUwNHhcbiIgPwo+IAo+IFN1cmUsIGRvbmUuCj4gCj4+Cj4+PiArwqDCoMKgIH0KPj4+ IMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiwqAgJXMgRVUgVG90YWw6ICV1XG4iLCB0eXBlLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPmV1X3RvdGFsKTsKPj4+IMKgwqDCoMKg wqAgc2VxX3ByaW50ZihtLCAiwqAgJXMgRVUgUGVyIFN1YnNsaWNlOiAldVxuIiwgdHlwZSwKPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIAo+Pj4gYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+PiBpbmRleCA3MmJlYTI4MWVkYjcuLjhiOTll NDE1YzM0NSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMK Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4+IEBAIC00MTQsNyAr NDE0LDcgQEAgc3RhdGljIGludCBpOTE1X2dldHBhcmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IAo+Pj4gdm9pZCAqZGF0YSwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RU5PREVWOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gwqDCoMKgwqDCoCBjYXNl IEk5MTVfUEFSQU1fU1VCU0xJQ0VfTUFTSzoKPj4+IC3CoMKgwqDCoMKgwqDCoCB2YWx1ZSA9IElO VEVMX0lORk8oZGV2X3ByaXYpLT5zc2V1LnN1YnNsaWNlX21hc2s7Cj4+PiArwqDCoMKgwqDCoMKg wqAgdmFsdWUgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZXNfbWFza1swXTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXZhbHVlKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAKPj4+IGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gaW5kZXggMWFiYTU2NTdmNWYwLi44MmZj NTkwNzhjNmEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o Cj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBAQCAtODAyLDkg KzgwMiwxMiBAQCBzdHJ1Y3QgaW50ZWxfY3NyIHsKPj4+IMKgwqDCoMKgwqAgZnVuYyhzdXBwb3J0 c190dik7IFwKPj4+IMKgwqDCoMKgwqAgZnVuYyhoYXNfaXBjKTsKPj4+IMKgICsjZGVmaW5lIEdF Tl9NQVhfU0xJQ0VTwqDCoMKgwqDCoMKgwqAgKDYpIC8qIENOTCB1cHBlciBib3VuZCAqLwo+Pj4g KyNkZWZpbmUgR0VOX01BWF9TVUJTTElDRVPCoMKgwqAgKDcpCj4+PiArCj4+PiDCoCBzdHJ1Y3Qg c3NldV9kZXZfaW5mbyB7Cj4+PiDCoMKgwqDCoMKgIHU4IHNsaWNlX21hc2s7Cj4+PiAtwqDCoMKg IHU4IHN1YnNsaWNlX21hc2s7Cj4+PiArwqDCoMKgIHU4IHN1YnNsaWNlc19tYXNrW0dFTl9NQVhf U0xJQ0VTXTsKPj4KPj4gUGVyc29uYWxseSBJIHdvdWxkIHByb2JhYmx5IGtlcHQgdGhlIHN1YnNs aWNlX21hc2sgbmFtZSBhbmQganVzdCAKPj4gdHVybmVkIGl0IGludG8gYW4gYXJyYXksIGJ1dCB0 aGF0IGlzIGJpa2Utc2hlZCB0ZXJyaXRvcnkuCj4gCj4gSXQgd2FzIGVhc2llciB0byBzcG90IGFs bCB0aGUgcGxhY2VzIHRvIG1vZGlmeS4gV2lsbCBnbyBiYWNrLgo+IAo+Pgo+Pj4gwqDCoMKgwqDC oCB1OCBldV90b3RhbDsKPj4+IMKgwqDCoMKgwqAgdTggZXVfcGVyX3N1YnNsaWNlOwo+Pj4gwqDC oMKgwqDCoCB1OCBtaW5fZXVfaW5fcG9vbDsKPj4+IEBAIC04MTMsMTEgKzgxNiwyNyBAQCBzdHJ1 Y3Qgc3NldV9kZXZfaW5mbyB7Cj4+PiDCoMKgwqDCoMKgIHU4IGhhc19zbGljZV9wZzoxOwo+Pj4g wqDCoMKgwqDCoCB1OCBoYXNfc3Vic2xpY2VfcGc6MTsKPj4+IMKgwqDCoMKgwqAgdTggaGFzX2V1 X3BnOjE7Cj4+PiArCj4+PiArwqDCoMKgIC8qIFRvcG9sb2d5IGZpZWxkcyAqLwo+Pj4gK8KgwqDC oCB1OCBtYXhfc2xpY2VzOwo+Pj4gK8KgwqDCoCB1OCBtYXhfc3Vic2xpY2VzOwo+Pj4gK8KgwqDC oCB1OCBtYXhfZXVzX3Blcl9zdWJzbGljZTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogV2UgZG9uJ3Qg aGF2ZSBtb3JlIHRoYW4gOCBldXMgcGVyIHN1YnNsaWNlIGF0IHRoZSBtb21lbnQgYW5kIAo+Pj4g YXMgd2UKPj4+ICvCoMKgwqDCoCAqIHN0b3JlIGV1cyBlbmFibGVkIHVzaW5nIGJpdHMsIG5vIG5l ZWQgdG8gbXVsdGlwbHkgYnkgZXVzIHBlcgo+Pj4gK8KgwqDCoMKgICogc3Vic2xpY2UuCj4+PiAr wqDCoMKgwqAgKi8KPj4+ICvCoMKgwqAgdTggZXVfbWFza1tHRU5fTUFYX1NMSUNFUyAqIEdFTl9N QVhfU1VCU0xJQ0VTXTsKPj4+IMKgIH07Cj4+PiDCoCDCoCBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGludCBzc2V1X3N1YnNsaWNlX3RvdGFsKGNvbnN0IHN0cnVjdCAKPj4+IHNzZXVfZGV2X2luZm8g KnNzZXUpCj4+PiDCoCB7Cj4+PiAtwqDCoMKgIHJldHVybiBod2VpZ2h0OChzc2V1LT5zbGljZV9t YXNrKSAqIGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlX21hc2spOwo+Pj4gK8KgwqDCoCB1bnNpZ25l ZCBzLCB0b3RhbCA9IDA7Cj4+PiArCj4+PiArwqDCoMKgIGZvciAocyA9IDA7IHMgPCBBUlJBWV9T SVpFKHNzZXUtPnN1YnNsaWNlc19tYXNrKTsgcysrKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHRvdGFs ICs9IGh3ZWlnaHQ4KHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdKTsKPj4+ICsKPj4+ICvCoMKgwqAg cmV0dXJuIHRvdGFsOwo+Pgo+PiBUaGUgZnVuY3Rpb24gaXMgYmlnZ2VyIG5vdyBzbyBtYXliZSBp dCBuZWVkcyBzdG9wcyBiZWluZyBpbmxpbmUsIGJ1dCAKPj4gZWl0aGVyIG1vdmVkIHRvIHRoZSAu YyBmaWxlLCBvciBldmVuIHRoZSB0b3RhbCBzdG9yZWQgaW4gc3RydWN0IAo+PiBzc2V1X2Rldl9p bmZvLCBhbmQgdGhlbiB0aGlzIGJlY29tZXMganVzdCBhIGdldHRlcj8KPiAKPiBMZXQncyBnbyB3 aXRoIGEgc3Vic2xpY2VfdG90YWwgZmllbGQuCj4gCj4+Cj4+PiDCoCB9Cj4+PiDCoCDCoCAvKiBL ZWVwIGluIGdlbiBiYXNlZCBvcmRlciwgYW5kIGNocm9ub2xvZ2ljYWwgb3JkZXIgd2l0aGluIGEg Z2VuICovCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNl X2luZm8uYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGV2aWNlX2luZm8uYwo+ Pj4gaW5kZXggZjQ3OGJlM2FlMGJhLi42YTNjNDA0MzllODMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jCj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kZXZpY2VfaW5mby5jCj4+PiBAQCAtODIsMjIgKzgyLDc0IEBAIHZv aWQgaW50ZWxfZGV2aWNlX2luZm9fZHVtcChzdHJ1Y3QgCj4+PiBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPj4+IMKgICN1bmRlZiBQUklOVF9GTEFHCj4+PiDCoCB9Cj4+PiDCoCArc3RhdGlj IHU4IGNvbXB1dGVfZXVfdG90YWwoY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUpCj4+ PiArewo+Pj4gK8KgwqDCoCB1OCBpLCB0b3RhbCA9IDA7Cj4+Cj4+IHNzZXVfc3Vic2xpY2VfdG90 YWwgcmV0dXJucyBhbiB1bnNpbmdlZCBpbnQsIHdoaWxlIHRoaXMgaXMgdTgsIAo+PiBzdWdnZXN0 aW5nIHRoZXJlIGNhbiBiZSBtb3JlIHN1YmxpY2VzIGFuZCBldXMuIDspIEpva2VzIGFzaWRlLCBJ J2QgCj4+IHByb2JhYmx5IG1ha2UgdGhlbSBjb25zaXN0ZW50LiBUaGUgaW5kZXggdmFyaWFibGUg aXMgcHJvYmFibHkgYmVzdCBhcyAKPj4gdW5zaWduZWQgaW50LCBidXQgdGhlIHRvdGFsIGFuZCBy ZXR1cm4gY2FuIGJlIHU4IGlmIGJpZyBlbm91Z2ggZm9yIAo+PiB0b3RhbCBldXM/IEVpdGhlciB3 YXkgYmVzdCBpdCBtYXRjaGVzIHRoZSB0eXBlcyBpbiB0aGUgc3RydWN0IHRoZXkgZ2V0IAo+PiBh c3NpZ25lZCB0by4KPiAKPiBZb3UncmUgcmlnaHQhCj4gdTE2IHNob3VsZCBiZSBmaW5lIHRob3Vn aC4KPiAKPj4KPj4+ICsKPj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3Nl dS0+ZXVfbWFzayk7IGkrKykKPj4+ICvCoMKgwqDCoMKgwqDCoCB0b3RhbCArPSBod2VpZ2h0OChz c2V1LT5ldV9tYXNrW2ldKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIHRvdGFsOwo+Pj4gK30K Pj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lkIGdlbjEwX3NzZXVfaW5mb19pbml0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+IMKgIHsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IHNz ZXVfZGV2X2luZm8gKnNzZXUgPSAmbWt3cml0ZV9kZXZpY2VfaW5mbyhkZXZfcHJpdiktPnNzZXU7 Cj4+PiDCoMKgwqDCoMKgIGNvbnN0IHUzMiBmdXNlMiA9IEk5MTVfUkVBRChHRU44X0ZVU0UyKTsK Pj4+ICvCoMKgwqAgaW50IHMsIHNzLCBldV9tYXNrID0gMHhmZjsKPj4KPj4gY29uc3QgZXVfbWFz ayA/Cj4gCj4gRG9uZS4KPiAKPj4KPj4+ICvCoMKgwqAgdTMyIHN1YnNsaWNlX21hc2ssIGV1X2Vu Owo+Pj4gwqAgwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gKGZ1c2UyICYgR0VOMTBfRjJf U19FTkFfTUFTSykgPj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VO MTBfRjJfU19FTkFfU0hJRlQ7Cj4+PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgPSAoMSA8 PCA0KSAtIDE7Cj4+PiAtwqDCoMKgIHNzZXUtPnN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBH RU4xMF9GMl9TU19ESVNfTUFTSykgPj4KPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBHRU4xMF9GMl9TU19ESVNfU0hJRlQpOwo+Pj4gK8KgwqDCoCBzc2V1LT5tYXhfc2xpY2Vz ID0gNjsKPj4+ICvCoMKgwqAgc3NldS0+bWF4X3N1YnNsaWNlcyA9IDQ7Cj4+PiArwqDCoMKgIHNz ZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNlID0gODsKPj4+ICsKPj4+ICvCoMKgwqAgc3Vic2xpY2Vf bWFzayA9ICgxIDw8IDQpIC0gMTsKPj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayAmPSB+KChmdXNl MiAmIEdFTjEwX0YyX1NTX0RJU19NQVNLKSA+Pgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgR0VOMTBfRjJfU1NfRElTX1NISUZUKTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogU2xpY2Uw IGNhbiBoYXZlIHVwIHRvIDMgc3Vic2xpY2VzLCBidXQgdGhlcmUgYXJlIG9ubHkgMiBpbgo+Pj4g K8KgwqDCoMKgICogc2xpY2UxLzIuCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqAgc3NldS0+ c3Vic2xpY2VzX21hc2tbMF0gPSBzdWJzbGljZV9tYXNrOwo+Pj4gK8KgwqDCoCBmb3IgKHMgPSAx OyBzIDwgc3NldS0+bWF4X3NsaWNlczsgcysrKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlc19tYXNrW3NdID0gc3Vic2xpY2VfbWFzayAmIDB4MzsKPj4+ICsKPj4+ICvCoMKgwqAg LyogU2xpY2UwICovCj4+PiArwqDCoMKgIGV1X2VuID0gfkk5MTVfUkVBRChHRU44X0VVX0RJU0FC TEUwKTsKPj4+ICvCoMKgwqAgZm9yIChzcyA9IDA7IHNzIDwgc3NldS0+bWF4X3N1YnNsaWNlczsg c3MrKykKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrW3NzXcKgwqDCoMKgID0gKGV1 X2VuID4+ICg4ICogc3MpKSAmIGV1X21hc2s7Cj4+PiArwqDCoMKgIC8qIFNsaWNlMSAqLwo+Pj4g K8KgwqDCoCBzc2V1LT5ldV9tYXNrW3NzZXUtPm1heF9zdWJzbGljZXNdwqDCoMKgwqDCoMKgwqDC oCA9IChldV9lbiA+PiAyNCkgJiAKPj4+IGV1X21hc2s7Cj4+PiArwqDCoMKgIGV1X2VuID0gfkk5 MTVfUkVBRChHRU44X0VVX0RJU0FCTEUxKTsKPj4+ICvCoMKgwqAgc3NldS0+ZXVfbWFza1tzc2V1 LT5tYXhfc3Vic2xpY2VzICsgMV3CoMKgwqDCoCA9IGV1X2VuICYgZXVfbWFzazsKPj4KPj4gSSBz dWdnZXN0IGEgaGVscGVyIHRvIGluZGV4IGludG8gc3NlLT5ldV9tYXNrLCBsaWtlIAo+PiBzc2V1 LT5ldV9tYXNrW19ldV9tYXNrX2lkeChzbGljZSwgc3Vic2xpY2UpXSBvciBzb21ldGhpbmcsIHNv IGl0IGlzIAo+PiBtb3JlIHJlYWRhYmxlIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuIE9yIGV2ZW46 Cj4+Cj4+IMKgX2V1X21hc2soc3NldSwgc2xpY2UsIHN1YnNsaWNlKSA9IG1hc2s7Cj4+Cj4+IERv YWJsZT8gSSBhbSBub3QgMTAwJSBJIHBpY2tlZCB1cCBleGFjdGx5IG9uIHRoZSBsYXlvdXQgb2Yg dGhlIGV1X21hc2sgCj4+IGFycmF5Li4gZWFjaCBlbGVtZW50IGlzIG9uZSBzdWJzbGljZT8gQ29u c2VjdXRpdmUgZm9yIHNsaWNlMCwgCj4+IHN1YnNsaWNlMC4uTiwgc2xpY2UxLi4uIHNsaWNlTiA/ Cj4gCj4gVW5mb3J0dW5hdGVseSB0aGF0J3Mgbm90IHBvc3NpYmxlIGJlY2F1c2Ugb2YgdGhlIGFz eW1tZXRyeSB0aGluZy4uLgoKSG0gc28gb24gYSBnaXZlbiBTS1UgeW91IGFyZSBzYXlpbmcgdGhl IGV1X21hc2sgeW91IGFyZSBnZW5lcmF0aW5nIGlzIAphbHNvIGFzeW1tZXRyaWNhbD8gTWVhbmlu ZyBkaWZmZXJlbnQgbnVtYmVyIG9mIHRvdGFsIGFsbG9jYXRlZCBiaXRzIApwZXItc2xpY2U/IENv dWxkIHdlIGhhdmUgaXQgc3ltbWV0cmljYWwgaW4gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9u IAphbmQgdUFQSSBmb3Igc2ltcGxlciBjb2RlPwoKUmVnYXJkcywKClR2cnRrbwoKPj4KPj4+ICvC oMKgwqAgLyogU2xpY2UyICovCj4+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbMiAqIHNzZXUtPm1h eF9zdWJzbGljZXNdwqDCoMKgwqAgPSAoZXVfZW4gPj4gOCkgJiAKPj4+IGV1X21hc2s7Cj4+PiAr wqDCoMKgIHNzZXUtPmV1X21hc2tbMiAqIHNzZXUtPm1heF9zdWJzbGljZXMgKyAxXSA9IChldV9l biA+PiAxNikgJiAKPj4+IGV1X21hc2s7Cj4+PiArwqDCoMKgIC8qIFNsaWNlMyAqLwo+Pj4gK8Kg wqDCoCBzc2V1LT5ldV9tYXNrWzMgKiBzc2V1LT5tYXhfc3Vic2xpY2VzXcKgwqDCoMKgID0gKGV1 X2VuID4+IDI0KSAmIAo+Pj4gZXVfbWFzazsKPj4+ICvCoMKgwqAgZXVfZW4gPSB+STkxNV9SRUFE KEdFTjhfRVVfRElTQUJMRTIpOwo+Pj4gK8KgwqDCoCBzc2V1LT5ldV9tYXNrWzMgKiBzc2V1LT5t YXhfc3Vic2xpY2VzICsgMV0gPSBldV9lbiAmIGV1X21hc2s7Cj4+PiArwqDCoMKgIC8qIFNsaWNl NCAqLwo+Pj4gK8KgwqDCoCBzc2V1LT5ldV9tYXNrWzQgKiBzc2V1LT5tYXhfc3Vic2xpY2VzXcKg wqDCoMKgID0gKGV1X2VuID4+IDgpICYgCj4+PiBldV9tYXNrOwo+Pj4gK8KgwqDCoCBzc2V1LT5l dV9tYXNrWzQgKiBzc2V1LT5tYXhfc3Vic2xpY2VzICsgMV0gPSAoZXVfZW4gPj4gMTYpICYgCj4+ PiBldV9tYXNrOwo+Pj4gK8KgwqDCoCAvKiBTbGljZTUgKi8KPj4+ICvCoMKgwqAgc3NldS0+ZXVf bWFza1s1ICogc3NldS0+bWF4X3N1YnNsaWNlc13CoMKgwqDCoCA9IChldV9lbiA+PiAyNCkgJiAK Pj4+IGV1X21hc2s7Cj4+PiArwqDCoMKgIGV1X2VuID0gfkk5MTVfUkVBRChHRU4xMF9FVV9ESVNB QkxFMyk7Cj4+PiArwqDCoMKgIHNzZXUtPmV1X21hc2tbNSAqIHNzZXUtPm1heF9zdWJzbGljZXMg KyAxXSA9IGV1X2VuICYgZXVfbWFzazsKPj4+ICsKPj4+ICvCoMKgwqAgLyogRG8gYSBzZWNvbmQg cGFzcyB3aGVyZSB3ZSBtYXJrZWQgdGhlIHN1YnNsaWNlcyBkaXNhYmxlZCBpZiBhbGwKPj4+ICvC oMKgwqDCoCAqIHRoZWlyIGV1cyBhcmUgb2ZmLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKg IGZvciAocyA9IDA7IHMgPCBzc2V1LT5tYXhfc2xpY2VzOyBzKyspIHsKPj4+ICvCoMKgwqDCoMKg wqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1LT5tYXhfc3Vic2xpY2VzOyBzcysrKSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc3NldS0+ZXVfbWFza1tzICogc3NldS0+bWF4X3N1 YnNsaWNlcyArIHNzXSA9PSAwKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz c2V1LT5zdWJzbGljZXNfbWFza1tzXSAmPSB+QklUKHNzKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9 Cj4+PiArwqDCoMKgIH0KPj4+IMKgIC3CoMKgwqAgc3NldS0+ZXVfdG90YWwgPSBod2VpZ2h0MzIo fkk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUwKSk7Cj4+PiAtwqDCoMKgIHNzZXUtPmV1X3RvdGFs ICs9IGh3ZWlnaHQzMih+STkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTEpKTsKPj4+IC3CoMKgwqAg c3NldS0+ZXVfdG90YWwgKz0gaHdlaWdodDMyKH5JOTE1X1JFQUQoR0VOOF9FVV9ESVNBQkxFMikp Owo+Pj4gLcKgwqDCoCBzc2V1LT5ldV90b3RhbCArPSBod2VpZ2h0OCh+KEk5MTVfUkVBRChHRU4x MF9FVV9ESVNBQkxFMykgJgo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgR0VOMTBfRVVfRElTX1NTX01BU0spKTsKPj4+ICvCoMKgwqAgc3NldS0+ZXVfdG90YWwg PSBjb21wdXRlX2V1X3RvdGFsKHNzZXUpOwo+Pj4gwqAgwqDCoMKgwqDCoCAvKgo+Pj4gwqDCoMKg wqDCoMKgICogQ05MIGlzIGV4cGVjdGVkIHRvIGFsd2F5cyBoYXZlIGEgdW5pZm9ybSBkaXN0cmli dXRpb24KPj4+IEBAIC0xMTgsMjYgKzE3MCwzMCBAQCBzdGF0aWMgdm9pZCBnZW4xMF9zc2V1X2lu Zm9faW5pdChzdHJ1Y3QgCj4+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPj4+IMKgIHN0 YXRpYyB2b2lkIGNoZXJyeXZpZXdfc3NldV9pbmZvX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgCj4+PiAqZGV2X3ByaXYpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBzc2V1X2Rl dl9pbmZvICpzc2V1ID0gJm1rd3JpdGVfZGV2aWNlX2luZm8oZGV2X3ByaXYpLT5zc2V1Owo+Pj4g LcKgwqDCoCB1MzIgZnVzZSwgZXVfZGlzOwo+Pj4gK8KgwqDCoCB1MzIgZnVzZTsKPj4+IMKgIMKg wqDCoMKgwqAgZnVzZSA9IEk5MTVfUkVBRChDSFZfRlVTRV9HVCk7Cj4+PiDCoCDCoMKgwqDCoMKg IHNzZXUtPnNsaWNlX21hc2sgPSBCSVQoMCk7Cj4+PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMg PSAxOwo+Pj4gK8KgwqDCoCBzc2V1LT5tYXhfc3Vic2xpY2VzID0gMjsKPj4+ICvCoMKgwqAgc3Nl dS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgPSA4Owo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoIShmdXNl ICYgQ0hWX0ZHVF9ESVNBQkxFX1NTMCkpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJz bGljZV9tYXNrIHw9IEJJVCgwKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBldV9kaXMgPSBmdXNlICYg KENIVl9GR1RfRVVfRElTX1NTMF9SMF9NQVNLIHwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBDSFZfRkdUX0VVX0RJU19TUzBfUjFfTUFTSyk7Cj4+PiAtwqDCoMKgwqDCoMKg wqAgc3NldS0+ZXVfdG90YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9kaXMpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrWzBdIHw9IEJJVCgwKTsKPj4+ICvCoMKgwqDCoMKg wqDCoCBzc2V1LT5ldV9tYXNrWzBdID0gKGZ1c2UgJiBDSFZfRkdUX0VVX0RJU19TUzBfUjBfTUFT SykgPj4gCj4+PiBDSFZfRkdUX0VVX0RJU19TUzBfUjBfU0hJRlQ7Cj4+PiArwqDCoMKgwqDCoMKg wqAgc3NldS0+ZXVfbWFza1swXSB8PSAoKGZ1c2UgJiBDSFZfRkdUX0VVX0RJU19TUzBfUjFfTUFT SykgPj4gCj4+PiBDSFZfRkdUX0VVX0RJU19TUzBfUjFfU0hJRlQpIDw8IDQ7Cj4+Cj4+IERvIHlv dSBuZWVkIHRvIGludmVydCB0aGUgYml0cyBoZXJlPwo+IAo+IE9oIGRlYXIuLi4gSW5kZWVkIQo+ IAo+Pgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrWzBdID0gMTsKPj4+ IMKgwqDCoMKgwqAgfQo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoIShmdXNlICYgQ0hWX0ZHVF9ESVNB QkxFX1NTMSkpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrIHw9IEJJ VCgxKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBldV9kaXMgPSBmdXNlICYgKENIVl9GR1RfRVVfRElT X1NTMV9SMF9NQVNLIHwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDSFZf RkdUX0VVX0RJU19TUzFfUjFfTUFTSyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90 YWwgKz0gOCAtIGh3ZWlnaHQzMihldV9kaXMpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1 YnNsaWNlc19tYXNrWzBdIHw9IEJJVCgxKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9t YXNrWzFdID0gKGZ1c2UgJiBDSFZfRkdUX0VVX0RJU19TUzFfUjBfTUFTSykgPj4gCj4+PiBDSFZf RkdUX0VVX0RJU19TUzBfUjBfU0hJRlQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfbWFz a1syXSB8PSAoKGZ1c2UgJiBDSFZfRkdUX0VVX0RJU19TUzFfUjFfTUFTSykgPj4gCj4+PiBDSFZf RkdUX0VVX0RJU19TUzBfUjFfU0hJRlQpIDw8IDQ7Cj4+Cj4+IFdoeSBldV9tYXNrIGluZGljZXMg MSBhbmQgMiBoZXJlLCB3aGlsZSBmb3Igc3Vic2xpY2UgMCB5b3UgbWVyZ2VkIHRoZW0gCj4+IGlu dG8gaW5kZXggMD8KPiAKPiBBZ2FpbiwgeW91J3JlIHJpZ2h0Lgo+IFRoYW5rcyEKPiAKPj4KPj4+ IMKgwqDCoMKgwqAgfQo+Pj4gwqAgK8KgwqDCoCBzc2V1LT5ldV90b3RhbCA9IGNvbXB1dGVfZXVf dG90YWwoc3NldSk7Cj4+PiArCj4+PiDCoMKgwqDCoMKgIC8qCj4+PiDCoMKgwqDCoMKgwqAgKiBD SFYgZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBFVQo+ Pj4gwqDCoMKgwqDCoMKgICogYWNyb3NzIHN1YnNsaWNlcy4KPj4+IEBAIC0xNTksNDEgKzIxNSw1 MCBAQCBzdGF0aWMgdm9pZCBnZW45X3NzZXVfaW5mb19pbml0KHN0cnVjdCAKPj4+IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxf ZGV2aWNlX2luZm8gKmluZm8gPSBta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KTsKPj4+IMKg wqDCoMKgwqAgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAmaW5mby0+c3NldTsKPj4+IC3C oMKgwqAgaW50IHNfbWF4ID0gMywgc3NfbWF4ID0gNCwgZXVfbWF4ID0gODsKPj4+IMKgwqDCoMKg wqAgaW50IHMsIHNzOwo+Pj4gLcKgwqDCoCB1MzIgZnVzZTIsIGV1X2Rpc2FibGU7Cj4+PiArwqDC oMKgIHUzMiBmdXNlMiwgZXVfZGlzYWJsZSwgc3Vic2xpY2VfbWFzazsKPj4+IMKgwqDCoMKgwqAg dTggZXVfbWFzayA9IDB4ZmY7Cj4+PiDCoCDCoMKgwqDCoMKgIGZ1c2UyID0gSTkxNV9SRUFEKEdF TjhfRlVTRTIpOwo+Pj4gwqDCoMKgwqDCoCBzc2V1LT5zbGljZV9tYXNrID0gKGZ1c2UyICYgR0VO OF9GMl9TX0VOQV9NQVNLKSA+PiAKPj4+IEdFTjhfRjJfU19FTkFfU0hJRlQ7Cj4+PiDCoCArwqDC oMKgIC8qIEJYVCBoYXMgYSBzaW5nbGUgc2xpY2UgYW5kIGF0IG1vc3QgMyBzdWJzbGljZXMuICov Cj4+PiArwqDCoMKgIHNzZXUtPm1heF9zbGljZXMgPSBJU19HRU45X0xQKGRldl9wcml2KSA/IDEg OiAzOwo+Pj4gK8KgwqDCoCBzc2V1LT5tYXhfc3Vic2xpY2VzID0gSVNfR0VOOV9MUChkZXZfcHJp dikgPyAzIDogNDsKPj4+ICvCoMKgwqAgc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgPSA4Owo+ Pj4gKwo+Pj4gwqDCoMKgwqDCoCAvKgo+Pj4gwqDCoMKgwqDCoMKgICogVGhlIHN1YnNsaWNlIGRp c2FibGUgZmllbGQgaXMgZ2xvYmFsLCBpLmUuIGl0IGFwcGxpZXMKPj4+IMKgwqDCoMKgwqDCoCAq IHRvIGVhY2ggb2YgdGhlIGVuYWJsZWQgc2xpY2VzLgo+Pj4gwqDCoMKgwqDCoCAqLwo+Pj4gLcKg wqDCoCBzc2V1LT5zdWJzbGljZV9tYXNrID0gKDEgPDwgc3NfbWF4KSAtIDE7Cj4+PiAtwqDCoMKg IHNzZXUtPnN1YnNsaWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU45X0YyX1NTX0RJU19NQVNLKSA+ Pgo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjlfRjJfU1NfRElTX1NI SUZUKTsKPj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayA9ICgxIDw8IHNzZXUtPm1heF9zdWJzbGlj ZXMpIC0gMTsKPj4+ICvCoMKgwqAgc3Vic2xpY2VfbWFzayAmPSB+KChmdXNlMiAmIEdFTjlfRjJf U1NfRElTX01BU0spID4+Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU45X0Yy X1NTX0RJU19TSElGVCk7Cj4+PiDCoCDCoMKgwqDCoMKgIC8qCj4+PiDCoMKgwqDCoMKgwqAgKiBJ dGVyYXRlIHRocm91Z2ggZW5hYmxlZCBzbGljZXMgYW5kIHN1YnNsaWNlcyB0bwo+Pj4gwqDCoMKg wqDCoMKgICogY291bnQgdGhlIHRvdGFsIGVuYWJsZWQgRVUuCj4+PiDCoMKgwqDCoMKgICovCj4+ PiAtwqDCoMKgIGZvciAocyA9IDA7IHMgPCBzX21heDsgcysrKSB7Cj4+PiArwqDCoMKgIGZvciAo cyA9IDA7IHMgPCBzc2V1LT5tYXhfc2xpY2VzOyBzKyspIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoIShzc2V1LT5zbGljZV9tYXNrICYgQklUKHMpKSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIHNraXAgZGlzYWJsZWQgc2xpY2UgKi8KPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gwqAgK8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNl c19tYXNrW3NdID0gc3Vic2xpY2VfbWFzazsKPj4+ICsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBl dV9kaXNhYmxlID0gSTkxNV9SRUFEKEdFTjlfRVVfRElTQUJMRShzKSk7Cj4+PiAtwqDCoMKgwqDC oMKgwqAgZm9yIChzcyA9IDA7IHNzIDwgc3NfbWF4OyBzcysrKSB7Cj4+PiArwqDCoMKgwqDCoMKg wqAgZm9yIChzcyA9IDA7IHNzIDwgc3NldS0+bWF4X3N1YnNsaWNlczsgc3MrKykgewo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGV1X3Blcl9zczsKPj4+IMKgIC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmICghKHNzZXUtPnN1YnNsaWNlX21hc2sgJiBCSVQoc3MpKSkKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdICYgQklU KHNzKSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHNraXAgZGlz YWJsZWQgc3Vic2xpY2UgKi8KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29udGludWU7Cj4+PiDCoCAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldV9wZXJfc3MgPSBldV9t YXggLSBod2VpZ2h0OCgoZXVfZGlzYWJsZSA+PiAoc3MqOCkpICYKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV1X21hc2spOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfbWFza1tzcyArIHMgKiBzc2V1LT5t YXhfc3Vic2xpY2VzXSA9Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH4oKGV1 X2Rpc2FibGUgPj4gKHNzKjgpKSAmIGV1X21hc2spOwo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZXVfcGVyX3NzID0gc3NldS0+bWF4X2V1c19wZXJfc3Vic2xpY2UgLQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2VpZ2h0OCgoZXVfZGlzYWJsZSA+PiAoc3Mq OCkpICYgZXVfbWFzayk7Cj4+Cj4+IFN0b3JlICJldV9kaXNhYmxlID4+IChzcyo4KSkgJiBldV9t YXNrIiBpbiBhIGxvY2FsIGZvciByZWFkYWJpbGl0eSAKPj4gc2luY2UgaXQgaXMgY2FsY3VsYXRl ZCB0d2ljZT8KPiAKPiBEb25lLgo+IAo+Pgo+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyoKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSZWNvcmQgd2hpY2ggc3Vi c2xpY2UocykgaGFzKGhhdmUpIDcgRVVzLiB3ZQo+Pj4gQEAgLTIwMiwxMSArMjY3LDExIEBAIHN0 YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZvX2luaXQoc3RydWN0IAo+Pj4gZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXVfcGVyX3NzID09IDcpCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlXzdldVtzXSB8PSBCSVQoc3Mp Owo+Pj4gLQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NldS0+ZXVfdG90YWwgKz0gZXVf cGVyX3NzOwo+Pgo+PiBZb3UgY291bGQgdGhlb3JldGljYWxseSBrZWVwIHRoaXMgcnVubmluZyB0 b3RhbCBhbmQgdGhlbiBhdCB0aGUgZW5kIAo+PiBjb21wYXJlIGFnYWluc3QgY29tcHV0ZV9ldV90 b3RhbCB1bmRlciBhIEdFTV9CVUdfT04sIGp1c3QgdG8gY2hlY2sgCj4+IGV2ZXJ5dGluZyBpcyB3 b3JraW5nIGFzIGV4cGVjdGVkLgo+Pgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDC oMKgwqAgfQo+Pj4gwqAgK8KgwqDCoCBzc2V1LT5ldV90b3RhbCA9IGNvbXB1dGVfZXVfdG90YWwo c3NldSk7Cj4+PiArCj4+PiDCoMKgwqDCoMKgIC8qCj4+PiDCoMKgwqDCoMKgwqAgKiBTS0wgaXMg ZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbgo+Pj4gwqDCoMKg wqDCoMKgICogb2YgRVUgYWNyb3NzIHN1YnNsaWNlcyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBh bnkgb25lCj4+PiBAQCAtMjMyLDggKzI5Nyw4IEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZv X2luaXQoc3RydWN0IAo+Pj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+PiDCoMKgwqDC oMKgIHNzZXUtPmhhc19ldV9wZyA9IHNzZXUtPmV1X3Blcl9zdWJzbGljZSA+IDI7Cj4+PiDCoCDC oMKgwqDCoMKgIGlmIChJU19HRU45X0xQKGRldl9wcml2KSkgewo+Pj4gLSNkZWZpbmUgSVNfU1Nf RElTQUJMRUQoc3MpwqDCoMKgICghKHNzZXUtPnN1YnNsaWNlX21hc2sgJiBCSVQoc3MpKSkKPj4+ IC3CoMKgwqDCoMKgwqDCoCBpbmZvLT5oYXNfcG9vbGVkX2V1ID0gaHdlaWdodDgoc3NldS0+c3Vi c2xpY2VfbWFzaykgPT0gMzsKPj4+ICsjZGVmaW5lIElTX1NTX0RJU0FCTEVEKHNzKcKgwqDCoCAo IShzc2V1LT5zdWJzbGljZXNfbWFza1swXSAmIEJJVChzcykpKQo+Pj4gK8KgwqDCoMKgwqDCoMKg IGluZm8tPmhhc19wb29sZWRfZXUgPSBod2VpZ2h0OChzc2V1LT5zdWJzbGljZXNfbWFza1swXSkg PT0gMzsKPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5taW5fZXVfaW5fcG9vbCA9IDA7 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGluZm8tPmhhc19wb29sZWRfZXUpIHsKPj4+IEBA IC0yNTEsMTkgKzMxNiwyMiBAQCBzdGF0aWMgdm9pZCBnZW45X3NzZXVfaW5mb19pbml0KHN0cnVj dCAKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+Pj4gwqAgc3RhdGljIHZvaWQgYnJv YWR3ZWxsX3NzZXVfaW5mb19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+Pj4gKmRldl9w cml2KQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9 ICZta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KS0+c3NldTsKPj4+IC3CoMKgwqAgY29uc3Qg aW50IHNfbWF4ID0gMywgc3NfbWF4ID0gMywgZXVfbWF4ID0gODsKPj4+IMKgwqDCoMKgwqAgaW50 IHMsIHNzOwo+Pj4gLcKgwqDCoCB1MzIgZnVzZTIsIGV1X2Rpc2FibGVbM107IC8qIHNfbWF4ICov Cj4+PiArwqDCoMKgIHUzMiBmdXNlMiwgc3Vic2xpY2VfbWFzaywgZXVfZGlzYWJsZVszXTsgLyog c19tYXggKi8KPj4+IMKgIMKgwqDCoMKgwqAgZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7 Cj4+PiDCoMKgwqDCoMKgIHNzZXUtPnNsaWNlX21hc2sgPSAoZnVzZTIgJiBHRU44X0YyX1NfRU5B X01BU0spID4+IAo+Pj4gR0VOOF9GMl9TX0VOQV9TSElGVDsKPj4+ICvCoMKgwqAgc3NldS0+bWF4 X3NsaWNlcyA9IDM7Cj4+PiArwqDCoMKgIHNzZXUtPm1heF9zdWJzbGljZXMgPSAzOwo+Pj4gK8Kg wqDCoCBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDg7Cj4+PiArCj4+PiDCoMKgwqDCoMKg IC8qCj4+PiDCoMKgwqDCoMKgwqAgKiBUaGUgc3Vic2xpY2UgZGlzYWJsZSBmaWVsZCBpcyBnbG9i YWwsIGkuZS4gaXQgYXBwbGllcwo+Pj4gwqDCoMKgwqDCoMKgICogdG8gZWFjaCBvZiB0aGUgZW5h YmxlZCBzbGljZXMuCj4+PiDCoMKgwqDCoMKgwqAgKi8KPj4+IC3CoMKgwqAgc3NldS0+c3Vic2xp Y2VfbWFzayA9IEdFTk1BU0soc3NfbWF4IC0gMSwgMCk7Cj4+PiAtwqDCoMKgIHNzZXUtPnN1YnNs aWNlX21hc2sgJj0gfigoZnVzZTIgJiBHRU44X0YyX1NTX0RJU19NQVNLKSA+Pgo+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfRjJfU1NfRElTX1NISUZUKTsKPj4+ICvC oMKgwqAgc3Vic2xpY2VfbWFzayA9IEdFTk1BU0soc3NldS0+bWF4X3N1YnNsaWNlcyAtIDEsIDAp Owo+Pj4gK8KgwqDCoCBzdWJzbGljZV9tYXNrICY9IH4oKGZ1c2UyICYgR0VOOF9GMl9TU19ESVNf TUFTSykgPj4KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfRjJfU1NfRElT X1NISUZUKTsKPj4+IMKgIMKgwqDCoMKgwqAgZXVfZGlzYWJsZVswXSA9IEk5MTVfUkVBRChHRU44 X0VVX0RJU0FCTEUwKSAmIAo+Pj4gR0VOOF9FVV9ESVMwX1MwX01BU0s7Cj4+PiDCoMKgwqDCoMKg IGV1X2Rpc2FibGVbMV0gPSAoSTkxNV9SRUFEKEdFTjhfRVVfRElTQUJMRTApID4+IAo+Pj4gR0VO OF9FVV9ESVMwX1MxX1NISUZUKSB8Cj4+PiBAQCAtMjc3LDMwICszNDUsMzYgQEAgc3RhdGljIHZv aWQgYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0KHN0cnVjdCAKPj4+IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQo+Pj4gwqDCoMKgwqDCoMKgICogSXRlcmF0ZSB0aHJvdWdoIGVuYWJsZWQgc2xp Y2VzIGFuZCBzdWJzbGljZXMgdG8KPj4+IMKgwqDCoMKgwqDCoCAqIGNvdW50IHRoZSB0b3RhbCBl bmFibGVkIEVVLgo+Pj4gwqDCoMKgwqDCoMKgICovCj4+PiAtwqDCoMKgIGZvciAocyA9IDA7IHMg PCBzX21heDsgcysrKSB7Cj4+PiArwqDCoMKgIGZvciAocyA9IDA7IHMgPCBzc2V1LT5tYXhfc2xp Y2VzOyBzKyspIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShzc2V1LT5zbGljZV9tYXNr ICYgQklUKHMpKSkKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHNraXAgZGlzYWJs ZWQgc2xpY2UgKi8KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4g wqAgLcKgwqDCoMKgwqDCoMKgIGZvciAoc3MgPSAwOyBzcyA8IHNzX21heDsgc3MrKykgewo+Pj4g K8KgwqDCoMKgwqDCoMKgIHNzZXUtPnN1YnNsaWNlc19tYXNrW3NdID0gc3Vic2xpY2VfbWFzazsK Pj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKHNzID0gMDsgc3MgPCBzc2V1LT5tYXhfc3Vi c2xpY2VzOyBzcysrKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgbl9kaXNh YmxlZDsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKHNzZXUtPnN1YnNsaWNl X21hc2sgJiBCSVQoc3MpKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKHNzZXUt PnN1YnNsaWNlc19tYXNrW3NzXSAmIEJJVChzcykpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBza2lwIGRpc2FibGVkIHN1YnNsaWNlICovCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gwqAgLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbl9kaXNhYmxlZCA9IGh3ZWlnaHQ4KGV1X2Rpc2FibGVbc10gPj4gKHNzICogZXVf bWF4KSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2V1LT5ldV9tYXNrW3NzICsgcyAq IHNzZXUtPm1heF9zdWJzbGljZXNdID0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfihldV9kaXNhYmxlW3NdID4+Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAoc3MgKiBzc2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSkpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbl9kaXNhYmxlZCA9IGh3ZWlnaHQ4KGV1X2Rpc2FibGVbc10gPj4KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoc3MgKiBz c2V1LT5tYXhfZXVzX3Blcl9zdWJzbGljZSkpOwo+Pgo+PiBBcyBhYm92ZSBjb3VsZCB1c2UgYSBs b2NhbCBmb3IgImV1X2Rpc2FibGVbc10gPj4gKHNzICogCj4+IHNzZXUtPm1heF9ldXNfcGVyX3N1 YnNsaWNlKSIKPiAKPiBEb25lLgo+IAo+Pgo+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLyoKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSZWNvcmQgd2hpY2ggc3Vi c2xpY2VzIGhhdmUgNyBFVXMuCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZXVfbWF4IC0gbl9kaXNhYmxlZCA9PSA3KQo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHNzZXUtPm1heF9ldXNfcGVyX3N1YnNsaWNl IC0gbl9kaXNhYmxlZCA9PSA3KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzc2V1LT5zdWJzbGljZV83ZXVbc10gfD0gMSA8PCBzczsKPj4+IC0KPj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNzZXUtPmV1X3RvdGFsICs9IGV1X21heCAtIG5fZGlzYWJsZWQ7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCArwqDCoMKgIHNzZXUt PmV1X3RvdGFsID0gY29tcHV0ZV9ldV90b3RhbChzc2V1KTsKPj4+ICsKPj4+IMKgwqDCoMKgwqAg LyoKPj4+IMKgwqDCoMKgwqDCoCAqIEJEVyBpcyBleHBlY3RlZCB0byBhbHdheXMgaGF2ZSBhIHVu aWZvcm0gZGlzdHJpYnV0aW9uIG9mIEVVIAo+Pj4gYWNyb3NzCj4+PiDCoMKgwqDCoMKgwqAgKiBz dWJzbGljZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IG9uZSBFVSBpbiBhbnkgb25lIAo+ Pj4gc3Vic2xpY2UgbWF5Cj4+PiBAQCAtNDM3LDYgKzUxMSw3IEBAIHZvaWQgaW50ZWxfZGV2aWNl X2luZm9fcnVudGltZV9pbml0KHN0cnVjdCAKPj4+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmluZm8g PSBta3dyaXRlX2RldmljZV9pbmZvKGRldl9wcml2KTsKPj4+IMKgwqDCoMKgwqAgZW51bSBwaXBl IHBpcGU7Cj4+PiArwqDCoMKgIGludCBzOwo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSAxMCkgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGZvcl9lYWNoX3BpcGUo ZGV2X3ByaXYsIHBpcGUpCj4+PiBAQCAtNTQ4LDkgKzYyMywxMSBAQCB2b2lkIGludGVsX2Rldmlj ZV9pbmZvX3J1bnRpbWVfaW5pdChzdHJ1Y3QgCj4+PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKPj4+IMKgwqDCoMKgwqAgRFJNX0RFQlVHX0RSSVZFUigic2xpY2UgdG90YWw6ICV1XG4iLCAK Pj4+IGh3ZWlnaHQ4KGluZm8tPnNzZXUuc2xpY2VfbWFzaykpOwo+Pj4gwqDCoMKgwqDCoCBEUk1f REVCVUdfRFJJVkVSKCJzdWJzbGljZSB0b3RhbDogJXVcbiIsCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNzZXVfc3Vic2xpY2VfdG90YWwoJmluZm8tPnNzZXUpKTsKPj4+IC3CoMKg wqAgRFJNX0RFQlVHX0RSSVZFUigic3Vic2xpY2UgbWFzayAlMDR4XG4iLCBpbmZvLT5zc2V1LnN1 YnNsaWNlX21hc2spOwo+Pj4gLcKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJzdWJzbGljZSBwZXIg c2xpY2U6ICV1XG4iLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2VpZ2h0OChpbmZv LT5zc2V1LnN1YnNsaWNlX21hc2spKTsKPj4+ICvCoMKgwqAgZm9yIChzID0gMDsgcyA8IEFSUkFZ X1NJWkUoaW5mby0+c3NldS5zdWJzbGljZXNfbWFzayk7IHMrKykgewo+Pj4gK8KgwqDCoMKgwqDC oMKgIERSTV9ERUJVR19EUklWRVIoInN1YnNsaWNlIG1hc2sgJTA0eFxuIiwgCj4+PiBpbmZvLT5z c2V1LnN1YnNsaWNlc19tYXNrW3NdKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fREVCVUdfRFJJ VkVSKCJzdWJzbGljZSBwZXIgc2xpY2U6ICV1XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGh3ZWlnaHQ4KGluZm8tPnNzZXUuc3Vic2xpY2VzX21hc2tbc10pKTsKPj4K Pj4gUHV0IGEgc3Vic2xpY2UgaW5kZXggaW50byBtZXNzYWdlcz8KPiAKPiBEb25lLgo+IAo+Pgo+ Pj4gK8KgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklWRVIoIkVVIHRvdGFsOiAl dVxuIiwgaW5mby0+c3NldS5ldV90b3RhbCk7Cj4+PiDCoMKgwqDCoMKgIERSTV9ERUJVR19EUklW RVIoIkVVIHBlciBzdWJzbGljZTogJXVcbiIsIAo+Pj4gaW5mby0+c3NldS5ldV9wZXJfc3Vic2xp Y2UpOwo+Pj4gwqDCoMKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJoYXMgc2xpY2UgcG93ZXIgZ2F0 aW5nOiAlc1xuIiwKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s cmMuYyAKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPj4+IGluZGV4IDJl MzhmYmZkZjA4Zi4uNmU1NWI4NDJjMjFkIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCj4+PiBAQCAtMjA3Miw3ICsyMDcyLDcgQEAgbWFrZV9ycGNzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPj4+IMKgIMKgwqDCoMKgwqAgaWYgKElOVEVMX0lORk8oZGV2X3By aXYpLT5zc2V1Lmhhc19zdWJzbGljZV9wZykgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJwY3Mg fD0gR0VOOF9SUENTX1NTX0NOVF9FTkFCTEU7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcnBjcyB8PSBo d2VpZ2h0OChJTlRFTF9JTkZPKGRldl9wcml2KS0+c3NldS5zdWJzbGljZV9tYXNrKSA8PAo+Pj4g K8KgwqDCoMKgwqDCoMKgIHJwY3MgfD0gCj4+PiBod2VpZ2h0OChJTlRFTF9JTkZPKGRldl9wcml2 KS0+c3NldS5zdWJzbGljZXNfbWFza1swXSkgPDwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEdFTjhfUlBDU19TU19DTlRfU0hJRlQ7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcnBjcyB8 PSBHRU44X1JQQ1NfRU5BQkxFOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIAo+Pj4gYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKPj4+IGluZGV4IGM1ZmYyMDNlNDJkNi4uYTk0YmMx YjVjNTAyIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgK Pj4+IEBAIC05MCw3ICs5MCw3IEBAIGhhbmdjaGVja19hY3Rpb25fdG9fc3RyKGNvbnN0IGVudW0g Cj4+PiBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrX2FjdGlvbiBhKQo+Pj4gwqAgwqAgI2RlZmluZSBp bnN0ZG9uZV9zdWJzbGljZV9tYXNrKGRldl9wcml2X18pIFwKPj4+IMKgwqDCoMKgwqAgKElOVEVM X0dFTihkZXZfcHJpdl9fKSA9PSA3ID8gXAo+Pj4gLcKgwqDCoMKgIDEgOiBJTlRFTF9JTkZPKGRl dl9wcml2X18pLT5zc2V1LnN1YnNsaWNlX21hc2spCj4+PiArwqDCoMKgwqAgMSA6IElOVEVMX0lO Rk8oZGV2X3ByaXZfXyktPnNzZXUuc3Vic2xpY2VzX21hc2tbMF0pCj4+PiDCoCDCoCAjZGVmaW5l IGZvcl9lYWNoX2luc3Rkb25lX3NsaWNlX3N1YnNsaWNlKGRldl9wcml2X18sIHNsaWNlX18sIAo+ Pj4gc3Vic2xpY2VfXykgXAo+Pj4gwqDCoMKgwqDCoCBmb3IgKChzbGljZV9fKSA9IDAsIChzdWJz bGljZV9fKSA9IDA7IFwKPj4+Cj4+Cj4+IFJlZ2FyZHMsCj4+Cj4+IFR2cnRrbwo+Pgo+IAo+IApf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK