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=-7.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 AA459C43381 for ; Wed, 27 Mar 2019 14:11:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3F7382087C for ; Wed, 27 Mar 2019 14:11:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="Al8E50IE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729733AbfC0OLp (ORCPT ); Wed, 27 Mar 2019 10:11:45 -0400 Received: from mail-ed1-f68.google.com ([209.85.208.68]:44085 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726469AbfC0OLo (ORCPT ); Wed, 27 Mar 2019 10:11:44 -0400 Received: by mail-ed1-f68.google.com with SMTP id x10so14091871edh.11 for ; Wed, 27 Mar 2019 07:11:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=vumAsUiheAKrtl43gyuJifrE/LKI6R2cc2bCYtu/jSk=; b=Al8E50IEDB37y6NQZGCWixr4pnTA5VHQkEPZ2SrV13YWRazIdfccVvS4ihTlqYquqJ PEcMbPd1nzgsU3yVyFJJYPZexFGoQOzDEQAPGxNQHavpUcL/CBhyRPt35rQFesc3yeNi nR7XiD7dxRmPXwJ+/AI49S04zzxpJK5noQCcA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=vumAsUiheAKrtl43gyuJifrE/LKI6R2cc2bCYtu/jSk=; b=Q51osplGPZ/okWh0d9vaKMVtTBhISKY2HgOcLAO0ijWtS2YdlJRNgZzaX0D4klzRnV x5UbRvu7Sj+HDrkKDJJfmh4ot7lsownxN8rwtlSyF6+YeeeFNdC9T13j0nvOS3WjXHvX bUQioNxuJmOHP0+Ll8HXAm3mDQq0sZr5f82dlHsBkKTCvZ57qQ8ejoPfdMX8gXwcu45E Szv7txOl8ycUFhZV2XM69sQd0b30cz9bneJQg3OImHT0lrMII2cjCxT2k3PwwQOLQSif u3yicSb7WYXGBOzrtIryRHzFgnRmARoRVCaHOUOPN4cq1e0CKzcPp03HdWOZMkm1QuLL 3ppQ== X-Gm-Message-State: APjAAAUunkzV76+k6B3CaU7xL2GDF5f8PNmCDKDXebZ7R8qgCvOn1+RB Dw0KC2UrjbXPtiyjv0x1KURxqg== X-Google-Smtp-Source: APXvYqw/4zEDnYNv0bAqL/SYmNJTSpjGXgaOrb09/3rFGE2Cnwg1YcTAbqA6bqwlgRxnNF9iuXyA2g== X-Received: by 2002:a50:f9c1:: with SMTP id a1mr23798338edq.278.1553695901022; Wed, 27 Mar 2019 07:11:41 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id t9sm2759893ejg.54.2019.03.27.07.11.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 27 Mar 2019 07:11:40 -0700 (PDT) Date: Wed, 27 Mar 2019 15:11:37 +0100 From: Daniel Vetter To: Sonal Santan Cc: Daniel Vetter , "dri-devel@lists.freedesktop.org" , "gregkh@linuxfoundation.org" , Cyril Chemparathy , "linux-kernel@vger.kernel.org" , Lizhi Hou , Michal Simek , "airlied@redhat.com" Subject: Re: [RFC PATCH Xilinx Alveo 0/6] Xilinx PCIe accelerator driver Message-ID: <20190327141137.GK2665@phenom.ffwll.local> Mail-Followup-To: Sonal Santan , "dri-devel@lists.freedesktop.org" , "gregkh@linuxfoundation.org" , Cyril Chemparathy , "linux-kernel@vger.kernel.org" , Lizhi Hou , Michal Simek , "airlied@redhat.com" References: <20190319215401.6562-1-sonal.santan@xilinx.com> <20190325202810.GG2665@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 4.19.0-1-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Mar 27, 2019 at 12:50:14PM +0000, Sonal Santan wrote: > > > > -----Original Message----- > > From: Daniel Vetter [mailto:daniel@ffwll.ch] > > Sent: Wednesday, March 27, 2019 1:23 AM > > To: Sonal Santan > > Cc: dri-devel@lists.freedesktop.org; gregkh@linuxfoundation.org; Cyril > > Chemparathy ; linux-kernel@vger.kernel.org; Lizhi Hou > > ; Michal Simek ; airlied@redhat.com > > Subject: Re: [RFC PATCH Xilinx Alveo 0/6] Xilinx PCIe accelerator driver > > > > On Wed, Mar 27, 2019 at 12:30 AM Sonal Santan wrote: > > > > > > > > > > > > > -----Original Message----- > > > > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of > > > > Daniel Vetter > > > > Sent: Monday, March 25, 2019 1:28 PM > > > > To: Sonal Santan > > > > Cc: dri-devel@lists.freedesktop.org; gregkh@linuxfoundation.org; > > > > Cyril Chemparathy ; linux-kernel@vger.kernel.org; > > > > Lizhi Hou ; Michal Simek ; > > > > airlied@redhat.com > > > > Subject: Re: [RFC PATCH Xilinx Alveo 0/6] Xilinx PCIe accelerator > > > > driver > > > > > > > > On Tue, Mar 19, 2019 at 02:53:55PM -0700, sonal.santan@xilinx.com > > wrote: > > > > > From: Sonal Santan > > > > > > > > > > Hello, > > > > > > > > > > This patch series adds drivers for Xilinx Alveo PCIe accelerator cards. > > > > > These drivers are part of Xilinx Runtime (XRT) open source stack > > > > > and have been deployed by leading FaaS vendors and many enterprise > > > > customers. > > > > > > > > Cool, first fpga driver submitted to drm! And from a high level I > > > > think this makes a lot of sense. > > > > > > > > > PLATFORM ARCHITECTURE > > > > > > > > > > Alveo PCIe platforms have a static shell and a reconfigurable > > > > > (dynamic) region. The shell is automatically loaded from PROM when > > > > > host is booted and PCIe is enumerated by BIOS. Shell cannot be > > > > > changed till next cold reboot. The shell exposes two physical functions: > > > > > management physical function and user physical function. > > > > > > > > > > Users compile their high level design in C/C++/OpenCL or RTL into > > > > > FPGA image using SDx compiler. The FPGA image packaged as xclbin > > > > > file can be loaded onto reconfigurable region. The image may > > > > > contain one or more compute unit. Users can dynamically swap the > > > > > full image running on the reconfigurable region in order to switch > > > > > between different > > > > workloads. > > > > > > > > > > XRT DRIVERS > > > > > > > > > > XRT Linux kernel driver xmgmt binds to mgmt pf. The driver is > > > > > modular and organized into several platform drivers which > > > > > primarily handle the following functionality: > > > > > 1. ICAP programming (FPGA bitstream download with FPGA Mgr > > > > > integration) 2. Clock scaling 3. Loading firmware container also > > > > > called dsabin (embedded Microblaze > > > > > firmware for ERT and XMC, optional clearing bitstream) 4. > > > > > In-band > > > > > sensors: temp, voltage, power, etc. > > > > > 5. AXI Firewall management > > > > > 6. Device reset and rescan > > > > > 7. Hardware mailbox for communication between two physical > > > > > functions > > > > > > > > > > XRT Linux kernel driver xocl binds to user pf. Like its peer, this > > > > > driver is also modular and organized into several platform drivers > > > > > which handle the following functionality: > > > > > 1. Device memory topology discovery and memory management 2. > > > > > Buffer object abstraction and management for client process 3. > > > > > XDMA MM PCIe DMA engine programming 4. Multi-process aware > > context management 5. > > > > > Compute unit execution management (optionally with help of ERT) for > > > > > client processes > > > > > 6. Hardware mailbox for communication between two physical > > > > > functions > > > > > > > > > > The drivers export ioctls and sysfs nodes for various services. > > > > > xocl driver makes heavy use of DRM GEM features for device memory > > > > > management, reference counting, mmap support and export/import. > > > > > xocl also includes a simple scheduler called KDS which schedules > > > > > compute units and interacts with hardware scheduler running ERT > > > > > firmware. The scheduler understands custom opcodes packaged into > > > > > command objects > > > > and > > > > > provides an asynchronous command done notification via POSIX poll. > > > > > > > > > > More details on architecture, software APIs, ioctl definitions, > > > > > execution model, etc. is available as Sphinx documentation-- > > > > > > > > > > https://xilinx.github.io/XRT/2018.3/html/index.html > > > > > > > > > > The complete runtime software stack (XRT) which includes out of > > > > > tree kernel drivers, user space libraries, board utilities and > > > > > firmware for the hardware scheduler is open source and available > > > > > at https://github.com/Xilinx/XRT > > > > > > > > Before digging into the implementation side more I looked into the > > > > userspace here. I admit I got lost a bit, since there's lots of > > > > indirections and abstractions going on, but it seems like this is > > > > just a fancy ioctl wrapper/driver backend abstractions. Not really > > something applications would use. > > > Sonal Santan > > > > > > 4:20 PM (1 minute ago) > > > > > > to me > > > > > > > > > > -----Original Message----- > > > > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of > > > > Daniel Vetter > > > > Sent: Monday, March 25, 2019 1:28 PM > > > > To: Sonal Santan > > > > Cc: dri-devel@lists.freedesktop.org; gregkh@linuxfoundation.org; > > > > Cyril Chemparathy ; linux-kernel@vger.kernel.org; > > > > Lizhi Hou ; Michal Simek ; > > > > airlied@redhat.com > > > > Subject: Re: [RFC PATCH Xilinx Alveo 0/6] Xilinx PCIe accelerator > > > > driver > > > > > > > > On Tue, Mar 19, 2019 at 02:53:55PM -0700, sonal.santan@xilinx.com > > wrote: > > > > > From: Sonal Santan > > > > > > > > > > Hello, > > > > > > > > > > This patch series adds drivers for Xilinx Alveo PCIe accelerator cards. > > > > > These drivers are part of Xilinx Runtime (XRT) open source stack > > > > > and have been deployed by leading FaaS vendors and many enterprise > > > > customers. > > > > > > > > Cool, first fpga driver submitted to drm! And from a high level I > > > > think this makes a lot of sense. > > > > > > > > > PLATFORM ARCHITECTURE > > > > > > > > > > Alveo PCIe platforms have a static shell and a reconfigurable > > > > > (dynamic) region. The shell is automatically loaded from PROM when > > > > > host is booted and PCIe is enumerated by BIOS. Shell cannot be > > > > > changed till next cold reboot. The shell exposes two physical functions: > > > > > management physical function and user physical function. > > > > > > > > > > Users compile their high level design in C/C++/OpenCL or RTL into > > > > > FPGA image using SDx compiler. The FPGA image packaged as xclbin > > > > > file can be loaded onto reconfigurable region. The image may > > > > > contain one or more compute unit. Users can dynamically swap the > > > > > full image running on the reconfigurable region in order to switch > > > > > between different > > > > workloads. > > > > > > > > > > XRT DRIVERS > > > > > > > > > > XRT Linux kernel driver xmgmt binds to mgmt pf. The driver is > > > > > modular and organized into several platform drivers which > > > > > primarily handle the following functionality: > > > > > 1. ICAP programming (FPGA bitstream download with FPGA Mgr > > > > > integration) 2. Clock scaling 3. Loading firmware container also > > > > > called dsabin (embedded Microblaze > > > > > firmware for ERT and XMC, optional clearing bitstream) 4. > > > > > In-band > > > > > sensors: temp, voltage, power, etc. > > > > > 5. AXI Firewall management > > > > > 6. Device reset and rescan > > > > > 7. Hardware mailbox for communication between two physical > > > > > functions > > > > > > > > > > XRT Linux kernel driver xocl binds to user pf. Like its peer, this > > > > > driver is also modular and organized into several platform drivers > > > > > which handle the following functionality: > > > > > 1. Device memory topology discovery and memory management 2. > > > > > Buffer object abstraction and management for client process 3. > > > > > XDMA MM PCIe DMA engine programming 4. Multi-process aware > > context management 5. > > > > > Compute unit execution management (optionally with help of ERT) for > > > > > client processes > > > > > 6. Hardware mailbox for communication between two physical > > > > > functions > > > > > > > > > > The drivers export ioctls and sysfs nodes for various services. > > > > > xocl driver makes heavy use of DRM GEM features for device memory > > > > > management, reference counting, mmap support and export/import. > > > > > xocl also includes a simple scheduler called KDS which schedules > > > > > compute units and interacts with hardware scheduler running ERT > > > > > firmware. The scheduler understands custom opcodes packaged into > > > > > command objects > > > > and > > > > > provides an asynchronous command done notification via POSIX poll. > > > > > > > > > > More details on architecture, software APIs, ioctl definitions, > > > > > execution model, etc. is available as Sphinx documentation-- > > > > > > > > > > https://xilinx.github.io/XRT/2018.3/html/index.html > > > > > > > > > > The complete runtime software stack (XRT) which includes out of > > > > > tree kernel drivers, user space libraries, board utilities and > > > > > firmware for the hardware scheduler is open source and available > > > > > at https://github.com/Xilinx/XRT > > > > > > > > Before digging into the implementation side more I looked into the > > > > userspace here. I admit I got lost a bit, since there's lots of > > > > indirections and abstractions going on, but it seems like this is > > > > just a fancy ioctl wrapper/driver backend abstractions. Not really > > something applications would use. > > > > > > > > > > Appreciate your feedback. > > > > > > The userspace libraries define a common abstraction but have different > > > implementations for Zynq Ultrascale+ embedded platform, PCIe based > > > Alveo (and Faas) and emulation flows. The latter lets you run your > > application without physical hardware. > > > > > > > > > > > From the pretty picture on github it looks like there's some > > > > opencl/ml/other fancy stuff sitting on top that applications would use. Is > > that also available? > > > > > > The full OpenCL runtime is available in the same repository. Xilinx ML > > > Suite is also based on XRT and its source can be found at > > https://github.com/Xilinx/ml-suite. > > > > Hm, I did a few git grep for the usual opencl entry points, but didn't find > > anything. Do I need to run some build scripts first (which downloads > > additional sourcecode)? Or is there some symbol mangling going on and that's > > why I don't find anything? Pointers very much appreciated. > > The bulk of the OCL runtime code can be found inside > https://github.com/Xilinx/XRT/tree/master/src/runtime_src/xocl. > The OCL runtime also includes https://github.com/Xilinx/XRT/tree/master/src/runtime_src/xrt. > The OCL runtime library called libxilinxopencl.so in turn then uses XRT APIs to talk to the drivers. > For PCIe these XRT APIs are implemented in the library libxrt_core.so the source for which is > https://github.com/Xilinx/XRT/tree/master/src/runtime_src/driver/xclng/xrt. > > You can build a fully functioning runtime stack by following very simple build instructions-- > https://xilinx.github.io/XRT/master/html/build.html > > We do have a few dependencies on standard Linux packages including a few OpenCL packages > bundled by Linux distros: ocl-icd, ocl-icd-devel and opencl-headers Thanks a lot for pointers. No idea why I didn't find this stuff, I guess I was blind. The thing I'm really interested in is the compiler, since at least the experience from gpus says that very much is part of the overall uapi, and definitely needed to be able to make any chances to the implementation. Looking at clCreateProgramWithSource there's only a lookup up cached compiles (it looks for xclbin), and src/runtime_src/xclbin doesn't look like that provides a compiler either. It seems like apps need to precompile everything first. Am I again missing something, or is this how it's supposed to work? Note: There's no expectation for the fully optimizing compiler, and we're totally ok if there's an optimizing proprietary compiler and a basic open one (amd, and bunch of other companies all have such dual stacks running on top of drm kernel drivers). But a basic compiler that can convert basic kernels into machine code is expected. Thanks, Daniel > > Thanks, > -Sonal > > > > > > Typically end users use OpenCL APIs which are part of XRT stack. One > > > can write an application to directly call XRT APIs defined at > > > https://xilinx.github.io/XRT/2018.3/html/xclhal2.main.html > > > > I have no clue about DNN/ML unfortunately, I think I'll try to look into the ocl > > side a bit more first. > > > > Thanks, Daniel > > > > > > > > Thanks, > > > -Sonal > > > > > > > > Thanks, Daniel > > > > > > > > > > > > > > Thanks, > > > > > -Sonal > > > > > > > > > > Sonal Santan (6): > > > > > Add skeleton code: ioctl definitions and build hooks > > > > > Global data structures shared between xocl and xmgmt drivers > > > > > Add platform drivers for various IPs and frameworks > > > > > Add core of XDMA driver > > > > > Add management driver > > > > > Add user physical function driver > > > > > > > > > > drivers/gpu/drm/Kconfig | 2 + > > > > > drivers/gpu/drm/Makefile | 1 + > > > > > drivers/gpu/drm/xocl/Kconfig | 22 + > > > > > drivers/gpu/drm/xocl/Makefile | 3 + > > > > > drivers/gpu/drm/xocl/devices.h | 954 +++++ > > > > > drivers/gpu/drm/xocl/ert.h | 385 ++ > > > > > drivers/gpu/drm/xocl/lib/Makefile.in | 16 + > > > > > drivers/gpu/drm/xocl/lib/cdev_sgdma.h | 63 + > > > > > drivers/gpu/drm/xocl/lib/libxdma.c | 4368 ++++++++++++++++++++ > > > > > drivers/gpu/drm/xocl/lib/libxdma.h | 596 +++ > > > > > drivers/gpu/drm/xocl/lib/libxdma_api.h | 127 + > > > > > drivers/gpu/drm/xocl/mgmtpf/Makefile | 29 + > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-core.c | 960 +++++ > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-core.h | 147 + > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-cw.c | 30 + > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-ioctl.c | 148 + > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-reg.h | 244 ++ > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-sysfs.c | 318 ++ > > > > > drivers/gpu/drm/xocl/mgmtpf/mgmt-utils.c | 399 ++ > > > > > drivers/gpu/drm/xocl/subdev/dna.c | 356 ++ > > > > > drivers/gpu/drm/xocl/subdev/feature_rom.c | 412 ++ > > > > > drivers/gpu/drm/xocl/subdev/firewall.c | 389 ++ > > > > > drivers/gpu/drm/xocl/subdev/fmgr.c | 198 + > > > > > drivers/gpu/drm/xocl/subdev/icap.c | 2859 +++++++++++++ > > > > > drivers/gpu/drm/xocl/subdev/mailbox.c | 1868 +++++++++ > > > > > drivers/gpu/drm/xocl/subdev/mb_scheduler.c | 3059 ++++++++++++++ > > > > > drivers/gpu/drm/xocl/subdev/microblaze.c | 722 ++++ > > > > > drivers/gpu/drm/xocl/subdev/mig.c | 256 ++ > > > > > drivers/gpu/drm/xocl/subdev/sysmon.c | 385 ++ > > > > > drivers/gpu/drm/xocl/subdev/xdma.c | 510 +++ > > > > > drivers/gpu/drm/xocl/subdev/xmc.c | 1480 +++++++ > > > > > drivers/gpu/drm/xocl/subdev/xvc.c | 461 +++ > > > > > drivers/gpu/drm/xocl/userpf/Makefile | 27 + > > > > > drivers/gpu/drm/xocl/userpf/common.h | 157 + > > > > > drivers/gpu/drm/xocl/userpf/xocl_bo.c | 1255 ++++++ > > > > > drivers/gpu/drm/xocl/userpf/xocl_bo.h | 119 + > > > > > drivers/gpu/drm/xocl/userpf/xocl_drm.c | 640 +++ > > > > > drivers/gpu/drm/xocl/userpf/xocl_drv.c | 743 ++++ > > > > > drivers/gpu/drm/xocl/userpf/xocl_ioctl.c | 396 ++ > > > > > drivers/gpu/drm/xocl/userpf/xocl_sysfs.c | 344 ++ > > > > > drivers/gpu/drm/xocl/version.h | 22 + > > > > > drivers/gpu/drm/xocl/xclbin.h | 314 ++ > > > > > drivers/gpu/drm/xocl/xclfeatures.h | 107 + > > > > > drivers/gpu/drm/xocl/xocl_ctx.c | 196 + > > > > > drivers/gpu/drm/xocl/xocl_drm.h | 91 + > > > > > drivers/gpu/drm/xocl/xocl_drv.h | 783 ++++ > > > > > drivers/gpu/drm/xocl/xocl_subdev.c | 540 +++ > > > > > drivers/gpu/drm/xocl/xocl_thread.c | 64 + > > > > > include/uapi/drm/xmgmt_drm.h | 204 + > > > > > include/uapi/drm/xocl_drm.h | 483 +++ > > > > > 50 files changed, 28252 insertions(+) create mode 100644 > > > > > drivers/gpu/drm/xocl/Kconfig create mode 100644 > > > > > drivers/gpu/drm/xocl/Makefile create mode 100644 > > > > > drivers/gpu/drm/xocl/devices.h create mode 100644 > > > > > drivers/gpu/drm/xocl/ert.h create mode 100644 > > > > > drivers/gpu/drm/xocl/lib/Makefile.in > > > > > create mode 100644 drivers/gpu/drm/xocl/lib/cdev_sgdma.h > > > > > create mode 100644 drivers/gpu/drm/xocl/lib/libxdma.c > > > > > create mode 100644 drivers/gpu/drm/xocl/lib/libxdma.h > > > > > create mode 100644 drivers/gpu/drm/xocl/lib/libxdma_api.h > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/Makefile > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-core.c > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-core.h > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-cw.c > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-ioctl.c > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-reg.h > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-sysfs.c > > > > > create mode 100644 drivers/gpu/drm/xocl/mgmtpf/mgmt-utils.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/dna.c create mode > > > > > 100644 drivers/gpu/drm/xocl/subdev/feature_rom.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/firewall.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/fmgr.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/icap.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/mailbox.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/mb_scheduler.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/microblaze.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/mig.c create mode > > > > > 100644 drivers/gpu/drm/xocl/subdev/sysmon.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/xdma.c > > > > > create mode 100644 drivers/gpu/drm/xocl/subdev/xmc.c create mode > > > > > 100644 drivers/gpu/drm/xocl/subdev/xvc.c create mode 100644 > > > > > drivers/gpu/drm/xocl/userpf/Makefile > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/common.h > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_bo.c > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_bo.h > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_drm.c > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_drv.c > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_ioctl.c > > > > > create mode 100644 drivers/gpu/drm/xocl/userpf/xocl_sysfs.c > > > > > create mode 100644 drivers/gpu/drm/xocl/version.h create mode > > > > > 100644 drivers/gpu/drm/xocl/xclbin.h create mode 100644 > > > > > drivers/gpu/drm/xocl/xclfeatures.h > > > > > create mode 100644 drivers/gpu/drm/xocl/xocl_ctx.c create mode > > > > > 100644 drivers/gpu/drm/xocl/xocl_drm.h create mode 100644 > > > > > drivers/gpu/drm/xocl/xocl_drv.h create mode 100644 > > > > > drivers/gpu/drm/xocl/xocl_subdev.c > > > > > create mode 100644 drivers/gpu/drm/xocl/xocl_thread.c > > > > > create mode 100644 include/uapi/drm/xmgmt_drm.h create mode > > > > > 100644 include/uapi/drm/xocl_drm.h > > > > > > > > > > -- > > > > > 2.17.0 > > > > > _______________________________________________ > > > > > dri-devel mailing list > > > > > dri-devel@lists.freedesktop.org > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > > > > > > -- > > > > Daniel Vetter > > > > Software Engineer, Intel Corporation http://blog.ffwll.ch > > > > > > > > -- > > Daniel Vetter > > Software Engineer, Intel Corporation > > +41 (0) 79 365 57 48 - http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH Xilinx Alveo 0/6] Xilinx PCIe accelerator driver Date: Wed, 27 Mar 2019 15:11:37 +0100 Message-ID: <20190327141137.GK2665@phenom.ffwll.local> References: <20190319215401.6562-1-sonal.santan@xilinx.com> <20190325202810.GG2665@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com [IPv6:2a00:1450:4864:20::543]) by gabe.freedesktop.org (Postfix) with ESMTPS id 82E8A6E1F1 for ; Wed, 27 Mar 2019 14:11:42 +0000 (UTC) Received: by mail-ed1-x543.google.com with SMTP id m16so14127327edd.12 for ; Wed, 27 Mar 2019 07:11:42 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sonal Santan Cc: "gregkh@linuxfoundation.org" , Cyril Chemparathy , "linux-kernel@vger.kernel.org" , Lizhi Hou , Michal Simek , "dri-devel@lists.freedesktop.org" , "airlied@redhat.com" List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXIgMjcsIDIwMTkgYXQgMTI6NTA6MTRQTSArMDAwMCwgU29uYWwgU2FudGFuIHdy b3RlOgo+IAo+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IERhbmll bCBWZXR0ZXIgW21haWx0bzpkYW5pZWxAZmZ3bGwuY2hdCj4gPiBTZW50OiBXZWRuZXNkYXksIE1h cmNoIDI3LCAyMDE5IDE6MjMgQU0KPiA+IFRvOiBTb25hbCBTYW50YW4gPHNvbmFsc0B4aWxpbngu Y29tPgo+ID4gQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmc7IGdyZWdraEBsaW51 eGZvdW5kYXRpb24ub3JnOyBDeXJpbAo+ID4gQ2hlbXBhcmF0aHkgPGN5cmlsY0B4aWxpbnguY29t PjsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgTGl6aGkgSG91Cj4gPiA8bGl6aGloQHhp bGlueC5jb20+OyBNaWNoYWwgU2ltZWsgPG1pY2hhbHNAeGlsaW54LmNvbT47IGFpcmxpZWRAcmVk aGF0LmNvbQo+ID4gU3ViamVjdDogUmU6IFtSRkMgUEFUQ0ggWGlsaW54IEFsdmVvIDAvNl0gWGls aW54IFBDSWUgYWNjZWxlcmF0b3IgZHJpdmVyCj4gPiAKPiA+IE9uIFdlZCwgTWFyIDI3LCAyMDE5 IGF0IDEyOjMwIEFNIFNvbmFsIFNhbnRhbiA8c29uYWxzQHhpbGlueC5jb20+IHdyb3RlOgo+ID4g Pgo+ID4gPgo+ID4gPgo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+ID4g RnJvbTogRGFuaWVsIFZldHRlciBbbWFpbHRvOmRhbmllbC52ZXR0ZXJAZmZ3bGwuY2hdIE9uIEJl aGFsZiBPZgo+ID4gPiA+IERhbmllbCBWZXR0ZXIKPiA+ID4gPiBTZW50OiBNb25kYXksIE1hcmNo IDI1LCAyMDE5IDE6MjggUE0KPiA+ID4gPiBUbzogU29uYWwgU2FudGFuIDxzb25hbHNAeGlsaW54 LmNvbT4KPiA+ID4gPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZzsgZ3JlZ2to QGxpbnV4Zm91bmRhdGlvbi5vcmc7Cj4gPiA+ID4gQ3lyaWwgQ2hlbXBhcmF0aHkgPGN5cmlsY0B4 aWxpbnguY29tPjsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsKPiA+ID4gPiBMaXpoaSBI b3UgPGxpemhpaEB4aWxpbnguY29tPjsgTWljaGFsIFNpbWVrIDxtaWNoYWxzQHhpbGlueC5jb20+ Owo+ID4gPiA+IGFpcmxpZWRAcmVkaGF0LmNvbQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDIFBB VENIIFhpbGlueCBBbHZlbyAwLzZdIFhpbGlueCBQQ0llIGFjY2VsZXJhdG9yCj4gPiA+ID4gZHJp dmVyCj4gPiA+ID4KPiA+ID4gPiBPbiBUdWUsIE1hciAxOSwgMjAxOSBhdCAwMjo1Mzo1NVBNIC0w NzAwLCBzb25hbC5zYW50YW5AeGlsaW54LmNvbQo+ID4gd3JvdGU6Cj4gPiA+ID4gPiBGcm9tOiBT b25hbCBTYW50YW4gPHNvbmFsLnNhbnRhbkB4aWxpbnguY29tPgo+ID4gPiA+ID4KPiA+ID4gPiA+ IEhlbGxvLAo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgZHJpdmVy cyBmb3IgWGlsaW54IEFsdmVvIFBDSWUgYWNjZWxlcmF0b3IgY2FyZHMuCj4gPiA+ID4gPiBUaGVz ZSBkcml2ZXJzIGFyZSBwYXJ0IG9mIFhpbGlueCBSdW50aW1lIChYUlQpIG9wZW4gc291cmNlIHN0 YWNrCj4gPiA+ID4gPiBhbmQgaGF2ZSBiZWVuIGRlcGxveWVkIGJ5IGxlYWRpbmcgRmFhUyB2ZW5k b3JzIGFuZCBtYW55IGVudGVycHJpc2UKPiA+ID4gPiBjdXN0b21lcnMuCj4gPiA+ID4KPiA+ID4g PiBDb29sLCBmaXJzdCBmcGdhIGRyaXZlciBzdWJtaXR0ZWQgdG8gZHJtISBBbmQgZnJvbSBhIGhp Z2ggbGV2ZWwgSQo+ID4gPiA+IHRoaW5rIHRoaXMgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UuCj4gPiA+ ID4KPiA+ID4gPiA+IFBMQVRGT1JNIEFSQ0hJVEVDVFVSRQo+ID4gPiA+ID4KPiA+ID4gPiA+IEFs dmVvIFBDSWUgcGxhdGZvcm1zIGhhdmUgYSBzdGF0aWMgc2hlbGwgYW5kIGEgcmVjb25maWd1cmFi bGUKPiA+ID4gPiA+IChkeW5hbWljKSByZWdpb24uIFRoZSBzaGVsbCBpcyBhdXRvbWF0aWNhbGx5 IGxvYWRlZCBmcm9tIFBST00gd2hlbgo+ID4gPiA+ID4gaG9zdCBpcyBib290ZWQgYW5kIFBDSWUg aXMgZW51bWVyYXRlZCBieSBCSU9TLiBTaGVsbCBjYW5ub3QgYmUKPiA+ID4gPiA+IGNoYW5nZWQg dGlsbCBuZXh0IGNvbGQgcmVib290LiBUaGUgc2hlbGwgZXhwb3NlcyB0d28gcGh5c2ljYWwgZnVu Y3Rpb25zOgo+ID4gPiA+ID4gbWFuYWdlbWVudCBwaHlzaWNhbCBmdW5jdGlvbiBhbmQgdXNlciBw aHlzaWNhbCBmdW5jdGlvbi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBVc2VycyBjb21waWxlIHRoZWly IGhpZ2ggbGV2ZWwgZGVzaWduIGluIEMvQysrL09wZW5DTCBvciBSVEwgaW50bwo+ID4gPiA+ID4g RlBHQSBpbWFnZSB1c2luZyBTRHggY29tcGlsZXIuIFRoZSBGUEdBIGltYWdlIHBhY2thZ2VkIGFz IHhjbGJpbgo+ID4gPiA+ID4gZmlsZSBjYW4gYmUgbG9hZGVkIG9udG8gcmVjb25maWd1cmFibGUg cmVnaW9uLiBUaGUgaW1hZ2UgbWF5Cj4gPiA+ID4gPiBjb250YWluIG9uZSBvciBtb3JlIGNvbXB1 dGUgdW5pdC4gVXNlcnMgY2FuIGR5bmFtaWNhbGx5IHN3YXAgdGhlCj4gPiA+ID4gPiBmdWxsIGlt YWdlIHJ1bm5pbmcgb24gdGhlIHJlY29uZmlndXJhYmxlIHJlZ2lvbiBpbiBvcmRlciB0byBzd2l0 Y2gKPiA+ID4gPiA+IGJldHdlZW4gZGlmZmVyZW50Cj4gPiA+ID4gd29ya2xvYWRzLgo+ID4gPiA+ ID4KPiA+ID4gPiA+IFhSVCBEUklWRVJTCj4gPiA+ID4gPgo+ID4gPiA+ID4gWFJUIExpbnV4IGtl cm5lbCBkcml2ZXIgeG1nbXQgYmluZHMgdG8gbWdtdCBwZi4gVGhlIGRyaXZlciBpcwo+ID4gPiA+ ID4gbW9kdWxhciBhbmQgb3JnYW5pemVkIGludG8gc2V2ZXJhbCBwbGF0Zm9ybSBkcml2ZXJzIHdo aWNoCj4gPiA+ID4gPiBwcmltYXJpbHkgaGFuZGxlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0 eToKPiA+ID4gPiA+IDEuICBJQ0FQIHByb2dyYW1taW5nIChGUEdBIGJpdHN0cmVhbSBkb3dubG9h ZCB3aXRoIEZQR0EgTWdyCj4gPiA+ID4gPiBpbnRlZ3JhdGlvbikgMi4gIENsb2NrIHNjYWxpbmcg My4gIExvYWRpbmcgZmlybXdhcmUgY29udGFpbmVyIGFsc28KPiA+ID4gPiA+IGNhbGxlZCBkc2Fi aW4gKGVtYmVkZGVkIE1pY3JvYmxhemUKPiA+ID4gPiA+ICAgICBmaXJtd2FyZSBmb3IgRVJUIGFu ZCBYTUMsIG9wdGlvbmFsIGNsZWFyaW5nIGJpdHN0cmVhbSkgNC4KPiA+ID4gPiA+IEluLWJhbmQK PiA+ID4gPiA+IHNlbnNvcnM6IHRlbXAsIHZvbHRhZ2UsIHBvd2VyLCBldGMuCj4gPiA+ID4gPiA1 LiAgQVhJIEZpcmV3YWxsIG1hbmFnZW1lbnQKPiA+ID4gPiA+IDYuICBEZXZpY2UgcmVzZXQgYW5k IHJlc2Nhbgo+ID4gPiA+ID4gNy4gIEhhcmR3YXJlIG1haWxib3ggZm9yIGNvbW11bmljYXRpb24g YmV0d2VlbiB0d28gcGh5c2ljYWwKPiA+ID4gPiA+IGZ1bmN0aW9ucwo+ID4gPiA+ID4KPiA+ID4g PiA+IFhSVCBMaW51eCBrZXJuZWwgZHJpdmVyIHhvY2wgYmluZHMgdG8gdXNlciBwZi4gTGlrZSBp dHMgcGVlciwgdGhpcwo+ID4gPiA+ID4gZHJpdmVyIGlzIGFsc28gbW9kdWxhciBhbmQgb3JnYW5p emVkIGludG8gc2V2ZXJhbCBwbGF0Zm9ybSBkcml2ZXJzCj4gPiA+ID4gPiB3aGljaCBoYW5kbGUg dGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5Ogo+ID4gPiA+ID4gMS4gIERldmljZSBtZW1vcnkg dG9wb2xvZ3kgZGlzY292ZXJ5IGFuZCBtZW1vcnkgbWFuYWdlbWVudCAyLgo+ID4gPiA+ID4gQnVm ZmVyIG9iamVjdCBhYnN0cmFjdGlvbiBhbmQgbWFuYWdlbWVudCBmb3IgY2xpZW50IHByb2Nlc3Mg My4KPiA+ID4gPiA+IFhETUEgTU0gUENJZSBETUEgZW5naW5lIHByb2dyYW1taW5nIDQuICBNdWx0 aS1wcm9jZXNzIGF3YXJlCj4gPiBjb250ZXh0IG1hbmFnZW1lbnQgNS4KPiA+ID4gPiA+IENvbXB1 dGUgdW5pdCBleGVjdXRpb24gbWFuYWdlbWVudCAob3B0aW9uYWxseSB3aXRoIGhlbHAgb2YgRVJU KSBmb3IKPiA+ID4gPiA+ICAgICBjbGllbnQgcHJvY2Vzc2VzCj4gPiA+ID4gPiA2LiAgSGFyZHdh cmUgbWFpbGJveCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBwaHlzaWNhbAo+ID4gPiA+ ID4gZnVuY3Rpb25zCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhlIGRyaXZlcnMgZXhwb3J0IGlvY3Rs cyBhbmQgc3lzZnMgbm9kZXMgZm9yIHZhcmlvdXMgc2VydmljZXMuCj4gPiA+ID4gPiB4b2NsIGRy aXZlciBtYWtlcyBoZWF2eSB1c2Ugb2YgRFJNIEdFTSBmZWF0dXJlcyBmb3IgZGV2aWNlIG1lbW9y eQo+ID4gPiA+ID4gbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBtbWFwIHN1cHBvcnQg YW5kIGV4cG9ydC9pbXBvcnQuCj4gPiA+ID4gPiB4b2NsIGFsc28gaW5jbHVkZXMgYSBzaW1wbGUg c2NoZWR1bGVyIGNhbGxlZCBLRFMgd2hpY2ggc2NoZWR1bGVzCj4gPiA+ID4gPiBjb21wdXRlIHVu aXRzIGFuZCBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSBzY2hlZHVsZXIgcnVubmluZyBFUlQKPiA+ ID4gPiA+IGZpcm13YXJlLiBUaGUgc2NoZWR1bGVyIHVuZGVyc3RhbmRzIGN1c3RvbSBvcGNvZGVz IHBhY2thZ2VkIGludG8KPiA+ID4gPiA+IGNvbW1hbmQgb2JqZWN0cwo+ID4gPiA+IGFuZAo+ID4g PiA+ID4gcHJvdmlkZXMgYW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgZG9uZSBub3RpZmljYXRpb24g dmlhIFBPU0lYIHBvbGwuCj4gPiA+ID4gPgo+ID4gPiA+ID4gTW9yZSBkZXRhaWxzIG9uIGFyY2hp dGVjdHVyZSwgc29mdHdhcmUgQVBJcywgaW9jdGwgZGVmaW5pdGlvbnMsCj4gPiA+ID4gPiBleGVj dXRpb24gbW9kZWwsIGV0Yy4gaXMgYXZhaWxhYmxlIGFzIFNwaGlueCBkb2N1bWVudGF0aW9uLS0K PiA+ID4gPiA+Cj4gPiA+ID4gPiBodHRwczovL3hpbGlueC5naXRodWIuaW8vWFJULzIwMTguMy9o dG1sL2luZGV4Lmh0bWwKPiA+ID4gPiA+Cj4gPiA+ID4gPiBUaGUgY29tcGxldGUgcnVudGltZSBz b2Z0d2FyZSBzdGFjayAoWFJUKSB3aGljaCBpbmNsdWRlcyBvdXQgb2YKPiA+ID4gPiA+IHRyZWUg a2VybmVsIGRyaXZlcnMsIHVzZXIgc3BhY2UgbGlicmFyaWVzLCBib2FyZCB1dGlsaXRpZXMgYW5k Cj4gPiA+ID4gPiBmaXJtd2FyZSBmb3IgdGhlIGhhcmR3YXJlIHNjaGVkdWxlciBpcyBvcGVuIHNv dXJjZSBhbmQgYXZhaWxhYmxlCj4gPiA+ID4gPiBhdCBodHRwczovL2dpdGh1Yi5jb20vWGlsaW54 L1hSVAo+ID4gPiA+Cj4gPiA+ID4gQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgaW1wbGVtZW50YXRp b24gc2lkZSBtb3JlIEkgbG9va2VkIGludG8gdGhlCj4gPiA+ID4gdXNlcnNwYWNlIGhlcmUuIEkg YWRtaXQgSSBnb3QgbG9zdCBhIGJpdCwgc2luY2UgdGhlcmUncyBsb3RzIG9mCj4gPiA+ID4gaW5k aXJlY3Rpb25zIGFuZCBhYnN0cmFjdGlvbnMgZ29pbmcgb24sIGJ1dCBpdCBzZWVtcyBsaWtlIHRo aXMgaXMKPiA+ID4gPiBqdXN0IGEgZmFuY3kgaW9jdGwgd3JhcHBlci9kcml2ZXIgYmFja2VuZCBh YnN0cmFjdGlvbnMuIE5vdCByZWFsbHkKPiA+IHNvbWV0aGluZyBhcHBsaWNhdGlvbnMgd291bGQg dXNlLgo+ID4gPiBTb25hbCBTYW50YW4gPHNvbmFsc0B4aWxpbnguY29tPgo+ID4gPgo+ID4gPiA0 OjIwIFBNICgxIG1pbnV0ZSBhZ28pCj4gPiA+Cj4gPiA+IHRvIG1lCj4gPiA+Cj4gPiA+Cj4gPiA+ ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+ID4gPiBGcm9tOiBEYW5pZWwgVmV0dGVy IFttYWlsdG86ZGFuaWVsLnZldHRlckBmZndsbC5jaF0gT24gQmVoYWxmIE9mCj4gPiA+ID4gRGFu aWVsIFZldHRlcgo+ID4gPiA+IFNlbnQ6IE1vbmRheSwgTWFyY2ggMjUsIDIwMTkgMToyOCBQTQo+ ID4gPiA+IFRvOiBTb25hbCBTYW50YW4gPHNvbmFsc0B4aWxpbnguY29tPgo+ID4gPiA+IENjOiBk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnOyBncmVna2hAbGludXhmb3VuZGF0aW9uLm9y ZzsKPiA+ID4gPiBDeXJpbCBDaGVtcGFyYXRoeSA8Y3lyaWxjQHhpbGlueC5jb20+OyBsaW51eC1r ZXJuZWxAdmdlci5rZXJuZWwub3JnOwo+ID4gPiA+IExpemhpIEhvdSA8bGl6aGloQHhpbGlueC5j b20+OyBNaWNoYWwgU2ltZWsgPG1pY2hhbHNAeGlsaW54LmNvbT47Cj4gPiA+ID4gYWlybGllZEBy ZWRoYXQuY29tCj4gPiA+ID4gU3ViamVjdDogUmU6IFtSRkMgUEFUQ0ggWGlsaW54IEFsdmVvIDAv Nl0gWGlsaW54IFBDSWUgYWNjZWxlcmF0b3IKPiA+ID4gPiBkcml2ZXIKPiA+ID4gPgo+ID4gPiA+ IE9uIFR1ZSwgTWFyIDE5LCAyMDE5IGF0IDAyOjUzOjU1UE0gLTA3MDAsIHNvbmFsLnNhbnRhbkB4 aWxpbnguY29tCj4gPiB3cm90ZToKPiA+ID4gPiA+IEZyb206IFNvbmFsIFNhbnRhbiA8c29uYWwu c2FudGFuQHhpbGlueC5jb20+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSGVsbG8sCj4gPiA+ID4gPgo+ ID4gPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXMgYWRkcyBkcml2ZXJzIGZvciBYaWxpbnggQWx2ZW8g UENJZSBhY2NlbGVyYXRvciBjYXJkcy4KPiA+ID4gPiA+IFRoZXNlIGRyaXZlcnMgYXJlIHBhcnQg b2YgWGlsaW54IFJ1bnRpbWUgKFhSVCkgb3BlbiBzb3VyY2Ugc3RhY2sKPiA+ID4gPiA+IGFuZCBo YXZlIGJlZW4gZGVwbG95ZWQgYnkgbGVhZGluZyBGYWFTIHZlbmRvcnMgYW5kIG1hbnkgZW50ZXJw cmlzZQo+ID4gPiA+IGN1c3RvbWVycy4KPiA+ID4gPgo+ID4gPiA+IENvb2wsIGZpcnN0IGZwZ2Eg ZHJpdmVyIHN1Ym1pdHRlZCB0byBkcm0hIEFuZCBmcm9tIGEgaGlnaCBsZXZlbCBJCj4gPiA+ID4g dGhpbmsgdGhpcyBtYWtlcyBhIGxvdCBvZiBzZW5zZS4KPiA+ID4gPgo+ID4gPiA+ID4gUExBVEZP Uk0gQVJDSElURUNUVVJFCj4gPiA+ID4gPgo+ID4gPiA+ID4gQWx2ZW8gUENJZSBwbGF0Zm9ybXMg aGF2ZSBhIHN0YXRpYyBzaGVsbCBhbmQgYSByZWNvbmZpZ3VyYWJsZQo+ID4gPiA+ID4gKGR5bmFt aWMpIHJlZ2lvbi4gVGhlIHNoZWxsIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGZyb20gUFJPTSB3 aGVuCj4gPiA+ID4gPiBob3N0IGlzIGJvb3RlZCBhbmQgUENJZSBpcyBlbnVtZXJhdGVkIGJ5IEJJ T1MuIFNoZWxsIGNhbm5vdCBiZQo+ID4gPiA+ID4gY2hhbmdlZCB0aWxsIG5leHQgY29sZCByZWJv b3QuIFRoZSBzaGVsbCBleHBvc2VzIHR3byBwaHlzaWNhbCBmdW5jdGlvbnM6Cj4gPiA+ID4gPiBt YW5hZ2VtZW50IHBoeXNpY2FsIGZ1bmN0aW9uIGFuZCB1c2VyIHBoeXNpY2FsIGZ1bmN0aW9uLgo+ ID4gPiA+ID4KPiA+ID4gPiA+IFVzZXJzIGNvbXBpbGUgdGhlaXIgaGlnaCBsZXZlbCBkZXNpZ24g aW4gQy9DKysvT3BlbkNMIG9yIFJUTCBpbnRvCj4gPiA+ID4gPiBGUEdBIGltYWdlIHVzaW5nIFNE eCBjb21waWxlci4gVGhlIEZQR0EgaW1hZ2UgcGFja2FnZWQgYXMgeGNsYmluCj4gPiA+ID4gPiBm aWxlIGNhbiBiZSBsb2FkZWQgb250byByZWNvbmZpZ3VyYWJsZSByZWdpb24uIFRoZSBpbWFnZSBt YXkKPiA+ID4gPiA+IGNvbnRhaW4gb25lIG9yIG1vcmUgY29tcHV0ZSB1bml0LiBVc2VycyBjYW4g ZHluYW1pY2FsbHkgc3dhcCB0aGUKPiA+ID4gPiA+IGZ1bGwgaW1hZ2UgcnVubmluZyBvbiB0aGUg cmVjb25maWd1cmFibGUgcmVnaW9uIGluIG9yZGVyIHRvIHN3aXRjaAo+ID4gPiA+ID4gYmV0d2Vl biBkaWZmZXJlbnQKPiA+ID4gPiB3b3JrbG9hZHMuCj4gPiA+ID4gPgo+ID4gPiA+ID4gWFJUIERS SVZFUlMKPiA+ID4gPiA+Cj4gPiA+ID4gPiBYUlQgTGludXgga2VybmVsIGRyaXZlciB4bWdtdCBi aW5kcyB0byBtZ210IHBmLiBUaGUgZHJpdmVyIGlzCj4gPiA+ID4gPiBtb2R1bGFyIGFuZCBvcmdh bml6ZWQgaW50byBzZXZlcmFsIHBsYXRmb3JtIGRyaXZlcnMgd2hpY2gKPiA+ID4gPiA+IHByaW1h cmlseSBoYW5kbGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXR5Ogo+ID4gPiA+ID4gMS4gIElD QVAgcHJvZ3JhbW1pbmcgKEZQR0EgYml0c3RyZWFtIGRvd25sb2FkIHdpdGggRlBHQSBNZ3IKPiA+ ID4gPiA+IGludGVncmF0aW9uKSAyLiAgQ2xvY2sgc2NhbGluZyAzLiAgTG9hZGluZyBmaXJtd2Fy ZSBjb250YWluZXIgYWxzbwo+ID4gPiA+ID4gY2FsbGVkIGRzYWJpbiAoZW1iZWRkZWQgTWljcm9i bGF6ZQo+ID4gPiA+ID4gICAgIGZpcm13YXJlIGZvciBFUlQgYW5kIFhNQywgb3B0aW9uYWwgY2xl YXJpbmcgYml0c3RyZWFtKSA0Lgo+ID4gPiA+ID4gSW4tYmFuZAo+ID4gPiA+ID4gc2Vuc29yczog dGVtcCwgdm9sdGFnZSwgcG93ZXIsIGV0Yy4KPiA+ID4gPiA+IDUuICBBWEkgRmlyZXdhbGwgbWFu YWdlbWVudAo+ID4gPiA+ID4gNi4gIERldmljZSByZXNldCBhbmQgcmVzY2FuCj4gPiA+ID4gPiA3 LiAgSGFyZHdhcmUgbWFpbGJveCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBwaHlzaWNh bAo+ID4gPiA+ID4gZnVuY3Rpb25zCj4gPiA+ID4gPgo+ID4gPiA+ID4gWFJUIExpbnV4IGtlcm5l bCBkcml2ZXIgeG9jbCBiaW5kcyB0byB1c2VyIHBmLiBMaWtlIGl0cyBwZWVyLCB0aGlzCj4gPiA+ ID4gPiBkcml2ZXIgaXMgYWxzbyBtb2R1bGFyIGFuZCBvcmdhbml6ZWQgaW50byBzZXZlcmFsIHBs YXRmb3JtIGRyaXZlcnMKPiA+ID4gPiA+IHdoaWNoIGhhbmRsZSB0aGUgZm9sbG93aW5nIGZ1bmN0 aW9uYWxpdHk6Cj4gPiA+ID4gPiAxLiAgRGV2aWNlIG1lbW9yeSB0b3BvbG9neSBkaXNjb3Zlcnkg YW5kIG1lbW9yeSBtYW5hZ2VtZW50IDIuCj4gPiA+ID4gPiBCdWZmZXIgb2JqZWN0IGFic3RyYWN0 aW9uIGFuZCBtYW5hZ2VtZW50IGZvciBjbGllbnQgcHJvY2VzcyAzLgo+ID4gPiA+ID4gWERNQSBN TSBQQ0llIERNQSBlbmdpbmUgcHJvZ3JhbW1pbmcgNC4gIE11bHRpLXByb2Nlc3MgYXdhcmUKPiA+ IGNvbnRleHQgbWFuYWdlbWVudCA1Lgo+ID4gPiA+ID4gQ29tcHV0ZSB1bml0IGV4ZWN1dGlvbiBt YW5hZ2VtZW50IChvcHRpb25hbGx5IHdpdGggaGVscCBvZiBFUlQpIGZvcgo+ID4gPiA+ID4gICAg IGNsaWVudCBwcm9jZXNzZXMKPiA+ID4gPiA+IDYuICBIYXJkd2FyZSBtYWlsYm94IGZvciBjb21t dW5pY2F0aW9uIGJldHdlZW4gdHdvIHBoeXNpY2FsCj4gPiA+ID4gPiBmdW5jdGlvbnMKPiA+ID4g PiA+Cj4gPiA+ID4gPiBUaGUgZHJpdmVycyBleHBvcnQgaW9jdGxzIGFuZCBzeXNmcyBub2RlcyBm b3IgdmFyaW91cyBzZXJ2aWNlcy4KPiA+ID4gPiA+IHhvY2wgZHJpdmVyIG1ha2VzIGhlYXZ5IHVz ZSBvZiBEUk0gR0VNIGZlYXR1cmVzIGZvciBkZXZpY2UgbWVtb3J5Cj4gPiA+ID4gPiBtYW5hZ2Vt ZW50LCByZWZlcmVuY2UgY291bnRpbmcsIG1tYXAgc3VwcG9ydCBhbmQgZXhwb3J0L2ltcG9ydC4K PiA+ID4gPiA+IHhvY2wgYWxzbyBpbmNsdWRlcyBhIHNpbXBsZSBzY2hlZHVsZXIgY2FsbGVkIEtE UyB3aGljaCBzY2hlZHVsZXMKPiA+ID4gPiA+IGNvbXB1dGUgdW5pdHMgYW5kIGludGVyYWN0cyB3 aXRoIGhhcmR3YXJlIHNjaGVkdWxlciBydW5uaW5nIEVSVAo+ID4gPiA+ID4gZmlybXdhcmUuIFRo ZSBzY2hlZHVsZXIgdW5kZXJzdGFuZHMgY3VzdG9tIG9wY29kZXMgcGFja2FnZWQgaW50bwo+ID4g PiA+ID4gY29tbWFuZCBvYmplY3RzCj4gPiA+ID4gYW5kCj4gPiA+ID4gPiBwcm92aWRlcyBhbiBh c3luY2hyb25vdXMgY29tbWFuZCBkb25lIG5vdGlmaWNhdGlvbiB2aWEgUE9TSVggcG9sbC4KPiA+ ID4gPiA+Cj4gPiA+ID4gPiBNb3JlIGRldGFpbHMgb24gYXJjaGl0ZWN0dXJlLCBzb2Z0d2FyZSBB UElzLCBpb2N0bCBkZWZpbml0aW9ucywKPiA+ID4gPiA+IGV4ZWN1dGlvbiBtb2RlbCwgZXRjLiBp cyBhdmFpbGFibGUgYXMgU3BoaW54IGRvY3VtZW50YXRpb24tLQo+ID4gPiA+ID4KPiA+ID4gPiA+ IGh0dHBzOi8veGlsaW54LmdpdGh1Yi5pby9YUlQvMjAxOC4zL2h0bWwvaW5kZXguaHRtbAo+ID4g PiA+ID4KPiA+ID4gPiA+IFRoZSBjb21wbGV0ZSBydW50aW1lIHNvZnR3YXJlIHN0YWNrIChYUlQp IHdoaWNoIGluY2x1ZGVzIG91dCBvZgo+ID4gPiA+ID4gdHJlZSBrZXJuZWwgZHJpdmVycywgdXNl ciBzcGFjZSBsaWJyYXJpZXMsIGJvYXJkIHV0aWxpdGllcyBhbmQKPiA+ID4gPiA+IGZpcm13YXJl IGZvciB0aGUgaGFyZHdhcmUgc2NoZWR1bGVyIGlzIG9wZW4gc291cmNlIGFuZCBhdmFpbGFibGUK PiA+ID4gPiA+IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvWFJUCj4gPiA+ID4KPiA+ID4g PiBCZWZvcmUgZGlnZ2luZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBzaWRlIG1vcmUgSSBsb29r ZWQgaW50byB0aGUKPiA+ID4gPiB1c2Vyc3BhY2UgaGVyZS4gSSBhZG1pdCBJIGdvdCBsb3N0IGEg Yml0LCBzaW5jZSB0aGVyZSdzIGxvdHMgb2YKPiA+ID4gPiBpbmRpcmVjdGlvbnMgYW5kIGFic3Ry YWN0aW9ucyBnb2luZyBvbiwgYnV0IGl0IHNlZW1zIGxpa2UgdGhpcyBpcwo+ID4gPiA+IGp1c3Qg YSBmYW5jeSBpb2N0bCB3cmFwcGVyL2RyaXZlciBiYWNrZW5kIGFic3RyYWN0aW9ucy4gTm90IHJl YWxseQo+ID4gc29tZXRoaW5nIGFwcGxpY2F0aW9ucyB3b3VsZCB1c2UuCj4gPiA+ID4KPiA+ID4K PiA+ID4gQXBwcmVjaWF0ZSB5b3VyIGZlZWRiYWNrLgo+ID4gPgo+ID4gPiBUaGUgdXNlcnNwYWNl IGxpYnJhcmllcyBkZWZpbmUgYSBjb21tb24gYWJzdHJhY3Rpb24gYnV0IGhhdmUgZGlmZmVyZW50 Cj4gPiA+IGltcGxlbWVudGF0aW9ucyBmb3IgWnlucSBVbHRyYXNjYWxlKyBlbWJlZGRlZCBwbGF0 Zm9ybSwgUENJZSBiYXNlZAo+ID4gPiBBbHZlbyAoYW5kIEZhYXMpIGFuZCBlbXVsYXRpb24gZmxv d3MuIFRoZSBsYXR0ZXIgbGV0cyB5b3UgcnVuIHlvdXIKPiA+IGFwcGxpY2F0aW9uIHdpdGhvdXQg cGh5c2ljYWwgaGFyZHdhcmUuCj4gPiA+Cj4gPiA+ID4KPiA+ID4gPiBGcm9tIHRoZSBwcmV0dHkg cGljdHVyZSBvbiBnaXRodWIgaXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUKPiA+ID4gPiBvcGVu Y2wvbWwvb3RoZXIgZmFuY3kgc3R1ZmYgc2l0dGluZyBvbiB0b3AgdGhhdCBhcHBsaWNhdGlvbnMg d291bGQgdXNlLiBJcwo+ID4gdGhhdCBhbHNvIGF2YWlsYWJsZT8KPiA+ID4KPiA+ID4gVGhlIGZ1 bGwgT3BlbkNMIHJ1bnRpbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBzYW1lIHJlcG9zaXRvcnkuIFhp bGlueCBNTAo+ID4gPiBTdWl0ZSBpcyBhbHNvIGJhc2VkIG9uIFhSVCBhbmQgaXRzIHNvdXJjZSBj YW4gYmUgZm91bmQgYXQKPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvbWwtc3VpdGUuCj4g PiAKPiA+IEhtLCBJIGRpZCBhIGZldyBnaXQgZ3JlcCBmb3IgdGhlIHVzdWFsIG9wZW5jbCBlbnRy eSBwb2ludHMsIGJ1dCBkaWRuJ3QgZmluZAo+ID4gYW55dGhpbmcuIERvIEkgbmVlZCB0byBydW4g c29tZSBidWlsZCBzY3JpcHRzIGZpcnN0ICh3aGljaCBkb3dubG9hZHMKPiA+IGFkZGl0aW9uYWwg c291cmNlY29kZSk/IE9yIGlzIHRoZXJlIHNvbWUgc3ltYm9sIG1hbmdsaW5nIGdvaW5nIG9uIGFu ZCB0aGF0J3MKPiA+IHdoeSBJIGRvbid0IGZpbmQgYW55dGhpbmc/IFBvaW50ZXJzIHZlcnkgbXVj aCBhcHByZWNpYXRlZC4KPiAKPiBUaGUgYnVsayBvZiB0aGUgT0NMIHJ1bnRpbWUgY29kZSBjYW4g YmUgZm91bmQgaW5zaWRlIAo+IGh0dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvWFJUL3RyZWUvbWFz dGVyL3NyYy9ydW50aW1lX3NyYy94b2NsLiAKPiBUaGUgT0NMIHJ1bnRpbWUgYWxzbyBpbmNsdWRl cyBodHRwczovL2dpdGh1Yi5jb20vWGlsaW54L1hSVC90cmVlL21hc3Rlci9zcmMvcnVudGltZV9z cmMveHJ0Lgo+IFRoZSBPQ0wgcnVudGltZSBsaWJyYXJ5IGNhbGxlZCBsaWJ4aWxpbnhvcGVuY2wu c28gaW4gdHVybiB0aGVuIHVzZXMgWFJUIEFQSXMgdG8gdGFsayB0byB0aGUgZHJpdmVycy4gCj4g Rm9yIFBDSWUgdGhlc2UgWFJUIEFQSXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBsaWJyYXJ5IGxp YnhydF9jb3JlLnNvIHRoZSBzb3VyY2UgZm9yIHdoaWNoIGlzCj4gaHR0cHM6Ly9naXRodWIuY29t L1hpbGlueC9YUlQvdHJlZS9tYXN0ZXIvc3JjL3J1bnRpbWVfc3JjL2RyaXZlci94Y2xuZy94cnQu Cj4gCj4gWW91IGNhbiBidWlsZCBhIGZ1bGx5IGZ1bmN0aW9uaW5nIHJ1bnRpbWUgc3RhY2sgYnkg Zm9sbG93aW5nIHZlcnkgc2ltcGxlIGJ1aWxkIGluc3RydWN0aW9ucy0tCj4gaHR0cHM6Ly94aWxp bnguZ2l0aHViLmlvL1hSVC9tYXN0ZXIvaHRtbC9idWlsZC5odG1sCj4gCj4gV2UgZG8gaGF2ZSBh IGZldyBkZXBlbmRlbmNpZXMgb24gc3RhbmRhcmQgTGludXggcGFja2FnZXMgaW5jbHVkaW5nIGEg ZmV3IE9wZW5DTCBwYWNrYWdlcyAKPiBidW5kbGVkIGJ5IExpbnV4IGRpc3Ryb3M6IG9jbC1pY2Qs IG9jbC1pY2QtZGV2ZWwgYW5kIG9wZW5jbC1oZWFkZXJzCgpUaGFua3MgYSBsb3QgZm9yIHBvaW50 ZXJzLiBObyBpZGVhIHdoeSBJIGRpZG4ndCBmaW5kIHRoaXMgc3R1ZmYsIEkgZ3Vlc3MgSQp3YXMg YmxpbmQuCgpUaGUgdGhpbmcgSSdtIHJlYWxseSBpbnRlcmVzdGVkIGluIGlzIHRoZSBjb21waWxl ciwgc2luY2UgYXQgbGVhc3QgdGhlCmV4cGVyaWVuY2UgZnJvbSBncHVzIHNheXMgdGhhdCB2ZXJ5 IG11Y2ggaXMgcGFydCBvZiB0aGUgb3ZlcmFsbCB1YXBpLCBhbmQKZGVmaW5pdGVseSBuZWVkZWQg dG8gYmUgYWJsZSB0byBtYWtlIGFueSBjaGFuY2VzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KTG9v a2luZyBhdCBjbENyZWF0ZVByb2dyYW1XaXRoU291cmNlIHRoZXJlJ3Mgb25seSBhIGxvb2t1cCB1 cCBjYWNoZWQKY29tcGlsZXMgKGl0IGxvb2tzIGZvciB4Y2xiaW4pLCBhbmQgc3JjL3J1bnRpbWVf c3JjL3hjbGJpbiBkb2Vzbid0IGxvb2sKbGlrZSB0aGF0IHByb3ZpZGVzIGEgY29tcGlsZXIgZWl0 aGVyLiBJdCBzZWVtcyBsaWtlIGFwcHMgbmVlZCB0bwpwcmVjb21waWxlIGV2ZXJ5dGhpbmcgZmly c3QuIEFtIEkgYWdhaW4gbWlzc2luZyBzb21ldGhpbmcsIG9yIGlzIHRoaXMgaG93Cml0J3Mgc3Vw cG9zZWQgdG8gd29yaz8KCk5vdGU6IFRoZXJlJ3Mgbm8gZXhwZWN0YXRpb24gZm9yIHRoZSBmdWxs eSBvcHRpbWl6aW5nIGNvbXBpbGVyLCBhbmQgd2UncmUKdG90YWxseSBvayBpZiB0aGVyZSdzIGFu IG9wdGltaXppbmcgcHJvcHJpZXRhcnkgY29tcGlsZXIgYW5kIGEgYmFzaWMgb3BlbgpvbmUgKGFt ZCwgYW5kIGJ1bmNoIG9mIG90aGVyIGNvbXBhbmllcyBhbGwgaGF2ZSBzdWNoIGR1YWwgc3RhY2tz IHJ1bm5pbmcKb24gdG9wIG9mIGRybSBrZXJuZWwgZHJpdmVycykuIEJ1dCBhIGJhc2ljIGNvbXBp bGVyIHRoYXQgY2FuIGNvbnZlcnQgYmFzaWMKa2VybmVscyBpbnRvIG1hY2hpbmUgY29kZSBpcyBl eHBlY3RlZC4KClRoYW5rcywgRGFuaWVsCgo+IAo+IFRoYW5rcywKPiAtU29uYWwKPiAKPiA+IAo+ ID4gPiBUeXBpY2FsbHkgZW5kIHVzZXJzIHVzZSBPcGVuQ0wgQVBJcyB3aGljaCBhcmUgcGFydCBv ZiBYUlQgc3RhY2suIE9uZQo+ID4gPiBjYW4gd3JpdGUgYW4gYXBwbGljYXRpb24gdG8gZGlyZWN0 bHkgY2FsbCBYUlQgQVBJcyBkZWZpbmVkIGF0Cj4gPiA+IGh0dHBzOi8veGlsaW54LmdpdGh1Yi5p by9YUlQvMjAxOC4zL2h0bWwveGNsaGFsMi5tYWluLmh0bWwKPiA+IAo+ID4gSSBoYXZlIG5vIGNs dWUgYWJvdXQgRE5OL01MIHVuZm9ydHVuYXRlbHksIEkgdGhpbmsgSSdsbCB0cnkgdG8gbG9vayBp bnRvIHRoZSBvY2wKPiA+IHNpZGUgYSBiaXQgbW9yZSBmaXJzdC4KPiA+IAo+ID4gVGhhbmtzLCBE YW5pZWwKPiA+IAo+ID4gPgo+ID4gPiBUaGFua3MsCj4gPiA+IC1Tb25hbAo+ID4gPiA+Cj4gPiA+ ID4gVGhhbmtzLCBEYW5pZWwKPiA+ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+IFRoYW5rcywKPiA+ ID4gPiA+IC1Tb25hbAo+ID4gPiA+ID4KPiA+ID4gPiA+IFNvbmFsIFNhbnRhbiAoNik6Cj4gPiA+ ID4gPiAgIEFkZCBza2VsZXRvbiBjb2RlOiBpb2N0bCBkZWZpbml0aW9ucyBhbmQgYnVpbGQgaG9v a3MKPiA+ID4gPiA+ICAgR2xvYmFsIGRhdGEgc3RydWN0dXJlcyBzaGFyZWQgYmV0d2VlbiB4b2Ns IGFuZCB4bWdtdCBkcml2ZXJzCj4gPiA+ID4gPiAgIEFkZCBwbGF0Zm9ybSBkcml2ZXJzIGZvciB2 YXJpb3VzIElQcyBhbmQgZnJhbWV3b3Jrcwo+ID4gPiA+ID4gICBBZGQgY29yZSBvZiBYRE1BIGRy aXZlcgo+ID4gPiA+ID4gICBBZGQgbWFuYWdlbWVudCBkcml2ZXIKPiA+ID4gPiA+ICAgQWRkIHVz ZXIgcGh5c2ljYWwgZnVuY3Rpb24gZHJpdmVyCj4gPiA+ID4gPgo+ID4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwo+ID4gPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ID4gPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL0tjb25maWcgICAgICAgICAgICAgICB8ICAgMjIgKwo+ ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL01ha2VmaWxlICAgICAgICAgICAgICB8ICAg IDMgKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL2RldmljZXMuaCAgICAgICAgICAg ICB8ICA5NTQgKysrKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9lcnQuaCAgICAg ICAgICAgICAgICAgfCAgMzg1ICsrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvbGli L01ha2VmaWxlLmluICAgICAgIHwgICAxNiArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hv Y2wvbGliL2NkZXZfc2dkbWEuaCAgICAgIHwgICA2MyArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUv ZHJtL3hvY2wvbGliL2xpYnhkbWEuYyAgICAgICAgIHwgNDM2OCArKysrKysrKysrKysrKysrKysr Kwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL2xpYi9saWJ4ZG1hLmggICAgICAgICB8 ICA1OTYgKysrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvbGliL2xpYnhkbWFfYXBp LmggICAgIHwgIDEyNyArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvbWdtdHBmL01h a2VmaWxlICAgICAgIHwgICAyOSArCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvbWdt dHBmL21nbXQtY29yZS5jICAgIHwgIDk2MCArKysrKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94b2NsL21nbXRwZi9tZ210LWNvcmUuaCAgICB8ICAxNDcgKwo+ID4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS94b2NsL21nbXRwZi9tZ210LWN3LmMgICAgICB8ICAgMzAgKwo+ID4gPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS94b2NsL21nbXRwZi9tZ210LWlvY3RsLmMgICB8ICAxNDggKwo+ID4gPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL21nbXRwZi9tZ210LXJlZy5oICAgICB8ICAyNDQgKysK PiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9tZ210cGYvbWdtdC1zeXNmcy5jICAgfCAg MzE4ICsrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvbWdtdHBmL21nbXQtdXRpbHMu YyAgIHwgIDM5OSArKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL3N1YmRldi9kbmEu YyAgICAgICAgICB8ICAzNTYgKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9zdWJk ZXYvZmVhdHVyZV9yb20uYyAgfCAgNDEyICsrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hv Y2wvc3ViZGV2L2ZpcmV3YWxsLmMgICAgIHwgIDM4OSArKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS94b2NsL3N1YmRldi9mbWdyLmMgICAgICAgICB8ICAxOTggKwo+ID4gPiA+ID4gIGRyaXZl cnMvZ3B1L2RybS94b2NsL3N1YmRldi9pY2FwLmMgICAgICAgICB8IDI4NTkgKysrKysrKysrKysr Kwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL3N1YmRldi9tYWlsYm94LmMgICAgICB8 IDE4NjggKysrKysrKysrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2L21i X3NjaGVkdWxlci5jIHwgMzA1OSArKysrKysrKysrKysrKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS94b2NsL3N1YmRldi9taWNyb2JsYXplLmMgICB8ICA3MjIgKysrKwo+ID4gPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS94b2NsL3N1YmRldi9taWcuYyAgICAgICAgICB8ICAyNTYgKysKPiA+ID4g PiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9zdWJkZXYvc3lzbW9uLmMgICAgICAgfCAgMzg1ICsr Cj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2L3hkbWEuYyAgICAgICAgIHwg IDUxMCArKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9zdWJkZXYveG1jLmMgICAg ICAgICAgfCAxNDgwICsrKysrKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC9zdWJk ZXYveHZjLmMgICAgICAgICAgfCAgNDYxICsrKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94 b2NsL3VzZXJwZi9NYWtlZmlsZSAgICAgICB8ICAgMjcgKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1 L2RybS94b2NsL3VzZXJwZi9jb21tb24uaCAgICAgICB8ICAxNTcgKwo+ID4gPiA+ID4gIGRyaXZl cnMvZ3B1L2RybS94b2NsL3VzZXJwZi94b2NsX2JvLmMgICAgICB8IDEyNTUgKysrKysrCj4gPiA+ ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL3hvY2xfYm8uaCAgICAgIHwgIDExOSAr Cj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL3hvY2xfZHJtLmMgICAgIHwg IDY0MCArKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC91c2VycGYveG9jbF9kcnYu YyAgICAgfCAgNzQzICsrKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC91c2VycGYv eG9jbF9pb2N0bC5jICAgfCAgMzk2ICsrCj4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL3hvY2wv dXNlcnBmL3hvY2xfc3lzZnMuYyAgIHwgIDM0NCArKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2Ry bS94b2NsL3ZlcnNpb24uaCAgICAgICAgICAgICB8ICAgMjIgKwo+ID4gPiA+ID4gIGRyaXZlcnMv Z3B1L2RybS94b2NsL3hjbGJpbi5oICAgICAgICAgICAgICB8ICAzMTQgKysKPiA+ID4gPiA+ICBk cml2ZXJzL2dwdS9kcm0veG9jbC94Y2xmZWF0dXJlcy5oICAgICAgICAgfCAgMTA3ICsKPiA+ID4g PiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC94b2NsX2N0eC5jICAgICAgICAgICAgfCAgMTk2ICsK PiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC94b2NsX2RybS5oICAgICAgICAgICAgfCAg IDkxICsKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC94b2NsX2Rydi5oICAgICAgICAg ICAgfCAgNzgzICsrKysKPiA+ID4gPiA+ICBkcml2ZXJzL2dwdS9kcm0veG9jbC94b2NsX3N1YmRl di5jICAgICAgICAgfCAgNTQwICsrKwo+ID4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS94b2NsL3hv Y2xfdGhyZWFkLmMgICAgICAgICB8ICAgNjQgKwo+ID4gPiA+ID4gIGluY2x1ZGUvdWFwaS9kcm0v eG1nbXRfZHJtLmggICAgICAgICAgICAgICB8ICAyMDQgKwo+ID4gPiA+ID4gIGluY2x1ZGUvdWFw aS9kcm0veG9jbF9kcm0uaCAgICAgICAgICAgICAgICB8ICA0ODMgKysrCj4gPiA+ID4gPiAgNTAg ZmlsZXMgY2hhbmdlZCwgMjgyNTIgaW5zZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4g PiA+ID4gPiBkcml2ZXJzL2dwdS9kcm0veG9jbC9LY29uZmlnICBjcmVhdGUgbW9kZSAxMDA2NDQK PiA+ID4gPiA+IGRyaXZlcnMvZ3B1L2RybS94b2NsL01ha2VmaWxlICBjcmVhdGUgbW9kZSAxMDA2 NDQKPiA+ID4gPiA+IGRyaXZlcnMvZ3B1L2RybS94b2NsL2RldmljZXMuaCAgY3JlYXRlIG1vZGUg MTAwNjQ0Cj4gPiA+ID4gPiBkcml2ZXJzL2dwdS9kcm0veG9jbC9lcnQuaCAgY3JlYXRlIG1vZGUg MTAwNjQ0Cj4gPiA+ID4gPiBkcml2ZXJzL2dwdS9kcm0veG9jbC9saWIvTWFrZWZpbGUuaW4KPiA+ ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvbGliL2NkZXZf c2dkbWEuaAo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veG9j bC9saWIvbGlieGRtYS5jCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94b2NsL2xpYi9saWJ4ZG1hLmgKPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3hvY2wvbGliL2xpYnhkbWFfYXBpLmgKPiA+ID4gPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvbWdtdHBmL01ha2VmaWxlCj4gPiA+ID4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL21nbXRwZi9tZ210LWNvcmUu Ywo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veG9jbC9tZ210 cGYvbWdtdC1jb3JlLmgKPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3hvY2wvbWdtdHBmL21nbXQtY3cuYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0veG9jbC9tZ210cGYvbWdtdC1pb2N0bC5jCj4gPiA+ID4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL21nbXRwZi9tZ210LXJlZy5oCj4gPiA+ ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL21nbXRwZi9tZ210 LXN5c2ZzLmMKPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hv Y2wvbWdtdHBmL21nbXQtdXRpbHMuYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0veG9jbC9zdWJkZXYvZG5hLmMgIGNyZWF0ZSBtb2RlCj4gPiA+ID4gPiAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2L2ZlYXR1cmVfcm9tLmMKPiA+ID4gPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2L2ZpcmV3YWxsLmMK PiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2 L2ZtZ3IuYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veG9j bC9zdWJkZXYvaWNhcC5jCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94b2NsL3N1YmRldi9tYWlsYm94LmMKPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2L21iX3NjaGVkdWxlci5jCj4gPiA+ID4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL3N1YmRldi9taWNyb2JsYXplLmMK PiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvc3ViZGV2 L21pZy5jICBjcmVhdGUgbW9kZQo+ID4gPiA+ID4gMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2Ns L3N1YmRldi9zeXNtb24uYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0veG9jbC9zdWJkZXYveGRtYS5jCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS94b2NsL3N1YmRldi94bWMuYyAgY3JlYXRlIG1vZGUKPiA+ID4gPiA+IDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veG9jbC9zdWJkZXYveHZjLmMgIGNyZWF0ZSBtb2RlIDEwMDY0 NAo+ID4gPiA+ID4gZHJpdmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL01ha2VmaWxlCj4gPiA+ID4g PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL3VzZXJwZi9jb21tb24u aAo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veG9jbC91c2Vy cGYveG9jbF9iby5jCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS94b2NsL3VzZXJwZi94b2NsX2JvLmgKPiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL3hvY2xfZHJtLmMKPiA+ID4gPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL3hvY2xfZHJ2LmMKPiA+ID4gPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wvdXNlcnBmL3hvY2xfaW9j dGwuYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veG9jbC91 c2VycGYveG9jbF9zeXNmcy5jCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS94b2NsL3ZlcnNpb24uaCAgY3JlYXRlIG1vZGUKPiA+ID4gPiA+IDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0veG9jbC94Y2xiaW4uaCAgY3JlYXRlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gPiBk cml2ZXJzL2dwdS9kcm0veG9jbC94Y2xmZWF0dXJlcy5oCj4gPiA+ID4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94b2NsL3hvY2xfY3R4LmMgIGNyZWF0ZSBtb2RlCj4gPiA+ ID4gPiAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wveG9jbF9kcm0uaCAgY3JlYXRlIG1vZGUg MTAwNjQ0Cj4gPiA+ID4gPiBkcml2ZXJzL2dwdS9kcm0veG9jbC94b2NsX2Rydi5oICBjcmVhdGUg bW9kZSAxMDA2NDQKPiA+ID4gPiA+IGRyaXZlcnMvZ3B1L2RybS94b2NsL3hvY2xfc3ViZGV2LmMK PiA+ID4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hvY2wveG9jbF90 aHJlYWQuYwo+ID4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJtL3ht Z210X2RybS5oICBjcmVhdGUgbW9kZQo+ID4gPiA+ID4gMTAwNjQ0IGluY2x1ZGUvdWFwaS9kcm0v eG9jbF9kcm0uaAo+ID4gPiA+ID4KPiA+ID4gPiA+IC0tCj4gPiA+ID4gPiAyLjE3LjAKPiA+ID4g PiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+ ID4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gPiA+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCj4gPiA+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+ID4gPiA+Cj4gPiA+ID4gLS0KPiA+ID4gPiBEYW5pZWwg VmV0dGVyCj4gPiA+ID4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uIGh0dHA6 Ly9ibG9nLmZmd2xsLmNoCj4gPiAKPiA+IAo+ID4gCj4gPiAtLQo+ID4gRGFuaWVsIFZldHRlcgo+ ID4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPiArNDEgKDApIDc5IDM2 NSA1NyA0OCAtIGh0dHA6Ly9ibG9nLmZmd2xsLmNoCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs