From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v3 1/6] drm/modes: Rewrite the command line parser Date: Thu, 18 Apr 2019 18:11:44 +0200 Message-ID: <2d07dee0-2907-c6bb-31b0-eb151bc513bd@tronnes.org> References: <500140e56478f2b91c30ff7389a4444b427b1dfd.1555591281.git-series.maxime.ripard@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 17AF36E16C for ; Thu, 18 Apr 2019 16:11:57 +0000 (UTC) In-Reply-To: <500140e56478f2b91c30ff7389a4444b427b1dfd.1555591281.git-series.maxime.ripard@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard , Maarten Lankhorst , Sean Paul , Daniel Vetter , David Airlie Cc: eben@raspberrypi.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Thomas Petazzoni , Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org CgpEZW4gMTguMDQuMjAxOSAxNC40MSwgc2tyZXYgTWF4aW1lIFJpcGFyZDoKPiBGcm9tOiBNYXhp bWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KPiAKPiBSZXdyaXRl IHRoZSBjb21tYW5kIGxpbmUgcGFyc2VyIGluIG9yZGVyIHRvIGdldCBhd2F5IGZyb20gdGhlIHN0 YXRlIG1hY2hpbmUKPiBwYXJzaW5nIHRoZSB2aWRlbyBtb2RlIGxpbmVzLgo+IAo+IEhvcGVmdWxs eSwgdGhpcyB3aWxsIGFsbG93IHRvIGV4dGVuZCBpdCBtb3JlIGVhc2lseSB0byBzdXBwb3J0IG5h bWVkIG1vZGVzCj4gYW5kIC8gb3IgcHJvcGVydGllcyBzZXQgZGlyZWN0bHkgb24gdGhlIGNvbW1h bmQgbGluZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJk QGZyZWUtZWxlY3Ryb25zLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5j IHwgMzA1ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNo YW5nZWQsIDE5MCBpbnNlcnRpb25zKCspLCAxMTUgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9k ZXMuYwo+IGluZGV4IDU2ZjkyYTBiYmE2Mi4uM2Y4OTE5OGYwODkxIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9k ZXMuYwo+IEBAIC0zMCw2ICszMCw3IEBACj4gICAqIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgY29w eXJpZ2h0IGhvbGRlcihzKSBhbmQgYXV0aG9yKHMpLgo+ICAgKi8KPiAgCj4gKyNpbmNsdWRlIDxs aW51eC9jdHlwZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvbGlzdF9zb3J0Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KPiBAQCAtMTQwNSw2 ICsxNDA2LDEzMSBAQCB2b2lkIGRybV9jb25uZWN0b3JfbGlzdF91cGRhdGUoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3Jf bGlzdF91cGRhdGUpOwo+ICAKPiArc3RhdGljIGludCBkcm1fbW9kZV9wYXJzZV9jbWRsaW5lX2Jw cChjb25zdCBjaGFyICpzdHIsIGNoYXIgKiplbmRfcHRyLAo+ICsJCQkJICAgICAgc3RydWN0IGRy bV9jbWRsaW5lX21vZGUgKm1vZGUpCj4gK3sKPiArCWlmIChzdHJbMF0gIT0gJy0nKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCW1vZGUtPmJwcCA9IHNpbXBsZV9zdHJ0b2woc3RyICsgMSwg ZW5kX3B0ciwgMTApOwoKV2hhdCBoYXBwZW5zIGlmIHRoaXMgaXMgbm90IGEgbnVtYmVyPyBJIGRp ZG4ndCBmaW5kIGEgdGVzdCBmb3IgdGhhdCBpbgp5b3VyIHVuaXQgdGVzdHMuIFRoZSBzYW1lIGdv ZXMgZm9yIF9yZWZyZXNoKCkuCgo+ICsJbW9kZS0+YnBwX3NwZWNpZmllZCA9IHRydWU7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVfcGFyc2VfY21kbGlu ZV9yZWZyZXNoKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVuZF9wdHIsCj4gKwkJCQkJICBzdHJ1 Y3QgZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSkKPiArewo+ICsJaWYgKHN0clswXSAhPSAnQCcpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJbW9kZS0+cmVmcmVzaCA9IHNpbXBsZV9zdHJ0b2wo c3RyICsgMSwgZW5kX3B0ciwgMTApOwo+ICsJbW9kZS0+cmVmcmVzaF9zcGVjaWZpZWQgPSB0cnVl Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9tb2RlX3BhcnNl X2NtZGxpbmVfZXh0cmEoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAo+ICsJCQkJCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQkJc3RydWN0IGRybV9jbWRsaW5lX21v ZGUgKm1vZGUpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7 IGkrKykgewo+ICsJCXN3aXRjaCAoc3RyW2ldKSB7Cj4gKwkJY2FzZSAnaSc6Cj4gKwkJCW1vZGUt PmludGVybGFjZSA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgJ20nOgo+ICsJCQltb2Rl LT5tYXJnaW5zID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnRCc6Cj4gKwkJCWlmICht b2RlLT5mb3JjZSAhPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQpCj4gKwkJCQlyZXR1cm4gLUVJTlZB TDsKPiArCj4gKwkJCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9D T05ORUNUT1JfRFZJSSkgJiYKPiArCQkJICAgIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9 IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQikpCj4gKwkJCQltb2RlLT5mb3JjZSA9IERSTV9GT1JD RV9PTjsKPiArCQkJZWxzZQo+ICsJCQkJbW9kZS0+Zm9yY2UgPSBEUk1fRk9SQ0VfT05fRElHSVRB TDsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnZCc6Cj4gKwkJCWlmIChtb2RlLT5mb3JjZSAhPSBE Uk1fRk9SQ0VfVU5TUEVDSUZJRUQpCj4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkJCW1v ZGUtPmZvcmNlID0gRFJNX0ZPUkNFX09GRjsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnZSc6Cj4g KwkJCWlmIChtb2RlLT5mb3JjZSAhPSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQpCj4gKwkJCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwkJCW1vZGUtPmZvcmNlID0gRFJNX0ZPUkNFX09OOwo+ICsJCQli cmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX21vZGVfcGFyc2VfY21k bGluZV9yZXNfbW9kZShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW5ndGgsCj4gKwkJ CQkJICAgYm9vbCBleHRyYXMsCj4gKwkJCQkJICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPiArCQkJCQkgICBzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSkKPiArewo+ICsJ Ym9vbCByYiA9IGZhbHNlLCBjdnQgPSBmYWxzZTsKPiArCWludCB4cmVzID0gMCwgeXJlcyA9IDA7 Cj4gKwlpbnQgcmVtYWluaW5nLCBpOwo+ICsJY2hhciAqZW5kX3B0cjsKPiArCj4gKwl4cmVzID0g c2ltcGxlX3N0cnRvbChzdHIsICZlbmRfcHRyLCAxMCk7Cj4gKwo+ICsJaWYgKGVuZF9wdHJbMF0g IT0gJ3gnKQoKJ3g2MDAnIGxvb2tzIHRvIGJlIGEgdmFsaWQgcmVzb2x1dGlvbiBoZXJlLCBzbyBJ IHRoaW5rOgoJaWYgKHN0ciA9PSBlbmRfcHRyIHx8IGVuZF9wdHJbMF0gIT0gJ3gnKQoKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCWVuZF9wdHIrKzsKPiArCj4gKwl5cmVzID0gc2ltcGxlX3N0cnRv bChlbmRfcHRyLCAmZW5kX3B0ciwgMTApOwo+ICsKPiArCXJlbWFpbmluZyA9IGxlbmd0aCAtIChl bmRfcHRyIC0gc3RyKTsKPiArCWlmIChyZW1haW5pbmcgPCAwKQo+ICsJCXJldHVybiAtRUlOVkFM OwoKTWF5YmUgc29tZSB1bml0IHRlc3RzOiAnMTAyNHh5JyBhbmQgJzEwMjR4JywgdG8gdmVyaWZ5 IHRoYXQgdGhpcyBkb2VzCmluZGVlZCByZXF1aXJlIGEgbnVtYmVyIGZvciB5cmVzLgoKTm9yYWxm LgoKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcmVtYWluaW5nOyBpKyspIHsKPiArCQlzd2l0Y2gg KGVuZF9wdHJbaV0pIHsKPiArCQljYXNlICdNJzoKPiArCQkJY3Z0ID0gdHJ1ZTsKPiArCQkJYnJl YWs7Cj4gKwkJY2FzZSAnUic6Cj4gKwkJCXJiID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJZGVm YXVsdDoKPiArCQkJLyoKPiArCQkJICogVHJ5IHRvIHBhc3MgdGhhdCB0byBvdXIgZXh0cmFzIHBh cnNpbmcKPiArCQkJICogZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZQo+ICsJ CQkgKiBleHRyYXMgYXJlIGRpcmVjdGx5IGFmdGVyIHRoZSByZXNvbHV0aW9uCj4gKwkJCSAqLwo+ ICsJCQlpZiAoZXh0cmFzKSB7Cj4gKwkJCQlpbnQgcmV0ID0gZHJtX21vZGVfcGFyc2VfY21kbGlu ZV9leHRyYShlbmRfcHRyICsgaSwKPiArCQkJCQkJCQkgICAgICAgMSwKPiArCQkJCQkJCQkgICAg ICAgY29ubmVjdG9yLAo+ICsJCQkJCQkJCSAgICAgICBtb2RlKTsKPiArCQkJCWlmIChyZXQpCj4g KwkJCQkJcmV0dXJuIHJldDsKPiArCQkJfSBlbHNlIHsKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW1vZGUtPnhyZXMgPSB4cmVzOwo+ICsJbW9kZS0+ eXJlcyA9IHlyZXM7Cj4gKwltb2RlLT5jdnQgPSBjdnQ7Cj4gKwltb2RlLT5yYiA9IHJiOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICAvKioKPiAgICogZHJtX21vZGVfcGFyc2VfY29tbWFu ZF9saW5lX2Zvcl9jb25uZWN0b3IgLSBwYXJzZSBjb21tYW5kIGxpbmUgbW9kZWxpbmUgZm9yIGNv bm5lY3Rvcgo+ICAgKiBAbW9kZV9vcHRpb246IG9wdGlvbmFsIHBlciBjb25uZWN0b3IgbW9kZSBv cHRpb24KPiBAQCAtMTQzMSwxMyArMTU1NywxMiBAQCBib29sIGRybV9tb2RlX3BhcnNlX2NvbW1h bmRfbGluZV9mb3JfY29ubmVjdG9yKGNvbnN0IGNoYXIgKm1vZGVfb3B0aW9uLAo+ICAJCQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSkKPiAgewo+ICAJY29uc3QgY2hhciAq bmFtZTsKPiAtCXVuc2lnbmVkIGludCBuYW1lbGVuOwo+IC0JYm9vbCByZXNfc3BlY2lmaWVkID0g ZmFsc2UsIGJwcF9zcGVjaWZpZWQgPSBmYWxzZSwgcmVmcmVzaF9zcGVjaWZpZWQgPSBmYWxzZTsK PiAtCXVuc2lnbmVkIGludCB4cmVzID0gMCwgeXJlcyA9IDAsIGJwcCA9IDMyLCByZWZyZXNoID0g MDsKPiAtCWJvb2wgeXJlc19zcGVjaWZpZWQgPSBmYWxzZSwgY3Z0ID0gZmFsc2UsIHJiID0gZmFs c2U7Cj4gLQlib29sIGludGVybGFjZSA9IGZhbHNlLCBtYXJnaW5zID0gZmFsc2UsIHdhc19kaWdp dCA9IGZhbHNlOwo+IC0JaW50IGk7Cj4gLQllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2Ug PSBEUk1fRk9SQ0VfVU5TUEVDSUZJRUQ7Cj4gKwlib29sIHBhcnNlX2V4dHJhcyA9IGZhbHNlOwo+ ICsJdW5zaWduZWQgaW50IGJwcF9vZmYgPSAwLCByZWZyZXNoX29mZiA9IDA7Cj4gKwl1bnNpZ25l ZCBpbnQgbW9kZV9lbmQgPSAwOwo+ICsJY2hhciAqYnBwX3B0ciA9IE5VTEwsICpyZWZyZXNoX3B0 ciA9IE5VTEwsICpleHRyYV9wdHIgPSBOVUxMOwo+ICsJY2hhciAqYnBwX2VuZF9wdHIgPSBOVUxM LCAqcmVmcmVzaF9lbmRfcHRyID0gTlVMTDsKPiArCWludCByZXQ7Cj4gIAo+ICAjaWZkZWYgQ09O RklHX0ZCCj4gIAlpZiAoIW1vZGVfb3B0aW9uKQo+IEBAIC0xNDUwLDEyNyArMTU3NSw3NyBAQCBi b29sIGRybV9tb2RlX3BhcnNlX2NvbW1hbmRfbGluZV9mb3JfY29ubmVjdG9yKGNvbnN0IGNoYXIg Km1vZGVfb3B0aW9uLAo+ICAJfQo+ICAKPiAgCW5hbWUgPSBtb2RlX29wdGlvbjsKPiAtCW5hbWVs ZW4gPSBzdHJsZW4obmFtZSk7Cj4gLQlmb3IgKGkgPSBuYW1lbGVuLTE7IGkgPj0gMDsgaS0tKSB7 Cj4gLQkJc3dpdGNoIChuYW1lW2ldKSB7Cj4gLQkJY2FzZSAnQCc6Cj4gLQkJCWlmICghcmVmcmVz aF9zcGVjaWZpZWQgJiYgIWJwcF9zcGVjaWZpZWQgJiYKPiAtCQkJICAgICF5cmVzX3NwZWNpZmll ZCAmJiAhY3Z0ICYmICFyYiAmJiB3YXNfZGlnaXQpIHsKPiAtCQkJCXJlZnJlc2ggPSBzaW1wbGVf c3RydG9sKCZuYW1lW2krMV0sIE5VTEwsIDEwKTsKPiAtCQkJCXJlZnJlc2hfc3BlY2lmaWVkID0g dHJ1ZTsKPiAtCQkJCXdhc19kaWdpdCA9IGZhbHNlOwo+IC0JCQl9IGVsc2UKPiAtCQkJCWdvdG8g ZG9uZTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAnLSc6Cj4gLQkJCWlmICghYnBwX3NwZWNpZmll ZCAmJiAheXJlc19zcGVjaWZpZWQgJiYgIWN2dCAmJgo+IC0JCQkgICAgIXJiICYmIHdhc19kaWdp dCkgewo+IC0JCQkJYnBwID0gc2ltcGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7Cj4g LQkJCQlicHBfc3BlY2lmaWVkID0gdHJ1ZTsKPiAtCQkJCXdhc19kaWdpdCA9IGZhbHNlOwo+IC0J CQl9IGVsc2UKPiAtCQkJCWdvdG8gZG9uZTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAneCc6Cj4g LQkJCWlmICgheXJlc19zcGVjaWZpZWQgJiYgd2FzX2RpZ2l0KSB7Cj4gLQkJCQl5cmVzID0gc2lt cGxlX3N0cnRvbCgmbmFtZVtpKzFdLCBOVUxMLCAxMCk7Cj4gLQkJCQl5cmVzX3NwZWNpZmllZCA9 IHRydWU7Cj4gLQkJCQl3YXNfZGlnaXQgPSBmYWxzZTsKPiAtCQkJfSBlbHNlCj4gLQkJCQlnb3Rv IGRvbmU7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJzAnIC4uLiAnOSc6Cj4gLQkJCXdhc19kaWdp dCA9IHRydWU7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJ00nOgo+IC0JCQlpZiAoeXJlc19zcGVj aWZpZWQgfHwgY3Z0IHx8IHdhc19kaWdpdCkKPiAtCQkJCWdvdG8gZG9uZTsKPiAtCQkJY3Z0ID0g dHJ1ZTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAnUic6Cj4gLQkJCWlmICh5cmVzX3NwZWNpZmll ZCB8fCBjdnQgfHwgcmIgfHwgd2FzX2RpZ2l0KQo+IC0JCQkJZ290byBkb25lOwo+IC0JCQlyYiA9 IHRydWU7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJ20nOgo+IC0JCQlpZiAoY3Z0IHx8IHlyZXNf c3BlY2lmaWVkIHx8IHdhc19kaWdpdCkKPiAtCQkJCWdvdG8gZG9uZTsKPiAtCQkJbWFyZ2lucyA9 IHRydWU7Cj4gLQkJCWJyZWFrOwo+IC0JCWNhc2UgJ2knOgo+IC0JCQlpZiAoY3Z0IHx8IHlyZXNf c3BlY2lmaWVkIHx8IHdhc19kaWdpdCkKPiAtCQkJCWdvdG8gZG9uZTsKPiAtCQkJaW50ZXJsYWNl ID0gdHJ1ZTsKPiAtCQkJYnJlYWs7Cj4gLQkJY2FzZSAnZSc6Cj4gLQkJCWlmICh5cmVzX3NwZWNp ZmllZCB8fCBicHBfc3BlY2lmaWVkIHx8IHJlZnJlc2hfc3BlY2lmaWVkIHx8Cj4gLQkJCSAgICB3 YXNfZGlnaXQgfHwgKGZvcmNlICE9IERSTV9GT1JDRV9VTlNQRUNJRklFRCkpCj4gLQkJCQlnb3Rv IGRvbmU7Cj4gIAo+IC0JCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKPiAtCQkJYnJlYWs7Cj4gLQkJ Y2FzZSAnRCc6Cj4gLQkJCWlmICh5cmVzX3NwZWNpZmllZCB8fCBicHBfc3BlY2lmaWVkIHx8IHJl ZnJlc2hfc3BlY2lmaWVkIHx8Cj4gLQkJCSAgICB3YXNfZGlnaXQgfHwgKGZvcmNlICE9IERSTV9G T1JDRV9VTlNQRUNJRklFRCkpCj4gLQkJCQlnb3RvIGRvbmU7Cj4gKwlpZiAoIWlzZGlnaXQobmFt ZVswXSkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICAKPiAtCQkJaWYgKChjb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSAmJgo+IC0JCQkgICAgKGNvbm5l Y3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKPiAtCQkJ CWZvcmNlID0gRFJNX0ZPUkNFX09OOwo+IC0JCQllbHNlCj4gLQkJCQlmb3JjZSA9IERSTV9GT1JD RV9PTl9ESUdJVEFMOwo+IC0JCQlicmVhazsKPiAtCQljYXNlICdkJzoKPiAtCQkJaWYgKHlyZXNf c3BlY2lmaWVkIHx8IGJwcF9zcGVjaWZpZWQgfHwgcmVmcmVzaF9zcGVjaWZpZWQgfHwKPiAtCQkJ ICAgIHdhc19kaWdpdCB8fCAoZm9yY2UgIT0gRFJNX0ZPUkNFX1VOU1BFQ0lGSUVEKSkKPiAtCQkJ CWdvdG8gZG9uZTsKPiArCS8qIFRyeSB0byBsb2NhdGUgdGhlIGJwcCBhbmQgcmVmcmVzaCBzcGVj aWZpZXJzLCBpZiBhbnkgKi8KPiArCWJwcF9wdHIgPSBzdHJjaHIobmFtZSwgJy0nKTsKPiArCWlm IChicHBfcHRyKSB7Cj4gKwkJYnBwX29mZiA9IGJwcF9wdHIgLSBuYW1lOwo+ICsJCW1vZGUtPmJw cF9zcGVjaWZpZWQgPSB0cnVlOwo+ICsJfQo+ICAKPiAtCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT0ZG Owo+IC0JCQlicmVhazsKPiAtCQlkZWZhdWx0Ogo+IC0JCQlnb3RvIGRvbmU7Cj4gLQkJfQo+ICsJ cmVmcmVzaF9wdHIgPSBzdHJjaHIobmFtZSwgJ0AnKTsKPiArCWlmIChyZWZyZXNoX3B0cikgewo+ ICsJCXJlZnJlc2hfb2ZmID0gcmVmcmVzaF9wdHIgLSBuYW1lOwo+ICsJCW1vZGUtPnJlZnJlc2hf c3BlY2lmaWVkID0gdHJ1ZTsKPiAgCX0KPiAgCj4gLQlpZiAoaSA8IDAgJiYgeXJlc19zcGVjaWZp ZWQpIHsKPiAtCQljaGFyICpjaDsKPiAtCQl4cmVzID0gc2ltcGxlX3N0cnRvbChuYW1lLCAmY2gs IDEwKTsKPiAtCQlpZiAoKGNoICE9IE5VTEwpICYmICgqY2ggPT0gJ3gnKSkKPiAtCQkJcmVzX3Nw ZWNpZmllZCA9IHRydWU7Cj4gLQkJZWxzZQo+IC0JCQlpID0gY2ggLSBuYW1lOwo+IC0JfSBlbHNl IGlmICgheXJlc19zcGVjaWZpZWQgJiYgd2FzX2RpZ2l0KSB7Cj4gLQkJLyogY2F0Y2ggbW9kZSB0 aGF0IGJlZ2lucyB3aXRoIGRpZ2l0cyBidXQgaGFzIG5vICd4JyAqLwo+IC0JCWkgPSAwOwo+ICsJ LyogTG9jYXRlIHRoZSBlbmQgb2YgdGhlIG5hbWUgLyByZXNvbHV0aW9uLCBhbmQgcGFyc2UgaXQg Ki8KPiArCWlmIChicHBfcHRyICYmIHJlZnJlc2hfcHRyKSB7Cj4gKwkJbW9kZV9lbmQgPSBtaW4o YnBwX29mZiwgcmVmcmVzaF9vZmYpOwo+ICsJfSBlbHNlIGlmIChicHBfcHRyKSB7Cj4gKwkJbW9k ZV9lbmQgPSBicHBfb2ZmOwo+ICsJfSBlbHNlIGlmIChyZWZyZXNoX3B0cikgewo+ICsJCW1vZGVf ZW5kID0gcmVmcmVzaF9vZmY7Cj4gKwl9IGVsc2Ugewo+ICsJCW1vZGVfZW5kID0gc3RybGVuKG5h bWUpOwo+ICsJCXBhcnNlX2V4dHJhcyA9IHRydWU7Cj4gIAl9Cj4gLWRvbmU6Cj4gLQlpZiAoaSA+ PSAwKSB7Cj4gLQkJcHJfd2FybigiW2RybV0gcGFyc2UgZXJyb3IgYXQgcG9zaXRpb24gJWkgaW4g dmlkZW8gbW9kZSAnJXMnXG4iLAo+IC0JCQlpLCBuYW1lKTsKPiAtCQltb2RlLT5zcGVjaWZpZWQg PSBmYWxzZTsKPiArCj4gKwlyZXQgPSBkcm1fbW9kZV9wYXJzZV9jbWRsaW5lX3Jlc19tb2RlKG5h bWUsIG1vZGVfZW5kLAo+ICsJCQkJCSAgICAgIHBhcnNlX2V4dHJhcywKPiArCQkJCQkgICAgICBj b25uZWN0b3IsCj4gKwkJCQkJICAgICAgbW9kZSk7Cj4gKwlpZiAocmV0KQo+ICAJCXJldHVybiBm YWxzZTsKPiAtCX0KPiArCW1vZGUtPnNwZWNpZmllZCA9IHRydWU7Cj4gIAo+IC0JaWYgKHJlc19z cGVjaWZpZWQpIHsKPiAtCQltb2RlLT5zcGVjaWZpZWQgPSB0cnVlOwo+IC0JCW1vZGUtPnhyZXMg PSB4cmVzOwo+IC0JCW1vZGUtPnlyZXMgPSB5cmVzOwo+ICsJaWYgKGJwcF9wdHIpIHsKPiArCQly ZXQgPSBkcm1fbW9kZV9wYXJzZV9jbWRsaW5lX2JwcChicHBfcHRyLCAmYnBwX2VuZF9wdHIsIG1v ZGUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBmYWxzZTsKPiAgCX0KPiAgCj4gLQlpZiAo cmVmcmVzaF9zcGVjaWZpZWQpIHsKPiAtCQltb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA9IHRydWU7 Cj4gLQkJbW9kZS0+cmVmcmVzaCA9IHJlZnJlc2g7Cj4gKwlpZiAocmVmcmVzaF9wdHIpIHsKPiAr CQlyZXQgPSBkcm1fbW9kZV9wYXJzZV9jbWRsaW5lX3JlZnJlc2gocmVmcmVzaF9wdHIsCj4gKwkJ CQkJCSAgICAgJnJlZnJlc2hfZW5kX3B0ciwgbW9kZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0 dXJuIGZhbHNlOwo+ICAJfQo+ICAKPiAtCWlmIChicHBfc3BlY2lmaWVkKSB7Cj4gLQkJbW9kZS0+ YnBwX3NwZWNpZmllZCA9IHRydWU7Cj4gLQkJbW9kZS0+YnBwID0gYnBwOwo+ICsJLyoKPiArCSAq IExvY2F0ZSB0aGUgZW5kIG9mIHRoZSBicHAgLyByZWZyZXNoLCBhbmQgcGFyc2UgdGhlIGV4dHJh cwo+ICsJICogaWYgcmVsZXZhbnQKPiArCSAqLwo+ICsJaWYgKGJwcF9wdHIgJiYgcmVmcmVzaF9w dHIpCj4gKwkJZXh0cmFfcHRyID0gbWF4KGJwcF9lbmRfcHRyLCByZWZyZXNoX2VuZF9wdHIpOwo+ ICsJZWxzZSBpZiAoYnBwX3B0cikKPiArCQlleHRyYV9wdHIgPSBicHBfZW5kX3B0cjsKPiArCWVs c2UgaWYgKHJlZnJlc2hfcHRyKQo+ICsJCWV4dHJhX3B0ciA9IHJlZnJlc2hfZW5kX3B0cjsKPiAr Cj4gKwlpZiAoZXh0cmFfcHRyKSB7Cj4gKwkJaW50IHJlbWFpbmluZyA9IHN0cmxlbihuYW1lKSAt IChleHRyYV9wdHIgLSBuYW1lKTsKPiArCj4gKwkJLyoKPiArCQkgKiBXZSBzdGlsbCBoYXZlIGNo YXJhY3RlcnMgdG8gcHJvY2Vzcywgd2hpbGUKPiArCQkgKiB3ZSBzaG91bGRuJ3QgaGF2ZSBhbnkK PiArCQkgKi8KPiArCQlpZiAocmVtYWluaW5nID4gMCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICAJ fQo+IC0JbW9kZS0+cmIgPSByYjsKPiAtCW1vZGUtPmN2dCA9IGN2dDsKPiAtCW1vZGUtPmludGVy bGFjZSA9IGludGVybGFjZTsKPiAtCW1vZGUtPm1hcmdpbnMgPSBtYXJnaW5zOwo+IC0JbW9kZS0+ Zm9yY2UgPSBmb3JjZTsKPiAgCj4gIAlyZXR1cm4gdHJ1ZTsKPiAgfQo+IApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=