From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Date: Mon, 14 Oct 2019 14:04:01 +0000 Subject: [PATCH v2 00/15] DRM fbconv helpers for converting fbdev drivers Message-Id: <20191014140416.28517-1-tzimmermann@suse.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net (was: DRM driver for fbdev devices) This is version 2 of the fbdev conversion helpers. It's more or less a rewrite of the original patchset. The fbdev subsystem is considered legacy and will probably be removed at some point. This would mean the loss of a signifanct number of drivers. Some of the affected hardware is not in use any longer, but some hardware is still around and provides good(-enough) framebuffers. The fbconv helpers allow for running the current DRM stack on top of fbdev drivers. It's a set of functions that convert between fbdev interfaces and DRM interfaces. Based on SHMEM and simple KMS helpers, it only offers the basic functionality of a framebuffer, but should be compatible with most existing fbdev drivers. A DRM driver using fbconv helpers consists of * DRM stub code that calls into fbconv helpers, and * the original fbdev driver code. The fbdev driver code has to be modified to register itself with the stub driver instead of the fbdev core framework. A tutorial on how to use the helpers is part of this patchset. The resulting driver hybrid can be refactored into a first-class DRM driver. The fbconv helpers contain a number of comments, labeled 'DRM porting note', which explain the required steps. I tested the current patchset with the following drivers: atyfb, aty128fb, matroxfb, pm2fb, pm3fb, rivafb, s3fb, savagefb, sisfb, tdfxfb and tridentfb. With each, I was able to successfully start with fbcon enabled, run weston and X11. The drivers are available at [1]. For reference, the patchset includes the Matrox stub driver. v2: * rename to fbconv helpers * rewrite as helper library * switch over to simple KMS helpers * switch over to SHMEM * add documentation [1] https://gitlab.freedesktop.org/tzimmermann/linux/commits/fbconv-plus-drivers Thomas Zimmermann (15): fbdev: Export fb_check_foreignness() fbdev: Export FBPIXMAPSIZE drm/simple-kms-helper: Add mode_fixup() to simple display pipe drm: Add fbconv helper module drm/fbconv: Add DRM <-> fbdev pixel-format conversion drm/fbconv: Add mode conversion DRM <-> fbdev drm/fbconv: Add modesetting infrastructure drm/fbconv: Add plane-state check and update drm/fbconv: Mode-setting pipeline enable / disable drm/fbconv: Reimplement several fbdev interfaces drm/fbconv: Add helpers for init and cleanup of fb_info structures drm/fbconv: Add helper documentation staging: Add mgakms driver staging/mgakms: Import matroxfb driver source code staging/mgakms: Update matroxfb driver code for DRM Documentation/gpu/drm-kms-helpers.rst | 12 + Documentation/gpu/todo.rst | 15 + drivers/gpu/drm/Kconfig | 11 + drivers/gpu/drm/Makefile | 1 + drivers/gpu/drm/drm_fbconv_helper.c | 2126 +++++++++++++++++ drivers/gpu/drm/drm_simple_kms_helper.c | 15 + drivers/staging/Kconfig | 2 + drivers/staging/Makefile | 1 + drivers/staging/mgakms/Kconfig | 18 + drivers/staging/mgakms/Makefile | 17 + drivers/staging/mgakms/g450_pll.c | 539 +++++ drivers/staging/mgakms/g450_pll.h | 13 + drivers/staging/mgakms/i2c-matroxfb.c | 238 ++ drivers/staging/mgakms/matroxfb_DAC1064.c | 1082 +++++++++ drivers/staging/mgakms/matroxfb_DAC1064.h | 174 ++ drivers/staging/mgakms/matroxfb_Ti3026.c | 746 ++++++ drivers/staging/mgakms/matroxfb_Ti3026.h | 10 + drivers/staging/mgakms/matroxfb_accel.c | 519 +++++ drivers/staging/mgakms/matroxfb_accel.h | 9 + drivers/staging/mgakms/matroxfb_base.c | 2592 +++++++++++++++++++++ drivers/staging/mgakms/matroxfb_base.h | 700 ++++++ drivers/staging/mgakms/matroxfb_crtc2.h | 35 + drivers/staging/mgakms/matroxfb_g450.c | 640 +++++ drivers/staging/mgakms/matroxfb_g450.h | 10 + drivers/staging/mgakms/matroxfb_maven.h | 21 + drivers/staging/mgakms/matroxfb_misc.c | 815 +++++++ drivers/staging/mgakms/matroxfb_misc.h | 22 + drivers/staging/mgakms/mga_device.c | 68 + drivers/staging/mgakms/mga_device.h | 30 + drivers/staging/mgakms/mga_drv.c | 129 + drivers/staging/mgakms/mga_drv.h | 14 + drivers/video/fbdev/core/fbmem.c | 5 +- include/drm/drm_fbconv_helper.h | 150 ++ include/drm/drm_simple_kms_helper.h | 43 + include/linux/fb.h | 3 + 35 files changed, 10822 insertions(+), 3 deletions(-) create mode 100644 drivers/gpu/drm/drm_fbconv_helper.c create mode 100644 drivers/staging/mgakms/Kconfig create mode 100644 drivers/staging/mgakms/Makefile create mode 100644 drivers/staging/mgakms/g450_pll.c create mode 100644 drivers/staging/mgakms/g450_pll.h create mode 100644 drivers/staging/mgakms/i2c-matroxfb.c create mode 100644 drivers/staging/mgakms/matroxfb_DAC1064.c create mode 100644 drivers/staging/mgakms/matroxfb_DAC1064.h create mode 100644 drivers/staging/mgakms/matroxfb_Ti3026.c create mode 100644 drivers/staging/mgakms/matroxfb_Ti3026.h create mode 100644 drivers/staging/mgakms/matroxfb_accel.c create mode 100644 drivers/staging/mgakms/matroxfb_accel.h create mode 100644 drivers/staging/mgakms/matroxfb_base.c create mode 100644 drivers/staging/mgakms/matroxfb_base.h create mode 100644 drivers/staging/mgakms/matroxfb_crtc2.h create mode 100644 drivers/staging/mgakms/matroxfb_g450.c create mode 100644 drivers/staging/mgakms/matroxfb_g450.h create mode 100644 drivers/staging/mgakms/matroxfb_maven.h create mode 100644 drivers/staging/mgakms/matroxfb_misc.c create mode 100644 drivers/staging/mgakms/matroxfb_misc.h create mode 100644 drivers/staging/mgakms/mga_device.c create mode 100644 drivers/staging/mgakms/mga_device.h create mode 100644 drivers/staging/mgakms/mga_drv.c create mode 100644 drivers/staging/mgakms/mga_drv.h create mode 100644 include/drm/drm_fbconv_helper.h -- 2.23.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v2 00/15] DRM fbconv helpers for converting fbdev drivers Date: Mon, 14 Oct 2019 16:04:01 +0200 Message-ID: <20191014140416.28517-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 452B36E155 for ; Mon, 14 Oct 2019 14:04:22 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net List-Id: dri-devel@lists.freedesktop.org KHdhczogRFJNIGRyaXZlciBmb3IgZmJkZXYgZGV2aWNlcykKClRoaXMgaXMgdmVyc2lvbiAyIG9m IHRoZSBmYmRldiBjb252ZXJzaW9uIGhlbHBlcnMuIEl0J3MgbW9yZSBvciBsZXNzIGEKcmV3cml0 ZSBvZiB0aGUgb3JpZ2luYWwgcGF0Y2hzZXQuCgpUaGUgZmJkZXYgc3Vic3lzdGVtIGlzIGNvbnNp ZGVyZWQgbGVnYWN5IGFuZCB3aWxsIHByb2JhYmx5IGJlIHJlbW92ZWQgYXQKc29tZSBwb2ludC4g VGhpcyB3b3VsZCBtZWFuIHRoZSBsb3NzIG9mIGEgc2lnbmlmYW5jdCBudW1iZXIgb2YgZHJpdmVy cy4KU29tZSBvZiB0aGUgYWZmZWN0ZWQgaGFyZHdhcmUgaXMgbm90IGluIHVzZSBhbnkgbG9uZ2Vy LCBidXQgc29tZSBoYXJkd2FyZQppcyBzdGlsbCBhcm91bmQgYW5kIHByb3ZpZGVzIGdvb2QoLWVu b3VnaCkgZnJhbWVidWZmZXJzLgoKVGhlIGZiY29udiBoZWxwZXJzIGFsbG93IGZvciBydW5uaW5n IHRoZSBjdXJyZW50IERSTSBzdGFjayBvbiB0b3Agb2YgZmJkZXYKZHJpdmVycy4gSXQncyBhIHNl dCBvZiBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGJldHdlZW4gZmJkZXYgaW50ZXJmYWNlcyBhbmQK RFJNIGludGVyZmFjZXMuIEJhc2VkIG9uIFNITUVNIGFuZCBzaW1wbGUgS01TIGhlbHBlcnMsIGl0 IG9ubHkgb2ZmZXJzIHRoZQpiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIGEgZnJhbWVidWZmZXIsIGJ1 dCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIG1vc3QKZXhpc3RpbmcgZmJkZXYgZHJpdmVycy4K CkEgRFJNIGRyaXZlciB1c2luZyBmYmNvbnYgaGVscGVycyBjb25zaXN0cyBvZgoKICAqIERSTSBz dHViIGNvZGUgdGhhdCBjYWxscyBpbnRvIGZiY29udiBoZWxwZXJzLCBhbmQKICAqIHRoZSBvcmln aW5hbCBmYmRldiBkcml2ZXIgY29kZS4KClRoZSBmYmRldiBkcml2ZXIgY29kZSBoYXMgdG8gYmUg bW9kaWZpZWQgdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlCnN0dWIgZHJpdmVyIGluc3RlYWQg b2YgdGhlIGZiZGV2IGNvcmUgZnJhbWV3b3JrLiBBIHR1dG9yaWFsIG9uIGhvdyB0byB1c2UKdGhl IGhlbHBlcnMgaXMgcGFydCBvZiB0aGlzIHBhdGNoc2V0LiBUaGUgcmVzdWx0aW5nIGRyaXZlciBo eWJyaWQgY2FuIGJlCnJlZmFjdG9yZWQgaW50byBhIGZpcnN0LWNsYXNzIERSTSBkcml2ZXIuIFRo ZSBmYmNvbnYgaGVscGVycyBjb250YWluIGEKbnVtYmVyIG9mIGNvbW1lbnRzLCBsYWJlbGVkICdE Uk0gcG9ydGluZyBub3RlJywgd2hpY2ggZXhwbGFpbiB0aGUgcmVxdWlyZWQKc3RlcHMuCgpJIHRl c3RlZCB0aGUgY3VycmVudCBwYXRjaHNldCB3aXRoIHRoZSBmb2xsb3dpbmcgZHJpdmVyczogYXR5 ZmIsIGF0eTEyOGZiLAptYXRyb3hmYiwgcG0yZmIsIHBtM2ZiLCByaXZhZmIsIHMzZmIsIHNhdmFn ZWZiLCBzaXNmYiwgdGRmeGZiIGFuZCB0cmlkZW50ZmIuCldpdGggZWFjaCwgSSB3YXMgYWJsZSB0 byBzdWNjZXNzZnVsbHkgc3RhcnQgd2l0aCBmYmNvbiBlbmFibGVkLCBydW4gd2VzdG9uIGFuZApY MTEuIFRoZSBkcml2ZXJzIGFyZSBhdmFpbGFibGUgYXQgWzFdLiBGb3IgcmVmZXJlbmNlLCB0aGUg cGF0Y2hzZXQgaW5jbHVkZXMKdGhlIE1hdHJveCBzdHViIGRyaXZlci4KCnYyOgoJKiByZW5hbWUg dG8gZmJjb252IGhlbHBlcnMKCSogcmV3cml0ZSBhcyBoZWxwZXIgbGlicmFyeQoJKiBzd2l0Y2gg b3ZlciB0byBzaW1wbGUgS01TIGhlbHBlcnMKCSogc3dpdGNoIG92ZXIgdG8gU0hNRU0KCSogYWRk IGRvY3VtZW50YXRpb24KClsxXSBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvdHppbW1l cm1hbm4vbGludXgvY29tbWl0cy9mYmNvbnYtcGx1cy1kcml2ZXJzCgpUaG9tYXMgWmltbWVybWFu biAoMTUpOgogIGZiZGV2OiBFeHBvcnQgZmJfY2hlY2tfZm9yZWlnbm5lc3MoKQogIGZiZGV2OiBF eHBvcnQgRkJQSVhNQVBTSVpFCiAgZHJtL3NpbXBsZS1rbXMtaGVscGVyOiBBZGQgbW9kZV9maXh1 cCgpIHRvIHNpbXBsZSBkaXNwbGF5IHBpcGUKICBkcm06IEFkZCBmYmNvbnYgaGVscGVyIG1vZHVs ZQogIGRybS9mYmNvbnY6IEFkZCBEUk0gPC0+IGZiZGV2IHBpeGVsLWZvcm1hdCBjb252ZXJzaW9u CiAgZHJtL2ZiY29udjogQWRkIG1vZGUgY29udmVyc2lvbiBEUk0gPC0+IGZiZGV2CiAgZHJtL2Zi Y29udjogQWRkIG1vZGVzZXR0aW5nIGluZnJhc3RydWN0dXJlCiAgZHJtL2ZiY29udjogQWRkIHBs YW5lLXN0YXRlIGNoZWNrIGFuZCB1cGRhdGUKICBkcm0vZmJjb252OiBNb2RlLXNldHRpbmcgcGlw ZWxpbmUgZW5hYmxlIC8gZGlzYWJsZQogIGRybS9mYmNvbnY6IFJlaW1wbGVtZW50IHNldmVyYWwg ZmJkZXYgaW50ZXJmYWNlcwogIGRybS9mYmNvbnY6IEFkZCBoZWxwZXJzIGZvciBpbml0IGFuZCBj bGVhbnVwIG9mIGZiX2luZm8gc3RydWN0dXJlcwogIGRybS9mYmNvbnY6IEFkZCBoZWxwZXIgZG9j dW1lbnRhdGlvbgogIHN0YWdpbmc6IEFkZCBtZ2FrbXMgZHJpdmVyCiAgc3RhZ2luZy9tZ2FrbXM6 IEltcG9ydCBtYXRyb3hmYiBkcml2ZXIgc291cmNlIGNvZGUKICBzdGFnaW5nL21nYWttczogVXBk YXRlIG1hdHJveGZiIGRyaXZlciBjb2RlIGZvciBEUk0KCiBEb2N1bWVudGF0aW9uL2dwdS9kcm0t a21zLWhlbHBlcnMucnN0ICAgICB8ICAgMTIgKwogRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3Qg ICAgICAgICAgICAgICAgfCAgIDE1ICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAg ICAgICAgICAgIHwgICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAg ICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmMgICAgICAg fCAyMTI2ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZHJtX3NpbXBsZV9rbXNf aGVscGVyLmMgICB8ICAgMTUgKwogZHJpdmVycy9zdGFnaW5nL0tjb25maWcgICAgICAgICAgICAg ICAgICAgfCAgICAyICsKIGRyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBkcml2ZXJzL3N0YWdpbmcvbWdha21zL0tjb25maWcgICAgICAgICAgICB8ICAg MTggKwogZHJpdmVycy9zdGFnaW5nL21nYWttcy9NYWtlZmlsZSAgICAgICAgICAgfCAgIDE3ICsK IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvZzQ1MF9wbGwuYyAgICAgICAgIHwgIDUzOSArKysrKwog ZHJpdmVycy9zdGFnaW5nL21nYWttcy9nNDUwX3BsbC5oICAgICAgICAgfCAgIDEzICsKIGRyaXZl cnMvc3RhZ2luZy9tZ2FrbXMvaTJjLW1hdHJveGZiLmMgICAgIHwgIDIzOCArKwogZHJpdmVycy9z dGFnaW5nL21nYWttcy9tYXRyb3hmYl9EQUMxMDY0LmMgfCAxMDgyICsrKysrKysrKwogZHJpdmVy cy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9EQUMxMDY0LmggfCAgMTc0ICsrCiBkcml2ZXJzL3N0 YWdpbmcvbWdha21zL21hdHJveGZiX1RpMzAyNi5jICB8ICA3NDYgKysrKysrCiBkcml2ZXJzL3N0 YWdpbmcvbWdha21zL21hdHJveGZiX1RpMzAyNi5oICB8ICAgMTAgKwogZHJpdmVycy9zdGFnaW5n L21nYWttcy9tYXRyb3hmYl9hY2NlbC5jICAgfCAgNTE5ICsrKysrCiBkcml2ZXJzL3N0YWdpbmcv bWdha21zL21hdHJveGZiX2FjY2VsLmggICB8ICAgIDkgKwogZHJpdmVycy9zdGFnaW5nL21nYWtt cy9tYXRyb3hmYl9iYXNlLmMgICAgfCAyNTkyICsrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9iYXNlLmggICAgfCAgNzAwICsrKysrKwogZHJpdmVy cy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9jcnRjMi5oICAgfCAgIDM1ICsKIGRyaXZlcnMvc3Rh Z2luZy9tZ2FrbXMvbWF0cm94ZmJfZzQ1MC5jICAgIHwgIDY0MCArKysrKwogZHJpdmVycy9zdGFn aW5nL21nYWttcy9tYXRyb3hmYl9nNDUwLmggICAgfCAgIDEwICsKIGRyaXZlcnMvc3RhZ2luZy9t Z2FrbXMvbWF0cm94ZmJfbWF2ZW4uaCAgIHwgICAyMSArCiBkcml2ZXJzL3N0YWdpbmcvbWdha21z L21hdHJveGZiX21pc2MuYyAgICB8ICA4MTUgKysrKysrKwogZHJpdmVycy9zdGFnaW5nL21nYWtt cy9tYXRyb3hmYl9taXNjLmggICAgfCAgIDIyICsKIGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWdh X2RldmljZS5jICAgICAgIHwgICA2OCArCiBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21nYV9kZXZp Y2UuaCAgICAgICB8ICAgMzAgKwogZHJpdmVycy9zdGFnaW5nL21nYWttcy9tZ2FfZHJ2LmMgICAg ICAgICAgfCAgMTI5ICsKIGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWdhX2Rydi5oICAgICAgICAg IHwgICAxNCArCiBkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtZW0uYyAgICAgICAgICB8ICAg IDUgKy0KIGluY2x1ZGUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmggICAgICAgICAgIHwgIDE1MCAr KwogaW5jbHVkZS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmggICAgICAgfCAgIDQzICsKIGlu Y2x1ZGUvbGludXgvZmIuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiAzNSBmaWxl cyBjaGFuZ2VkLCAxMDgyMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJjb252X2hlbHBlci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy9tZ2FrbXMvZzQ1MF9wbGwuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9tZ2FrbXMvZzQ1MF9wbGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy9tZ2FrbXMvaTJjLW1hdHJveGZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvbWdha21zL21hdHJveGZiX0RBQzEwNjQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWF0cm94ZmJfREFDMTA2NC5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9UaTMwMjYuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWF0cm94ZmJfVGkzMDI2LmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21hdHJveGZiX2FjY2VsLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21hdHJveGZiX2FjY2VsLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21hdHJveGZiX2Jhc2UuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWF0cm94ZmJfYmFzZS5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9jcnRj Mi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9tYXRyb3hmYl9n NDUwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21hdHJveGZi X2c0NTAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWF0cm94 ZmJfbWF2ZW4uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMvbWF0 cm94ZmJfbWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9t YXRyb3hmYl9taXNjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21z L21nYV9kZXZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZ2FrbXMv bWdhX2RldmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21nYWttcy9t Z2FfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWdha21zL21nYV9k cnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9mYmNvbnZfaGVscGVyLmgK Ci0tCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs