From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: Re: [PATCH v4 4/4] drm/amd/display: Set FreeSync state using drm VRR properties Date: Thu, 11 Oct 2018 17:24:21 -0400 Message-ID: References: <20181011163942.28267-1-nicholas.kazlauskas@amd.com> <20181011163942.28267-5-nicholas.kazlauskas@amd.com> <42b237df-9c30-4cd0-0891-d0b05b54533e@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Kazlauskas, Nicholas" , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, michel@daenzer.net, manasi.d.navare@intel.com, Alexander.Deucher@amd.com, Marek.Olsak@amd.com List-Id: dri-devel@lists.freedesktop.org CgpPbiAyMDE4LTEwLTExIDA0OjU2IFBNLCBLYXpsYXVza2FzLCBOaWNob2xhcyB3cm90ZToKPiBP biAxMC8xMS8yMDE4IDA0OjM5IFBNLCBIYXJyeSBXZW50bGFuZCB3cm90ZToKPj4gT24gMjAxOC0x MC0xMSAxMjozOSBQTSwgTmljaG9sYXMgS2F6bGF1c2thcyB3cm90ZToKPj4+IFN1cHBvcnQgZm9y IEFNREdQVSBzcGVjaWZpYyBGcmVlU3luYyBwcm9wZXJ0aWVzIGFuZCBpb2N0bHMgYXJlIGRyb3Bw ZWQKPj4+IGZyb20gYW1kZ3B1X2RtIGluIGZhdm9yIG9mIHN1cHBvcnRpbmcgZHJtIHZhcmlhYmxl IHJlZnJlc2ggcmF0ZQo+Pj4gcHJvcGVydGllcy4KPj4+Cj4+PiBUaGUgZHJtIHZycl9jYXBhYmxl IHByb3BlcnR5IGlzIG5vdyBhdHRhY2hlZCB0byBhbnkgRFAvSERNSSBjb25uZWN0b3IuCj4+PiBJ dHMgdmFsdWUgaXMgdXBkYXRlZCBhY2NvcmRpbmdseSB0byB0aGUgY29ubmVjdG9yJ3MgRnJlZVN5 bmMgY2FwYWJpbHRpeS4KPj4+Cj4+PiBUaGUgZnJlZXN5bmNfZW5hYmxlIGxvZ2ljIGFuZCBpb2N0 bCBjb250cm9sIGhhcyBoYXMgYmVlbiBkcm9wcGVkIGluCj4+PiBmYXZvciBvZiB1dGlsaXppbmcg dGhlIHZycl9lbmFibGVkIG9uIHRoZSBkcm0gQ1JUQy4gVGhpcyBhbGxvd3MgZm9yIG1vcmUKPj4+ IGZpbmUgZ3JhaW5lZCBhdG9taWMgY29udHJvbCBvdmVyIHdoaWNoIENSVENzIHNob3VsZCBzdXBw b3J0IHZhcmlhYmxlCj4+PiByZWZyZXNoIHJhdGUuCj4+Pgo+Pj4gVG8gaGFuZGxlIHN0YXRlIGNo YW5nZXMgZm9yIHZycl9lbmFibGVkIGl0IHdhcyBlYXNpZXN0IHRvIGRyb3AgdGhlCj4+PiBmb3Jj ZWQgbW9kZXNldCBvbiBmcmVlc3luY19lbmFibGVkIGNoYW5nZS4gVGhpcyBwYXRjaCBub3cgcGVy Zm9ybXMgdGhlCj4+PiByZXF1aXJlZCBzdHJlYW0gdXBkYXRlcyB3aGVuIHBsYW5lcyBhcmUgZmxp cHBlZC4KPj4+Cj4+PiBUaGlzIGlzIGRvbmUgZm9yIGEgZmV3IHJlYXNvbnM6Cj4+Pgo+Pj4gKDEp IFZSUiBzdHJlYW0gdXBkYXRlcyBjYW4gYmUgZG9uZSBpbiB0aGUgZmFzdCB1cGRhdGUgcGF0aAo+ Pj4KPj4+ICgyKSBhbWRncHVfZG1fYXRvbWljX2NoZWNrIHdvdWxkIG5lZWQgdG8gYmUgaGFja2Vk IGFwYXJ0IHRvIGNoZWNrCj4+PiDCoMKgwqDCoCBkZXNpcmVkIHZhcmlhYmxlIHJlZnJlc2ggc3Rh dGUgYW5kIGNhcGFiaWxpdHkgYmVmb3JlIHRoZSBDUlRDCj4+PiDCoMKgwqDCoCBkaXNhYmxlIHBh c3MuCj4+Pgo+Pj4gKDMpIFBlcmZvcm1pbmcgVlJSIHN0cmVhbSB1cGRhdGVzIG9uLWZsaXAgaXMg bmVlZGVkIGZvciBlbmFibGluZyBCVFIKPj4+IMKgwqDCoMKgIHN1cHBvcnQuCj4+Pgo+Pj4gVlJS IHBhY2tldHMgYW5kIHRpbWluZyBhZGp1c3RtZW50cyBhcmUgbm93IHRyYWNrZWQgYW5kIGNvbXBh cmVkIHRvCj4+PiBwcmV2aW91cyB2YWx1ZXMgc2VudCB0byB0aGUgaGFyZHdhcmUuCj4+Pgo+Pj4g U2lnbmVkLW9mZi1ieTogTmljaG9sYXMgS2F6bGF1c2thcyA8bmljaG9sYXMua2F6bGF1c2thc0Bh bWQuY29tPgo+Pj4gLS0tCj4+PiDCoCAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0v YW1kZ3B1X2RtLmMgfCAyNTUgKysrKysrKysrLS0tLS0tLS0tCj4+PiDCoCAuLi4vZ3B1L2RybS9h bWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmggfMKgwqAgNyArLQo+Pj4gwqAgMiBmaWxl cyBjaGFuZ2VkLCAxMzggaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9k bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+ Pj4gaW5kZXggNmEyMzQyZDcyNzQyLi5kNWRlNGI5MWUxNDQgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4+PiBAQCAt MTgwMiw3MiArMTgwMiw2IEBAIHN0YXRpYyB2b2lkIGRtX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiDCoMKgwqDCoMKgIC8qIFRPRE86IGltcGxlbWVudCBs YXRlciAqLwo+Pj4gwqAgfQo+Pj4gwqAgLXN0YXRpYyBpbnQgYW1kZ3B1X25vdGlmeV9mcmVlc3lu YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCj4+PiAtewo+Pj4gLcKgwqDC oCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4+PiAtwqDCoMKgIHN0cnVjdCBkcm1f bW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4+PiAtwqDCoMKgIHN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKPj4+IC3CoMKgwqAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPj4+IC3CoMKg wqAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25fc3RhdGUsICpuZXdfY29uX3N0 YXRlOwo+Pj4gLcKgwqDCoCBpbnQgcmV0ID0gMDsKPj4+IC3CoMKgwqAgdWludDhfdCBpOwo+Pj4g LcKgwqDCoCBib29sIGVuYWJsZSA9IGZhbHNlOwo+Pj4gLQo+Pj4gLcKgwqDCoCBkcm1fbW9kZXNl dF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4+PiAtCj4+PiAtwqDCoMKgIHN0YXRlID0gZHJtX2F0 b21pY19zdGF0ZV9hbGxvYyhkZXYpOwo+Pj4gLcKgwqDCoCBpZiAoIXN0YXRlKSB7Cj4+PiAtwqDC oMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsK Pj4+IC3CoMKgwqAgfQo+Pj4gLcKgwqDCoCBzdGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4Owo+Pj4g LQo+Pj4gLXJldHJ5Ogo+Pj4gLcKgwqDCoCBkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYpIHsK Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXQgPSBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0 b3JzKHN0YXRlLCBjcnRjKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+Pj4gLQo+Pj4gLcKgwqDCoMKgwqDCoMKgIC8q IFRPRE8gcmV3b3JrIGFtZGdwdV9kbV9jb21taXRfcGxhbmVzIHNvIHdlIGRvbid0IG5lZWQgdGhp cyAqLwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX3Bs YW5lcyhzdGF0ZSwgY3J0Yyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gLcKg wqDCoCBmb3JfZWFjaF9vbGRuZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uZWN0b3Is IG9sZF9jb25fc3RhdGUsIG5ld19jb25fc3RhdGUsIGkpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZG1fY29ubmVjdG9yX3N0YXRlICpkbV9uZXdfY29uX3N0YXRlID0gdG9fZG1fY29ubmVj dG9yX3N0YXRlKG5ld19jb25fc3RhdGUpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFt ZGdwdV9jcnRjICphY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGRtX25ld19jb25fc3RhdGUtPmJhc2Uu Y3J0Yyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtX2NydGNfc3RhdGUgKmRtX25ld19j cnRjX3N0YXRlOwo+Pj4gLQo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghYWNydGMpIHsKPj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTU0VSVCgwKTsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRpbnVlOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIH0KPj4+IC0KPj4+IC3CoMKgwqDCoMKg wqDCoCBuZXdfY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRl LCAmYWNydGMtPmJhc2UpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGRtX25ld19jcnRjX3N0YXRlID0g dG9fZG1fY3J0Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSk7Cj4+PiAtCj4+PiAtwqDCoMKgwqDCoMKg wqAgZG1fbmV3X2NydGNfc3RhdGUtPmZyZWVzeW5jX2VuYWJsZWQgPSBlbmFibGU7Cj4+PiAtwqDC oMKgIH0KPj4+IC0KPj4+IC3CoMKgwqAgcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ Pj4gLQo+Pj4gLWZhaWw6Cj4+PiAtwqDCoMKgIGlmIChyZXQgPT0gLUVERUFETEspIHsKPj4+IC3C oMKgwqDCoMKgwqDCoCBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKPj4+IC3CoMKgwqDC oMKgwqDCoCBkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGdv dG8gcmV0cnk7Cj4+PiAtwqDCoMKgIH0KPj4+IC0KPj4+IC3CoMKgwqAgZHJtX2F0b21pY19zdGF0 ZV9wdXQoc3RhdGUpOwo+Pj4gLQo+Pj4gLW91dDoKPj4+IC3CoMKgwqAgZHJtX21vZGVzZXRfZHJv cF9sb2NrcygmY3R4KTsKPj4+IC3CoMKgwqAgZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgp Owo+Pj4gLcKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gLX0KPj4+IMKgIMKgIHN0YXRpYyBjb25zdCBz dHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfZnVuY3MgZG1fZGlzcGxheV9mdW5jcyA9IHsKPj4+IMKgwqDC oMKgwqAgLmJhbmR3aWR0aF91cGRhdGUgPSBkbV9iYW5kd2lkdGhfdXBkYXRlLCAvKiBjYWxsZWQg dW5jb25kaXRpb25hbGx5ICovCj4+PiBAQCAtMTg4MSw3ICsxODE1LDYgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBhbWRncHVfZGlzcGxheV9mdW5jcyBkbV9kaXNwbGF5X2Z1bmNzID0gewo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGRtX2NydGNfZ2V0X3NjYW5vdXRwb3MsLyogY2FsbGVkIHVuY29uZGl0 aW9uYWxseSAqLwo+Pj4gwqDCoMKgwqDCoCAuYWRkX2VuY29kZXIgPSBOVUxMLCAvKiBWQklPUyBw YXJzaW5nLiBEQUwgZG9lcyBpdC4gKi8KPj4+IMKgwqDCoMKgwqAgLmFkZF9jb25uZWN0b3IgPSBO VUxMLCAvKiBWQklPUyBwYXJzaW5nLiBEQUwgZG9lcyBpdC4gKi8KPj4+IC3CoMKgwqAgLm5vdGlm eV9mcmVlc3luYyA9IGFtZGdwdV9ub3RpZnlfZnJlZXN5bmMsCj4+Cj4+IFBsZWFzZSBhbHNvIGRy b3AgZnJvbSBhbWRncHVfZGlzcGxheV9mdW5jcyBkZWZpbml0aW9uIGluIGFtZGdwdV9tb2RlLmgu IE1pZ2h0IHdhbnQgdG8gZHJvcCB0aGUgc2V0X2ZyZWVzeW5jX3Byb3BlcnR5IGZyb20gdGhlcmUg YXMgd2VsbC4KPiAKPiBPaCByaWdodCwgSSBmb3Jnb3QgYWJvdXQgdGhvc2UuIFdpbGwgZG8uCj4g Cj4+Cj4+PiDCoCDCoCB9Owo+Pj4gwqAgQEAgLTI4MzQsNyArMjc2Nyw4IEBAIGRtX2NydGNfZHVw bGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPj4+IMKgIMKgwqDCoMKgwqAgc3Rh dGUtPmFkanVzdCA9IGN1ci0+YWRqdXN0Owo+Pj4gwqDCoMKgwqDCoCBzdGF0ZS0+dnJyX2luZm9w YWNrZXQgPSBjdXItPnZycl9pbmZvcGFja2V0Owo+Pj4gLcKgwqDCoCBzdGF0ZS0+ZnJlZXN5bmNf ZW5hYmxlZCA9IGN1ci0+ZnJlZXN5bmNfZW5hYmxlZDsKPj4+ICvCoMKgwqAgc3RhdGUtPnZycl9z dXBwb3J0ZWQgPSBjdXItPnZycl9zdXBwb3J0ZWQ7Cj4+PiArwqDCoMKgIHN0YXRlLT5mcmVlc3lu Y19jb25maWcgPSBjdXItPmZyZWVzeW5jX2NvbmZpZzsKPj4+IMKgIMKgwqDCoMKgwqAgLyogVE9E TyBEdXBsaWNhdGUgZGNfc3RyZWFtIGFmdGVyIG9iamVjdHMgYXJlIHN0cmVhbSBvYmplY3QgaXMg ZmxhdHRlbmVkICovCj4+PiDCoCBAQCAtMzA1Myw4ICsyOTg3LDYgQEAgYW1kZ3B1X2RtX2Nvbm5l Y3Rvcl9hdG9taWNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCj4+PiDCoMKgwqDCoMKgIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0 ZV9zdGF0ZShjb25uZWN0b3IsICZuZXdfc3RhdGUtPmJhc2UpOwo+Pj4gwqAgwqDCoMKgwqDCoCBu ZXdfc3RhdGUtPmZyZWVzeW5jX2NhcGFibGUgPSBzdGF0ZS0+ZnJlZXN5bmNfY2FwYWJsZTsKPj4+ IC3CoMKgwqAgbmV3X3N0YXRlLT5mcmVlc3luY19lbmFibGUgPSBzdGF0ZS0+ZnJlZXN5bmNfZW5h YmxlOwo+Pj4gLQo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gJm5ld19zdGF0ZS0+YmFzZTsKPj4+IMKg IH0KPj4+IMKgIEBAIC0zODAwLDYgKzM3MzIsMTEgQEAgdm9pZCBhbWRncHVfZG1fY29ubmVjdG9y X2luaXRfaGVscGVyKHN0cnVjdCBhbWRncHVfZGlzcGxheV9tYW5hZ2VyICpkbSwKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+bW9kZV9pbmZvLnVuZGVyc2Nhbl92 Ym9yZGVyX3Byb3BlcnR5LAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw KTsKPj4+IMKgICvCoMKgwqAgaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RP Ul9IRE1JQSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RF X0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9jb25uZWN0 b3JfYXR0YWNoX3Zycl9jYXBhYmxlX3Byb3BlcnR5KAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJmFjb25uZWN0b3ItPmJhc2UpOwo+Pj4gK8KgwqDCoCB9Cj4+PiDCoCB9Cj4+PiDCoCDCoCBz dGF0aWMgaW50IGFtZGdwdV9kbV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFw LAo+Pj4gQEAgLTQxNzYsNiArNDExMyw3NyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2ZsaXBfaXNy KHN0cnVjdCBhbWRncHVfY3J0YyAqYWNydGMpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjcnRjLT5jcnRjX2lkKTsKPj4+IMKgIH0KPj4+ IMKgICtzdGF0aWMgdm9pZCB1cGRhdGVfZnJlZXN5bmNfc3RhdGVfb25fc3RyZWFtKAo+Pj4gK8Kg wqDCoCBzdHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfbWFuYWdlciAqZG0sCj4+PiArwqDCoMKgIHN0cnVj dCBkbV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSwKPj4+ICvCoMKgwqAgc3RydWN0IGRjX3N0 cmVhbV9zdGF0ZSAqbmV3X3N0cmVhbSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBtb2RfdnJy X3BhcmFtcyB2cnIgPSB7MH07Cj4+PiArwqDCoMKgIHN0cnVjdCBkY19pbmZvX3BhY2tldCB2cnJf aW5mb3BhY2tldCA9IHswfTsKPj4+ICvCoMKgwqAgc3RydWN0IG1vZF9mcmVlc3luY19jb25maWcg Y29uZmlnID0gbmV3X2NydGNfc3RhdGUtPmZyZWVzeW5jX2NvbmZpZzsKPj4+ICsKPj4+ICvCoMKg wqAgaWYgKCFuZXdfc3RyZWFtKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICsKPj4+ ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFRPRE86IERldGVybWluZSB3aHkgbWluL21heCB0 b3RhbHMgYW5kIHZyZWZyZXNoIGNhbiBiZSAwIGhlcmUuCj4+PiArwqDCoMKgwqAgKiBGb3Igbm93 IGl0J3Mgc3VmZmljaWVudCB0byBqdXN0IGd1YXJkIGFnYWluc3QgdGhlc2UgY29uZGl0aW9ucy4K Pj4+ICvCoMKgwqDCoCAqLwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIW5ld19zdHJlYW0tPnRpbWlu Zy5oX3RvdGFsIHx8ICFuZXdfc3RyZWFtLT50aW1pbmcudl90b3RhbCkKPj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm47Cj4+PiArCj4+PiArwqDCoMKgIGlmIChuZXdfY3J0Y19zdGF0ZS0+dnJyX3N1 cHBvcnRlZCAmJgo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvbmZpZy5taW5fcmVmcmVzaF9pbl91aHog JiYKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb25maWcubWF4X3JlZnJlc2hfaW5fdWh6KSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgY29uZmlnLnN0YXRlID0gbmV3X2NydGNfc3RhdGUtPmJhc2UudnJyX2Vu YWJsZWQgPwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVlJSX1NUQVRFX0FDVElWRV9WQVJJ QUJMRSA6Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWUlJfU1RBVEVfSU5BQ1RJVkU7Cj4+ PiArwqDCoMKgIH0gZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgY29uZmlnLnN0YXRlID0gVlJS X1NUQVRFX1VOU1VQUE9SVEVEOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIG1vZF9m cmVlc3luY19idWlsZF92cnJfcGFyYW1zKGRtLT5mcmVlc3luY19tb2R1bGUsCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ld19zdHJlYW0sCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjb25maWcsICZ2cnIpOwo+ Pj4gKwo+Pj4gK8KgwqDCoCBtb2RfZnJlZXN5bmNfYnVpbGRfdnJyX2luZm9wYWNrZXQoCj4+PiAr wqDCoMKgwqDCoMKgwqAgZG0tPmZyZWVzeW5jX21vZHVsZSwKPj4+ICvCoMKgwqDCoMKgwqDCoCBu ZXdfc3RyZWFtLAo+Pj4gK8KgwqDCoMKgwqDCoMKgICZ2cnIsCj4+PiArwqDCoMKgwqDCoMKgwqAg cGFja2V0X3R5cGVfdnJyLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHRyYW5zZmVyX2Z1bmNfdW5rbm93 biwKPj4+ICvCoMKgwqDCoMKgwqDCoCAmdnJyX2luZm9wYWNrZXQpOwo+Pj4gKwo+Pj4gK8KgwqDC oCBuZXdfY3J0Y19zdGF0ZS0+ZnJlZXN5bmNfdGltaW5nX2NoYW5nZWQgPQo+Pj4gK8KgwqDCoMKg wqDCoMKgIChtZW1jbXAoJm5ld19jcnRjX3N0YXRlLT5hZGp1c3QsCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmdnJyLmFkanVzdCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVv Zih2cnIuYWRqdXN0KSkgIT0gMCk7Cj4+PiArCj4+PiArwqDCoMKgIG5ld19jcnRjX3N0YXRlLT5m cmVlc3luY192cnJfaW5mb19jaGFuZ2VkID0KPj4+ICvCoMKgwqDCoMKgwqDCoCAobWVtY21wKCZu ZXdfY3J0Y19zdGF0ZS0+dnJyX2luZm9wYWNrZXQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmdnJyX2luZm9wYWNrZXQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YodnJy X2luZm9wYWNrZXQpKSAhPSAwKTsKPj4+ICsKPj4+ICvCoMKgwqAgbmV3X2NydGNfc3RhdGUtPmFk anVzdCA9IHZyci5hZGp1c3Q7Cj4+PiArwqDCoMKgIG5ld19jcnRjX3N0YXRlLT52cnJfaW5mb3Bh Y2tldCA9IHZycl9pbmZvcGFja2V0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBuZXdfc3RyZWFtLT5hZGp1 c3QgPSBuZXdfY3J0Y19zdGF0ZS0+YWRqdXN0Owo+Pj4gK8KgwqDCoCBuZXdfc3RyZWFtLT52cnJf aW5mb3BhY2tldCA9IHZycl9pbmZvcGFja2V0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAobmV3X2Ny dGNfc3RhdGUtPmZyZWVzeW5jX3Zycl9pbmZvX2NoYW5nZWQpCj4+PiArwqDCoMKgwqDCoMKgwqAg RFJNX0RFQlVHX0tNUygiVlJSIHBhY2tldCB1cGRhdGU6IGNydGM9JXUgZW5hYmxlZD0lZCBzdGF0 ZT0lZCIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZXdfY3J0Y19z dGF0ZS0+YmFzZS5jcnRjLT5iYXNlLmlkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKGludCluZXdfY3J0Y19zdGF0ZS0+YmFzZS52cnJfZW5hYmxlZCwKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChpbnQpdnJyLnN0YXRlKTsKPj4+ICsKPj4+ ICvCoMKgwqAgaWYgKG5ld19jcnRjX3N0YXRlLT5mcmVlc3luY190aW1pbmdfY2hhbmdlZCkKPj4+ ICvCoMKgwqDCoMKgwqDCoCBEUk1fREVCVUdfS01TKCJWUlIgdGltaW5nIHVwZGF0ZTogY3J0Yz0l dSBtaW49JXUgbWF4PSV1XG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmV3X2NydGNfc3RhdGUtPmJhc2UuY3J0Yy0+YmFzZS5pZCwKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZyci5hZGp1c3Qudl90b3RhbF9taW4sCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2cnIuYWRqdXN0LnZfdG90YWxfbWF4KTsKPj4+ ICt9Cj4+PiArCj4+PiDCoCAvKgo+Pj4gwqDCoCAqIEV4ZWN1dGVzIGZsaXAKPj4+IMKgwqAgKgo+ Pj4gQEAgLTQxOTcsNiArNDIwNSw3IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9kbV9kb19mbGlwKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGRjX2ZsaXBfYWRkcnMg YWRkciA9IHsgezB9IH07Cj4+PiDCoMKgwqDCoMKgIC8qIFRPRE8gZWxpbWluYXRlIG9yIHJlbmFt ZSBzdXJmYWNlX3VwZGF0ZSAqLwo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGNfc3VyZmFjZV91cGRh dGUgc3VyZmFjZV91cGRhdGVzWzFdID0geyB7MH0gfTsKPj4+ICvCoMKgwqAgc3RydWN0IGRjX3N0 cmVhbV91cGRhdGUgc3RyZWFtX3VwZGF0ZSA9IHswfTsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGRt X2NydGNfc3RhdGUgKmFjcnRjX3N0YXRlID0gdG9fZG1fY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7 Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkY19zdHJlYW1fc3RhdHVzICpzdHJlYW1fc3RhdHVzOwo+ Pj4gwqAgQEAgLTQyNjksMTEgKzQyNzgsMjYgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X2RtX2RvX2Zs aXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKg IHN1cmZhY2VfdXBkYXRlcy0+ZmxpcF9hZGRyID0gJmFkZHI7Cj4+PiDCoCArwqDCoMKgIGlmIChh Y3J0Y19zdGF0ZS0+c3RyZWFtKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdXBkYXRlX2ZyZWVzeW5j X3N0YXRlX29uX3N0cmVhbSgKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZhZGV2LT5kbSwK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjcnRjX3N0YXRlLAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYWNydGNfc3RhdGUtPnN0cmVhbSk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKg wqAgaWYgKGFjcnRjX3N0YXRlLT5mcmVlc3luY190aW1pbmdfY2hhbmdlZCkKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cmVhbV91cGRhdGUuYWRqdXN0ID0KPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJmFjcnRjX3N0YXRlLT5zdHJlYW0tPmFkanVzdDsKPj4+ICsKPj4+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoYWNydGNfc3RhdGUtPmZyZWVzeW5jX3Zycl9pbmZvX2NoYW5n ZWQpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJlYW1fdXBkYXRlLnZycl9pbmZvcGFj a2V0ID0KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmFjcnRjX3N0YXRlLT5z dHJlYW0tPnZycl9pbmZvcGFja2V0Owo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+Cj4+IEZvciBjb25z aXN0ZW5jeSB3ZSBtaWdodCBhbHNvIHdhbnQgdG8gZG8gdGhpcyBpbiBjb21taXRfcGxhbmVzX3Rv X3N0cmVhbSBiZWZvcmUgdGhlIGNhbGwgdG8gZGNfY29tbWl0X3VwZGF0ZXNfZm9yX3N0cmVhbS4K Pj4KPj4gV2Ugc2hvdWxkIHJlYWxseSBtZXJnZSB0aGUgdHdvIGNvZGVwYXRocyBmb3IgZGNfY29t bWl0X3VwZGF0ZXNfZm9yX3N0cmVhbSBvbmUgb2YgdGhlc2UgZGF5cy4KPiAKPiBJbiBhIHByaW9y IHJldmlzaW9uIHRvIHRoaXMgcGF0Y2ggSSBhY3R1YWxseSBkaWQgZG8gdGhpcyBvbiBib3RoIGJ1 dCByZWR1Y2VkIGl0IHRvIGp1c3QgdGhlIGZsaXAgLSB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhl cmUncyBubyBwb2ludCBpbiBlbmFibGluZyB0aGlzIHdoZW4gd2UncmUgKm5vdCogZmxpcHBpbmcg c2luY2UgaXQncyBuZWVkZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24gcHJvcGVybHkuCj4gCj4gVGhl IG1lcmdlIGlzIHByb2JhYmx5IGEgZ29vZCBpZGVhIGRvd24gdGhlIGxpbmUgdG8gY3V0IGRvd24g b24gY29kZSBkdXBsaWNhdGlvbiBldmVuIGZ1cnRoZXIuCj4gCgpTb3VuZHMgZ29vZC4KCkhhcnJ5 Cgo+Pgo+Pj4gwqDCoMKgwqDCoCBkY19jb21taXRfdXBkYXRlc19mb3Jfc3RyZWFtKGFkZXYtPmRt LmRjLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdXJmYWNlX3VwZGF0ZXMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjcnRjX3N0YXRlLT5zdHJlYW0sCj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwsCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzdHJlYW1fdXBk YXRlLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmc3VyZmFjZV91cGRhdGVzLT5zdXJmYWNlLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZSk7Cj4+PiDCoCBAQCAtNDMzMywx MSArNDM1Nyw2IEBAIHN0YXRpYyBib29sIGNvbW1pdF9wbGFuZXNfdG9fc3RyZWFtKAo+Pj4gwqDC oMKgwqDCoCBzdHJlYW1fdXBkYXRlLT5kc3QgPSBkY19zdHJlYW0tPmRzdDsKPj4+IMKgwqDCoMKg wqAgc3RyZWFtX3VwZGF0ZS0+b3V0X3RyYW5zZmVyX2Z1bmMgPSBkY19zdHJlYW0tPm91dF90cmFu c2Zlcl9mdW5jOwo+Pj4gwqAgLcKgwqDCoCBpZiAoZG1fbmV3X2NydGNfc3RhdGUtPmZyZWVzeW5j X2VuYWJsZWQgIT0gZG1fb2xkX2NydGNfc3RhdGUtPmZyZWVzeW5jX2VuYWJsZWQpIHsKPj4+IC3C oMKgwqDCoMKgwqDCoCBzdHJlYW1fdXBkYXRlLT52cnJfaW5mb3BhY2tldCA9ICZkY19zdHJlYW0t PnZycl9pbmZvcGFja2V0Owo+Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cmVhbV91cGRhdGUtPmFkanVz dCA9ICZkY19zdHJlYW0tPmFkanVzdDsKPj4+IC3CoMKgwqAgfQo+Pj4gLQo+Pj4gwqDCoMKgwqDC oCBmb3IgKGkgPSAwOyBpIDwgbmV3X3BsYW5lX2NvdW50OyBpKyspIHsKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoCB1cGRhdGVzW2ldLnN1cmZhY2UgPSBwbGFuZV9zdGF0ZXNbaV07Cj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgdXBkYXRlc1tpXS5nYW1tYSA9Cj4+PiBAQCAtNDQ3Myw5ICs0NDkyLDYgQEAg c3RhdGljIHZvaWQgYW1kZ3B1X2RtX2NvbW1pdF9wbGFuZXMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmcGNydGMtPmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBkY19zdHJlYW1fYXR0YWNoLT5hZGp1c3Qg PSBhY3J0Y19zdGF0ZS0+YWRqdXN0Owo+Pj4gLcKgwqDCoMKgwqDCoMKgIGRjX3N0cmVhbV9hdHRh Y2gtPnZycl9pbmZvcGFja2V0ID0gYWNydGNfc3RhdGUtPnZycl9pbmZvcGFja2V0Owo+Pj4gLQo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChmYWxzZSA9PSBjb21taXRfcGxhbmVzX3RvX3N0cmVh bShkbS0+ZGMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBsYW5lX3N0YXRlc19jb25zdHJ1Y3RlZCwKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzX2Nv dW50LAo+Pj4gQEAgLTQ2NzksOSArNDY5NSw2IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9kbV9hdG9t aWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIFdBUk5fT04oIXN0YXR1cyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgV0FS Tl9PTighc3RhdHVzLT5wbGFuZV9jb3VudCk7Cj4+PiDCoCAtwqDCoMKgwqDCoMKgwqAgZG1fbmV3 X2NydGNfc3RhdGUtPnN0cmVhbS0+YWRqdXN0ID0gZG1fbmV3X2NydGNfc3RhdGUtPmFkanVzdDsK Pj4+IC3CoMKgwqDCoMKgwqDCoCBkbV9uZXdfY3J0Y19zdGF0ZS0+c3RyZWFtLT52cnJfaW5mb3Bh Y2tldCA9IGRtX25ld19jcnRjX3N0YXRlLT52cnJfaW5mb3BhY2tldDsKPj4+IC0KPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCAvKlRPRE8gSG93IGl0IHdvcmtzIHdpdGggTVBPID8qLwo+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGlmICghY29tbWl0X3BsYW5lc190b19zdHJlYW0oCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtLT5kYywKPj4+IEBAIC00ODk5LDIwICs0OTEyLDE4 IEBAIHN0YXRpYyBpbnQgZG9fYXF1aXJlX2dsb2JhbF9sb2NrKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4+PiDCoMKgwqDCoMKgIHJldHVybiByZXQgPCAwID8gcmV0IDogMDsKPj4+IMKgIH0KPj4+ IMKgIC12b2lkIHNldF9mcmVlc3luY19vbl9zdHJlYW0oc3RydWN0IGFtZGdwdV9kaXNwbGF5X21h bmFnZXIgKmRtLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1f Y3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBkbV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25fc3RhdGUsCj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkY19zdHJlYW1fc3RhdGUgKm5ld19z dHJlYW0pCj4+PiArc3RhdGljIHZvaWQgZ2V0X2ZyZWVzeW5jX2NvbmZpZ19mb3JfY3J0YygKPj4+ ICvCoMKgwqAgc3RydWN0IGRtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlLAo+Pj4gK8KgwqDC oCBzdHJ1Y3QgZG1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29uX3N0YXRlKQo+Pj4gwqAgewo+Pj4g wqDCoMKgwqDCoCBzdHJ1Y3QgbW9kX2ZyZWVzeW5jX2NvbmZpZyBjb25maWcgPSB7MH07Cj4+PiAt wqDCoMKgIHN0cnVjdCBtb2RfdnJyX3BhcmFtcyB2cnIgPSB7MH07Cj4+PiAtwqDCoMKgIHN0cnVj dCBkY19pbmZvX3BhY2tldCB2cnJfaW5mb3BhY2tldCA9IHswfTsKPj4+IMKgwqDCoMKgwqAgc3Ry dWN0IGFtZGdwdV9kbV9jb25uZWN0b3IgKmFjb25uZWN0b3IgPQo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdG9fYW1kZ3B1X2RtX2Nvbm5lY3RvcihuZXdfY29uX3N0YXRlLT5iYXNlLmNv bm5lY3Rvcik7Cj4+PiDCoCAtwqDCoMKgIGlmIChuZXdfY29uX3N0YXRlLT5mcmVlc3luY19jYXBh YmxlICYmCj4+PiAtwqDCoMKgwqDCoMKgwqAgbmV3X2Nvbl9zdGF0ZS0+ZnJlZXN5bmNfZW5hYmxl KSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgY29uZmlnLnN0YXRlID0gbmV3X2NydGNfc3RhdGUtPmZy ZWVzeW5jX2VuYWJsZWQgPwo+Pj4gK8KgwqDCoCBuZXdfY3J0Y19zdGF0ZS0+dnJyX3N1cHBvcnRl ZCA9IG5ld19jb25fc3RhdGUtPmZyZWVzeW5jX2NhcGFibGU7Cj4+PiArCj4+PiArwqDCoMKgIGlm IChuZXdfY29uX3N0YXRlLT5mcmVlc3luY19jYXBhYmxlKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAg Y29uZmlnLnN0YXRlID0gbmV3X2NydGNfc3RhdGUtPmJhc2UudnJyX2VuYWJsZWQgPwo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWUlJfU1RBVEVfQUNUSVZFX1ZBUklBQkxF IDoKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVlJSX1NUQVRFX0lOQUNU SVZFOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmZpZy5taW5fcmVmcmVzaF9pbl91aHogPQo+ Pj4gQEAgLTQ5MjIsMTkgKzQ5MzMsMTggQEAgdm9pZCBzZXRfZnJlZXN5bmNfb25fc3RyZWFtKHN0 cnVjdCBhbWRncHVfZGlzcGxheV9tYW5hZ2VyICpkbSwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBj b25maWcudnNpZl9zdXBwb3J0ZWQgPSB0cnVlOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoCAtwqDC oMKgIG1vZF9mcmVlc3luY19idWlsZF92cnJfcGFyYW1zKGRtLT5mcmVlc3luY19tb2R1bGUsCj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ld19zdHJlYW0s Cj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjb25maWcs ICZ2cnIpOwo+Pj4gK8KgwqDCoCBuZXdfY3J0Y19zdGF0ZS0+ZnJlZXN5bmNfY29uZmlnID0gY29u ZmlnOwo+Pj4gK30KPj4+IMKgIC3CoMKgwqAgbW9kX2ZyZWVzeW5jX2J1aWxkX3Zycl9pbmZvcGFj a2V0KGRtLT5mcmVlc3luY19tb2R1bGUsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG5ld19zdHJlYW0sCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICZ2cnIsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHBhY2tldF90eXBlX2ZzMSwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJnZycl9pbmZvcGFja2V0KTsKPj4+ICtzdGF0aWMgdm9pZCBy ZXNldF9mcmVlc3luY19jb25maWdfZm9yX2NydGMoCj4+PiArwqDCoMKgIHN0cnVjdCBkbV9jcnRj X3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkKPj4+ICt7Cj4+PiArwqDCoMKgIG5ld19jcnRjX3N0YXRl LT52cnJfc3VwcG9ydGVkID0gZmFsc2U7Cj4+PiDCoCAtwqDCoMKgIG5ld19jcnRjX3N0YXRlLT5h ZGp1c3QgPSB2cnIuYWRqdXN0Owo+Pj4gLcKgwqDCoCBuZXdfY3J0Y19zdGF0ZS0+dnJyX2luZm9w YWNrZXQgPSB2cnJfaW5mb3BhY2tldDsKPj4+ICvCoMKgwqAgbWVtc2V0KCZuZXdfY3J0Y19zdGF0 ZS0+YWRqdXN0LCAwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihuZXdfY3J0Y19z dGF0ZS0+YWRqdXN0KSk7Cj4+PiArwqDCoMKgIG1lbXNldCgmbmV3X2NydGNfc3RhdGUtPnZycl9p bmZvcGFja2V0LCAwLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZihuZXdfY3J0Y19z dGF0ZS0+dnJyX2luZm9wYWNrZXQpKTsKPj4+IMKgIH0KPj4+IMKgIMKgIHN0YXRpYyBpbnQgZG1f dXBkYXRlX2NydGNzX3N0YXRlKHN0cnVjdCBhbWRncHVfZGlzcGxheV9tYW5hZ2VyICpkbSwKPj4+ IEBAIC01MDA5LDkgKzUwMTksNiBAQCBzdGF0aWMgaW50IGRtX3VwZGF0ZV9jcnRjc19zdGF0ZShz dHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfbWFuYWdlciAqZG0sCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ Pj4gwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2V0X2ZyZWVzeW5jX29uX3N0cmVhbShkbSwg ZG1fbmV3X2NydGNfc3RhdGUsCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkbV9uZXdfY29ubl9zdGF0ZSwgbmV3X3N0cmVhbSk7Cj4+PiAt Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZGNfaXNfc3RyZWFtX3VuY2hhbmdl ZChuZXdfc3RyZWFtLCBkbV9vbGRfY3J0Y19zdGF0ZS0+c3RyZWFtKSAmJgo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkY19pc19zdHJlYW1fc2NhbGluZ191bmNoYW5nZWQo bmV3X3N0cmVhbSwgZG1fb2xkX2NydGNfc3RhdGUtPnN0cmVhbSkpIHsKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCA9IGZh bHNlOwo+Pj4gQEAgLTUwMjAsOSArNTAyNyw2IEBAIHN0YXRpYyBpbnQgZG1fdXBkYXRlX2NydGNz X3N0YXRlKHN0cnVjdCBhbWRncHVfZGlzcGxheV9tYW5hZ2VyICpkbSwKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoCAtwqDCoMKg wqDCoMKgwqAgaWYgKGRtX29sZF9jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkICE9IGRtX25l d19jcnRjX3N0YXRlLT5mcmVlc3luY19lbmFibGVkKQo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmV3X2NydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCA9IHRydWU7Cj4+PiAtCj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChuZXdfY3J0Y19z dGF0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG5leHRfY3J0YzsKPj4+ IMKgIEBAIC01MDU5LDYgKzUwNjMsOCBAQCBzdGF0aWMgaW50IGRtX3VwZGF0ZV9jcnRjc19zdGF0 ZShzdHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfbWFuYWdlciAqZG0sCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkY19zdHJlYW1fcmVsZWFzZShkbV9vbGRfY3J0Y19zdGF0ZS0+c3RyZWFtKTsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtX25ld19jcnRjX3N0YXRlLT5zdHJlYW0g PSBOVUxMOwo+Pj4gwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzZXRfZnJlZXN5bmNfY29u ZmlnX2Zvcl9jcnRjKGRtX25ld19jcnRjX3N0YXRlKTsKPj4+ICsKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICpsb2NrX2FuZF92YWxpZGF0aW9uX25lZWRlZCA9IHRydWU7Cj4+PiDCoCDC oMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsvKiBBZGQgc3RyZWFtIGZvciBhbnkgdXBkYXRlZC9l bmFibGVkIENSVEMgKi8KPj4+IEBAIC01MTM2LDcgKzUxNDIsOSBAQCBzdGF0aWMgaW50IGRtX3Vw ZGF0ZV9jcnRjc19zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfbWFuYWdlciAqZG0sCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfZG1fc2V0X2N0bShkbV9uZXdfY3J0Y19z dGF0ZSk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqAgLQo+Pj4gK8KgwqDCoMKgwqDC oMKgIC8qIFVwZGF0ZSBGcmVlc3luYyBzZXR0aW5ncy4gKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBn ZXRfZnJlZXN5bmNfY29uZmlnX2Zvcl9jcnRjKGRtX25ld19jcnRjX3N0YXRlLAo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbV9uZXdfY29ubl9z dGF0ZSk7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ IEBAIC01NDAxLDEyICs1NDA5LDkgQEAgc3RhdGljIGludCBhbWRncHVfZG1fYXRvbWljX2NoZWNr KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWls Owo+Pj4gwqAgwqDCoMKgwqDCoCBmb3JfZWFjaF9vbGRuZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwg Y3J0Yywgb2xkX2NydGNfc3RhdGUsIG5ld19jcnRjX3N0YXRlLCBpKSB7Cj4+PiAtwqDCoMKgwqDC oMKgwqAgc3RydWN0IGRtX2NydGNfc3RhdGUgKmRtX25ld19jcnRjX3N0YXRlID0gdG9fZG1fY3J0 Y19zdGF0ZShuZXdfY3J0Y19zdGF0ZSk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRtX2Ny dGNfc3RhdGUgKmRtX29sZF9jcnRjX3N0YXRlwqAgPSB0b19kbV9jcnRjX3N0YXRlKG9sZF9jcnRj X3N0YXRlKTsKPj4+IC0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWRybV9hdG9taWNfY3J0 Y19uZWVkc19tb2Rlc2V0KG5ld19jcnRjX3N0YXRlKSAmJgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIW5ld19jcnRjX3N0YXRlLT5jb2xvcl9tZ210X2NoYW5nZWQgJiYKPj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChkbV9vbGRfY3J0Y19zdGF0ZS0+ZnJlZXN5bmNfZW5hYmxlZCA9 PSBkbV9uZXdfY3J0Y19zdGF0ZS0+ZnJlZXN5bmNfZW5hYmxlZCkpCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAhbmV3X2NydGNfc3RhdGUtPnZycl9lbmFibGVkKQo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+PiDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFu ZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlKQo+Pj4gQEAgLTU1NTgsMTQgKzU1NjMsMTUgQEAgdm9pZCBh bWRncHVfZG1fdXBkYXRlX2ZyZWVzeW5jX2NhcHMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGRldGFpbGVkX2RhdGFfbW9uaXRvcl9yYW5nZSAq cmFuZ2U7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfZG1fY29ubmVjdG9yICphbWRncHVf ZG1fY29ubmVjdG9yID0KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRvX2FtZGdwdV9k bV9jb25uZWN0b3IoY29ubmVjdG9yKTsKPj4+IC3CoMKgwqAgc3RydWN0IGRtX2Nvbm5lY3Rvcl9z dGF0ZSAqZG1fY29uX3N0YXRlOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgZG1fY29ubmVjdG9yX3N0YXRl ICpkbV9jb25fc3RhdGUgPSBOVUxMOwo+Pj4gwqAgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4+ICvCoMKgwqAgYm9vbCBmcmVlc3luY19j YXBhYmxlID0gZmFsc2U7Cj4+PiDCoCDCoMKgwqDCoMKgIGlmICghY29ubmVjdG9yLT5zdGF0ZSkg ewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiJXMgLSBDb25uZWN0b3IgaGFzIG5v IHN0YXRlIiwgX19mdW5jX18pOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICvCoMKg wqDCoMKgwqDCoCBnb3RvIHVwZGF0ZTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAgwqDCoMKgwqDC oCBpZiAoIWVkaWQpIHsKPj4+IEBAIC01NTc1LDkgKzU1ODEsNyBAQCB2b2lkIGFtZGdwdV9kbV91 cGRhdGVfZnJlZXN5bmNfY2FwcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9kbV9jb25uZWN0b3ItPm1heF92ZnJlcSA9IDA7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+cGl4ZWxfY2xvY2tfbWh6 ID0gMDsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBkbV9jb25fc3RhdGUtPmZyZWVzeW5jX2NhcGFi bGUgPSBmYWxzZTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBkbV9jb25fc3RhdGUtPmZyZWVzeW5jX2Vu YWJsZSA9IGZhbHNlOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIHVwZGF0ZTsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAgwqDCoMKgwqDCoCBkbV9j b25fc3RhdGUgPSB0b19kbV9jb25uZWN0b3Jfc3RhdGUoY29ubmVjdG9yLT5zdGF0ZSk7Cj4+PiBA QCAtNTU4NSwxMCArNTU4OSwxMCBAQCB2b2lkIGFtZGdwdV9kbV91cGRhdGVfZnJlZXN5bmNfY2Fw cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+Pj4gwqDCoMKgwqDCoCBlZGlkX2No ZWNrX3JlcXVpcmVkID0gZmFsc2U7Cj4+PiDCoMKgwqDCoMKgIGlmICghYW1kZ3B1X2RtX2Nvbm5l Y3Rvci0+ZGNfc2luaykgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiZGNfc2lu ayBOVUxMLCBjb3VsZCBub3QgYWRkIGZyZWVfc3luYyBtb2R1bGUuXG4iKTsKPj4+IC3CoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byB1cGRhdGU7Cj4+PiDCoMKg wqDCoMKgIH0KPj4+IMKgwqDCoMKgwqAgaWYgKCFhZGV2LT5kbS5mcmVlc3luY19tb2R1bGUpCj4+ PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gdXBkYXRl Owo+Pj4gwqDCoMKgwqDCoCAvKgo+Pj4gwqDCoMKgwqDCoMKgICogaWYgZWRpZCBub24gemVybyBy ZXN0cmljdCBmcmVlc3luYyBvbmx5IGZvciBkcCBhbmQgZWRwCj4+PiDCoMKgwqDCoMKgwqAgKi8K Pj4+IEBAIC01NjAwLDcgKzU2MDQsNiBAQCB2b2lkIGFtZGdwdV9kbV91cGRhdGVfZnJlZXN5bmNf Y2FwcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2RtX2Nvbm5lY3Rvcik7 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiAtwqDCoMKgIGRt X2Nvbl9zdGF0ZS0+ZnJlZXN5bmNfY2FwYWJsZSA9IGZhbHNlOwo+Pj4gwqDCoMKgwqDCoCBpZiAo ZWRpZF9jaGVja19yZXF1aXJlZCA9PSB0cnVlICYmIChlZGlkLT52ZXJzaW9uID4gMSB8fAo+Pj4g wqDCoMKgwqDCoMKgwqDCoCAoZWRpZC0+dmVyc2lvbiA9PSAxICYmIGVkaWQtPnJldmlzaW9uID4g MSkpKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ Pj4gQEAgLTU2MzIsOCArNTYzNSwxNiBAQCB2b2lkIGFtZGdwdV9kbV91cGRhdGVfZnJlZXN5bmNf Y2FwcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChhbWRncHVfZG1fY29ubmVjdG9yLT5tYXhfdmZyZXEgLQo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2RtX2Nvbm5lY3Rvci0+bWluX3ZmcmVxID4gMTApIHsKPj4+ IMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtX2Nvbl9zdGF0ZS0+ZnJlZXN5bmNfY2FwYWJs ZSA9IHRydWU7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmcmVlc3luY19jYXBhYmxlID0g dHJ1ZTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ ICt1cGRhdGU6Cj4+PiArwqDCoMKgIGlmIChkbV9jb25fc3RhdGUpCj4+PiArwqDCoMKgwqDCoMKg wqAgZG1fY29uX3N0YXRlLT5mcmVlc3luY19jYXBhYmxlID0gZnJlZXN5bmNfY2FwYWJsZTsKPj4+ ICsKPj4KPj4gSW50ZXJlc3RpbmcuIExvb2tzIGxpa2Ugd2UgY291bGQganVzdCBncmFiIHRoaXMg ZnJvbSB0aGUgZHJtX2Nvbm5lY3RvciBwcm9wZXJ0eSBhcyB0aGlzIGlzbid0IHNvbWV0aGluZyB0 aGF0IGNoYW5nZXMgd2l0aCB0aGUgc3RhdGUgYnV0IERSTSBmb3JjZXMgdXMgdG8gdHJhY2sgaXQg b24gdGhlIGNvbm5lY3RvciBzdGF0ZSBhcyBkcm1fb2JqZWN0X3Byb3BlcnR5X2dldF92YWx1ZSgp IHRocm93cyBhIFdBUk5fT04gZm9yIGF0b21pYyBkcml2ZXJzLiBOb3Qgc3VyZSBJIGxpa2UgaXQg YnV0IGl0J3Mgd2hhdCB3ZSBnb3QsIEkgZ3Vlc3MuCj4+Cj4+IEhhcnJ5Cj4gCj4gVGhhdCB3YXMg bXkgb3JpZ2luYWwgcGxhbiwgYnV0IEkgdGhpbmsgSSB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcg YmVoaW5kIHRoZSBzZXBhcmF0aW9uIG9mIHN0YXRlIGFuZCBwcm9wZXJ0eS4KPiAKPiBJIGRvbid0 IG1pbmQgdGhpcyBhcHByb2FjaCB0b28gbXVjaCBiZWNhdXNlIHRoZSB2YWx1ZSByZWFsbHkgZmVl bHMgbGlrZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgc3BlY2lmaWMgdG8gb3VyIGRyaXZlciBp biB0aGlzIGNhc2UuCj4gCj4gSXQncyBub3QgcmVhbGx5IGRlc2NyaWJpbmcgd2hldGhlciB0aGUg Y29ubmVjdG9yIGlzIGFjdHVhbGx5IGNhcGFibGUgb3Igbm90LCBidXQgd2hldGhlciBpdCdzIGZp bmUgdG8gcGVyZm9ybSB2cnIgdXBkYXRlcyBsYXRlciB3aGVuIHdlJ3JlIHVwZGF0aW5nIHRoZSBw bGFuZXMuCj4gCj4+Cj4+PiArwqDCoMKgIGlmIChjb25uZWN0b3ItPnZycl9jYXBhYmxlX3Byb3Bl cnR5KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRybV9jb25uZWN0b3Jfc2V0X3Zycl9jYXBhYmxlX3By b3BlcnR5KGNvbm5lY3RvciwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZnJlZXN5bmNfY2FwYWJsZSk7Cj4+PiDCoCB9Cj4+ PiDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9h bWRncHVfZG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1 X2RtLmgKPj4+IGluZGV4IDk3OGIzNGE1MDExYy4uYTVhYWY4YjA4OTY4IDEwMDY0NAo+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uaAo+Pj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uaAo+ Pj4gQEAgLTE4NSw3ICsxODUsMTEgQEAgc3RydWN0IGRtX2NydGNfc3RhdGUgewo+Pj4gwqDCoMKg wqDCoCBpbnQgY3JjX3NraXBfY291bnQ7Cj4+PiDCoMKgwqDCoMKgIGJvb2wgY3JjX2VuYWJsZWQ7 Cj4+PiDCoCAtwqDCoMKgIGJvb2wgZnJlZXN5bmNfZW5hYmxlZDsKPj4+ICvCoMKgwqAgYm9vbCBm cmVlc3luY190aW1pbmdfY2hhbmdlZDsKPj4+ICvCoMKgwqAgYm9vbCBmcmVlc3luY192cnJfaW5m b19jaGFuZ2VkOwo+Pj4gKwo+Pj4gK8KgwqDCoCBib29sIHZycl9zdXBwb3J0ZWQ7Cj4+PiArwqDC oMKgIHN0cnVjdCBtb2RfZnJlZXN5bmNfY29uZmlnIGZyZWVzeW5jX2NvbmZpZzsKPj4+IMKgwqDC oMKgwqAgc3RydWN0IGRjX2NydGNfdGltaW5nX2FkanVzdCBhZGp1c3Q7Cj4+PiDCoMKgwqDCoMKg IHN0cnVjdCBkY19pbmZvX3BhY2tldCB2cnJfaW5mb3BhY2tldDsKPj4+IMKgIH07Cj4+PiBAQCAt MjA3LDcgKzIxMSw2IEBAIHN0cnVjdCBkbV9jb25uZWN0b3Jfc3RhdGUgewo+Pj4gwqDCoMKgwqDC oCB1aW50OF90IHVuZGVyc2Nhbl92Ym9yZGVyOwo+Pj4gwqDCoMKgwqDCoCB1aW50OF90IHVuZGVy c2Nhbl9oYm9yZGVyOwo+Pj4gwqDCoMKgwqDCoCBib29sIHVuZGVyc2Nhbl9lbmFibGU7Cj4+PiAt wqDCoMKgIGJvb2wgZnJlZXN5bmNfZW5hYmxlOwo+Pj4gwqDCoMKgwqDCoCBib29sIGZyZWVzeW5j X2NhcGFibGU7Cj4+PiDCoCB9Owo+Pj4gwqAKPiAKPiBOaWNob2xhcyBLYXpsYXVza2FzCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=