From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:43896) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0HPy-0000KA-2a for qemu-devel@nongnu.org; Sun, 04 Sep 2011 14:27:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R0HPv-0007eh-Qn for qemu-devel@nongnu.org; Sun, 04 Sep 2011 14:27:41 -0400 Received: from mail-qy0-f180.google.com ([209.85.216.180]:53247) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R0HPv-0007ed-ME for qemu-devel@nongnu.org; Sun, 04 Sep 2011 14:27:39 -0400 Received: by qyk31 with SMTP id 31so2645731qyk.4 for ; Sun, 04 Sep 2011 11:27:39 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1314909960-31738-20-git-send-email-jcmvbkbc@gmail.com> References: <1314909960-31738-1-git-send-email-jcmvbkbc@gmail.com> <1314909960-31738-20-git-send-email-jcmvbkbc@gmail.com> From: Blue Swirl Date: Sun, 4 Sep 2011 18:27:19 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH v4 19/32] target-xtensa: implement windowed registers List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Max Filippov Cc: qemu-devel@nongnu.org T24gVGh1LCBTZXAgMSwgMjAxMSBhdCA4OjQ1IFBNLCBNYXggRmlsaXBwb3YgPGpjbXZia2JjQGdt YWlsLmNvbT4gd3JvdGU6Cj4gU2VlIElTQSwgNC43LjEgZm9yIGRldGFpbHMuCj4KPiBQaHlzaWNh bCByZWdpc3RlcnMgYW5kIGN1cnJlbnRseSB2aXNpYmxlIHdpbmRvdyBhcmUgc2VwYXJhdGUgZmll bGRzIGluCj4gQ1BVRW52LiBPbmx5IGN1cnJlbnQgd2luZG93IGlzIGFjY2Vzc2libGUgdG8gVENH LiBPbiBvcGVyYXRpb25zIHRoYXQKPiBjaGFuZ2Ugd2luZG93IGJhc2UgaGVscGVycyBjb3B5IGN1 cnJlbnQgd2luZG93IHRvIGFuZCBmcm9tIHBoeXNpY2FsCj4gcmVnaXN0ZXJzLgo+Cj4gV2luZG93 IG92ZXJmbG93IGNoZWNrIGRlc2NyaWJlZCBpbiA0LjcuMS4zIGlzIGluIHNlcGFyYXRlIHBhdGNo Lgo+Cj4gU2lnbmVkLW9mZi1ieTogTWF4IEZpbGlwcG92IDxqY212YmtiY0BnbWFpbC5jb20+Cj4g LS0tCj4gwqB0YXJnZXQteHRlbnNhL2NwdS5oIMKgIMKgIMKgIHwgwqAgwqA4ICsrCj4gwqB0YXJn ZXQteHRlbnNhL2hlbHBlci5jIMKgIMKgfCDCoCDCoDEgKwo+IMKgdGFyZ2V0LXh0ZW5zYS9oZWxw ZXJzLmggwqAgfCDCoCDCoDggKysKPiDCoHRhcmdldC14dGVuc2Evb3BfaGVscGVyLmMgfCDCoDE4 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiDCoHRhcmdl dC14dGVuc2EvdHJhbnNsYXRlLmMgfCDCoDE0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLQo+IMKgNSBmaWxlcyBjaGFuZ2VkLCAzMzcgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlv bnMoLSkKPgo+IGRpZmYgLS1naXQgYS90YXJnZXQteHRlbnNhL2NwdS5oIGIvdGFyZ2V0LXh0ZW5z YS9jcHUuaAo+IGluZGV4IGNhZTY2MzcuLjdlNjYyZjUgMTAwNjQ0Cj4gLS0tIGEvdGFyZ2V0LXh0 ZW5zYS9jcHUuaAo+ICsrKyBiL3RhcmdldC14dGVuc2EvY3B1LmgKPiBAQCAtMTA4LDYgKzEwOCw4 IEBAIGVudW0gewo+IMKgZW51bSB7Cj4gwqAgwqAgU0FSID0gMywKPiDCoCDCoCBTQ09NUEFSRTEg PSAxMiwKPiArIMKgIMKgV0lORE9XX0JBU0UgPSA3MiwKPiArIMKgIMKgV0lORE9XX1NUQVJUID0g NzMsCj4gwqAgwqAgRVBDMSA9IDE3NywKPiDCoCDCoCBERVBDID0gMTkyLAo+IMKgIMKgIEVYQ1NB VkUxID0gMjA5LAo+IEBAIC0xMzQsNiArMTM2LDggQEAgZW51bSB7Cj4KPiDCoCNkZWZpbmUgUFNf V09FIDB4NDAwMDAKPgo+ICsjZGVmaW5lIE1BWF9OQVJFRyA2NAo+ICsKPiDCoGVudW0gewo+IMKg IMKgIC8qIFN0YXRpYyB2ZWN0b3JzICovCj4gwqAgwqAgRVhDX1JFU0VULAo+IEBAIC0xODUsNiAr MTg5LDcgQEAgZW51bSB7Cj4gwqB0eXBlZGVmIHN0cnVjdCBYdGVuc2FDb25maWcgewo+IMKgIMKg IGNvbnN0IGNoYXIgKm5hbWU7Cj4gwqAgwqAgdWludDY0X3Qgb3B0aW9uczsKPiArIMKgIMKgdW5z aWduZWQgbmFyZWc7Cj4gwqAgwqAgaW50IGV4Y21fbGV2ZWw7Cj4gwqAgwqAgaW50IG5kZXBjOwo+ IMKgIMKgIHVpbnQzMl90IGV4Y2VwdGlvbl92ZWN0b3JbRVhDX01BWF07Cj4gQEAgLTE5Niw2ICsy MDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBDUFVYdGVuc2FTdGF0ZSB7Cj4gwqAgwqAgdWludDMyX3Qg cGM7Cj4gwqAgwqAgdWludDMyX3Qgc3JlZ3NbMjU2XTsKPiDCoCDCoCB1aW50MzJfdCB1cmVnc1sy NTZdOwo+ICsgwqAgwqB1aW50MzJfdCBwaHlzX3JlZ3NbTUFYX05BUkVHXTsKPgo+IMKgIMKgIGlu dCBleGNlcHRpb25fdGFrZW47Cj4KPiBAQCAtMjE0LDYgKzIyMCw4IEBAIGludCBjcHVfeHRlbnNh X2V4ZWMoQ1BVWHRlbnNhU3RhdGUgKnMpOwo+IMKgdm9pZCBkb19pbnRlcnJ1cHQoQ1BVWHRlbnNh U3RhdGUgKnMpOwo+IMKgaW50IGNwdV94dGVuc2Ffc2lnbmFsX2hhbmRsZXIoaW50IGhvc3Rfc2ln bnVtLCB2b2lkICpwaW5mbywgdm9pZCAqcHVjKTsKPiDCoHZvaWQgeHRlbnNhX2NwdV9saXN0KEZJ TEUgKmYsIGZwcmludGZfZnVuY3Rpb24gY3B1X2ZwcmludGYpOwo+ICt2b2lkIHh0ZW5zYV9zeW5j X3dpbmRvd19mcm9tX3BoeXMoQ1BVU3RhdGUgKmVudik7Cj4gK3ZvaWQgeHRlbnNhX3N5bmNfcGh5 c19mcm9tX3dpbmRvdyhDUFVTdGF0ZSAqZW52KTsKPgo+IMKgI2RlZmluZSBYVEVOU0FfT1BUSU9O X0JJVChvcHQpICgoKHVpbnQ2NF90KTEpIDw8IChvcHQpKQo+Cj4gZGlmZiAtLWdpdCBhL3Rhcmdl dC14dGVuc2EvaGVscGVyLmMgYi90YXJnZXQteHRlbnNhL2hlbHBlci5jCj4gaW5kZXggNDRlYmI5 Zi4uNGY4NjkzNCAxMDA2NDQKPiAtLS0gYS90YXJnZXQteHRlbnNhL2hlbHBlci5jCj4gKysrIGIv dGFyZ2V0LXh0ZW5zYS9oZWxwZXIuYwo+IEBAIC00NSw2ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBY dGVuc2FDb25maWcgY29yZV9jb25maWdbXSA9IHsKPiDCoCDCoCB7Cj4gwqAgwqAgwqAgwqAgLm5h bWUgPSAic2FtcGxlLXh0ZW5zYS1jb3JlIiwKPiDCoCDCoCDCoCDCoCAub3B0aW9ucyA9IC0xLAo+ ICsgwqAgwqAgwqAgwqAubmFyZWcgPSA2NCwKPiDCoCDCoCDCoCDCoCAubmRlcGMgPSAxLAo+IMKg IMKgIMKgIMKgIC5leGNtX2xldmVsID0gMTYsCj4gwqAgwqAgwqAgwqAgLmV4Y2VwdGlvbl92ZWN0 b3IgPSB7Cj4gZGlmZiAtLWdpdCBhL3RhcmdldC14dGVuc2EvaGVscGVycy5oIGIvdGFyZ2V0LXh0 ZW5zYS9oZWxwZXJzLmgKPiBpbmRleCA2MzI5YzQzLi4wOTcxZmRlIDEwMDY0NAo+IC0tLSBhL3Rh cmdldC14dGVuc2EvaGVscGVycy5oCj4gKysrIGIvdGFyZ2V0LXh0ZW5zYS9oZWxwZXJzLmgKPiBA QCAtNSw1ICs1LDEzIEBAIERFRl9IRUxQRVJfMihleGNlcHRpb25fY2F1c2UsIHZvaWQsIGkzMiwg aTMyKQo+IMKgREVGX0hFTFBFUl8zKGV4Y2VwdGlvbl9jYXVzZV92YWRkciwgdm9pZCwgaTMyLCBp MzIsIGkzMikKPiDCoERFRl9IRUxQRVJfMShuc2EsIGkzMiwgaTMyKQo+IMKgREVGX0hFTFBFUl8x KG5zYXUsIGkzMiwgaTMyKQo+ICtERUZfSEVMUEVSXzEod3NyX3dpbmRvd2Jhc2UsIHZvaWQsIGkz MikKPiArREVGX0hFTFBFUl8zKGVudHJ5LCB2b2lkLCBpMzIsIGkzMiwgaTMyKQo+ICtERUZfSEVM UEVSXzEocmV0dywgaTMyLCBpMzIpCj4gK0RFRl9IRUxQRVJfMShyb3R3LCB2b2lkLCBpMzIpCj4g K0RFRl9IRUxQRVJfMih3aW5kb3dfY2hlY2ssIHZvaWQsIGkzMiwgaTMyKQo+ICtERUZfSEVMUEVS XzAocmVzdG9yZV9vd2IsIHZvaWQpCj4gK0RFRl9IRUxQRVJfMShtb3ZzcCwgdm9pZCwgaTMyKQo+ ICtERUZfSEVMUEVSXzAoZHVtcF9zdGF0ZSwgdm9pZCkKPgo+IMKgI2luY2x1ZGUgImRlZi1oZWxw ZXIuaCIKPiBkaWZmIC0tZ2l0IGEvdGFyZ2V0LXh0ZW5zYS9vcF9oZWxwZXIuYyBiL3RhcmdldC14 dGVuc2Evb3BfaGVscGVyLmMKPiBpbmRleCA3OTRhODM0Li43Zjc1NDIyIDEwMDY0NAo+IC0tLSBh L3RhcmdldC14dGVuc2Evb3BfaGVscGVyLmMKPiArKysgYi90YXJnZXQteHRlbnNhL29wX2hlbHBl ci5jCj4gQEAgLTEwMCwzICsxMDAsMTg4IEBAIHVpbnQzMl90IEhFTFBFUihuc2F1KSh1aW50MzJf dCB2KQo+IMKgewo+IMKgIMKgIHJldHVybiB2ID8gY2x6MzIodikgOiAzMjsKPiDCoH0KPiArCj4g K3N0YXRpYyB2b2lkIGNvcHlfd2luZG93X2Zyb21fcGh5cyhDUFVTdGF0ZSAqZW52LAo+ICsgwqAg wqAgwqAgwqB1aW50MzJfdCB3aW5kb3csIHVpbnQzMl90IHBoeXMsIHVpbnQzMl90IG4pCj4gK3sK PiArIMKgIMKgYXNzZXJ0KHBoeXMgPCBlbnYtPmNvbmZpZy0+bmFyZWcpOwo+ICsgwqAgwqBpZiAo cGh5cyArIG4gPD0gZW52LT5jb25maWctPm5hcmVnKSB7Cj4gKyDCoCDCoCDCoCDCoG1lbWNweShl bnYtPnJlZ3MgKyB3aW5kb3csIGVudi0+cGh5c19yZWdzICsgcGh5cywKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgbiAqIHNpemVvZih1aW50MzJfdCkpOwo+ICsgwqAgwqB9IGVsc2Ugewo+ICsg wqAgwqAgwqAgwqB1aW50MzJfdCBuMSA9IGVudi0+Y29uZmlnLT5uYXJlZyAtIHBoeXM7Cj4gKyDC oCDCoCDCoCDCoG1lbWNweShlbnYtPnJlZ3MgKyB3aW5kb3csIGVudi0+cGh5c19yZWdzICsgcGh5 cywKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbjEgKiBzaXplb2YodWludDMyX3QpKTsKPiAr IMKgIMKgIMKgIMKgbWVtY3B5KGVudi0+cmVncyArIHdpbmRvdyArIG4xLCBlbnYtPnBoeXNfcmVn cywKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG4gLSBuMSkgKiBzaXplb2YodWludDMyX3Qp KTsKPiArIMKgIMKgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb3B5X3BoeXNfZnJvbV93aW5k b3coQ1BVU3RhdGUgKmVudiwKPiArIMKgIMKgIMKgIMKgdWludDMyX3QgcGh5cywgdWludDMyX3Qg d2luZG93LCB1aW50MzJfdCBuKQo+ICt7Cj4gKyDCoCDCoGFzc2VydChwaHlzIDwgZW52LT5jb25m aWctPm5hcmVnKTsKPiArIMKgIMKgaWYgKHBoeXMgKyBuIDw9IGVudi0+Y29uZmlnLT5uYXJlZykg ewo+ICsgwqAgwqAgwqAgwqBtZW1jcHkoZW52LT5waHlzX3JlZ3MgKyBwaHlzLCBlbnYtPnJlZ3Mg KyB3aW5kb3csCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG4gKiBzaXplb2YodWludDMyX3Qp KTsKPiArIMKgIMKgfSBlbHNlIHsKPiArIMKgIMKgIMKgIMKgdWludDMyX3QgbjEgPSBlbnYtPmNv bmZpZy0+bmFyZWcgLSBwaHlzOwo+ICsgwqAgwqAgwqAgwqBtZW1jcHkoZW52LT5waHlzX3JlZ3Mg KyBwaHlzLCBlbnYtPnJlZ3MgKyB3aW5kb3csCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG4x ICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKyDCoCDCoCDCoCDCoG1lbWNweShlbnYtPnBoeXNfcmVn cywgZW52LT5yZWdzICsgd2luZG93ICsgbjEsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChu IC0gbjEpICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gKyDCoCDCoH0KPiArfQo+ICsKPiArCj4gKyNk ZWZpbmUgV0lORE9XQkFTRV9CT1VORChhKSAoKGEpICYgKGVudi0+Y29uZmlnLT5uYXJlZyAvIDQg LSAxKSkKPiArI2RlZmluZSBXSU5ET1dfQk9VTkQoYSkgKChhKSAmIChlbnYtPmNvbmZpZy0+bmFy ZWcgLSAxKSkKCidlbnYnIGNvdWxkIGJlIGEgcGFyYW1ldGVyIHRvIHRoZSBtYWNybywgdGhvdWdo IGlubGluZSBmdW5jdGlvbnMgYXJlCnByZWZlcnJlZCBvdmVyIG1hY3JvcyB0aGVzZSBkYXlzLgoK PiArI2RlZmluZSBXSU5ET1dTVEFSVF9CSVQoYSkgKDEgPDwgV0lORE9XQkFTRV9CT1VORChhKSkK PiArCj4gK3ZvaWQgeHRlbnNhX3N5bmNfd2luZG93X2Zyb21fcGh5cyhDUFVTdGF0ZSAqZW52KQo+ ICt7Cj4gKyDCoCDCoGNvcHlfd2luZG93X2Zyb21fcGh5cyhlbnYsIDAsIGVudi0+c3JlZ3NbV0lO RE9XX0JBU0VdICogNCwgMTYpOwo+ICt9Cj4gKwo+ICt2b2lkIHh0ZW5zYV9zeW5jX3BoeXNfZnJv bV93aW5kb3coQ1BVU3RhdGUgKmVudikKPiArewo+ICsgwqAgwqBjb3B5X3BoeXNfZnJvbV93aW5k b3coZW52LCBlbnYtPnNyZWdzW1dJTkRPV19CQVNFXSAqIDQsIDAsIDE2KTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgcm90YXRlX3dpbmRvd19hYnModWludDMyX3QgcG9zaXRpb24pCj4gK3sKPiAr IMKgIMKgeHRlbnNhX3N5bmNfcGh5c19mcm9tX3dpbmRvdyhlbnYpOwo+ICsgwqAgwqBlbnYtPnNy ZWdzW1dJTkRPV19CQVNFXSA9IFdJTkRPV0JBU0VfQk9VTkQocG9zaXRpb24pOwo+ICsgwqAgwqB4 dGVuc2Ffc3luY193aW5kb3dfZnJvbV9waHlzKGVudik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHJvdGF0ZV93aW5kb3codWludDMyX3QgZGVsdGEpCj4gK3sKPiArIMKgIMKgcm90YXRlX3dpbmRv d19hYnMoZW52LT5zcmVnc1tXSU5ET1dfQkFTRV0gKyBkZWx0YSk7Cj4gK30KPiArCj4gK3ZvaWQg SEVMUEVSKHdzcl93aW5kb3diYXNlKSh1aW50MzJfdCB2KQo+ICt7Cj4gKyDCoCDCoHJvdGF0ZV93 aW5kb3dfYWJzKHYpOwo+ICt9Cj4gKwo+ICt2b2lkIEhFTFBFUihlbnRyeSkodWludDMyX3QgcGMs IHVpbnQzMl90IHMsIHVpbnQzMl90IGltbSkKPiArewo+ICsgwqAgwqBpbnQgY2FsbGluYyA9IChl bnYtPnNyZWdzW1BTXSAmIFBTX0NBTExJTkMpID4+IFBTX0NBTExJTkNfU0hJRlQ7Cj4gKyDCoCDC oGlmIChzID4gMyB8fCAoKGVudi0+c3JlZ3NbUFNdICYgKFBTX1dPRSB8IFBTX0VYQ00pKSBeIFBT X1dPRSkgIT0gMCkgewo+ICsgwqAgwqAgwqAgwqBxZW11X2xvZygiSWxsZWdhbCBlbnRyeSBpbnN0 cnVjdGlvbihwYyA9ICUwOHgpLCBQUyA9ICUwOHhcbiIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHBjLCBlbnYtPnNyZWdzW1BTXSk7Cj4gKyDCoCDCoCDCoCDCoEhFTFBFUihleGNlcHRpb25f Y2F1c2UpKHBjLCBJTExFR0FMX0lOU1RSVUNUSU9OX0NBVVNFKTsKPiArIMKgIMKgfSBlbHNlIHsK PiArIMKgIMKgIMKgIMKgZW52LT5yZWdzWyhjYWxsaW5jIDw8IDIpIHwgKHMgJiAzKV0gPSBlbnYt PnJlZ3Nbc10gLSAoaW1tIDw8IDMpOwo+ICsgwqAgwqAgwqAgwqByb3RhdGVfd2luZG93KGNhbGxp bmMpOwo+ICsgwqAgwqAgwqAgwqBlbnYtPnNyZWdzW1dJTkRPV19TVEFSVF0gfD0gV0lORE9XU1RB UlRfQklUKGVudi0+c3JlZ3NbV0lORE9XX0JBU0VdKTsKPiArIMKgIMKgfQo+ICt9Cj4gKwo+ICt2 b2lkIEhFTFBFUih3aW5kb3dfY2hlY2spKHVpbnQzMl90IHBjLCB1aW50MzJfdCB3KQo+ICt7Cj4g KyDCoCDCoHVpbnQzMl90IHdpbmRvd2Jhc2UgPSBXSU5ET1dCQVNFX0JPVU5EKGVudi0+c3JlZ3Nb V0lORE9XX0JBU0VdKTsKPiArIMKgIMKgdWludDMyX3Qgd2luZG93c3RhcnQgPSBlbnYtPnNyZWdz W1dJTkRPV19TVEFSVF07Cj4gKyDCoCDCoHVpbnQzMl90IG0sIG47Cj4gKwo+ICsgwqAgwqBpZiAo KGVudi0+c3JlZ3NbUFNdICYgKFBTX1dPRSB8IFBTX0VYQ00pKSBeIFBTX1dPRSkgewo+ICsgwqAg wqAgwqAgwqByZXR1cm47Cj4gKyDCoCDCoH0KPiArCj4gKyDCoCDCoGZvciAobiA9IDE7IDsgKytu KSB7Cj4gKyDCoCDCoCDCoCDCoGlmIChuID4gdykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqByZXR1 cm47Cj4gKyDCoCDCoCDCoCDCoH0KPiArIMKgIMKgIMKgIMKgaWYgKHdpbmRvd3N0YXJ0ICYgV0lO RE9XU1RBUlRfQklUKHdpbmRvd2Jhc2UgKyBuKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVh azsKPiArIMKgIMKgIMKgIMKgfQo+ICsgwqAgwqB9Cj4gKwo+ICsgwqAgwqBtID0gV0lORE9XQkFT RV9CT1VORCh3aW5kb3diYXNlICsgbik7Cj4gKyDCoCDCoHJvdGF0ZV93aW5kb3cobik7Cj4gKyDC oCDCoGVudi0+c3JlZ3NbUFNdID0gKGVudi0+c3JlZ3NbUFNdICYgflBTX09XQikgfAo+ICsgwqAg wqAgwqAgwqAod2luZG93YmFzZSA8PCBQU19PV0JfU0hJRlQpIHwgUFNfRVhDTTsKPiArIMKgIMKg ZW52LT5zcmVnc1tFUEMxXSA9IGVudi0+cGMgPSBwYzsKPiArCj4gKyDCoCDCoGlmICh3aW5kb3dz dGFydCAmIFdJTkRPV1NUQVJUX0JJVChtICsgMSkpIHsKPiArIMKgIMKgIMKgIMKgSEVMUEVSKGV4 Y2VwdGlvbikoRVhDX1dJTkRPV19PVkVSRkxPVzQpOwo+ICsgwqAgwqB9IGVsc2UgaWYgKHdpbmRv d3N0YXJ0ICYgV0lORE9XU1RBUlRfQklUKG0gKyAyKSkgewo+ICsgwqAgwqAgwqAgwqBIRUxQRVIo ZXhjZXB0aW9uKShFWENfV0lORE9XX09WRVJGTE9XOCk7Cj4gKyDCoCDCoH0gZWxzZSB7Cj4gKyDC oCDCoCDCoCDCoEhFTFBFUihleGNlcHRpb24pKEVYQ19XSU5ET1dfT1ZFUkZMT1cxMik7Cj4gKyDC oCDCoH0KPiArfQo+ICsKPiArdWludDMyX3QgSEVMUEVSKHJldHcpKHVpbnQzMl90IHBjKQo+ICt7 Cj4gKyDCoCDCoGludCBuID0gKGVudi0+cmVnc1swXSA+PiAzMCkgJiAweDM7Cj4gKyDCoCDCoGlu dCBtID0gMDsKPiArIMKgIMKgdWludDMyX3Qgd2luZG93YmFzZSA9IFdJTkRPV0JBU0VfQk9VTkQo ZW52LT5zcmVnc1tXSU5ET1dfQkFTRV0pOwo+ICsgwqAgwqB1aW50MzJfdCB3aW5kb3dzdGFydCA9 IGVudi0+c3JlZ3NbV0lORE9XX1NUQVJUXTsKPiArIMKgIMKgdWludDMyX3QgcmV0X3BjID0gMDsK PiArCj4gKyDCoCDCoGlmICh3aW5kb3dzdGFydCAmIFdJTkRPV1NUQVJUX0JJVCh3aW5kb3diYXNl IC0gMSkpIHsKPiArIMKgIMKgIMKgIMKgbSA9IDE7Cj4gKyDCoCDCoH0gZWxzZSBpZiAod2luZG93 c3RhcnQgJiBXSU5ET1dTVEFSVF9CSVQod2luZG93YmFzZSAtIDIpKSB7Cj4gKyDCoCDCoCDCoCDC oG0gPSAyOwo+ICsgwqAgwqB9IGVsc2UgaWYgKHdpbmRvd3N0YXJ0ICYgV0lORE9XU1RBUlRfQklU KHdpbmRvd2Jhc2UgLSAzKSkgewo+ICsgwqAgwqAgwqAgwqBtID0gMzsKPiArIMKgIMKgfQo+ICsK PiArIMKgIMKgaWYgKG4gPT0gMCB8fCAobSAhPSAwICYmIG0gIT0gbikgfHwKPiArIMKgIMKgIMKg IMKgIMKgIMKgKChlbnYtPnNyZWdzW1BTXSAmIChQU19XT0UgfCBQU19FWENNKSkgXiBQU19XT0Up ICE9IDApIHsKPiArIMKgIMKgIMKgIMKgcWVtdV9sb2coIklsbGVnYWwgcmV0dyBpbnN0cnVjdGlv bihwYyA9ICUwOHgpLCAiCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCJQUyA9ICUwOHgsIG0g PSAlZCwgbiA9ICVkXG4iLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwYywgZW52LT5zcmVn c1tQU10sIG0sIG4pOwo+ICsgwqAgwqAgwqAgwqBIRUxQRVIoZXhjZXB0aW9uX2NhdXNlKShwYywg SUxMRUdBTF9JTlNUUlVDVElPTl9DQVVTRSk7Cj4gKyDCoCDCoH0gZWxzZSB7Cj4gKyDCoCDCoCDC oCDCoGludCBvd2IgPSB3aW5kb3diYXNlOwo+ICsKPiArIMKgIMKgIMKgIMKgcmV0X3BjID0gKHBj ICYgMHhjMDAwMDAwMCkgfCAoZW52LT5yZWdzWzBdICYgMHgzZmZmZmZmZik7Cj4gKwo+ICsgwqAg wqAgwqAgwqByb3RhdGVfd2luZG93KC1uKTsKPiArIMKgIMKgIMKgIMKgaWYgKHdpbmRvd3N0YXJ0 ICYgV0lORE9XU1RBUlRfQklUKGVudi0+c3JlZ3NbV0lORE9XX0JBU0VdKSkgewo+ICsgwqAgwqAg wqAgwqAgwqAgwqBlbnYtPnNyZWdzW1dJTkRPV19TVEFSVF0gJj0gfldJTkRPV1NUQVJUX0JJVChv d2IpOwo+ICsgwqAgwqAgwqAgwqB9IGVsc2Ugewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAvKiB3aW5k b3cgdW5kZXJmbG93ICovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGVudi0+c3JlZ3NbUFNdID0gKGVu di0+c3JlZ3NbUFNdICYgflBTX09XQikgfAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAod2lu ZG93YmFzZSA8PCBQU19PV0JfU0hJRlQpIHwgUFNfRVhDTTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg ZW52LT5zcmVnc1tFUEMxXSA9IGVudi0+cGMgPSBwYzsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDC oGlmIChuID09IDEpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSEVMUEVSKGV4Y2VwdGlv bikoRVhDX1dJTkRPV19VTkRFUkZMT1c0KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNlIGlm IChuID09IDIpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSEVMUEVSKGV4Y2VwdGlvbiko RVhDX1dJTkRPV19VTkRFUkZMT1c4KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNlIGlmIChu ID09IDMpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgSEVMUEVSKGV4Y2VwdGlvbikoRVhD X1dJTkRPV19VTkRFUkZMT1cxMik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoH0KPiArIMKgIMKgIMKg IMKgfQo+ICsgwqAgwqB9Cj4gKyDCoCDCoHJldHVybiByZXRfcGM7Cj4gK30KPiArCj4gK3ZvaWQg SEVMUEVSKHJvdHcpKHVpbnQzMl90IGltbTQpCj4gK3sKPiArIMKgIMKgcm90YXRlX3dpbmRvdyhp bW00KTsKPiArfQo+ICsKPiArdm9pZCBIRUxQRVIocmVzdG9yZV9vd2IpKHZvaWQpCj4gK3sKPiAr IMKgIMKgcm90YXRlX3dpbmRvd19hYnMoKGVudi0+c3JlZ3NbUFNdICYgUFNfT1dCKSA+PiBQU19P V0JfU0hJRlQpOwo+ICt9Cj4gKwo+ICt2b2lkIEhFTFBFUihtb3ZzcCkodWludDMyX3QgcGMpCj4g K3sKPiArIMKgIMKgaWYgKChlbnYtPnNyZWdzW1dJTkRPV19TVEFSVF0gJgo+ICsgwqAgwqAgwqAg wqAgwqAgwqAoV0lORE9XU1RBUlRfQklUKGVudi0+c3JlZ3NbV0lORE9XX0JBU0VdIC0gMykgfAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgV0lORE9XU1RBUlRfQklUKGVudi0+c3JlZ3NbV0lORE9XX0JB U0VdIC0gMikgfAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgV0lORE9XU1RBUlRfQklUKGVudi0+c3Jl Z3NbV0lORE9XX0JBU0VdIC0gMSkpKSA9PSAwKSB7Cj4gKyDCoCDCoCDCoCDCoEhFTFBFUihleGNl cHRpb25fY2F1c2UpKHBjLCBBTExPQ0FfQ0FVU0UpOwo+ICsgwqAgwqB9Cj4gK30KPiArCj4gK3Zv aWQgSEVMUEVSKGR1bXBfc3RhdGUpKHZvaWQpCj4gK3sKPiArIMKgIMKgY3B1X2R1bXBfc3RhdGUo ZW52LCBzdGRlcnIsIGZwcmludGYsIDApOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL3RhcmdldC14dGVu c2EvdHJhbnNsYXRlLmMgYi90YXJnZXQteHRlbnNhL3RyYW5zbGF0ZS5jCj4gaW5kZXggZGU1Zjk0 Ny4uZGUzOTNmZiAxMDA2NDQKPiAtLS0gYS90YXJnZXQteHRlbnNhL3RyYW5zbGF0ZS5jCj4gKysr IGIvdGFyZ2V0LXh0ZW5zYS90cmFuc2xhdGUuYwo+IEBAIC02Nyw2ICs2Nyw4IEBAIHN0YXRpYyBU Q0d2X2kzMiBjcHVfVVJbMjU2XTsKPiDCoHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3JlZ25h bWVzWzI1Nl0gPSB7Cj4gwqAgwqAgW1NBUl0gPSAiU0FSIiwKPiDCoCDCoCBbU0NPTVBBUkUxXSA9 ICJTQ09NUEFSRTEiLAo+ICsgwqAgwqBbV0lORE9XX0JBU0VdID0gIldJTkRPV19CQVNFIiwKPiAr IMKgIMKgW1dJTkRPV19TVEFSVF0gPSAiV0lORE9XX1NUQVJUIiwKPiDCoCDCoCBbRVBDMV0gPSAi RVBDMSIsCj4gwqAgwqAgW0RFUENdID0gIkRFUEMiLAo+IMKgIMKgIFtFWENTQVZFMV0gPSAiRVhD U0FWRTEiLAo+IEBAIC0yMTcsNiArMjE5LDM0IEBAIHN0YXRpYyB2b2lkIGdlbl9qdW1waShEaXNh c0NvbnRleHQgKmRjLCB1aW50MzJfdCBkZXN0LCBpbnQgc2xvdCkKPiDCoCDCoCB0Y2dfdGVtcF9m cmVlKHRtcCk7Cj4gwqB9Cj4KPiArc3RhdGljIHZvaWQgZ2VuX2NhbGx3X3Nsb3QoRGlzYXNDb250 ZXh0ICpkYywgaW50IF9jYWxsaW5jLCBUQ0d2X2kzMiBkZXN0LAo+ICsgwqAgwqAgwqAgwqBpbnQg c2xvdCkKPiArewo+ICsgwqAgwqBUQ0d2X2kzMiBjYWxsaW5jID0gdGNnX2NvbnN0X2kzMihfY2Fs bGluYyk7Cj4gKwo+ICsgwqAgwqB0Y2dfZ2VuX2RlcG9zaXRfaTMyKGNwdV9TUltQU10sIGNwdV9T UltQU10sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGNhbGxpbmMsIFBTX0NBTExJTkNfU0hJRlQsIFBT X0NBTExJTkNfTEVOKTsKPiArIMKgIMKgdGNnX3RlbXBfZnJlZShjYWxsaW5jKTsKPiArIMKgIMKg dGNnX2dlbl9tb3ZpX2kzMihjcHVfUltfY2FsbGluYyA8PCAyXSwKPiArIMKgIMKgIMKgIMKgIMKg IMKgKF9jYWxsaW5jIDw8IDMwKSB8IChkYy0+bmV4dF9wYyAmIDB4M2ZmZmZmZmYpKTsKPiArIMKg IMKgZ2VuX2p1bXBfc2xvdChkYywgZGVzdCwgc2xvdCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGdlbl9jYWxsdyhEaXNhc0NvbnRleHQgKmRjLCBpbnQgY2FsbGluYywgVENHdl9pMzIgZGVzdCkK PiArewo+ICsgwqAgwqBnZW5fY2FsbHdfc2xvdChkYywgY2FsbGluYywgZGVzdCwgLTEpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW5fY2FsbHdpKERpc2FzQ29udGV4dCAqZGMsIGludCBjYWxs aW5jLCB1aW50MzJfdCBkZXN0LCBpbnQgc2xvdCkKPiArewo+ICsgwqAgwqBUQ0d2X2kzMiB0bXAg PSB0Y2dfY29uc3RfaTMyKGRlc3QpOwo+ICsgwqAgwqBpZiAoKChkYy0+cGMgXiBkZXN0KSAmIFRB UkdFVF9QQUdFX01BU0spICE9IDApIHsKPiArIMKgIMKgIMKgIMKgc2xvdCA9IC0xOwo+ICsgwqAg wqB9Cj4gKyDCoCDCoGdlbl9jYWxsd19zbG90KGRjLCBjYWxsaW5jLCB0bXAsIHNsb3QpOwo+ICsg wqAgwqB0Y2dfdGVtcF9mcmVlKHRtcCk7Cj4gK30KPiArCj4gwqBzdGF0aWMgdm9pZCBnZW5fYnJj b25kKERpc2FzQ29udGV4dCAqZGMsIFRDR0NvbmQgY29uZCwKPiDCoCDCoCDCoCDCoCBUQ0d2X2kz MiB0MCwgVENHdl9pMzIgdDEsIHVpbnQzMl90IG9mZnNldCkKPiDCoHsKPiBAQCAtMjYzLDYgKzI5 MywxMSBAQCBzdGF0aWMgdm9pZCBnZW5fd3NyX3NhcihEaXNhc0NvbnRleHQgKmRjLCB1aW50MzJf dCBzciwgVENHdl9pMzIgcykKPiDCoCDCoCBkYy0+c2FyX20zMl81Yml0ID0gZmFsc2U7Cj4gwqB9 Cj4KPiArc3RhdGljIHZvaWQgZ2VuX3dzcl93aW5kb3diYXNlKERpc2FzQ29udGV4dCAqZGMsIHVp bnQzMl90IHNyLCBUQ0d2X2kzMiB2KQo+ICt7Cj4gKyDCoCDCoGdlbl9oZWxwZXJfd3NyX3dpbmRv d2Jhc2Uodik7Cj4gK30KPiArCj4gwqBzdGF0aWMgdm9pZCBnZW5fd3NyX3BzKERpc2FzQ29udGV4 dCAqZGMsIHVpbnQzMl90IHNyLCBUQ0d2X2kzMiB2KQo+IMKgewo+IMKgIMKgIHVpbnQzMl90IG1h c2sgPSBQU19XT0UgfCBQU19DQUxMSU5DIHwgUFNfT1dCIHwKPiBAQCAtMjgxLDYgKzMxNiw3IEBA IHN0YXRpYyB2b2lkIGdlbl93c3IoRGlzYXNDb250ZXh0ICpkYywgdWludDMyX3Qgc3IsIFRDR3Zf aTMyIHMpCj4gwqAgwqAgc3RhdGljIHZvaWQgKCogY29uc3Qgd3NyX2hhbmRsZXJbMjU2XSkoRGlz YXNDb250ZXh0ICpkYywKPiDCoCDCoCDCoCDCoCDCoCDCoCB1aW50MzJfdCBzciwgVENHdl9pMzIg dikgPSB7Cj4gwqAgwqAgwqAgwqAgW1NBUl0gPSBnZW5fd3NyX3NhciwKPiArIMKgIMKgIMKgIMKg W1dJTkRPV19CQVNFXSA9IGdlbl93c3Jfd2luZG93YmFzZSwKPiDCoCDCoCDCoCDCoCBbUFNdID0g Z2VuX3dzcl9wcywKPiDCoCDCoCB9Owo+Cj4gQEAgLTQyOSw3ICs0NjUsMTIgQEAgc3RhdGljIHZv aWQgZGlzYXNfeHRlbnNhX2luc24oRGlzYXNDb250ZXh0ICpkYykKPgo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNhc2UgMTogLypSRVRXdyovCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgSEFTX09QVElPTihYVEVOU0FfT1BUSU9OX1dJTkRP V0VEX1JFR0lTVEVSKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgVEJEKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVENHdl9p MzIgdG1wID0gdGNnX2NvbnN0X2kzMihkYy0+cGMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnZW5faGVscGVyX3JldHcodG1wLCB0bXApOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnZW5fanVtcChk YywgdG1wKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdGNnX3RlbXBfZnJlZSh0bXApOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg YnJlYWs7Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDM6IC8q cmVzZXJ2ZWQqLwo+IEBAIC00NTQsNyArNDk1LDEzIEBAIHN0YXRpYyB2b2lkIGRpc2FzX3h0ZW5z YV9pbnNuKERpc2FzQ29udGV4dCAqZGMpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgY2FzZSAyOiAvKkNBTExYOHcqLwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGNhc2UgMzogLypDQUxMWDEydyovCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgSEFTX09QVElPTihYVEVOU0FfT1BUSU9OX1dJTkRPV0VEX1JFR0lTVEVS KTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVEJEKCk7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVENHdl9pMzIgdG1wID0gdGNn X3RlbXBfbmV3X2kzMigpOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgdGNnX2dlbl9tb3ZfaTMyKHRtcCwgY3B1X1JbQ0FMTFhfU10pOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnZW5fY2FsbHco ZGMsIENBTExYX04sIHRtcCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHRjZ190ZW1wX2ZyZWUodG1wKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGJyZWFrOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0K PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiBAQCAtNDYzLDcg KzUxMCwxMiBAQCBzdGF0aWMgdm9pZCBkaXNhc194dGVuc2FfaW5zbihEaXNhc0NvbnRleHQgKmRj KQo+Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAxOiAvKk1PVlNQdyovCj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgSEFTX09QVElPTihYVEVOU0FfT1BUSU9OX1dJTkRPV0VE X1JFR0lTVEVSKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVEJEKCk7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgVENHdl9pMzIgcGMgPSB0Y2dfY29uc3RfaTMyKGRjLT5wYyk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdlbl9oZWxwZXJfbW92c3AocGMpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0Y2dfZ2VuX21vdl9pMzIoY3B1X1Jb UlJSX1RdLCBjcHVfUltSUlJfU10pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqB0Y2dfdGVtcF9mcmVlKHBjKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg fQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+Cj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgY2FzZSAyOiAvKlNZTkMqLwo+IEBAIC01MjMsNyArNTc1LDI3IEBAIHN0YXRp YyB2b2lkIGRpc2FzX3h0ZW5zYV9pbnNuKERpc2FzQ29udGV4dCAqZGMpCj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSA0OiAvKlJGV093Ki8KPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDU6IC8qUkZXVXcqLwo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEhBU19PUFRJT04oWFRFTlNBX09QVElPTl9XSU5E T1dFRF9SRUdJU1RFUik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoFRCRCgpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBn ZW5fY2hlY2tfcHJpdmlsZWdlKGRjKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBUQ0d2X2kzMiB0bXAgPSB0Y2dfY29uc3RfaTMyKDEpOwo+ICsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGNnX2dlbl9hbmRpX2kzMigK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgY3B1X1NSW1BTXSwgY3B1X1NSW1BTXSwgflBTX0VYQ00pOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0Y2dfZ2VuX3NobF9pMzIodG1wLCB0 bXAsIGNwdV9TUltXSU5ET1dfQkFTRV0pOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKFJSUl9TID09IDQpIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGNnX2dlbl9hbmRjX2kz MihjcHVfU1JbV0lORE9XX1NUQVJUXSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1X1NSW1dJTkRPV19TVEFSVF0s IHRtcCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHRjZ19nZW5fb3JfaTMyKGNwdV9TUltXSU5ET1dfU1RBUlRdLAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBjcHVfU1JbV0lORE9XX1NUQVJUXSwgdG1wKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ2VuX2hlbHBlcl9yZXN0b3JlX293YigpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnZW5fanVtcChkYywg Y3B1X1NSW0VQQzFdKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHRjZ190ZW1wX2ZyZWUodG1wKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGJyZWFrOwo+Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg ZGVmYXVsdDogLypyZXNlcnZlZCovCj4gQEAgLTY3MCw3ICs3NDIsMTMgQEAgc3RhdGljIHZvaWQg ZGlzYXNfeHRlbnNhX2luc24oRGlzYXNDb250ZXh0ICpkYykKPgo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGNhc2UgODogLypST1RXdyovCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg SEFTX09QVElPTihYVEVOU0FfT1BUSU9OX1dJTkRPV0VEX1JFR0lTVEVSKTsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgVEJEKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGdlbl9jaGVja19wcml2aWxlZ2UoZGMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFRDR3ZfaTMyIHRt cCA9IHRjZ19jb25zdF9pMzIoCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoFJSUl9UIHwgKChSUlJfVCAmIDgpID8gMHhmZmZmZmZmMCA6IDApKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ2VuX2hlbHBlcl9yb3R3KHRtcCk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjZ190ZW1wX2ZyZWUodG1w KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGJyZWFrOwo+Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAxNDog LypOU0F1Ki8KPiBAQCAtMTEyOSw3ICsxMjA3LDM1IEBAIHN0YXRpYyB2b2lkIGRpc2FzX3h0ZW5z YV9pbnNuKERpc2FzQ29udGV4dCAqZGMpCj4gwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4KPiDC oCDCoCDCoCDCoCBjYXNlIDk6IC8qTFNDNCovCj4gLSDCoCDCoCDCoCDCoCDCoCDCoFRCRCgpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqBzd2l0Y2ggKE9QMikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqBj YXNlIDA6IC8qTDMyRSovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEhBU19PUFRJT04oWFRF TlNBX09QVElPTl9XSU5ET1dFRF9SRUdJU1RFUik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGdlbl9jaGVja19wcml2aWxlZ2UoZGMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFRDR3ZfaTMyIGFkZHIgPSB0Y2dfdGVtcF9u ZXdfaTMyKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjZ19nZW5fYWRkaV9p MzIoYWRkciwgY3B1X1JbUlJSX1NdLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAoMHhmZmZmZmZjMCB8IChSUlJfUiA8PCAyKSkpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqB0Y2dfZ2VuX3FlbXVfbGQzMnUoY3B1X1JbUlJSX1RdLCBhZGRyLCBk Yy0+cmluZyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjZ190ZW1wX2ZyZWUo YWRkcik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBjYXNlIDQ6IC8qUzMyRSovCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEhBU19PUFRJT04oWFRFTlNBX09QVElPTl9XSU5ET1dF RF9SRUdJU1RFUik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdlbl9jaGVja19wcml2aWxl Z2UoZGMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoFRDR3ZfaTMyIGFkZHIgPSB0Y2dfdGVtcF9uZXdfaTMyKCk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjZ19nZW5fYWRkaV9pMzIoYWRkciwgY3B1X1JbUlJS X1NdLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoMHhmZmZm ZmZjMCB8IChSUlJfUiA8PCAyKSkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0 Y2dfZ2VuX3FlbXVfc3QzMihjcHVfUltSUlJfVF0sIGFkZHIsIGRjLT5yaW5nKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGNnX3RlbXBfZnJlZShhZGRyKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArCj4g KyDCoCDCoCDCoCDCoCDCoCDCoGRlZmF1bHQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFJF U0VSVkVEKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4KPiDCoCDCoCDCoCDCoCBjYXNl IDEwOiAvKkZQMCovCj4gQEAgLTEzNjgsNyArMTQ3NCw4IEBAIHN0YXRpYyB2b2lkIGRpc2FzX3h0 ZW5zYV9pbnNuKERpc2FzQ29udGV4dCAqZGMpCj4gwqAgwqAgwqAgwqAgY2FzZSAyOiAvKkNBTEw4 dyovCj4gwqAgwqAgwqAgwqAgY2FzZSAzOiAvKkNBTEwxMncqLwo+IMKgIMKgIMKgIMKgIMKgIMKg IEhBU19PUFRJT04oWFRFTlNBX09QVElPTl9XSU5ET1dFRF9SRUdJU1RFUik7Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoFRCRCgpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBnZW5fY2FsbHdpKGRjLCBDQUxM X04sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChkYy0+cGMgJiB+MykgKyAoQ0FM TF9PRkZTRVRfU0UgPDwgMikgKyA0LCAwKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiDC oCDCoCDCoCDCoCB9Cj4gwqAgwqAgwqAgwqAgYnJlYWs7Cj4gQEAgLTE0MTEsNyArMTUxOCwxNSBA QCBzdGF0aWMgdm9pZCBkaXNhc194dGVuc2FfaW5zbihEaXNhc0NvbnRleHQgKmRjKQo+IMKgIMKg IMKgIMKgIMKgIMKgIHN3aXRjaCAoQlJJOF9NKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAw OiAvKkVOVFJZdyovCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgSEFTX09QVElPTihYVEVOU0Ff T1BUSU9OX1dJTkRPV0VEX1JFR0lTVEVSKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVEJE KCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgVENHdl9pMzIgcGMgPSB0Y2dfY29uc3RfaTMyKGRjLT5wYyk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoFRDR3ZfaTMyIHMgPSB0Y2dfY29uc3RfaTMyKEJSSTEyX1Mp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBUQ0d2X2kzMiBpbW0gPSB0Y2dfY29u c3RfaTMyKEJSSTEyX0lNTTEyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ2Vu X2hlbHBlcl9lbnRyeShwYywgcywgaW1tKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgdGNnX3RlbXBfZnJlZShpbW0pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0 Y2dfdGVtcF9mcmVlKHMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0Y2dfdGVt cF9mcmVlKHBjKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGJyZWFrOwo+Cj4gwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSAxOiAvKkIxKi8KPiBA QCAtMTU3Niw3ICsxNjkxLDEyIEBAIHN0YXRpYyB2b2lkIGRpc2FzX3h0ZW5zYV9pbnNuKERpc2Fz Q29udGV4dCAqZGMpCj4KPiDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDE6IC8qUkVUVy5ObiovCj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgSEFTX09QVElPTihYVEVOU0FfT1BUSU9OX1dJTkRPV0VE X1JFR0lTVEVSKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVEJEKCk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVENHdl9p MzIgdG1wID0gdGNnX2NvbnN0X2kzMihkYy0+cGMpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBnZW5faGVscGVyX3JldHcodG1wLCB0bXApOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBnZW5fanVtcChkYywgdG1wKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgdGNnX3RlbXBfZnJlZSh0bXApOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCBjYXNl IDI6IC8qQlJFQUsuTm4qLwo+IEBAIC0xNzQ3LDYgKzE4NjcsMTIgQEAgdm9pZCBjcHVfZHVtcF9z dGF0ZShDUFVTdGF0ZSAqZW52LCBGSUxFICpmLCBmcHJpbnRmX2Z1bmN0aW9uIGNwdV9mcHJpbnRm LAo+IMKgIMKgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQo+IMKgIMKgIMKgIMKgIGNwdV9mcHJp bnRmKGYsICJBJTAyZD0lMDh4JWMiLCBpLCBlbnYtPnJlZ3NbaV0sCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgKGkgJSA0KSA9PSAzID8gJ1xuJyA6ICcgJyk7Cj4gKwo+ICsgwqAgwqBjcHVfZnBy aW50ZihmLCAiXG4iKTsKPiArCj4gKyDCoCDCoGZvciAoaSA9IDA7IGkgPCBlbnYtPmNvbmZpZy0+ bmFyZWc7ICsraSkKCkJyYWNlcy4KCj4gKyDCoCDCoCDCoCDCoGNwdV9mcHJpbnRmKGYsICJBUiUw MmQ9JTA4eCVjIiwgaSwgZW52LT5waHlzX3JlZ3NbaV0sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoChpICUgNCkgPT0gMyA/ICdcbicgOiAnICcpOwo+IMKgfQo+Cj4gwqB2b2lkIHJlc3RvcmVf c3RhdGVfdG9fb3BjKENQVVN0YXRlICplbnYsIFRyYW5zbGF0aW9uQmxvY2sgKnRiLCBpbnQgcGNf cG9zKQo+IC0tCj4gMS43LjYKPgo+Cj4K