From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v5] drm/i915: Switch back to an array of logical per-engine HW contexts Date: Mon, 15 Apr 2019 12:02:05 +0100 Message-ID: References: <20190412085410.10392-18-chris@chris-wilson.co.uk> <20190412145842.12208-1-chris@chris-wilson.co.uk> <22960a6a-e8e6-6dd3-bf40-a5029f121f03@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id B0D9B89471 for ; Mon, 15 Apr 2019 11:02:08 +0000 (UTC) In-Reply-To: <22960a6a-e8e6-6dd3-bf40-a5029f121f03@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkkgbWFuYWdlZCB0d28gcGFyYWxsZWwgcmVwbGllcyB0byB0aGUgc2FtZSBtZXNzYWdlLi4uIG9u ZSBjb21tZW50IGJlbG93OgoKT24gMTUvMDQvMjAxOSAxMjowMCwgVHZydGtvIFVyc3VsaW4gd3Jv dGU6Cj4gCj4gT24gMTIvMDQvMjAxOSAxNTo1OCwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+PiBXZSBz d2l0Y2hlZCB0byBhIHRyZWUgb2YgcGVyLWVuZ2luZSBIVyBjb250ZXh0IHRvIGFjY29tbW9kYXRl IHRoZQo+PiBpbnRyb2R1Y3Rpb24gb2YgdmlydHVhbCBlbmdpbmVzLiBIb3dldmVyLCB3ZSBwbGFu IHRvIGFsc28gc3VwcG9ydAo+PiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgZW5naW5l IHdpdGhpbiB0aGUgR0VNIGNvbnRleHQsIGRlZmVhdGluZwo+PiBvdXIgdXNlIG9mIHRoZSBlbmdp bmUgYXMgYSBrZXkgdG8gbG9va2luZyB1cCB0aGUgSFcgY29udGV4dC4gSnVzdAo+PiBhbGxvY2F0 ZSBhIGxvZ2ljYWwgcGVyLWVuZ2luZSBpbnN0YW5jZSBhbmQgYWx3YXlzIHVzZSBhbiBpbmRleCBp bnRvIHRoZQo+PiBjdHgtPmVuZ2luZXNbXS4gTGF0ZXIgb24sIHRoaXMgY3R4LT5lbmdpbmVzW10g bWF5IGJlIHJlcGxhY2VkIGJ5IGEgdXNlcgo+PiBzcGVjaWZpZWQgbWFwLgo+Pgo+PiB2MjogQWRk IGZvcl9lYWNoX2dlbV9lbmdpbmUoKSBoZWxwZXIgdG8gaXRlcmF0b3Igd2l0aGluIHRoZSBlbmdp bmVzIGxvY2sKPj4gdjM6IGludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3QoKSBoZWxwZXIKPj4g djQ6IHMvdW5zaWduZWQgbG9uZy91bnNpZ25lZCBpbnQvIDQgYmlsbGlvbiBlbmdpbmVzIGlzIHF1 aXRlIGVub3VnaC4KPj4gdjU6IFB1c2ggaXRlcmF0b3IgbG9ja2luZyB0byBjYWxsZXIKPj4KPj4g U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+ IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+PiAtLS0KPj4g wqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jwqDCoMKgwqDCoMKgIHwg MTEyICsrKystLS0tLS0tLS0tLS0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRl bF9jb250ZXh0LmjCoMKgwqDCoMKgwqAgfMKgIDI3ICstLS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaCB8wqDCoCAyIC0KPj4gwqAgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmPCoMKgwqDCoCB8wqDCoCAyICstCj4+IMKg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L21vY2tfZW5naW5lLmPCoMKgwqDCoMKgwqDCoMKgIHzC oMKgIDMgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3NjaGVkdWxlci5jwqDCoMKg wqDCoMKgwqDCoMKgIHzCoMKgIDIgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI0ICsrLS0KPj4gwqAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jwqDCoMKgwqDCoMKgIHzCoCA5NyArKysr KysrKysrKysrLS0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5o wqDCoMKgwqDCoMKgIHzCoCA1OCArKysrKysrKysKPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fY29udGV4dF90eXBlcy5oIHzCoCAzMiArKysrLQo+PiDCoCBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmPCoMKgwqAgfMKgIDcwICsrKysrLS0tLS0tCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgIDc3ICsrKysrKy0tLS0tLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlcXVlc3QuY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNSArLS0KPj4gwqAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uY8KgwqAgfMKgIDIyICsrLS0KPj4gwqAg Li4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHzCoMKgIDIgKy0K Pj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jIHzCoCAx NCArKy0KPj4gwqAgMTYgZmlsZXMgY2hhbmdlZCwgMzE5IGluc2VydGlvbnMoKyksIDI0MCBkZWxl dGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2NvbnRleHQuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmMK Pj4gaW5kZXggMTVhYzk5YzVkZDRhLi41ZTUwNmU2NDg0NTQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmMKPj4gQEAgLTE3LDcgKzE3LDcgQEAgc3RhdGljIHN0 cnVjdCBpOTE1X2dsb2JhbF9jb250ZXh0IHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qga21lbV9jYWNo ZSAqc2xhYl9jZTsKPj4gwqAgfSBnbG9iYWw7Cj4+IC1zdHJ1Y3QgaW50ZWxfY29udGV4dCAqaW50 ZWxfY29udGV4dF9hbGxvYyh2b2lkKQo+PiArc3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpp bnRlbF9jb250ZXh0X2FsbG9jKHZvaWQpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCByZXR1cm4ga21l bV9jYWNoZV96YWxsb2MoZ2xvYmFsLnNsYWJfY2UsIEdGUF9LRVJORUwpOwo+PiDCoCB9Cj4+IEBA IC0yOCwxMDQgKzI4LDE3IEBAIHZvaWQgaW50ZWxfY29udGV4dF9mcmVlKHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSkKPj4gwqAgfQo+PiDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqCj4+IC1pbnRl bF9jb250ZXh0X2xvb2t1cChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+PiAraW50ZWxf Y29udGV4dF9jcmVhdGUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IMKg IHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBOVUxMOwo+PiAtwqDCoMKg IHN0cnVjdCByYl9ub2RlICpwOwo+PiAtCj4+IC3CoMKgwqAgc3Bpbl9sb2NrKCZjdHgtPmh3X2Nv bnRleHRzX2xvY2spOwo+PiAtwqDCoMKgIHAgPSBjdHgtPmh3X2NvbnRleHRzLnJiX25vZGU7Cj4+ IC3CoMKgwqAgd2hpbGUgKHApIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250 ZXh0ICp0aGlzID0KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmJfZW50cnkocCwgc3RydWN0 IGludGVsX2NvbnRleHQsIG5vZGUpOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAodGhpcy0+ ZW5naW5lID09IGVuZ2luZSkgewo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09O KHRoaXMtPmdlbV9jb250ZXh0ICE9IGN0eCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNl ID0gdGhpczsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKgwqDCoMKg wqDCoCB9Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh0aGlzLT5lbmdpbmUgPCBlbmdpbmUp Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSBwLT5yYl9yaWdodDsKPj4gLcKgwqDCoMKg wqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9IHAtPnJiX2xlZnQ7Cj4+ IC3CoMKgwqAgfQo+PiAtwqDCoMKgIHNwaW5fdW5sb2NrKCZjdHgtPmh3X2NvbnRleHRzX2xvY2sp Owo+PiAtCj4+IC3CoMKgwqAgcmV0dXJuIGNlOwo+PiAtfQo+PiAtCj4+IC1zdHJ1Y3QgaW50ZWxf Y29udGV4dCAqCj4+IC1fX2ludGVsX2NvbnRleHRfaW5zZXJ0KHN0cnVjdCBpOTE1X2dlbV9jb250 ZXh0ICpjdHgsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGludGVsX2NvbnRleHQgKmNlKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCByYl9ub2RlICoqcCwg KnBhcmVudDsKPj4gLcKgwqDCoCBpbnQgZXJyID0gMDsKPj4gLQo+PiAtwqDCoMKgIHNwaW5fbG9j aygmY3R4LT5od19jb250ZXh0c19sb2NrKTsKPj4gLQo+PiAtwqDCoMKgIHBhcmVudCA9IE5VTEw7 Cj4+IC3CoMKgwqAgcCA9ICZjdHgtPmh3X2NvbnRleHRzLnJiX25vZGU7Cj4+IC3CoMKgwqAgd2hp bGUgKCpwKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqdGhpczsK Pj4gLQo+PiAtwqDCoMKgwqDCoMKgwqAgcGFyZW50ID0gKnA7Cj4+IC3CoMKgwqDCoMKgwqDCoCB0 aGlzID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgaW50ZWxfY29udGV4dCwgbm9kZSk7Cj4+IC0K Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICh0aGlzLT5lbmdpbmUgPT0gZW5naW5lKSB7Cj4+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVyciA9IC1FRVhJU1Q7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNlID0gdGhpczsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IC3CoMKg wqDCoMKgwqDCoCB9Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICh0aGlzLT5lbmdpbmUgPCBl bmdpbmUpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHAgPSAmcGFyZW50LT5yYl9yaWdodDsK Pj4gLcKgwqDCoMKgwqDCoMKgIGVsc2UKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcCA9ICZw YXJlbnQtPnJiX2xlZnQ7Cj4+IC3CoMKgwqAgfQo+PiAtwqDCoMKgIGlmICghZXJyKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCByYl9saW5rX25vZGUoJmNlLT5ub2RlLCBwYXJlbnQsIHApOwo+PiAtwqDC oMKgwqDCoMKgwqAgcmJfaW5zZXJ0X2NvbG9yKCZjZS0+bm9kZSwgJmN0eC0+aHdfY29udGV4dHMp Owo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIHNwaW5fdW5sb2NrKCZjdHgtPmh3X2NvbnRl eHRzX2xvY2spOwo+PiAtCj4+IC3CoMKgwqAgcmV0dXJuIGNlOwo+PiAtfQo+PiAtCj4+IC12b2lk IF9faW50ZWxfY29udGV4dF9yZW1vdmUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiAtewo+ PiAtwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHggPSBjZS0+Z2VtX2NvbnRleHQ7 Cj4+IC0KPj4gLcKgwqDCoCBzcGluX2xvY2soJmN0eC0+aHdfY29udGV4dHNfbG9jayk7Cj4+IC3C oMKgwqAgcmJfZXJhc2UoJmNlLT5ub2RlLCAmY3R4LT5od19jb250ZXh0cyk7Cj4+IC3CoMKgwqAg c3Bpbl91bmxvY2soJmN0eC0+aHdfY29udGV4dHNfbG9jayk7Cj4+IC19Cj4+IC0KPj4gLXN0cnVj dCBpbnRlbF9jb250ZXh0ICoKPj4gLWludGVsX2NvbnRleHRfaW5zdGFuY2Uoc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiAtewo+PiAtwqDCoMKgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSwgKnBvczsKPj4gLQo+PiAtwqDCoMKgIGNlID0gaW50ZWxfY29udGV4dF9sb29r dXAoY3R4LCBlbmdpbmUpOwo+PiAtwqDCoMKgIGlmIChsaWtlbHkoY2UpKQo+PiAtwqDCoMKgwqDC oMKgwqAgcmV0dXJuIGludGVsX2NvbnRleHRfZ2V0KGNlKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2U7Cj4+IMKgwqDCoMKgwqAgY2UgPSBpbnRlbF9jb250ZXh0X2FsbG9jKCk7 Cj4+IMKgwqDCoMKgwqAgaWYgKCFjZSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+PiDCoMKgwqDCoMKgIGludGVsX2NvbnRleHRfaW5pdChjZSwgY3R4LCBl bmdpbmUpOwo+PiAtCj4+IC3CoMKgwqAgcG9zID0gX19pbnRlbF9jb250ZXh0X2luc2VydChjdHgs IGVuZ2luZSwgY2UpOwo+PiAtwqDCoMKgIGlmICh1bmxpa2VseShwb3MgIT0gY2UpKSAvKiBCZWF0 ZW4hIFVzZSB0aGVpciBIVyBjb250ZXh0IGluc3RlYWQgKi8KPj4gLcKgwqDCoMKgwqDCoMKgIGlu dGVsX2NvbnRleHRfZnJlZShjZSk7Cj4+IC0KPj4gLcKgwqDCoCBHRU1fQlVHX09OKGludGVsX2Nv bnRleHRfbG9va3VwKGN0eCwgZW5naW5lKSAhPSBwb3MpOwo+PiAtwqDCoMKgIHJldHVybiBpbnRl bF9jb250ZXh0X2dldChwb3MpOwo+PiArwqDCoMKgIHJldHVybiBjZTsKPj4gwqAgfQo+PiDCoCBp bnQgX19pbnRlbF9jb250ZXh0X2RvX3BpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+IEBA IC0yMDQsNiArMTE3LDggQEAgaW50ZWxfY29udGV4dF9pbml0KHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHgsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4+IMKgIHsKPj4gK8KgwqDCoCBHRU1fQlVHX09OKCFlbmdpbmUtPmNvcHMpOwo+ PiArCj4+IMKgwqDCoMKgwqAga3JlZl9pbml0KCZjZS0+cmVmKTsKPj4gwqDCoMKgwqDCoCBjZS0+ Z2VtX2NvbnRleHQgPSBjdHg7Cj4+IEBAIC0yNTQsMyArMTY5LDE4IEBAIHZvaWQgaW50ZWxfY29u dGV4dF9leGl0X2VuZ2luZShzdHJ1Y3QgCj4+IGludGVsX2NvbnRleHQgKmNlKQo+PiDCoCB7Cj4+ IMKgwqDCoMKgwqAgaW50ZWxfZW5naW5lX3BtX3B1dChjZS0+ZW5naW5lKTsKPj4gwqAgfQo+PiAr Cj4+ICtzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICppbnRlbF9jb250ZXh0X2NyZWF0ZV9yZXF1ZXN0KHN0 cnVjdCAKPj4gaW50ZWxfY29udGV4dCAqY2UpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVf cmVxdWVzdCAqcnE7Cj4+ICvCoMKgwqAgaW50IGVycjsKPj4gKwo+PiArwqDCoMKgIGVyciA9IGlu dGVsX2NvbnRleHRfcGluKGNlKTsKPj4gK8KgwqDCoCBpZiAodW5saWtlbHkoZXJyKSkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKGVycik7Cj4+ICsKPj4gK8KgwqDCoCBycSA9IGk5 MTVfcmVxdWVzdF9jcmVhdGUoY2UpOwo+PiArwqDCoMKgIGludGVsX2NvbnRleHRfdW5waW4oY2Up Owo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJxOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2NvbnRleHQuaAo+PiBpbmRleCBiNzQ2YWRkNmI3MWQuLjYzMzkyYzg4Y2Q5 OCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5o Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQuaAo+PiBAQCAt MTIsMjQgKzEyLDE2IEBACj4+IMKgICNpbmNsdWRlICJpbnRlbF9jb250ZXh0X3R5cGVzLmgiCj4+ IMKgICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfdHlwZXMuaCIKPj4gLXN0cnVjdCBpbnRlbF9jb250 ZXh0ICppbnRlbF9jb250ZXh0X2FsbG9jKHZvaWQpOwo+PiAtdm9pZCBpbnRlbF9jb250ZXh0X2Zy ZWUoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKTsKPj4gLQo+PiDCoCB2b2lkIGludGVsX2NvbnRl eHRfaW5pdChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4+IC0vKioKPj4gLSAq IGludGVsX2NvbnRleHRfbG9va3VwIC0gRmluZCB0aGUgbWF0Y2hpbmcgSFcgY29udGV4dCBmb3Ig dGhpcyAoY3R4LCAKPj4gZW5naW5lKQo+PiAtICogQGN0eCAtIHRoZSBwYXJlbnQgR0VNIGNvbnRl eHQKPj4gLSAqIEBlbmdpbmUgLSB0aGUgdGFyZ2V0IEhXIGVuZ2luZQo+PiAtICoKPj4gLSAqIE1h eSByZXR1cm4gTlVMTCBpZiB0aGUgSFcgY29udGV4dCBoYXNuJ3QgYmVlbiBpbnN0YW50aWF0ZWQg KGkuZS4gCj4+IHVudXNlZCkuCj4+IC0gKi8KPj4gwqAgc3RydWN0IGludGVsX2NvbnRleHQgKgo+ PiAtaW50ZWxfY29udGV4dF9sb29rdXAoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4g K2ludGVsX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKPj4gK3ZvaWQgaW50ZWxfY29udGV4dF9mcmVlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSk7 Cj4+ICsKPj4gwqAgLyoqCj4+IMKgwqAgKiBpbnRlbF9jb250ZXh0X2xvY2tfcGlubmVkIC0gU3Rh Ymxpc2VzIHRoZSAncGlubmVkJyBzdGF0dXMgb2YgdGhlIAo+PiBIVyBjb250ZXh0Cj4+IMKgwqAg KiBAY2UgLSB0aGUgY29udGV4dAo+PiBAQCAtNzEsMTcgKzYzLDYgQEAgc3RhdGljIGlubGluZSB2 b2lkIAo+PiBpbnRlbF9jb250ZXh0X3VubG9ja19waW5uZWQoc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+PiDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygmY2UtPnBpbl9tdXRleCk7Cj4+IMKgIH0K Pj4gLXN0cnVjdCBpbnRlbF9jb250ZXh0ICoKPj4gLV9faW50ZWxfY29udGV4dF9pbnNlcnQoc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpOwo+PiAtdm9pZAo+PiAtX19pbnRl bF9jb250ZXh0X3JlbW92ZShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpOwo+PiAtCj4+IC1zdHJ1 Y3QgaW50ZWxfY29udGV4dCAqCj4+IC1pbnRlbF9jb250ZXh0X2luc3RhbmNlKHN0cnVjdCBpOTE1 X2dlbV9jb250ZXh0ICpjdHgsCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4+IC0KPj4gwqAgaW50IF9faW50ZWxfY29udGV4 dF9kb19waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKTsKPj4gwqAgc3RhdGljIGlubGluZSBp bnQgaW50ZWxfY29udGV4dF9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiBAQCAtMTQ0 LDQgKzEyNSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAKPj4gaW50ZWxfY29udGV4dF90aW1lbGlu ZV91bmxvY2soc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiDCoMKgwqDCoMKgIG11dGV4X3Vu bG9jaygmY2UtPnJpbmctPnRpbWVsaW5lLT5tdXRleCk7Cj4+IMKgIH0KPj4gK3N0cnVjdCBpOTE1 X3JlcXVlc3QgKmludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IAo+PiBpbnRlbF9j b250ZXh0ICpjZSk7Cj4+ICsKPj4gwqAgI2VuZGlmIC8qIF9fSU5URUxfQ09OVEVYVF9IX18gKi8K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlw ZXMuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmgK Pj4gaW5kZXggZjAyZDI3NzM0ZTNiLi4zNTc5YzI3MDgzMjEgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaAo+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmgKPj4gQEAgLTEwLDcgKzEwLDYg QEAKPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgv cmJ0cmVlLmg+Cj4+IMKgICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+PiDCoCAjaW5jbHVkZSAi aTkxNV9hY3RpdmVfdHlwZXMuaCIKPj4gQEAgLTYxLDcgKzYwLDYgQEAgc3RydWN0IGludGVsX2Nv bnRleHQgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2FjdGl2ZV9yZXF1ZXN0IGFjdGl2ZV90 cmFja2VyOwo+PiDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyAqb3Bz Owo+PiAtwqDCoMKgIHN0cnVjdCByYl9ub2RlIG5vZGU7Cj4+IMKgwqDCoMKgwqAgLyoqIHNzZXU6 IENvbnRyb2wgZXUvc2xpY2UgcGFydGl0aW9uaW5nICovCj4+IMKgwqDCoMKgwqAgc3RydWN0IGlu dGVsX3NzZXUgc3NldTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV9jcy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2lu ZV9jcy5jCj4+IGluZGV4IDZjYjkwMTM3YjJmYS4uMmExYzQzOGJmMGFkIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+PiBAQCAtNzE2LDcgKzcxNiw3 IEBAIHN0YXRpYyBpbnQgcGluX2NvbnRleHQoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+IMKgwqDCoMKgwqAgaW50 IGVycjsKPj4gLcKgwqDCoCBjZSA9IGludGVsX2NvbnRleHRfaW5zdGFuY2UoY3R4LCBlbmdpbmUp Owo+PiArwqDCoMKgIGNlID0gaTkxNV9nZW1fY29udGV4dF9nZXRfZW5naW5lKGN0eCwgZW5naW5l LT5pZCk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjZSkpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gUFRSX0VSUihjZSk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9tb2NrX2VuZ2luZS5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L21vY2tfZW5n aW5lLmMKPj4gaW5kZXggODVjZGJmZTFkOTg5Li4yOTQxOTE2YjM3YmYgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L21vY2tfZW5naW5lLmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvbW9ja19lbmdpbmUuYwo+PiBAQCAtMjMsNiArMjMsNyBAQAo+PiDCoMKg ICovCj4+IMKgICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+PiArI2luY2x1ZGUgImk5MTVfZ2VtX2Nv bnRleHQuaCIKPj4gwqAgI2luY2x1ZGUgImludGVsX2NvbnRleHQuaCIKPj4gwqAgI2luY2x1ZGUg ImludGVsX2VuZ2luZV9wbS5oIgo+PiBAQCAtMjg2LDcgKzI4Nyw3IEBAIGludCBtb2NrX2VuZ2lu ZV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqDCoMKgwqDCoCBpOTE1 X3RpbWVsaW5lX3NldF9zdWJjbGFzcygmZW5naW5lLT50aW1lbGluZSwgVElNRUxJTkVfRU5HSU5F KTsKPj4gwqDCoMKgwqDCoCBlbmdpbmUtPmtlcm5lbF9jb250ZXh0ID0KPj4gLcKgwqDCoMKgwqDC oMKgIGludGVsX2NvbnRleHRfaW5zdGFuY2UoaTkxNS0+a2VybmVsX2NvbnRleHQsIGVuZ2luZSk7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9jb250ZXh0X2dldF9lbmdpbmUoaTkxNS0+a2Vy bmVsX2NvbnRleHQsIGVuZ2luZS0+aWQpOwo+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoZW5naW5l LT5rZXJuZWxfY29udGV4dCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl90aW1lbGlu ZTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9zY2hlZHVsZXIuYyAK Pj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1bGVyLmMKPj4gaW5kZXggNjA2ZmMy NzEzMjQwLi44YjY1NzRlMWI0OTUgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9zY2hlZHVsZXIuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvc2NoZWR1 bGVyLmMKPj4gQEAgLTExODgsNyArMTE4OCw3IEBAIGludCBpbnRlbF92Z3B1X3NldHVwX3N1Ym1p c3Npb24oc3RydWN0IAo+PiBpbnRlbF92Z3B1ICp2Z3B1KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg SU5JVF9MSVNUX0hFQUQoJnMtPndvcmtsb2FkX3FfaGVhZFtpXSk7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBzLT5zaGFkb3dbaV0gPSBFUlJfUFRSKC1FSU5WQUwpOwo+PiAtwqDCoMKgwqDCoMKgwqAg Y2UgPSBpbnRlbF9jb250ZXh0X2luc3RhbmNlKGN0eCwgZW5naW5lKTsKPj4gK8KgwqDCoMKgwqDC oMKgIGNlID0gaTkxNV9nZW1fY29udGV4dF9nZXRfZW5naW5lKGN0eCwgaSk7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNlKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXQgPSBQVFJfRVJSKGNlKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfc2hhZG93X2N0eDsKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+PiBpbmRleCA1MDI2 NmU4N2MyMjUuLmUyZDg5YzY0YWI1MiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4+ IEBAIC00MzEyLDggKzQzMTIsOSBAQCBpbnQgaTkxNV9nZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAKPj4gKmRldl9wcml2KQo+PiDCoCBzdGF0aWMgaW50IF9faW50ZWxfZW5naW5l c19yZWNvcmRfZGVmYXVsdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgCj4+ICppOTE1KQo+PiDC oCB7Cj4+IC3CoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eDsKPj4gwqDCoMKgwqDC oCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eDsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lcyAqZTsK Pj4gwqDCoMKgwqDCoCBlbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4gwqDCoMKgwqDCoCBpbnQg ZXJyID0gMDsKPj4gQEAgLTQzMzAsMTggKzQzMzEsMjEgQEAgc3RhdGljIGludCAKPj4gX19pbnRl bF9lbmdpbmVzX3JlY29yZF9kZWZhdWx0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK Pj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGN0eCkpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gUFRSX0VSUihjdHgpOwo+PiArwqDCoMKgIGUgPSBpOTE1X2dlbV9jb250ZXh0X2xvY2tfZW5n aW5lcyhjdHgpOwo+PiArCj4+IMKgwqDCoMKgwqAgZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkx NSwgaWQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IGUt PmVuZ2luZXNbaWRdOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAq cnE7Cj4+IC3CoMKgwqDCoMKgwqDCoCBycSA9IGk5MTVfcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0 eCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycSA9IGludGVsX2NvbnRleHRfY3JlYXRlX3JlcXVlc3Qo Y2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKElTX0VSUihycSkpIHsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihycSk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gb3V0X2N0eDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJf YWN0aXZlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZXJy ID0gMDsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChlbmdpbmUtPmluaXRfY29udGV4dCkKPj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyID0gZW5naW5lLT5pbml0X2NvbnRleHQocnEpOwo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKHJxLT5lbmdpbmUtPmluaXRfY29udGV4dCkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZXJyID0gcnEtPmVuZ2luZS0+aW5pdF9jb250ZXh0KHJxKTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGk5MTVfcmVxdWVzdF9hZGQocnEpOwo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGVycikKPj4gQEAgLTQzNTUsMTUgKzQzNTksMTAgQEAgc3RhdGljIGludCAKPj4gX19p bnRlbF9lbmdpbmVzX3JlY29yZF9kZWZhdWx0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwg aTkxNSwgaWQpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsK Pj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X3ZtYSAqc3RhdGU7Cj4+ICvCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBlLT5lbmdpbmVzW2lkXTsKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCBpOTE1X3ZtYSAqc3RhdGUgPSBjZS0+c3RhdGU7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB2b2lkICp2YWRkcjsKPj4gLcKgwqDCoMKgwqDCoMKgIGNlID0gaW50ZWxfY29u dGV4dF9sb29rdXAoY3R4LCBlbmdpbmUpOwo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCFjZSkKPj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKg IHN0YXRlID0gY2UtPnN0YXRlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFzdGF0ZSkKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IEBAIC00NDE5LDYgKzQ0MTgs NyBAQCBzdGF0aWMgaW50IAo+PiBfX2ludGVsX2VuZ2luZXNfcmVjb3JkX2RlZmF1bHRzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgb3V0X2N0eDoK Pj4gK8KgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+IMKgwqDC oMKgwqAgaTkxNV9nZW1fY29udGV4dF9zZXRfY2xvc2VkKGN0eCk7Cj4+IMKgwqDCoMKgwqAgaTkx NV9nZW1fY29udGV4dF9wdXQoY3R4KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIAo+PiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwo+PiBpbmRleCAxZTE3NzAwNDdj YzIuLjFhMTM3M2YwOGZhOSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Nv bnRleHQuYwo+PiBAQCAtMTUwLDcgKzE1MCw3IEBAIGxvb2t1cF91c2VyX2VuZ2luZShzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4LCAKPj4gdTE2IGNsYXNzLCB1MTYgaW5zdGFuY2UpCj4+IMKg wqDCoMKgwqAgaWYgKCFlbmdpbmUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BU UigtRUlOVkFMKTsKPj4gLcKgwqDCoCByZXR1cm4gaW50ZWxfY29udGV4dF9pbnN0YW5jZShjdHgs IGVuZ2luZSk7Cj4+ICvCoMKgwqAgcmV0dXJuIGk5MTVfZ2VtX2NvbnRleHRfZ2V0X2VuZ2luZShj dHgsIGVuZ2luZS0+aWQpOwo+PiDCoCB9Cj4+IMKgIHN0YXRpYyBpbmxpbmUgaW50IG5ld19od19p ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgZ2ZwX3QgZ2ZwKQo+PiBAQCAtMjQyLDEw ICsyNDIsNTEgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9od19pZChzdHJ1Y3QgCj4+IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCkKPj4gwqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmk5MTUtPmNvbnRleHRz Lm11dGV4KTsKPj4gwqAgfQo+PiAtc3RhdGljIHZvaWQgaTkxNV9nZW1fY29udGV4dF9mcmVlKHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+ICtzdGF0aWMgdm9pZCBfX2ZyZWVfZW5naW5l cyhzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lcyAqZSwgdW5zaWduZWQgaW50IAo+PiBjb3VudCkKPj4g wqAgewo+PiAtwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICppdCwgKm47Cj4+ICvCoMKgwqAg d2hpbGUgKGNvdW50LS0pIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZS0+ZW5naW5lc1tjb3Vu dF0pCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoCBpbnRlbF9jb250ZXh0X3B1dChlLT5lbmdpbmVzW2NvdW50XSk7Cj4+ICvCoMKgwqAg fQo+PiArwqDCoMKgIGtmcmVlKGUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBmcmVlX2Vu Z2luZXMoc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKmUpCj4+ICt7Cj4+ICvCoMKgwqAgX19mcmVl X2VuZ2luZXMoZSwgZS0+bnVtX2VuZ2luZXMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0 IGk5MTVfZ2VtX2VuZ2luZXMgKmRlZmF1bHRfZW5naW5lcyhzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmU7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKmU7Cj4+ICvCoMKgwqAgZW51 bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4+ICsKPj4gK8KgwqDCoCBlID0ga3phbGxvYyhzdHJ1Y3Rf c2l6ZShlLCBlbmdpbmVzLCBJOTE1X05VTV9FTkdJTkVTKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKg wqAgaWYgKCFlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ ICsKPj4gK8KgwqDCoCBlLT5pOTE1ID0gY3R4LT5pOTE1Owo+PiArwqDCoMKgIGZvcl9lYWNoX2Vu Z2luZShlbmdpbmUsIGN0eC0+aTkxNSwgaWQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjZTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgY2UgPSBpbnRlbF9jb250 ZXh0X2NyZWF0ZShjdHgsIGVuZ2luZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNl KSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2ZyZWVfZW5naW5lcyhlLCBpZCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfQ0FTVChjZSk7Cj4+ICvCoMKgwqDC oMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBlLT5lbmdpbmVzW2lkXSA9IGNlOwo+PiArwqDC oMKgIH0KPj4gK8KgwqDCoCBlLT5udW1fZW5naW5lcyA9IGlkOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIGU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJlZShz dHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+PiArewo+PiDCoMKgwqDCoMKgIGxvY2tkZXBf YXNzZXJ0X2hlbGQoJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4+IMKgwqDCoMKgwqAg R0VNX0JVR19PTighaTkxNV9nZW1fY29udGV4dF9pc19jbG9zZWQoY3R4KSk7Cj4+IMKgwqDCoMKg wqAgR0VNX0JVR19PTighbGlzdF9lbXB0eSgmY3R4LT5hY3RpdmVfZW5naW5lcykpOwo+PiBAQCAt MjUzLDggKzI5NCw4IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfZnJlZShzdHJ1Y3Qg Cj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqDCoMKgwqDCoCByZWxlYXNlX2h3X2lkKGN0 eCk7Cj4+IMKgwqDCoMKgwqAgaTkxNV9wcGd0dF9wdXQoY3R4LT5wcGd0dCk7Cj4+IC3CoMKgwqAg cmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0LCBuLCAmY3R4LT5od19jb250 ZXh0cywgbm9kZSkKPj4gLcKgwqDCoMKgwqDCoMKgIGludGVsX2NvbnRleHRfcHV0KGl0KTsKPj4g K8KgwqDCoCBmcmVlX2VuZ2luZXMocmN1X2FjY2Vzc19wb2ludGVyKGN0eC0+ZW5naW5lcykpOwo+ PiArwqDCoMKgIG11dGV4X2Rlc3Ryb3koJmN0eC0+ZW5naW5lc19tdXRleCk7Cj4+IMKgwqDCoMKg wqAgaWYgKGN0eC0+dGltZWxpbmUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X3RpbWVsaW5l X3B1dChjdHgtPnRpbWVsaW5lKTsKPj4gQEAgLTM2Myw2ICs0MDQsOCBAQCBzdGF0aWMgc3RydWN0 IGk5MTVfZ2VtX2NvbnRleHQgKgo+PiDCoCBfX2NyZWF0ZV9jb250ZXh0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgKmU7Cj4+ ICvCoMKgwqAgaW50IGVycjsKPj4gwqDCoMKgwqDCoCBpbnQgaTsKPj4gwqDCoMKgwqDCoCBjdHgg PSBremFsbG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7Cj4+IEBAIC0zNzYsOCArNDE5LDEz IEBAIF9fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ PiDCoMKgwqDCoMKgIElOSVRfTElTVF9IRUFEKCZjdHgtPmFjdGl2ZV9lbmdpbmVzKTsKPj4gwqDC oMKgwqDCoCBtdXRleF9pbml0KCZjdHgtPm11dGV4KTsKPj4gLcKgwqDCoCBjdHgtPmh3X2NvbnRl eHRzID0gUkJfUk9PVDsKPj4gLcKgwqDCoCBzcGluX2xvY2tfaW5pdCgmY3R4LT5od19jb250ZXh0 c19sb2NrKTsKPj4gK8KgwqDCoCBtdXRleF9pbml0KCZjdHgtPmVuZ2luZXNfbXV0ZXgpOwo+PiAr wqDCoMKgIGUgPSBkZWZhdWx0X2VuZ2luZXMoY3R4KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKGUp KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKGUpOwo+PiArwqDCoMKgwqDCoMKg wqAgZ290byBlcnJfZnJlZTsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgUkNVX0lOSVRfUE9JTlRF UihjdHgtPmVuZ2luZXMsIGUpOwo+PiDCoMKgwqDCoMKgIElOSVRfUkFESVhfVFJFRSgmY3R4LT5o YW5kbGVzX3ZtYSwgR0ZQX0tFUk5FTCk7Cj4+IMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmN0 eC0+aGFuZGxlc19saXN0KTsKPj4gQEAgLTM5OSw2ICs0NDcsMTAgQEAgX19jcmVhdGVfY29udGV4 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBjdHgtPmhhbmdfdGltZXN0YW1wW2ldID0gamlmZmllcyAtIENPTlRFWFRfRkFTVF9IQU5HX0pJ RkZJRVM7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIGN0eDsKPj4gKwo+PiArZXJyX2ZyZWU6Cj4+ICvC oMKgwqAga2ZyZWUoY3R4KTsKPj4gK8KgwqDCoCByZXR1cm4gRVJSX1BUUihlcnIpOwo+PiDCoCB9 Cj4+IMKgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqCj4+IEBAIC04NjIsNyArOTE0LDcg QEAgc3RhdGljIGludCBjb250ZXh0X2JhcnJpZXJfdGFzayhzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2Nv bnRleHQgKmN0eCwKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gY3R4LT5pOTE1Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBjb250ZXh0X2JhcnJpZXJf dGFzayAqY2I7Cj4+IC3CoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCAqbmV4dDsKPj4g K8KgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lc19pdGVyIGl0Owo+PiDCoMKgwqDCoMKgIGlu dCBlcnIgPSAwOwo+PiDCoMKgwqDCoMKgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmk5MTUtPmRybS5z dHJ1Y3RfbXV0ZXgpOwo+PiBAQCAtODc1LDIwICs5MjcsMjMgQEAgc3RhdGljIGludCBjb250ZXh0 X2JhcnJpZXJfdGFzayhzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4gwqDCoMKg wqDCoCBpOTE1X2FjdGl2ZV9pbml0KGk5MTUsICZjYi0+YmFzZSwgY2JfcmV0aXJlKTsKPj4gwqDC oMKgwqDCoCBpOTE1X2FjdGl2ZV9hY3F1aXJlKCZjYi0+YmFzZSk7Cj4+IC3CoMKgwqAgcmJ0cmVl X3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKGNlLCBuZXh0LCAmY3R4LT5od19jb250ZXh0 cywgCj4+IG5vZGUpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSA9IGNlLT5lbmdpbmU7Cj4+ICvCoMKgwqAgZm9yX2VhY2hfZ2VtX2VuZ2luZShpdCwg aTkxNV9nZW1fY29udGV4dF9sb2NrX2VuZ2luZXMoY3R4KSkgewo+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gaXQuY29udGV4dDsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCEoZW5n aW5lLT5tYXNrICYgZW5naW5lcykpCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIShjZS0+ZW5naW5l LT5tYXNrICYgZW5naW5lcykpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWludGVsX2NvbnRleHRfaXNfcGlubmVkKGNlKSkK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoSTkxNV9TRUxGVEVTVF9PTkxZKGNvbnRleHRfYmFycmllcl9pbmplY3RfZmF1bHQg Jgo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5l LT5tYXNrKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY2UtPmVuZ2luZS0+bWFzaykpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJy ID0gLUVOWElPOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gLcKgwqDCoMKgwqDCoMKgIHJxID0gaTkxNV9yZXF1ZXN0X2FsbG9j KGVuZ2luZSwgY3R4KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJxID0gaW50ZWxfY29udGV4dF9jcmVh dGVfcmVxdWVzdChjZSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHJxKSkgewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnIgPSBQVFJfRVJSKHJxKTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IEBAIC05MDQsNiArOTU5LDcgQEAgc3RhdGlj IGludCBjb250ZXh0X2JhcnJpZXJfdGFzayhzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2NvbnRleHQgKmN0 eCwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChlcnIpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJyZWFrOwo+PiDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCBpOTE1X2dlbV9jb250ZXh0 X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+IMKgwqDCoMKgwqAgY2ItPnRhc2sgPSBlcnIgPyBOVUxM IDogdGFzazsgLyogY2FsbGVyIG5lZWRzIHRvIHVud2luZCBpbnN0ZWFkICovCj4+IMKgwqDCoMKg wqAgY2ItPmRhdGEgPSBkYXRhOwo+PiBAQCAtMTczOSw2ICsxNzk1LDIxIEBAIGludCBfX2k5MTVf Z2VtX2NvbnRleHRfcGluX2h3X2lkKHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ PiDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4+IMKgIH0KPj4gKy8qIEdFTSBjb250ZXh0LWVuZ2lu ZXMgaXRlcmF0b3I6IGZvcl9lYWNoX2dlbV9lbmdpbmUoKSAqLwo+PiArYm9vbCBpOTE1X2dlbV9l bmdpbmVzX2l0ZXJfbmV4dChzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lc19pdGVyICppdCkKPj4gK3sK Pj4gK8KgwqDCoCBHRU1fQlVHX09OKCFpdC0+ZW5naW5lcyk7Cj4+ICsKPj4gK8KgwqDCoCBkbyB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoaXQtPmlkeCA+PSBpdC0+ZW5naW5lcy0+bnVtX2VuZ2lu ZXMpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgaXQtPmNvbnRleHQgPSBpdC0+ZW5naW5lcy0+ZW5naW5lc1tpdC0+aWR4Kytd Owo+PiArwqDCoMKgIH0gd2hpbGUgKCFpdC0+Y29udGV4dCk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1 cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiDCoCAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVf U0VMRlRFU1QpCj4+IMKgICNpbmNsdWRlICJzZWxmdGVzdHMvbW9ja19jb250ZXh0LmMiCj4+IMKg ICNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIgo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAo+PiBpbmRleCA1YThlMDgwNDk5ZmIuLjI2NTdh MmNlODJkYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29u dGV4dC5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaAo+ PiBAQCAtMTc2LDYgKzE3Niw2NCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fY29udGV4 dF9wdXQoc3RydWN0IAo+PiBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+IMKgwqDCoMKgwqAga3Jl Zl9wdXQoJmN0eC0+cmVmLCBpOTE1X2dlbV9jb250ZXh0X3JlbGVhc2UpOwo+PiDCoCB9Cj4+ICtz dGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzICoKPj4gK2k5MTVfZ2VtX2NvbnRl eHRfZW5naW5lcyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+PiArewo+PiArwqDCoMKg IHJldHVybiByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGN0eC0+ZW5naW5lcywKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9ja2RlcF9pc19oZWxkKCZjdHgt PmVuZ2luZXNfbXV0ZXgpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaTkx NV9nZW1fZW5naW5lcyAqCj4+ICtpOTE1X2dlbV9jb250ZXh0X2xvY2tfZW5naW5lcyhzdHJ1Y3Qg aTkxNV9nZW1fY29udGV4dCAqY3R4KQo+PiArwqDCoMKgIF9fYWNxdWlyZXMoJmN0eC0+ZW5naW5l c19tdXRleCkKPj4gK3sKPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZjdHgtPmVuZ2luZXNfbXV0ZXgp Owo+PiArwqDCoMKgIHJldHVybiBpOTE1X2dlbV9jb250ZXh0X2VuZ2luZXMoY3R4KTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkCj4+ICtpOTE1X2dlbV9jb250ZXh0X3VubG9ja19l bmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+ICvCoMKgwqAgX19yZWxlYXNl cygmY3R4LT5lbmdpbmVzX211dGV4KQo+PiArewo+PiArwqDCoMKgIG11dGV4X3VubG9jaygmY3R4 LT5lbmdpbmVzX211dGV4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqCj4+ICtpOTE1X2dlbV9jb250ZXh0X2xvb2t1cF9lbmdpbmUoc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwgdW5zaWduZWQgCj4+IGludCBpZHgpCj4+ICt7Cj4+ICvCoMKg wqAgcmV0dXJuIGk5MTVfZ2VtX2NvbnRleHRfZW5naW5lcyhjdHgpLT5lbmdpbmVzW2lkeF07Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2NvbnRleHQgKgo+PiAraTkx NV9nZW1fY29udGV4dF9nZXRfZW5naW5lKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHVu c2lnbmVkIAo+PiBpbnQgaWR4KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpjZSA9IEVSUl9QVFIoLUVJTlZBTCk7Cj4+ICsKPj4gK8KgwqDCoCByY3VfcmVhZF9sb2NrKCk7 IHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzICplID0gcmN1X2Rl cmVmZXJlbmNlKGN0eC0+ZW5naW5lcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobGlrZWx5KGlk eCA8IGUtPm51bV9lbmdpbmVzICYmIGUtPmVuZ2luZXNbaWR4XSkpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNlID0gaW50ZWxfY29udGV4dF9nZXQoZS0+ZW5naW5lc1tpZHhdKTsKPj4gK8Kg wqDCoCB9IHJjdV9yZWFkX3VubG9jaygpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGNlOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9nZW1fZW5naW5lc19pdGVyX2luaXQo c3RydWN0IAo+PiBpOTE1X2dlbV9lbmdpbmVzX2l0ZXIgKml0LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2lu ZXMgKmVuZ2luZXMpCj4+ICt7Cj4+ICvCoMKgwqAgR0VNX0JVR19PTighZW5naW5lcyk7Cj4+ICsK Pj4gK8KgwqDCoCBpdC0+aWR4ID0gMDsKPj4gK8KgwqDCoCBpdC0+Y29udGV4dCA9IE5VTEw7Cj4+ ICvCoMKgwqAgaXQtPmVuZ2luZXMgPSBlbmdpbmVzOwo+PiArfQo+PiArCj4+ICtib29sIGk5MTVf Z2VtX2VuZ2luZXNfaXRlcl9uZXh0KHN0cnVjdCBpOTE1X2dlbV9lbmdpbmVzX2l0ZXIgKml0KTsK Pj4gKwo+PiArI2RlZmluZSBmb3JfZWFjaF9nZW1fZW5naW5lKGl0LCBlbmdpbmVzKSBcCj4+ICvC oMKgwqAgZm9yIChpOTE1X2dlbV9lbmdpbmVzX2l0ZXJfaW5pdCgmKGl0KSwgKGVuZ2luZXMpKTsg XAo+PiArwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2dlbV9lbmdpbmVzX2l0ZXJfbmV4dCgmKGl0KSk7 KQo+PiArCj4+IMKgIHN0cnVjdCBpOTE1X2x1dF9oYW5kbGUgKmk5MTVfbHV0X2hhbmRsZV9hbGxv Yyh2b2lkKTsKPj4gwqAgdm9pZCBpOTE1X2x1dF9oYW5kbGVfZnJlZShzdHJ1Y3QgaTkxNV9sdXRf aGFuZGxlICpsdXQpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fY29udGV4dF90eXBlcy5oIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Nv bnRleHRfdHlwZXMuaAo+PiBpbmRleCBkMjgyYTZhYjNiOWYuLmM3NGYwNTQ1Mzc1ZiAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dF90eXBlcy5oCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHRfdHlwZXMuaAo+PiBA QCAtMjksNiArMjksMTkgQEAgc3RydWN0IGk5MTVfaHdfcHBndHQ7Cj4+IMKgIHN0cnVjdCBpOTE1 X3RpbWVsaW5lOwo+PiDCoCBzdHJ1Y3QgaW50ZWxfcmluZzsKPj4gK3N0cnVjdCBpOTE1X2dlbV9l bmdpbmVzIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgcmN1X3dvcmsgcmN1Owo+PiArwqDCoMKgIHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1Owo+PiArwqDCoMKgIHVuc2lnbmVkIGludCBudW1fZW5n aW5lczsKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqZW5naW5lc1tdOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXNfaXRlciB7Cj4+ICvCoMKgwqAgc3RydWN0 IGludGVsX2NvbnRleHQgKmNvbnRleHQ7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2lu ZXMgKmVuZ2luZXM7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGlkeDsKPj4gK307Cj4+ICsKPj4g wqAgLyoqCj4+IMKgwqAgKiBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAtIGNsaWVudCBzdGF0ZQo+ PiDCoMKgICoKPj4gQEAgLTQyLDYgKzU1LDIxIEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsK Pj4gwqDCoMKgwqDCoCAvKiogZmlsZV9wcml2OiBvd25pbmcgZmlsZSBkZXNjcmlwdG9yICovCj4+ IMKgwqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0ZSAqZmlsZV9wcml2Owo+PiAr wqDCoMKgIC8qKgo+PiArwqDCoMKgwqAgKiBAZW5naW5lczogVXNlciBkZWZpbmVkIGVuZ2luZXMg Zm9yIHRoaXMgY29udGV4dAo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBOVUxMIG1lYW5z IHRvIHVzZSBsZWdhY3kgZGVmaW5pdGlvbnMgKGluY2x1ZGluZyByYW5kb20gbWVhbmluZyBvZgo+ PiArwqDCoMKgwqAgKiBJOTE1X0VYRUNfQlNEIHdpdGggSTkxNV9FWEVDX0JTRF9TRUxFQ1RPUiBv dmVycmlkZXMpLgoKQWZhaWN0IGN0eC0+ZW5naW5lcyBpcyBuZXZlciBOVUxMIGJ1dCBzZXQgdG8g ZGVmYXVsdC9hbGwgZW5naW5lcyBzbyB0aGlzIApjb21tZW50IGlzIG5vdCBjb3JyZWN0LgoKUmVn YXJkcywKClR2cnRrbwoKPj4gK8KgwqDCoMKgICoKPj4gK8KgwqDCoMKgICogSWYgZGVmaW5lZCwg ZXhlY2J1ZiB1c2VzIHRoZSBJOTE1X0VYRUNfTUFTSyBhcyBhbiBpbmRleCBpbnRvCj4+ICvCoMKg wqDCoCAqIGFycmF5LCBhbmQgdmFyaW91cyB1QVBJIG90aGVyIHRoZSBhYmlsaXR5IHRvIGxvb2t1 cCB1cCBhbgo+PiArwqDCoMKgwqAgKiBpbmRleCBmcm9tIHRoaXMgYXJyYXkgdG8gc2VsZWN0IGFu IGVuZ2luZSBvcGVyYXRlIG9uLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBVc2VyIGRl ZmluZWQgYnkgSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORS4KPj4gK8KgwqDCoMKgICovCj4+ICvC oMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXMgX19yY3UgKmVuZ2luZXM7Cj4+ICvCoMKgwqAg c3RydWN0IG11dGV4IGVuZ2luZXNfbXV0ZXg7IC8qIGd1YXJkcyB3cml0ZXMgdG8gZW5naW5lcyAq Lwo+PiArCj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfdGltZWxpbmUgKnRpbWVsaW5lOwo+PiDC oMKgwqDCoMKgIC8qKgo+PiBAQCAtMTM0LDEwICsxNjIsNiBAQCBzdHJ1Y3QgaTkxNV9nZW1fY29u dGV4dCB7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfc2NoZWRfYXR0ciBzY2hlZDsKPj4gLcKg wqDCoCAvKiogaHdfY29udGV4dHM6IHBlci1lbmdpbmUgbG9naWNhbCBIVyBzdGF0ZSAqLwo+PiAt wqDCoMKgIHN0cnVjdCByYl9yb290IGh3X2NvbnRleHRzOwo+PiAtwqDCoMKgIHNwaW5sb2NrX3Qg aHdfY29udGV4dHNfbG9jazsKPj4gLQo+PiDCoMKgwqDCoMKgIC8qKiByaW5nX3NpemU6IHNpemUg Zm9yIGFsbG9jYXRpbmcgdGhlIHBlci1lbmdpbmUgcmluZyBidWZmZXIgKi8KPj4gwqDCoMKgwqDC oCB1MzIgcmluZ19zaXplOwo+PiDCoMKgwqDCoMKgIC8qKiBkZXNjX3RlbXBsYXRlOiBpbnZhcmlh bnQgZmllbGRzIGZvciB0aGUgSFcgY29udGV4dCAKPj4gZGVzY3JpcHRvciAqLwo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIAo+PiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+PiBpbmRleCAxNjZhMzNj MGQzZWQuLjY3OWY3YzE1NjFiYSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYwo+PiBAQCAtMjA3Niw5ICsyMDc2LDcgQEAgZ2VuOF9kaXNwYXRjaF9i c2RfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqZGV2X3ByaXYsCj4+IMKgwqDC oMKgwqAgcmV0dXJuIGZpbGVfcHJpdi0+YnNkX2VuZ2luZTsKPj4gwqAgfQo+PiAtI2RlZmluZSBJ OTE1X1VTRVJfUklOR1MgKDQpCj4+IC0KPj4gLXN0YXRpYyBjb25zdCBlbnVtIGludGVsX2VuZ2lu ZV9pZCB1c2VyX3JpbmdfbWFwW0k5MTVfVVNFUl9SSU5HUyArIDFdID0gewo+PiArc3RhdGljIGNv bnN0IGVudW0gaW50ZWxfZW5naW5lX2lkIHVzZXJfcmluZ19tYXBbXSA9IHsKPj4gwqDCoMKgwqDC oCBbSTkxNV9FWEVDX0RFRkFVTFRdwqDCoMKgID0gUkNTMCwKPj4gwqDCoMKgwqDCoCBbSTkxNV9F WEVDX1JFTkRFUl3CoMKgwqAgPSBSQ1MwLAo+PiDCoMKgwqDCoMKgIFtJOTE1X0VYRUNfQkxUXcKg wqDCoMKgwqDCoMKgID0gQkNTMCwKPj4gQEAgLTIwODYsMTAgKzIwODQsOCBAQCBzdGF0aWMgY29u c3QgZW51bSBpbnRlbF9lbmdpbmVfaWQgCj4+IHVzZXJfcmluZ19tYXBbSTkxNV9VU0VSX1JJTkdT ICsgMV0gPSB7Cj4+IMKgwqDCoMKgwqAgW0k5MTVfRVhFQ19WRUJPWF3CoMKgwqAgPSBWRUNTMAo+ PiDCoCB9Owo+PiAtc3RhdGljIGludCBlYl9waW5fY29udGV4dChzdHJ1Y3QgaTkxNV9leGVjYnVm ZmVyICplYiwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPj4gK3N0YXRpYyBpbnQgZWJfcGluX2NvbnRleHQoc3RydWN0IGk5MTVf ZXhlY2J1ZmZlciAqZWIsIHN0cnVjdCAKPj4gaW50ZWxfY29udGV4dCAqY2UpCj4+IMKgIHsKPj4g LcKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+IMKgwqDCoMKgwqAgaW50IGVycjsK Pj4gwqDCoMKgwqDCoCAvKgo+PiBAQCAtMjEwMCwyMSArMjA5NiwxNiBAQCBzdGF0aWMgaW50IGVi X3Bpbl9jb250ZXh0KHN0cnVjdCAKPj4gaTkxNV9leGVjYnVmZmVyICplYiwKPj4gwqDCoMKgwqDC oCBpZiAoZXJyKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4gLcKgwqDCoCBj ZSA9IGludGVsX2NvbnRleHRfaW5zdGFuY2UoZWItPmdlbV9jb250ZXh0LCBlbmdpbmUpOwo+PiAt wqDCoMKgIGlmIChJU19FUlIoY2UpKQo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIo Y2UpOwo+PiAtCj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogUGlubmluZyB0aGUg Y29udGV4dHMgbWF5IGdlbmVyYXRlIHJlcXVlc3RzIGluIG9yZGVyIHRvIGFjcXVpcmUKPj4gwqDC oMKgwqDCoMKgICogR0dUVCBzcGFjZSwgc28gZG8gdGhpcyBmaXJzdCBiZWZvcmUgd2UgcmVzZXJ2 ZSBhIHNlcW5vIGZvcgo+PiDCoMKgwqDCoMKgwqAgKiBvdXJzZWx2ZXMuCj4+IMKgwqDCoMKgwqDC oCAqLwo+PiDCoMKgwqDCoMKgIGVyciA9IGludGVsX2NvbnRleHRfcGluKGNlKTsKPj4gLcKgwqDC oCBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4+IMKgwqDCoMKgwqAgaWYgKGVycikKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBlcnI7Cj4+IC3CoMKgwqAgZWItPmVuZ2luZSA9IGVuZ2luZTsK Pj4gK8KgwqDCoCBlYi0+ZW5naW5lID0gY2UtPmVuZ2luZTsKPj4gwqDCoMKgwqDCoCBlYi0+Y29u dGV4dCA9IGNlOwo+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IEBAIC0yMTI0LDI1 ICsyMTE1LDE5IEBAIHN0YXRpYyB2b2lkIGViX3VucGluX2NvbnRleHQoc3RydWN0IAo+PiBpOTE1 X2V4ZWNidWZmZXIgKmViKQo+PiDCoMKgwqDCoMKgIGludGVsX2NvbnRleHRfdW5waW4oZWItPmNv bnRleHQpOwo+PiDCoCB9Cj4+IC1zdGF0aWMgaW50Cj4+IC1lYl9zZWxlY3RfZW5naW5lKHN0cnVj dCBpOTE1X2V4ZWNidWZmZXIgKmViLAo+PiAtwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsCj4+IC3CoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgKmFyZ3MpCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50Cj4+ICtlYl9zZWxlY3RfbGVnYWN5 X3Jpbmcoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICphcmdzKQo+PiDCoCB7Cj4+IMKg wqDCoMKgwqAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlYi0+aTkxNTsKPj4gwqDC oMKgwqDCoCB1bnNpZ25lZCBpbnQgdXNlcl9yaW5nX2lkID0gYXJncy0+ZmxhZ3MgJiBJOTE1X0VY RUNfUklOR19NQVNLOwo+PiAtwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsK Pj4gLQo+PiAtwqDCoMKgIGlmICh1c2VyX3JpbmdfaWQgPiBJOTE1X1VTRVJfUklOR1MpIHsKPj4g LcKgwqDCoMKgwqDCoMKgIERSTV9ERUJVRygiZXhlY2J1ZiB3aXRoIHVua25vd24gcmluZzogJXVc biIsIHVzZXJfcmluZ19pZCk7Cj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4g LcKgwqDCoCB9Cj4+IC3CoMKgwqAgaWYgKCh1c2VyX3JpbmdfaWQgIT0gSTkxNV9FWEVDX0JTRCkg JiYKPj4gLcKgwqDCoMKgwqDCoMKgICgoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfQlNEX01BU0sp ICE9IDApKSB7Cj4+ICvCoMKgwqAgaWYgKHVzZXJfcmluZ19pZCAhPSBJOTE1X0VYRUNfQlNEICYm Cj4+ICvCoMKgwqDCoMKgwqDCoCAoYXJncy0+ZmxhZ3MgJiBJOTE1X0VYRUNfQlNEX01BU0spKSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fREVCVUcoImV4ZWNidWYgd2l0aCBub24gYnNkIHJp bmcgYnV0IHdpdGggaW52YWxpZCAiCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi YnNkIGRpc3BhdGNoIGZsYWdzOiAlZFxuIiwgKGludCkoYXJncy0+ZmxhZ3MpKTsKPj4gLcKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC0xOwo+ PiDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCBpZiAodXNlcl9yaW5nX2lkID09IEk5MTVfRVhF Q19CU0QgJiYgSEFTX0VOR0lORShpOTE1LCBWQ1MxKSkgewo+PiBAQCAtMjE1NywyMCArMjE0Miwz OSBAQCBlYl9zZWxlY3RfZW5naW5lKHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAo+PiDCoMKg wqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJN X0RFQlVHKCJleGVjYnVmIHdpdGggdW5rbm93biBic2QgcmluZzogJXVcbiIsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJzZF9pZHgpOwo+PiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC0xOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgwqDCoMKgwqAgZW5naW5l ID0gaTkxNS0+ZW5naW5lW19WQ1MoYnNkX2lkeCldOwo+PiAtwqDCoMKgIH0gZWxzZSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBlbmdpbmUgPSBpOTE1LT5lbmdpbmVbdXNlcl9yaW5nX21hcFt1c2VyX3Jp bmdfaWRdXTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBfVkNTKGJzZF9pZHgpOwo+PiDCoMKg wqDCoMKgIH0KPj4gLcKgwqDCoCBpZiAoIWVuZ2luZSkgewo+PiAtwqDCoMKgwqDCoMKgwqAgRFJN X0RFQlVHKCJleGVjYnVmIHdpdGggaW52YWxpZCByaW5nOiAldVxuIiwgdXNlcl9yaW5nX2lkKTsK Pj4gLcKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgIGlmICh1c2VyX3Jp bmdfaWQgPj0gQVJSQVlfU0laRSh1c2VyX3JpbmdfbWFwKSkgewo+PiArwqDCoMKgwqDCoMKgwqAg RFJNX0RFQlVHKCJleGVjYnVmIHdpdGggdW5rbm93biByaW5nOiAldVxuIiwgdXNlcl9yaW5nX2lk KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtMTsKPj4gwqDCoMKgwqDCoCB9Cj4+IC3CoMKg wqAgcmV0dXJuIGViX3Bpbl9jb250ZXh0KGViLCBlbmdpbmUpOwo+PiArwqDCoMKgIHJldHVybiB1 c2VyX3JpbmdfbWFwW3VzZXJfcmluZ19pZF07Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQKPj4g K2ViX3NlbGVjdF9lbmdpbmUoc3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqYXJncykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGlkeDsKPj4gK8Kg wqDCoCBpbnQgZXJyOwo+PiArCj4+ICvCoMKgwqAgaWR4ID0gZWJfc2VsZWN0X2xlZ2FjeV9yaW5n KGViLCBmaWxlLCBhcmdzKTsKPj4gKwo+PiArwqDCoMKgIGNlID0gaTkxNV9nZW1fY29udGV4dF9n ZXRfZW5naW5lKGViLT5nZW1fY29udGV4dCwgaWR4KTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKGNl KSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGNlKTsKPj4gKwo+PiArwqDCoMKg IGVyciA9IGViX3Bpbl9jb250ZXh0KGViLCBjZSk7Cj4+ICvCoMKgwqAgaW50ZWxfY29udGV4dF9w dXQoY2UpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGVycjsKPj4gwqAgfQo+PiDCoCBzdGF0aWMg dm9pZAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPj4gaW5kZXggYWZhZWFiZTVlNTMx Li5kYWZkZmY1Y2FhMzMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cGVyZi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4+IEBAIC0x MjAzLDM1ICsxMjAzLDM2IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCAKPj4gaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+PiDCoCBzdGF0aWMgc3RydWN0IGludGVsX2NvbnRleHQg Km9hX3Bpbl9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIAo+PiAqaTkxNSwKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCkKPj4gwqAgewo+PiAtwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSA9IGk5MTUtPmVuZ2luZVtSQ1MwXTsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2U7Cj4+ICvCoMKgwqAgc3RydWN0IGk5MTVfZ2VtX2VuZ2luZXNfaXRlciBp dDsKPj4gwqDCoMKgwqDCoCBpbnQgZXJyOwo+PiAtwqDCoMKgIGNlID0gaW50ZWxfY29udGV4dF9p bnN0YW5jZShjdHgsIGVuZ2luZSk7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUihjZSkpCj4+IC3CoMKg wqDCoMKgwqDCoCByZXR1cm4gY2U7Cj4+IC0KPj4gwqDCoMKgwqDCoCBlcnIgPSBpOTE1X211dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ZHJtKTsKPj4gLcKgwqDCoCBpZiAoZXJyKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4+ICvCoMKgwqAgaWYgKGVy cikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKGVycik7Cj4+ICsKPj4gK8Kg wqDCoCBmb3JfZWFjaF9nZW1fZW5naW5lKGl0LCBpOTE1X2dlbV9jb250ZXh0X2xvY2tfZW5naW5l cyhjdHgpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBp dC5jb250ZXh0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY2UtPmVuZ2luZS0+Y2xhc3Mg IT0gUkVOREVSX0NMQVNTKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBBcyB0aGUgSUQg aXMgdGhlIGd0dCBvZmZzZXQgb2YgdGhlIGNvbnRleHQncyB2bWEgd2UKPj4gK8KgwqDCoMKgwqDC oMKgwqAgKiBwaW4gdGhlIHZtYSB0byBlbnN1cmUgdGhlIElEIHJlbWFpbnMgZml4ZWQuCj4+ICvC oMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBpbnRlbF9jb250ZXh0 X3BpbihjZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZXJyID09IDApIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaTkxNS0+cGVyZi5vYS5waW5uZWRfY3R4ID0gY2U7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKg IH0KPj4gK8KgwqDCoCBpOTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+IC3C oMKgwqAgLyoKPj4gLcKgwqDCoMKgICogQXMgdGhlIElEIGlzIHRoZSBndHQgb2Zmc2V0IG9mIHRo ZSBjb250ZXh0J3Mgdm1hIHdlCj4+IC3CoMKgwqDCoCAqIHBpbiB0aGUgdm1hIHRvIGVuc3VyZSB0 aGUgSUQgcmVtYWlucyBmaXhlZC4KPj4gLcKgwqDCoMKgICoKPj4gLcKgwqDCoMKgICogTkI6IGlt cGxpZWQgUkNTIGVuZ2luZS4uLgo+PiAtwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCBlcnIgPSBpbnRl bF9jb250ZXh0X3BpbihjZSk7Cj4+IMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPj4gLcKgwqDCoCBpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4+IMKgwqDC oMKgwqAgaWYgKGVycikKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKGVycik7 Cj4+IC3CoMKgwqAgaTkxNS0+cGVyZi5vYS5waW5uZWRfY3R4ID0gY2U7Cj4+IC0KPj4gLcKgwqDC oCByZXR1cm4gY2U7Cj4+ICvCoMKgwqAgcmV0dXJuIGk5MTUtPnBlcmYub2EucGlubmVkX2N0eDsK Pj4gwqAgfQo+PiDCoCAvKioKPj4gQEAgLTE3MTcsNyArMTcxOCw2IEBAIGdlbjhfdXBkYXRlX3Jl Z19zdGF0ZV91bmxvY2tlZChzdHJ1Y3QgCj4+IGludGVsX2NvbnRleHQgKmNlLAo+PiDCoCBzdGF0 aWMgaW50IGdlbjhfY29uZmlndXJlX2FsbF9jb250ZXh0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAKPj4gKmRldl9wcml2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25maWcpCj4+IMKg IHsKPj4gLcKgwqDCoCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBkZXZfcHJpdi0+ ZW5naW5lW1JDUzBdOwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBtYXBfdHlwZSA9IGk5MTVf Y29oZXJlbnRfbWFwX3R5cGUoZGV2X3ByaXYpOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4+ IEBAIC0xNzQ2LDMwICsxNzQ2LDQxIEBAIHN0YXRpYyBpbnQgZ2VuOF9jb25maWd1cmVfYWxsX2Nv bnRleHRzKHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+IMKgwqDCoMKg wqAgLyogVXBkYXRlIGFsbCBjb250ZXh0cyBub3cgdGhhdCB3ZSd2ZSBzdGFsbGVkIHRoZSBzdWJt aXNzaW9uLiAqLwo+PiDCoMKgwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY3R4LCAmZGV2X3By aXYtPmNvbnRleHRzLmxpc3QsIGxpbmspIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSA9IGludGVsX2NvbnRleHRfbG9va3VwKGN0eCwgZW5naW5lKTsKPj4gLcKg wqDCoMKgwqDCoMKgIHUzMiAqcmVnczsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBpOTE1X2dl bV9lbmdpbmVzX2l0ZXIgaXQ7Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBPQSBzZXR0aW5ncyB3aWxs IGJlIHNldCB1cG9uIGZpcnN0IHVzZSAqLwo+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKCFjZSB8fCAh Y2UtPnN0YXRlKQo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gK8KgwqDC oMKgwqDCoMKgIGZvcl9lYWNoX2dlbV9lbmdpbmUoaXQsIGk5MTVfZ2VtX2NvbnRleHRfbG9ja19l bmdpbmVzKGN0eCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2Nv bnRleHQgKmNlID0gaXQuY29udGV4dDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyICpy ZWdzOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChjZS0+ZW5naW5lLT5jbGFz cyAhPSBSRU5ERVJfQ0xBU1MpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u dGludWU7Cj4+IC3CoMKgwqDCoMKgwqDCoCByZWdzID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAo Y2UtPnN0YXRlLT5vYmosIG1hcF90eXBlKTsKPj4gLcKgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIo cmVncykpCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHJlZ3MpOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBPQSBzZXR0aW5ncyB3aWxsIGJlIHNldCB1cG9u IGZpcnN0IHVzZSAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWNlLT5zdGF0ZSkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4gLcKgwqDCoMKg wqDCoMKgIGNlLT5zdGF0ZS0+b2JqLT5tbS5kaXJ0eSA9IHRydWU7Cj4+IC3CoMKgwqDCoMKgwqDC oCByZWdzICs9IExSQ19TVEFURV9QTiAqIFBBR0VfU0laRSAvIHNpemVvZigqcmVncyk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZ3MgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChjZS0+ c3RhdGUtPm9iaiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBtYXBfdHlwZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChJU19FUlIocmVncykpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp OTE1X2dlbV9jb250ZXh0X3VubG9ja19lbmdpbmVzKGN0eCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIocmVncyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4gLcKgwqDCoMKgwqDCoMKgIGdlbjhfdXBkYXRlX3JlZ19zdGF0ZV91bmxvY2tl ZChjZSwgcmVncywgb2FfY29uZmlnKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2UtPnN0 YXRlLT5vYmotPm1tLmRpcnR5ID0gdHJ1ZTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVn cyArPSBMUkNfU1RBVEVfUE4gKiBQQUdFX1NJWkUgLyBzaXplb2YoKnJlZ3MpOwo+PiAtwqDCoMKg wqDCoMKgwqAgaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChjZS0+c3RhdGUtPm9iaik7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdlbjhfdXBkYXRlX3JlZ19zdGF0ZV91bmxvY2tlZChjZSwg cmVncywgb2FfY29uZmlnKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2dl bV9vYmplY3RfdW5waW5fbWFwKGNlLT5zdGF0ZS0+b2JqKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4gK8KgwqDCoMKgwqDCoMKgIGk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMoY3R4KTsK Pj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgLyoKPj4gwqDCoMKgwqDCoMKgICogQXBwbHkg dGhlIGNvbmZpZ3VyYXRpb24gYnkgZG9pbmcgb25lIGNvbnRleHQgcmVzdG9yZSBvZiB0aGUgCj4+ IGVkaXRlZAo+PiDCoMKgwqDCoMKgwqAgKiBjb250ZXh0IGltYWdlLgo+PiDCoMKgwqDCoMKgwqAg Ki8KPj4gLcKgwqDCoCBycSA9IGk5MTVfcmVxdWVzdF9jcmVhdGUoZW5naW5lLT5rZXJuZWxfY29u dGV4dCk7Cj4+ICvCoMKgwqAgcnEgPSBpOTE1X3JlcXVlc3RfY3JlYXRlKGRldl9wcml2LT5lbmdp bmVbUkNTMF0tPmtlcm5lbF9jb250ZXh0KTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKHJxKSkK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKHJxKTsKPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIAo+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4+IGluZGV4IGVhZjg4NTFkZDNiYy4uNjVhOTQ5YjM2NTlh IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+PiBAQCAtNzg1LDcgKzc4 NSw2IEBAIGk5MTVfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs IAo+PiBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gZW5naW5lLT5pOTE1Owo+PiDCoMKgwqDCoMKgIHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cTsKPj4gLcKgwqDCoCBpbnQgZXJyOwo+PiDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoCAq IFByZWVtcHQgY29udGV4dHMgYXJlIHJlc2VydmVkIGZvciBleGNsdXNpdmUgdXNlIHRvIGluamVj dCBhCj4+IEBAIC03OTksMjEgKzc5OCwxMyBAQCBpOTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAKPj4gKmVuZ2luZSwgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCkK Pj4gwqDCoMKgwqDCoMKgICogR0dUVCBzcGFjZSwgc28gZG8gdGhpcyBmaXJzdCBiZWZvcmUgd2Ug cmVzZXJ2ZSBhIHNlcW5vIGZvcgo+PiDCoMKgwqDCoMKgwqAgKiBvdXJzZWx2ZXMuCj4+IMKgwqDC oMKgwqDCoCAqLwo+PiAtwqDCoMKgIGNlID0gaW50ZWxfY29udGV4dF9pbnN0YW5jZShjdHgsIGVu Z2luZSk7Cj4+ICvCoMKgwqAgY2UgPSBpOTE1X2dlbV9jb250ZXh0X2dldF9lbmdpbmUoY3R4LCBl bmdpbmUtPmlkKTsKPj4gwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNlKSkKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiBFUlJfQ0FTVChjZSk7Cj4+IC3CoMKgwqAgZXJyID0gaW50ZWxfY29udGV4 dF9waW4oY2UpOwo+PiAtwqDCoMKgIGlmIChlcnIpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHJxID0g RVJSX1BUUihlcnIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfcHV0Owo+PiAtwqDCoMKg IH0KPj4gLQo+PiAtwqDCoMKgIHJxID0gaTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSk7Cj4+IC3CoMKg wqAgaW50ZWxfY29udGV4dF91bnBpbihjZSk7Cj4+IC0KPj4gLWVycl9wdXQ6Cj4+ICvCoMKgwqAg cnEgPSBpbnRlbF9jb250ZXh0X2NyZWF0ZV9yZXF1ZXN0KGNlKTsKPj4gwqDCoMKgwqDCoCBpbnRl bF9jb250ZXh0X3B1dChjZSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCByZXR1cm4gcnE7Cj4+IMKgIH0K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19zdWJtaXNzaW9u LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+PiBp bmRleCAxYjZkNjQwM2VlOTIuLjJiN2M3M2FiYTUwMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4+IEBAIC0zNjQsMTEgKzM2NCw5IEBAIHN0 YXRpYyB2b2lkIGd1Y19zdGFnZV9kZXNjX3Bvb2xfZGVzdHJveShzdHJ1Y3QgCj4+IGludGVsX2d1 YyAqZ3VjKQo+PiDCoCBzdGF0aWMgdm9pZCBndWNfc3RhZ2VfZGVzY19pbml0KHN0cnVjdCBpbnRl bF9ndWNfY2xpZW50ICpjbGllbnQpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxf Z3VjICpndWMgPSBjbGllbnQtPmd1YzsKPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+PiAtwqDCoMKgIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAq Y3R4ID0gY2xpZW50LT5vd25lcjsKPj4gK8KgwqDCoCBzdHJ1Y3QgaTkxNV9nZW1fZW5naW5lc19p dGVyIGl0Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBndWNfc3RhZ2VfZGVzYyAqZGVzYzsKPj4gLcKg wqDCoCB1bnNpZ25lZCBpbnQgdG1wOwo+PiDCoMKgwqDCoMKgIHUzMiBnZnhfYWRkcjsKPj4gwqDC oMKgwqDCoCBkZXNjID0gX19nZXRfc3RhZ2VfZGVzYyhjbGllbnQpOwo+PiBAQCAtMzgyLDEwICsz ODAsMTIgQEAgc3RhdGljIHZvaWQgZ3VjX3N0YWdlX2Rlc2NfaW5pdChzdHJ1Y3QgCj4+IGludGVs X2d1Y19jbGllbnQgKmNsaWVudCkKPj4gwqDCoMKgwqDCoCBkZXNjLT5wcmlvcml0eSA9IGNsaWVu dC0+cHJpb3JpdHk7Cj4+IMKgwqDCoMKgwqAgZGVzYy0+ZGJfaWQgPSBjbGllbnQtPmRvb3JiZWxs X2lkOwo+PiAtwqDCoMKgIGZvcl9lYWNoX2VuZ2luZV9tYXNrZWQoZW5naW5lLCBkZXZfcHJpdiwg Y2xpZW50LT5lbmdpbmVzLCB0bXApIHsKPj4gLcKgwqDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSA9IGludGVsX2NvbnRleHRfbG9va3VwKGN0eCwgZW5naW5lKTsKPj4gLcKgwqDC oMKgwqDCoMKgIHUzMiBndWNfZW5naW5lX2lkID0gZW5naW5lLT5ndWNfaWQ7Cj4+IC3CoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgZ3VjX2V4ZWNsaXN0X2NvbnRleHQgKmxyYyA9ICZkZXNjLT5scmNbZ3Vj X2VuZ2luZV9pZF07Cj4+ICvCoMKgwqAgZm9yX2VhY2hfZ2VtX2VuZ2luZShpdCwgaTkxNV9nZW1f Y29udGV4dF9sb2NrX2VuZ2luZXMoY3R4KSkgewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlID0gaXQuY29udGV4dDsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBn dWNfZXhlY2xpc3RfY29udGV4dCAqbHJjOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIShj ZS0+ZW5naW5lLT5tYXNrICYgY2xpZW50LT5lbmdpbmVzKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29udGludWU7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUT0RPOiBXZSBoYXZlIGEg ZGVzaWduIGlzc3VlIHRvIGJlIHNvbHZlZCBoZXJlLiBPbmx5IHdoZW4gd2UKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgKiByZWNlaXZlIHRoZSBmaXJzdCBiYXRjaCwgd2Uga25vdyB3aGljaCBlbmdp bmUgaXMgdXNlZCBieSB0aGUKPj4gQEAgLTM5NCw3ICszOTQsNyBAQCBzdGF0aWMgdm9pZCBndWNf c3RhZ2VfZGVzY19pbml0KHN0cnVjdCAKPj4gaW50ZWxfZ3VjX2NsaWVudCAqY2xpZW50KQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIGZvciBub3cgd2hvIG93bnMgYSBHdUMgY2xpZW50LiBCdXQg Zm9yIGZ1dHVyZSBvd25lciBvZiBHdUMKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBjbGllbnQs IG5lZWQgdG8gbWFrZSBzdXJlIGxyYyBpcyBwaW5uZWQgcHJpb3IgdG8gZW50ZXIgaGVyZS4KPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoMKgwqDCoMKgIGlmICghY2UgfHwgIWNl LT5zdGF0ZSkKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghY2UtPnN0YXRlKQo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazvCoMKgwqAgLyogWFhYOiBjb250aW51ZT8gKi8KPj4gwqDC oMKgwqDCoMKgwqDCoMKgIC8qCj4+IEBAIC00MDQsNiArNDA0LDcgQEAgc3RhdGljIHZvaWQgZ3Vj X3N0YWdlX2Rlc2NfaW5pdChzdHJ1Y3QgCj4+IGludGVsX2d1Y19jbGllbnQgKmNsaWVudCkKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJbnN0ZWFkLCB0aGUgR3VDIHVzZXMgdGhlIExSQ0Egb2Yg dGhlIHVzZXIgbW9kZSBjb250ZXh0IChzZWUKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBndWNf YWRkX3JlcXVlc3QgYmVsb3cpLgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKg wqDCoMKgwqAgbHJjID0gJmRlc2MtPmxyY1tjZS0+ZW5naW5lLT5ndWNfaWRdOwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgbHJjLT5jb250ZXh0X2Rlc2MgPSBsb3dlcl8zMl9iaXRzKGNlLT5scmNfZGVz Yyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBUaGUgc3RhdGUgcGFnZSBpcyBhZnRlciBQUEhX U1AgKi8KPj4gQEAgLTQxNCwxNSArNDE1LDE2IEBAIHN0YXRpYyB2b2lkIGd1Y19zdGFnZV9kZXNj X2luaXQoc3RydWN0IAo+PiBpbnRlbF9ndWNfY2xpZW50ICpjbGllbnQpCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgICogaGVyZS4gSW4gcHJveHkgc3VibWlzc2lvbiwgaXQgd2FudHMgdGhlIHN0YWdl IGlkCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBscmMt PmNvbnRleHRfaWQgPSAoY2xpZW50LT5zdGFnZV9pZCA8PCBHVUNfRUxDX0NUWElEX09GRlNFVCkg fAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChndWNfZW5naW5lX2lkIDw8IEdV Q19FTENfRU5HSU5FX09GRlNFVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KGNlLT5lbmdpbmUtPmd1Y19pZCA8PCBHVUNfRUxDX0VOR0lORV9PRkZTRVQpOwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgbHJjLT5yaW5nX2JlZ2luID0gaW50ZWxfZ3VjX2dndHRfb2Zmc2V0KGd1Yywg Y2UtPnJpbmctPnZtYSk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBscmMtPnJpbmdfZW5kID0gbHJj LT5yaW5nX2JlZ2luICsgY2UtPnJpbmctPnNpemUgLSAxOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg bHJjLT5yaW5nX25leHRfZnJlZV9sb2NhdGlvbiA9IGxyYy0+cmluZ19iZWdpbjsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGxyYy0+cmluZ19jdXJyZW50X3RhaWxfcG9pbnRlcl92YWx1ZSA9IDA7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBkZXNjLT5lbmdpbmVzX3VzZWQgfD0gKDEgPDwgZ3VjX2VuZ2luZV9p ZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXNjLT5lbmdpbmVzX3VzZWQgfD0gQklUKGNlLT5lbmdp bmUtPmd1Y19pZCk7Cj4+IMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIGk5MTVfZ2VtX2NvbnRleHRf dW5sb2NrX2VuZ2luZXMoY3R4KTsKPj4gwqDCoMKgwqDCoCBEUk1fREVCVUdfRFJJVkVSKCJIb3N0 IGVuZ2luZXMgMHgleCA9PiBHdUMgZW5naW5lcyB1c2VkIDB4JXhcbiIsCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY2xpZW50LT5lbmdpbmVzLCBkZXNjLT5lbmdpbmVzX3VzZWQpOwo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2Nv bnRleHQuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29u dGV4dC5jCj4+IGluZGV4IDIxNGQxZmQyZjRkYy4uN2ZkMjI0YTRjYTRjIDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMKPj4g QEAgLTEwOTQsNyArMTA5NCw3IEBAIF9faWd0X2N0eF9zc2V1KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1LAo+PiDCoMKgwqDCoMKgIHdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldChp OTE1KTsKPj4gLcKgwqDCoCBjZSA9IGludGVsX2NvbnRleHRfaW5zdGFuY2UoY3R4LCBpOTE1LT5l bmdpbmVbUkNTMF0pOwo+PiArwqDCoMKgIGNlID0gaTkxNV9nZW1fY29udGV4dF9nZXRfZW5naW5l KGN0eCwgUkNTMCk7Cj4+IMKgwqDCoMKgwqAgaWYgKElTX0VSUihjZSkpIHsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldCA9IFBUUl9FUlIoY2UpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXRfcnBtOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfY29udGV4dC5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2Nv bnRleHQuYwo+PiBpbmRleCAwNDI2MDkzYmYxZDkuLjcxYzc1MDY5MzU4NSAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+PiBAQCAtMzAs NiArMzAsNyBAQCBtb2NrX2NvbnRleHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKm5hbWUpCj4+IMKgIHsKPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+PiArwqDCoMKgIHN0cnVjdCBpOTE1 X2dlbV9lbmdpbmVzICplOwo+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgwqAgY3R4 ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+PiBAQCAtNDAsOCArNDEsMTEg QEAgbW9ja19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+PiDCoMKgwqDC oMKgIElOSVRfTElTVF9IRUFEKCZjdHgtPmxpbmspOwo+PiDCoMKgwqDCoMKgIGN0eC0+aTkxNSA9 IGk5MTU7Cj4+IC3CoMKgwqAgY3R4LT5od19jb250ZXh0cyA9IFJCX1JPT1Q7Cj4+IC3CoMKgwqAg c3Bpbl9sb2NrX2luaXQoJmN0eC0+aHdfY29udGV4dHNfbG9jayk7Cj4+ICvCoMKgwqAgbXV0ZXhf aW5pdCgmY3R4LT5lbmdpbmVzX211dGV4KTsKPj4gK8KgwqDCoCBlID0gZGVmYXVsdF9lbmdpbmVz KGN0eCk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8g ZXJyX2ZyZWU7Cj4+ICvCoMKgwqAgUkNVX0lOSVRfUE9JTlRFUihjdHgtPmVuZ2luZXMsIGUpOwo+ PiDCoMKgwqDCoMKgIElOSVRfUkFESVhfVFJFRSgmY3R4LT5oYW5kbGVzX3ZtYSwgR0ZQX0tFUk5F TCk7Cj4+IMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmN0eC0+aGFuZGxlc19saXN0KTsKPj4g QEAgLTUxLDcgKzU1LDcgQEAgbW9ja19jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAo+PiDCoMKgwqDCoMKgIHJldCA9IGk5MTVfZ2VtX2NvbnRleHRfcGluX2h3X2lkKGN0eCk7 Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+IC3CoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9o YW5kbGVzOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfZW5naW5lczsKPj4gwqDCoMKgwqDC oCBpZiAobmFtZSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfaHdfcHBndHQg KnBwZ3R0Owo+PiBAQCAtNjksNyArNzMsOSBAQCBtb2NrX2NvbnRleHQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGN0eDsKPj4gLWVycl9oYW5kbGVz Ogo+PiArZXJyX2VuZ2luZXM6Cj4+ICvCoMKgwqAgZnJlZV9lbmdpbmVzKHJjdV9hY2Nlc3NfcG9p bnRlcihjdHgtPmVuZ2luZXMpKTsKPj4gK2Vycl9mcmVlOgo+PiDCoMKgwqDCoMKgIGtmcmVlKGN0 eCk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Cj4gCj4gUmV2aWV3ZWQtYnk6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gCj4gUmVnYXJkcywKPiAKPiBU dnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4