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 X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DDF2C10F13 for ; Tue, 16 Apr 2019 07:24:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C2AE7206BA for ; Tue, 16 Apr 2019 07:24:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="FM5V4Py8" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728559AbfDPHYu (ORCPT ); Tue, 16 Apr 2019 03:24:50 -0400 Received: from mail-ot1-f66.google.com ([209.85.210.66]:40549 "EHLO mail-ot1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727828AbfDPHYu (ORCPT ); Tue, 16 Apr 2019 03:24:50 -0400 Received: by mail-ot1-f66.google.com with SMTP id t8so16746634otp.7 for ; Tue, 16 Apr 2019 00:24:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=GfJbj3592HFAwS7sdfwgYwNJSeaElGORqUj9VQPS7Yc=; b=FM5V4Py8RkZJGeFFHn6B/aweYNJj0IZn6J4x5pKCTEqYobR2ZiIVwa7CGqqMPoLvQy FtRSkcnwY3aFDLVjJy/ByhOPFWptPIPutAc7gnB/bGJJOx/ifAppTL2QAupL/NsWIRSp X/b+VKIiAHHwFIJAYOIZmi45AJ+ZYUkjiwYaM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=GfJbj3592HFAwS7sdfwgYwNJSeaElGORqUj9VQPS7Yc=; b=kl7zd0P0lRauic7TryDMPkYu+/llYhtqy6rdFMFd/Vq2tl12FFlYPkEGBOXly8Vh+O UkxLTRUKViINrEQJ3YjLRVyPaYnEBePomYHx9ychEcViVxwlF8hCHPCY0XJEMIWfTBFt U8nLT1ex3TW3jmBdskE4twUH+lFYc7wdyIrdvqVJBsAohsWSpXvYXFDAYoi83AygPSyY ThjSY7cBtNFgq0LWr9kYcYyZPCgXXaqMzMVlts7y1ZIDtgAo1eZjQCx4uxiRftQ6ak9c ipde899FP5prLSLyJg8qqpkzOrbh2U9d4eZWQGN0tXpZqiQG4Dc3V3sV1kdoM4YTnkP5 u/fQ== X-Gm-Message-State: APjAAAVFfiXltDHPp2FNf0NiMT+1eGAL1YiKhCTAWSBgf7C6UFBaIH2a nm6b6Ip6i0sfZ7vfdeWQDooXR3Otfkc= X-Google-Smtp-Source: APXvYqyNLJhh2tZEnaVExG2sWCxf74YH72CdrJxaVCmhTjm/bb2xpujxl8LiGnBYJ+shszEs45Tk2w== X-Received: by 2002:a9d:6187:: with SMTP id g7mr49148720otk.2.1555399489203; Tue, 16 Apr 2019 00:24:49 -0700 (PDT) Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com. [209.85.210.52]) by smtp.gmail.com with ESMTPSA id q9sm20359305oti.78.2019.04.16.00.24.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Apr 2019 00:24:49 -0700 (PDT) Received: by mail-ot1-f52.google.com with SMTP id o74so16761988ota.3 for ; Tue, 16 Apr 2019 00:24:48 -0700 (PDT) X-Received: by 2002:a9d:57c2:: with SMTP id q2mr48272947oti.313.1555399021608; Tue, 16 Apr 2019 00:17:01 -0700 (PDT) MIME-Version: 1.0 References: <7cd913545cfc80fa9999839c62c4bf7b354a7904.1554380738.git-series.maxime.ripard@bootlin.com> <20190405151552.biesirbs35uivk7d@flea> <05078223a4098c96f6260f77e9ef2a01b966daa6.camel@collabora.com> <20190411155749.crdpidehjxa6edya@flea> In-Reply-To: <20190411155749.crdpidehjxa6edya@flea> From: Tomasz Figa Date: Tue, 16 Apr 2019 16:16:50 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH RESEND v7 1/2] media: uapi: Add H264 low-level decoder API compound controls. To: Maxime Ripard , Nicolas Dufresne Cc: Chen-Yu Tsai , Hans Verkuil , Alexandre Courbot , Sakari Ailus , Laurent Pinchart , Pawel Osciak , Paul Kocialkowski , Linux Kernel Mailing List , "list@263.net:IOMMU DRIVERS , Joerg Roedel ," , Linux Media Mailing List , Jens Kuske , Jernej Skrabec , Jonas Karlman , Ezequiel Garcia , linux-sunxi , Thomas Petazzoni , Guenter Roeck Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 12, 2019 at 12:57 AM Maxime Ripard wrote: > > Hi, > > On Fri, Apr 05, 2019 at 12:27:48PM -0400, Nicolas Dufresne wrote: > > Le vendredi 05 avril 2019 =C3=A0 17:15 +0200, Maxime Ripard a =C3=A9cri= t : > > > Hi Nicolas, > > > > > > On Thu, Apr 04, 2019 at 11:41:13AM -0400, Nicolas Dufresne wrote: > > > > > > > + * - __u16 > > > > > > > + - ``pic_width_in_mbs_minus1`` > > > > > > > + - > > > > > > > + * - __u16 > > > > > > > + - ``pic_height_in_map_units_minus1`` > > > > > > > + - > > > > > > > > > > > > We recently had some reflection with Alex that this is redundan= t with > > > > > > the width and height in the OUTPUT format. It may also apply to= some > > > > > > other fields in these structs. I feel like they should be remov= ed and > > > > > > passed via corresponding generic V4L2 properties - format, sele= ction, > > > > > > etc. > > > > > > > > > > > > The same problem is also present in the MPEG2 controls. In fact= , there > > > > > > was a patch already which used some fields from the controls to > > > > > > calculate the destination buffer strides, rather than bytesperl= ine in > > > > > > the format. > > > > > > > > > > > > Since we're in staging, it could be done with a follow-up patch= , though. > > > > > > > > > > Just my two cents. I played with some codecs a while back. IIRC s= ome > > > > > specify a "codec" size in addition to the actual picture size, li= ke > > > > > when the encoder does padding to fit the requirements of the code= c > > > > > (spec). Is this needed anywhere? > > > > > > > > With state-less encoders, the headers, which contains the crop > > > > information is created by userspace and for state less decoder, the > > > > headers that contains this information is parsed by userspace. So I > > > > believe that in theory, the accelerator does not strictly need to b= e > > > > aware of the cropped dimensions. > > > > > > > > Another thing, is that there is not guarantied matches between e.g. > > > > depth of the chrome/luma and the final image buffers. Some hardware= may > > > > have bandwidth limitation or internal converter and could possibly > > > > decode 10bit data into 8bit buffers. > > > > > > > > A third reason why I would not try and encode this header informati= on > > > > is that there can be multiple PPS/SPS at the same time, and I think > > > > it's confusing if the relevant information to differentiate them is > > > > removed. > > > > > > Sorry if that sounds a bit dumb, but it's not really clear to me if > > > you're arguing for the removal of the data as Tomasz suggests, or if > > > you want to keep them. > > > > > > The first paragrah seems to advocate for the former, but the two > > > others for the latter. > > > > I think the data should stay. As I said, there can be multiple SPS/PPS, > > while there is only one format. That being said, how does SPS/PPS > > activation works ? How do you tell the driver about all the SPS/PPS and > > which one is being activated ? > > The current way of dealing with this is that the _SLICE_PARAMS control > actually takes an array of SPS's. And same thing for PPS. > > There's no difference between activated and deactivated ones > though. What is the use case for this? Uhm, there is only one format, but so there is only one active SPS/PPS, isn't it? An alternative would be to just make the OUTPUT format a function of the currently set controls, so that it would always match the active PPS/SPS, without the ability for the application to change it. I just want to avoid the case when the OUTPUT format can be set randomly to something different than in the stream and also drivers reading randomly the format-related information sometimes from the controls and sometimes from the format state. Best regards, Tomasz 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 X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E90DEC10F13 for ; Tue, 16 Apr 2019 07:17:14 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id BAB0C2073F for ; Tue, 16 Apr 2019 07:17:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tLAebXdB"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="FM5V4Py8" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BAB0C2073F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=VH74hE9Y6b2HSYca95E6D6llwBrOTwXPYBVCwG6MBgE=; b=tLAebXdBljaINz DffItZWjIF0P1C5z++ArL/oJB3XW3BFl8WQkAkWzYhEziJ6hmiU0yYmEiqM+9G8gyxRVZiS/wV0jV 8Vk9bQjivDoCpHaatvSMFFB4twA/F35bgpSk1Tv92pPam0vk32bjbVunui5Ano5b79kwokrVT3djM S96PRAkEGDKi0Mp5+KvikJHDYoIKFJWc+jENSITHcO3b7BQxZPXscMKoo0cTDjGNJvwa4sXf36gnh 8/gMgKfdqGgHhY8oO+mfbFc0qv1BT8ZO8Ub2cdbGxXlypNKplmWPil7Cpha8c9UECyC6dANwS0n7S LiLbEKIUQ97XNMfCP5Fw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hGIL9-0004u4-Gx; Tue, 16 Apr 2019 07:17:11 +0000 Received: from mail-oi1-x243.google.com ([2607:f8b0:4864:20::243]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hGIL6-0004ti-1w for linux-arm-kernel@lists.infradead.org; Tue, 16 Apr 2019 07:17:09 +0000 Received: by mail-oi1-x243.google.com with SMTP id v7so16056672oie.8 for ; Tue, 16 Apr 2019 00:17:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=GfJbj3592HFAwS7sdfwgYwNJSeaElGORqUj9VQPS7Yc=; b=FM5V4Py8RkZJGeFFHn6B/aweYNJj0IZn6J4x5pKCTEqYobR2ZiIVwa7CGqqMPoLvQy FtRSkcnwY3aFDLVjJy/ByhOPFWptPIPutAc7gnB/bGJJOx/ifAppTL2QAupL/NsWIRSp X/b+VKIiAHHwFIJAYOIZmi45AJ+ZYUkjiwYaM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=GfJbj3592HFAwS7sdfwgYwNJSeaElGORqUj9VQPS7Yc=; b=I265BgMuFypw9rGqXSpugsOqvtG3GuUYJVuZ32WkDjsI9cYEPnNb5IRbj6s5Vdz28W Yt54JT8LKuU+YM/iAVRtypgkkFYH/QtdJT71mD+9wiPLaQt0DWWShgIxMEXK1bA2wot8 BKLaqUbQs9l+EXZE6OLcob2dbarJsIBr/0tmQaubk4DsmDtUABMGCHREtKu08XlXHlnR Sn9E7t5+oZlrLtmVZ+T0B0M2yii059lgMvYLu/TSekyRyLtK93HnpeYUF1pIl5F3q8Pr L/sPC3/QAgb9vNYr6wR4IGTHjocqYZ5IIj7hQ+t5Egt2i12XPytDtbKyDw6zzXJbn2oZ xXRw== X-Gm-Message-State: APjAAAX3HiShttlwIhWtGkzq7Gv1290s1HInxW632gmChhnSYqMCVmiO Yuuy1bdCM3ExdTwdAivEQBb1YTcmK9c= X-Google-Smtp-Source: APXvYqzOdDFAaszkodXZlTTZe5uBmUdQOBjwnV8rVi85ozy13QjpAWuXY26aH6Wj1H7MOlUKF46ESQ== X-Received: by 2002:aca:5512:: with SMTP id j18mr22273504oib.65.1555399024392; Tue, 16 Apr 2019 00:17:04 -0700 (PDT) Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com. [209.85.210.53]) by smtp.gmail.com with ESMTPSA id d34sm19529943otb.31.2019.04.16.00.17.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Apr 2019 00:17:02 -0700 (PDT) Received: by mail-ot1-f53.google.com with SMTP id c16so16751403otn.4 for ; Tue, 16 Apr 2019 00:17:02 -0700 (PDT) X-Received: by 2002:a9d:57c2:: with SMTP id q2mr48272947oti.313.1555399021608; Tue, 16 Apr 2019 00:17:01 -0700 (PDT) MIME-Version: 1.0 References: <7cd913545cfc80fa9999839c62c4bf7b354a7904.1554380738.git-series.maxime.ripard@bootlin.com> <20190405151552.biesirbs35uivk7d@flea> <05078223a4098c96f6260f77e9ef2a01b966daa6.camel@collabora.com> <20190411155749.crdpidehjxa6edya@flea> In-Reply-To: <20190411155749.crdpidehjxa6edya@flea> From: Tomasz Figa Date: Tue, 16 Apr 2019 16:16:50 +0900 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH RESEND v7 1/2] media: uapi: Add H264 low-level decoder API compound controls. To: Maxime Ripard , Nicolas Dufresne X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190416_001708_118479_A53A9BC3 X-CRM114-Status: GOOD ( 29.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "list@263.net:IOMMU DRIVERS , Joerg Roedel , " , Thomas Petazzoni , Alexandre Courbot , Jonas Karlman , Jens Kuske , linux-sunxi , Linux Kernel Mailing List , Jernej Skrabec , Paul Kocialkowski , Chen-Yu Tsai , Hans Verkuil , Laurent Pinchart , Sakari Ailus , Guenter Roeck , Ezequiel Garcia , Pawel Osciak , Linux Media Mailing List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBBcHIgMTIsIDIwMTkgYXQgMTI6NTcgQU0gTWF4aW1lIFJpcGFyZAo8bWF4aW1lLnJp cGFyZEBib290bGluLmNvbT4gd3JvdGU6Cj4KPiBIaSwKPgo+IE9uIEZyaSwgQXByIDA1LCAyMDE5 IGF0IDEyOjI3OjQ4UE0gLTA0MDAsIE5pY29sYXMgRHVmcmVzbmUgd3JvdGU6Cj4gPiBMZSB2ZW5k cmVkaSAwNSBhdnJpbCAyMDE5IMOgIDE3OjE1ICswMjAwLCBNYXhpbWUgUmlwYXJkIGEgw6ljcml0 IDoKPiA+ID4gSGkgTmljb2xhcywKPiA+ID4KPiA+ID4gT24gVGh1LCBBcHIgMDQsIDIwMTkgYXQg MTE6NDE6MTNBTSAtMDQwMCwgTmljb2xhcyBEdWZyZXNuZSB3cm90ZToKPiA+ID4gPiA+ID4gPiAr ICAgICogLSBfX3UxNgo+ID4gPiA+ID4gPiA+ICsgICAgICAtIGBgcGljX3dpZHRoX2luX21ic19t aW51czFgYAo+ID4gPiA+ID4gPiA+ICsgICAgICAtCj4gPiA+ID4gPiA+ID4gKyAgICAqIC0gX191 MTYKPiA+ID4gPiA+ID4gPiArICAgICAgLSBgYHBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVz MWBgCj4gPiA+ID4gPiA+ID4gKyAgICAgIC0KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gV2UgcmVj ZW50bHkgaGFkIHNvbWUgcmVmbGVjdGlvbiB3aXRoIEFsZXggdGhhdCB0aGlzIGlzIHJlZHVuZGFu dCB3aXRoCj4gPiA+ID4gPiA+IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHRoZSBPVVRQVVQgZm9y bWF0LiBJdCBtYXkgYWxzbyBhcHBseSB0byBzb21lCj4gPiA+ID4gPiA+IG90aGVyIGZpZWxkcyBp biB0aGVzZSBzdHJ1Y3RzLiBJIGZlZWwgbGlrZSB0aGV5IHNob3VsZCBiZSByZW1vdmVkIGFuZAo+ ID4gPiA+ID4gPiBwYXNzZWQgdmlhIGNvcnJlc3BvbmRpbmcgZ2VuZXJpYyBWNEwyIHByb3BlcnRp ZXMgLSBmb3JtYXQsIHNlbGVjdGlvbiwKPiA+ID4gPiA+ID4gZXRjLgo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiBUaGUgc2FtZSBwcm9ibGVtIGlzIGFsc28gcHJlc2VudCBpbiB0aGUgTVBFRzIgY29u dHJvbHMuIEluIGZhY3QsIHRoZXJlCj4gPiA+ID4gPiA+IHdhcyBhIHBhdGNoIGFscmVhZHkgd2hp Y2ggdXNlZCBzb21lIGZpZWxkcyBmcm9tIHRoZSBjb250cm9scyB0bwo+ID4gPiA+ID4gPiBjYWxj dWxhdGUgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBzdHJpZGVzLCByYXRoZXIgdGhhbiBieXRlc3Bl cmxpbmUgaW4KPiA+ID4gPiA+ID4gdGhlIGZvcm1hdC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g U2luY2Ugd2UncmUgaW4gc3RhZ2luZywgaXQgY291bGQgYmUgZG9uZSB3aXRoIGEgZm9sbG93LXVw IHBhdGNoLCB0aG91Z2guCj4gPiA+ID4gPgo+ID4gPiA+ID4gSnVzdCBteSB0d28gY2VudHMuIEkg cGxheWVkIHdpdGggc29tZSBjb2RlY3MgYSB3aGlsZSBiYWNrLiBJSVJDIHNvbWUKPiA+ID4gPiA+ IHNwZWNpZnkgYSAiY29kZWMiIHNpemUgaW4gYWRkaXRpb24gdG8gdGhlIGFjdHVhbCBwaWN0dXJl IHNpemUsIGxpa2UKPiA+ID4gPiA+IHdoZW4gdGhlIGVuY29kZXIgZG9lcyBwYWRkaW5nIHRvIGZp dCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb2RlYwo+ID4gPiA+ID4gKHNwZWMpLiBJcyB0aGlz IG5lZWRlZCBhbnl3aGVyZT8KPiA+ID4gPgo+ID4gPiA+IFdpdGggc3RhdGUtbGVzcyBlbmNvZGVy cywgdGhlIGhlYWRlcnMsIHdoaWNoIGNvbnRhaW5zIHRoZSBjcm9wCj4gPiA+ID4gaW5mb3JtYXRp b24gaXMgY3JlYXRlZCBieSB1c2Vyc3BhY2UgYW5kIGZvciBzdGF0ZSBsZXNzIGRlY29kZXIsIHRo ZQo+ID4gPiA+IGhlYWRlcnMgdGhhdCBjb250YWlucyB0aGlzIGluZm9ybWF0aW9uIGlzIHBhcnNl ZCBieSB1c2Vyc3BhY2UuIFNvIEkKPiA+ID4gPiBiZWxpZXZlIHRoYXQgaW4gdGhlb3J5LCB0aGUg YWNjZWxlcmF0b3IgZG9lcyBub3Qgc3RyaWN0bHkgbmVlZCB0byBiZQo+ID4gPiA+IGF3YXJlIG9m IHRoZSBjcm9wcGVkIGRpbWVuc2lvbnMuCj4gPiA+ID4KPiA+ID4gPiBBbm90aGVyIHRoaW5nLCBp cyB0aGF0IHRoZXJlIGlzIG5vdCBndWFyYW50aWVkIG1hdGNoZXMgYmV0d2VlbiBlLmcuCj4gPiA+ ID4gZGVwdGggb2YgdGhlIGNocm9tZS9sdW1hIGFuZCB0aGUgZmluYWwgaW1hZ2UgYnVmZmVycy4g U29tZSBoYXJkd2FyZSBtYXkKPiA+ID4gPiBoYXZlIGJhbmR3aWR0aCBsaW1pdGF0aW9uIG9yIGlu dGVybmFsIGNvbnZlcnRlciBhbmQgY291bGQgcG9zc2libHkKPiA+ID4gPiBkZWNvZGUgMTBiaXQg ZGF0YSBpbnRvIDhiaXQgYnVmZmVycy4KPiA+ID4gPgo+ID4gPiA+IEEgdGhpcmQgcmVhc29uIHdo eSBJIHdvdWxkIG5vdCB0cnkgYW5kIGVuY29kZSB0aGlzIGhlYWRlciBpbmZvcm1hdGlvbgo+ID4g PiA+IGlzIHRoYXQgdGhlcmUgY2FuIGJlIG11bHRpcGxlIFBQUy9TUFMgYXQgdGhlIHNhbWUgdGlt ZSwgYW5kIEkgdGhpbmsKPiA+ID4gPiBpdCdzIGNvbmZ1c2luZyBpZiB0aGUgcmVsZXZhbnQgaW5m b3JtYXRpb24gdG8gZGlmZmVyZW50aWF0ZSB0aGVtIGlzCj4gPiA+ID4gcmVtb3ZlZC4KPiA+ID4K PiA+ID4gU29ycnkgaWYgdGhhdCBzb3VuZHMgYSBiaXQgZHVtYiwgYnV0IGl0J3Mgbm90IHJlYWxs eSBjbGVhciB0byBtZSBpZgo+ID4gPiB5b3UncmUgYXJndWluZyBmb3IgdGhlIHJlbW92YWwgb2Yg dGhlIGRhdGEgYXMgVG9tYXN6IHN1Z2dlc3RzLCBvciBpZgo+ID4gPiB5b3Ugd2FudCB0byBrZWVw IHRoZW0uCj4gPiA+Cj4gPiA+IFRoZSBmaXJzdCBwYXJhZ3JhaCBzZWVtcyB0byBhZHZvY2F0ZSBm b3IgdGhlIGZvcm1lciwgYnV0IHRoZSB0d28KPiA+ID4gb3RoZXJzIGZvciB0aGUgbGF0dGVyLgo+ ID4KPiA+IEkgdGhpbmsgdGhlIGRhdGEgc2hvdWxkIHN0YXkuIEFzIEkgc2FpZCwgdGhlcmUgY2Fu IGJlIG11bHRpcGxlIFNQUy9QUFMsCj4gPiB3aGlsZSB0aGVyZSBpcyBvbmx5IG9uZSBmb3JtYXQu IFRoYXQgYmVpbmcgc2FpZCwgaG93IGRvZXMgU1BTL1BQUwo+ID4gYWN0aXZhdGlvbiB3b3JrcyA/ IEhvdyBkbyB5b3UgdGVsbCB0aGUgZHJpdmVyIGFib3V0IGFsbCB0aGUgU1BTL1BQUyBhbmQKPiA+ IHdoaWNoIG9uZSBpcyBiZWluZyBhY3RpdmF0ZWQgPwo+Cj4gVGhlIGN1cnJlbnQgd2F5IG9mIGRl YWxpbmcgd2l0aCB0aGlzIGlzIHRoYXQgdGhlIF9TTElDRV9QQVJBTVMgY29udHJvbAo+IGFjdHVh bGx5IHRha2VzIGFuIGFycmF5IG9mIFNQUydzLiBBbmQgc2FtZSB0aGluZyBmb3IgUFBTLgo+Cj4g VGhlcmUncyBubyBkaWZmZXJlbmNlIGJldHdlZW4gYWN0aXZhdGVkIGFuZCBkZWFjdGl2YXRlZCBv bmVzCj4gdGhvdWdoLiBXaGF0IGlzIHRoZSB1c2UgY2FzZSBmb3IgdGhpcz8KClVobSwgdGhlcmUg aXMgb25seSBvbmUgZm9ybWF0LCBidXQgc28gdGhlcmUgaXMgb25seSBvbmUgYWN0aXZlClNQUy9Q UFMsIGlzbid0IGl0PwoKQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8ganVzdCBtYWtlIHRoZSBP VVRQVVQgZm9ybWF0IGEgZnVuY3Rpb24gb2YKdGhlIGN1cnJlbnRseSBzZXQgY29udHJvbHMsIHNv IHRoYXQgaXQgd291bGQgYWx3YXlzIG1hdGNoIHRoZSBhY3RpdmUKUFBTL1NQUywgd2l0aG91dCB0 aGUgYWJpbGl0eSBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIGNoYW5nZSBpdC4KCkkganVzdCB3YW50 IHRvIGF2b2lkIHRoZSBjYXNlIHdoZW4gdGhlIE9VVFBVVCBmb3JtYXQgY2FuIGJlIHNldApyYW5k b21seSB0byBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gaW4gdGhlIHN0cmVhbSBhbmQgYWxzbyBk cml2ZXJzCnJlYWRpbmcgcmFuZG9tbHkgdGhlIGZvcm1hdC1yZWxhdGVkIGluZm9ybWF0aW9uIHNv bWV0aW1lcyBmcm9tIHRoZQpjb250cm9scyBhbmQgc29tZXRpbWVzIGZyb20gdGhlIGZvcm1hdCBz dGF0ZS4KCkJlc3QgcmVnYXJkcywKVG9tYXN6CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==