From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f48.google.com (mail-qv1-f48.google.com [209.85.219.48]) (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 6F7CD2CA6 for ; Mon, 6 Dec 2021 20:46:16 +0000 (UTC) Received: by mail-qv1-f48.google.com with SMTP id p3so11047296qvj.9 for ; Mon, 06 Dec 2021 12:46:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=V5ht31CmrDEjqp/qYEf8A1hVZVzjFXE1LYcMsEhfUTnp2lqKo319IafWX3Dcx3ApEp D0wRlJsPcUJyTygG2hi6exk9//On83hj3De49ISI8HgEhW/B9ODbomhnsKyaDiPekhsf NDkQpENHvP9J9f3T9HjNWTWmWMpE/cmBsNVKEvu2n5Ak5civedcll6qGfAJ5FY1kk1MG cIOG1Oh1H2oClusorr2EGWdgmXpLBwB46xLArmZwSRVohxurrJZJeZWSwt5KZPGzcBtj BXz7yiWJN0aSdTZkmm/DO0+4hBzj0m8+sF1Tpc5KExjfaYtMYzPfAcKN7AWduP5VnFKx AuDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=oJnX3pKr48sL4Pxa6EHSEc78qyY4z/p1vrWBzlKwKOvsI8eNfHDocWMPKj4CZDVCkd x2k+Mwda4zi+2DN5G9vaBfrD0QQMAwDJCPsNxCpwrNRIZp2mUAYnUJ6TUv1UAt1zMEMe 8jFA0tjrrWl5zRm3aezCJCTVvuIMl+ZsJh0BET/UaCg+K5pB35WX9c/NKhiTyZTG99Wk I7APpU2c4Tt+zH14sbZyxJaUIGKXX4cD7cf4r9d8sqxCH9Wm9SI912M1fQBSr1yrfcnI 43K0Xea/cAZbtBRHgZ0DiTYGyJZKCmb3+VpVXMXTbefwqGycZB25uV2HbHovxItf7J3x eTGA== X-Gm-Message-State: AOAM530sBafzQKxn6AHcARTJTdtKzTb0oF5SxuuKsboIrCRJoZWUynz4 0kgmlRkf9LBeHVxYNZoiZgOvCA== X-Google-Smtp-Source: ABdhPJwP5y+kFu1sL9a01GyaGAB0zdPZvjVvfSCb0wJqWGHvNYA9xKKkcTq6Vs/P/7mKN+cYbOnT1w== X-Received: by 2002:a0c:c2cb:: with SMTP id c11mr39869334qvi.107.1638823575288; Mon, 06 Dec 2021 12:46:15 -0800 (PST) Received: from nicolas-tpx395.localdomain (mtl.collabora.ca. [66.171.169.34]) by smtp.gmail.com with ESMTPSA id j14sm7024511qkp.28.2021.12.06.12.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Dec 2021 12:46:14 -0800 (PST) Message-ID: <9b76d3499d9c34abe1b067573b9089a239302df7.camel@ndufresne.ca> Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs From: Nicolas Dufresne To: Lucas Stach , Tim Harvey Cc: Ezequiel Garcia , Adam Ford , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" Date: Mon, 06 Dec 2021 15:46:12 -0500 In-Reply-To: <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> <1403b14061883f746bda2998b2bf4a2676f9f328.camel@ndufresne.ca> <838c44e1eb1387c68a1b8b4da18e69ef6b5ad9c2.camel@ndufresne.ca> <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.1 (3.42.1-1.fc35) Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Le lundi 06 décembre 2021 à 10:20 +0100, Lucas Stach a écrit : > Am Freitag, dem 03.12.2021 um 14:37 -0500 schrieb Nicolas Dufresne: > > Le vendredi 03 décembre 2021 à 08:46 -0800, Tim Harvey a écrit : > > > On Thu, Dec 2, 2021 at 8:34 PM Nicolas Dufresne wrote: > > > > > > > > Le mardi 30 novembre 2021 à 11:28 -0800, Tim Harvey a écrit : > > > > > On Tue, Nov 30, 2021 at 6:00 AM Ezequiel Garcia > > > > > wrote: > > > > > > > > > > > > Hi Tim, > > > > > > > > > > > > On Mon, 29 Nov 2021 at 16:36, Tim Harvey wrote: > > > > > > > > > > > > > > On Mon, Nov 29, 2021 at 10:59 AM Adam Ford wrote: > > > > > > .. > > > > > > > > > > > > > > > > > > > > > > Adam, > > > > > > > > > > > > > > What deps did you install in order to get v4l2codecs building? I > > > > > > > installed libgudev-1.0-dev based on Nicolas' suggestion and rebuilt > > > > > > > (not sure if I needed to re-configure somehow) but there is still > > > > > > > nothing in build/subprojects/gst-plugins-bad/sys/v4l2codecs/. A 'meson > > > > > > > configure' tells me that v4l2codecs is set to 'auto' but I'm not sure > > > > > > > how to find out what dependencies are needed or what may be missing. > > > > > > > > > > > > > > > > > > > At least in my case (Centps-derivative), this is what I've done: > > > > > > > > > > > > ... > > > > > > gst-plugins-bad| Run-time dependency gudev-1.0 found: NO (tried > > > > > > pkgconfig and cmake) > > > > > > > > > > > > Installed gudev ... and then: > > > > > > > > > > > > ... > > > > > > gst-plugins-bad| Dependency gudev-1.0 found: YES 232 (cached) > > > > > > ... > > > > > > gst-plugins-bad 1.19.3.1 > > > > > > > > > > > > Plugins : accurip, adpcmdec, adpcmenc, aiff, asfmux, > > > > > > audiobuffersplit, audiofxbad, audiomixmatrix, audiolatency, > > > > > > audiovisualizers, autoconvert, bayer, > > > > > > camerabin, codecalpha, coloreffects, > > > > > > debugutilsbad, dvbsubenc, dvbsuboverlay, dvdspu, faceoverlay, > > > > > > festival, fieldanalysis, freeverb, frei0r, > > > > > > gaudieffects, gdp, geometrictransform, > > > > > > id3tag, inter, interlace, ivfparse, ivtc, jp2kdecimator, jpegformat, > > > > > > rfbsrc, midi, mpegpsdemux, > > > > > > mpegpsmux, mpegtsdemux, mpegtsmux, mxf, > > > > > > netsim, rtponvif, pcapparse, pnm, proxy, legacyrawparse, > > > > > > removesilence, rist, rtmp2, rtpmanagerbad, > > > > > > sdpelem, segmentclip, siren, smooth, > > > > > > speed, subenc, switchbin, timecode, transcode, videofiltersbad, > > > > > > videoframe_audiolevel, videoparsersbad, > > > > > > videosignal, vmnc, y4mdec, decklink, dvb, > > > > > > fbdevsink, ipcpipeline, nvcodec, shm, v4l2codecs, hls, sctp > > > > > > > > > > > > GStreamer current master build fails. It's a known issue which will be > > > > > > fixed today: > > > > > > > > > > > > [...] > > > > > > [8/9] Compiling C object > > > > > > subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p/gstv4l2codecvp9dec.c.o > > > > > > FAILED: subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p/gstv4l2codecvp9dec.c.o > > > > > > cc -Isubprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p > > > > > > -Isubprojects/gst-plugins-bad/sys/v4l2codecs > > > > > > -I../subprojects/gst-plugins-bad/sys/v4l2codecs > > > > > > -Isubprojects/gst-plugins-bad -I../subprojects/gst-plugins-bad > > > > > > -Isubprojects/gstreamer/libs -I../subprojects/gstreamer/libs > > > > > > -Isubprojects/gstreamer -I../subprojects/gstreamer > > > > > > -Isubprojects/gst-plugins-bad/gst-libs > > > > > > -I../subprojects/gst-plugins-bad/gst-libs > > > > > > -Isubprojects/gst-plugins-base/gst-libs > > > > > > -I../subprojects/gst-plugins-base/gst-libs -Isubprojects/orc > > > > > > -I../subprojects/orc -Isubprojects/gstreamer/gst > > > > > > -Isubprojects/gst-plugins-base/gst-libs/gst/video > > > > > > -Isubprojects/gst-plugins-base/gst-libs/gst/pbutils > > > > > > -Isubprojects/gst-plugins-base/gst-libs/gst/audio > > > > > > -Isubprojects/gst-plugins-base/gst-libs/gst/tag > > > > > > -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include > > > > > > -I/usr/include/gudev-1.0 -fdiagnostics-color=always > > > > > > -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O2 -g -fvisibility=hidden > > > > > > -fno-strict-aliasing -DG_DISABLE_DEPRECATED -Wmissing-prototypes > > > > > > -Wdeclaration-after-statement -Wold-style-definition > > > > > > -Wmissing-declarations -Wredundant-decls -Wwrite-strings -Wformat > > > > > > -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress > > > > > > -Wno-multichar -Wvla -Wpointer-arith -fPIC -pthread -DHAVE_CONFIG_H > > > > > > -MD -MQ subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p/gstv4l2codecvp9dec.c.o > > > > > > -MF subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p/gstv4l2codecvp9dec.c.o.d > > > > > > -o subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so.p/gstv4l2codecvp9dec.c.o > > > > > > -c ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c:92:3: > > > > > > error: unknown type name ‘grefcount’ > > > > > > grefcount ref_count; > > > > > > ^~~~~~~~~ > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c: In > > > > > > function ‘gst_v4l2_codec_vp9_dec_picture_data_new’: > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c:106:3: > > > > > > warning: implicit declaration of function ‘g_ref_count_init’; did you > > > > > > mean ‘g_cond_init’? [-Wimplicit-function-declaration] > > > > > > g_ref_count_init (&pic_data->ref_count); > > > > > > ^~~~~~~~~~~~~~~~ > > > > > > g_cond_init > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c: In > > > > > > function ‘gst_v4l2_codec_vp9_dec_picture_data_ref’: > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c:118:3: > > > > > > warning: implicit declaration of function ‘g_ref_count_inc’; did you > > > > > > mean ‘g_strv_contains’? [-Wimplicit-function-declaration] > > > > > > g_ref_count_inc (&data->ref_count); > > > > > > ^~~~~~~~~~~~~~~ > > > > > > g_strv_contains > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c: In > > > > > > function ‘gst_v4l2_codec_vp9_dec_picture_data_unref’: > > > > > > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c:125:7: > > > > > > warning: implicit declaration of function ‘g_ref_count_dec’ > > > > > > [-Wimplicit-function-declaration] > > > > > > if (g_ref_count_dec (&data->ref_count)) { > > > > > > ^~~~~~~~~~~~~~~ > > > > > > ninja: build stopped: subcommand failed. > > > > > > > > > > > > Hope this helps get you started! > > > > > > Ezequiel > > > > > > > > > > Ezequiel and Nicolas, > > > > > > > > > > Thanks - I did manage to get gstreamer 1.19.3 built successfully with > > > > > v4l2codecs finally by getting the correct dependencies. I've attempted > > > > > to software encode from another system and decode/display on the IMX8M > > > > > Mini but thus far have not been successful. > > > > > > > > > > I see that v4l2codecs plugin v4l2slh264dec/v4l2slmpeg2dec/v4l2slvp8dec > > > > > and these all can output video/x-raw NV12/YUY2 which kmssink should > > > > > accept so I'm attempting the following : > > > > > > > > > > # vp8 encode from x86 > > > > > gst-launch-1.0 -v videotestsrc ! video/x-raw,width=800,height=480 ! > > > > > vp8enc ! rtpvp8pay ! udpsink host=172.24.33.15 port=9001 > > > > > # vp8 decode on imx8mm@172.24.33.15 which has a 800x480 display > > > > > [gst-main] root@focal-venice:~/gstreamer/build# gst-launch-1.0 -v > > > > > udpsrc port=9001 caps = "application/x-rtp, media=(string)video, > > > > > clock-rate=(int)90000, encoding-name=(string)VP8, payload=(int)96, > > > > > ssrc=(uint)2745262155, timestamp-offset=(uint)2515032683, > > > > > seqnum-offset=(uint)19579, a-framerate=(string)30" ! rtpvp8depay ! > > > > > v4l2slvp8dec ! kmssink > > > > > Setting pipeline to PAUSED ... > > > > > Pipeline is live and does not need PREROLL ... > > > > > /GstPipeline:pipeline0/GstKMSSink:kmssink0: display-width = 800 > > > > > /GstPipeline:pipeline0/GstKMSSink:kmssink0: display-height = 480 > > > > > Pipeline is PREROLLED ... > > > > > Setting pipeline to PLAYING ... > > > > > /GstPipeline:pipeline0/GstUDPSrc:udpsrc0.GstPad:src: caps = > > > > > application/x-rtp, media=(string)video, clock-rate=(int)90000, > > > > > encoding-name=(string)VP8, payload=(int)96, ssrc=(uint)2745262155, > > > > > timestamp-offset=(uint)2515032683, seqnum-offset=(uint)19579, > > > > > a-framerate=(string)30 > > > > > New clock: GstSystemClock > > > > > /GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:sink: caps = > > > > > application/x-rtp, media=(string)video, clock-rate=(int)90000, > > > > > encoding-name=(string)VP8, payload=(int)96, ssrc=(uint)2745262155, > > > > > timestamp-offset=(uint)2515032683, seqnum-offset=(uint)19579, > > > > > a-framerate=(string)30 > > > > > /GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:src: caps = > > > > > video/x-vp8, framerate=(fraction)0/1, height=(int)480, width=(int)800, > > > > > profile=(string)0 > > > > > ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal > > > > > data stream error. > > > > > Additional debug info: > > > > > ../subprojects/gstreamer/libs/gst/base/gstbasesrc.c(3127): > > > > > gst_base_src_loop (): /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: > > > > > streaming stopped, reason not-negotiated (-4) > > > > > Execution ended after 0:00:02.076839644 > > > > > Setting pipeline to NULL ... > > > > > Freeing pipeline ... > > > > > > > > > > I'm getting the same thing when trying to use h264. > > > > > > > > > > I've never quite been able to grasp how to debug GStreamer's > > > > > negotiation issues. If I end with fakesink it appears to decode so it > > > > > must be the v4l2slvp8dec to kmssink. I tried forcing the pixel format > > > > > using 'v4l2slvp8dec ! "video/x-raw,format=(string)NV12" ! kmssink' but > > > > > I still get the negotiation error. > > > > > > > > > > What interrupts should I be seeing in /proc/interrupts? I don't see > > > > > anything vpu/hantro related there. > > > > > > > > > > I also want to make sure I have a basic understanding of the vpu > > > > > drivers and usersapce on the IMX8M Mini. The IMX6Q/DL that I'm more > > > > > familiar with has a vpu that is supported by the GStreamer video4linux > > > > > plugin which shows the following (on GStreamer 1.16.2): > > > > > v4l2jpegenc: V4L2 JPEG Encoder > > > > > v4l2jpegdec: V4L2 JPEG Decoder > > > > > v4l2h264enc: V4L2 H.264 Encoder > > > > > v4l2mpeg4enc: V4L2 MPEG4 Encoder > > > > > v4l2mpeg4dec: V4L2 MPEG4 Decoder > > > > > v4l2mpeg2dec: V4L2 MPEG2 Decoder > > > > > v4l2h264dec: V4L2 H264 Decoder > > > > > The IMX6Q/DL also has an IPU that has an M2M driver that provides the > > > > > following for scaling/colorspace conversion: > > > > > v4l2convert: V4L2 Video Converter > > > > > > > > > > I believe what I'm reading is that the IMX8M Mini Hantro codecs are > > > > > 'stateful' where more software is required to drive them and is > > > > > > > > 'stateless'. the rest is right. > > > > > > > > > supported by the newer v4l2codecs plugin. I haven't been able to > > > > > understand what kernel version/requirements the v4l2codecs plugin > > > > > users/requires. > > > > > > > > After H264 debacle with 5.9, 5.10 and 5.11 API break and GStreamer not getting > > > > enough release to support all of these we started merging support for CODECs > > > > only when the stable uAPI land. I made an exception for VP9 as it is already > > > > applied in the media tree and didn't want to miss 1.20 release. > > > > > > > > So to answer you question, it depends on when the CODEC uAPI landed. > > > > > > > > > > Ok, thanks for the explanation. > > > > > > > > > > > > > I'm also trying to understand how we can get scaling/colorspace > > > > > conversion on the IMX8M Mini. The IMX8M lacks an IPU... is there some > > > > > way to utilize scaling/colorspace conversion from the 2D GPU bound to > > > > > the etnaviv driver? > > > > > > > > The concept of the mini, is that you would be using th encoder for anything that > > > > isn't going to the display. So they only integrated the Hantro PP on the > > > > encoder. Unfortunately, you'll have to be patient for mainline stateless encoder > > > > support, we barely scratch the surface of this subject, but its being worked on. > > > > > > After some searching for Hantro PP I see that the IMXMQ (IMX8M > > > Dual/QuadLite/Quad) mentions Hantro PP. From the IMX8MDQLQRM section > > > 14.1.2.1 Decoder Features: > > > > > > Video post-processing features > > > - Frame rotation 90 degrees left/right > > > - Frame mirroring horizontally/vertically > > > - Frame cropping > > > - Frame conversion from YCbCr formats to 16-bit or 32-bit RGB formats > > > - Frame scaling with maximum up-scaling factor of 3 > > > - Two rectangular or alpha blending masks for output frame > > > > > > The post-processing features can be used in pipeline with the > > > decoder. The postprocessing features can also be used as stand-alone, > > > without performing any decoding > > > > > > > > > The above is under the VPU_G1 section and the same is not mentioned > > > for VPU_G2 and the IMX8MQ doesn't have encode support. Where do you > > > see that the IMX8MM has the Hantro PP on the H1? I know the TRM's lack > > > a lot of info so perhaps you know more about the internals than what > > > the TRM states. > > > > I've got told that by someone with contacts at NXP recently (in IRC). I haven't > > verified it though, it just made sense for the targeted use of th mini. Hantro > > G1 driver does not yet expose an M2M for the standalone mode of the PP, but > > shall be possible. Decode an PP cannot run concurrently though, so concurrent PP > > and decode will have big impact on performance. > > > > The G2 PP is different, but I *think* its always there. It's not doing much, > > linear NV12 (detiling from 4x4 linear tiles), and can scale down by factor of 2, > > 4 an 8. If there is more feature I'm not aware. > > > > > > > > I also found on a forum > > > (https://community.nxp.com/t5/i-MX-Processors/imx8mq-Hantro-G1-scaling/m-p/1285343) > > > that NXP's BSP doesn't use the Hantro for scaling (and likely not csc > > > either) and they use the GPU instead. I'm still unclear if/how you > > > could tap into the 2D GPU to use its scaling/conversion if it's bound > > > to the etnaviv driver. > > > > > > > Unlike the IMX8MQ, you don't have the option to output YUYV (packed yuv 4:2:2) > > > > which would satisfy the 2D GPU support hoold to the DMABuf import path. > > > > As I'm saying above, you can't, there is no NV12 support in that 2D GPU from > > what I was old by Etnaviv folks, only YUYV (4:2:2 packed). Shaders is the only > > option. > > > That's not correct. The 3D GPU can sample directly from YUYV, so it's > the optimal zero-copy format if you are going to use the video with the > 3D GPU. Most of the 2D GPU cores (and I think the one of the 8MM is no > exception) can handle planar formats, some of them only at reduced rate > of 1 Pixel/clock, instead of the usual 2 Pixels/clock. Isn't that enough to disqualify that as "optimal" ? > > > > > > > > When the display driver gets ready and upstream (it's been only 2-3 years now), > > > > you'll get linear NV12 support along with G2 compression support (this one is > > > > not supported by the GPU, so it will be tricky to expose in userland). I don't > > > > think the display support 4L4 tiles, but you GPU most likely can do with the > > > > right shared and texelFetch() or vulkan equivalent if that exist on that target. > > > > > > Do you mean the Samsung Exynos DRM driver (which doesn't yet have > > > support for IMX8MM) or drivers/gpu/drm/mxsfb? > > > > > > I'm currently using a pretty old patchset that adds IMX8MM support to > > > the drm/exynos driver. I'm way out of my realm when talking about > > > GPU/VPU and display drivers. > > > > Didn't know the mini was using Samsung display controller. Didn't even know that > > chip could exist outside of Exynos chips. On imx8mq, they have a NXP display > > chip and it is new. Downstream driver exist, and upstream driver is being worked > > on. > > The display controller on the 8MM is derived from the existing simple > eLCDIF controllers found on earlier i.MX SoCs. 8MQ is the only one with > the very capable DCSS display controller. In fact the 8MQ DCSS is > upstream, what is missing is the Cadence eDP/HDMI bridge driver. The > MIPI-DSI controller and PHY on the 8MM is Samsung IP. Thanks for clarification. > > Regards, > Lucas > 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 75348C433F5 for ; Mon, 6 Dec 2021 20:46:36 +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=XCdPG8EzXyN5T353YEoV804Uf4QZCjH82/gfg62TyKQ=; b=bn7RYsp6L02mrI pwR3y5l1z5Y7x/sz+zkC5f3givJsAzB6sFcyrfqnK4l0vbCm4l6v4ZoUQ6JjW+VYsnpmmLJgafubG L3o/vDBHzpS3vJMO/WKY/oe/2ow0KgsWKwhiYFeR55MdGIHu0zOM2npIAUl8/24CSBW5qXoiwE29K 6ec3KhXOZ43cJcuolaVczHOpH4+B8UvyHjmbKhrwxqgjoeWdpVvsUpHcxjtkxSn+nwBUxI3n9mWlW Dc+ahMWZ5OpVZhc2JaiSNcSSwiz4mxextmaoYh2PYbTXpQVpYpPPiYlK+jSzCma2BmMfbTKV5AL8Z U/E42Q3jdoq/1JO+F2Zw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1muKsZ-005h9C-Ud; Mon, 06 Dec 2021 20:46:31 +0000 Received: from mail-qv1-xf34.google.com ([2607:f8b0:4864:20::f34]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1muKsL-005h6q-Ey for linux-rockchip@lists.infradead.org; Mon, 06 Dec 2021 20:46:20 +0000 Received: by mail-qv1-xf34.google.com with SMTP id kl8so11079419qvb.3 for ; Mon, 06 Dec 2021 12:46:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=V5ht31CmrDEjqp/qYEf8A1hVZVzjFXE1LYcMsEhfUTnp2lqKo319IafWX3Dcx3ApEp D0wRlJsPcUJyTygG2hi6exk9//On83hj3De49ISI8HgEhW/B9ODbomhnsKyaDiPekhsf NDkQpENHvP9J9f3T9HjNWTWmWMpE/cmBsNVKEvu2n5Ak5civedcll6qGfAJ5FY1kk1MG cIOG1Oh1H2oClusorr2EGWdgmXpLBwB46xLArmZwSRVohxurrJZJeZWSwt5KZPGzcBtj BXz7yiWJN0aSdTZkmm/DO0+4hBzj0m8+sF1Tpc5KExjfaYtMYzPfAcKN7AWduP5VnFKx AuDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=agL5pfQ1GXAQiP6AfNqFkfAur+/sV/dO/hX9HtT0kDA7LVx3rPpgXqBSzW2wH3aWpR HHMCJ86lCienbt6vOnxirF06wY2qlgcBR3pHckgMp2bPvJItlmwXy+xYEU/zA1/HyvJD F6d4j2Wsy5KKp6QLoIenI3eSAweqpdvdHHvH22zuTbV01LhK4oWRDosFfi8K5Di13Uux DaI8kd+TstNqFZTJFWkPB+beAFTdUbIempnbcKgcA9PijCfnzxeOjdpB1uQ03T4iKfSy TGeUk8OE7Ivai9w4gCzLSUTjkHKkYrp7hq1SVjpMQQubutLIsVA5X0L3Obyq8DdCgE/S fulA== X-Gm-Message-State: AOAM533Yx1sPey/1qNWx+5Df1unND0k34Cu7TZMj2PQ7DxU8pfhnExDl 4eP3AhFK3oYin6pAVGpamfz+eA== X-Google-Smtp-Source: ABdhPJwP5y+kFu1sL9a01GyaGAB0zdPZvjVvfSCb0wJqWGHvNYA9xKKkcTq6Vs/P/7mKN+cYbOnT1w== X-Received: by 2002:a0c:c2cb:: with SMTP id c11mr39869334qvi.107.1638823575288; Mon, 06 Dec 2021 12:46:15 -0800 (PST) Received: from nicolas-tpx395.localdomain (mtl.collabora.ca. [66.171.169.34]) by smtp.gmail.com with ESMTPSA id j14sm7024511qkp.28.2021.12.06.12.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Dec 2021 12:46:14 -0800 (PST) Message-ID: <9b76d3499d9c34abe1b067573b9089a239302df7.camel@ndufresne.ca> Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs From: Nicolas Dufresne To: Lucas Stach , Tim Harvey Cc: Ezequiel Garcia , Adam Ford , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" Date: Mon, 06 Dec 2021 15:46:12 -0500 In-Reply-To: <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> <1403b14061883f746bda2998b2bf4a2676f9f328.camel@ndufresne.ca> <838c44e1eb1387c68a1b8b4da18e69ef6b5ad9c2.camel@ndufresne.ca> <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> User-Agent: Evolution 3.42.1 (3.42.1-1.fc35) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211206_124617_623706_67422C08 X-CRM114-Status: GOOD ( 33.32 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org TGUgbHVuZGkgMDYgZMOpY2VtYnJlIDIwMjEgw6AgMTA6MjAgKzAxMDAsIEx1Y2FzIFN0YWNoIGEg w6ljcml0wqA6Cj4gQW0gRnJlaXRhZywgZGVtIDAzLjEyLjIwMjEgdW0gMTQ6MzcgLTA1MDAgc2No cmllYiBOaWNvbGFzIER1ZnJlc25lOgo+ID4gTGUgdmVuZHJlZGkgMDMgZMOpY2VtYnJlIDIwMjEg w6AgMDg6NDYgLTA4MDAsIFRpbSBIYXJ2ZXkgYSDDqWNyaXTCoDoKPiA+ID4gT24gVGh1LCBEZWMg MiwgMjAyMSBhdCA4OjM0IFBNIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXNAbmR1ZnJlc25lLmNh PiB3cm90ZToKPiA+ID4gPiAKPiA+ID4gPiBMZSBtYXJkaSAzMCBub3ZlbWJyZSAyMDIxIMOgIDEx OjI4IC0wODAwLCBUaW0gSGFydmV5IGEgw6ljcml0IDoKPiA+ID4gPiA+IE9uIFR1ZSwgTm92IDMw LCAyMDIxIGF0IDY6MDAgQU0gRXplcXVpZWwgR2FyY2lhCj4gPiA+ID4gPiA8ZXplcXVpZWxAdmFu Z3VhcmRpYXN1ci5jb20uYXI+IHdyb3RlOgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSGkgVGlt LAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gT24gTW9uLCAyOSBOb3YgMjAyMSBhdCAxNjozNiwg VGltIEhhcnZleSA8dGhhcnZleUBnYXRld29ya3MuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiBPbiBNb24sIE5vdiAyOSwgMjAyMSBhdCAxMDo1OSBBTSBBZGFtIEZvcmQg PGFmb3JkMTczQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+IC4uCj4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBBZGFtLAo+ID4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+IFdoYXQgZGVwcyBkaWQgeW91IGluc3RhbGwgaW4gb3JkZXIgdG8gZ2V0IHY0bDJj b2RlY3MgYnVpbGRpbmc/IEkKPiA+ID4gPiA+ID4gPiBpbnN0YWxsZWQgbGliZ3VkZXYtMS4wLWRl diBiYXNlZCBvbiBOaWNvbGFzJyBzdWdnZXN0aW9uIGFuZCByZWJ1aWx0Cj4gPiA+ID4gPiA+ID4g KG5vdCBzdXJlIGlmIEkgbmVlZGVkIHRvIHJlLWNvbmZpZ3VyZSBzb21laG93KSBidXQgdGhlcmUg aXMgc3RpbGwKPiA+ID4gPiA+ID4gPiBub3RoaW5nIGluIGJ1aWxkL3N1YnByb2plY3RzL2dzdC1w bHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy8uIEEgJ21lc29uCj4gPiA+ID4gPiA+ID4gY29uZmln dXJlJyB0ZWxscyBtZSB0aGF0IHY0bDJjb2RlY3MgaXMgc2V0IHRvICdhdXRvJyBidXQgSSdtIG5v dCBzdXJlCj4gPiA+ID4gPiA+ID4gaG93IHRvIGZpbmQgb3V0IHdoYXQgZGVwZW5kZW5jaWVzIGFy ZSBuZWVkZWQgb3Igd2hhdCBtYXkgYmUgbWlzc2luZy4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+IEF0IGxlYXN0IGluIG15IGNhc2UgKENlbnRwcy1kZXJpdmF0aXZlKSwg dGhpcyBpcyB3aGF0IEkndmUgZG9uZToKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IC4uLgo+ID4g PiA+ID4gPiBnc3QtcGx1Z2lucy1iYWR8IFJ1bi10aW1lIGRlcGVuZGVuY3kgZ3VkZXYtMS4wIGZv dW5kOiBOTyAodHJpZWQKPiA+ID4gPiA+ID4gcGtnY29uZmlnIGFuZCBjbWFrZSkKPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+IEluc3RhbGxlZCBndWRldiAuLi4gYW5kIHRoZW46Cj4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiAuLi4KPiA+ID4gPiA+ID4gZ3N0LXBsdWdpbnMtYmFkfCBEZXBlbmRlbmN5 IGd1ZGV2LTEuMCBmb3VuZDogWUVTIDIzMiAoY2FjaGVkKQo+ID4gPiA+ID4gPiAuLi4KPiA+ID4g PiA+ID4gZ3N0LXBsdWdpbnMtYmFkIDEuMTkuMy4xCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAg ICAgUGx1Z2lucyAgICAgICAgICAgICAgIDogYWNjdXJpcCwgYWRwY21kZWMsIGFkcGNtZW5jLCBh aWZmLCBhc2ZtdXgsCj4gPiA+ID4gPiA+IGF1ZGlvYnVmZmVyc3BsaXQsIGF1ZGlvZnhiYWQsIGF1 ZGlvbWl4bWF0cml4LCBhdWRpb2xhdGVuY3ksCj4gPiA+ID4gPiA+IGF1ZGlvdmlzdWFsaXplcnMs IGF1dG9jb252ZXJ0LCBiYXllciwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhbWVyYWJpbiwgY29kZWNhbHBoYSwgY29sb3JlZmZlY3RzLAo+ID4gPiA+ID4gPiBkZWJ1 Z3V0aWxzYmFkLCBkdmJzdWJlbmMsIGR2YnN1Ym92ZXJsYXksIGR2ZHNwdSwgZmFjZW92ZXJsYXks Cj4gPiA+ID4gPiA+IGZlc3RpdmFsLCBmaWVsZGFuYWx5c2lzLCBmcmVldmVyYiwgZnJlaTByLAo+ ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F1ZGllZmZlY3RzLCBnZHAs IGdlb21ldHJpY3RyYW5zZm9ybSwKPiA+ID4gPiA+ID4gaWQzdGFnLCBpbnRlciwgaW50ZXJsYWNl LCBpdmZwYXJzZSwgaXZ0YywganAya2RlY2ltYXRvciwganBlZ2Zvcm1hdCwKPiA+ID4gPiA+ID4g cmZic3JjLCBtaWRpLCBtcGVncHNkZW11eCwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1wZWdwc211eCwgbXBlZ3RzZGVtdXgsIG1wZWd0c211eCwgbXhmLAo+ID4gPiA+ ID4gPiBuZXRzaW0sIHJ0cG9udmlmLCBwY2FwcGFyc2UsIHBubSwgcHJveHksIGxlZ2FjeXJhd3Bh cnNlLAo+ID4gPiA+ID4gPiByZW1vdmVzaWxlbmNlLCByaXN0LCBydG1wMiwgcnRwbWFuYWdlcmJh ZCwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkcGVsZW0sIHNlZ21l bnRjbGlwLCBzaXJlbiwgc21vb3RoLAo+ID4gPiA+ID4gPiBzcGVlZCwgc3ViZW5jLCBzd2l0Y2hi aW4sIHRpbWVjb2RlLCB0cmFuc2NvZGUsIHZpZGVvZmlsdGVyc2JhZCwKPiA+ID4gPiA+ID4gdmlk ZW9mcmFtZV9hdWRpb2xldmVsLCB2aWRlb3BhcnNlcnNiYWQsCj4gPiA+ID4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2aWRlb3NpZ25hbCwgdm1uYywgeTRtZGVjLCBkZWNrbGluaywg ZHZiLAo+ID4gPiA+ID4gPiBmYmRldnNpbmssIGlwY3BpcGVsaW5lLCBudmNvZGVjLCBzaG0sIHY0 bDJjb2RlY3MsIGhscywgc2N0cAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gR1N0cmVhbWVyIGN1 cnJlbnQgbWFzdGVyIGJ1aWxkIGZhaWxzLiBJdCdzIGEga25vd24gaXNzdWUgd2hpY2ggd2lsbCBi ZQo+ID4gPiA+ID4gPiBmaXhlZCB0b2RheToKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFsuLi5d Cj4gPiA+ID4gPiA+IFs4LzldIENvbXBpbGluZyBDIG9iamVjdAo+ID4gPiA+ID4gPiBzdWJwcm9q ZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5w L2dzdHY0bDJjb2RlY3ZwOWRlYy5jLm8KPiA+ID4gPiA+ID4gRkFJTEVEOiBzdWJwcm9qZWN0cy9n c3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wL2dzdHY0 bDJjb2RlY3ZwOWRlYy5jLm8KPiA+ID4gPiA+ID4gY2MgLUlzdWJwcm9qZWN0cy9nc3QtcGx1Z2lu cy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wCj4gPiA+ID4gPiA+IC1J c3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkL3N5cy92NGwyY29kZWNzCj4gPiA+ID4gPiA+IC1J Li4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkL3N5cy92NGwyY29kZWNzCj4gPiA+ID4gPiA+ IC1Jc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkIC1JLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdp bnMtYmFkCj4gPiA+ID4gPiA+IC1Jc3VicHJvamVjdHMvZ3N0cmVhbWVyL2xpYnMgLUkuLi9zdWJw cm9qZWN0cy9nc3RyZWFtZXIvbGlicwo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dzdHJlYW1l ciAtSS4uL3N1YnByb2plY3RzL2dzdHJlYW1lcgo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dz dC1wbHVnaW5zLWJhZC9nc3QtbGlicwo+ID4gPiA+ID4gPiAtSS4uL3N1YnByb2plY3RzL2dzdC1w bHVnaW5zLWJhZC9nc3QtbGlicwo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dzdC1wbHVnaW5z LWJhc2UvZ3N0LWxpYnMKPiA+ID4gPiA+ID4gLUkuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1i YXNlL2dzdC1saWJzIC1Jc3VicHJvamVjdHMvb3JjCj4gPiA+ID4gPiA+IC1JLi4vc3VicHJvamVj dHMvb3JjIC1Jc3VicHJvamVjdHMvZ3N0cmVhbWVyL2dzdAo+ID4gPiA+ID4gPiAtSXN1YnByb2pl Y3RzL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0L3ZpZGVvCj4gPiA+ID4gPiA+IC1Jc3Vi cHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvcGJ1dGlscwo+ID4gPiA+ID4g PiAtSXN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0L2F1ZGlvCj4gPiA+ ID4gPiA+IC1Jc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvdGFnCj4g PiA+ID4gPiA+IC1JL3Vzci9pbmNsdWRlL2dsaWItMi4wIC1JL3Vzci9saWI2NC9nbGliLTIuMC9p bmNsdWRlCj4gPiA+ID4gPiA+IC1JL3Vzci9pbmNsdWRlL2d1ZGV2LTEuMCAtZmRpYWdub3N0aWNz LWNvbG9yPWFsd2F5cwo+ID4gPiA+ID4gPiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1XYWxsIC1X aW52YWxpZC1wY2ggLU8yIC1nIC1mdmlzaWJpbGl0eT1oaWRkZW4KPiA+ID4gPiA+ID4gLWZuby1z dHJpY3QtYWxpYXNpbmcgLURHX0RJU0FCTEVfREVQUkVDQVRFRCAtV21pc3NpbmctcHJvdG90eXBl cwo+ID4gPiA+ID4gPiAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV29sZC1zdHlsZS1k ZWZpbml0aW9uCj4gPiA+ID4gPiA+IC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdyZWR1bmRhbnQt ZGVjbHMgLVd3cml0ZS1zdHJpbmdzIC1XZm9ybWF0Cj4gPiA+ID4gPiA+IC1XZm9ybWF0LXNlY3Vy aXR5IC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdhZGRyZXNzCj4gPiA+ID4g PiA+IC1Xbm8tbXVsdGljaGFyIC1XdmxhIC1XcG9pbnRlci1hcml0aCAtZlBJQyAtcHRocmVhZCAt REhBVkVfQ09ORklHX0gKPiA+ID4gPiA+ID4gLU1EIC1NUSBzdWJwcm9qZWN0cy9nc3QtcGx1Z2lu cy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wL2dzdHY0bDJjb2RlY3Zw OWRlYy5jLm8KPiA+ID4gPiA+ID4gLU1GIHN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMv djRsMmNvZGVjcy9saWJnc3R2NGwyY29kZWNzLnNvLnAvZ3N0djRsMmNvZGVjdnA5ZGVjLmMuby5k Cj4gPiA+ID4gPiA+IC1vIHN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVj cy9saWJnc3R2NGwyY29kZWNzLnNvLnAvZ3N0djRsMmNvZGVjdnA5ZGVjLmMubwo+ID4gPiA+ID4g PiAtYyAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRs MmNvZGVjdnA5ZGVjLmMKPiA+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFk L3N5cy92NGwyY29kZWNzL2dzdHY0bDJjb2RlY3ZwOWRlYy5jOjkyOjM6Cj4gPiA+ID4gPiA+IGVy cm9yOiB1bmtub3duIHR5cGUgbmFtZSDigJhncmVmY291bnTigJkKPiA+ID4gPiA+ID4gICAgZ3Jl ZmNvdW50IHJlZl9jb3VudDsKPiA+ID4gPiA+ID4gICAgXn5+fn5+fn5+Cj4gPiA+ID4gPiA+IC4u L3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2 cDlkZWMuYzogSW4KPiA+ID4gPiA+ID4gZnVuY3Rpb24g4oCYZ3N0X3Y0bDJfY29kZWNfdnA5X2Rl Y19waWN0dXJlX2RhdGFfbmV34oCZOgo+ID4gPiA+ID4gPiAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1 Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRsMmNvZGVjdnA5ZGVjLmM6MTA2OjM6Cj4gPiA+ ID4gPiA+IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uIOKAmGdfcmVm X2NvdW50X2luaXTigJk7IGRpZCB5b3UKPiA+ID4gPiA+ID4gbWVhbiDigJhnX2NvbmRfaW5pdOKA mT8gWy1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCj4gPiA+ID4gPiA+ICAgIGdfcmVm X2NvdW50X2luaXQgKCZwaWNfZGF0YS0+cmVmX2NvdW50KTsKPiA+ID4gPiA+ID4gICAgXn5+fn5+ fn5+fn5+fn5+fgo+ID4gPiA+ID4gPiAgICBnX2NvbmRfaW5pdAo+ID4gPiA+ID4gPiAuLi9zdWJw cm9qZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRsMmNvZGVjdnA5ZGVj LmM6IEluCj4gPiA+ID4gPiA+IGZ1bmN0aW9uIOKAmGdzdF92NGwyX2NvZGVjX3ZwOV9kZWNfcGlj dHVyZV9kYXRhX3JlZuKAmToKPiA+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMt YmFkL3N5cy92NGwyY29kZWNzL2dzdHY0bDJjb2RlY3ZwOWRlYy5jOjExODozOgo+ID4gPiA+ID4g PiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiDigJhnX3JlZl9jb3Vu dF9pbmPigJk7IGRpZCB5b3UKPiA+ID4gPiA+ID4gbWVhbiDigJhnX3N0cnZfY29udGFpbnPigJk/ IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+ID4gPiA+ID4gPiAgICBnX3JlZl9j b3VudF9pbmMgKCZkYXRhLT5yZWZfY291bnQpOwo+ID4gPiA+ID4gPiAgICBefn5+fn5+fn5+fn5+ fn4KPiA+ID4gPiA+ID4gICAgZ19zdHJ2X2NvbnRhaW5zCj4gPiA+ID4gPiA+IC4uL3N1YnByb2pl Y3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2cDlkZWMuYzog SW4KPiA+ID4gPiA+ID4gZnVuY3Rpb24g4oCYZ3N0X3Y0bDJfY29kZWNfdnA5X2RlY19waWN0dXJl X2RhdGFfdW5yZWbigJk6Cj4gPiA+ID4gPiA+IC4uL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJh ZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2cDlkZWMuYzoxMjU6NzoKPiA+ID4gPiA+ID4g d2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24g4oCYZ19yZWZfY291bnRf ZGVj4oCZCj4gPiA+ID4gPiA+IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+ID4g PiA+ID4gPiAgICBpZiAoZ19yZWZfY291bnRfZGVjICgmZGF0YS0+cmVmX2NvdW50KSkgewo+ID4g PiA+ID4gPiAgICAgICAgXn5+fn5+fn5+fn5+fn5+Cj4gPiA+ID4gPiA+IG5pbmphOiBidWlsZCBz dG9wcGVkOiBzdWJjb21tYW5kIGZhaWxlZC4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IEhvcGUg dGhpcyBoZWxwcyBnZXQgeW91IHN0YXJ0ZWQhCj4gPiA+ID4gPiA+IEV6ZXF1aWVsCj4gPiA+ID4g PiAKPiA+ID4gPiA+IEV6ZXF1aWVsIGFuZCBOaWNvbGFzLAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBU aGFua3MgLSBJIGRpZCBtYW5hZ2UgdG8gZ2V0IGdzdHJlYW1lciAxLjE5LjMgYnVpbHQgc3VjY2Vz c2Z1bGx5IHdpdGgKPiA+ID4gPiA+IHY0bDJjb2RlY3MgZmluYWxseSBieSBnZXR0aW5nIHRoZSBj b3JyZWN0IGRlcGVuZGVuY2llcy4gSSd2ZSBhdHRlbXB0ZWQKPiA+ID4gPiA+IHRvIHNvZnR3YXJl IGVuY29kZSBmcm9tIGFub3RoZXIgc3lzdGVtIGFuZCBkZWNvZGUvZGlzcGxheSBvbiB0aGUgSU1Y OE0KPiA+ID4gPiA+IE1pbmkgYnV0IHRodXMgZmFyIGhhdmUgbm90IGJlZW4gc3VjY2Vzc2Z1bC4K PiA+ID4gPiA+IAo+ID4gPiA+ID4gSSBzZWUgdGhhdCB2NGwyY29kZWNzIHBsdWdpbiB2NGwyc2xo MjY0ZGVjL3Y0bDJzbG1wZWcyZGVjL3Y0bDJzbHZwOGRlYwo+ID4gPiA+ID4gYW5kIHRoZXNlIGFs bCBjYW4gb3V0cHV0IHZpZGVvL3gtcmF3IE5WMTIvWVVZMiB3aGljaCBrbXNzaW5rIHNob3VsZAo+ ID4gPiA+ID4gYWNjZXB0IHNvIEknbSBhdHRlbXB0aW5nIHRoZSBmb2xsb3dpbmcgOgo+ID4gPiA+ ID4gCj4gPiA+ID4gPiAjIHZwOCBlbmNvZGUgZnJvbSB4ODYKPiA+ID4gPiA+IGdzdC1sYXVuY2gt MS4wIC12IHZpZGVvdGVzdHNyYyAhIHZpZGVvL3gtcmF3LHdpZHRoPTgwMCxoZWlnaHQ9NDgwICEK PiA+ID4gPiA+IHZwOGVuYyAhIHJ0cHZwOHBheSAhIHVkcHNpbmsgaG9zdD0xNzIuMjQuMzMuMTUg cG9ydD05MDAxCj4gPiA+ID4gPiAjIHZwOCBkZWNvZGUgb24gaW14OG1tQDE3Mi4yNC4zMy4xNSB3 aGljaCBoYXMgYSA4MDB4NDgwIGRpc3BsYXkKPiA+ID4gPiA+IFtnc3QtbWFpbl0gcm9vdEBmb2Nh bC12ZW5pY2U6fi9nc3RyZWFtZXIvYnVpbGQjIGdzdC1sYXVuY2gtMS4wIC12Cj4gPiA+ID4gPiB1 ZHBzcmMgcG9ydD05MDAxIGNhcHMgPSAiYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcp dmlkZW8sCj4gPiA+ID4gPiBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0 cmluZylWUDgsIHBheWxvYWQ9KGludCk5NiwKPiA+ID4gPiA+IHNzcmM9KHVpbnQpMjc0NTI2MjE1 NSwgdGltZXN0YW1wLW9mZnNldD0odWludCkyNTE1MDMyNjgzLAo+ID4gPiA+ID4gc2VxbnVtLW9m ZnNldD0odWludCkxOTU3OSwgYS1mcmFtZXJhdGU9KHN0cmluZykzMCIgISBydHB2cDhkZXBheSAh Cj4gPiA+ID4gPiB2NGwyc2x2cDhkZWMgISBrbXNzaW5rCj4gPiA+ID4gPiBTZXR0aW5nIHBpcGVs aW5lIHRvIFBBVVNFRCAuLi4KPiA+ID4gPiA+IFBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90 IG5lZWQgUFJFUk9MTCAuLi4KPiA+ID4gPiA+IC9Hc3RQaXBlbGluZTpwaXBlbGluZTAvR3N0S01T U2luazprbXNzaW5rMDogZGlzcGxheS13aWR0aCA9IDgwMAo+ID4gPiA+ID4gL0dzdFBpcGVsaW5l OnBpcGVsaW5lMC9Hc3RLTVNTaW5rOmttc3NpbmswOiBkaXNwbGF5LWhlaWdodCA9IDQ4MAo+ID4g PiA+ID4gUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLgo+ID4gPiA+ID4gU2V0dGluZyBwaXBlbGlu ZSB0byBQTEFZSU5HIC4uLgo+ID4gPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RVRFBT cmM6dWRwc3JjMC5Hc3RQYWQ6c3JjOiBjYXBzID0KPiA+ID4gPiA+IGFwcGxpY2F0aW9uL3gtcnRw LCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsCj4gPiA+ID4gPiBl bmNvZGluZy1uYW1lPShzdHJpbmcpVlA4LCBwYXlsb2FkPShpbnQpOTYsIHNzcmM9KHVpbnQpMjc0 NTI2MjE1NSwKPiA+ID4gPiA+IHRpbWVzdGFtcC1vZmZzZXQ9KHVpbnQpMjUxNTAzMjY4Mywgc2Vx bnVtLW9mZnNldD0odWludCkxOTU3OSwKPiA+ID4gPiA+IGEtZnJhbWVyYXRlPShzdHJpbmcpMzAK PiA+ID4gPiA+IE5ldyBjbG9jazogR3N0U3lzdGVtQ2xvY2sKPiA+ID4gPiA+IC9Hc3RQaXBlbGlu ZTpwaXBlbGluZTAvR3N0UnRwVlA4RGVwYXk6cnRwdnA4ZGVwYXkwLkdzdFBhZDpzaW5rOiBjYXBz ID0KPiA+ID4gPiA+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9j ay1yYXRlPShpbnQpOTAwMDAsCj4gPiA+ID4gPiBlbmNvZGluZy1uYW1lPShzdHJpbmcpVlA4LCBw YXlsb2FkPShpbnQpOTYsIHNzcmM9KHVpbnQpMjc0NTI2MjE1NSwKPiA+ID4gPiA+IHRpbWVzdGFt cC1vZmZzZXQ9KHVpbnQpMjUxNTAzMjY4Mywgc2VxbnVtLW9mZnNldD0odWludCkxOTU3OSwKPiA+ ID4gPiA+IGEtZnJhbWVyYXRlPShzdHJpbmcpMzAKPiA+ID4gPiA+IC9Hc3RQaXBlbGluZTpwaXBl bGluZTAvR3N0UnRwVlA4RGVwYXk6cnRwdnA4ZGVwYXkwLkdzdFBhZDpzcmM6IGNhcHMgPQo+ID4g PiA+ID4gdmlkZW8veC12cDgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMC8xLCBoZWlnaHQ9KGludCk0 ODAsIHdpZHRoPShpbnQpODAwLAo+ID4gPiA+ID4gcHJvZmlsZT0oc3RyaW5nKTAKPiA+ID4gPiA+ IEVSUk9SOiBmcm9tIGVsZW1lbnQgL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RVRFBTcmM6dWRw c3JjMDogSW50ZXJuYWwKPiA+ID4gPiA+IGRhdGEgc3RyZWFtIGVycm9yLgo+ID4gPiA+ID4gQWRk aXRpb25hbCBkZWJ1ZyBpbmZvOgo+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0cmVhbWVyL2xp YnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jKDMxMjcpOgo+ID4gPiA+ID4gZ3N0X2Jhc2Vfc3JjX2xv b3AgKCk6IC9Hc3RQaXBlbGluZTpwaXBlbGluZTAvR3N0VURQU3JjOnVkcHNyYzA6Cj4gPiA+ID4g PiBzdHJlYW1pbmcgc3RvcHBlZCwgcmVhc29uIG5vdC1uZWdvdGlhdGVkICgtNCkKPiA+ID4gPiA+ IEV4ZWN1dGlvbiBlbmRlZCBhZnRlciAwOjAwOjAyLjA3NjgzOTY0NAo+ID4gPiA+ID4gU2V0dGlu ZyBwaXBlbGluZSB0byBOVUxMIC4uLgo+ID4gPiA+ID4gRnJlZWluZyBwaXBlbGluZSAuLi4KPiA+ ID4gPiA+IAo+ID4gPiA+ID4gSSdtIGdldHRpbmcgdGhlIHNhbWUgdGhpbmcgd2hlbiB0cnlpbmcg dG8gdXNlIGgyNjQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkndmUgbmV2ZXIgcXVpdGUgYmVlbiBh YmxlIHRvIGdyYXNwIGhvdyB0byBkZWJ1ZyBHU3RyZWFtZXIncwo+ID4gPiA+ID4gbmVnb3RpYXRp b24gaXNzdWVzLiBJZiBJIGVuZCB3aXRoIGZha2VzaW5rIGl0IGFwcGVhcnMgdG8gZGVjb2RlIHNv IGl0Cj4gPiA+ID4gPiBtdXN0IGJlIHRoZSB2NGwyc2x2cDhkZWMgdG8ga21zc2luay4gSSB0cmll ZCBmb3JjaW5nIHRoZSBwaXhlbCBmb3JtYXQKPiA+ID4gPiA+IHVzaW5nICd2NGwyc2x2cDhkZWMg ISAidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpTlYxMiIgISBrbXNzaW5rJyBidXQKPiA+ID4g PiA+IEkgc3RpbGwgZ2V0IHRoZSBuZWdvdGlhdGlvbiBlcnJvci4KPiA+ID4gPiA+IAo+ID4gPiA+ ID4gV2hhdCBpbnRlcnJ1cHRzIHNob3VsZCBJIGJlIHNlZWluZyBpbiAvcHJvYy9pbnRlcnJ1cHRz PyBJIGRvbid0IHNlZQo+ID4gPiA+ID4gYW55dGhpbmcgdnB1L2hhbnRybyByZWxhdGVkIHRoZXJl Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEg YmFzaWMgdW5kZXJzdGFuZGluZyBvZiB0aGUgdnB1Cj4gPiA+ID4gPiBkcml2ZXJzIGFuZCB1c2Vy c2FwY2Ugb24gdGhlIElNWDhNIE1pbmkuIFRoZSBJTVg2US9ETCB0aGF0IEknbSBtb3JlCj4gPiA+ ID4gPiBmYW1pbGlhciB3aXRoIGhhcyBhIHZwdSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgR1N0 cmVhbWVyIHZpZGVvNGxpbnV4Cj4gPiA+ID4gPiBwbHVnaW4gd2hpY2ggc2hvd3MgdGhlIGZvbGxv d2luZyAob24gR1N0cmVhbWVyIDEuMTYuMik6Cj4gPiA+ID4gPiAgIHY0bDJqcGVnZW5jOiBWNEwy IEpQRUcgRW5jb2Rlcgo+ID4gPiA+ID4gICB2NGwyanBlZ2RlYzogVjRMMiBKUEVHIERlY29kZXIK PiA+ID4gPiA+ICAgdjRsMmgyNjRlbmM6IFY0TDIgSC4yNjQgRW5jb2Rlcgo+ID4gPiA+ID4gICB2 NGwybXBlZzRlbmM6IFY0TDIgTVBFRzQgRW5jb2Rlcgo+ID4gPiA+ID4gICB2NGwybXBlZzRkZWM6 IFY0TDIgTVBFRzQgRGVjb2Rlcgo+ID4gPiA+ID4gICB2NGwybXBlZzJkZWM6IFY0TDIgTVBFRzIg RGVjb2Rlcgo+ID4gPiA+ID4gICB2NGwyaDI2NGRlYzogVjRMMiBIMjY0IERlY29kZXIKPiA+ID4g PiA+IFRoZSBJTVg2US9ETCBhbHNvIGhhcyBhbiBJUFUgdGhhdCBoYXMgYW4gTTJNIGRyaXZlciB0 aGF0IHByb3ZpZGVzIHRoZQo+ID4gPiA+ID4gZm9sbG93aW5nIGZvciBzY2FsaW5nL2NvbG9yc3Bh Y2UgY29udmVyc2lvbjoKPiA+ID4gPiA+ICAgdjRsMmNvbnZlcnQ6IFY0TDIgVmlkZW8gQ29udmVy dGVyCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkgYmVsaWV2ZSB3aGF0IEknbSByZWFkaW5nIGlzIHRo YXQgdGhlIElNWDhNIE1pbmkgSGFudHJvIGNvZGVjcyBhcmUKPiA+ID4gPiA+ICdzdGF0ZWZ1bCcg d2hlcmUgbW9yZSBzb2Z0d2FyZSBpcyByZXF1aXJlZCB0byBkcml2ZSB0aGVtIGFuZCBpcwo+ID4g PiA+IAo+ID4gPiA+ICdzdGF0ZWxlc3MnLiB0aGUgcmVzdCBpcyByaWdodC4KPiA+ID4gPiAKPiA+ ID4gPiA+IHN1cHBvcnRlZCBieSB0aGUgbmV3ZXIgdjRsMmNvZGVjcyBwbHVnaW4uIEkgaGF2ZW4n dCBiZWVuIGFibGUgdG8KPiA+ID4gPiA+IHVuZGVyc3RhbmQgd2hhdCBrZXJuZWwgdmVyc2lvbi9y ZXF1aXJlbWVudHMgdGhlIHY0bDJjb2RlY3MgcGx1Z2luCj4gPiA+ID4gPiB1c2Vycy9yZXF1aXJl cy4KPiA+ID4gPiAKPiA+ID4gPiBBZnRlciBIMjY0IGRlYmFjbGUgd2l0aCA1LjksIDUuMTAgYW5k IDUuMTEgQVBJIGJyZWFrIGFuZCBHU3RyZWFtZXIgbm90IGdldHRpbmcKPiA+ID4gPiBlbm91Z2gg cmVsZWFzZSB0byBzdXBwb3J0IGFsbCBvZiB0aGVzZSB3ZSBzdGFydGVkIG1lcmdpbmcgc3VwcG9y dCBmb3IgQ09ERUNzCj4gPiA+ID4gb25seSB3aGVuIHRoZSBzdGFibGUgdUFQSSBsYW5kLiBJIG1h ZGUgYW4gZXhjZXB0aW9uIGZvciBWUDkgYXMgaXQgaXMgYWxyZWFkeQo+ID4gPiA+IGFwcGxpZWQg aW4gdGhlIG1lZGlhIHRyZWUgYW5kIGRpZG4ndCB3YW50IHRvIG1pc3MgMS4yMCByZWxlYXNlLgo+ ID4gPiA+IAo+ID4gPiA+IFNvIHRvIGFuc3dlciB5b3UgcXVlc3Rpb24sIGl0IGRlcGVuZHMgb24g d2hlbiB0aGUgQ09ERUMgdUFQSSBsYW5kZWQuCj4gPiA+ID4gCj4gPiA+IAo+ID4gPiBPaywgdGhh bmtzIGZvciB0aGUgZXhwbGFuYXRpb24uCj4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJJ20g YWxzbyB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgd2UgY2FuIGdldCBzY2FsaW5nL2NvbG9yc3Bh Y2UKPiA+ID4gPiA+IGNvbnZlcnNpb24gb24gdGhlIElNWDhNIE1pbmkuIFRoZSBJTVg4TSBsYWNr cyBhbiBJUFUuLi4gaXMgdGhlcmUgc29tZQo+ID4gPiA+ID4gd2F5IHRvIHV0aWxpemUgc2NhbGlu Zy9jb2xvcnNwYWNlIGNvbnZlcnNpb24gZnJvbSB0aGUgMkQgR1BVIGJvdW5kIHRvCj4gPiA+ID4g PiB0aGUgZXRuYXZpdiBkcml2ZXI/Cj4gPiA+ID4gCj4gPiA+ID4gVGhlIGNvbmNlcHQgb2YgdGhl IG1pbmksIGlzIHRoYXQgeW91IHdvdWxkIGJlIHVzaW5nIHRoIGVuY29kZXIgZm9yIGFueXRoaW5n IHRoYXQKPiA+ID4gPiBpc24ndCBnb2luZyB0byB0aGUgZGlzcGxheS4gU28gdGhleSBvbmx5IGlu dGVncmF0ZWQgdGhlIEhhbnRybyBQUCBvbiB0aGUKPiA+ID4gPiBlbmNvZGVyLiBVbmZvcnR1bmF0 ZWx5LCB5b3UnbGwgaGF2ZSB0byBiZSBwYXRpZW50IGZvciBtYWlubGluZSBzdGF0ZWxlc3MgZW5j b2Rlcgo+ID4gPiA+IHN1cHBvcnQsIHdlIGJhcmVseSBzY3JhdGNoIHRoZSBzdXJmYWNlIG9mIHRo aXMgc3ViamVjdCwgYnV0IGl0cyBiZWluZyB3b3JrZWQgb24uCj4gPiA+IAo+ID4gPiBBZnRlciBz b21lIHNlYXJjaGluZyBmb3IgSGFudHJvIFBQIEkgc2VlIHRoYXQgdGhlIElNWE1RIChJTVg4TQo+ ID4gPiBEdWFsL1F1YWRMaXRlL1F1YWQpIG1lbnRpb25zIEhhbnRybyBQUC4gRnJvbSB0aGUgSU1Y OE1EUUxRUk0gc2VjdGlvbgo+ID4gPiAxNC4xLjIuMSBEZWNvZGVyIEZlYXR1cmVzOgo+ID4gPiA8 cXVvdGU+Cj4gPiA+IFZpZGVvIHBvc3QtcHJvY2Vzc2luZyBmZWF0dXJlcwo+ID4gPiAgLSBGcmFt ZSByb3RhdGlvbiA5MCBkZWdyZWVzIGxlZnQvcmlnaHQKPiA+ID4gIC0gRnJhbWUgbWlycm9yaW5n IGhvcml6b250YWxseS92ZXJ0aWNhbGx5Cj4gPiA+ICAtIEZyYW1lIGNyb3BwaW5nCj4gPiA+ICAt IEZyYW1lIGNvbnZlcnNpb24gZnJvbSBZQ2JDciBmb3JtYXRzIHRvIDE2LWJpdCBvciAzMi1iaXQg UkdCIGZvcm1hdHMKPiA+ID4gIC0gRnJhbWUgc2NhbGluZyB3aXRoIG1heGltdW0gdXAtc2NhbGlu ZyBmYWN0b3Igb2YgMwo+ID4gPiAgLSBUd28gcmVjdGFuZ3VsYXIgb3IgYWxwaGEgYmxlbmRpbmcg bWFza3MgZm9yIG91dHB1dCBmcmFtZQo+ID4gPiAKPiA+ID4gIFRoZSBwb3N0LXByb2Nlc3Npbmcg ZmVhdHVyZXMgY2FuIGJlIHVzZWQgaW4gcGlwZWxpbmUgd2l0aCB0aGUKPiA+ID4gZGVjb2Rlci4g VGhlIHBvc3Rwcm9jZXNzaW5nIGZlYXR1cmVzIGNhbiBhbHNvIGJlIHVzZWQgYXMgc3RhbmQtYWxv bmUsCj4gPiA+IHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgZGVjb2RpbmcKPiA+ID4gPC9xdW90ZT4K PiA+ID4gCj4gPiA+IFRoZSBhYm92ZSBpcyB1bmRlciB0aGUgVlBVX0cxIHNlY3Rpb24gYW5kIHRo ZSBzYW1lIGlzIG5vdCBtZW50aW9uZWQKPiA+ID4gZm9yIFZQVV9HMiBhbmQgdGhlIElNWDhNUSBk b2Vzbid0IGhhdmUgZW5jb2RlIHN1cHBvcnQuIFdoZXJlIGRvIHlvdQo+ID4gPiBzZWUgdGhhdCB0 aGUgSU1YOE1NIGhhcyB0aGUgSGFudHJvIFBQIG9uIHRoZSBIMT8gSSBrbm93IHRoZSBUUk0ncyBs YWNrCj4gPiA+IGEgbG90IG9mIGluZm8gc28gcGVyaGFwcyB5b3Uga25vdyBtb3JlIGFib3V0IHRo ZSBpbnRlcm5hbHMgdGhhbiB3aGF0Cj4gPiA+IHRoZSBUUk0gc3RhdGVzLgo+ID4gCj4gPiBJJ3Zl IGdvdCB0b2xkIHRoYXQgYnkgc29tZW9uZSB3aXRoIGNvbnRhY3RzIGF0IE5YUCByZWNlbnRseSAo aW4gSVJDKS4gSSBoYXZlbid0Cj4gPiB2ZXJpZmllZCBpdCB0aG91Z2gsIGl0IGp1c3QgbWFkZSBz ZW5zZSBmb3IgdGhlIHRhcmdldGVkIHVzZSBvZiB0aCBtaW5pLiBIYW50cm8gCj4gPiBHMSBkcml2 ZXIgZG9lcyBub3QgeWV0IGV4cG9zZSBhbiBNMk0gZm9yIHRoZSBzdGFuZGFsb25lIG1vZGUgb2Yg dGhlIFBQLCBidXQKPiA+IHNoYWxsIGJlIHBvc3NpYmxlLiBEZWNvZGUgYW4gUFAgY2Fubm90IHJ1 biBjb25jdXJyZW50bHkgdGhvdWdoLCBzbyBjb25jdXJyZW50IFBQCj4gPiBhbmQgZGVjb2RlIHdp bGwgaGF2ZSBiaWcgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLgo+ID4gCj4gPiBUaGUgRzIgUFAgaXMg ZGlmZmVyZW50LCBidXQgSSAqdGhpbmsqIGl0cyBhbHdheXMgdGhlcmUuIEl0J3Mgbm90IGRvaW5n IG11Y2gsCj4gPiBsaW5lYXIgTlYxMiAoZGV0aWxpbmcgZnJvbSA0eDQgbGluZWFyIHRpbGVzKSwg YW5kIGNhbiBzY2FsZSBkb3duIGJ5IGZhY3RvciBvZiAyLAo+ID4gNCBhbiA4LiBJZiB0aGVyZSBp cyBtb3JlIGZlYXR1cmUgSSdtIG5vdCBhd2FyZS4KPiA+IAo+ID4gPiAKPiA+ID4gSSBhbHNvIGZv dW5kIG9uIGEgZm9ydW0KPiA+ID4gKGh0dHBzOi8vY29tbXVuaXR5Lm54cC5jb20vdDUvaS1NWC1Q cm9jZXNzb3JzL2lteDhtcS1IYW50cm8tRzEtc2NhbGluZy9tLXAvMTI4NTM0MykKPiA+ID4gdGhh dCBOWFAncyBCU1AgZG9lc24ndCB1c2UgdGhlIEhhbnRybyBmb3Igc2NhbGluZyAoYW5kIGxpa2Vs eSBub3QgY3NjCj4gPiA+IGVpdGhlcikgYW5kIHRoZXkgdXNlIHRoZSBHUFUgaW5zdGVhZC4gSSdt IHN0aWxsIHVuY2xlYXIgaWYvaG93IHlvdQo+ID4gPiBjb3VsZCB0YXAgaW50byB0aGUgMkQgR1BV IHRvIHVzZSBpdHMgc2NhbGluZy9jb252ZXJzaW9uIGlmIGl0J3MgYm91bmQKPiA+ID4gdG8gdGhl IGV0bmF2aXYgZHJpdmVyLgo+ID4gPiAKPiA+ID4gPiBVbmxpa2UgdGhlIElNWDhNUSwgeW91IGRv bid0IGhhdmUgdGhlIG9wdGlvbiB0byBvdXRwdXQgWVVZViAocGFja2VkIHl1diA0OjI6MikKPiA+ ID4gPiB3aGljaCB3b3VsZCBzYXRpc2Z5IHRoZSAyRCBHUFUgc3VwcG9ydCBob29sZCB0byB0aGUg RE1BQnVmIGltcG9ydCBwYXRoLgo+ID4gCj4gPiBBcyBJJ20gc2F5aW5nIGFib3ZlLCB5b3UgY2Fu J3QsIHRoZXJlIGlzIG5vIE5WMTIgc3VwcG9ydCBpbiB0aGF0IDJEIEdQVSBmcm9tCj4gPiB3aGF0 IEkgd2FzIG9sZCBieSBFdG5hdml2IGZvbGtzLCBvbmx5IFlVWVYgKDQ6MjoyIHBhY2tlZCkuIFNo YWRlcnMgaXMgdGhlIG9ubHkKPiA+IG9wdGlvbi4KPiA+IAo+IFRoYXQncyBub3QgY29ycmVjdC4g VGhlIDNEIEdQVSBjYW4gc2FtcGxlIGRpcmVjdGx5IGZyb20gWVVZViwgc28gaXQncwo+IHRoZSBv cHRpbWFsIHplcm8tY29weSBmb3JtYXQgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIHZpZGVv IHdpdGggdGhlCj4gM0QgR1BVLiBNb3N0IG9mIHRoZSAyRCBHUFUgY29yZXMgKGFuZCBJIHRoaW5r IHRoZSBvbmUgb2YgdGhlIDhNTSBpcyBubwo+IGV4Y2VwdGlvbikgY2FuIGhhbmRsZSBwbGFuYXIg Zm9ybWF0cywgc29tZSBvZiB0aGVtIG9ubHkgYXQgcmVkdWNlZCByYXRlCj4gb2YgMSBQaXhlbC9j bG9jaywgaW5zdGVhZCBvZiB0aGUgdXN1YWwgMiBQaXhlbHMvY2xvY2suCgpJc24ndCB0aGF0IGVu b3VnaCB0byBkaXNxdWFsaWZ5IHRoYXQgYXMgIm9wdGltYWwiID8KCj4gPiA+ID4gCj4gPiA+ID4g V2hlbiB0aGUgZGlzcGxheSBkcml2ZXIgZ2V0cyByZWFkeSBhbmQgdXBzdHJlYW0gKGl0J3MgYmVl biBvbmx5IDItMyB5ZWFycyBub3cpLAo+ID4gPiA+IHlvdSdsbCBnZXQgbGluZWFyIE5WMTIgc3Vw cG9ydCBhbG9uZyB3aXRoIEcyIGNvbXByZXNzaW9uIHN1cHBvcnQgKHRoaXMgb25lIGlzCj4gPiA+ ID4gbm90IHN1cHBvcnRlZCBieSB0aGUgR1BVLCBzbyBpdCB3aWxsIGJlIHRyaWNreSB0byBleHBv c2UgaW4gdXNlcmxhbmQpLiBJIGRvbid0Cj4gPiA+ID4gdGhpbmsgdGhlIGRpc3BsYXkgc3VwcG9y dCA0TDQgdGlsZXMsIGJ1dCB5b3UgR1BVIG1vc3QgbGlrZWx5IGNhbiBkbyB3aXRoIHRoZQo+ID4g PiA+IHJpZ2h0IHNoYXJlZCBhbmQgdGV4ZWxGZXRjaCgpIG9yIHZ1bGthbiBlcXVpdmFsZW50IGlm IHRoYXQgZXhpc3Qgb24gdGhhdCB0YXJnZXQuCj4gPiA+IAo+ID4gPiBEbyB5b3UgbWVhbiB0aGUg U2Ftc3VuZyBFeHlub3MgRFJNIGRyaXZlciAod2hpY2ggZG9lc24ndCB5ZXQgaGF2ZQo+ID4gPiBz dXBwb3J0IGZvciBJTVg4TU0pIG9yIGRyaXZlcnMvZ3B1L2RybS9teHNmYj8KPiA+ID4gCj4gPiA+ IEknbSBjdXJyZW50bHkgdXNpbmcgYSBwcmV0dHkgb2xkIHBhdGNoc2V0IHRoYXQgYWRkcyBJTVg4 TU0gc3VwcG9ydCB0bwo+ID4gPiB0aGUgZHJtL2V4eW5vcyBkcml2ZXIuIEknbSB3YXkgb3V0IG9m IG15IHJlYWxtIHdoZW4gdGFsa2luZyBhYm91dAo+ID4gPiBHUFUvVlBVIGFuZCBkaXNwbGF5IGRy aXZlcnMuCj4gPiAKPiA+IERpZG4ndCBrbm93IHRoZSBtaW5pIHdhcyB1c2luZyBTYW1zdW5nIGRp c3BsYXkgY29udHJvbGxlci4gRGlkbid0IGV2ZW4ga25vdyB0aGF0Cj4gPiBjaGlwIGNvdWxkIGV4 aXN0IG91dHNpZGUgb2YgRXh5bm9zIGNoaXBzLiBPbiBpbXg4bXEsIHRoZXkgaGF2ZSBhIE5YUCBk aXNwbGF5Cj4gPiBjaGlwIGFuZCBpdCBpcyBuZXcuIERvd25zdHJlYW0gZHJpdmVyIGV4aXN0LCBh bmQgdXBzdHJlYW0gZHJpdmVyIGlzIGJlaW5nIHdvcmtlZAo+ID4gb24uCj4gCj4gVGhlIGRpc3Bs YXkgY29udHJvbGxlciBvbiB0aGUgOE1NIGlzIGRlcml2ZWQgZnJvbSB0aGUgZXhpc3Rpbmcgc2lt cGxlCj4gZUxDRElGIGNvbnRyb2xsZXJzIGZvdW5kIG9uIGVhcmxpZXIgaS5NWCBTb0NzLiA4TVEg aXMgdGhlIG9ubHkgb25lIHdpdGgKPiB0aGUgdmVyeSBjYXBhYmxlIERDU1MgZGlzcGxheSBjb250 cm9sbGVyLiBJbiBmYWN0IHRoZSA4TVEgRENTUyBpcwo+IHVwc3RyZWFtLCB3aGF0IGlzIG1pc3Np bmcgaXMgdGhlIENhZGVuY2UgZURQL0hETUkgYnJpZGdlIGRyaXZlci4gVGhlCj4gTUlQSS1EU0kg Y29udHJvbGxlciBhbmQgUEhZIG9uIHRoZSA4TU0gaXMgU2Ftc3VuZyBJUC4KClRoYW5rcyBmb3Ig Y2xhcmlmaWNhdGlvbi4KCj4gCj4gUmVnYXJkcywKPiBMdWNhcwo+IAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcg bGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK 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 98B2AC433F5 for ; Mon, 6 Dec 2021 20:48:16 +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=17w8v+PLxWl6IDMmkKU+XqJoWOSMX2EadKaT+Hr6f6E=; b=XSLefIfFDBbGOt A+tSHct/2TBcoZluiolt1M2NvKGvEc3Ha1WKttoDP4kcegL/NNxfMfa/YoN+/xQ3GIITQjjjRyoST ln8vHeUDkcrfkSfp/MKcE/YrzmYu2BAwgplZr2dd18edhEyyTG3wprpj3kcm0R8IEpJ6OjP4QOpbl Os4LWUlb4tUDGvMDw6MhczsIf3fqwJ3ZDogCq9hgoh5T1C3BybpDlKnPkjfSC4aYLkRgPJUiDeSkN 90nv9HCovl8tGmQlelQs44mDSHPICEuy+/qDwmIjur+ooA7knOtFfMKS19L09KUueuVp7M3O8cOcd P6HDBnggVciQIhyAY1xQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1muKsQ-005h86-Hv; Mon, 06 Dec 2021 20:46:22 +0000 Received: from mail-qv1-xf33.google.com ([2607:f8b0:4864:20::f33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1muKsL-005h6r-Fl for linux-arm-kernel@lists.infradead.org; Mon, 06 Dec 2021 20:46:20 +0000 Received: by mail-qv1-xf33.google.com with SMTP id p3so11047301qvj.9 for ; Mon, 06 Dec 2021 12:46:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ndufresne-ca.20210112.gappssmtp.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=V5ht31CmrDEjqp/qYEf8A1hVZVzjFXE1LYcMsEhfUTnp2lqKo319IafWX3Dcx3ApEp D0wRlJsPcUJyTygG2hi6exk9//On83hj3De49ISI8HgEhW/B9ODbomhnsKyaDiPekhsf NDkQpENHvP9J9f3T9HjNWTWmWMpE/cmBsNVKEvu2n5Ak5civedcll6qGfAJ5FY1kk1MG cIOG1Oh1H2oClusorr2EGWdgmXpLBwB46xLArmZwSRVohxurrJZJeZWSwt5KZPGzcBtj BXz7yiWJN0aSdTZkmm/DO0+4hBzj0m8+sF1Tpc5KExjfaYtMYzPfAcKN7AWduP5VnFKx AuDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=Dk9uAaajqq7DA+VmTTpMeBPQ2D0kqREULLsEVWT4+NE=; b=V0otO5p0eQi3WIq/HX6Y4j2FyAiwrYjxaR+MdTDEp/inzk56PQBuENnJvtQ+IPOcnK Ll+TjkhxRamNbTI0iapZTpvIka+LNdvQltIG+sXByQvRDbltq+jOMKeqpJ0sCycgNdik XKc+tcvgOGDN8Wheb2gPgkvj0pQqyh80ccnSV+/cP1XFYAK7bQKtPm7fjs0WpD+ZTQ72 HwemNNn0YYi96VM4Ibr/1l0ouMP2TJwyJ6jKN2WVIfmbuexYirR3T25v8s+xjlaAYgpO 137MUYETOAHr7jyTc5K+6YhaOhWkhZNMPC8ao/2/7Ra36bPa4GdS0eWUJlxunOLibRcY FX/Q== X-Gm-Message-State: AOAM5320CBxoVQgKogvnITZ0RrJfbQQieP5+1hntcwNUYRPcbKHKRoo+ /swUZ8rDt58fbyyYrzG5Ks5zew== X-Google-Smtp-Source: ABdhPJwP5y+kFu1sL9a01GyaGAB0zdPZvjVvfSCb0wJqWGHvNYA9xKKkcTq6Vs/P/7mKN+cYbOnT1w== X-Received: by 2002:a0c:c2cb:: with SMTP id c11mr39869334qvi.107.1638823575288; Mon, 06 Dec 2021 12:46:15 -0800 (PST) Received: from nicolas-tpx395.localdomain (mtl.collabora.ca. [66.171.169.34]) by smtp.gmail.com with ESMTPSA id j14sm7024511qkp.28.2021.12.06.12.46.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Dec 2021 12:46:14 -0800 (PST) Message-ID: <9b76d3499d9c34abe1b067573b9089a239302df7.camel@ndufresne.ca> Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs From: Nicolas Dufresne To: Lucas Stach , Tim Harvey Cc: Ezequiel Garcia , Adam Ford , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" Date: Mon, 06 Dec 2021 15:46:12 -0500 In-Reply-To: <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> <1403b14061883f746bda2998b2bf4a2676f9f328.camel@ndufresne.ca> <838c44e1eb1387c68a1b8b4da18e69ef6b5ad9c2.camel@ndufresne.ca> <2c3fdfec1144ec8179396b24010bc2e8bdb4fcd4.camel@pengutronix.de> User-Agent: Evolution 3.42.1 (3.42.1-1.fc35) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211206_124617_623580_41326920 X-CRM114-Status: GOOD ( 34.32 ) 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 TGUgbHVuZGkgMDYgZMOpY2VtYnJlIDIwMjEgw6AgMTA6MjAgKzAxMDAsIEx1Y2FzIFN0YWNoIGEg w6ljcml0wqA6Cj4gQW0gRnJlaXRhZywgZGVtIDAzLjEyLjIwMjEgdW0gMTQ6MzcgLTA1MDAgc2No cmllYiBOaWNvbGFzIER1ZnJlc25lOgo+ID4gTGUgdmVuZHJlZGkgMDMgZMOpY2VtYnJlIDIwMjEg w6AgMDg6NDYgLTA4MDAsIFRpbSBIYXJ2ZXkgYSDDqWNyaXTCoDoKPiA+ID4gT24gVGh1LCBEZWMg MiwgMjAyMSBhdCA4OjM0IFBNIE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXNAbmR1ZnJlc25lLmNh PiB3cm90ZToKPiA+ID4gPiAKPiA+ID4gPiBMZSBtYXJkaSAzMCBub3ZlbWJyZSAyMDIxIMOgIDEx OjI4IC0wODAwLCBUaW0gSGFydmV5IGEgw6ljcml0IDoKPiA+ID4gPiA+IE9uIFR1ZSwgTm92IDMw LCAyMDIxIGF0IDY6MDAgQU0gRXplcXVpZWwgR2FyY2lhCj4gPiA+ID4gPiA8ZXplcXVpZWxAdmFu Z3VhcmRpYXN1ci5jb20uYXI+IHdyb3RlOgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSGkgVGlt LAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gT24gTW9uLCAyOSBOb3YgMjAyMSBhdCAxNjozNiwg VGltIEhhcnZleSA8dGhhcnZleUBnYXRld29ya3MuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiBPbiBNb24sIE5vdiAyOSwgMjAyMSBhdCAxMDo1OSBBTSBBZGFtIEZvcmQg PGFmb3JkMTczQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+IC4uCj4gPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBBZGFtLAo+ID4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+IFdoYXQgZGVwcyBkaWQgeW91IGluc3RhbGwgaW4gb3JkZXIgdG8gZ2V0IHY0bDJj b2RlY3MgYnVpbGRpbmc/IEkKPiA+ID4gPiA+ID4gPiBpbnN0YWxsZWQgbGliZ3VkZXYtMS4wLWRl diBiYXNlZCBvbiBOaWNvbGFzJyBzdWdnZXN0aW9uIGFuZCByZWJ1aWx0Cj4gPiA+ID4gPiA+ID4g KG5vdCBzdXJlIGlmIEkgbmVlZGVkIHRvIHJlLWNvbmZpZ3VyZSBzb21laG93KSBidXQgdGhlcmUg aXMgc3RpbGwKPiA+ID4gPiA+ID4gPiBub3RoaW5nIGluIGJ1aWxkL3N1YnByb2plY3RzL2dzdC1w bHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy8uIEEgJ21lc29uCj4gPiA+ID4gPiA+ID4gY29uZmln dXJlJyB0ZWxscyBtZSB0aGF0IHY0bDJjb2RlY3MgaXMgc2V0IHRvICdhdXRvJyBidXQgSSdtIG5v dCBzdXJlCj4gPiA+ID4gPiA+ID4gaG93IHRvIGZpbmQgb3V0IHdoYXQgZGVwZW5kZW5jaWVzIGFy ZSBuZWVkZWQgb3Igd2hhdCBtYXkgYmUgbWlzc2luZy4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+IEF0IGxlYXN0IGluIG15IGNhc2UgKENlbnRwcy1kZXJpdmF0aXZlKSwg dGhpcyBpcyB3aGF0IEkndmUgZG9uZToKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IC4uLgo+ID4g PiA+ID4gPiBnc3QtcGx1Z2lucy1iYWR8IFJ1bi10aW1lIGRlcGVuZGVuY3kgZ3VkZXYtMS4wIGZv dW5kOiBOTyAodHJpZWQKPiA+ID4gPiA+ID4gcGtnY29uZmlnIGFuZCBjbWFrZSkKPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+IEluc3RhbGxlZCBndWRldiAuLi4gYW5kIHRoZW46Cj4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiAuLi4KPiA+ID4gPiA+ID4gZ3N0LXBsdWdpbnMtYmFkfCBEZXBlbmRlbmN5 IGd1ZGV2LTEuMCBmb3VuZDogWUVTIDIzMiAoY2FjaGVkKQo+ID4gPiA+ID4gPiAuLi4KPiA+ID4g PiA+ID4gZ3N0LXBsdWdpbnMtYmFkIDEuMTkuMy4xCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAg ICAgUGx1Z2lucyAgICAgICAgICAgICAgIDogYWNjdXJpcCwgYWRwY21kZWMsIGFkcGNtZW5jLCBh aWZmLCBhc2ZtdXgsCj4gPiA+ID4gPiA+IGF1ZGlvYnVmZmVyc3BsaXQsIGF1ZGlvZnhiYWQsIGF1 ZGlvbWl4bWF0cml4LCBhdWRpb2xhdGVuY3ksCj4gPiA+ID4gPiA+IGF1ZGlvdmlzdWFsaXplcnMs IGF1dG9jb252ZXJ0LCBiYXllciwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhbWVyYWJpbiwgY29kZWNhbHBoYSwgY29sb3JlZmZlY3RzLAo+ID4gPiA+ID4gPiBkZWJ1 Z3V0aWxzYmFkLCBkdmJzdWJlbmMsIGR2YnN1Ym92ZXJsYXksIGR2ZHNwdSwgZmFjZW92ZXJsYXks Cj4gPiA+ID4gPiA+IGZlc3RpdmFsLCBmaWVsZGFuYWx5c2lzLCBmcmVldmVyYiwgZnJlaTByLAo+ ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2F1ZGllZmZlY3RzLCBnZHAs IGdlb21ldHJpY3RyYW5zZm9ybSwKPiA+ID4gPiA+ID4gaWQzdGFnLCBpbnRlciwgaW50ZXJsYWNl LCBpdmZwYXJzZSwgaXZ0YywganAya2RlY2ltYXRvciwganBlZ2Zvcm1hdCwKPiA+ID4gPiA+ID4g cmZic3JjLCBtaWRpLCBtcGVncHNkZW11eCwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1wZWdwc211eCwgbXBlZ3RzZGVtdXgsIG1wZWd0c211eCwgbXhmLAo+ID4gPiA+ ID4gPiBuZXRzaW0sIHJ0cG9udmlmLCBwY2FwcGFyc2UsIHBubSwgcHJveHksIGxlZ2FjeXJhd3Bh cnNlLAo+ID4gPiA+ID4gPiByZW1vdmVzaWxlbmNlLCByaXN0LCBydG1wMiwgcnRwbWFuYWdlcmJh ZCwKPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkcGVsZW0sIHNlZ21l bnRjbGlwLCBzaXJlbiwgc21vb3RoLAo+ID4gPiA+ID4gPiBzcGVlZCwgc3ViZW5jLCBzd2l0Y2hi aW4sIHRpbWVjb2RlLCB0cmFuc2NvZGUsIHZpZGVvZmlsdGVyc2JhZCwKPiA+ID4gPiA+ID4gdmlk ZW9mcmFtZV9hdWRpb2xldmVsLCB2aWRlb3BhcnNlcnNiYWQsCj4gPiA+ID4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2aWRlb3NpZ25hbCwgdm1uYywgeTRtZGVjLCBkZWNrbGluaywg ZHZiLAo+ID4gPiA+ID4gPiBmYmRldnNpbmssIGlwY3BpcGVsaW5lLCBudmNvZGVjLCBzaG0sIHY0 bDJjb2RlY3MsIGhscywgc2N0cAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gR1N0cmVhbWVyIGN1 cnJlbnQgbWFzdGVyIGJ1aWxkIGZhaWxzLiBJdCdzIGEga25vd24gaXNzdWUgd2hpY2ggd2lsbCBi ZQo+ID4gPiA+ID4gPiBmaXhlZCB0b2RheToKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFsuLi5d Cj4gPiA+ID4gPiA+IFs4LzldIENvbXBpbGluZyBDIG9iamVjdAo+ID4gPiA+ID4gPiBzdWJwcm9q ZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5w L2dzdHY0bDJjb2RlY3ZwOWRlYy5jLm8KPiA+ID4gPiA+ID4gRkFJTEVEOiBzdWJwcm9qZWN0cy9n c3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wL2dzdHY0 bDJjb2RlY3ZwOWRlYy5jLm8KPiA+ID4gPiA+ID4gY2MgLUlzdWJwcm9qZWN0cy9nc3QtcGx1Z2lu cy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wCj4gPiA+ID4gPiA+IC1J c3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkL3N5cy92NGwyY29kZWNzCj4gPiA+ID4gPiA+IC1J Li4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkL3N5cy92NGwyY29kZWNzCj4gPiA+ID4gPiA+ IC1Jc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFkIC1JLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdp bnMtYmFkCj4gPiA+ID4gPiA+IC1Jc3VicHJvamVjdHMvZ3N0cmVhbWVyL2xpYnMgLUkuLi9zdWJw cm9qZWN0cy9nc3RyZWFtZXIvbGlicwo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dzdHJlYW1l ciAtSS4uL3N1YnByb2plY3RzL2dzdHJlYW1lcgo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dz dC1wbHVnaW5zLWJhZC9nc3QtbGlicwo+ID4gPiA+ID4gPiAtSS4uL3N1YnByb2plY3RzL2dzdC1w bHVnaW5zLWJhZC9nc3QtbGlicwo+ID4gPiA+ID4gPiAtSXN1YnByb2plY3RzL2dzdC1wbHVnaW5z LWJhc2UvZ3N0LWxpYnMKPiA+ID4gPiA+ID4gLUkuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1i YXNlL2dzdC1saWJzIC1Jc3VicHJvamVjdHMvb3JjCj4gPiA+ID4gPiA+IC1JLi4vc3VicHJvamVj dHMvb3JjIC1Jc3VicHJvamVjdHMvZ3N0cmVhbWVyL2dzdAo+ID4gPiA+ID4gPiAtSXN1YnByb2pl Y3RzL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0L3ZpZGVvCj4gPiA+ID4gPiA+IC1Jc3Vi cHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvcGJ1dGlscwo+ID4gPiA+ID4g PiAtSXN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhc2UvZ3N0LWxpYnMvZ3N0L2F1ZGlvCj4gPiA+ ID4gPiA+IC1Jc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFzZS9nc3QtbGlicy9nc3QvdGFnCj4g PiA+ID4gPiA+IC1JL3Vzci9pbmNsdWRlL2dsaWItMi4wIC1JL3Vzci9saWI2NC9nbGliLTIuMC9p bmNsdWRlCj4gPiA+ID4gPiA+IC1JL3Vzci9pbmNsdWRlL2d1ZGV2LTEuMCAtZmRpYWdub3N0aWNz LWNvbG9yPWFsd2F5cwo+ID4gPiA+ID4gPiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1XYWxsIC1X aW52YWxpZC1wY2ggLU8yIC1nIC1mdmlzaWJpbGl0eT1oaWRkZW4KPiA+ID4gPiA+ID4gLWZuby1z dHJpY3QtYWxpYXNpbmcgLURHX0RJU0FCTEVfREVQUkVDQVRFRCAtV21pc3NpbmctcHJvdG90eXBl cwo+ID4gPiA+ID4gPiAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCAtV29sZC1zdHlsZS1k ZWZpbml0aW9uCj4gPiA+ID4gPiA+IC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdyZWR1bmRhbnQt ZGVjbHMgLVd3cml0ZS1zdHJpbmdzIC1XZm9ybWF0Cj4gPiA+ID4gPiA+IC1XZm9ybWF0LXNlY3Vy aXR5IC1XaW5pdC1zZWxmIC1XbWlzc2luZy1pbmNsdWRlLWRpcnMgLVdhZGRyZXNzCj4gPiA+ID4g PiA+IC1Xbm8tbXVsdGljaGFyIC1XdmxhIC1XcG9pbnRlci1hcml0aCAtZlBJQyAtcHRocmVhZCAt REhBVkVfQ09ORklHX0gKPiA+ID4gPiA+ID4gLU1EIC1NUSBzdWJwcm9qZWN0cy9nc3QtcGx1Z2lu cy1iYWQvc3lzL3Y0bDJjb2RlY3MvbGliZ3N0djRsMmNvZGVjcy5zby5wL2dzdHY0bDJjb2RlY3Zw OWRlYy5jLm8KPiA+ID4gPiA+ID4gLU1GIHN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMv djRsMmNvZGVjcy9saWJnc3R2NGwyY29kZWNzLnNvLnAvZ3N0djRsMmNvZGVjdnA5ZGVjLmMuby5k Cj4gPiA+ID4gPiA+IC1vIHN1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVj cy9saWJnc3R2NGwyY29kZWNzLnNvLnAvZ3N0djRsMmNvZGVjdnA5ZGVjLmMubwo+ID4gPiA+ID4g PiAtYyAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRs MmNvZGVjdnA5ZGVjLmMKPiA+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtYmFk L3N5cy92NGwyY29kZWNzL2dzdHY0bDJjb2RlY3ZwOWRlYy5jOjkyOjM6Cj4gPiA+ID4gPiA+IGVy cm9yOiB1bmtub3duIHR5cGUgbmFtZSDigJhncmVmY291bnTigJkKPiA+ID4gPiA+ID4gICAgZ3Jl ZmNvdW50IHJlZl9jb3VudDsKPiA+ID4gPiA+ID4gICAgXn5+fn5+fn5+Cj4gPiA+ID4gPiA+IC4u L3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2 cDlkZWMuYzogSW4KPiA+ID4gPiA+ID4gZnVuY3Rpb24g4oCYZ3N0X3Y0bDJfY29kZWNfdnA5X2Rl Y19waWN0dXJlX2RhdGFfbmV34oCZOgo+ID4gPiA+ID4gPiAuLi9zdWJwcm9qZWN0cy9nc3QtcGx1 Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRsMmNvZGVjdnA5ZGVjLmM6MTA2OjM6Cj4gPiA+ ID4gPiA+IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uIOKAmGdfcmVm X2NvdW50X2luaXTigJk7IGRpZCB5b3UKPiA+ID4gPiA+ID4gbWVhbiDigJhnX2NvbmRfaW5pdOKA mT8gWy1XaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCj4gPiA+ID4gPiA+ICAgIGdfcmVm X2NvdW50X2luaXQgKCZwaWNfZGF0YS0+cmVmX2NvdW50KTsKPiA+ID4gPiA+ID4gICAgXn5+fn5+ fn5+fn5+fn5+fgo+ID4gPiA+ID4gPiAgICBnX2NvbmRfaW5pdAo+ID4gPiA+ID4gPiAuLi9zdWJw cm9qZWN0cy9nc3QtcGx1Z2lucy1iYWQvc3lzL3Y0bDJjb2RlY3MvZ3N0djRsMmNvZGVjdnA5ZGVj LmM6IEluCj4gPiA+ID4gPiA+IGZ1bmN0aW9uIOKAmGdzdF92NGwyX2NvZGVjX3ZwOV9kZWNfcGlj dHVyZV9kYXRhX3JlZuKAmToKPiA+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMt YmFkL3N5cy92NGwyY29kZWNzL2dzdHY0bDJjb2RlY3ZwOWRlYy5jOjExODozOgo+ID4gPiA+ID4g PiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiDigJhnX3JlZl9jb3Vu dF9pbmPigJk7IGRpZCB5b3UKPiA+ID4gPiA+ID4gbWVhbiDigJhnX3N0cnZfY29udGFpbnPigJk/ IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+ID4gPiA+ID4gPiAgICBnX3JlZl9j b3VudF9pbmMgKCZkYXRhLT5yZWZfY291bnQpOwo+ID4gPiA+ID4gPiAgICBefn5+fn5+fn5+fn5+ fn4KPiA+ID4gPiA+ID4gICAgZ19zdHJ2X2NvbnRhaW5zCj4gPiA+ID4gPiA+IC4uL3N1YnByb2pl Y3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2cDlkZWMuYzog SW4KPiA+ID4gPiA+ID4gZnVuY3Rpb24g4oCYZ3N0X3Y0bDJfY29kZWNfdnA5X2RlY19waWN0dXJl X2RhdGFfdW5yZWbigJk6Cj4gPiA+ID4gPiA+IC4uL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJh ZC9zeXMvdjRsMmNvZGVjcy9nc3R2NGwyY29kZWN2cDlkZWMuYzoxMjU6NzoKPiA+ID4gPiA+ID4g d2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24g4oCYZ19yZWZfY291bnRf ZGVj4oCZCj4gPiA+ID4gPiA+IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+ID4g PiA+ID4gPiAgICBpZiAoZ19yZWZfY291bnRfZGVjICgmZGF0YS0+cmVmX2NvdW50KSkgewo+ID4g PiA+ID4gPiAgICAgICAgXn5+fn5+fn5+fn5+fn5+Cj4gPiA+ID4gPiA+IG5pbmphOiBidWlsZCBz dG9wcGVkOiBzdWJjb21tYW5kIGZhaWxlZC4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IEhvcGUg dGhpcyBoZWxwcyBnZXQgeW91IHN0YXJ0ZWQhCj4gPiA+ID4gPiA+IEV6ZXF1aWVsCj4gPiA+ID4g PiAKPiA+ID4gPiA+IEV6ZXF1aWVsIGFuZCBOaWNvbGFzLAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBU aGFua3MgLSBJIGRpZCBtYW5hZ2UgdG8gZ2V0IGdzdHJlYW1lciAxLjE5LjMgYnVpbHQgc3VjY2Vz c2Z1bGx5IHdpdGgKPiA+ID4gPiA+IHY0bDJjb2RlY3MgZmluYWxseSBieSBnZXR0aW5nIHRoZSBj b3JyZWN0IGRlcGVuZGVuY2llcy4gSSd2ZSBhdHRlbXB0ZWQKPiA+ID4gPiA+IHRvIHNvZnR3YXJl IGVuY29kZSBmcm9tIGFub3RoZXIgc3lzdGVtIGFuZCBkZWNvZGUvZGlzcGxheSBvbiB0aGUgSU1Y OE0KPiA+ID4gPiA+IE1pbmkgYnV0IHRodXMgZmFyIGhhdmUgbm90IGJlZW4gc3VjY2Vzc2Z1bC4K PiA+ID4gPiA+IAo+ID4gPiA+ID4gSSBzZWUgdGhhdCB2NGwyY29kZWNzIHBsdWdpbiB2NGwyc2xo MjY0ZGVjL3Y0bDJzbG1wZWcyZGVjL3Y0bDJzbHZwOGRlYwo+ID4gPiA+ID4gYW5kIHRoZXNlIGFs bCBjYW4gb3V0cHV0IHZpZGVvL3gtcmF3IE5WMTIvWVVZMiB3aGljaCBrbXNzaW5rIHNob3VsZAo+ ID4gPiA+ID4gYWNjZXB0IHNvIEknbSBhdHRlbXB0aW5nIHRoZSBmb2xsb3dpbmcgOgo+ID4gPiA+ ID4gCj4gPiA+ID4gPiAjIHZwOCBlbmNvZGUgZnJvbSB4ODYKPiA+ID4gPiA+IGdzdC1sYXVuY2gt MS4wIC12IHZpZGVvdGVzdHNyYyAhIHZpZGVvL3gtcmF3LHdpZHRoPTgwMCxoZWlnaHQ9NDgwICEK PiA+ID4gPiA+IHZwOGVuYyAhIHJ0cHZwOHBheSAhIHVkcHNpbmsgaG9zdD0xNzIuMjQuMzMuMTUg cG9ydD05MDAxCj4gPiA+ID4gPiAjIHZwOCBkZWNvZGUgb24gaW14OG1tQDE3Mi4yNC4zMy4xNSB3 aGljaCBoYXMgYSA4MDB4NDgwIGRpc3BsYXkKPiA+ID4gPiA+IFtnc3QtbWFpbl0gcm9vdEBmb2Nh bC12ZW5pY2U6fi9nc3RyZWFtZXIvYnVpbGQjIGdzdC1sYXVuY2gtMS4wIC12Cj4gPiA+ID4gPiB1 ZHBzcmMgcG9ydD05MDAxIGNhcHMgPSAiYXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcp dmlkZW8sCj4gPiA+ID4gPiBjbG9jay1yYXRlPShpbnQpOTAwMDAsIGVuY29kaW5nLW5hbWU9KHN0 cmluZylWUDgsIHBheWxvYWQ9KGludCk5NiwKPiA+ID4gPiA+IHNzcmM9KHVpbnQpMjc0NTI2MjE1 NSwgdGltZXN0YW1wLW9mZnNldD0odWludCkyNTE1MDMyNjgzLAo+ID4gPiA+ID4gc2VxbnVtLW9m ZnNldD0odWludCkxOTU3OSwgYS1mcmFtZXJhdGU9KHN0cmluZykzMCIgISBydHB2cDhkZXBheSAh Cj4gPiA+ID4gPiB2NGwyc2x2cDhkZWMgISBrbXNzaW5rCj4gPiA+ID4gPiBTZXR0aW5nIHBpcGVs aW5lIHRvIFBBVVNFRCAuLi4KPiA+ID4gPiA+IFBpcGVsaW5lIGlzIGxpdmUgYW5kIGRvZXMgbm90 IG5lZWQgUFJFUk9MTCAuLi4KPiA+ID4gPiA+IC9Hc3RQaXBlbGluZTpwaXBlbGluZTAvR3N0S01T U2luazprbXNzaW5rMDogZGlzcGxheS13aWR0aCA9IDgwMAo+ID4gPiA+ID4gL0dzdFBpcGVsaW5l OnBpcGVsaW5lMC9Hc3RLTVNTaW5rOmttc3NpbmswOiBkaXNwbGF5LWhlaWdodCA9IDQ4MAo+ID4g PiA+ID4gUGlwZWxpbmUgaXMgUFJFUk9MTEVEIC4uLgo+ID4gPiA+ID4gU2V0dGluZyBwaXBlbGlu ZSB0byBQTEFZSU5HIC4uLgo+ID4gPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RVRFBT cmM6dWRwc3JjMC5Hc3RQYWQ6c3JjOiBjYXBzID0KPiA+ID4gPiA+IGFwcGxpY2F0aW9uL3gtcnRw LCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9jay1yYXRlPShpbnQpOTAwMDAsCj4gPiA+ID4gPiBl bmNvZGluZy1uYW1lPShzdHJpbmcpVlA4LCBwYXlsb2FkPShpbnQpOTYsIHNzcmM9KHVpbnQpMjc0 NTI2MjE1NSwKPiA+ID4gPiA+IHRpbWVzdGFtcC1vZmZzZXQ9KHVpbnQpMjUxNTAzMjY4Mywgc2Vx bnVtLW9mZnNldD0odWludCkxOTU3OSwKPiA+ID4gPiA+IGEtZnJhbWVyYXRlPShzdHJpbmcpMzAK PiA+ID4gPiA+IE5ldyBjbG9jazogR3N0U3lzdGVtQ2xvY2sKPiA+ID4gPiA+IC9Hc3RQaXBlbGlu ZTpwaXBlbGluZTAvR3N0UnRwVlA4RGVwYXk6cnRwdnA4ZGVwYXkwLkdzdFBhZDpzaW5rOiBjYXBz ID0KPiA+ID4gPiA+IGFwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvLCBjbG9j ay1yYXRlPShpbnQpOTAwMDAsCj4gPiA+ID4gPiBlbmNvZGluZy1uYW1lPShzdHJpbmcpVlA4LCBw YXlsb2FkPShpbnQpOTYsIHNzcmM9KHVpbnQpMjc0NTI2MjE1NSwKPiA+ID4gPiA+IHRpbWVzdGFt cC1vZmZzZXQ9KHVpbnQpMjUxNTAzMjY4Mywgc2VxbnVtLW9mZnNldD0odWludCkxOTU3OSwKPiA+ ID4gPiA+IGEtZnJhbWVyYXRlPShzdHJpbmcpMzAKPiA+ID4gPiA+IC9Hc3RQaXBlbGluZTpwaXBl bGluZTAvR3N0UnRwVlA4RGVwYXk6cnRwdnA4ZGVwYXkwLkdzdFBhZDpzcmM6IGNhcHMgPQo+ID4g PiA+ID4gdmlkZW8veC12cDgsIGZyYW1lcmF0ZT0oZnJhY3Rpb24pMC8xLCBoZWlnaHQ9KGludCk0 ODAsIHdpZHRoPShpbnQpODAwLAo+ID4gPiA+ID4gcHJvZmlsZT0oc3RyaW5nKTAKPiA+ID4gPiA+ IEVSUk9SOiBmcm9tIGVsZW1lbnQgL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RVRFBTcmM6dWRw c3JjMDogSW50ZXJuYWwKPiA+ID4gPiA+IGRhdGEgc3RyZWFtIGVycm9yLgo+ID4gPiA+ID4gQWRk aXRpb25hbCBkZWJ1ZyBpbmZvOgo+ID4gPiA+ID4gLi4vc3VicHJvamVjdHMvZ3N0cmVhbWVyL2xp YnMvZ3N0L2Jhc2UvZ3N0YmFzZXNyYy5jKDMxMjcpOgo+ID4gPiA+ID4gZ3N0X2Jhc2Vfc3JjX2xv b3AgKCk6IC9Hc3RQaXBlbGluZTpwaXBlbGluZTAvR3N0VURQU3JjOnVkcHNyYzA6Cj4gPiA+ID4g PiBzdHJlYW1pbmcgc3RvcHBlZCwgcmVhc29uIG5vdC1uZWdvdGlhdGVkICgtNCkKPiA+ID4gPiA+ IEV4ZWN1dGlvbiBlbmRlZCBhZnRlciAwOjAwOjAyLjA3NjgzOTY0NAo+ID4gPiA+ID4gU2V0dGlu ZyBwaXBlbGluZSB0byBOVUxMIC4uLgo+ID4gPiA+ID4gRnJlZWluZyBwaXBlbGluZSAuLi4KPiA+ ID4gPiA+IAo+ID4gPiA+ID4gSSdtIGdldHRpbmcgdGhlIHNhbWUgdGhpbmcgd2hlbiB0cnlpbmcg dG8gdXNlIGgyNjQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkndmUgbmV2ZXIgcXVpdGUgYmVlbiBh YmxlIHRvIGdyYXNwIGhvdyB0byBkZWJ1ZyBHU3RyZWFtZXIncwo+ID4gPiA+ID4gbmVnb3RpYXRp b24gaXNzdWVzLiBJZiBJIGVuZCB3aXRoIGZha2VzaW5rIGl0IGFwcGVhcnMgdG8gZGVjb2RlIHNv IGl0Cj4gPiA+ID4gPiBtdXN0IGJlIHRoZSB2NGwyc2x2cDhkZWMgdG8ga21zc2luay4gSSB0cmll ZCBmb3JjaW5nIHRoZSBwaXhlbCBmb3JtYXQKPiA+ID4gPiA+IHVzaW5nICd2NGwyc2x2cDhkZWMg ISAidmlkZW8veC1yYXcsZm9ybWF0PShzdHJpbmcpTlYxMiIgISBrbXNzaW5rJyBidXQKPiA+ID4g PiA+IEkgc3RpbGwgZ2V0IHRoZSBuZWdvdGlhdGlvbiBlcnJvci4KPiA+ID4gPiA+IAo+ID4gPiA+ ID4gV2hhdCBpbnRlcnJ1cHRzIHNob3VsZCBJIGJlIHNlZWluZyBpbiAvcHJvYy9pbnRlcnJ1cHRz PyBJIGRvbid0IHNlZQo+ID4gPiA+ID4gYW55dGhpbmcgdnB1L2hhbnRybyByZWxhdGVkIHRoZXJl Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEg YmFzaWMgdW5kZXJzdGFuZGluZyBvZiB0aGUgdnB1Cj4gPiA+ID4gPiBkcml2ZXJzIGFuZCB1c2Vy c2FwY2Ugb24gdGhlIElNWDhNIE1pbmkuIFRoZSBJTVg2US9ETCB0aGF0IEknbSBtb3JlCj4gPiA+ ID4gPiBmYW1pbGlhciB3aXRoIGhhcyBhIHZwdSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgR1N0 cmVhbWVyIHZpZGVvNGxpbnV4Cj4gPiA+ID4gPiBwbHVnaW4gd2hpY2ggc2hvd3MgdGhlIGZvbGxv d2luZyAob24gR1N0cmVhbWVyIDEuMTYuMik6Cj4gPiA+ID4gPiAgIHY0bDJqcGVnZW5jOiBWNEwy IEpQRUcgRW5jb2Rlcgo+ID4gPiA+ID4gICB2NGwyanBlZ2RlYzogVjRMMiBKUEVHIERlY29kZXIK PiA+ID4gPiA+ICAgdjRsMmgyNjRlbmM6IFY0TDIgSC4yNjQgRW5jb2Rlcgo+ID4gPiA+ID4gICB2 NGwybXBlZzRlbmM6IFY0TDIgTVBFRzQgRW5jb2Rlcgo+ID4gPiA+ID4gICB2NGwybXBlZzRkZWM6 IFY0TDIgTVBFRzQgRGVjb2Rlcgo+ID4gPiA+ID4gICB2NGwybXBlZzJkZWM6IFY0TDIgTVBFRzIg RGVjb2Rlcgo+ID4gPiA+ID4gICB2NGwyaDI2NGRlYzogVjRMMiBIMjY0IERlY29kZXIKPiA+ID4g PiA+IFRoZSBJTVg2US9ETCBhbHNvIGhhcyBhbiBJUFUgdGhhdCBoYXMgYW4gTTJNIGRyaXZlciB0 aGF0IHByb3ZpZGVzIHRoZQo+ID4gPiA+ID4gZm9sbG93aW5nIGZvciBzY2FsaW5nL2NvbG9yc3Bh Y2UgY29udmVyc2lvbjoKPiA+ID4gPiA+ICAgdjRsMmNvbnZlcnQ6IFY0TDIgVmlkZW8gQ29udmVy dGVyCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEkgYmVsaWV2ZSB3aGF0IEknbSByZWFkaW5nIGlzIHRo YXQgdGhlIElNWDhNIE1pbmkgSGFudHJvIGNvZGVjcyBhcmUKPiA+ID4gPiA+ICdzdGF0ZWZ1bCcg d2hlcmUgbW9yZSBzb2Z0d2FyZSBpcyByZXF1aXJlZCB0byBkcml2ZSB0aGVtIGFuZCBpcwo+ID4g PiA+IAo+ID4gPiA+ICdzdGF0ZWxlc3MnLiB0aGUgcmVzdCBpcyByaWdodC4KPiA+ID4gPiAKPiA+ ID4gPiA+IHN1cHBvcnRlZCBieSB0aGUgbmV3ZXIgdjRsMmNvZGVjcyBwbHVnaW4uIEkgaGF2ZW4n dCBiZWVuIGFibGUgdG8KPiA+ID4gPiA+IHVuZGVyc3RhbmQgd2hhdCBrZXJuZWwgdmVyc2lvbi9y ZXF1aXJlbWVudHMgdGhlIHY0bDJjb2RlY3MgcGx1Z2luCj4gPiA+ID4gPiB1c2Vycy9yZXF1aXJl cy4KPiA+ID4gPiAKPiA+ID4gPiBBZnRlciBIMjY0IGRlYmFjbGUgd2l0aCA1LjksIDUuMTAgYW5k IDUuMTEgQVBJIGJyZWFrIGFuZCBHU3RyZWFtZXIgbm90IGdldHRpbmcKPiA+ID4gPiBlbm91Z2gg cmVsZWFzZSB0byBzdXBwb3J0IGFsbCBvZiB0aGVzZSB3ZSBzdGFydGVkIG1lcmdpbmcgc3VwcG9y dCBmb3IgQ09ERUNzCj4gPiA+ID4gb25seSB3aGVuIHRoZSBzdGFibGUgdUFQSSBsYW5kLiBJIG1h ZGUgYW4gZXhjZXB0aW9uIGZvciBWUDkgYXMgaXQgaXMgYWxyZWFkeQo+ID4gPiA+IGFwcGxpZWQg aW4gdGhlIG1lZGlhIHRyZWUgYW5kIGRpZG4ndCB3YW50IHRvIG1pc3MgMS4yMCByZWxlYXNlLgo+ ID4gPiA+IAo+ID4gPiA+IFNvIHRvIGFuc3dlciB5b3UgcXVlc3Rpb24sIGl0IGRlcGVuZHMgb24g d2hlbiB0aGUgQ09ERUMgdUFQSSBsYW5kZWQuCj4gPiA+ID4gCj4gPiA+IAo+ID4gPiBPaywgdGhh bmtzIGZvciB0aGUgZXhwbGFuYXRpb24uCj4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJJ20g YWxzbyB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgd2UgY2FuIGdldCBzY2FsaW5nL2NvbG9yc3Bh Y2UKPiA+ID4gPiA+IGNvbnZlcnNpb24gb24gdGhlIElNWDhNIE1pbmkuIFRoZSBJTVg4TSBsYWNr cyBhbiBJUFUuLi4gaXMgdGhlcmUgc29tZQo+ID4gPiA+ID4gd2F5IHRvIHV0aWxpemUgc2NhbGlu Zy9jb2xvcnNwYWNlIGNvbnZlcnNpb24gZnJvbSB0aGUgMkQgR1BVIGJvdW5kIHRvCj4gPiA+ID4g PiB0aGUgZXRuYXZpdiBkcml2ZXI/Cj4gPiA+ID4gCj4gPiA+ID4gVGhlIGNvbmNlcHQgb2YgdGhl IG1pbmksIGlzIHRoYXQgeW91IHdvdWxkIGJlIHVzaW5nIHRoIGVuY29kZXIgZm9yIGFueXRoaW5n IHRoYXQKPiA+ID4gPiBpc24ndCBnb2luZyB0byB0aGUgZGlzcGxheS4gU28gdGhleSBvbmx5IGlu dGVncmF0ZWQgdGhlIEhhbnRybyBQUCBvbiB0aGUKPiA+ID4gPiBlbmNvZGVyLiBVbmZvcnR1bmF0 ZWx5LCB5b3UnbGwgaGF2ZSB0byBiZSBwYXRpZW50IGZvciBtYWlubGluZSBzdGF0ZWxlc3MgZW5j b2Rlcgo+ID4gPiA+IHN1cHBvcnQsIHdlIGJhcmVseSBzY3JhdGNoIHRoZSBzdXJmYWNlIG9mIHRo aXMgc3ViamVjdCwgYnV0IGl0cyBiZWluZyB3b3JrZWQgb24uCj4gPiA+IAo+ID4gPiBBZnRlciBz b21lIHNlYXJjaGluZyBmb3IgSGFudHJvIFBQIEkgc2VlIHRoYXQgdGhlIElNWE1RIChJTVg4TQo+ ID4gPiBEdWFsL1F1YWRMaXRlL1F1YWQpIG1lbnRpb25zIEhhbnRybyBQUC4gRnJvbSB0aGUgSU1Y OE1EUUxRUk0gc2VjdGlvbgo+ID4gPiAxNC4xLjIuMSBEZWNvZGVyIEZlYXR1cmVzOgo+ID4gPiA8 cXVvdGU+Cj4gPiA+IFZpZGVvIHBvc3QtcHJvY2Vzc2luZyBmZWF0dXJlcwo+ID4gPiAgLSBGcmFt ZSByb3RhdGlvbiA5MCBkZWdyZWVzIGxlZnQvcmlnaHQKPiA+ID4gIC0gRnJhbWUgbWlycm9yaW5n IGhvcml6b250YWxseS92ZXJ0aWNhbGx5Cj4gPiA+ICAtIEZyYW1lIGNyb3BwaW5nCj4gPiA+ICAt IEZyYW1lIGNvbnZlcnNpb24gZnJvbSBZQ2JDciBmb3JtYXRzIHRvIDE2LWJpdCBvciAzMi1iaXQg UkdCIGZvcm1hdHMKPiA+ID4gIC0gRnJhbWUgc2NhbGluZyB3aXRoIG1heGltdW0gdXAtc2NhbGlu ZyBmYWN0b3Igb2YgMwo+ID4gPiAgLSBUd28gcmVjdGFuZ3VsYXIgb3IgYWxwaGEgYmxlbmRpbmcg bWFza3MgZm9yIG91dHB1dCBmcmFtZQo+ID4gPiAKPiA+ID4gIFRoZSBwb3N0LXByb2Nlc3Npbmcg ZmVhdHVyZXMgY2FuIGJlIHVzZWQgaW4gcGlwZWxpbmUgd2l0aCB0aGUKPiA+ID4gZGVjb2Rlci4g VGhlIHBvc3Rwcm9jZXNzaW5nIGZlYXR1cmVzIGNhbiBhbHNvIGJlIHVzZWQgYXMgc3RhbmQtYWxv bmUsCj4gPiA+IHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgZGVjb2RpbmcKPiA+ID4gPC9xdW90ZT4K PiA+ID4gCj4gPiA+IFRoZSBhYm92ZSBpcyB1bmRlciB0aGUgVlBVX0cxIHNlY3Rpb24gYW5kIHRo ZSBzYW1lIGlzIG5vdCBtZW50aW9uZWQKPiA+ID4gZm9yIFZQVV9HMiBhbmQgdGhlIElNWDhNUSBk b2Vzbid0IGhhdmUgZW5jb2RlIHN1cHBvcnQuIFdoZXJlIGRvIHlvdQo+ID4gPiBzZWUgdGhhdCB0 aGUgSU1YOE1NIGhhcyB0aGUgSGFudHJvIFBQIG9uIHRoZSBIMT8gSSBrbm93IHRoZSBUUk0ncyBs YWNrCj4gPiA+IGEgbG90IG9mIGluZm8gc28gcGVyaGFwcyB5b3Uga25vdyBtb3JlIGFib3V0IHRo ZSBpbnRlcm5hbHMgdGhhbiB3aGF0Cj4gPiA+IHRoZSBUUk0gc3RhdGVzLgo+ID4gCj4gPiBJJ3Zl IGdvdCB0b2xkIHRoYXQgYnkgc29tZW9uZSB3aXRoIGNvbnRhY3RzIGF0IE5YUCByZWNlbnRseSAo aW4gSVJDKS4gSSBoYXZlbid0Cj4gPiB2ZXJpZmllZCBpdCB0aG91Z2gsIGl0IGp1c3QgbWFkZSBz ZW5zZSBmb3IgdGhlIHRhcmdldGVkIHVzZSBvZiB0aCBtaW5pLiBIYW50cm8gCj4gPiBHMSBkcml2 ZXIgZG9lcyBub3QgeWV0IGV4cG9zZSBhbiBNMk0gZm9yIHRoZSBzdGFuZGFsb25lIG1vZGUgb2Yg dGhlIFBQLCBidXQKPiA+IHNoYWxsIGJlIHBvc3NpYmxlLiBEZWNvZGUgYW4gUFAgY2Fubm90IHJ1 biBjb25jdXJyZW50bHkgdGhvdWdoLCBzbyBjb25jdXJyZW50IFBQCj4gPiBhbmQgZGVjb2RlIHdp bGwgaGF2ZSBiaWcgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLgo+ID4gCj4gPiBUaGUgRzIgUFAgaXMg ZGlmZmVyZW50LCBidXQgSSAqdGhpbmsqIGl0cyBhbHdheXMgdGhlcmUuIEl0J3Mgbm90IGRvaW5n IG11Y2gsCj4gPiBsaW5lYXIgTlYxMiAoZGV0aWxpbmcgZnJvbSA0eDQgbGluZWFyIHRpbGVzKSwg YW5kIGNhbiBzY2FsZSBkb3duIGJ5IGZhY3RvciBvZiAyLAo+ID4gNCBhbiA4LiBJZiB0aGVyZSBp cyBtb3JlIGZlYXR1cmUgSSdtIG5vdCBhd2FyZS4KPiA+IAo+ID4gPiAKPiA+ID4gSSBhbHNvIGZv dW5kIG9uIGEgZm9ydW0KPiA+ID4gKGh0dHBzOi8vY29tbXVuaXR5Lm54cC5jb20vdDUvaS1NWC1Q cm9jZXNzb3JzL2lteDhtcS1IYW50cm8tRzEtc2NhbGluZy9tLXAvMTI4NTM0MykKPiA+ID4gdGhh dCBOWFAncyBCU1AgZG9lc24ndCB1c2UgdGhlIEhhbnRybyBmb3Igc2NhbGluZyAoYW5kIGxpa2Vs eSBub3QgY3NjCj4gPiA+IGVpdGhlcikgYW5kIHRoZXkgdXNlIHRoZSBHUFUgaW5zdGVhZC4gSSdt IHN0aWxsIHVuY2xlYXIgaWYvaG93IHlvdQo+ID4gPiBjb3VsZCB0YXAgaW50byB0aGUgMkQgR1BV IHRvIHVzZSBpdHMgc2NhbGluZy9jb252ZXJzaW9uIGlmIGl0J3MgYm91bmQKPiA+ID4gdG8gdGhl IGV0bmF2aXYgZHJpdmVyLgo+ID4gPiAKPiA+ID4gPiBVbmxpa2UgdGhlIElNWDhNUSwgeW91IGRv bid0IGhhdmUgdGhlIG9wdGlvbiB0byBvdXRwdXQgWVVZViAocGFja2VkIHl1diA0OjI6MikKPiA+ ID4gPiB3aGljaCB3b3VsZCBzYXRpc2Z5IHRoZSAyRCBHUFUgc3VwcG9ydCBob29sZCB0byB0aGUg RE1BQnVmIGltcG9ydCBwYXRoLgo+ID4gCj4gPiBBcyBJJ20gc2F5aW5nIGFib3ZlLCB5b3UgY2Fu J3QsIHRoZXJlIGlzIG5vIE5WMTIgc3VwcG9ydCBpbiB0aGF0IDJEIEdQVSBmcm9tCj4gPiB3aGF0 IEkgd2FzIG9sZCBieSBFdG5hdml2IGZvbGtzLCBvbmx5IFlVWVYgKDQ6MjoyIHBhY2tlZCkuIFNo YWRlcnMgaXMgdGhlIG9ubHkKPiA+IG9wdGlvbi4KPiA+IAo+IFRoYXQncyBub3QgY29ycmVjdC4g VGhlIDNEIEdQVSBjYW4gc2FtcGxlIGRpcmVjdGx5IGZyb20gWVVZViwgc28gaXQncwo+IHRoZSBv cHRpbWFsIHplcm8tY29weSBmb3JtYXQgaWYgeW91IGFyZSBnb2luZyB0byB1c2UgdGhlIHZpZGVv IHdpdGggdGhlCj4gM0QgR1BVLiBNb3N0IG9mIHRoZSAyRCBHUFUgY29yZXMgKGFuZCBJIHRoaW5r IHRoZSBvbmUgb2YgdGhlIDhNTSBpcyBubwo+IGV4Y2VwdGlvbikgY2FuIGhhbmRsZSBwbGFuYXIg Zm9ybWF0cywgc29tZSBvZiB0aGVtIG9ubHkgYXQgcmVkdWNlZCByYXRlCj4gb2YgMSBQaXhlbC9j bG9jaywgaW5zdGVhZCBvZiB0aGUgdXN1YWwgMiBQaXhlbHMvY2xvY2suCgpJc24ndCB0aGF0IGVu b3VnaCB0byBkaXNxdWFsaWZ5IHRoYXQgYXMgIm9wdGltYWwiID8KCj4gPiA+ID4gCj4gPiA+ID4g V2hlbiB0aGUgZGlzcGxheSBkcml2ZXIgZ2V0cyByZWFkeSBhbmQgdXBzdHJlYW0gKGl0J3MgYmVl biBvbmx5IDItMyB5ZWFycyBub3cpLAo+ID4gPiA+IHlvdSdsbCBnZXQgbGluZWFyIE5WMTIgc3Vw cG9ydCBhbG9uZyB3aXRoIEcyIGNvbXByZXNzaW9uIHN1cHBvcnQgKHRoaXMgb25lIGlzCj4gPiA+ ID4gbm90IHN1cHBvcnRlZCBieSB0aGUgR1BVLCBzbyBpdCB3aWxsIGJlIHRyaWNreSB0byBleHBv c2UgaW4gdXNlcmxhbmQpLiBJIGRvbid0Cj4gPiA+ID4gdGhpbmsgdGhlIGRpc3BsYXkgc3VwcG9y dCA0TDQgdGlsZXMsIGJ1dCB5b3UgR1BVIG1vc3QgbGlrZWx5IGNhbiBkbyB3aXRoIHRoZQo+ID4g PiA+IHJpZ2h0IHNoYXJlZCBhbmQgdGV4ZWxGZXRjaCgpIG9yIHZ1bGthbiBlcXVpdmFsZW50IGlm IHRoYXQgZXhpc3Qgb24gdGhhdCB0YXJnZXQuCj4gPiA+IAo+ID4gPiBEbyB5b3UgbWVhbiB0aGUg U2Ftc3VuZyBFeHlub3MgRFJNIGRyaXZlciAod2hpY2ggZG9lc24ndCB5ZXQgaGF2ZQo+ID4gPiBz dXBwb3J0IGZvciBJTVg4TU0pIG9yIGRyaXZlcnMvZ3B1L2RybS9teHNmYj8KPiA+ID4gCj4gPiA+ IEknbSBjdXJyZW50bHkgdXNpbmcgYSBwcmV0dHkgb2xkIHBhdGNoc2V0IHRoYXQgYWRkcyBJTVg4 TU0gc3VwcG9ydCB0bwo+ID4gPiB0aGUgZHJtL2V4eW5vcyBkcml2ZXIuIEknbSB3YXkgb3V0IG9m IG15IHJlYWxtIHdoZW4gdGFsa2luZyBhYm91dAo+ID4gPiBHUFUvVlBVIGFuZCBkaXNwbGF5IGRy aXZlcnMuCj4gPiAKPiA+IERpZG4ndCBrbm93IHRoZSBtaW5pIHdhcyB1c2luZyBTYW1zdW5nIGRp c3BsYXkgY29udHJvbGxlci4gRGlkbid0IGV2ZW4ga25vdyB0aGF0Cj4gPiBjaGlwIGNvdWxkIGV4 aXN0IG91dHNpZGUgb2YgRXh5bm9zIGNoaXBzLiBPbiBpbXg4bXEsIHRoZXkgaGF2ZSBhIE5YUCBk aXNwbGF5Cj4gPiBjaGlwIGFuZCBpdCBpcyBuZXcuIERvd25zdHJlYW0gZHJpdmVyIGV4aXN0LCBh bmQgdXBzdHJlYW0gZHJpdmVyIGlzIGJlaW5nIHdvcmtlZAo+ID4gb24uCj4gCj4gVGhlIGRpc3Bs YXkgY29udHJvbGxlciBvbiB0aGUgOE1NIGlzIGRlcml2ZWQgZnJvbSB0aGUgZXhpc3Rpbmcgc2lt cGxlCj4gZUxDRElGIGNvbnRyb2xsZXJzIGZvdW5kIG9uIGVhcmxpZXIgaS5NWCBTb0NzLiA4TVEg aXMgdGhlIG9ubHkgb25lIHdpdGgKPiB0aGUgdmVyeSBjYXBhYmxlIERDU1MgZGlzcGxheSBjb250 cm9sbGVyLiBJbiBmYWN0IHRoZSA4TVEgRENTUyBpcwo+IHVwc3RyZWFtLCB3aGF0IGlzIG1pc3Np bmcgaXMgdGhlIENhZGVuY2UgZURQL0hETUkgYnJpZGdlIGRyaXZlci4gVGhlCj4gTUlQSS1EU0kg Y29udHJvbGxlciBhbmQgUEhZIG9uIHRoZSA4TU0gaXMgU2Ftc3VuZyBJUC4KClRoYW5rcyBmb3Ig Y2xhcmlmaWNhdGlvbi4KCj4gCj4gUmVnYXJkcywKPiBMdWNhcwo+IAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK