From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D2F1A3E; Mon, 14 Feb 2022 19:26:39 +0000 (UTC) Received: by mail-ej1-f43.google.com with SMTP id p14so15320929ejf.11; Mon, 14 Feb 2022 11:26:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wqUSZ1SFW0NVtpHilGjkTlF5P0e9ASySJ2SjHGW0nSw=; b=YIAQ1zoMH5dWivilhSnkKSw0ctqFeyghOXilT5ojvzNBk2EnLfoQon/bgeqsc8Km3W 6jHN8k5Qeo7Fx15/trIUSKneHxu3rvCGNVAeQq65RusjDPnbBoETVPHcwtFvTIrA9oTL W/1oHNmeG3qOagVgIrpPbpoOncfvapoLBbkUkYCbaV0AjaEoQ2WM90rJFgzIDkubPIXN CY0rrLYo/vUGTjnHCd4JqzoYCfeLnKJHI13nGfqtGcEMuhWlSsv4iatlUtvk4K0c1cD0 BGzncRcWz/ZswZJ/H44Qfmhwy+7Vzhh9X9USEhblozjd6Z3Z9SQFikB/rS/bIqZX4gPU N0qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wqUSZ1SFW0NVtpHilGjkTlF5P0e9ASySJ2SjHGW0nSw=; b=HK5u+dvoSPkT6ku0T+W4BPJNe5OGM51HVNBFFxuFZguIOFo7WnvuTN+aG+9tiduUhw 9zc5C/3L40Sj2gvdfht73bSdLCnGSpns9svMEPEVSG+m/jf+FneVmZTaLPazd7PiapgQ RpD6LspWVb3huoT5uhwMwUZOweKJm5/KlVR3/0Y0oEbMzRBz479wojiS7FsjJGu7+hPT /Xf6CYiGsX2GWLXe4SlcioqJXtvW7pnWwQfi7XqmNz6Jn6kCsLFuXEjIrN5ix1PNhd9G yWKNsHaYIosK/9cjh/eHK2rlyXrcxjr/IN8cJNNZ4huwPGS3tDUG2qY+cAUjL+2NPE6+ nn1w== X-Gm-Message-State: AOAM532VSo/VVyG8KdTHwQQy6cZQbl4Sfd+8StTWxSgWFPRSuADvl0LW yqvchmUSkK8/6XbsH45Ouug= X-Google-Smtp-Source: ABdhPJwYjRppPFpB8UmNIkcxwOS9n2u16iELvDzGqpJ83lEytB+M9F4emEDKG8XNnA9Ps3JOsWEvHg== X-Received: by 2002:a17:907:c15:: with SMTP id ga21mr263554ejc.80.1644866797427; Mon, 14 Feb 2022 11:26:37 -0800 (PST) Received: from kista.localnet (cpe-86-58-32-107.static.triera.net. [86.58.32.107]) by smtp.gmail.com with ESMTPSA id 17sm2683352eja.57.2022.02.14.11.26.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 11:26:36 -0800 (PST) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, hverkuil-cisco@xs4all.nl, jonas@kwiboo.se, nicolas@ndufresne.ca, Benjamin Gaignard Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, kernel@collabora.com, Alex Bee , jc@kynesim.co.uk Subject: Re: Re: [RFC] media: uapi: Move HEVC stateless controls out of staging Date: Mon, 14 Feb 2022 20:26:34 +0100 Message-ID: <2302767.NG923GbCHz@kista> In-Reply-To: <903ca214-9576-33aa-8412-7c71c9d8ac09@collabora.com> References: <20220201123439.353854-1-benjamin.gaignard@collabora.com> <8038233.T7Z3S40VBb@kista> <903ca214-9576-33aa-8412-7c71c9d8ac09@collabora.com> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Dne ponedeljek, 14. februar 2022 ob 18:25:01 CET je Benjamin Gaignard=20 napisal(a): >=20 > Le 13/02/2022 =C3=A0 12:33, Jernej =C5=A0krabec a =C3=A9crit : > > Hi Benjamin, > > > > CC: Alex, John > > > > Sorry for late response, but I've been very busy last week. > > > > First of all, thank you for doing this! It's about time that HEVC moves > > forward. > > > > Dne torek, 01. februar 2022 ob 13:34:39 CET je Benjamin Gaignard=20 napisal(a): > >> The HEVC stateless 'uAPI' was staging and marked explicitly in the > >> V4L2 specification that it will change and is unstable. > >> > >> Note that these control IDs were never exported as a public API, > >> they were only defined in kernel-local headers (hevc-ctrls.h). > >> > >> While moving the controls out of staging they are renamed and > >> control IDs get new numbers. > >> Drivers (Hantro, Cedrus) and Documentation are updated accordaly. > > accordaly -> accordingly > > > >> Additional structures fields has been added for RKVDEC driver usage. > > You should do separate patch for that, preceding this one. One patch=20 should > > only do one thing. >=20 > I will do that in v2 >=20 > > > > I also suggest that you add additional patch for removing bit_size fiel= d in > > struct v4l2_ctrl_hevc_slice_params. Similar fields were already removed= =20 from > > MPEG2 and H264 structures. Bit size can be deduced from output buffer s= ize=20 and > > it doesn't hurt if bit size in Cedrus is set to bigger value than actua= l=20 slice > > bit size. >=20 > ok >=20 > > > >> Hantro dedicated control is moving to hantro-media.h > >> Since hevc-ctrls.h content has been dispatched in others file, remove = it. > >> > >> fluster tests results on IMX8MQ is 77/147 for HEVC codec. > >> > >> Signed-off-by: Benjamin Gaignard > > Note that Cedrus still needs additional information in order to decode= =20 some > > HEVC videos. Missing info is num_entry_point_offsets and list of all > > entry_point_offset_minus1 (obviously, num_entry_point_offsets in size). > > > > I suggest that this is represented in a new control, which would use=20 dynamic > > array feature, written by Hans. While Cedrus supports max. 256 entries,= it=20 can > > be much bigger in theory, but in reality, it's much smaller (like 4-8 > > entries). >=20 > I haven't seen yet any user for these fields but I will create a new cont= rol=20 like > #define V4L2_CID_STATELESS_HEVC_ENTRY_POINT (V4L2_CID_CODEC_STATELESS_BAS= E +=20 407) >=20 > struct v4l2_ctrl_hevc_entry_point_offset { > __u32 entry_point_offset_minus1; > }; Yeah, Cedrus is currently the only mainline driver that needs that in order= to=20 fully work. I think John used num_entry_point_offsets in his (out of tree) = RPi=20 HEVC decoding driver too. Wouldn't be easier to just use u32 directly? This is just array of numbers,= so=20 nothing else will be added in that struct... Anyway, once you add this, I'll quickly update driver to take advantage of = it. >=20 > and add it in the documentation: > ``V4L2_CID_STATELESS_HEVC_ENTRY_POINT (struct)`` > Specifies the i-th entry point offset in bytes and is represented by > offset_len_minus1 plus 1 bits. > This control is a dynamically sized array. The number of entry point > offsets is reported by the ``elems`` field. > This bitstream parameter is defined according to :ref:`hevc`. > They are described in section 7.4.7.1 "General slice segment header > semantics" of the specification. >=20 > > > > Last but not least, data_bit_offset should be better defined. Currently= it > > points right after last header bit, just like Cedrus needs it. However,= =20 there > > is padding after that, at least 1 bit and 8 bits at most, so slice data= =20 always > > starts from byte aligned address. It probably make sense to rework that= =20 field > > to be byte offset, not bit, just like in VA-API. Note that RPi HEVC dri= ver=20 also > > uses byte aligned address directly. Cedrus would need some kind of=20 workaround > > and only one that works is this one: > > https://github.com/bootlin/libva-v4l2-request/blob/master/src/h265.c#L1= 91-L209 >=20 > If Cedrus driver is happy with this definition I will keep it like that. > When providing offset in bit is more accurate and any driver can align th= e=20 value > if needed, the reverse (byte -> bit) isn't possible. If I'm not mistaken, HEVC standard actually requires that slice data starts= at=20 byte aligned address, so nothing would be lost for correctness of uAPI. I already had this discussion with John and IIRC conclusion was to have byt= e=20 aligned value here. John, can you please confirm if my interpretation is=20 correct? Best regards, Jernej >=20 > Regards, > Benjamin >=20 > > > > Best regards, > > Jernej > > > > >=20 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 C844BC433F5 for ; Mon, 14 Feb 2022 19:27:53 +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: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zMxPQlKbcfS2Gr8xg/7lu8LOePqjn869wCANNjT7rXA=; b=qBjc6Rx/35thmi maYyCTyhCmXH8uBQErYnbS5a4T7UyfW0u7qbVbzUVOKRaxHLy/3jAl1ir1Xwj9t2GRdbxfeK8AC5D IDuHfGCKXl7E0FjABpJTMpemzrPvFccMiJtOO2SmMVPTdXzP8P5iy7Z0aWRnN0jTrPcUKR78U85+N LFaKtprum8Vi7MY3aIQk5eGf87R8AkhT42zXu8NbQVSo+Ta+UO6AKwj2UDgvZ+2VGvHssAD983EKL qIlhspFn0Vmrqloqd5rwC0LG/2x7JOqLex7DW893Kz5Y/CUa6gfg4LcZfRbDWj3Z3Vc6etmayJGXc TKQWw0sOUtzKB1KVVTMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nJgzk-00Ghxg-8D; Mon, 14 Feb 2022 19:26:44 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nJgzg-00Ghwa-4D for linux-arm-kernel@lists.infradead.org; Mon, 14 Feb 2022 19:26:41 +0000 Received: by mail-ej1-x62c.google.com with SMTP id lw4so8758958ejb.12 for ; Mon, 14 Feb 2022 11:26:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wqUSZ1SFW0NVtpHilGjkTlF5P0e9ASySJ2SjHGW0nSw=; b=YIAQ1zoMH5dWivilhSnkKSw0ctqFeyghOXilT5ojvzNBk2EnLfoQon/bgeqsc8Km3W 6jHN8k5Qeo7Fx15/trIUSKneHxu3rvCGNVAeQq65RusjDPnbBoETVPHcwtFvTIrA9oTL W/1oHNmeG3qOagVgIrpPbpoOncfvapoLBbkUkYCbaV0AjaEoQ2WM90rJFgzIDkubPIXN CY0rrLYo/vUGTjnHCd4JqzoYCfeLnKJHI13nGfqtGcEMuhWlSsv4iatlUtvk4K0c1cD0 BGzncRcWz/ZswZJ/H44Qfmhwy+7Vzhh9X9USEhblozjd6Z3Z9SQFikB/rS/bIqZX4gPU N0qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wqUSZ1SFW0NVtpHilGjkTlF5P0e9ASySJ2SjHGW0nSw=; b=pDYKF7pvqMAahqJg8mMlw8zlkSSxmGPN6Rm92arQYquBIRFkh1YksZODVBU7iu3DyP cbwREQtA9rocBfM7yDhCq+8uJxJk4jG/BK5+huki2mRQgoEctimoOP6gUSqy+74CZpJ5 k9wSAjrgWosJj3phatWZURhwJIVZ0vJ3LNgPvEbKakANEINmt3r4afXtUjJYWGpkNFLb VRoiOeN08Oa9pB8Vg33oVBeU/RAKz3Q2BWAwYY8S1DSwenPO/3osqGLub7r2fuW43gmE aB+HvF9BAdYUbCnAXs2/zHbL4zebvUOXa6wuHC2YllrsLRpO4roTZcCdFNEJEUsHTeDB 9pWg== X-Gm-Message-State: AOAM531n768mH+jcpOq2mXTLveg0c2+XxtW0eyYVhamXSNgqmYS1r9cD Hg/Hb/zUudDjELRPc0DWuRQ= X-Google-Smtp-Source: ABdhPJwYjRppPFpB8UmNIkcxwOS9n2u16iELvDzGqpJ83lEytB+M9F4emEDKG8XNnA9Ps3JOsWEvHg== X-Received: by 2002:a17:907:c15:: with SMTP id ga21mr263554ejc.80.1644866797427; Mon, 14 Feb 2022 11:26:37 -0800 (PST) Received: from kista.localnet (cpe-86-58-32-107.static.triera.net. [86.58.32.107]) by smtp.gmail.com with ESMTPSA id 17sm2683352eja.57.2022.02.14.11.26.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 11:26:36 -0800 (PST) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, hverkuil-cisco@xs4all.nl, jonas@kwiboo.se, nicolas@ndufresne.ca, Benjamin Gaignard Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, kernel@collabora.com, Alex Bee , jc@kynesim.co.uk Subject: Re: Re: [RFC] media: uapi: Move HEVC stateless controls out of staging Date: Mon, 14 Feb 2022 20:26:34 +0100 Message-ID: <2302767.NG923GbCHz@kista> In-Reply-To: <903ca214-9576-33aa-8412-7c71c9d8ac09@collabora.com> References: <20220201123439.353854-1-benjamin.gaignard@collabora.com> <8038233.T7Z3S40VBb@kista> <903ca214-9576-33aa-8412-7c71c9d8ac09@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220214_112640_195627_29111774 X-CRM114-Status: GOOD ( 37.79 ) 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 RG5lIHBvbmVkZWxqZWssIDE0LiBmZWJydWFyIDIwMjIgb2IgMTg6MjU6MDEgQ0VUIGplIEJlbmph bWluIEdhaWduYXJkIApuYXBpc2FsKGEpOgo+IAo+IExlIDEzLzAyLzIwMjIgw6AgMTI6MzMsIEpl cm5laiDFoGtyYWJlYyBhIMOpY3JpdCA6Cj4gPiBIaSBCZW5qYW1pbiwKPiA+Cj4gPiBDQzogQWxl eCwgSm9obgo+ID4KPiA+IFNvcnJ5IGZvciBsYXRlIHJlc3BvbnNlLCBidXQgSSd2ZSBiZWVuIHZl cnkgYnVzeSBsYXN0IHdlZWsuCj4gPgo+ID4gRmlyc3Qgb2YgYWxsLCB0aGFuayB5b3UgZm9yIGRv aW5nIHRoaXMhIEl0J3MgYWJvdXQgdGltZSB0aGF0IEhFVkMgbW92ZXMKPiA+IGZvcndhcmQuCj4g Pgo+ID4gRG5lIHRvcmVrLCAwMS4gZmVicnVhciAyMDIyIG9iIDEzOjM0OjM5IENFVCBqZSBCZW5q YW1pbiBHYWlnbmFyZCAKbmFwaXNhbChhKToKPiA+PiBUaGUgSEVWQyBzdGF0ZWxlc3MgJ3VBUEkn IHdhcyBzdGFnaW5nIGFuZCBtYXJrZWQgZXhwbGljaXRseSBpbiB0aGUKPiA+PiBWNEwyIHNwZWNp ZmljYXRpb24gdGhhdCBpdCB3aWxsIGNoYW5nZSBhbmQgaXMgdW5zdGFibGUuCj4gPj4KPiA+PiBO b3RlIHRoYXQgdGhlc2UgY29udHJvbCBJRHMgd2VyZSBuZXZlciBleHBvcnRlZCBhcyBhIHB1Ymxp YyBBUEksCj4gPj4gdGhleSB3ZXJlIG9ubHkgZGVmaW5lZCBpbiBrZXJuZWwtbG9jYWwgaGVhZGVy cyAoaGV2Yy1jdHJscy5oKS4KPiA+Pgo+ID4+IFdoaWxlIG1vdmluZyB0aGUgY29udHJvbHMgb3V0 IG9mIHN0YWdpbmcgdGhleSBhcmUgcmVuYW1lZCBhbmQKPiA+PiBjb250cm9sIElEcyBnZXQgbmV3 IG51bWJlcnMuCj4gPj4gRHJpdmVycyAoSGFudHJvLCBDZWRydXMpIGFuZCBEb2N1bWVudGF0aW9u IGFyZSB1cGRhdGVkIGFjY29yZGFseS4KPiA+IGFjY29yZGFseSAtPiBhY2NvcmRpbmdseQo+ID4K PiA+PiBBZGRpdGlvbmFsIHN0cnVjdHVyZXMgZmllbGRzIGhhcyBiZWVuIGFkZGVkIGZvciBSS1ZE RUMgZHJpdmVyIHVzYWdlLgo+ID4gWW91IHNob3VsZCBkbyBzZXBhcmF0ZSBwYXRjaCBmb3IgdGhh dCwgcHJlY2VkaW5nIHRoaXMgb25lLiBPbmUgcGF0Y2ggCnNob3VsZAo+ID4gb25seSBkbyBvbmUg dGhpbmcuCj4gCj4gSSB3aWxsIGRvIHRoYXQgaW4gdjIKPiAKPiA+Cj4gPiBJIGFsc28gc3VnZ2Vz dCB0aGF0IHlvdSBhZGQgYWRkaXRpb25hbCBwYXRjaCBmb3IgcmVtb3ZpbmcgYml0X3NpemUgZmll bGQgaW4KPiA+IHN0cnVjdCB2NGwyX2N0cmxfaGV2Y19zbGljZV9wYXJhbXMuIFNpbWlsYXIgZmll bGRzIHdlcmUgYWxyZWFkeSByZW1vdmVkIApmcm9tCj4gPiBNUEVHMiBhbmQgSDI2NCBzdHJ1Y3R1 cmVzLiBCaXQgc2l6ZSBjYW4gYmUgZGVkdWNlZCBmcm9tIG91dHB1dCBidWZmZXIgc2l6ZSAKYW5k Cj4gPiBpdCBkb2Vzbid0IGh1cnQgaWYgYml0IHNpemUgaW4gQ2VkcnVzIGlzIHNldCB0byBiaWdn ZXIgdmFsdWUgdGhhbiBhY3R1YWwgCnNsaWNlCj4gPiBiaXQgc2l6ZS4KPiAKPiBvawo+IAo+ID4K PiA+PiBIYW50cm8gZGVkaWNhdGVkIGNvbnRyb2wgaXMgbW92aW5nIHRvIGhhbnRyby1tZWRpYS5o Cj4gPj4gU2luY2UgaGV2Yy1jdHJscy5oIGNvbnRlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZCBpbiBv dGhlcnMgZmlsZSwgcmVtb3ZlIGl0Lgo+ID4+Cj4gPj4gZmx1c3RlciB0ZXN0cyByZXN1bHRzIG9u IElNWDhNUSBpcyA3Ny8xNDcgZm9yIEhFVkMgY29kZWMuCj4gPj4KPiA+PiBTaWduZWQtb2ZmLWJ5 OiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPiA+ IE5vdGUgdGhhdCBDZWRydXMgc3RpbGwgbmVlZHMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiBv cmRlciB0byBkZWNvZGUgCnNvbWUKPiA+IEhFVkMgdmlkZW9zLiBNaXNzaW5nIGluZm8gaXMgbnVt X2VudHJ5X3BvaW50X29mZnNldHMgYW5kIGxpc3Qgb2YgYWxsCj4gPiBlbnRyeV9wb2ludF9vZmZz ZXRfbWludXMxIChvYnZpb3VzbHksIG51bV9lbnRyeV9wb2ludF9vZmZzZXRzIGluIHNpemUpLgo+ ID4KPiA+IEkgc3VnZ2VzdCB0aGF0IHRoaXMgaXMgcmVwcmVzZW50ZWQgaW4gYSBuZXcgY29udHJv bCwgd2hpY2ggd291bGQgdXNlIApkeW5hbWljCj4gPiBhcnJheSBmZWF0dXJlLCB3cml0dGVuIGJ5 IEhhbnMuIFdoaWxlIENlZHJ1cyBzdXBwb3J0cyBtYXguIDI1NiBlbnRyaWVzLCBpdCAKY2FuCj4g PiBiZSBtdWNoIGJpZ2dlciBpbiB0aGVvcnksIGJ1dCBpbiByZWFsaXR5LCBpdCdzIG11Y2ggc21h bGxlciAobGlrZSA0LTgKPiA+IGVudHJpZXMpLgo+IAo+IEkgaGF2ZW4ndCBzZWVuIHlldCBhbnkg dXNlciBmb3IgdGhlc2UgZmllbGRzIGJ1dCBJIHdpbGwgY3JlYXRlIGEgbmV3IGNvbnRyb2wgCmxp a2UKPiAjZGVmaW5lIFY0TDJfQ0lEX1NUQVRFTEVTU19IRVZDX0VOVFJZX1BPSU5UCShWNEwyX0NJ RF9DT0RFQ19TVEFURUxFU1NfQkFTRSArIAo0MDcpCj4gCj4gc3RydWN0IHY0bDJfY3RybF9oZXZj X2VudHJ5X3BvaW50X29mZnNldCB7Cj4gCV9fdTMyCWVudHJ5X3BvaW50X29mZnNldF9taW51czE7 Cj4gfTsKClllYWgsIENlZHJ1cyBpcyBjdXJyZW50bHkgdGhlIG9ubHkgbWFpbmxpbmUgZHJpdmVy IHRoYXQgbmVlZHMgdGhhdCBpbiBvcmRlciB0byAKZnVsbHkgd29yay4gSSB0aGluayBKb2huIHVz ZWQgbnVtX2VudHJ5X3BvaW50X29mZnNldHMgaW4gaGlzIChvdXQgb2YgdHJlZSkgUlBpIApIRVZD IGRlY29kaW5nIGRyaXZlciB0b28uCgpXb3VsZG4ndCBiZSBlYXNpZXIgdG8ganVzdCB1c2UgdTMy IGRpcmVjdGx5PyBUaGlzIGlzIGp1c3QgYXJyYXkgb2YgbnVtYmVycywgc28gCm5vdGhpbmcgZWxz ZSB3aWxsIGJlIGFkZGVkIGluIHRoYXQgc3RydWN0Li4uCgpBbnl3YXksIG9uY2UgeW91IGFkZCB0 aGlzLCBJJ2xsIHF1aWNrbHkgdXBkYXRlIGRyaXZlciB0byB0YWtlIGFkdmFudGFnZSBvZiBpdC4K Cj4gCj4gYW5kIGFkZCBpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbjoKPiBgYFY0TDJfQ0lEX1NUQVRF TEVTU19IRVZDX0VOVFJZX1BPSU5UIChzdHJ1Y3QpYGAKPiAgICAgIFNwZWNpZmllcyB0aGUgaS10 aCBlbnRyeSBwb2ludCBvZmZzZXQgaW4gYnl0ZXMgYW5kIGlzIHJlcHJlc2VudGVkIGJ5Cj4gICAg ICBvZmZzZXRfbGVuX21pbnVzMSBwbHVzIDEgYml0cy4KPiAgICAgIFRoaXMgY29udHJvbCBpcyBh IGR5bmFtaWNhbGx5IHNpemVkIGFycmF5LiBUaGUgbnVtYmVyIG9mIGVudHJ5IHBvaW50Cj4gICAg ICBvZmZzZXRzIGlzIHJlcG9ydGVkIGJ5IHRoZSBgYGVsZW1zYGAgZmllbGQuCj4gICAgICBUaGlz IGJpdHN0cmVhbSBwYXJhbWV0ZXIgaXMgZGVmaW5lZCBhY2NvcmRpbmcgdG8gOnJlZjpgaGV2Y2Au Cj4gICAgICBUaGV5IGFyZSBkZXNjcmliZWQgaW4gc2VjdGlvbiA3LjQuNy4xICJHZW5lcmFsIHNs aWNlIHNlZ21lbnQgaGVhZGVyCj4gICAgICBzZW1hbnRpY3MiIG9mIHRoZSBzcGVjaWZpY2F0aW9u Lgo+IAo+ID4KPiA+IExhc3QgYnV0IG5vdCBsZWFzdCwgZGF0YV9iaXRfb2Zmc2V0IHNob3VsZCBi ZSBiZXR0ZXIgZGVmaW5lZC4gQ3VycmVudGx5IGl0Cj4gPiBwb2ludHMgcmlnaHQgYWZ0ZXIgbGFz dCBoZWFkZXIgYml0LCBqdXN0IGxpa2UgQ2VkcnVzIG5lZWRzIGl0LiBIb3dldmVyLCAKdGhlcmUK PiA+IGlzIHBhZGRpbmcgYWZ0ZXIgdGhhdCwgYXQgbGVhc3QgMSBiaXQgYW5kIDggYml0cyBhdCBt b3N0LCBzbyBzbGljZSBkYXRhIAphbHdheXMKPiA+IHN0YXJ0cyBmcm9tIGJ5dGUgYWxpZ25lZCBh ZGRyZXNzLiBJdCBwcm9iYWJseSBtYWtlIHNlbnNlIHRvIHJld29yayB0aGF0IApmaWVsZAo+ID4g dG8gYmUgYnl0ZSBvZmZzZXQsIG5vdCBiaXQsIGp1c3QgbGlrZSBpbiBWQS1BUEkuIE5vdGUgdGhh dCBSUGkgSEVWQyBkcml2ZXIgCmFsc28KPiA+IHVzZXMgYnl0ZSBhbGlnbmVkIGFkZHJlc3MgZGly ZWN0bHkuIENlZHJ1cyB3b3VsZCBuZWVkIHNvbWUga2luZCBvZiAKd29ya2Fyb3VuZAo+ID4gYW5k IG9ubHkgb25lIHRoYXQgd29ya3MgaXMgdGhpcyBvbmU6Cj4gPiBodHRwczovL2dpdGh1Yi5jb20v Ym9vdGxpbi9saWJ2YS12NGwyLXJlcXVlc3QvYmxvYi9tYXN0ZXIvc3JjL2gyNjUuYyNMMTkxLUwy MDkKPiAKPiBJZiBDZWRydXMgZHJpdmVyIGlzIGhhcHB5IHdpdGggdGhpcyBkZWZpbml0aW9uIEkg d2lsbCBrZWVwIGl0IGxpa2UgdGhhdC4KPiBXaGVuIHByb3ZpZGluZyBvZmZzZXQgaW4gYml0IGlz IG1vcmUgYWNjdXJhdGUgYW5kIGFueSBkcml2ZXIgY2FuIGFsaWduIHRoZSAKdmFsdWUKPiBpZiBu ZWVkZWQsIHRoZSByZXZlcnNlIChieXRlIC0+IGJpdCkgaXNuJ3QgcG9zc2libGUuCgpJZiBJJ20g bm90IG1pc3Rha2VuLCBIRVZDIHN0YW5kYXJkIGFjdHVhbGx5IHJlcXVpcmVzIHRoYXQgc2xpY2Ug ZGF0YSBzdGFydHMgYXQgCmJ5dGUgYWxpZ25lZCBhZGRyZXNzLCBzbyBub3RoaW5nIHdvdWxkIGJl IGxvc3QgZm9yIGNvcnJlY3RuZXNzIG9mIHVBUEkuCgpJIGFscmVhZHkgaGFkIHRoaXMgZGlzY3Vz c2lvbiB3aXRoIEpvaG4gYW5kIElJUkMgY29uY2x1c2lvbiB3YXMgdG8gaGF2ZSBieXRlIAphbGln bmVkIHZhbHVlIGhlcmUuIEpvaG4sIGNhbiB5b3UgcGxlYXNlIGNvbmZpcm0gaWYgbXkgaW50ZXJw cmV0YXRpb24gaXMgCmNvcnJlY3Q/CgpCZXN0IHJlZ2FyZHMsCkplcm5lagoKPiAKPiBSZWdhcmRz LAo+IEJlbmphbWluCj4gCj4gPgo+ID4gQmVzdCByZWdhcmRzLAo+ID4gSmVybmVqCj4gPgo+ID4K PiAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=