From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6B152E7F143 for ; Tue, 26 Sep 2023 23:30:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7TsGLVsmDAYRCzHzD8gW5cX6sM2H943ANp5ryFlG4kQ=; b=u96O0iduhW19gK iUSa+RVYowazF1wetnhRqyutgDTxszIAfMaR7WPzQ4I6I270Bz3Knih90pgmaW4PNUbM7piavEdfN RZIgGOMA4MVCjs1QortwObDASLP3L30WRQINvAyzFQQuMGEBs3Lkjiwgmt/xbW7EU6US7JfMgWjZ/ hkhiWz60K+C+H7Zg9W6XiPN8a0JseHYa5Hq9IYoL7u1ER1MBKqz1uT26HlWW45nwTnLEeZb7e2qyR Tm829tHCYC2tiKN7re3P8Bkn9OwEcai9chzcqf/WDVxEYKZMK4UcVnGxkEgVjGKWjtdopEEN8/4sK Ng/knBA+lX8vC7jHqF7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qlHVF-00HB5N-2c; Tue, 26 Sep 2023 23:30:05 +0000 Received: from madras.collabora.co.uk ([46.235.227.172]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qlHVA-00HB4A-1h for linux-arm-kernel@lists.infradead.org; Tue, 26 Sep 2023 23:30:04 +0000 Received: from nicolas-tpx395.localdomain (unknown [45.84.211.191]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: nicolas) by madras.collabora.co.uk (Postfix) with ESMTPSA id 17FCD660731C; Wed, 27 Sep 2023 00:29:54 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1695770995; bh=KvkFiRPKdGvQj6Wwi6VvHejV7MQfknC6iOfkSZ6pmlE=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=LfBmxNENe/eR4pJ9lyOCjRMq+x7WuYXFbiKxTml38dPsrQMEqFaRtzEgGD1s5IhSH zXbf9W95YsRig7QHa2BGwVCKm76pJRZn1BGfSejxlwDB4dmUgTWObJtzTXPFL6t4ZW Trm8y9COhly+XRF/Vc4As0ZwgChdRFKOQ4gY2y3d/6a/5bCQzGIilz1kTK+a8t5NnY 0+QmMv9WdcnPWk81BQ4afIn377rIlDTcbQWAL/ORHTd8y3zdNGYmM7dEK7GOtcc606 Q9gzulHTxZfnOq+zD4suirgrC8DKRoWgU9ZCmEsidiCG1OSvWYQGydEnJNJ/+p4jw3 7wi79sNdbBYJw== Message-ID: <330a177320fd766af8eddb76f57ea728b2e36afe.camel@collabora.com> Subject: Re: [PATCH v12 5/7] media: chips-media: wave5: Add the v4l2 layer From: Nicolas Dufresne To: Hans Verkuil , Sebastian Fricke , Mauro Carvalho Chehab , Nas Chung , Sascha Hauer , Fabio Estevam , Rob Herring , Shawn Guo , Philipp Zabel , Jackson Lee , Krzysztof Kozlowski , NXP Linux Team , Conor Dooley , Pengutronix Kernel Team , Benjamin Gaignard Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Robert Beckett , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@collabora.com Date: Wed, 27 Sep 2023 01:29:44 +0200 In-Reply-To: <6ae8a639-b9f5-4426-be49-5340a8b8b5e9@xs4all.nl> References: <20230915-wave5_v12_on_media_master-v12-0-92fc66cd685d@collabora.com> <20230915-wave5_v12_on_media_master-v12-5-92fc66cd685d@collabora.com> <7b159731dfbc2ab8243396eaec8f41be10af5160.camel@collabora.com> <6ae8a639-b9f5-4426-be49-5340a8b8b5e9@xs4all.nl> User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230926_163000_879505_273BFEA6 X-CRM114-Status: GOOD ( 61.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org TGUgdmVuZHJlZGkgMjIgc2VwdGVtYnJlIDIwMjMgw6AgMDk6MzMgKzAyMDAsIEhhbnMgVmVya3Vp bCBhIMOpY3JpdMKgOgo+IE9uIDIxLzA5LzIwMjMgMjE6MTEsIE5pY29sYXMgRHVmcmVzbmUgd3Jv dGU6Cj4gPiBMZSBtZXJjcmVkaSAyMCBzZXB0ZW1icmUgMjAyMyDDoCAxNzoxMyArMDIwMCwgSGFu cyBWZXJrdWlsIGEgw6ljcml0wqA6Cj4gPiA+IE9uIDE1LzA5LzIwMjMgMjM6MTEsIFNlYmFzdGlh biBGcmlja2Ugd3JvdGU6Cj4gPiA+ID4gRnJvbTogTmFzIENodW5nIDxuYXMuY2h1bmdAY2hpcHNu bWVkaWEuY29tPgo+ID4gPiA+IAo+ID4gPiA+IEFkZCB0aGUgZGVjb2RlciBhbmQgZW5jb2RlciBp bXBsZW1lbnRpbmcgdGhlIHY0bDIKPiA+ID4gPiBBUEkuIFRoaXMgcGF0Y2ggYWxzbyBhZGRzIHRo ZSBNYWtlZmlsZSBhbmQgdGhlIFZJREVPX1dBVkVfVlBVIGNvbmZpZwo+ID4gPiA+IAo+ID4gPiA+ IFNpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBGcmlja2UgPHNlYmFzdGlhbi5mcmlja2VAY29sbGFi b3JhLmNvbT4KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFz LmR1ZnJlc25lQGNvbGxhYm9yYS5jb20+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJl Y2tldHQgPGJvYi5iZWNrZXR0QGNvbGxhYm9yYS5jb20+Cj4gPiA+ID4gU2lnbmVkLW9mZi1ieTog RGFmbmEgSGlyc2NoZmVsZCA8ZGFmbmEuaGlyc2NoZmVsZEBjb2xsYWJvcmEuY29tPgo+ID4gPiA+ IFNpZ25lZC1vZmYtYnk6IE5hcyBDaHVuZyA8bmFzLmNodW5nQGNoaXBzbm1lZGlhLmNvbT4KPiA+ ID4gPiAtLS0KPiA+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS9LY29u ZmlnICAgICAgICAgfCAgICAxICsKPiA+ID4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlw cy1tZWRpYS9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKPiA+ID4gPiAgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9jaGlwcy1tZWRpYS93YXZlNS9LY29uZmlnICAgfCAgIDEyICsKPiA+ID4gPiAgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS93YXZlNS9NYWtlZmlsZSAgfCAgIDEwICsK PiA+ID4gPiAgLi4uL3BsYXRmb3JtL2NoaXBzLW1lZGlhL3dhdmU1L3dhdmU1LWhlbHBlci5jICAg ICAgfCAgMTk2ICsrCj4gPiA+ID4gIC4uLi9wbGF0Zm9ybS9jaGlwcy1tZWRpYS93YXZlNS93YXZl NS1oZWxwZXIuaCAgICAgIHwgICAzMCArCj4gPiA+ID4gIC4uLi9wbGF0Zm9ybS9jaGlwcy1tZWRp YS93YXZlNS93YXZlNS12cHUtZGVjLmMgICAgIHwgMTk2NSArKysrKysrKysrKysrKysrKysrKwo+ ID4gPiA+ICAuLi4vcGxhdGZvcm0vY2hpcHMtbWVkaWEvd2F2ZTUvd2F2ZTUtdnB1LWVuYy5jICAg ICB8IDE4MjUgKysrKysrKysrKysrKysrKysrCj4gPiA+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9j aGlwcy1tZWRpYS93YXZlNS93YXZlNS12cHUuYyAgIHwgIDMzMSArKysrCj4gPiA+ID4gIC4uLi9t ZWRpYS9wbGF0Zm9ybS9jaGlwcy1tZWRpYS93YXZlNS93YXZlNS12cHUuaCAgIHwgICA4MyArCj4g PiA+ID4gIDEwIGZpbGVzIGNoYW5nZWQsIDQ0NTQgaW5zZXJ0aW9ucygrKQo+ID4gPiA+IAo+IAo+ IDxzbmlwPgo+IAo+ID4gPiA+ICtzdGF0aWMgaW50IHdhdmU1X3ZwdV9kZWNfc2V0X2Vvc19vbl9m aXJtd2FyZShzdHJ1Y3QgdnB1X2luc3RhbmNlICppbnN0KQo+ID4gPiA+ICt7Cj4gPiA+ID4gKwlp bnQgcmV0Owo+ID4gPiA+ICsKPiA+ID4gPiArCXJldCA9IHdhdmU1X3ZwdV9kZWNfdXBkYXRlX2Jp dHN0cmVhbV9idWZmZXIoaW5zdCwgMCk7Cj4gPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ID4gKwkJ ZGV2X2VycihpbnN0LT5kZXYtPmRldiwKPiA+ID4gPiArCQkJIlNldHRpbmcgRU9TIGZvciB0aGUg Yml0c3RyZWFtLCBmYWlsOiAlZFxuIiwgcmV0KTsKPiA+ID4gCj4gPiA+IElzIHRoaXMgYW4gZXJy b3IgZHVlIHRvIGEgZHJpdmVyIHByb2JsZW0sIG9yIGJlY2F1c2UgYSBiYWQgYml0c3RyZWFtIGlz Cj4gPiA+IGZlZCBmcm9tIHVzZXJzcGFjZT8gSW4gdGhlIGZpcnN0IGNhc2UsIGRldl9lcnIgd291 bGQgYmUgcmlnaHQsIGluIHRoZQo+ID4gPiBzZWNvbmQgZGV2X2RiZyB3b3VsZCBiZSBtb3JlIGFw cHJvcHJpYXRlLiBCYWQgdXNlcnNwYWNlIGlucHV0IHNob3VsZCBub3QKPiA+ID4gc3BhbSB0aGUg a2VybmVsIGxvZyBpbiBnZW5lcmFsLgo+ID4gCj4gPiBJdHMgdGhlIGZpcnN0LiBUbyBzZXQgdGhl IEVPUyBmbGFnLCBhIGNvbW1hbmQgaXMgc2VudCB0byB0aGUgZmlybXdhcmUuIFRoYXQKPiA+IGNv bW1hbmQgbWF5IG5ldmVyIHJldHVybiAodGltZW91dCkgb3IgbWF5IHJlcG9ydCBhbiBlcnJvci4g Rm9yIHRoaXMgc3BlY2lmaWMKPiA+IGNvbW1hbmQsIGlmIHRoYXQgaGFwcGVucyB3ZSBhcmUgbGlr ZWx5IGZhY2luZyBmaXJtd2FyZSBvZiBkcml2ZXIgcHJvYmxlbSAob3IKPiA+IGJvdGgpLgo+IAo+ IE9LLCBJJ2QgYWRkIHRoYXQgYXMgYSBjb21tZW50IGhlcmUgYXMgdGhpcyBpcyB1bmV4cGVjdGVk IGJlaGF2aW9yLgo+IAo+ID4gCj4gPiA+IAo+ID4gPiA+ICsJCXJldHVybiByZXQ7Cj4gPiA+ID4g Kwl9Cj4gPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gPiArfQo+IAo+IDxzbmlwPgo+IAo+ID4gPiA+ ICtzdGF0aWMgaW50IHdhdmU1X3ZwdV9kZWNfY3JlYXRlX2J1ZnMoc3RydWN0IGZpbGUgKmZpbGUs IHZvaWQgKnByaXYsCj4gPiA+ID4gKwkJCQkgICAgIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJz ICpjcmVhdGUpCj4gPiA+ID4gK3sKPiA+ID4gPiArCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9ICZj cmVhdGUtPmZvcm1hdDsKPiA+ID4gPiArCj4gPiA+ID4gKwlpZiAoZi0+dHlwZSA9PSBWNEwyX0JV Rl9UWVBFX1ZJREVPX0NBUFRVUkUpCj4gPiA+ID4gKwkJcmV0dXJuIC1FTk9UVFk7Cj4gPiA+IAo+ ID4gPiBIdWg/IFdoeSBpcyB0aGlzIG5lZWRlZD8KPiA+IAo+ID4gTWluaW1hbGx5IGEgY29tbWVu dCBzaG91bGQgYmUgYWRkZWQuIFRoZSB3aHkgaXMgdGhhdCB3ZSBzdXBwb3J0IENSRUFURV9CVUYg Zm9yCj4gPiBPVVRQVVQgcXVldWUgKGJpdHN0cmVhbSkgYnV0IG5vdCBmb3IgQ0FQVFVSRSBxdWV1 ZXMuIFRoaXMgaXMgc2ltcGx5IG5vdAo+ID4gc3VwcG9ydGVkIGJ5IFdhdmU1IGZpcm13YXJlLiBE byB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbiBob3cgdGhpcyBhc3ltbWV0cnkgY2FuCj4gPiBiZSBp bXBsZW1lbnRlZCBiZXR0ZXIgPwo+IAo+IENlcnRhaW5seSBub3Qgd2l0aCBFTk9UVFk6IHRoZSBp b2N0bCBleGlzdHMsIGl0IGlzIGp1c3Qgbm90IHN1cHBvcnRlZCBmb3IKPiBDQVBUVVJFIHF1ZXVl cy4KPiAKPiBIb3cgYWJvdXQgLUVQRVJNPyBBbmQgZG9jdW1lbnQgdGhpcyBlcnJvciBhcyB3ZWxs IGluIHRoZSBWSURJT0NfQ1JFQVRFX0JVRlMKPiBkb2N1bWVudGF0aW9uLiBBbmQgeW91IHdhbnQg YSBkZXZfZGJnIGhlcmUgdG9vLgoKVGhlIHN1Z2dlc3Rpb24gY2Fubm90IGJlIHVzZWQgc2luY2Ug dGhlcmUgaXMgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBvbmUgYWxyZWFkeSwKYW5kIGl0IGRvZXMg bm90IG1hdGNoICJ1bnN1cHBvcnRlZCIuCgoiUGVybWlzc2lvbiBkZW5pZWQuIENhbiBiZSByZXR1 cm5lZCBpZiB0aGUgZGV2aWNlIG5lZWRzIHdyaXRlIHBlcm1pc3Npb24sIG9yCnNvbWUgc3BlY2lh bCBjYXBhYmlsaXRpZXMgaXMgbmVlZGVkIChlLiBnLiByb290KSIKCldoYXQgYWJvdXQgdXNpbmcg dGhlIG1vc3QgbG9naWNhbCBlcnJvciBjb2RlLCB3aGljaCBuYW1lIGlzIGFjdHVhbGx5IG9idmlv dXMsCmxpa2UgRU5PVFNVUCA/CgogICAjZGVmaW5lIEVOT1RTVVBQCTUyNAkvKiBPcGVyYXRpb24g aXMgbm90IHN1cHBvcnRlZCAqLwoKPiAKPiBTbyBJIHdvdWxkIHByb3Bvc2UgdGhhdCBFUEVSTSBp cyByZXR1cm5lZCBpZiBDUkVBVEVfQlVGUyBpcyBvbmx5IHN1cHBvcnRlZAo+IGZvciBmb3Igb25l IG9mIHRoZSB0d28gcXVldWVzIG9mIGFuIE0yTSBkZXZpY2UuCgpOb3RlIHRoYXQgdXNlcnNwYWNl IGRvZXMgbm90IGNhcmUgb2YgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBpb2N0bCBub3QgYmVp bmcKaW1wbGVtZW50ZWQgYXQgYWxsIG9yIG5vdCBiZWluZyBpbXBsZW1lbnQgZm9yIG9uZSBxdWV1 ZS4gR1N0cmVhbWVyIGhhdmUgYmVlbgp0ZXN0aW5nIHdpdGggYm90aCBxdWV1ZSB0eXBlIGZvciBj b3VwbGUgb2YgeWVhcnMgbm93LiBBZGRpbmcgdGhpcyBkaXN0aW5jdGlvbiBpcwpqdXN0IGxlYWtp bmcgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byB1c2Vyc3BhY2UuIEknbSBmaW5lIHRvIGp1 c3QgZG8gd2hhdAp5b3UnZCBsaWtlLCBqdXN0IHN0YXRpbmcgdGhlIG9idmlvdXMgdGhhdCB3aGls ZSBpdCBtYXkgbG9vayBsb2dpY2FsIGluc2lkZSB0aGUKa2VybmVsLCBpdHMgYSBiaXQgb2YgYSBu b24tc2Vuc2UgZm9yIG91ciB1c2Vycy4KCnJlZ2FyZHMsCk5pY29sYXMKCj4gCj4gPiAKPiA+ID4g Cj4gPiA+ID4gKwo+ID4gPiA+ICsJcmV0dXJuIHY0bDJfbTJtX2lvY3RsX2NyZWF0ZV9idWZzKGZp bGUsIHByaXYsIGNyZWF0ZSk7Cj4gPiA+ID4gK30KPiAKPiA8c25pcD4KPiAKPiA+ID4gPiArc3Rh dGljIGludCB3YXZlNV92cHVfZGVjX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVu c2lnbmVkIGludCAqbnVtX2J1ZmZlcnMsCj4gPiA+ID4gKwkJCQkgICAgIHVuc2lnbmVkIGludCAq bnVtX3BsYW5lcywgdW5zaWduZWQgaW50IHNpemVzW10sCj4gPiA+ID4gKwkJCQkgICAgIHN0cnVj dCBkZXZpY2UgKmFsbG9jX2RldnNbXSkKPiA+ID4gPiArewo+ID4gPiA+ICsJc3RydWN0IHZwdV9p bnN0YW5jZSAqaW5zdCA9IHZiMl9nZXRfZHJ2X3ByaXYocSk7Cj4gPiA+ID4gKwlzdHJ1Y3QgdjRs Ml9waXhfZm9ybWF0X21wbGFuZSBpbnN0X2Zvcm1hdCA9Cj4gPiA+ID4gKwkJKHEtPnR5cGUgPT0g VjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKSA/IGluc3QtPnNyY19mbXQgOiBpbnN0 LT5kc3RfZm10Owo+ID4gPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ ZGV2X2RiZyhpbnN0LT5kZXYtPmRldiwgIiVzOiBudW1fYnVmZmVyczogJXUgfCBudW1fcGxhbmVz OiAldSB8IHR5cGU6ICV1XG4iLCBfX2Z1bmNfXywKPiA+ID4gPiArCQkqbnVtX2J1ZmZlcnMsICpu dW1fcGxhbmVzLCBxLT50eXBlKTsKPiA+ID4gPiArCj4gPiA+ID4gKwkvKiB0aGUgQ1JFQVRFX0JV RlMgY2FzZSAqLwo+ID4gPiA+ICsJaWYgKCpudW1fcGxhbmVzKSB7Cj4gPiA+ID4gKwkJaWYgKGlu c3RfZm9ybWF0Lm51bV9wbGFuZXMgIT0gKm51bV9wbGFuZXMpCj4gPiA+ID4gKwkJCXJldHVybiAt RUlOVkFMOwo+ID4gPiA+ICsKPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpIDwgKm51bV9wbGFuZXM7 IGkrKykgewo+ID4gPiA+ICsJCQlpZiAoc2l6ZXNbaV0gPCBpbnN0X2Zvcm1hdC5wbGFuZV9mbXRb aV0uc2l6ZWltYWdlKQo+ID4gPiA+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gKwkJfQo+ ID4gPiA+ICsJLyogdGhlIFJFUUJVRlMgY2FzZSAqLwo+ID4gPiA+ICsJfSBlbHNlIHsKPiA+ID4g PiArCQkqbnVtX3BsYW5lcyA9IGluc3RfZm9ybWF0Lm51bV9wbGFuZXM7Cj4gPiA+ID4gKwo+ID4g PiA+ICsJCWlmIChxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSkg ewo+ID4gPiA+ICsJCQlzaXplc1swXSA9IGluc3RfZm9ybWF0LnBsYW5lX2ZtdFswXS5zaXplaW1h Z2U7Cj4gPiA+ID4gKwkJCWRldl9kYmcoaW5zdC0+ZGV2LT5kZXYsICIlczogc2l6ZVswXTogJXVc biIsIF9fZnVuY19fLCBzaXplc1swXSk7Cj4gPiA+ID4gKwkJfSBlbHNlIGlmICgqbnVtX3BsYW5l cyA9PSAxKSB7Cj4gPiA+ID4gKwkJCWlmIChpbnN0LT5vdXRwdXRfZm9ybWF0ID09IEZPUk1BVF80 MjIpCj4gPiA+ID4gKwkJCQlzaXplc1swXSA9IGluc3RfZm9ybWF0LndpZHRoICogaW5zdF9mb3Jt YXQuaGVpZ2h0ICogMjsKPiA+ID4gPiArCQkJZWxzZQo+ID4gPiA+ICsJCQkJc2l6ZXNbMF0gPSBp bnN0X2Zvcm1hdC53aWR0aCAqIGluc3RfZm9ybWF0LmhlaWdodCAqIDMgLyAyOwo+ID4gPiA+ICsJ CQlkZXZfZGJnKGluc3QtPmRldi0+ZGV2LCAiJXM6IHNpemVbMF06ICV1XG4iLCBfX2Z1bmNfXywg c2l6ZXNbMF0pOwo+ID4gPiA+ICsJCX0gZWxzZSBpZiAoKm51bV9wbGFuZXMgPT0gMikgewo+ID4g PiA+ICsJCQlzaXplc1swXSA9IGluc3RfZm9ybWF0LndpZHRoICogaW5zdF9mb3JtYXQuaGVpZ2h0 Owo+ID4gPiA+ICsJCQlpZiAoaW5zdC0+b3V0cHV0X2Zvcm1hdCA9PSBGT1JNQVRfNDIyKQo+ID4g PiA+ICsJCQkJc2l6ZXNbMV0gPSBpbnN0X2Zvcm1hdC53aWR0aCAqIGluc3RfZm9ybWF0LmhlaWdo dDsKPiA+ID4gPiArCQkJZWxzZQo+ID4gPiA+ICsJCQkJc2l6ZXNbMV0gPSBpbnN0X2Zvcm1hdC53 aWR0aCAqIGluc3RfZm9ybWF0LmhlaWdodCAvIDI7Cj4gPiA+ID4gKwkJCWRldl9kYmcoaW5zdC0+ ZGV2LT5kZXYsICIlczogc2l6ZVswXTogJXUgfCBzaXplWzFdOiAldVxuIiwKPiA+ID4gPiArCQkJ CV9fZnVuY19fLCBzaXplc1swXSwgc2l6ZXNbMV0pOwo+ID4gPiA+ICsJCX0gZWxzZSBpZiAoKm51 bV9wbGFuZXMgPT0gMykgewo+ID4gPiA+ICsJCQlzaXplc1swXSA9IGluc3RfZm9ybWF0LndpZHRo ICogaW5zdF9mb3JtYXQuaGVpZ2h0Owo+ID4gPiA+ICsJCQlpZiAoaW5zdC0+b3V0cHV0X2Zvcm1h dCA9PSBGT1JNQVRfNDIyKSB7Cj4gPiA+ID4gKwkJCQlzaXplc1sxXSA9IGluc3RfZm9ybWF0Lndp ZHRoICogaW5zdF9mb3JtYXQuaGVpZ2h0IC8gMjsKPiA+ID4gPiArCQkJCXNpemVzWzJdID0gaW5z dF9mb3JtYXQud2lkdGggKiBpbnN0X2Zvcm1hdC5oZWlnaHQgLyAyOwo+ID4gPiA+ICsJCQl9IGVs c2Ugewo+ID4gPiA+ICsJCQkJc2l6ZXNbMV0gPSBpbnN0X2Zvcm1hdC53aWR0aCAqIGluc3RfZm9y bWF0LmhlaWdodCAvIDQ7Cj4gPiA+ID4gKwkJCQlzaXplc1syXSA9IGluc3RfZm9ybWF0LndpZHRo ICogaW5zdF9mb3JtYXQuaGVpZ2h0IC8gNDsKPiA+ID4gPiArCQkJfQo+ID4gPiA+ICsJCQlkZXZf ZGJnKGluc3QtPmRldi0+ZGV2LCAiJXM6IHNpemVbMF06ICV1IHwgc2l6ZVsxXTogJXUgfCBzaXpl WzJdOiAldVxuIiwKPiA+ID4gPiArCQkJCV9fZnVuY19fLCBzaXplc1swXSwgc2l6ZXNbMV0sIHNp emVzWzJdKTsKPiA+ID4gPiArCQl9Cj4gPiA+ID4gKwl9Cj4gPiA+ID4gKwo+ID4gPiA+ICsJaWYg KGluc3QtPnN0YXRlID09IFZQVV9JTlNUX1NUQVRFX0lOSVRfU0VRICYmCj4gPiA+ID4gKwkgICAg cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKSB7Cj4gPiA+ID4g KwkJaWYgKCpudW1fYnVmZmVycyA+IGluc3QtPmRzdF9idWZfY291bnQgJiYKPiA+ID4gPiArCQkg ICAgKm51bV9idWZmZXJzIDwgV0FWRTVfTUFYX0ZCUykKPiA+ID4gPiArCQkJaW5zdC0+ZHN0X2J1 Zl9jb3VudCA9ICpudW1fYnVmZmVyczsKPiA+ID4gCj4gPiA+IEluIHRoZSBjcmVhdGVfYnVmcyBj YXNlLCAqbnVtX2J1ZmZlcnMgaXMgdGhlIG51bWJlciBvZiBidWZmZXJzIHlvdSBhcmUKPiA+ID4g YWRkaW5nIHRvIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGJ1ZmZlcnMuIEZyYW5rbHksIHRoZSBsb2dp YyBoZXJlIGlzCj4gPiA+IGR1YmlvdXMuIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBpbnRlbnQgaXMu IFdoeSBkbyB5b3UgbmVlZCB0byBrZWVwIHRyYWNrCj4gPiA+IG9mIHRoZSBidWYgY291bnQgYXQg YWxsIHdoZW4gdGhlIHZiMl9xdWV1ZSBhbHJlYWR5IGRvZXMgdGhhdD8KPiA+IAo+ID4gVGhpcyBu ZWVkcyB0byBiZSBjbGVhbmVkIHVwLiBDUkVBVEVfQlVGUyBjYXNlIGlzIG5vdCBzdXBwb3J0ZWQg Zm9yIGNhcHR1cmUsIGFuZAo+ID4gc28gdGhlcmUgaXMgbm8gc3VjaCB3ZWlyZG8gY2FzZSBzZWNv bmQgY2FsbHMgZm9yIHRoYXQgcXVldWUgYXQgbGVhc3QuIE1lYW53aGlsZSwKPiA+IGluc3QtPmRz dF9idWZfY291bnQgaXMgdXNlZCBhIE1JTl9CVUZGRVJTX0ZPUl9DQVBUVVJFIGluaXRpYWxseSwg YW5kIHRoZSBudW1iZXIKPiA+IG9mIGFsbG9jYXRlZCBidWZmZXIgbGF0ZXIuIEkgdGhpbmsgaXQg d291bGQgYmUgYmV0dGVyIHRvIHNpbXBseSBzdG9yZSB0aGUgbWluLAo+ID4gYW5kIHVzZSB0aGUg cXVldWUgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgYnVmZmVycy4KPiA+IAo+ID4g SW4gdGhpcyBkaXZlciwgdGhlIHJlZmVyZW5jZSBmcmFtZSBhcmUgc3RvcmVkIHNlcGFyYXRlbHks IGFuZCBjb21wcmVzc2VkLiBUaGUKPiA+IGNhcHR1cmUgcXVldWUgY29udGFpbnMgdGhlIGRpc3Bs YXkgZnJhbWUuIFRoZXJlIGlzIGEgZ2FwIHdoZW4gY29tZXMgdGltZSB0bwo+ID4gdHJhbnNmZXIg dGltZXN0YW1wLCBhbmQgZm9yIHRoaXMgcmVhc29uIHdlIGhhZCB0byBrZWVwIHRoZSB0d28gZmJj X2NvdW50IGVxdWFsLgo+ID4gV2UgY2xhc3NpZmllZCB0aGlzIGFzIGhhcmR3YXJlIGlzc3VlIGFu ZCBtb3ZlZCBvbi4KPiA+IAo+ID4gSSB0aGluayB0aGUgZHN0X2J1Zl9jb3VudCBjYW4gYmUgZHJv cHBlZCBub3cgYW5kIHRoZSAiKm51bV9idWZmZXJzID4gaW5zdC0KPiA+ID4gZHN0X2J1Zl9jb3Vu dCIgbm90IGxvbmdlciBtYWtlIGFueSBzZW5zZS4KPiA+IAo+ID4gPiAKPiA+ID4gV0FWRTVfTUFY X0ZCUyA9PSAzMiwgd2hpY2ggaXMgVklERU9fTUFYX0ZSQU1FUy4gWW91IGNhbiBqdXN0IGRyb3Ag dGhlIGNoZWNrCj4gPiA+IGFnYWluc3QgV0FWRTVfTUFYX0ZCUyBzaW5jZSB0aGUgY29yZSBlbnN1 cmVzIGFscmVhZHkgaXQgd2lsbCBuZXZlciBhbGxvY2F0ZQo+ID4gPiBtb3JlIHRoYW4gVklERU9f TUFYX0ZSQU1FUy4KPiA+ID4gCj4gPiA+IEknbSBub3Qgc3VyZSB3aHkgV0FWRTVfTUFYX0ZCUyBp cyBkZWZpbmVkIGF0IGFsbCwgd2hlbiBpdCBpcyBqdXN0IGVxdWFsIHRvCj4gPiA+IFZJREVPX01B WF9GUkFNRVMuIFBlcmhhcHMgaXQgY2FuIGJlIHJlcGxhY2VkIGV2ZXJ5d2hlcmUgd2l0aCBWSURF T19NQVhfRlJBTUVTPwo+ID4gCj4gPiBUaGF0IGlzIG1vcmUgY2hhbGxlbmdpbmcgY2hhbmdlcywg c2luY2UgVklERU9fTUFYX0ZSQU1FUyBpcyBhIHNvZnR3YXJlCj4gPiBsaW1pdGF0aW9uLCBidXQg V0FWRTVfTUFYX0ZCUyBpcyBhIGhhcmR3YXJlIGxpbWl0YXRpb24uIEJ1ZmZlciBpbmRleCBvbmx5 IGhhdmUgNAo+ID4gYml0cyBvbiB0aGlzIGhhcmR3YXJlLiBBbmQgdGhlIG1hcmtpbmcgb2YgZnJh bWUgYmVpbmcgdXNlZCBmb3IgZGlzcGxheSBpcyB1c2luZwo+ID4gYSAzMmJpdCBmbGFnLiBDb25z aWRlcmluZyB0aGVyZSBpcyBlZmZvcnQgdG8gbGlmdCB0aGF0IHNvZnR3YXJlIGxpbWl0YXRpb24s IGl0Cj4gPiBzZWVtcyBpbGwgYWR2aXNlZCB0byBjb21wbGV0ZWx5IHN0b3AgZW5zdXJpbmcgdGhp cyBIVyBsaW1pdCBpcyByZXNwZWN0ZWQuCj4gCj4gSWYgdGhlcmUgYXJlIG9ubHkgNCBiaXRzIGZv ciB0aGUgYnVmZmVyIGluZGV4LCBzaG91bGRuJ3QgV0FWRTVfTUFYX0ZCUyBiZSAxNj8gT3IKPiBk aWQgeW91IG1lYW4gJzUgYml0cyc/IEFzc3VtaW5nIHRoYXQgeW91IG1lYW50ICc1IGJpdHMnLCB0 aGVuIHRoYXQgbWFrZXMKPiBXQVZFNV9NQVhfRkJTIGlkZW50aWNhbCB0byBWSURFT19NQVhfRlJB TUVTLCBidXQgdGhhdCBpcyBqdXN0IGx1Y2ssIHJlYWxseS4KPiAKPiBJbiBhbnkgY2FzZSwgeW91 IHNob3VsZCBkb2N1bWVudCBhdCB0aGUgcGxhY2Ugd2hlcmUgV0FWRTVfTUFYX0ZCUyBpcyBkZWZp bmVkIHRoYXQKPiB0aGlzIGlzIGEgaGFyZHdhcmUgbGltaXRhdGlvbiwgYW5kIG5vdCBhIHJhbmRv bSBzb2Z0d2FyZSBsaW1pdC4KPiAKPiBJIGFsc28gdGhpbmsgdGhhdCB0aGUgREVMRVRFX0JVRlMg c2VyaWVzIHNob3VsZCBhbGxvdyBkcml2ZXJzIHRvIHNldCBtYXhfbnVtX2J1ZmZlcnMKPiB0byBh IHZhbHVlIGxlc3MgdGhhbiAzMiAoY3VycmVudGx5IHRoZSByZXF1aXJlbWVudCBpcyB0aGF0IGl0 IGlzIGF0IGxlYXN0IDMyKS4KPiAKPiBJIHNhdyBhIGZldyBtb3JlIGRyaXZlcnMgdGhhdCBsaW1p dCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMsIHVzdWFsbHkgYmFzZWQgb24gdGhlCj4gZm9ybWF0IChh bmQgc28gdGhlIGJ1ZmZlciBzaXplKSBhbmQgc29tZSBIVyBtZW1vcnkgbGltaXRhdGlvbi4gSXQg bWlnaHQgYmUgaW50ZXJlc3RpbmcKPiB0byBhbGxvdyBkcml2ZXJzIHRvIGNoYW5nZSBtYXhfbnVt X2J1ZmZlcnMgb24gdGhlIGZseSAocHJvdmlkZWQgbm8gYnVmZmVycyBhcmUKPiBhbGxvY2F0ZWQs IG9mIGNvdXJzZSkuIExpbWl0IGNoZWNraW5nIGlzIHJlYWxseSBzb21ldGhpbmcgdGhhdCB2YjIg c2hvdWxkIGRvLCBhbmQKPiBub3QgdGhlIGRyaXZlci4KPiAKPiA+IAo+ID4gSSdtIG9wZW4gZm9y IHN1Z2dlc3Rpb25zLgo+ID4gCj4gPiA+IAo+ID4gPiA+ICsKPiA+ID4gPiArCQkqbnVtX2J1ZmZl cnMgPSBpbnN0LT5kc3RfYnVmX2NvdW50Owo+ID4gPiA+ICsJfQo+ID4gPiA+ICsKPiA+ID4gPiAr CXJldHVybiAwOwo+ID4gPiA+ICt9Cj4gCj4gUmVnYXJkcywKPiAKPiAJSGFucwoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK