From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1322817D1; Tue, 1 Mar 2022 10:36:24 +0000 (UTC) Received: from [IPV6:2a01:e0a:120:3210:b77d:712d:f725:41b3] (unknown [IPv6:2a01:e0a:120:3210:b77d:712d:f725:41b3]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id E2ABA1F44332; Tue, 1 Mar 2022 10:36:16 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1646130977; bh=X6YktsVu7FdBgPhu9qFKuminbFyWDXyYaI65mzEEF9s=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=f6RW5QpzWm5aYdPSbPgRh5G4W0Iy/BFCYPiRSSp/ezONLr5d7mvdwoaynWHXsrvIn 5fqetasbxlaisfNDB13U3oKHEqJekf6+wlvMgAHxi1BPLtswYG7rhu0EqGYuhnuZvF C079H/eYqFNV4ghxAfFoLdJIXvxQcq40ewHVtzlrXB31IDsz+j1GLr9pVH42GE8//j dfL6rBxtgC/sZ0TewOv8iPoGtzX/28Wh371yNPOWCNhbsvvYrYH1SziIc58yWwMosN aGZ+OrHcf2jA+Hl4uhAdAX8m5EFb11xcYMyrkjhxmfRXE7anQWNwQKaG4X7cnTdj92 od/mPyKP13LxA== Message-ID: Date: Tue, 1 Mar 2022 11:36:13 +0100 Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls Content-Language: en-US To: Sebastian Fricke Cc: mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@gmail.com, jonas@kwiboo.se, nicolas@ndufresne.ca, 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, knaerzche@gmail.com, jc@kynesim.co.uk References: <20220228140838.622021-1-benjamin.gaignard@collabora.com> <20220228140838.622021-5-benjamin.gaignard@collabora.com> <20220228165757.sjqxdxb3toxkcasl@basti-XPS-13-9310> From: Benjamin Gaignard In-Reply-To: <20220228165757.sjqxdxb3toxkcasl@basti-XPS-13-9310> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 28/02/2022 à 17:57, Sebastian Fricke a écrit : > Hey Benjamin, > > On 28.02.2022 15:08, Benjamin Gaignard wrote: >> Complete the HEVC controls with missing fields from H.265 >> specifications. >> Even if these fields aren't used by the current mainlined drivers >> they will be need for (at least) rkvdec driver. >> >> Signed-off-by: Benjamin Gaignard >> --- >> .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++ >> include/media/hevc-ctrls.h                    |  6 ++++- >> 2 files changed, 27 insertions(+), 1 deletion(-) >> >> diff --git >> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> index 4cd7c541fc30..d096cb75993a 100644 >> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> @@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >>     :stub-columns: 0 >>     :widths:       1 1 2 >> >> +    * - __u8 >> +      - ``video_parameter_set_id`` >> +      - Specifies the value of the vps_video_parameter_set_id of the >> active VPS >> +        as descibed in section "7.4.3.2.1 General sequence parameter >> set RBSP semantics" >> +        of H.265 specifications. >> +    * - __u8 >> +      - ``seq_parameter_set_id`` >> +      - Provides an identifier for the SPS for reference by other >> syntax elements >> +        as descibed in section "7.4.3.2.1 General sequence parameter >> set RBSP semantics" >> +        of H.265 specifications. >>     * - __u16 >>       - ``pic_width_in_luma_samples`` >>       - >> @@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >>     :stub-columns: 0 >>     :widths:       1 1 2 >> >> +    * - __u8 >> +      - ``pic_parameter_set_id`` >> +      - Identifies the PPS for reference by other syntax elements. >>     * - __u8 >>       - ``num_extra_slice_header_bits`` >>       - >> @@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >>     * - __u8 >>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` >>       - The list of L1 reference elements as indices in the DPB. >> +    * - __u16 >> +      - ``short_term_ref_pic_set_size`` >> +      - Specifies the number of st_ref_pic_set( ) syntax structures >> included in the SPS. >> +        The value of num_short_term_ref_pic_sets shall be in the >> range of 0 to 64, inclusive. >> +    * - __u16 >> +      - ``long_term_ref_pic_set_size`` >> +      - Specifies the number of candidate long-term reference >> pictures that are specified >> +        in the SPS. The value of num_long_term_ref_pics_sps shall be >> in the range >> +        of 0 to 32, inclusive. >>     * - __u8 > > I would like to argue that the names for these fields are not optimal. > > The are quite similar to the ones from the specification: > `num_short_term_ref_pic_sets` & `num_long_term_ref_pics_sps`, while > they actually do something different. (Which means that descriptions for > the fields are sadly incorrect as well) > > Looking at the code from the H265 parser in GStreamer: > ``` >       READ_UINT8 (&nr, slice->short_term_ref_pic_set_sps_flag, 1); >       if (!slice->short_term_ref_pic_set_sps_flag) { >         guint pos = nal_reader_get_pos (&nr); >         if (!gst_h265_parser_parse_short_term_ref_pic_sets >             (&slice->short_term_ref_pic_sets, &nr, >                 sps->num_short_term_ref_pic_sets, sps)) >           goto error; > >         slice->short_term_ref_pic_set_size = nal_reader_get_pos (&nr) > - pos; > ``` > > We can see that the `short_term_ref_pic_set_size` is calculated by > gettting the difference between the nal_reader position before calling > `gst_h265_parser_parse_short_term_ref_pic_sets` and the position of the > nal reader afterwards. > The variable `num_short_term_ref_pic_sets` is used as part of the short > term reference picture set parsing process, but it is not directly > related to `short_term_ref_pic_set_size` (otherwise a direct > transformation of `num_short_term_ref_pic_sets` -> > `short_term_ref_pic_set_size` would have been way easier) > > Further when I look at a patch from Alex Bee for RKVDEC that uses these > fields (actually the only user) > (https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch#L3007) > I can see that he describes them as bit offsets. > > So, to avoid confusion, I would argue that we should rename these > (They are not part of the specification anyway) > > s/short_term_ref_pic_set_size/short_term_ref_pic_set_bit_offset/ > s/long_term_ref_pic_set_size/long_term_ref_pic_set_bit_offset/ > > These names describe the purpose and the content a bit better and avoid > confusion with existing values. > > Additonally, I noticed that calculating the bit offset for the long term > is a bit tricky. I wasn't able to find a direct reference in > 'non-vendor' code. > > The process for parsing the short term reference picture set is > depicted with a lot of detail in > the specification, but I wasn't able to find the something equivalent > for the long term > reference picture set. > > Having a switft look into mpp, I can see at: > https://github.com/JeffyCN/rockchip_mirrors/blob/mpp/mpp/hal/rkdec/h265d/hal_h265d_com.c#L512 > > > That they do roughly the same short term is simply the read bits by the > BitReader - the read bits before the operation on the short term > reference picture set. (so very similar to what the h265 parser does in > GStreamer) > The bit offset for long term is equal to short term unless the > `long_term_ref_pics_present_flag` is set. In which case, we perform some > operations on the long term reference picture set and add the amount of > used bits to the bit offset. I think the names are correct, these fields provides the size of short and long term ref picture. It isn't an offset as you explain your self it is the diff between end and start of reference picture in the bitstream. The documentation is incorrect, I will fix it in the next version like this: * @short_term_ref_pic_set_size: specifies the size of short-term reference * pictures included in the SPS * @long_term_ref_pic_set_size: specifies the size of long-term reference * picture include in the SPS Thanks, Benjamin > > Greetings, > Sebastian > >>       - ``padding`` >>       - Applications and drivers must set this to zero. >> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h >> index 01ccda48d8c5..a329e086a89a 100644 >> --- a/include/media/hevc-ctrls.h >> +++ b/include/media/hevc-ctrls.h >> @@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code { >> /* The controls are not stable at the moment and will likely be >> reworked. */ >> struct v4l2_ctrl_hevc_sps { >>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */ >> +    __u8    video_parameter_set_id; >> +    __u8    seq_parameter_set_id; >>     __u16    pic_width_in_luma_samples; >>     __u16    pic_height_in_luma_samples; >>     __u8    bit_depth_luma_minus8; >> @@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps { >> >> struct v4l2_ctrl_hevc_pps { >>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */ >> +    __u8    pic_parameter_set_id; >>     __u8    num_extra_slice_header_bits; >>     __u8    num_ref_idx_l0_default_active_minus1; >>     __u8    num_ref_idx_l1_default_active_minus1; >> @@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params { >>     __u32    slice_segment_addr; >>     __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; >>     __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; >> - >> +    __u16    short_term_ref_pic_set_size; >> +    __u16    long_term_ref_pic_set_size; >>     __u8    padding; >> >>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction >> parameter */ >> -- >> 2.32.0 >> > 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 9A882C433EF for ; Tue, 1 Mar 2022 10:37:32 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=hiMoUI3qn+eOn41ywCnJGCYUECNUqfUrolh9iIGOv4g=; b=hDf9KBHiaRpJiH 4WWnHF5MR2Gq/DUQkm1UPH+F30INCuDafTl2oGRB6yl1I4Hcw/RVQ37CDvpAxzmQNOIjjOpbo+A7i H1mA5oYUDtJ16HVFjPEFSytVS2cI8FychR5rR/w3jtTaKrziETp6Xl9XDB7mQIISVc1UAQX/jXwwf x23Cyv6stlyscJissEuLqVDdYlfcYrDvomJAiCEXaP8LrJanwfwnv5ZuqRNcrHPGz+Tmz4/fQBpPS 2phAOWdwBp0v9UNrY60921zIPmZgk9oTLL+mCzB5gPRCDdJar/gv7O+XVtmf/wXpbciy12iHH4H27 4+s2wcI48bzKFYlNi1WA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nOzrl-00G9XM-FC; Tue, 01 Mar 2022 10:36:25 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nOzrg-00G9VK-PJ for linux-arm-kernel@lists.infradead.org; Tue, 01 Mar 2022 10:36:23 +0000 Received: from [IPV6:2a01:e0a:120:3210:b77d:712d:f725:41b3] (unknown [IPv6:2a01:e0a:120:3210:b77d:712d:f725:41b3]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id E2ABA1F44332; Tue, 1 Mar 2022 10:36:16 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1646130977; bh=X6YktsVu7FdBgPhu9qFKuminbFyWDXyYaI65mzEEF9s=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=f6RW5QpzWm5aYdPSbPgRh5G4W0Iy/BFCYPiRSSp/ezONLr5d7mvdwoaynWHXsrvIn 5fqetasbxlaisfNDB13U3oKHEqJekf6+wlvMgAHxi1BPLtswYG7rhu0EqGYuhnuZvF C079H/eYqFNV4ghxAfFoLdJIXvxQcq40ewHVtzlrXB31IDsz+j1GLr9pVH42GE8//j dfL6rBxtgC/sZ0TewOv8iPoGtzX/28Wh371yNPOWCNhbsvvYrYH1SziIc58yWwMosN aGZ+OrHcf2jA+Hl4uhAdAX8m5EFb11xcYMyrkjhxmfRXE7anQWNwQKaG4X7cnTdj92 od/mPyKP13LxA== Message-ID: Date: Tue, 1 Mar 2022 11:36:13 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls Content-Language: en-US To: Sebastian Fricke Cc: mchehab@kernel.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@gmail.com, jonas@kwiboo.se, nicolas@ndufresne.ca, 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, knaerzche@gmail.com, jc@kynesim.co.uk References: <20220228140838.622021-1-benjamin.gaignard@collabora.com> <20220228140838.622021-5-benjamin.gaignard@collabora.com> <20220228165757.sjqxdxb3toxkcasl@basti-XPS-13-9310> From: Benjamin Gaignard In-Reply-To: <20220228165757.sjqxdxb3toxkcasl@basti-XPS-13-9310> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220301_023621_188122_C1FFDD26 X-CRM114-Status: GOOD ( 41.92 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CkxlIDI4LzAyLzIwMjIgw6AgMTc6NTcsIFNlYmFzdGlhbiBGcmlja2UgYSDDqWNyaXTCoDoKPiBI ZXkgQmVuamFtaW4sCj4KPiBPbiAyOC4wMi4yMDIyIDE1OjA4LCBCZW5qYW1pbiBHYWlnbmFyZCB3 cm90ZToKPj4gQ29tcGxldGUgdGhlIEhFVkMgY29udHJvbHMgd2l0aCBtaXNzaW5nIGZpZWxkcyBm cm9tIEguMjY1IAo+PiBzcGVjaWZpY2F0aW9ucy4KPj4gRXZlbiBpZiB0aGVzZSBmaWVsZHMgYXJl bid0IHVzZWQgYnkgdGhlIGN1cnJlbnQgbWFpbmxpbmVkIGRyaXZlcnMKPj4gdGhleSB3aWxsIGJl IG5lZWQgZm9yIChhdCBsZWFzdCkgcmt2ZGVjIGRyaXZlci4KPj4KPj4gU2lnbmVkLW9mZi1ieTog QmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4+IC0t LQo+PiAuLi4vbWVkaWEvdjRsL2V4dC1jdHJscy1jb2RlYy5yc3TCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfCAyMiArKysrKysrKysrKysrKysrKysrCj4+IGluY2x1ZGUvbWVkaWEvaGV2Yy1jdHJs cy5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDYgKysrKy0KPj4g MiBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+Cj4+IGRp ZmYgLS1naXQgCj4+IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21lZGlhL3Y0bC9leHQt Y3RybHMtY29kZWMucnN0IAo+PiBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9tZWRpYS92 NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBpbmRleCA0Y2Q3YzU0MWZjMzAuLmQwOTZjYjc1OTkz YSAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21lZGlhL3Y0bC9l eHQtY3RybHMtY29kZWMucnN0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9t ZWRpYS92NGwvZXh0LWN0cmxzLWNvZGVjLnJzdAo+PiBAQCAtMjY2MSw2ICsyNjYxLDE2IEBAIGVu dW0gdjRsMl9tcGVnX3ZpZGVvX2hldmNfc2l6ZV9vZl9sZW5ndGhfZmllbGQgLQo+PiDCoMKgwqAg OnN0dWItY29sdW1uczogMAo+PiDCoMKgwqAgOndpZHRoczrCoMKgwqDCoMKgwqAgMSAxIDIKPj4K Pj4gK8KgwqDCoCAqIC0gX191OAo+PiArwqDCoMKgwqDCoCAtIGBgdmlkZW9fcGFyYW1ldGVyX3Nl dF9pZGBgCj4+ICvCoMKgwqDCoMKgIC0gU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgdnBzX3Zp ZGVvX3BhcmFtZXRlcl9zZXRfaWQgb2YgdGhlIAo+PiBhY3RpdmUgVlBTCj4+ICvCoMKgwqDCoMKg wqDCoCBhcyBkZXNjaWJlZCBpbiBzZWN0aW9uICI3LjQuMy4yLjEgR2VuZXJhbCBzZXF1ZW5jZSBw YXJhbWV0ZXIgCj4+IHNldCBSQlNQIHNlbWFudGljcyIKPj4gK8KgwqDCoMKgwqDCoMKgIG9mIEgu MjY1IHNwZWNpZmljYXRpb25zLgo+PiArwqDCoMKgICogLSBfX3U4Cj4+ICvCoMKgwqDCoMKgIC0g YGBzZXFfcGFyYW1ldGVyX3NldF9pZGBgCj4+ICvCoMKgwqDCoMKgIC0gUHJvdmlkZXMgYW4gaWRl bnRpZmllciBmb3IgdGhlIFNQUyBmb3IgcmVmZXJlbmNlIGJ5IG90aGVyIAo+PiBzeW50YXggZWxl bWVudHMKPj4gK8KgwqDCoMKgwqDCoMKgIGFzIGRlc2NpYmVkIGluIHNlY3Rpb24gIjcuNC4zLjIu MSBHZW5lcmFsIHNlcXVlbmNlIHBhcmFtZXRlciAKPj4gc2V0IFJCU1Agc2VtYW50aWNzIgo+PiAr wqDCoMKgwqDCoMKgwqAgb2YgSC4yNjUgc3BlY2lmaWNhdGlvbnMuCj4+IMKgwqDCoCAqIC0gX191 MTYKPj4gwqDCoMKgwqDCoCAtIGBgcGljX3dpZHRoX2luX2x1bWFfc2FtcGxlc2BgCj4+IMKgwqDC oMKgwqAgLQo+PiBAQCAtMjgwMCw2ICsyODEwLDkgQEAgZW51bSB2NGwyX21wZWdfdmlkZW9faGV2 Y19zaXplX29mX2xlbmd0aF9maWVsZCAtCj4+IMKgwqDCoCA6c3R1Yi1jb2x1bW5zOiAwCj4+IMKg wqDCoCA6d2lkdGhzOsKgwqDCoMKgwqDCoCAxIDEgMgo+Pgo+PiArwqDCoMKgICogLSBfX3U4Cj4+ ICvCoMKgwqDCoMKgIC0gYGBwaWNfcGFyYW1ldGVyX3NldF9pZGBgCj4+ICvCoMKgwqDCoMKgIC0g SWRlbnRpZmllcyB0aGUgUFBTIGZvciByZWZlcmVuY2UgYnkgb3RoZXIgc3ludGF4IGVsZW1lbnRz Lgo+PiDCoMKgwqAgKiAtIF9fdTgKPj4gwqDCoMKgwqDCoCAtIGBgbnVtX2V4dHJhX3NsaWNlX2hl YWRlcl9iaXRzYGAKPj4gwqDCoMKgwqDCoCAtCj4+IEBAIC0zMDI2LDYgKzMwMzksMTUgQEAgZW51 bSB2NGwyX21wZWdfdmlkZW9faGV2Y19zaXplX29mX2xlbmd0aF9maWVsZCAtCj4+IMKgwqDCoCAq IC0gX191OAo+PiDCoMKgwqDCoMKgIC0gYGByZWZfaWR4X2wxW1Y0TDJfSEVWQ19EUEJfRU5UUklF U19OVU1fTUFYXWBgCj4+IMKgwqDCoMKgwqAgLSBUaGUgbGlzdCBvZiBMMSByZWZlcmVuY2UgZWxl bWVudHMgYXMgaW5kaWNlcyBpbiB0aGUgRFBCLgo+PiArwqDCoMKgICogLSBfX3UxNgo+PiArwqDC oMKgwqDCoCAtIGBgc2hvcnRfdGVybV9yZWZfcGljX3NldF9zaXplYGAKPj4gK8KgwqDCoMKgwqAg LSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdF9yZWZfcGljX3NldCggKSBzeW50YXggc3RydWN0 dXJlcyAKPj4gaW5jbHVkZWQgaW4gdGhlIFNQUy4KPj4gK8KgwqDCoMKgwqDCoMKgIFRoZSB2YWx1 ZSBvZiBudW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgc2hhbGwgYmUgaW4gdGhlIAo+PiByYW5n ZSBvZiAwIHRvIDY0LCBpbmNsdXNpdmUuCj4+ICvCoMKgwqAgKiAtIF9fdTE2Cj4+ICvCoMKgwqDC oMKgIC0gYGBsb25nX3Rlcm1fcmVmX3BpY19zZXRfc2l6ZWBgCj4+ICvCoMKgwqDCoMKgIC0gU3Bl Y2lmaWVzIHRoZSBudW1iZXIgb2YgY2FuZGlkYXRlIGxvbmctdGVybSByZWZlcmVuY2UgCj4+IHBp Y3R1cmVzIHRoYXQgYXJlIHNwZWNpZmllZAo+PiArwqDCoMKgwqDCoMKgwqAgaW4gdGhlIFNQUy4g VGhlIHZhbHVlIG9mIG51bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzIHNoYWxsIGJlIAo+PiBpbiB0 aGUgcmFuZ2UKPj4gK8KgwqDCoMKgwqDCoMKgIG9mIDAgdG8gMzIsIGluY2x1c2l2ZS4KPj4gwqDC oMKgICogLSBfX3U4Cj4KPiBJIHdvdWxkIGxpa2UgdG8gYXJndWUgdGhhdCB0aGUgbmFtZXMgZm9y IHRoZXNlIGZpZWxkcyBhcmUgbm90IG9wdGltYWwuCj4KPiBUaGUgYXJlIHF1aXRlIHNpbWlsYXIg dG8gdGhlIG9uZXMgZnJvbSB0aGUgc3BlY2lmaWNhdGlvbjoKPiBgbnVtX3Nob3J0X3Rlcm1fcmVm X3BpY19zZXRzYCAmIGBudW1fbG9uZ190ZXJtX3JlZl9waWNzX3Nwc2AsIHdoaWxlCj4gdGhleSBh Y3R1YWxseSBkbyBzb21ldGhpbmcgZGlmZmVyZW50LiAoV2hpY2ggbWVhbnMgdGhhdCBkZXNjcmlw dGlvbnMgZm9yCj4gdGhlIGZpZWxkcyBhcmUgc2FkbHkgaW5jb3JyZWN0IGFzIHdlbGwpCj4KPiBM b29raW5nIGF0IHRoZSBjb2RlIGZyb20gdGhlIEgyNjUgcGFyc2VyIGluIEdTdHJlYW1lcjoKPiBg YGAKPiDCoMKgwqDCoMKgIFJFQURfVUlOVDggKCZuciwgc2xpY2UtPnNob3J0X3Rlcm1fcmVmX3Bp Y19zZXRfc3BzX2ZsYWcsIDEpOwo+IMKgwqDCoMKgwqAgaWYgKCFzbGljZS0+c2hvcnRfdGVybV9y ZWZfcGljX3NldF9zcHNfZmxhZykgewo+IMKgwqDCoMKgwqDCoMKgIGd1aW50IHBvcyA9IG5hbF9y ZWFkZXJfZ2V0X3BvcyAoJm5yKTsKPiDCoMKgwqDCoMKgwqDCoCBpZiAoIWdzdF9oMjY1X3BhcnNl cl9wYXJzZV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KCZzbGljZS0+c2hvcnRfdGVybV9yZWZfcGljX3NldHMsICZuciwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3BzLT5udW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMsIHNwcykpCj4g wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3I7Cj4KPiDCoMKgwqDCoMKgwqDCoCBzbGljZS0+ c2hvcnRfdGVybV9yZWZfcGljX3NldF9zaXplID0gbmFsX3JlYWRlcl9nZXRfcG9zICgmbnIpIAo+ IC0gcG9zOwo+IGBgYAo+Cj4gV2UgY2FuIHNlZSB0aGF0IHRoZSBgc2hvcnRfdGVybV9yZWZfcGlj X3NldF9zaXplYCBpcyBjYWxjdWxhdGVkIGJ5Cj4gZ2V0dHRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0 d2VlbiB0aGUgbmFsX3JlYWRlciBwb3NpdGlvbiBiZWZvcmUgY2FsbGluZwo+IGBnc3RfaDI2NV9w YXJzZXJfcGFyc2Vfc2hvcnRfdGVybV9yZWZfcGljX3NldHNgIGFuZCB0aGUgcG9zaXRpb24gb2Yg dGhlCj4gbmFsIHJlYWRlciBhZnRlcndhcmRzLgo+IFRoZSB2YXJpYWJsZSBgbnVtX3Nob3J0X3Rl cm1fcmVmX3BpY19zZXRzYCBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIHNob3J0Cj4gdGVybSByZWZl cmVuY2UgcGljdHVyZSBzZXQgcGFyc2luZyBwcm9jZXNzLCBidXQgaXQgaXMgbm90IGRpcmVjdGx5 Cj4gcmVsYXRlZCB0byBgc2hvcnRfdGVybV9yZWZfcGljX3NldF9zaXplYCAob3RoZXJ3aXNlIGEg ZGlyZWN0Cj4gdHJhbnNmb3JtYXRpb24gb2YgYG51bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0c2Ag LT4KPiBgc2hvcnRfdGVybV9yZWZfcGljX3NldF9zaXplYCB3b3VsZCBoYXZlIGJlZW4gd2F5IGVh c2llcikKPgo+IEZ1cnRoZXIgd2hlbiBJIGxvb2sgYXQgYSBwYXRjaCBmcm9tIEFsZXggQmVlIGZv ciBSS1ZERUMgdGhhdCB1c2VzIHRoZXNlCj4gZmllbGRzIChhY3R1YWxseSB0aGUgb25seSB1c2Vy KSAKPiAoaHR0cHM6Ly9naXRodWIuY29tL0xpYnJlRUxFQy9MaWJyZUVMRUMudHYvYmxvYi9tYXN0 ZXIvcHJvamVjdHMvUm9ja2NoaXAvcGF0Y2hlcy9saW51eC9kZWZhdWx0L2xpbnV4LTIwMDAtdjRs Mi13aXAtcmt2ZGVjLWhldmMucGF0Y2gjTDMwMDcpCj4gSSBjYW4gc2VlIHRoYXQgaGUgZGVzY3Jp YmVzIHRoZW0gYXMgYml0IG9mZnNldHMuCj4KPiBTbywgdG8gYXZvaWQgY29uZnVzaW9uLCBJIHdv dWxkIGFyZ3VlIHRoYXQgd2Ugc2hvdWxkIHJlbmFtZSB0aGVzZQo+IChUaGV5IGFyZSBub3QgcGFy dCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbnl3YXkpCj4KPiBzL3Nob3J0X3Rlcm1fcmVmX3BpY19z ZXRfc2l6ZS9zaG9ydF90ZXJtX3JlZl9waWNfc2V0X2JpdF9vZmZzZXQvCj4gcy9sb25nX3Rlcm1f cmVmX3BpY19zZXRfc2l6ZS9sb25nX3Rlcm1fcmVmX3BpY19zZXRfYml0X29mZnNldC8KPgo+IFRo ZXNlIG5hbWVzIGRlc2NyaWJlIHRoZSBwdXJwb3NlIGFuZCB0aGUgY29udGVudCBhIGJpdCBiZXR0 ZXIgYW5kIGF2b2lkCj4gY29uZnVzaW9uIHdpdGggZXhpc3RpbmcgdmFsdWVzLgo+Cj4gQWRkaXRv bmFsbHksIEkgbm90aWNlZCB0aGF0IGNhbGN1bGF0aW5nIHRoZSBiaXQgb2Zmc2V0IGZvciB0aGUg bG9uZyB0ZXJtCj4gaXMgYSBiaXQgdHJpY2t5LiBJIHdhc24ndCBhYmxlIHRvIGZpbmQgYSBkaXJl Y3QgcmVmZXJlbmNlIGluCj4gJ25vbi12ZW5kb3InIGNvZGUuCj4KPiBUaGUgcHJvY2VzcyBmb3Ig cGFyc2luZyB0aGUgc2hvcnQgdGVybSByZWZlcmVuY2UgcGljdHVyZSBzZXQgaXMgCj4gZGVwaWN0 ZWQgd2l0aCBhIGxvdCBvZiBkZXRhaWwgaW4KPiB0aGUgc3BlY2lmaWNhdGlvbiwgYnV0IEkgd2Fz bid0IGFibGUgdG8gZmluZCB0aGUgc29tZXRoaW5nIGVxdWl2YWxlbnQgCj4gZm9yIHRoZSBsb25n IHRlcm0KPiByZWZlcmVuY2UgcGljdHVyZSBzZXQuCj4KPiBIYXZpbmcgYSBzd2l0ZnQgbG9vayBp bnRvIG1wcCwgSSBjYW4gc2VlIGF0Ogo+IGh0dHBzOi8vZ2l0aHViLmNvbS9KZWZmeUNOL3JvY2tj aGlwX21pcnJvcnMvYmxvYi9tcHAvbXBwL2hhbC9ya2RlYy9oMjY1ZC9oYWxfaDI2NWRfY29tLmMj TDUxMiAKPgo+Cj4gVGhhdCB0aGV5IGRvIHJvdWdobHkgdGhlIHNhbWUgc2hvcnQgdGVybSBpcyBz aW1wbHkgdGhlIHJlYWQgYml0cyBieSB0aGUKPiBCaXRSZWFkZXIgLSB0aGUgcmVhZCBiaXRzIGJl Zm9yZSB0aGUgb3BlcmF0aW9uIG9uIHRoZSBzaG9ydCB0ZXJtCj4gcmVmZXJlbmNlIHBpY3R1cmUg c2V0LiAoc28gdmVyeSBzaW1pbGFyIHRvIHdoYXQgdGhlIGgyNjUgcGFyc2VyIGRvZXMgaW4KPiBH U3RyZWFtZXIpCj4gVGhlIGJpdCBvZmZzZXQgZm9yIGxvbmcgdGVybSBpcyBlcXVhbCB0byBzaG9y dCB0ZXJtIHVubGVzcyB0aGUKPiBgbG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZ2AgaXMg c2V0LiBJbiB3aGljaCBjYXNlLCB3ZSBwZXJmb3JtIHNvbWUKPiBvcGVyYXRpb25zIG9uIHRoZSBs b25nIHRlcm0gcmVmZXJlbmNlIHBpY3R1cmUgc2V0IGFuZCBhZGQgdGhlIGFtb3VudCBvZgo+IHVz ZWQgYml0cyB0byB0aGUgYml0IG9mZnNldC4KCkkgdGhpbmsgdGhlIG5hbWVzIGFyZSBjb3JyZWN0 LCB0aGVzZSBmaWVsZHMgcHJvdmlkZXMgdGhlIHNpemUgb2Ygc2hvcnQgYW5kIGxvbmcgdGVybSBy ZWYgcGljdHVyZS4KCkl0IGlzbid0IGFuIG9mZnNldCBhcyB5b3UgZXhwbGFpbiB5b3VyIHNlbGYg aXQgaXMgdGhlIGRpZmYgYmV0d2VlbiBlbmQgYW5kIHN0YXJ0IG9mIHJlZmVyZW5jZSBwaWN0dXJl IGluIHRoZSBiaXRzdHJlYW0uCgpUaGUgZG9jdW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QsIEkgd2ls bCBmaXggaXQgaW4gdGhlIG5leHQgdmVyc2lvbiBsaWtlIHRoaXM6CiogQHNob3J0X3Rlcm1fcmVm X3BpY19zZXRfc2l6ZTogc3BlY2lmaWVzIHRoZSBzaXplIG9mIHNob3J0LXRlcm0gcmVmZXJlbmNl CioJCQkJIHBpY3R1cmVzIGluY2x1ZGVkIGluIHRoZSBTUFMKKiBAbG9uZ190ZXJtX3JlZl9waWNf c2V0X3NpemU6IHNwZWNpZmllcyB0aGUgc2l6ZSBvZiBsb25nLXRlcm0gcmVmZXJlbmNlCioJCQkJ cGljdHVyZSBpbmNsdWRlIGluIHRoZSBTUFMKClRoYW5rcywKQmVuamFtaW4KCj4KPiBHcmVldGlu Z3MsCj4gU2ViYXN0aWFuCj4KPj4gwqDCoMKgwqDCoCAtIGBgcGFkZGluZ2BgCj4+IMKgwqDCoMKg wqAgLSBBcHBsaWNhdGlvbnMgYW5kIGRyaXZlcnMgbXVzdCBzZXQgdGhpcyB0byB6ZXJvLgo+PiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9oZXZjLWN0cmxzLmggYi9pbmNsdWRlL21lZGlhL2hl dmMtY3RybHMuaAo+PiBpbmRleCAwMWNjZGE0OGQ4YzUuLmEzMjllMDg2YTg5YSAxMDA2NDQKPj4g LS0tIGEvaW5jbHVkZS9tZWRpYS9oZXZjLWN0cmxzLmgKPj4gKysrIGIvaW5jbHVkZS9tZWRpYS9o ZXZjLWN0cmxzLmgKPj4gQEAgLTU4LDYgKzU4LDggQEAgZW51bSB2NGwyX21wZWdfdmlkZW9faGV2 Y19zdGFydF9jb2RlIHsKPj4gLyogVGhlIGNvbnRyb2xzIGFyZSBub3Qgc3RhYmxlIGF0IHRoZSBt b21lbnQgYW5kIHdpbGwgbGlrZWx5IGJlIAo+PiByZXdvcmtlZC4gKi8KPj4gc3RydWN0IHY0bDJf Y3RybF9oZXZjX3NwcyB7Cj4+IMKgwqDCoMKgLyogSVNPL0lFQyAyMzAwOC0yLCBJVFUtVCBSZWMu IEguMjY1OiBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0ICovCj4+ICvCoMKgwqAgX191OMKgwqDCoCB2 aWRlb19wYXJhbWV0ZXJfc2V0X2lkOwo+PiArwqDCoMKgIF9fdTjCoMKgwqAgc2VxX3BhcmFtZXRl cl9zZXRfaWQ7Cj4+IMKgwqDCoMKgX191MTbCoMKgwqAgcGljX3dpZHRoX2luX2x1bWFfc2FtcGxl czsKPj4gwqDCoMKgwqBfX3UxNsKgwqDCoCBwaWNfaGVpZ2h0X2luX2x1bWFfc2FtcGxlczsKPj4g wqDCoMKgwqBfX3U4wqDCoMKgIGJpdF9kZXB0aF9sdW1hX21pbnVzODsKPj4gQEAgLTEwOCw2ICsx MTAsNyBAQCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzIHsKPj4KPj4gc3RydWN0IHY0bDJfY3Ry bF9oZXZjX3BwcyB7Cj4+IMKgwqDCoMKgLyogSVNPL0lFQyAyMzAwOC0yLCBJVFUtVCBSZWMuIEgu MjY1OiBQaWN0dXJlIHBhcmFtZXRlciBzZXQgKi8KPj4gK8KgwqDCoCBfX3U4wqDCoMKgIHBpY19w YXJhbWV0ZXJfc2V0X2lkOwo+PiDCoMKgwqDCoF9fdTjCoMKgwqAgbnVtX2V4dHJhX3NsaWNlX2hl YWRlcl9iaXRzOwo+PiDCoMKgwqDCoF9fdTjCoMKgwqAgbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9h Y3RpdmVfbWludXMxOwo+PiDCoMKgwqDCoF9fdTjCoMKgwqAgbnVtX3JlZl9pZHhfbDFfZGVmYXVs dF9hY3RpdmVfbWludXMxOwo+PiBAQCAtMTk5LDcgKzIwMiw4IEBAIHN0cnVjdCB2NGwyX2N0cmxf aGV2Y19zbGljZV9wYXJhbXMgewo+PiDCoMKgwqDCoF9fdTMywqDCoMKgIHNsaWNlX3NlZ21lbnRf YWRkcjsKPj4gwqDCoMKgwqBfX3U4wqDCoMKgIHJlZl9pZHhfbDBbVjRMMl9IRVZDX0RQQl9FTlRS SUVTX05VTV9NQVhdOwo+PiDCoMKgwqDCoF9fdTjCoMKgwqAgcmVmX2lkeF9sMVtWNEwyX0hFVkNf RFBCX0VOVFJJRVNfTlVNX01BWF07Cj4+IC0KPj4gK8KgwqDCoCBfX3UxNsKgwqDCoCBzaG9ydF90 ZXJtX3JlZl9waWNfc2V0X3NpemU7Cj4+ICvCoMKgwqAgX191MTbCoMKgwqAgbG9uZ190ZXJtX3Jl Zl9waWNfc2V0X3NpemU7Cj4+IMKgwqDCoMKgX191OMKgwqDCoCBwYWRkaW5nOwo+Pgo+PiDCoMKg wqDCoC8qIElTTy9JRUMgMjMwMDgtMiwgSVRVLVQgUmVjLiBILjI2NTogV2VpZ2h0ZWQgcHJlZGlj dGlvbiAKPj4gcGFyYW1ldGVyICovCj4+IC0tIAo+PiAyLjMyLjAKPj4KPgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWls aW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0 cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=