From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changli Gao Subject: Re: [Patch 1/3] sysctl: refactor integer handling proc code Date: Sat, 1 May 2010 06:49:59 +0800 Message-ID: References: <20100430082912.5630.82405.sendpatchset@localhost.localdomain> <20100430082925.5630.58453.sendpatchset@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Cc: linux-kernel@vger.kernel.org, Octavian Purdila , Eric Dumazet , penguin-kernel@i-love.sakura.ne.jp, netdev@vger.kernel.org, Neil Horman , ebiederm@xmission.com, David Miller , adobriyan@gmail.com To: Amerigo Wang Return-path: Received: from mail-pz0-f204.google.com ([209.85.222.204]:56884 "EHLO mail-pz0-f204.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759018Ab0D3WuU (ORCPT ); Fri, 30 Apr 2010 18:50:20 -0400 In-Reply-To: <20100430082925.5630.58453.sendpatchset@localhost.localdomain> Sender: netdev-owner@vger.kernel.org List-ID: T24gRnJpLCBBcHIgMzAsIDIwMTAgYXQgNDoyNSBQTSwgQW1lcmlnbyBXYW5nIDxhbXdhbmdAcmVk aGF0LmNvbT4gd3JvdGU6Cj4gKEJhc2VkIG9uIE9jdGF2aWFuJ3Mgd29yaywgYW5kIEkgbW9kaWZp ZWQgYSBsb3QuKQo+Cj4gQXMgd2UgYXJlIGFib3V0IHRvIGFkZCBhbm90aGVyIGludGVnZXIgaGFu ZGxpbmcgcHJvYyBmdW5jdGlvbiBhIGxpdHRsZQo+IGJpdCBvZiBjbGVhbnVwIGlzIGluIG9yZGVy OiBhZGQgYSBmZXcgaGVscGVyIGZ1bmN0aW9ucyB0byBpbXByb3ZlIGNvZGUKPiByZWFkYWJpbGl0 eSBhbmQgZGVjcmVhc2UgY29kZSBkdXBsaWNhdGlvbi4KPgo+IEluIHRoZSBwcm9jZXNzIGEgYnVn IGlzIGFsc28gZml4ZWQ6IGlmIHRoZSB1c2VyIHNwZWNpZmllcyBhIG51bWJlcgo+IHdpdGggbW9y ZSB0aGVuIDIwIGRpZ2l0cyBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIHR3byBpbnRlZ2Vycwo+ IChlLmcuIDEwMDAwLi4uMTMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyAxMDAuLi4uIGFuZCAxMyku Cj4KPiBCZWhhdmlvciBmb3IgRUZBVUxUIGhhbmRsaW5nIHdhcyBjaGFuZ2VkIGFzIHdlbGwuIFBy ZXZpb3VzIHRvIHRoaXMKPiBwYXRjaCwgd2hlbiBhbiBFRkFVTFQgZXJyb3Igb2NjdXJyZWQgaW4g dGhlIG1pZGRsZSBvZiBhIHdyaXRlCj4gb3BlcmF0aW9uLCBhbHRob3VnaCBzb21lIG9mIHRoZSBl bGVtZW50cyB3ZXJlIHNldCwgdGhhdCB3YXMgbm90Cj4gYWNrbm93bGVkZ2VkIHRvIHRoZSB1c2Vy IChieSBzaG9ydGluZyB0aGUgd3JpdGUgYW5kIHJldHVybmluZyB0aGUKPiBudW1iZXIgb2YgYnl0 ZXMgYWNjZXB0ZWQpLiBFRkFVTFQgaXMgbm93IHRyZWF0ZWQganVzdCBsaWtlIGFueSBvdGhlcgo+ IGVycm9ycyBieSBhY2tub3dsZWRnaW5nIHRoZSBhbW91bnQgb2YgYnl0ZXMgYWNjZXB0ZWQuCj4K PiBTaWduZWQtb2ZmLWJ5OiBPY3RhdmlhbiBQdXJkaWxhIDxvcHVyZGlsYUBpeGlhY29tLmNvbT4K PiBTaWduZWQtb2ZmLWJ5OiBXQU5HIENvbmcgPGFtd2FuZ0ByZWRoYXQuY29tPgo+IENjOiBFcmlj IFcuIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29tPgo+IC0tLQo+Cj4gSW5kZXg6IGxp bnV4LTIuNi9rZXJuZWwvc3lzY3RsLmMKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gLS0tIGxpbnV4LTIuNi5vcmln L2tlcm5lbC9zeXNjdGwuYwo+ICsrKyBsaW51eC0yLjYva2VybmVsL3N5c2N0bC5jCj4gQEAgLTIw NDAsOCArMjA0MCwxMjIgQEAgaW50IHByb2NfZG9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFi bAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJ1ZmZlciwg bGVucCwgcHBvcyk7Cj4gwqB9Cj4KPiArc3RhdGljIHNpemVfdCBwcm9jX3NraXBfc3BhY2VzKGNo YXIgKipidWYpCj4gK3sKPiArIMKgIMKgIMKgIHNpemVfdCByZXQ7Cj4gKyDCoCDCoCDCoCBjaGFy ICp0bXAgPSBza2lwX3NwYWNlcygqYnVmKTsKPiArIMKgIMKgIMKgIHJldCA9IHRtcCAtICpidWY7 Cj4gKyDCoCDCoCDCoCAqYnVmID0gdG1wOwo+ICsgwqAgwqAgwqAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArI2RlZmluZSBUTVBCVUZMRU4gMjIKPiArLyoqCj4gKyAqIHByb2NfZ2V0X2xvbmcgLSBy ZWFkcyBhbiBBU0NJSSBmb3JtYXRlZCBpbnRlZ2VyIGZyb20gYSB1c2VyIGJ1ZmZlcgo+ICsgKgo+ ICsgKiBAYnVmIC0gYSBrZXJuZWwgYnVmZmVyCj4gKyAqIEBzaXplIC0gc2l6ZSBvZiB0aGUga2Vy bmVsIGJ1ZmZlcgo+ICsgKiBAdmFsIC0gdGhpcyBpcyB3aGVyZSB0aGUgbnVtYmVyIHdpbGwgYmUg c3RvcmVkCj4gKyAqIEBuZWcgLSBzZXQgdG8gJVRSVUUgaWYgbnVtYmVyIGlzIG5lZ2F0aXZlCj4g KyAqIEBwZXJtX3RyIC0gYSB2ZWN0b3Igd2hpY2ggY29udGFpbnMgdGhlIGFsbG93ZWQgdHJhaWxl cnMKPiArICogQHBlcm1fdHJfbGVuIC0gc2l6ZSBvZiB0aGUgcGVybV90ciB2ZWN0b3IKPiArICog QHRyIC0gcG9pbnRlciB0byBzdG9yZSB0aGUgdHJhaWxlciBjaGFyYWN0ZXIKPiArICoKPiArICog SW4gY2FzZSBvZiBzdWNjZXNzIDAgaXMgcmV0dXJuZWQgYW5kIGJ1ZiBhbmQgc2l6ZSBhcmUgdXBk YXRlZCB3aXRoCj4gKyAqIHRoZSBhbW91bnQgb2YgYnl0ZXMgcmVhZC4gSWYgdHIgaXMgbm9uIE5V TEwgYW5kIGEgdHJhaWxpbmcKPiArICogY2hhcmFjdGVyIGV4aXN0IChzaXplIGlzIG5vbiB6ZXJv IGFmdGVyIHJldHVybmluZyBmcm9tIHRoaXMKPiArICogZnVuY3Rpb24pIHRyIGlzIHVwZGF0ZWQg d2l0aCB0aGUgdHJhaWxpbmcgY2hhcmFjdGVyLgo+ICsgKi8KPiArc3RhdGljIGludCBwcm9jX2dl dF9sb25nKGNoYXIgKipidWYsIHNpemVfdCAqc2l6ZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgKnZhbCwgYm9vbCAqbmVnLAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29uc3QgY2hhciAqcGVybV90ciwgdW5zaWdu ZWQgcGVybV90cl9sZW4sIGNoYXIgKnRyKQo+ICt7Cj4gKyDCoCDCoCDCoCBpbnQgbGVuOwo+ICsg wqAgwqAgwqAgY2hhciAqcCwgdG1wW1RNUEJVRkxFTl07Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCEq c2l6ZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArIMKg IMKgIMKgIGxlbiA9ICpzaXplOwo+ICsgwqAgwqAgwqAgaWYgKGxlbiA+IFRNUEJVRkxFTi0xKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gVE1QQlVGTEVOLTE7Cj4gKwo+ICsgwqAgwqAg wqAgbWVtY3B5KHRtcCwgKmJ1ZiwgbGVuKTsKPiArCj4gKyDCoCDCoCDCoCB0bXBbbGVuXSA9IDA7 Cj4gKyDCoCDCoCDCoCBwID0gdG1wOwo+ICsgwqAgwqAgwqAgaWYgKCpwID09ICctJyAmJiAqc2l6 ZSA+IDEpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICpuZWcgPSAxOwoKQXMgbmVnIGlzIGJv b2wqLCB5b3Ugc2hvdWxkIHVzZSB0cnVlIGFuZCBmYWxzZSBpbnN0ZWFkIG9mIDEgYW5kIDAuCgo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcCsrOwo+ICsgwqAgwqAgwqAgfSBlbHNlCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCAqbmVnID0gMDsKPiArIMKgIMKgIMKgIGlmICghaXNkaWdpdCgqcCkp Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKPiArCj4gKyDCoCDCoCDC oCAqdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwo+Cj4gLXN0YXRpYyBpbnQgZG9fcHJv Y19kb2ludHZlY19jb252KGludCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsCj4gKyDCoCDC oCDCoCBsZW4gPSBwIC0gdG1wOwo+ICsKPiArIMKgIMKgIMKgIC8qIFdlIGRvbid0IGtub3cgaWYg dGhlIG5leHQgY2hhciBpcyB3aGl0ZXNwYWNlIHRodXMgd2UgbWF5IGFjY2VwdAo+ICsgwqAgwqAg wqAgwqAqIGludmFsaWQgaW50ZWdlcnMgKGUuZy4gMTIzNC4uLmEpIG9yIHR3byBpbnRlZ2VycyBp bnN0ZWFkIG9mIG9uZQo+ICsgwqAgwqAgwqAgwqAqIChlLmcuIDEyMy4uLjEpLiBTbyBsZXRzIG5v dCBhbGxvdyBzdWNoIGxhcmdlIG51bWJlcnMuICovCj4gKyDCoCDCoCDCoCBpZiAobGVuID09IFRN UEJVRkxFTiAtIDEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKyDCoCDCoCDCoCBpZiAobGVuIDwgKnNpemUgJiYgcGVybV90cl9sZW4gJiYgIW1lbWNocihw ZXJtX3RyLCAqcCwgcGVybV90cl9sZW4pKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJu IC1FSU5WQUw7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKHRyICYmIChsZW4gPCAqc2l6ZSkpCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCAqdHIgPSAqcDsKPiArCj4gKyDCoCDCoCDCoCAqYnVmICs9IGxl bjsKPiArIMKgIMKgIMKgICpzaXplIC09IGxlbjsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIHByb2NfcHV0X2xvbmcgLSBjb3ZlcnRzIGFuIGludGVnZXIg dG8gYSBkZWNpbWFsIEFTQ0lJIGZvcm1hdGVkIHN0cmluZwo+ICsgKgo+ICsgKiBAYnVmIC0gdGhl IHVzZXIgYnVmZmVyCj4gKyAqIEBzaXplIC0gdGhlIHNpemUgb2YgdGhlIHVzZXIgYnVmZmVyCj4g KyAqIEB2YWwgLSB0aGUgaW50ZWdlciB0byBiZSBjb252ZXJ0ZWQKPiArICogQG5lZyAtIHNpZ24g b2YgdGhlIG51bWJlciwgJVRSVUUgZm9yIG5lZ2F0aXZlCj4gKyAqCj4gKyAqIEluIGNhc2Ugb2Yg c3VjY2VzcyAwIGlzIHJldHVybmVkIGFuZCBidWYgYW5kIHNpemUgYXJlIHVwZGF0ZWQgd2l0aAo+ ICsgKiB0aGUgYW1vdW50IG9mIGJ5dGVzIHJlYWQuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHByb2Nf cHV0X2xvbmcodm9pZCBfX3VzZXIgKipidWYsIHNpemVfdCAqc2l6ZSwgdW5zaWduZWQgbG9uZyB2 YWwsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBib29sIG5lZykKPiAr ewo+ICsgwqAgwqAgwqAgaW50IGxlbjsKPiArIMKgIMKgIMKgIGNoYXIgdG1wW1RNUEJVRkxFTl0s ICpwID0gdG1wOwo+ICsKPiArIMKgIMKgIMKgIHNwcmludGYocCwgIiVzJWx1IiwgbmVnID8gIi0i IDogIiIsIHZhbCk7Cj4gKyDCoCDCoCDCoCBsZW4gPSBzdHJsZW4odG1wKTsKPiArIMKgIMKgIMKg IGlmIChsZW4gPiAqc2l6ZSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9ICpzaXplOwo+ ICsgwqAgwqAgwqAgaWYgKGNvcHlfdG9fdXNlcigqYnVmLCB0bXAsIGxlbikpCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gLUVGQVVMVDsKPiArIMKgIMKgIMKgICpzaXplIC09IGxlbjsK PiArIMKgIMKgIMKgICpidWYgKz0gbGVuOwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KPiAr I3VuZGVmIFRNUEJVRkxFTgo+ICsKPiArc3RhdGljIGludCBwcm9jX3B1dF9jaGFyKHZvaWQgX191 c2VyICoqYnVmLCBzaXplX3QgKnNpemUsIGNoYXIgYykKPiArewo+ICsgwqAgwqAgwqAgaWYgKCpz aXplKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjaGFyIF9fdXNlciAqKmJ1ZmZlciA9IChj aGFyIF9fdXNlciAqKilidWY7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocHV0X3VzZXIo YywgKmJ1ZmZlcikpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4g LUVGQVVMVDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICgqc2l6ZSktLSwgKCpidWZmZXIpKys7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqYnVmID0gKmJ1ZmZlcjsKPiArIMKgIMKgIMKgIH0K PiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRvX3Byb2NfZG9p bnR2ZWNfY29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgKnZhbHAsCj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50IHdyaXRlLCB2b2lk ICpkYXRhKQo+IMKgewo+IEBAIC0yMDUwLDcgKzIxNjQsNyBAQCBzdGF0aWMgaW50IGRvX3Byb2Nf ZG9pbnR2ZWNfY29udihpbnQgKm5lCj4gwqAgwqAgwqAgwqB9IGVsc2Ugewo+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaW50IHZhbCA9ICp2YWxwOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYg KHZhbCA8IDApIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICpuZWdwID0g LTE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqbmVncCA9IDE7Cj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqbHZhbHAgPSAodW5zaWduZWQgbG9uZykt dmFsOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfSBlbHNlIHsKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCpuZWdwID0gMDsKPiBAQCAtMjA2MCwyMyArMjE3NCwyMSBAQCBz dGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfY29udihpbnQgKm5lCj4gwqAgwqAgwqAgwqByZXR1 cm4gMDsKPiDCoH0KPgo+ICtzdGF0aWMgY29uc3QgY2hhciBwcm9jX3dzcGFjZV9zZXBbXSA9IHsg JyAnLCAnXHQnLCAnXG4nIH07Cj4gKwo+IMKgc3RhdGljIGludCBfX2RvX3Byb2NfZG9pbnR2ZWMo dm9pZCAqdGJsX2RhdGEsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLAo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgaW50IHdyaXRlLCB2b2lkIF9fdXNlciAqYnVmZmVyLAo+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsCj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpbnQgKCpjb252KShpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxw LCBpbnQgKnZhbHAsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgKCpjb252KShib29s ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwgaW50ICp2YWxwLAo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IHdyaXRlLCB2b2lkICpkYXRhKSwKPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHZvaWQgKmRhdGEpCj4gwqB7Cj4gLSNkZWZpbmUgVE1Q QlVGTEVOIDIxCj4gLSDCoCDCoCDCoCBpbnQgKmksIHZsZWZ0LCBmaXJzdCA9IDEsIG5lZzsKPiAt IMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgbHZhbDsKPiAtIMKgIMKgIMKgIHNpemVfdCBsZWZ0LCBs ZW47Cj4gKyDCoCDCoCDCoCBpbnQgKmksIHZsZWZ0LCBmaXJzdCA9IDEsIGVyciA9IDA7Cj4gKyDC oCDCoCDCoCB1bnNpZ25lZCBsb25nIHBhZ2UgPSAwOwo+ICsgwqAgwqAgwqAgc2l6ZV90IGxlZnQ7 Cj4gKyDCoCDCoCDCoCBjaGFyICprYnVmOwo+Cj4gLSDCoCDCoCDCoCBjaGFyIGJ1ZltUTVBCVUZM RU5dLCAqcDsKPiAtIMKgIMKgIMKgIGNoYXIgX191c2VyICpzID0gYnVmZmVyOwo+IC0KPiAtIMKg IMKgIMKgIGlmICghdGJsX2RhdGEgfHwgIXRhYmxlLT5tYXhsZW4gfHwgISpsZW5wIHx8Cj4gLSDC oCDCoCDCoCDCoCDCoCAoKnBwb3MgJiYgIXdyaXRlKSkgewo+ICsgwqAgwqAgwqAgaWYgKCF0Ymxf ZGF0YSB8fCAhdGFibGUtPm1heGxlbiB8fCAhKmxlbnAgfHwgKCpwcG9zICYmICF3cml0ZSkpIHsK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCpsZW5wID0gMDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoHJldHVybiAwOwo+IMKgIMKgIMKgIMKgfQo+IEBAIC0yMDg4LDg5ICsyMjAwLDY5IEBAIHN0 YXRpYyBpbnQgX19kb19wcm9jX2RvaW50dmVjKHZvaWQgKnRibF8KPiDCoCDCoCDCoCDCoGlmICgh Y29udikKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnYgPSBkb19wcm9jX2RvaW50dmVjX2Nv bnY7Cj4KPiArIMKgIMKgIMKgIGlmICh3cml0ZSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aWYgKGxlZnQgPiBQQUdFX1NJWkUgLSAxKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgbGVmdCA9IFBBR0VfU0laRSAtIDE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYWdl ID0gX19nZXRfZnJlZV9wYWdlKEdGUF9URU1QT1JBUlkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAga2J1ZiA9IChjaGFyICopIHBhZ2U7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWti dWYpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVOT01FTTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWZmZXIs IGxlZnQpKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRUZB VUxUOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBmcmVlOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAga2J1ZltsZWZ0 XSA9IDA7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+IMKgIMKgIMKgIMKgZm9yICg7IGxlZnQgJiYgdmxl ZnQtLTsgaSsrLCBmaXJzdD0wKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAod3JpdGUp IHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdoaWxlIChsZWZ0KSB7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjaGFyIGM7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZ2V0X3Vz ZXIoYywgcykpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gLUVGQVVMVDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghaXNzcGFjZShjKSkKPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVmdC0tOwo+IC0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcysrOwo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgaWYgKCFsZWZ0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgYnJlYWs7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBu ZWcgPSAwOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gbGVmdDsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChsZW4gPiBzaXplb2YoYnVm KSAtIDEpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBs ZW4gPSBzaXplb2YoYnVmKSAtIDE7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBzLCBsZW4pKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBidWZbbGVuXSA9IDA7Cj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBwID0gYnVmOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYgKCpwID09ICctJyAmJiBsZWZ0ID4gMSkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbmVnID0gMTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHArKzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgq cCA8ICcwJyB8fCAqcCA+ICc5JykKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdW5zaWduZWQgbG9u ZyBsdmFsOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYm9vbCBuZWc7Cj4KPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGx2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMCk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAod3JpdGUpIHsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQgLT0gcHJvY19za2lwX3NwYWNlcygma2J1Zik7Cj4KPiAt IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IHAtYnVmOwo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChsZW4gPCBsZWZ0KSAmJiAqcCAmJiAhaXNz cGFjZSgqcCkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9j X2dldF9sb25nKCZrYnVmLCAmbGVmdCwgJmx2YWwsICZuZWcsCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHByb2Nfd3Nw YWNlX3NlcCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgc2l6ZW9mKHByb2Nfd3NwYWNlX3NlcCksIE5VTEwpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGVycikKPiDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcyArPSBsZW47Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBsZWZ0IC09IGxlbjsKPiAtCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAoY29udigmbmVnLCAmbHZhbCwgaSwgMSwgZGF0YSkpCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoY29udigmbmVnLCAmbHZhbCwgaSwgMSwgZGF0YSkp IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9 IC1FSU5WQUw7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBicmVhazsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwID0gYnVmOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGNv bnYoJm5lZywgJmx2YWwsIGksIDAsIGRhdGEpKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRUlOVkFMOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCB9Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBp ZiAoIWZpcnN0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgKnArKyA9ICdcdCc7Cj4gLQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aWYgKGNvbnYoJm5lZywgJmx2YWwsIGksIDAsIGRhdGEpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gcHJvY19wdXRfY2hhcigmYnVmZmVyLCAm bGVmdCwgJ1x0Jyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZXJy KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9jX3B1dF9sb25n KCZidWZmZXIsICZsZWZ0LCBsdmFsLCBuZWcpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgaWYgKGVycikKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGJyZWFrOwo+IC0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHNwcmludGYocCwgIiVzJWx1IiwgbmVnID8gIi0iIDogIiIsIGx2YWwpOwo+IC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gc3RybGVuKGJ1Zik7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobGVuID4gbGVmdCkKPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlbiA9IGxlZnQ7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihjb3B5X3RvX3VzZXIocywgYnVmLCBsZW4pKQo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFV TFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0IC09IGxlbjsKPiAt IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHMgKz0gbGVuOwo+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgfQo+Cj4gLSDCoCDCoCDCoCBpZiAoIXdyaXRlICYm ICFmaXJzdCAmJiBsZWZ0KSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihwdXRfdXNlcign XG4nLCBzKSkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUZB VUxUOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVmdC0tLCBzKys7Cj4gLSDCoCDCoCDCoCB9 Cj4gKyDCoCDCoCDCoCBpZiAoIXdyaXRlICYmICFmaXJzdCAmJiBsZWZ0ICYmICFlcnIpCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9jX3B1dF9jaGFyKCZidWZmZXIsICZsZWZ0LCAn XG4nKTsKPiArIMKgIMKgIMKgIGlmICh3cml0ZSAmJiAhZXJyKQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgbGVmdCAtPSBwcm9jX3NraXBfc3BhY2VzKCZrYnVmKTsKPiArZnJlZToKPiDCoCDCoCDC oCDCoGlmICh3cml0ZSkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlZnQpIHsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNoYXIgYzsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChnZXRfdXNlcihjLCBzKyspKQo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWlzc3BhY2UoYykpCj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQtLTsKPiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZyZWVfcGFnZShwYWdlKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGlmIChmaXJzdCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHJldHVybiBlcnIgPyA6IC1FSU5WQUw7Cj4gwqAgwqAgwqAgwqB9Cj4gLSDCoCDC oCDCoCBpZiAod3JpdGUgJiYgZmlyc3QpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4g LUVJTlZBTDsKPiDCoCDCoCDCoCDCoCpsZW5wIC09IGxlZnQ7Cj4gwqAgwqAgwqAgwqAqcHBvcyAr PSAqbGVucDsKPiAtIMKgIMKgIMKgIHJldHVybiAwOwo+IC0jdW5kZWYgVE1QQlVGTEVOCj4gKyDC oCDCoCDCoCByZXR1cm4gZXJyOwo+IMKgfQo+Cj4gwqBzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2 ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9z LAo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW50ICgqY29udikoaW50ICpuZWdwLCB1bnNp Z25lZCBsb25nICpsdmFscCwgaW50ICp2YWxwLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aW50ICgqY29udikoYm9vbCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsIGludCAqdmFscCwK PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCB3cml0ZSwg dm9pZCAqZGF0YSksCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB2b2lkICpkYXRhKQo+IMKg ewo+IEBAIC0yMjM4LDggKzIzMzAsOCBAQCBzdHJ1Y3QgZG9fcHJvY19kb2ludHZlY19taW5tYXhf Y29udl9wYXJhCj4gwqAgwqAgwqAgwqBpbnQgKm1heDsKPiDCoH07Cj4KPiAtc3RhdGljIGludCBk b19wcm9jX2RvaW50dmVjX21pbm1heF9jb252KGludCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZh bHAsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpbnQgKnZhbHAsCj4gK3N0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19taW5tYXhf Y29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCAqdmFscCwKPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGludCB3cml0ZSwgdm9pZCAqZGF0YSkKPiDCoHsKPiDCoCDCoCDCoCDCoHN0cnVjdCBkb19wcm9j X2RvaW50dmVjX21pbm1heF9jb252X3BhcmFtICpwYXJhbSA9IGRhdGE7Cj4gQEAgLTIyNTIsNyAr MjM0NCw3IEBAIHN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19taW5tYXhfY29udigKPiDCoCDC oCDCoCDCoH0gZWxzZSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpbnQgdmFsID0gKnZhbHA7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAodmFsIDwgMCkgewo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKm5lZ3AgPSAtMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgICpuZWdwID0gMTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCpsdmFscCA9ICh1bnNpZ25lZCBsb25nKS12YWw7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB9IGVsc2Ugewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKm5lZ3AgPSAw Owo+IEBAIC0yMjk1LDEwMiArMjM4Nyw3OCBAQCBzdGF0aWMgaW50IF9fZG9fcHJvY19kb3Vsb25n dmVjX21pbm1heCh2Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgdW5zaWduZWQgbG9uZyBjb252bXVsLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgY29udmRpdikK PiDCoHsKPiAtI2RlZmluZSBUTVBCVUZMRU4gMjEKPiAtIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcg KmksICptaW4sICptYXgsIHZhbDsKPiAtIMKgIMKgIMKgIGludCB2bGVmdCwgZmlyc3Q9MSwgbmVn Owo+IC0gwqAgwqAgwqAgc2l6ZV90IGxlbiwgbGVmdDsKPiAtIMKgIMKgIMKgIGNoYXIgYnVmW1RN UEJVRkxFTl0sICpwOwo+IC0gwqAgwqAgwqAgY2hhciBfX3VzZXIgKnMgPSBidWZmZXI7Cj4gLQo+ IC0gwqAgwqAgwqAgaWYgKCFkYXRhIHx8ICF0YWJsZS0+bWF4bGVuIHx8ICEqbGVucCB8fAo+IC0g wqAgwqAgwqAgwqAgwqAgKCpwcG9zICYmICF3cml0ZSkpIHsKPiArIMKgIMKgIMKgIHVuc2lnbmVk IGxvbmcgKmksICptaW4sICptYXg7Cj4gKyDCoCDCoCDCoCBpbnQgdmxlZnQsIGZpcnN0ID0gMSwg ZXJyID0gMDsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGxvbmcgcGFnZSA9IDA7Cj4gKyDCoCDCoCDC oCBzaXplX3QgbGVmdDsKPiArIMKgIMKgIMKgIGNoYXIgKmtidWY7Cj4gKwo+ICsgwqAgwqAgwqAg aWYgKCFkYXRhIHx8ICF0YWJsZS0+bWF4bGVuIHx8ICEqbGVucCB8fCAoKnBwb3MgJiYgIXdyaXRl KSkgewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKmxlbnAgPSAwOwo+IMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgcmV0dXJuIDA7Cj4gwqAgwqAgwqAgwqB9Cj4gLQo+ICsKPiDCoCDCoCDCoCDCoGkg PSAodW5zaWduZWQgbG9uZyAqKSBkYXRhOwo+IMKgIMKgIMKgIMKgbWluID0gKHVuc2lnbmVkIGxv bmcgKikgdGFibGUtPmV4dHJhMTsKPiDCoCDCoCDCoCDCoG1heCA9ICh1bnNpZ25lZCBsb25nICop IHRhYmxlLT5leHRyYTI7Cj4gwqAgwqAgwqAgwqB2bGVmdCA9IHRhYmxlLT5tYXhsZW4gLyBzaXpl b2YodW5zaWduZWQgbG9uZyk7Cj4gwqAgwqAgwqAgwqBsZWZ0ID0gKmxlbnA7Cj4gLQo+ICsKPiAr IMKgIMKgIMKgIGlmICh3cml0ZSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGxlZnQg PiBQQUdFX1NJWkUgLSAxKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVm dCA9IFBBR0VfU0laRSAtIDE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYWdlID0gX19nZXRf ZnJlZV9wYWdlKEdGUF9URU1QT1JBUlkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAga2J1ZiA9 IChjaGFyICopIHBhZ2U7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWtidWYpCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVOT01FTTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWZmZXIsIGxlZnQpKSB7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSAtRUZBVUxUOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBmcmVlOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAga2J1ZltsZWZ0XSA9IDA7Cj4g KyDCoCDCoCDCoCB9Cj4gKwo+IMKgIMKgIMKgIMKgZm9yICg7IGxlZnQgJiYgdmxlZnQtLTsgaSsr LCBtaW4rKywgbWF4KyssIGZpcnN0PTApIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVuc2ln bmVkIGxvbmcgdmFsOwo+ICsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICh3cml0ZSkgewo+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlZnQpIHsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNoYXIgYzsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChnZXRfdXNlcihj LCBzKSkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHJldHVybiAtRUZBVUxUOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFpc3NwYWNlKGMpKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZWZ0LS07Cj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzKys7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZiAoIWxlZnQpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBicmVhazsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG5lZyA9 IDA7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsZW4gPSBsZWZ0Owo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGxlbiA+IFRNUEJVRkxFTi0xKQo+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gVE1Q QlVGTEVOLTE7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoY29weV9m cm9tX3VzZXIoYnVmLCBzLCBsZW4pKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBidWZbbGVuXSA9IDA7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwID0gYnVmOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCpw ID09ICctJyAmJiBsZWZ0ID4gMSkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgbmVnID0gMTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHArKzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IH0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgqcCA8ICcwJyB8fCAq cCA+ICc5JykKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJyZWFrOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdmFsID0gc2ltcGxl X3N0cnRvdWwocCwgJnAsIDApICogY29udm11bCAvIGNvbnZkaXYgOwo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVuID0gcC1idWY7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZiAoKGxlbiA8IGxlZnQpICYmICpwICYmICFpc3NwYWNlKCpwKSkKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJvb2wgbmVnOwo+ICsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQgLT0gcHJvY19za2lwX3NwYWNlcygma2J1 Zik7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gcHJvY19n ZXRfbG9uZygma2J1ZiwgJmxlZnQsICZ2YWwsICZuZWcsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHByb2Nfd3NwYWNl X3NlcCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgc2l6ZW9mKHByb2Nfd3NwYWNlX3NlcCksIE5VTEwpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGVycikKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKG5lZykKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHZhbCA9IC12YWw7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBzICs9IGxlbjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGxlZnQgLT0gbGVuOwo+IC0KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm KG5lZykKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNv bnRpbnVlOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKChtaW4gJiYg dmFsIDwgKm1pbikgfHwgKG1heCAmJiB2YWwgPiAqbWF4KSkKPiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnRpbnVlOwo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgKmkgPSB2YWw7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9IGVs c2Ugewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcCA9IGJ1ZjsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZhbCA9IGNvbnZkaXYgKiAoKmkpIC8gY29u dm11bDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICghZmlyc3QpCj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqcCsrID0gJ1x0 JzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNwcmludGYocCwgIiVsdSIs IGNvbnZkaXYgKiAoKmkpIC8gY29udm11bCk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBsZW4gPSBzdHJsZW4oYnVmKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGlmIChsZW4gPiBsZWZ0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgbGVuID0gbGVmdDsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGlmKGNvcHlfdG9fdXNlcihzLCBidWYsIGxlbikpCj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVGQVVMVDsKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxlZnQgLT0gbGVuOwo+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcyArPSBsZW47Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBlcnIgPSBwcm9jX3B1dF9jaGFyKCZidWZmZXIsICZsZWZ0LCAn XHQnKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVyciA9IHByb2NfcHV0 X2xvbmcoJmJ1ZmZlciwgJmxlZnQsIHZhbCwgZmFsc2UpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKGVycikKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKg IMKgIMKgfQo+Cj4gLSDCoCDCoCDCoCBpZiAoIXdyaXRlICYmICFmaXJzdCAmJiBsZWZ0KSB7Cj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZihwdXRfdXNlcignXG4nLCBzKSkKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRUZBVUxUOwo+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgbGVmdC0tLCBzKys7Cj4gLSDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCBpZiAoIXdy aXRlICYmICFmaXJzdCAmJiBsZWZ0ICYmICFlcnIpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBl cnIgPSBwcm9jX3B1dF9jaGFyKCZidWZmZXIsICZsZWZ0LCAnXG4nKTsKPiArIMKgIMKgIMKgIGlm ICh3cml0ZSAmJiAhZXJyKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbGVmdCAtPSBwcm9jX3Nr aXBfc3BhY2VzKCZrYnVmKTsKPiArZnJlZToKPiDCoCDCoCDCoCDCoGlmICh3cml0ZSkgewo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGxlZnQpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNoYXIgYzsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGlmIChnZXRfdXNlcihjLCBzKyspKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FRkFVTFQ7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZiAoIWlzc3BhY2UoYykpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGxlZnQtLTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGZyZWVfcGFnZShwYWdlKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlm IChmaXJzdCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBlcnIg PyA6IC1FSU5WQUw7Cj4gwqAgwqAgwqAgwqB9Cj4gLSDCoCDCoCDCoCBpZiAod3JpdGUgJiYgZmly c3QpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKPiDCoCDCoCDCoCDC oCpsZW5wIC09IGxlZnQ7Cj4gwqAgwqAgwqAgwqAqcHBvcyArPSAqbGVucDsKPiAtIMKgIMKgIMKg IHJldHVybiAwOwo+IC0jdW5kZWYgVE1QQlVGTEVOCj4gKyDCoCDCoCDCoCByZXR1cm4gZXJyOwo+ IMKgfQo+Cj4gwqBzdGF0aWMgaW50IGRvX3Byb2NfZG91bG9uZ3ZlY19taW5tYXgoc3RydWN0IGN0 bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKPiBAQCAtMjQ1MSw3ICsyNTE5LDcgQEAgaW50IHBy b2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChzdAo+IMKgfQo+Cj4KPiAtc3RhdGljIGlu dCBkb19wcm9jX2RvaW50dmVjX2ppZmZpZXNfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxvbmcg Kmx2YWxwLAo+ICtzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfamlmZmllc19jb252KGJvb2wg Km5lZ3AsIHVuc2lnbmVkIGxvbmcgKmx2YWxwLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCAqdmFscCwKPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgd3Jp dGUsIHZvaWQgKmRhdGEpCj4gwqB7Cj4gQEAgLTI0NjMsNyArMjUzMSw3IEBAIHN0YXRpYyBpbnQg ZG9fcHJvY19kb2ludHZlY19qaWZmaWVzX2NvbnYKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlu dCB2YWwgPSAqdmFscDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVuc2lnbmVkIGxvbmcgbHZh bDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICh2YWwgPCAwKSB7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqbmVncCA9IC0xOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKm5lZ3AgPSAxOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgbHZhbCA9ICh1bnNpZ25lZCBsb25nKS12YWw7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB9IGVsc2Ugewo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKm5lZ3AgPSAw Owo+IEBAIC0yNDc0LDcgKzI1NDIsNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfamlm Zmllc19jb252Cj4gwqAgwqAgwqAgwqByZXR1cm4gMDsKPiDCoH0KPgo+IC1zdGF0aWMgaW50IGRv X3Byb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXNfY29udihpbnQgKm5lZ3AsIHVuc2lnbmVkIGxv bmcgKmx2YWxwLAo+ICtzdGF0aWMgaW50IGRvX3Byb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXNf Y29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlu dCAqdmFscCwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCB3cml0ZSwgdm9pZCAqZGF0YSkKPiDCoHsKPiBA QCAtMjQ4Niw3ICsyNTU0LDcgQEAgc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjX3VzZXJoel9q aWZmaQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IHZhbCA9ICp2YWxwOwo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgdW5zaWduZWQgbG9uZyBsdmFsOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgaWYgKHZhbCA8IDApIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICpu ZWdwID0gLTE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqbmVncCA9IDE7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsdmFsID0gKHVuc2lnbmVkIGxv bmcpLXZhbDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7Cj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqbmVncCA9IDA7Cj4gQEAgLTI0OTcsNyArMjU2NSw3IEBA IHN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY191c2VyaHpfamlmZmkKPiDCoCDCoCDCoCDCoHJl dHVybiAwOwo+IMKgfQo+Cj4gLXN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlY19tc19qaWZmaWVz X2NvbnYoaW50ICpuZWdwLCB1bnNpZ25lZCBsb25nICpsdmFscCwKPiArc3RhdGljIGludCBkb19w cm9jX2RvaW50dmVjX21zX2ppZmZpZXNfY29udihib29sICpuZWdwLCB1bnNpZ25lZCBsb25nICps dmFscCwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGludCAqdmFscCwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCB3cml0ZSwgdm9pZCAqZGF0 YSkKPiDCoHsKPiBAQCAtMjUwNyw3ICsyNTc1LDcgQEAgc3RhdGljIGludCBkb19wcm9jX2RvaW50 dmVjX21zX2ppZmZpZXNfYwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IHZhbCA9ICp2YWxw Owo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdW5zaWduZWQgbG9uZyBsdmFsOwo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgaWYgKHZhbCA8IDApIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICpuZWdwID0gLTE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCAqbmVncCA9IDE7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsdmFsID0g KHVuc2lnbmVkIGxvbmcpLXZhbDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7Cj4g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqbmVncCA9IDA7Cj4gLS0KPiBUbyB1 bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbmV0 ZGV2IiBpbgo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwu b3JnCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCDCoGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFq b3Jkb21vLWluZm8uaHRtbAo+CgoKCi0tIApSZWdhcmRz77yMCkNoYW5nbGkgR2FvKHhpYW9zdW9A Z21haWwuY29tKQo=