From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay1.corp.sgi.com [137.38.102.111]) by oss.sgi.com (Postfix) with ESMTP id 387E829DFF for ; Thu, 25 Jun 2015 14:38:21 -0500 (CDT) Received: from cuda.sgi.com (cuda2.sgi.com [192.48.176.25]) by relay1.corp.sgi.com (Postfix) with ESMTP id 24B3E8F8033 for ; Thu, 25 Jun 2015 12:38:18 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by cuda.sgi.com with ESMTP id TpWTys6aKpsDfFxZ (version=TLSv1 cipher=AES256-SHA bits=256 verify=NO) for ; Thu, 25 Jun 2015 12:38:16 -0700 (PDT) Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 12FB82F668E for ; Thu, 25 Jun 2015 19:38:16 +0000 (UTC) Date: Thu, 25 Jun 2015 15:38:14 -0400 From: Brian Foster Subject: Re: [PATCH 04/17] mkfs: validate all input values Message-ID: <20150625193813.GH36162@bfoster.bfoster> References: <1434711726-13092-1-git-send-email-jtulak@redhat.com> <1434711726-13092-5-git-send-email-jtulak@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1434711726-13092-5-git-send-email-jtulak@redhat.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Jan =?utf-8?B?xaR1bMOhaw==?= Cc: Dave Chinner , xfs@oss.sgi.com T24gRnJpLCBKdW4gMTksIDIwMTUgYXQgMDE6MDE6NTNQTSArMDIwMCwgSmFuIMWkdWzDoWsgd3Jv dGU6Cj4gRnJvbTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IAo+IFJpZ2h0 IG5vdywgbWtmcyBkb2VzIGEgcG9vciBqb2Igb2YgaW5wdXQgdmFsaWRhdGlvbiBvZiB2YWx1ZXMu IE1hbnkKPiBwYXJhbWV0ZXJzIGRvIG5vdCBjaGVjayBmb3IgdHJhaWxpbmcgZ2FyYmFnZSBhbmQg c28gd2lsbCBwYXNzCj4gb2J2aW91c2x5IGludmFsaWQgdmFsdWVzIGFzIE9LLiBTb21lIGRvbid0 IGV2ZW4gZGV0ZWN0IGNvbXBsZXRlbHkKPiBpbnZhbGlkIHZhbHVlcywgbGVhdmluZyBpdCBmb3Ig b3RoZXIgY2hlY2tzIGxhdGVyIG9uIHRvIGZhaWwgZHVlIHRvCj4gYSBiYWQgdmFsdWUgY29udmVy c2lvbiAtIHRoZXNlIHRlbmQgdG8gcmVseSBvbiBhdG9pKCkgaW1wbGljaXRseQo+IHJldHVybmlu ZyBhIHNhbmUgdmFsdWUgd2hlbiBpdCBpcyBwYXNzZWQgZ2FyYmFnZSwgYW5kIGF0b2kgZ2l2ZXMg bm8KPiBndWFyYW50ZWUgb2YgdGhlIHJldHVybiB2YWx1ZSB3aGVuIHBhc3NlZCBnYXJiYWdlLgo+ IAo+IENsZWFuIGFsbCB0aGlzIHVwIGJ5IHBhc3NpbmcgYWxsIHN0cmluZ3MgdGhhdCBuZWVkIHRv IGJlIGNvbnZlcnRlZAo+IGludG8gdmFsdWVzIGludG8gYSBjb21tb24gZnVuY3Rpb24gdGhhdCBp cyBjYWxsZWQgcmVnYXJkbGVzcyBvZgo+IHdoZXRoZXIgdW5pdCBjb252ZXJzaW9uIGlzIG5lZWRl ZCBvciBub3QuIEZ1cnRoZXIsIG1ha2Ugc3VyZSBldmVyeQo+IGNvbnZlcnNpb24gaXMgY2hlY2tl ZCBmb3IgYSB2YWxpZCByZXN1bHQsIGFuZCBhYm9ydCB0aGUgbW9tZW50IGFuCj4gaW52YWxpZCB2 YWx1ZSBpcyBkZXRlY3RlZC4KPiAKPiBHZXQgcmlkIG9mIHRoZSBzaWxseSAiaXNkaWdpdHMoKSwg Y3Z0bnVtKCkiIGNhbGxzIHdoaWNoIGRvbid0IHVzZQo+IGFueSBvZiB0aGUgY29udmVyc2lvbiBj YXBhYmlsaXRpZXMgb2YgY3Z0bnVtKCkgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5Cj4gZW5zdXJlZCB0 aGF0IHRoZXJlIGFyZSBubyBjb252ZXJzaW9uIHVuaXRzIGluIHRoZSBzdHJpbmcgdmlhIHRoZQo+ IGlzZGlnaXRzKCkgY2FsbC4gVGhlc2UgY2FuIHNpbXBseSBiZSByZXBsYWNlZCBieSBhIHN0YW5k YXJkCj4gc3RydG9sbCgpIGNhbGwgZm9sbG93ZWQgYnkgY2hlY2tpbmcgZm9yIG5vIHRyYWlsaW5n IGJ5dGVzLgo+IAo+IEZpbmFsbHksIHRoZSBibG9jayBzaXplIG9mIHRoZSBmaWxlc3lzdGVtIGlz IG5vdCBrbm93biB1bnRpbCBhbGwKPiB0aGUgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkIGFuZCB3 ZSBjYW4gZGV0ZXJtaW5lIGlmIHRoZSBkZWZhdWx0IGlzCj4gdG8gYmUgdXNlZC4gVGhpcyBtZWFu cyBhbnkgcGFyYW1ldGVyIHRoYXQgcmVsaWVzIG9uIHVzaW5nIGNvbnZlcnNpb24KPiBmcm9tIGZp bGVzeXN0ZW0gYmxvY2sgc2l6ZSAodGhlICJOTk5iIiBmb3JtYXQpIHJlcXVpcmVzIHRoZSBibG9j awo+IHNpemUgdG8gZmlyc3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgc28gaXQg aXMga25vd24uCj4gCj4gU2ltaWxhcmx5LCB3ZSBtYWtlIHRoZSBzYW1lIHJ1bGUgZm9yIHNwZWNp ZnlpbmcgY291bnRzIGluIHNlY3RvcnMuCj4gVGhpcyBpcyBhIGNoYW5nZSBmcm9tIHRoZSBleGlz dGluZyBiZWhhdmlvdXIgdGhhdCBhc3N1bWVzIHNlY3RvcnMKPiBhcmUgNTEyIGJ5dGVzIHVubGVz cyBvdGhlcndpc2UgY2hhbmdlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiBUaGlzLAo+IHVuZm9ydHVu YXRlbHksIGxlYWRzIHRvIGNvbXBsZXRlIHNpbGxpbmVzcyB3aGVyZSB5b3UgY2FuIHNwZWNpZnkg dGhlCj4gc2VjdG9yIHNpemUgYXMgYSBjb3VudCBvZiBzZWN0b3JzLiBJdCBhbHNvIG1lYW5zIHRo YXQgeW91IGNhbiBkbwo+IHNvbWUgY29udmVyc2lvbnMgd2l0aCA1MTIgYnl0ZSBzZWN0b3Igc2l6 ZXMsIGFuZCBvdGhlcnMgd2l0aAo+IHdoYXRldmVyIHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1h bmQgbGluZSwgbWVhbmluZyB0aGUgbWtmcwo+IGJlaGF2aW91ciBjaGFuZ2VzIGRlcGVuZGluZyBp biB3aGVyZSBpbiB0aGUgY29tbWFuZCBsaW5lIHRoZSBzZWN0b3IKPiBzaXplIGlzIGNoYW5nZWQu Li4uCj4gCj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29t Pgo+IFNpZ25lZC1vZmYtYnk6IEphbiDFpHVsw6FrIDxqdHVsYWtAcmVkaGF0LmNvbT4KPiAtLS0K ClJldmlld2VkLWJ5OiBCcmlhbiBGb3N0ZXIgPGJmb3N0ZXJAcmVkaGF0LmNvbT4KCj4gIGluY2x1 ZGUveGZzX21rZnMuaCAgfCAgIDcgKy0KPiAgbWFuL21hbjgvbWtmcy54ZnMuOCB8ICAyNiArKysr KystCj4gIG1rZnMvcHJvdG8uYyAgICAgICAgfCAgMzYgKysrKy0tLS0tCj4gIG1rZnMveGZzX21r ZnMuYyAgICAgfCAyMTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQo+ICA0IGZpbGVzIGNoYW5nZWQsIDE1MyBpbnNlcnRpb25zKCspLCAxMzEgZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUveGZzX21rZnMuaCBiL2luY2x1ZGUv eGZzX21rZnMuaAo+IGluZGV4IDNhZjljYjEuLjk5NmI2OTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVk ZS94ZnNfbWtmcy5oCj4gKysrIGIvaW5jbHVkZS94ZnNfbWtmcy5oCj4gQEAgLTU2LDExICs1Niw4 IEBACj4gICNkZWZpbmUgWEZTX05PTVVMVElESVNLX0FHTE9HCQkyCS8qIDQgQUdzICovCj4gICNk ZWZpbmUgWEZTX01VTFRJRElTS19BR0NPVU5UCQkoMSA8PCBYRlNfTVVMVElESVNLX0FHTE9HKQo+ ICAKPiAtCj4gLS8qIHhmc19ta2ZzLmMgKi8KPiAtZXh0ZXJuIGludCBpc2RpZ2l0cyAoY2hhciAq c3RyKTsKPiAtZXh0ZXJuIGxvbmcgbG9uZyBjdnRudW0gKHVuc2lnbmVkIGludCBibG9ja3NpemUs Cj4gLQkJCSB1bnNpZ25lZCBpbnQgc2VjdG9yc2l6ZSwgY2hhciAqcyk7Cj4gK2V4dGVybiBsb25n IGxvbmcgZ2V0bnVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSwKPiAr CQkJdW5zaWduZWQgaW50IHNlY3RvcnNpemUsIGJvb2wgY29udmVydCk7Cj4gIAo+ICAvKiBwcm90 by5jICovCj4gIGV4dGVybiBjaGFyICpzZXR1cF9wcm90byAoY2hhciAqZm5hbWUpOwo+IGRpZmYg LS1naXQgYS9tYW4vbWFuOC9ta2ZzLnhmcy44IGIvbWFuL21hbjgvbWtmcy54ZnMuOAo+IGluZGV4 IDYyNjBlMGMuLjQ0NTY5MzEgMTAwNjQ0Cj4gLS0tIGEvbWFuL21hbjgvbWtmcy54ZnMuOAo+ICsr KyBiL21hbi9tYW44L21rZnMueGZzLjgKPiBAQCAtNjQsMTEgKzY0LDExIEBAIFNDU0kgZGlzaywg dXNlOgo+ICAuUFAKPiAgVGhlIG1ldGFkYXRhIGxvZyBjYW4gYmUgcGxhY2VkIG9uIGFub3RoZXIg ZGV2aWNlIHRvIHJlZHVjZSB0aGUgbnVtYmVyCj4gIG9mIGRpc2sgc2Vla3MuICBUbyBjcmVhdGUg YSBmaWxlc3lzdGVtIG9uIHRoZSBmaXJzdCBwYXJ0aXRpb24gb24gdGhlCj4gLWZpcnN0IFNDU0kg ZGlzayB3aXRoIGEgMTAwMDAgYmxvY2sgbG9nIGxvY2F0ZWQgb24gdGhlIGZpcnN0IHBhcnRpdGlv bgo+ICtmaXJzdCBTQ1NJIGRpc2sgd2l0aCBhIDEwTWlCIGxvZyBsb2NhdGVkIG9uIHRoZSBmaXJz dCBwYXJ0aXRpb24KPiAgb24gdGhlIHNlY29uZCBTQ1NJIGRpc2ssIHVzZToKPiAgLlJTCj4gIC5I UAo+IC0uQiBta2ZzLnhmc1wgXC1sXCBsb2dkZXY9L2Rldi9zZGIxLHNpemU9MTAwMDBiIC9kZXYv c2RhMQo+ICsuQiBta2ZzLnhmc1wgXC1sXCBsb2dkZXY9L2Rldi9zZGIxLHNpemU9MTBtIC9kZXYv c2RhMQo+ICAuUkUKPiAgLlBQCj4gIEVhY2ggb2YgdGhlCj4gQEAgLTc4LDkgKzc4LDkgQEAgc3Vi b3B0aW9ucyBpZiBtdWx0aXBsZSBzdWJvcHRpb25zIGFwcGx5IHRvIHRoZSBzYW1lIG9wdGlvbi4K PiAgRXF1aXZhbGVudGx5LCBlYWNoIG1haW4gb3B0aW9uIGNhbiBiZSBnaXZlbiBtdWx0aXBsZSB0 aW1lcyB3aXRoCj4gIGRpZmZlcmVudCBzdWJvcHRpb25zLgo+ICBGb3IgZXhhbXBsZSwKPiAtLkIg XC1sIGludGVybmFsLHNpemU9MTAwMDBiCj4gKy5CIFwtbCBpbnRlcm5hbCxzaXplPTEwbQo+ICBh bmQKPiAtLkIgXC1sIGludGVybmFsIFwtbCBzaXplPTEwMDAwYgo+ICsuQiBcLWwgaW50ZXJuYWwg XC1sIHNpemU9MTBtCj4gIGFyZSBlcXVpdmFsZW50Lgo+ICAuUFAKPiAgSW4gdGhlIGRlc2NyaXB0 aW9ucyBiZWxvdywgc2l6ZXMgYXJlIGdpdmVuIGluIHNlY3RvcnMsIGJ5dGVzLCBibG9ja3MsCj4g QEAgLTEwOSw2ICsxMDksMTUgQEAgb3B0aW9uIGJlbG93KS4KPiAgLkhQCj4gIC5CUiBlICJcIFwt XCBtdWx0aXBseSBieSBvbmUgZXhhYnl0ZSAoMSwwNDgsNTc2IHRlcmFieXRlcykuIgo+ICAuUEQK PiArLlJFCj4gKy5QUAo+ICtXaGVuIHNwZWNpZnlpbmcgcGFyYW1ldGVycyBpbiB1bml0cyBvZiBz ZWN0b3JzIG9yIGZpbGVzeXN0ZW0gYmxvY2tzLCB0aGUKPiArLkIgXC1zCj4gK29wdGlvbiBvciB0 aGUKPiArLkIgXC1iCj4gK29wdGlvbiBmaXJzdCBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgY29t bWFuZCBsaW5lLgo+ICtGYWlsdXJlIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIHVuaXRzIHdp bGwgcmVzdWx0IGluIGlsbGVnYWwgdmFsdWUgZXJyb3JzCj4gK3doZW4gcGFyYW1ldGVycyBhcmUg cXVhbnRpZmllZCBpbiB0aG9zZSB1bml0cy4KPiAgLlNIIE9QVElPTlMKPiAgLlRQCj4gIC5CSSBc LWIgIiBibG9ja19zaXplX29wdGlvbnMiCj4gQEAgLTEyNiw2ICsxMzUsMTEgQEAgb3IgaW4gYnl0 ZXMgd2l0aAo+ICAuQlIgc2l6ZT0gLgo+ICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0MDk2IGJ5dGVz ICg0IEtpQiksIHRoZSBtaW5pbXVtIGlzIDUxMiwgYW5kIHRoZQo+ICBtYXhpbXVtIGlzIDY1NTM2 ICg2NCBLaUIpLgo+ICsuSVAKPiArVG8gc3BlY2lmeSBhbnkgb3B0aW9ucyBvbiB0aGUgY29tbWFu ZCBsaW5lIGluIHVuaXRzIG9mIGZpbGVzeXN0ZW0gYmxvY2tzLCB0aGlzCj4gK29wdGlvbiBtdXN0 IGJlIHNwZWNpZmllZCBmaXJzdCBzbyB0aGF0IHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgaXMK PiArYXBwbGllZCBjb25zaXN0ZW50bHkgdG8gYWxsIG9wdGlvbnMuCj4gKy5JUAo+ICBYRlMgb24g TGludXggY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgcGFnZXNpemUgb3Igc21hbGxlciBibG9ja3Mu Cj4gIC5UUAo+ICAuQkkgXC1tICIgZ2xvYmFsX21ldGFkYXRhX29wdGlvbnMiCj4gQEAgLTgwNCw2 ICs4MTgsMTAgQEAgaXMgNTEyIGJ5dGVzLiBUaGUgbWluaW11bSB2YWx1ZSBmb3Igc2VjdG9yIHNp emUgaXMKPiAgLkkgc2VjdG9yX3NpemUKPiAgbXVzdCBiZSBhIHBvd2VyIG9mIDIgc2l6ZSBhbmQg Y2Fubm90IGJlIG1hZGUgbGFyZ2VyIHRoYW4gdGhlCj4gIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZS4K PiArLklQCj4gK1RvIHNwZWNpZnkgYW55IG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZSBpbiB1 bml0cyBvZiBzZWN0b3JzLCB0aGlzCj4gK29wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBmaXJzdCBz byB0aGF0IHRoZSBzZWN0b3Igc2l6ZSBpcwo+ICthcHBsaWVkIGNvbnNpc3RlbnRseSB0byBhbGwg b3B0aW9ucy4KPiAgLlRQCj4gIC5CSSBcLUwgIiBsYWJlbCIKPiAgU2V0IHRoZSBmaWxlc3lzdGVt Cj4gZGlmZiAtLWdpdCBhL21rZnMvcHJvdG8uYyBiL21rZnMvcHJvdG8uYwo+IGluZGV4IDQ1NTY1 YjcuLmEyYTYxZTAgMTAwNjQ0Cj4gLS0tIGEvbWtmcy9wcm90by5jCj4gKysrIGIvbWtmcy9wcm90 by5jCj4gQEAgLTIzLDcgKzIzLDYgQEAKPiAgLyoKPiAgICogUHJvdG90eXBlcyBmb3IgaW50ZXJu YWwgZnVuY3Rpb25zLgo+ICAgKi8KPiAtc3RhdGljIGxvbmcgZ2V0bnVtKGNoYXIgKipwcCk7Cj4g IHN0YXRpYyBjaGFyICpnZXRzdHIoY2hhciAqKnBwKTsKPiAgc3RhdGljIHZvaWQgZmFpbChjaGFy ICptc2csIGludCBpKTsKPiAgc3RhdGljIHZvaWQgZ2V0cmVzKHhmc190cmFuc190ICp0cCwgdWlu dCBibG9ja3MpOwo+IEBAIC03OCw4ICs3Nyw4IEBAIHNldHVwX3Byb3RvKAo+ICAJICogU2tpcCBw YXN0IHRoZSBzdHVmZiB0aGVyZSBmb3IgY29tcGF0aWJpbGl0eSwgYSBzdHJpbmcgYW5kIDIgbnVt YmVycy4KPiAgCSAqLwo+ICAJKHZvaWQpZ2V0c3RyKCZidWYpOwkvKiBib290IGltYWdlIG5hbWUg Ki8KPiAtCSh2b2lkKWdldG51bSgmYnVmKTsJLyogYmxvY2sgY291bnQgKi8KPiAtCSh2b2lkKWdl dG51bSgmYnVmKTsJLyogaW5vZGUgY291bnQgKi8KPiArCSh2b2lkKWdldG51bShnZXRzdHIoJmJ1 ZiksIDAsIDAsIGZhbHNlKTsJLyogYmxvY2sgY291bnQgKi8KPiArCSh2b2lkKWdldG51bShnZXRz dHIoJmJ1ZiksIDAsIDAsIGZhbHNlKTsJLyogaW5vZGUgY291bnQgKi8KPiAgCWNsb3NlKGZkKTsK PiAgCXJldHVybiBidWY7Cj4gIAo+IEBAIC05MCwxNiArODksNiBAQCBvdXRfZmFpbDoKPiAgCWV4 aXQoMSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBsb25nCj4gLWdldG51bSgKPiAtCWNoYXIJKipwcCkK PiAtewo+IC0JY2hhcgkqczsKPiAtCj4gLQlzID0gZ2V0c3RyKHBwKTsKPiAtCXJldHVybiBhdG9s KHMpOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZAo+ICBmYWlsKAo+ICAJY2hhcgkqbXNnLAo+IEBA IC00NDEsOCArNDMwLDggQEAgcGFyc2Vwcm90bygKPiAgCQl2YWwgPSB2YWwgKiA4ICsgbXN0cltp XSAtICcwJzsKPiAgCX0KPiAgCW1vZGUgfD0gdmFsOwo+IC0JY3JlZHMuY3JfdWlkID0gKGludCln ZXRudW0ocHApOwo+IC0JY3JlZHMuY3JfZ2lkID0gKGludClnZXRudW0ocHApOwo+ICsJY3JlZHMu Y3JfdWlkID0gZ2V0bnVtKGdldHN0cihwcCksIDAsIDAsIGZhbHNlKTsKPiArCWNyZWRzLmNyX2dp ZCA9IGdldG51bShnZXRzdHIocHApLCAwLCAwLCBmYWxzZSk7Cj4gIAl4bmFtZS5uYW1lID0gKHVj aGFyX3QgKiluYW1lOwo+ICAJeG5hbWUubGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7Cj4g IAl4bmFtZS50eXBlID0gMDsKPiBAQCAtNDY3LDcgKzQ1NiwxNCBAQCBwYXJzZXByb3RvKAo+ICAK PiAgCWNhc2UgSUZfUkVTRVJWRUQ6CQkJLyogcHJlLWFsbG9jYXRlZCBzcGFjZSBvbmx5ICovCj4g IAkJdmFsdWUgPSBnZXRzdHIocHApOwo+IC0JCWxsZW4gPSBjdnRudW0obXAtPm1fc2Iuc2JfYmxv Y2tzaXplLCBtcC0+bV9zYi5zYl9zZWN0c2l6ZSwgdmFsdWUpOwo+ICsJCWxsZW4gPSBnZXRudW0o dmFsdWUsIG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwKPiArCQkJICAgICAgbXAtPm1fc2Iuc2Jfc2Vj dHNpemUsIHRydWUpOwo+ICsJCWlmIChsbGVuIDwgMCkgewo+ICsJCQlmcHJpbnRmKHN0ZGVyciwK PiArCQkJCV8oIiVzOiBCYWQgdmFsdWUgJXMgZm9yIHByb3RvIGZpbGUgJXNcbiIpLAo+ICsJCQkJ cHJvZ25hbWUsIHZhbHVlLCBuYW1lKTsKPiArCQkJZXhpdCgxKTsKPiArCQl9Cj4gIAkJZ2V0cmVz KHRwLCBYRlNfQl9UT19GU0IobXAsIGxsZW4pKTsKPiAgCj4gIAkJZXJyb3IgPSAtbGlieGZzX2lu b2RlX2FsbG9jKCZ0cCwgcGlwLCBtb2RlfFNfSUZSRUcsIDEsIDAsCj4gQEAgLTQ5MSw4ICs0ODcs OCBAQCBwYXJzZXByb3RvKAo+ICAKPiAgCWNhc2UgSUZfQkxPQ0s6Cj4gIAkJZ2V0cmVzKHRwLCAw KTsKPiAtCQltYWpkZXYgPSAoaW50KWdldG51bShwcCk7Cj4gLQkJbWluZGV2ID0gKGludClnZXRu dW0ocHApOwo+ICsJCW1hamRldiA9IGdldG51bShnZXRzdHIocHApLCAwLCAwLCBmYWxzZSk7Cj4g KwkJbWluZGV2ID0gZ2V0bnVtKGdldHN0cihwcCksIDAsIDAsIGZhbHNlKTsKPiAgCQllcnJvciA9 IC1saWJ4ZnNfaW5vZGVfYWxsb2MoJnRwLCBwaXAsIG1vZGV8U19JRkJMSywgMSwKPiAgCQkJCUlS SVhfTUtERVYobWFqZGV2LCBtaW5kZXYpLCAmY3JlZHMsIGZzeHAsICZpcCk7Cj4gIAkJaWYgKGVy cm9yKSB7Cj4gQEAgLTUwNiw4ICs1MDIsOCBAQCBwYXJzZXByb3RvKAo+ICAKPiAgCWNhc2UgSUZf Q0hBUjoKPiAgCQlnZXRyZXModHAsIDApOwo+IC0JCW1hamRldiA9IChpbnQpZ2V0bnVtKHBwKTsK PiAtCQltaW5kZXYgPSAoaW50KWdldG51bShwcCk7Cj4gKwkJbWFqZGV2ID0gZ2V0bnVtKGdldHN0 cihwcCksIDAsIDAsIGZhbHNlKTsKPiArCQltaW5kZXYgPSBnZXRudW0oZ2V0c3RyKHBwKSwgMCwg MCwgZmFsc2UpOwo+ICAJCWVycm9yID0gLWxpYnhmc19pbm9kZV9hbGxvYygmdHAsIHBpcCwgbW9k ZXxTX0lGQ0hSLCAxLAo+ICAJCQkJSVJJWF9NS0RFVihtYWpkZXYsIG1pbmRldiksICZjcmVkcywg ZnN4cCwgJmlwKTsKPiAgCQlpZiAoZXJyb3IpCj4gZGlmZiAtLWdpdCBhL21rZnMveGZzX21rZnMu YyBiL21rZnMveGZzX21rZnMuYwo+IGluZGV4IDEwMjc2ZTQuLjFhNWUyZjggMTAwNjQ0Cj4gLS0t IGEvbWtmcy94ZnNfbWtmcy5jCj4gKysrIGIvbWtmcy94ZnNfbWtmcy5jCj4gQEAgLTQ5LDYgKzQ5 LDkgQEAgc3RhdGljIHZvaWQgcmVzcGVjKGNoYXIgb3B0LCBjaGFyICp0YWJbXSwgaW50IGlkeCk7 Cj4gIHN0YXRpYyB2b2lkIHVua25vd24oY2hhciBvcHQsIGNoYXIgKnMpOwo+ICBzdGF0aWMgaW50 ICBpc3BvdzIodW5zaWduZWQgaW50IGkpOwo+ICAKPiArc3RhdGljIGxvbmcgbG9uZyBjdnRudW0o dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSwKPiArCQkJdW5zaWduZWQgaW50IHNlY3RvcnNpemUsIGNv bnN0IGNoYXIgKnMpOwo+ICsKPiAgLyoKPiAgICogb3B0aW9uIHRhYmxlcyBmb3IgZ2V0c3Vib3B0 IGNhbGxzCj4gICAqLwo+IEBAIC0xMDA0LDYgKzEwMDcsMjggQEAgc2Jfc2V0X2ZlYXR1cmVzKAo+ ICAKPiAgfQo+ICAKPiArbG9uZyBsb25nCj4gK2dldG51bSgKPiArCWNvbnN0IGNoYXIJKnN0ciwK PiArCXVuc2lnbmVkIGludAlibG9ja3NpemUsCj4gKwl1bnNpZ25lZCBpbnQJc2VjdG9yc2l6ZSwK PiArCWJvb2wJCWNvbnZlcnQpCj4gK3sKPiArCWxvbmcgbG9uZwlpOwo+ICsJY2hhcgkJKnNwOwo+ ICsKPiArCWlmIChjb252ZXJ0KQo+ICsJCXJldHVybiBjdnRudW0oYmxvY2tzaXplLCBzZWN0b3Jz aXplLCBzdHIpOwo+ICsKPiArCWkgPSBzdHJ0b2xsKHN0ciwgJnNwLCAwKTsKPiArCWlmIChpID09 IDAgJiYgc3AgPT0gc3RyKQo+ICsJCXJldHVybiAtMUxMOwo+ICsJaWYgKCpzcCAhPSAnXDAnKQo+ ICsJCXJldHVybiAtMUxMOyAvKiB0cmFpbGluZyBnYXJiYWdlICovCj4gKwlyZXR1cm4gaTsKPiAr fQo+ICsKPiArCj4gIGludAo+ICBtYWluKAo+ICAJaW50CQkJYXJnYywKPiBAQCAtMTEyMyw4ICsx MTQ4LDggQEAgbWFpbigKPiAgCj4gIAlibGZsYWcgPSBic2ZsYWcgPSBzbGZsYWcgPSBzc2ZsYWcg PSBsc2xmbGFnID0gbHNzZmxhZyA9IDA7Cj4gIAlibG9ja2xvZyA9IGJsb2Nrc2l6ZSA9IDA7Cj4g LQlzZWN0b3Jsb2cgPSBsc2VjdG9ybG9nID0gWEZTX01JTl9TRUNUT1JTSVpFX0xPRzsKPiAtCXNl Y3RvcnNpemUgPSBsc2VjdG9yc2l6ZSA9IFhGU19NSU5fU0VDVE9SU0laRTsKPiArCXNlY3Rvcmxv ZyA9IGxzZWN0b3Jsb2cgPSAwOwo+ICsJc2VjdG9yc2l6ZSA9IGxzZWN0b3JzaXplID0gMDsKPiAg CWFnc2l6ZSA9IGRhZmxhZyA9IGRhc2l6ZSA9IGRibG9ja3MgPSAwOwo+ICAJaWxmbGFnID0gaW1m bGFnID0gaXBmbGFnID0gaXNmbGFnID0gMDsKPiAgCWxpZmxhZyA9IGxhZmxhZyA9IGxzZmxhZyA9 IGxzdWZsYWcgPSBsc3VuaXRmbGFnID0gbGRmbGFnID0gbHZmbGFnID0gMDsKPiBAQCAtMTE2Nyw3 ICsxMTkyLDcgQEAgbWFpbigKPiAgCQkJCQlpZiAoYnNmbGFnKQo+ICAJCQkJCQljb25mbGljdCgn YicsIGJvcHRzLCBCX1NJWkUsCj4gIAkJCQkJCQkgQl9MT0cpOwo+IC0JCQkJCWJsb2NrbG9nID0g YXRvaSh2YWx1ZSk7Cj4gKwkJCQkJYmxvY2tsb2cgPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNl KTsKPiAgCQkJCQlpZiAoYmxvY2tsb2cgPD0gMCkKPiAgCQkJCQkJaWxsZWdhbCh2YWx1ZSwgImIg bG9nIik7Cj4gIAkJCQkJYmxvY2tzaXplID0gMSA8PCBibG9ja2xvZzsKPiBAQCAtMTE4MSw4ICsx MjA2LDggQEAgbWFpbigKPiAgCQkJCQlpZiAoYmxmbGFnKQo+ICAJCQkJCQljb25mbGljdCgnYics IGJvcHRzLCBCX0xPRywKPiAgCQkJCQkJCSBCX1NJWkUpOwo+IC0JCQkJCWJsb2Nrc2l6ZSA9IGN2 dG51bSgKPiAtCQkJCQkJYmxvY2tzaXplLCBzZWN0b3JzaXplLCB2YWx1ZSk7Cj4gKwkJCQkJYmxv Y2tzaXplID0gZ2V0bnVtKHZhbHVlLCBibG9ja3NpemUsCj4gKwkJCQkJCQlzZWN0b3JzaXplLCB0 cnVlKTsKPiAgCQkJCQlpZiAoYmxvY2tzaXplIDw9IDAgfHwKPiAgCQkJCQkgICAgIWlzcG93Mihi bG9ja3NpemUpKQo+ICAJCQkJCQlpbGxlZ2FsKHZhbHVlLCAiYiBzaXplIik7Cj4gQEAgLTEyMDUs OCArMTIzMCw3IEBAIG1haW4oCj4gIAkJCQkJCXJlcXZhbCgnZCcsIGRvcHRzLCBEX0FHQ09VTlQp Owo+ICAJCQkJCWlmIChkYWZsYWcpCj4gIAkJCQkJCXJlc3BlYygnZCcsIGRvcHRzLCBEX0FHQ09V TlQpOwo+IC0JCQkJCWFnY291bnQgPSAoX191aW50NjRfdCkKPiAtCQkJCQkJc3RydG91bCh2YWx1 ZSwgTlVMTCwgMTApOwo+ICsJCQkJCWFnY291bnQgPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNl KTsKPiAgCQkJCQlpZiAoKF9faW50NjRfdClhZ2NvdW50IDw9IDApCj4gIAkJCQkJCWlsbGVnYWwo dmFsdWUsICJkIGFnY291bnQiKTsKPiAgCQkJCQlkYWZsYWcgPSAxOwo+IEBAIC0xMjE2LDE0ICsx MjQwLDE2IEBAIG1haW4oCj4gIAkJCQkJCXJlcXZhbCgnZCcsIGRvcHRzLCBEX0FHU0laRSk7Cj4g IAkJCQkJaWYgKGRhc2l6ZSkKPiAgCQkJCQkJcmVzcGVjKCdkJywgZG9wdHMsIERfQUdTSVpFKTsK PiAtCQkJCQlhZ3NpemUgPSBjdnRudW0oCj4gLQkJCQkJCWJsb2Nrc2l6ZSwgc2VjdG9yc2l6ZSwg dmFsdWUpOwo+ICsJCQkJCWFnc2l6ZSA9IGdldG51bSh2YWx1ZSwgYmxvY2tzaXplLAo+ICsJCQkJ CQkJc2VjdG9yc2l6ZSwgdHJ1ZSk7Cj4gKwkJCQkJaWYgKChfX2ludDY0X3QpYWdzaXplIDw9IDAp Cj4gKwkJCQkJCWlsbGVnYWwodmFsdWUsICJkIGFnc2l6ZSIpOwo+ICAJCQkJCWRhc2l6ZSA9IDE7 Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJCQljYXNlIERfRklMRToKPiAgCQkJCQlpZiAoIXZhbHVlIHx8 ICp2YWx1ZSA9PSAnXDAnKQo+ICAJCQkJCQl2YWx1ZSA9ICIxIjsKPiAtCQkJCQl4aS5kaXNmaWxl ID0gYXRvaSh2YWx1ZSk7Cj4gKwkJCQkJeGkuZGlzZmlsZSA9IGdldG51bSh2YWx1ZSwgMCwgMCwg ZmFsc2UpOwo+ICAJCQkJCWlmICh4aS5kaXNmaWxlIDwgMCB8fCB4aS5kaXNmaWxlID4gMSkKPiAg CQkJCQkJaWxsZWdhbCh2YWx1ZSwgImQgZmlsZSIpOwo+ICAJCQkJCWlmICh4aS5kaXNmaWxlICYm ICFOZmxhZykKPiBAQCAtMTI1MSwxMyArMTI3Nyw5IEBAIG1haW4oCj4gIAkJCQkJaWYgKG5vZHNm bGFnKQo+ICAJCQkJCQljb25mbGljdCgnZCcsIGRvcHRzLCBEX05PQUxJR04sCj4gIAkJCQkJCQkg RF9TVU5JVCk7Cj4gLQkJCQkJaWYgKCFpc2RpZ2l0cyh2YWx1ZSkpIHsKPiAtCQkJCQkJZnByaW50 ZihzdGRlcnIsCj4gLQlfKCIlczogU3BlY2lmeSBkYXRhIHN1bml0IGluIDUxMi1ieXRlIGJsb2Nr cywgbm8gdW5pdCBzdWZmaXhcbiIpLAo+IC0JCQkJCQkJcHJvZ25hbWUpOwo+IC0JCQkJCQlleGl0 KDEpOwo+IC0JCQkJCX0KPiAtCQkJCQlkc3VuaXQgPSBjdnRudW0oMCwgMCwgdmFsdWUpOwo+ICsJ CQkJCWRzdW5pdCA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2UpOwo+ICsJCQkJCWlmIChkc3Vu aXQgPCAwKQo+ICsJCQkJCQlpbGxlZ2FsKHZhbHVlLCAiZCBzdW5pdCIpOwo+ICAJCQkJCWJyZWFr Owo+ICAJCQkJY2FzZSBEX1NXSURUSDoKPiAgCQkJCQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAn XDAnKQo+IEBAIC0xMjY3LDEzICsxMjg5LDkgQEAgbWFpbigKPiAgCQkJCQlpZiAobm9kc2ZsYWcp Cj4gIAkJCQkJCWNvbmZsaWN0KCdkJywgZG9wdHMsIERfTk9BTElHTiwKPiAgCQkJCQkJCSBEX1NX SURUSCk7Cj4gLQkJCQkJaWYgKCFpc2RpZ2l0cyh2YWx1ZSkpIHsKPiAtCQkJCQkJZnByaW50Zihz dGRlcnIsCj4gLQlfKCIlczogU3BlY2lmeSBkYXRhIHN3aWR0aCBpbiA1MTItYnl0ZSBibG9ja3Ms IG5vIHVuaXQgc3VmZml4XG4iKSwKPiAtCQkJCQkJCXByb2duYW1lKTsKPiAtCQkJCQkJZXhpdCgx KTsKPiAtCQkJCQl9Cj4gLQkJCQkJZHN3aWR0aCA9IGN2dG51bSgwLCAwLCB2YWx1ZSk7Cj4gKwkJ CQkJZHN3aWR0aCA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2UpOwo+ICsJCQkJCWlmIChkc3dp ZHRoIDwgMCkKPiArCQkJCQkJaWxsZWdhbCh2YWx1ZSwgImQgc3dpZHRoIik7Cj4gIAkJCQkJYnJl YWs7Cj4gIAkJCQljYXNlIERfU1U6Cj4gIAkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1ww JykKPiBAQCAtMTI4Myw4ICsxMzAxLDEwIEBAIG1haW4oCj4gIAkJCQkJaWYgKG5vZHNmbGFnKQo+ ICAJCQkJCQljb25mbGljdCgnZCcsIGRvcHRzLCBEX05PQUxJR04sCj4gIAkJCQkJCQkgRF9TVSk7 Cj4gLQkJCQkJZHN1ID0gY3Z0bnVtKAo+IC0JCQkJCQlibG9ja3NpemUsIHNlY3RvcnNpemUsIHZh bHVlKTsKPiArCQkJCQlkc3UgPSBnZXRudW0odmFsdWUsIGJsb2Nrc2l6ZSwKPiArCQkJCQkJICAg ICBzZWN0b3JzaXplLCB0cnVlKTsKPiArCQkJCQlpZiAoZHN1IDwgMCkKPiArCQkJCQkJaWxsZWdh bCh2YWx1ZSwgImQgc3UiKTsKPiAgCQkJCQlicmVhazsKPiAgCQkJCWNhc2UgRF9TVzoKPiAgCQkJ CQlpZiAoIXZhbHVlIHx8ICp2YWx1ZSA9PSAnXDAnKQo+IEBAIC0xMjk0LDEzICsxMzE0LDkgQEAg bWFpbigKPiAgCQkJCQlpZiAobm9kc2ZsYWcpCj4gIAkJCQkJCWNvbmZsaWN0KCdkJywgZG9wdHMs IERfTk9BTElHTiwKPiAgCQkJCQkJCSBEX1NXKTsKPiAtCQkJCQlpZiAoIWlzZGlnaXRzKHZhbHVl KSkgewo+IC0JCQkJCQlmcHJpbnRmKHN0ZGVyciwKPiAtCQlfKCIlczogU3BlY2lmeSBkYXRhIHN3 IGFzIG11bHRpcGxlIG9mIHN1LCBubyB1bml0IHN1ZmZpeFxuIiksCj4gLQkJCQkJCQlwcm9nbmFt ZSk7Cj4gLQkJCQkJCWV4aXQoMSk7Cj4gLQkJCQkJfQo+IC0JCQkJCWRzdyA9IGN2dG51bSgwLCAw LCB2YWx1ZSk7Cj4gKwkJCQkJZHN3ID0gZ2V0bnVtKHZhbHVlLCAwLCAwLCBmYWxzZSk7Cj4gKwkJ CQkJaWYgKGRzdyA8IDApCj4gKwkJCQkJCWlsbGVnYWwodmFsdWUsICJkIHN3Iik7Cj4gIAkJCQkJ YnJlYWs7Cj4gIAkJCQljYXNlIERfTk9BTElHTjoKPiAgCQkJCQlpZiAoZHN1KQo+IEBAIC0xMzI1 LDcgKzEzNDEsNyBAQCBtYWluKAo+ICAJCQkJCWlmIChzc2ZsYWcpCj4gIAkJCQkJCWNvbmZsaWN0 KCdkJywgZG9wdHMsIERfU0VDVFNJWkUsCj4gIAkJCQkJCQkgRF9TRUNUTE9HKTsKPiAtCQkJCQlz ZWN0b3Jsb2cgPSBhdG9pKHZhbHVlKTsKPiArCQkJCQlzZWN0b3Jsb2cgPSBnZXRudW0odmFsdWUs IDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoc2VjdG9ybG9nIDw9IDApCj4gIAkJCQkJCWlsbGVn YWwodmFsdWUsICJkIHNlY3Rsb2ciKTsKPiAgCQkJCQlzZWN0b3JzaXplID0gMSA8PCBzZWN0b3Js b2c7Cj4gQEAgLTEzMzksOCArMTM1NSw4IEBAIG1haW4oCj4gIAkJCQkJaWYgKHNsZmxhZykKPiAg CQkJCQkJY29uZmxpY3QoJ2QnLCBkb3B0cywgRF9TRUNUTE9HLAo+ICAJCQkJCQkJIERfU0VDVFNJ WkUpOwo+IC0JCQkJCXNlY3RvcnNpemUgPSBjdnRudW0oCj4gLQkJCQkJCWJsb2Nrc2l6ZSwgc2Vj dG9yc2l6ZSwgdmFsdWUpOwo+ICsJCQkJCXNlY3RvcnNpemUgPSBnZXRudW0odmFsdWUsIGJsb2Nr c2l6ZSwKPiArCQkJCQkJCSAgICBzZWN0b3JzaXplLCB0cnVlKTsKPiAgCQkJCQlpZiAoc2VjdG9y c2l6ZSA8PSAwIHx8Cj4gIAkJCQkJICAgICFpc3BvdzIoc2VjdG9yc2l6ZSkpCj4gIAkJCQkJCWls bGVnYWwodmFsdWUsICJkIHNlY3RzaXplIik7Cj4gQEAgLTEzODAsNyArMTM5Niw3IEBAIG1haW4o Cj4gIAkJCQljYXNlIElfQUxJR046Cj4gIAkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1ww JykKPiAgCQkJCQkJYnJlYWs7Cj4gLQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCWMgPSBn ZXRudW0odmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoYyA8IDAgfHwgYyA+IDEpCj4g IAkJCQkJCWlsbGVnYWwodmFsdWUsICJpIGFsaWduIik7Cj4gIAkJCQkJc2JfZmVhdC5pbm9kZV9h bGlnbiA9IGMgPyB0cnVlIDogZmFsc2U7Cj4gQEAgLTEzOTYsNyArMTQxMiw3IEBAIG1haW4oCj4g IAkJCQkJaWYgKGlzZmxhZykKPiAgCQkJCQkJY29uZmxpY3QoJ2knLCBpb3B0cywgSV9TSVpFLAo+ ICAJCQkJCQkJIElfTE9HKTsKPiAtCQkJCQlpbm9kZWxvZyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJ CWlub2RlbG9nID0gZ2V0bnVtKHZhbHVlLCAwLCAwLCBmYWxzZSk7Cj4gIAkJCQkJaWYgKGlub2Rl bG9nIDw9IDApCj4gIAkJCQkJCWlsbGVnYWwodmFsdWUsICJpIGxvZyIpOwo+ICAJCQkJCWlzaXpl ID0gMSA8PCBpbm9kZWxvZzsKPiBAQCAtMTQwNyw3ICsxNDIzLDcgQEAgbWFpbigKPiAgCQkJCQkJ cmVxdmFsKCdpJywgaW9wdHMsIElfTUFYUENUKTsKPiAgCQkJCQlpZiAoaW1mbGFnKQo+ICAJCQkJ CQlyZXNwZWMoJ2knLCBpb3B0cywgSV9NQVhQQ1QpOwo+IC0JCQkJCWltYXhwY3QgPSBhdG9pKHZh bHVlKTsKPiArCQkJCQlpbWF4cGN0ID0gZ2V0bnVtKHZhbHVlLCAwLCAwLCBmYWxzZSk7Cj4gIAkJ CQkJaWYgKGltYXhwY3QgPCAwIHx8IGltYXhwY3QgPiAxMDApCj4gIAkJCQkJCWlsbGVnYWwodmFs dWUsICJpIG1heHBjdCIpOwo+ICAJCQkJCWltZmxhZyA9IDE7Cj4gQEAgLTE0MjMsNyArMTQzOSw3 IEBAIG1haW4oCj4gIAkJCQkJaWYgKGlzZmxhZykKPiAgCQkJCQkJY29uZmxpY3QoJ2knLCBpb3B0 cywgSV9TSVpFLAo+ICAJCQkJCQkJIElfUEVSQkxPQ0spOwo+IC0JCQkJCWlub3BibG9jayA9IGF0 b2kodmFsdWUpOwo+ICsJCQkJCWlub3BibG9jayA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2Up Owo+ICAJCQkJCWlmIChpbm9wYmxvY2sgPAo+ICAJCQkJCQlYRlNfTUlOX0lOT0RFX1BFUkJMT0NL IHx8Cj4gIAkJCQkJICAgICFpc3BvdzIoaW5vcGJsb2NrKSkKPiBAQCAtMTQ0MSw3ICsxNDU3LDcg QEAgbWFpbigKPiAgCQkJCQkJCSBJX1NJWkUpOwo+ICAJCQkJCWlmIChpc2ZsYWcpCj4gIAkJCQkJ CXJlc3BlYygnaScsIGlvcHRzLCBJX1NJWkUpOwo+IC0JCQkJCWlzaXplID0gY3Z0bnVtKDAsIDAs IHZhbHVlKTsKPiArCQkJCQlpc2l6ZSA9IGdldG51bSh2YWx1ZSwgMCwgMCwgdHJ1ZSk7Cj4gIAkJ CQkJaWYgKGlzaXplIDw9IDAgfHwgIWlzcG93Mihpc2l6ZSkpCj4gIAkJCQkJCWlsbGVnYWwodmFs dWUsICJpIHNpemUiKTsKPiAgCQkJCQlpbm9kZWxvZyA9IGxpYnhmc19oaWdoYml0MzIoaXNpemUp Owo+IEBAIC0xNDUwLDcgKzE0NjYsNyBAQCBtYWluKAo+ICAJCQkJY2FzZSBJX0FUVFI6Cj4gIAkJ CQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykKPiAgCQkJCQkJcmVxdmFsKCdpJywgaW9w dHMsIElfQVRUUik7Cj4gLQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCWMgPSBnZXRudW0o dmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoYyA8IDAgfHwgYyA+IDIpCj4gIAkJCQkJ CWlsbGVnYWwodmFsdWUsICJpIGF0dHIiKTsKPiAgCQkJCQlzYl9mZWF0LmF0dHJfdmVyc2lvbiA9 IGM7Cj4gQEAgLTE0NTgsNyArMTQ3NCw3IEBAIG1haW4oCj4gIAkJCQljYXNlIElfUFJPSklEMzJC SVQ6Cj4gIAkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykKPiAgCQkJCQkJdmFsdWUg PSAiMCI7Cj4gLQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCWMgPSBnZXRudW0odmFsdWUs IDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoYyA8IDAgfHwgYyA+IDEpCj4gIAkJCQkJCWlsbGVn YWwodmFsdWUsICJpIHByb2ppZDMyYml0Iik7Cj4gIAkJCQkJc2JfZmVhdC5wcm9qaWQxNmJpdCA9 IGMgPyBmYWxzZSA6IHRydWU7Cj4gQEAgLTE0ODgsNyArMTUwNCw5IEBAIG1haW4oCj4gIAkJCQkJ CXJlc3BlYygnbCcsIGxvcHRzLCBMX0FHTlVNKTsKPiAgCQkJCQlpZiAobGRmbGFnKQo+ICAJCQkJ CQljb25mbGljdCgnbCcsIGxvcHRzLCBMX0FHTlVNLCBMX0RFVik7Cj4gLQkJCQkJbG9nYWdubyA9 IGF0b2kodmFsdWUpOwo+ICsJCQkJCWxvZ2Fnbm8gPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNl KTsKPiArCQkJCQlpZiAobG9nYWdubyA8IDApCj4gKwkJCQkJCWlsbGVnYWwodmFsdWUsICJsIGFn bm8iKTsKPiAgCQkJCQlsYWZsYWcgPSAxOwo+ICAJCQkJCWJyZWFrOwo+ICAJCQkJY2FzZSBMX0ZJ TEU6Cj4gQEAgLTE0OTcsNyArMTUxNSw3IEBAIG1haW4oCj4gIAkJCQkJaWYgKGxvZ2ludGVybmFs KQo+ICAJCQkJCQljb25mbGljdCgnbCcsIGxvcHRzLCBMX0lOVEVSTkFMLAo+ICAJCQkJCQkJIExf RklMRSk7Cj4gLQkJCQkJeGkubGlzZmlsZSA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCXhpLmxpc2Zp bGUgPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoeGkubGlzZmlsZSA8 IDAgfHwgeGkubGlzZmlsZSA+IDEpCj4gIAkJCQkJCWlsbGVnYWwodmFsdWUsICJsIGZpbGUiKTsK PiAgCQkJCQlpZiAoeGkubGlzZmlsZSkKPiBAQCAtMTUxMyw3ICsxNTMxLDcgQEAgbWFpbigKPiAg CQkJCQkJCSBMX0lOVEVSTkFMKTsKPiAgCQkJCQlpZiAobGlmbGFnKQo+ICAJCQkJCQlyZXNwZWMo J2wnLCBsb3B0cywgTF9JTlRFUk5BTCk7Cj4gLQkJCQkJbG9naW50ZXJuYWwgPSBhdG9pKHZhbHVl KTsKPiArCQkJCQlsb2dpbnRlcm5hbCA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2UpOwo+ICAJ CQkJCWlmIChsb2dpbnRlcm5hbCA8IDAgfHwgbG9naW50ZXJuYWwgPiAxKQo+ICAJCQkJCQlpbGxl Z2FsKHZhbHVlLCAibCBpbnRlcm5hbCIpOwo+ICAJCQkJCWxpZmxhZyA9IDE7Cj4gQEAgLTE1MjMs OCArMTU0MSwxMCBAQCBtYWluKAo+ICAJCQkJCQlyZXF2YWwoJ2wnLCBsb3B0cywgTF9TVSk7Cj4g IAkJCQkJaWYgKGxzdSkKPiAgCQkJCQkJcmVzcGVjKCdsJywgbG9wdHMsIExfU1UpOwo+IC0JCQkJ CWxzdSA9IGN2dG51bSgKPiAtCQkJCQkJYmxvY2tzaXplLCBzZWN0b3JzaXplLCB2YWx1ZSk7Cj4g KwkJCQkJbHN1ID0gZ2V0bnVtKHZhbHVlLCBibG9ja3NpemUsCj4gKwkJCQkJCSAgICAgc2VjdG9y c2l6ZSwgdHJ1ZSk7Cj4gKwkJCQkJaWYgKGxzdSA8IDApCj4gKwkJCQkJCWlsbGVnYWwodmFsdWUs ICJsIHN1Iik7Cj4gIAkJCQkJbHN1ZmxhZyA9IDE7Cj4gIAkJCQkJYnJlYWs7Cj4gIAkJCQljYXNl IExfU1VOSVQ6Cj4gQEAgLTE1MzIsMTIgKzE1NTIsOSBAQCBtYWluKAo+ICAJCQkJCQlyZXF2YWwo J2wnLCBsb3B0cywgTF9TVU5JVCk7Cj4gIAkJCQkJaWYgKGxzdW5pdCkKPiAgCQkJCQkJcmVzcGVj KCdsJywgbG9wdHMsIExfU1VOSVQpOwo+IC0JCQkJCWlmICghaXNkaWdpdHModmFsdWUpKSB7Cj4g LQkJCQkJCWZwcmludGYoc3RkZXJyLAo+IC0JCV8oIlNwZWNpZnkgbG9nIHN1bml0IGluIDUxMi1i eXRlIGJsb2Nrcywgbm8gc2l6ZSBzdWZmaXhcbiIpKTsKPiAtCQkJCQkJdXNhZ2UoKTsKPiAtCQkJ CQl9Cj4gLQkJCQkJbHN1bml0ID0gY3Z0bnVtKDAsIDAsIHZhbHVlKTsKPiArCQkJCQlsc3VuaXQg PSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNlKTsKPiArCQkJCQlpZiAobHN1bml0IDwgMCkKPiAr CQkJCQkJaWxsZWdhbCh2YWx1ZSwgImwgc3VuaXQiKTsKPiAgCQkJCQlsc3VuaXRmbGFnID0gMTsK PiAgCQkJCQlicmVhazsKPiAgCQkJCWNhc2UgTF9OQU1FOgo+IEBAIC0xNTYwLDcgKzE1NzcsNyBA QCBtYWluKAo+ICAJCQkJCQlyZXF2YWwoJ2wnLCBsb3B0cywgTF9WRVJTSU9OKTsKPiAgCQkJCQlp ZiAobHZmbGFnKQo+ICAJCQkJCQlyZXNwZWMoJ2wnLCBsb3B0cywgTF9WRVJTSU9OKTsKPiAtCQkJ CQljID0gYXRvaSh2YWx1ZSk7Cj4gKwkJCQkJYyA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2Up Owo+ICAJCQkJCWlmIChjIDwgMSB8fCBjID4gMikKPiAgCQkJCQkJaWxsZWdhbCh2YWx1ZSwgImwg dmVyc2lvbiIpOwo+ICAJCQkJCXNiX2ZlYXQubG9nX3ZlcnNpb24gPSBjOwo+IEBAIC0xNTgyLDcg KzE1OTksNyBAQCBtYWluKAo+ICAJCQkJCWlmIChsc3NmbGFnKQo+ICAJCQkJCQljb25mbGljdCgn bCcsIGxvcHRzLCBMX1NFQ1RTSVpFLAo+ICAJCQkJCQkJIExfU0VDVExPRyk7Cj4gLQkJCQkJbHNl Y3RvcmxvZyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCWxzZWN0b3Jsb2cgPSBnZXRudW0odmFsdWUs IDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAobHNlY3RvcmxvZyA8PSAwKQo+ICAJCQkJCQlpbGxl Z2FsKHZhbHVlLCAibCBzZWN0bG9nIik7Cj4gIAkJCQkJbHNlY3RvcnNpemUgPSAxIDw8IGxzZWN0 b3Jsb2c7Cj4gQEAgLTE1OTYsOCArMTYxMyw4IEBAIG1haW4oCj4gIAkJCQkJaWYgKGxzbGZsYWcp Cj4gIAkJCQkJCWNvbmZsaWN0KCdsJywgbG9wdHMsIExfU0VDVExPRywKPiAgCQkJCQkJCSBMX1NF Q1RTSVpFKTsKPiAtCQkJCQlsc2VjdG9yc2l6ZSA9IGN2dG51bSgKPiAtCQkJCQkJYmxvY2tzaXpl LCBzZWN0b3JzaXplLCB2YWx1ZSk7Cj4gKwkJCQkJbHNlY3RvcnNpemUgPSBnZXRudW0odmFsdWUs IGJsb2Nrc2l6ZSwKPiArCQkJCQkJCSAgICAgc2VjdG9yc2l6ZSwgdHJ1ZSk7Cj4gIAkJCQkJaWYg KGxzZWN0b3JzaXplIDw9IDAgfHwKPiAgCQkJCQkgICAgIWlzcG93Mihsc2VjdG9yc2l6ZSkpCj4g IAkJCQkJCWlsbGVnYWwodmFsdWUsICJsIHNlY3RzaXplIik7Cj4gQEAgLTE2MDksNyArMTYyNiw3 IEBAIG1haW4oCj4gIAkJCQkJaWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykKPiAgCQkJCQkJ cmVxdmFsKCdsJywgbG9wdHMsCj4gIAkJCQkJCQkJTF9MQVpZU0JDTlRSKTsKPiAtCQkJCQljID0g YXRvaSh2YWx1ZSk7Cj4gKwkJCQkJYyA9IGdldG51bSh2YWx1ZSwgMCwgMCwgZmFsc2UpOwo+ICAJ CQkJCWlmIChjIDwgMCB8fCBjID4gMSkKPiAgCQkJCQkJaWxsZWdhbCh2YWx1ZSwgImwgbGF6eS1j b3VudCIpOwo+ICAJCQkJCXNiX2ZlYXQubGF6eV9zYl9jb3VudGVycyA9IGMgPyB0cnVlCj4gQEAg LTE2MzQsNyArMTY1MSw3IEBAIG1haW4oCj4gIAkJCQljYXNlIE1fQ1JDOgo+ICAJCQkJCWlmICgh dmFsdWUgfHwgKnZhbHVlID09ICdcMCcpCj4gIAkJCQkJCXJlcXZhbCgnbScsIG1vcHRzLCBNX0NS Qyk7Cj4gLQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCWMgPSBnZXRudW0odmFsdWUsIDAs IDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoYyA8IDAgfHwgYyA+IDEpCj4gIAkJCQkJCWlsbGVnYWwo dmFsdWUsICJtIGNyYyIpOwo+ICAJCQkJCWlmIChjICYmIG5mdHlwZSkgewo+IEBAIC0xNjczLDcg KzE2OTAsNyBAQCBfKCJjYW5ub3Qgc3BlY2lmeSBib3RoIGNyYyBhbmQgZnR5cGVcbiIpKTsKPiAg CQkJCQlpZiAobnNmbGFnKQo+ICAJCQkJCQljb25mbGljdCgnbicsIG5vcHRzLCBOX1NJWkUsCj4g IAkJCQkJCQkgTl9MT0cpOwo+IC0JCQkJCWRpcmJsb2NrbG9nID0gYXRvaSh2YWx1ZSk7Cj4gKwkJ CQkJZGlyYmxvY2tsb2cgPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAo ZGlyYmxvY2tsb2cgPD0gMCkKPiAgCQkJCQkJaWxsZWdhbCh2YWx1ZSwgIm4gbG9nIik7Cj4gIAkJ CQkJZGlyYmxvY2tzaXplID0gMSA8PCBkaXJibG9ja2xvZzsKPiBAQCAtMTY4Nyw4ICsxNzA0LDgg QEAgXygiY2Fubm90IHNwZWNpZnkgYm90aCBjcmMgYW5kIGZ0eXBlXG4iKSk7Cj4gIAkJCQkJaWYg KG5sZmxhZykKPiAgCQkJCQkJY29uZmxpY3QoJ24nLCBub3B0cywgTl9MT0csCj4gIAkJCQkJCQkg Tl9TSVpFKTsKPiAtCQkJCQlkaXJibG9ja3NpemUgPSBjdnRudW0oCj4gLQkJCQkJCWJsb2Nrc2l6 ZSwgc2VjdG9yc2l6ZSwgdmFsdWUpOwo+ICsJCQkJCWRpcmJsb2Nrc2l6ZSA9IGdldG51bSh2YWx1 ZSwgYmxvY2tzaXplLAo+ICsJCQkJCQkJICAgICAgc2VjdG9yc2l6ZSwgdHJ1ZSk7Cj4gIAkJCQkJ aWYgKGRpcmJsb2Nrc2l6ZSA8PSAwIHx8Cj4gIAkJCQkJICAgICFpc3BvdzIoZGlyYmxvY2tzaXpl KSkKPiAgCQkJCQkJaWxsZWdhbCh2YWx1ZSwgIm4gc2l6ZSIpOwo+IEBAIC0xNzA1LDcgKzE3MjIs NyBAQCBfKCJjYW5ub3Qgc3BlY2lmeSBib3RoIGNyYyBhbmQgZnR5cGVcbiIpKTsKPiAgCQkJCQkJ LyogQVNDSUkgQ0kgbW9kZSAqLwo+ICAJCQkJCQlzYl9mZWF0Lm5jaSA9IHRydWU7Cj4gIAkJCQkJ fSBlbHNlIHsKPiAtCQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCQljID0gZ2V0bnVtKHZh bHVlLCAwLCAwLCBmYWxzZSk7Cj4gIAkJCQkJCWlmIChjICE9IDIpCj4gIAkJCQkJCQlpbGxlZ2Fs KHZhbHVlLAo+ICAJCQkJCQkJCSJuIHZlcnNpb24iKTsKPiBAQCAtMTcxOCw3ICsxNzM1LDcgQEAg XygiY2Fubm90IHNwZWNpZnkgYm90aCBjcmMgYW5kIGZ0eXBlXG4iKSk7Cj4gIAkJCQkJCXJlcXZh bCgnbicsIG5vcHRzLCBOX0ZUWVBFKTsKPiAgCQkJCQlpZiAobmZ0eXBlKQo+ICAJCQkJCQlyZXNw ZWMoJ24nLCBub3B0cywgTl9GVFlQRSk7Cj4gLQkJCQkJYyA9IGF0b2kodmFsdWUpOwo+ICsJCQkJ CWMgPSBnZXRudW0odmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoYyA8IDAgfHwgYyA+ IDEpCj4gIAkJCQkJCWlsbGVnYWwodmFsdWUsICJuIGZ0eXBlIik7Cj4gIAkJCQkJaWYgKHNiX2Zl YXQuY3Jjc19lbmFibGVkKSB7Cj4gQEAgLTE3NjQsNyArMTc4MSw3IEBAIF8oImNhbm5vdCBzcGVj aWZ5IGJvdGggY3JjIGFuZCBmdHlwZVxuIikpOwo+ICAJCQkJY2FzZSBSX0ZJTEU6Cj4gIAkJCQkJ aWYgKCF2YWx1ZSB8fCAqdmFsdWUgPT0gJ1wwJykKPiAgCQkJCQkJdmFsdWUgPSAiMSI7Cj4gLQkJ CQkJeGkucmlzZmlsZSA9IGF0b2kodmFsdWUpOwo+ICsJCQkJCXhpLnJpc2ZpbGUgPSBnZXRudW0o dmFsdWUsIDAsIDAsIGZhbHNlKTsKPiAgCQkJCQlpZiAoeGkucmlzZmlsZSA8IDAgfHwgeGkucmlz ZmlsZSA+IDEpCj4gIAkJCQkJCWlsbGVnYWwodmFsdWUsICJyIGZpbGUiKTsKPiAgCQkJCQlpZiAo eGkucmlzZmlsZSkKPiBAQCAtMTgwOCw3ICsxODI1LDcgQEAgXygiY2Fubm90IHNwZWNpZnkgYm90 aCBjcmMgYW5kIGZ0eXBlXG4iKSk7Cj4gIAkJCQkJaWYgKHNzZmxhZyB8fCBsc3NmbGFnKQo+ICAJ CQkJCQljb25mbGljdCgncycsIHNvcHRzLCBTX1NFQ1RTSVpFLAo+ICAJCQkJCQkJIFNfU0VDVExP Ryk7Cj4gLQkJCQkJc2VjdG9ybG9nID0gYXRvaSh2YWx1ZSk7Cj4gKwkJCQkJc2VjdG9ybG9nID0g Z2V0bnVtKHZhbHVlLCAwLCAwLCBmYWxzZSk7Cj4gIAkJCQkJaWYgKHNlY3RvcmxvZyA8PSAwKQo+ ICAJCQkJCQlpbGxlZ2FsKHZhbHVlLCAicyBzZWN0bG9nIik7Cj4gIAkJCQkJbHNlY3RvcmxvZyA9 IHNlY3RvcmxvZzsKPiBAQCAtMTgyNSw4ICsxODQyLDggQEAgXygiY2Fubm90IHNwZWNpZnkgYm90 aCBjcmMgYW5kIGZ0eXBlXG4iKSk7Cj4gIAkJCQkJaWYgKHNsZmxhZyB8fCBsc2xmbGFnKQo+ICAJ CQkJCQljb25mbGljdCgncycsIHNvcHRzLCBTX1NFQ1RMT0csCj4gIAkJCQkJCQkgU19TRUNUU0la RSk7Cj4gLQkJCQkJc2VjdG9yc2l6ZSA9IGN2dG51bSgKPiAtCQkJCQkJYmxvY2tzaXplLCBzZWN0 b3JzaXplLCB2YWx1ZSk7Cj4gKwkJCQkJc2VjdG9yc2l6ZSA9IGdldG51bSh2YWx1ZSwgYmxvY2tz aXplLAo+ICsJCQkJCQkJICAgIHNlY3RvcnNpemUsIHRydWUpOwo+ICAJCQkJCWlmIChzZWN0b3Jz aXplIDw9IDAgfHwKPiAgCQkJCQkgICAgIWlzcG93MihzZWN0b3JzaXplKSkKPiAgCQkJCQkJaWxs ZWdhbCh2YWx1ZSwgInMgc2VjdHNpemUiKTsKPiBAQCAtMTg4Miw2ICsxODk5LDE1IEBAIF8oIk1p bmltdW0gYmxvY2sgc2l6ZSBmb3IgQ1JDIGVuYWJsZWQgZmlsZXN5c3RlbXMgaXMgJWQgYnl0ZXMu XG4iKSwKPiAgCQl1c2FnZSgpOwo+ICAJfQo+ICAKPiArCWlmICghc2xmbGFnICYmICFzc2ZsYWcp IHsKPiArCQlzZWN0b3Jsb2cgPSBYRlNfTUlOX1NFQ1RPUlNJWkVfTE9HOwo+ICsJCXNlY3RvcnNp emUgPSBYRlNfTUlOX1NFQ1RPUlNJWkU7Cj4gKwl9Cj4gKwlpZiAoIWxzbGZsYWcgJiYgIWxzc2Zs YWcpIHsKPiArCQlsc2VjdG9ybG9nID0gc2VjdG9ybG9nOwo+ICsJCWxzZWN0b3JzaXplID0gc2Vj dG9yc2l6ZTsKPiArCX0KPiArCj4gIAltZW1zZXQoJmZ0LCAwLCBzaXplb2YoZnQpKTsKPiAgCWdl dF90b3BvbG9neSgmeGksICZmdCwgZm9yY2Vfb3ZlcndyaXRlKTsKPiAgCj4gQEAgLTIwNTUsNyAr MjA4MSw5IEBAIF8oIndhcm5pbmc6IHNwYXJzZSBpbm9kZXMgbm90IHN1cHBvcnRlZCB3aXRob3V0 IENSQyBzdXBwb3J0LCBkaXNhYmxlZC5cbiIpKTsKPiAgCWlmIChkc2l6ZSkgewo+ICAJCV9fdWlu dDY0X3QgZGJ5dGVzOwo+ICAKPiAtCQlkYnl0ZXMgPSBjdnRudW0oYmxvY2tzaXplLCBzZWN0b3Jz aXplLCBkc2l6ZSk7Cj4gKwkJZGJ5dGVzID0gZ2V0bnVtKGRzaXplLCBibG9ja3NpemUsIHNlY3Rv cnNpemUsIHRydWUpOwo+ICsJCWlmICgoX19pbnQ2NF90KWRieXRlcyA8IDApCj4gKwkJCWlsbGVn YWwoZHNpemUsICJkIHNpemUiKTsKPiAgCQlpZiAoZGJ5dGVzICUgWEZTX01JTl9CTE9DS1NJWkUp IHsKPiAgCQkJZnByaW50ZihzdGRlcnIsCj4gIAkJCV8oImlsbGVnYWwgZGF0YSBsZW5ndGggJWxs ZCwgbm90IGEgbXVsdGlwbGUgb2YgJWRcbiIpLAo+IEBAIC0yMDkyLDcgKzIxMjAsOSBAQCBfKCJ3 YXJuaW5nOiBzcGFyc2UgaW5vZGVzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDUkMgc3VwcG9ydCwg ZGlzYWJsZWQuXG4iKSk7Cj4gIAlpZiAobG9nc2l6ZSkgewo+ICAJCV9fdWludDY0X3QgbG9nYnl0 ZXM7Cj4gIAo+IC0JCWxvZ2J5dGVzID0gY3Z0bnVtKGJsb2Nrc2l6ZSwgc2VjdG9yc2l6ZSwgbG9n c2l6ZSk7Cj4gKwkJbG9nYnl0ZXMgPSBnZXRudW0obG9nc2l6ZSwgYmxvY2tzaXplLCBzZWN0b3Jz aXplLCB0cnVlKTsKPiArCQlpZiAoKF9faW50NjRfdClsb2dieXRlcyA8IDApCj4gKwkJCWlsbGVn YWwobG9nc2l6ZSwgImwgc2l6ZSIpOwo+ICAJCWlmIChsb2dieXRlcyAlIFhGU19NSU5fQkxPQ0tT SVpFKSB7Cj4gIAkJCWZwcmludGYoc3RkZXJyLAo+ICAJCQlfKCJpbGxlZ2FsIGxvZyBsZW5ndGgg JWxsZCwgbm90IGEgbXVsdGlwbGUgb2YgJWRcbiIpLAo+IEBAIC0yMTE0LDcgKzIxNDQsOSBAQCBf KCJ3YXJuaW5nOiBzcGFyc2UgaW5vZGVzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDUkMgc3VwcG9y dCwgZGlzYWJsZWQuXG4iKSk7Cj4gIAlpZiAocnRzaXplKSB7Cj4gIAkJX191aW50NjRfdCBydGJ5 dGVzOwo+ICAKPiAtCQlydGJ5dGVzID0gY3Z0bnVtKGJsb2Nrc2l6ZSwgc2VjdG9yc2l6ZSwgcnRz aXplKTsKPiArCQlydGJ5dGVzID0gZ2V0bnVtKHJ0c2l6ZSwgYmxvY2tzaXplLCBzZWN0b3JzaXpl LCB0cnVlKTsKPiArCQlpZiAoKF9faW50NjRfdClydGJ5dGVzIDwgMCkKPiArCQkJaWxsZWdhbChy dHNpemUsICJyIHNpemUiKTsKPiAgCQlpZiAocnRieXRlcyAlIFhGU19NSU5fQkxPQ0tTSVpFKSB7 Cj4gIAkJCWZwcmludGYoc3RkZXJyLAo+ICAJCQlfKCJpbGxlZ2FsIHJ0IGxlbmd0aCAlbGxkLCBu b3QgYSBtdWx0aXBsZSBvZiAlZFxuIiksCj4gQEAgLTIxMzQsNyArMjE2Niw5IEBAIF8oIndhcm5p bmc6IHNwYXJzZSBpbm9kZXMgbm90IHN1cHBvcnRlZCB3aXRob3V0IENSQyBzdXBwb3J0LCBkaXNh YmxlZC5cbiIpKTsKPiAgCWlmIChydGV4dHNpemUpIHsKPiAgCQlfX3VpbnQ2NF90IHJ0ZXh0Ynl0 ZXM7Cj4gIAo+IC0JCXJ0ZXh0Ynl0ZXMgPSBjdnRudW0oYmxvY2tzaXplLCBzZWN0b3JzaXplLCBy dGV4dHNpemUpOwo+ICsJCXJ0ZXh0Ynl0ZXMgPSBnZXRudW0ocnRleHRzaXplLCBibG9ja3NpemUs IHNlY3RvcnNpemUsIHRydWUpOwo+ICsJCWlmICgoX19pbnQ2NF90KXJ0ZXh0Ynl0ZXMgPCAwKQo+ ICsJCQlpbGxlZ2FsKHJ0c2l6ZSwgInIgZXh0c2l6ZSIpOwo+ICAJCWlmIChydGV4dGJ5dGVzICUg YmxvY2tzaXplKSB7Cj4gIAkJCWZwcmludGYoc3RkZXJyLAo+ICAJCV8oImlsbGVnYWwgcnQgZXh0 ZW50IHNpemUgJWxsZCwgbm90IGEgbXVsdGlwbGUgb2YgJWRcbiIpLAo+IEBAIC0zMjQwLDI4ICsz Mjc0LDExIEBAIHVua25vd24oCj4gIAl1c2FnZSgpOwo+ICB9Cj4gIAo+IC0vKgo+IC0gKiBpc2Rp Z2l0cyAtLSByZXR1cm5zIDEgaWYgc3RyaW5nIGNvbnRhaW5zIG5vdGhpbmcgYnV0IFswLTldLCAw IG90aGVyd2lzZQo+IC0gKi8KPiAtaW50Cj4gLWlzZGlnaXRzKAo+IC0JY2hhcgkJKnN0cikKPiAt ewo+IC0JaW50CQlpOwo+IC0JaW50CQluID0gc3RybGVuKHN0cik7Cj4gLQo+IC0JZm9yIChpID0g MDsgaSA8IG47IGkrKykgewo+IC0JCWlmICghaXNkaWdpdCgoaW50KXN0cltpXSkpCj4gLQkJCXJl dHVybiAwOwo+IC0JfQo+IC0JcmV0dXJuIDE7Cj4gLX0KPiAtCj4gIGxvbmcgbG9uZwo+ICBjdnRu dW0oCj4gIAl1bnNpZ25lZCBpbnQJYmxvY2tzaXplLAo+ICAJdW5zaWduZWQgaW50CXNlY3RvcnNp emUsCj4gLQljaGFyCQkqcykKPiArCWNvbnN0IGNoYXIJKnMpCj4gIHsKPiAgCWxvbmcgbG9uZwlp Owo+ICAJY2hhcgkJKnNwOwo+IEBAIC0zMjcyLDE3ICszMjg5LDExIEBAIGN2dG51bSgKPiAgCWlm ICgqc3AgPT0gJ1wwJykKPiAgCQlyZXR1cm4gaTsKPiAgCj4gLQlpZiAoKnNwID09ICdiJyAmJiBz cFsxXSA9PSAnXDAnKSB7Cj4gLQkJaWYgKGJsb2Nrc2l6ZSkKPiAtCQkJcmV0dXJuIGkgKiBibG9j a3NpemU7Cj4gLQkJZnByaW50ZihzdGRlcnIsIF8oImJsb2Nrc2l6ZSBub3QgYXZhaWxhYmxlIHll dC5cbiIpKTsKPiAtCQl1c2FnZSgpOwo+IC0JfQo+IC0JaWYgKCpzcCA9PSAncycgJiYgc3BbMV0g PT0gJ1wwJykgewo+IC0JCWlmIChzZWN0b3JzaXplKQo+IC0JCQlyZXR1cm4gaSAqIHNlY3RvcnNp emU7Cj4gLQkJcmV0dXJuIGkgKiBCQlNJWkU7Cj4gLQl9Cj4gKwlpZiAoKnNwID09ICdiJyAmJiBz cFsxXSA9PSAnXDAnKQo+ICsJCXJldHVybiBpICogYmxvY2tzaXplOwo+ICsJaWYgKCpzcCA9PSAn cycgJiYgc3BbMV0gPT0gJ1wwJykKPiArCQlyZXR1cm4gaSAqIHNlY3RvcnNpemU7Cj4gKwo+ICAJ aWYgKCpzcCA9PSAnaycgJiYgc3BbMV0gPT0gJ1wwJykKPiAgCQlyZXR1cm4gMTAyNExMICogaTsK PiAgCWlmICgqc3AgPT0gJ20nICYmIHNwWzFdID09ICdcMCcpCj4gLS0gCj4gMi4xLjAKPiAKPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IHhmcyBtYWls aW5nIGxpc3QKPiB4ZnNAb3NzLnNnaS5jb20KPiBodHRwOi8vb3NzLnNnaS5jb20vbWFpbG1hbi9s aXN0aW5mby94ZnMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCnhmcyBtYWlsaW5nIGxpc3QKeGZzQG9zcy5zZ2kuY29tCmh0dHA6Ly9vc3Muc2dpLmNvbS9t YWlsbWFuL2xpc3RpbmZvL3hmcwo=