Received: by 2002:ab2:6991:0:b0:1f7:f6c3:9cb1 with SMTP id v17csp690076lqo; Wed, 8 May 2024 11:37:13 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWpD+hwew102+B2ndb6k3TZ1ZWE/0+v5Wwus4pVymF+9vH+UQAKjGurIuH/hkv0PkcduhvkBbPIkpq9eHARxRxppag+ztTEAfXFtNRrOQ== X-Google-Smtp-Source: AGHT+IE5jxJSLXGofTALnkM293R7H1EnnvVjBvHZTKvNmJ0RmSKr9ygusSuorUldT6bAylOdZWew X-Received: by 2002:a05:6358:78c:b0:192:711e:d796 with SMTP id e5c5f4694b2df-192d35783ccmr468215355d.25.1715193432477; Wed, 08 May 2024 11:37:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1715193432; cv=pass; d=google.com; s=arc-20160816; b=yEGVDjYEB3HLoqaAB/uKFoVciFxrclEYvCdYXnbvLWOVT6M5cqsACmUpDaS6JjaMPZ 7c5a30beJUoUUMxnFj75NBJDGb74jwgsvkOjd/GeQSroUHn9lxRtAPsSheZpbtX3rhC7 RMisVJzGmdk5RNOTtirYlb7xOU2lMMvyj3d49UTJ5SYVd6wzbC/1guH16BbQAA9BaNG6 ZnOx5fjflkydi8m8sndPwdsSAwjeeNAA/j+PuKe/m0NFh04fqzdr58x+qSWZ2qRbZ5wK Zd+Z1n8FTH31rWvKzn6voToh+JG3UrxSSde3iP/6wvHZ7I+XgfVO1fMtA9mEdr3viImW 1b4w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:autocrypt:from:references:cc:to:subject:user-agent :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :date:message-id:dkim-signature; bh=HqwG7z1oY7wVyl7q6+SmLAGXBKE6IemwhXC38asluyw=; fh=+65pJRQQSmO2NG3bynXH9IKbmImqZpNJ0woLecaLF+A=; b=lXF+On8UI67XsSrl3tgc8Bv1PdZ59vd6pqzG76ZFzfdBPsLZgkCuZAtUKHYjc5k2ub tc82aEAMniNk0glkpjgylPsDNmHeDMeMghM1JMxbEVzj408JzZrcES5gRfMkHWOxFA5P FHqGK7WiQXw2zDZiKSSw8TiF/JjJSvpz8KaZ+B830no9nFVeTOvR7VgsXqb/cK+gGtZC T+CQA1+LjrsT2/WJy+Yf8E3FRquIZaw5sFr9A9IbU4B272yjI8e+P+b1aB88j7HMkLql JKLXscq6vcigD1IeVnol7ZTrKzmSB38p8WE7D05nRMMUZzmCvieMV3dhXMXlLqy/EG+v zx+g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=A8p9t2Ex; arc=pass (i=1 dkim=pass dkdomain=broadcom.com dmarc=pass fromdomain=broadcom.com); spf=pass (google.com: domain of linux-kernel+bounces-173712-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-173712-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id p36-20020a634f64000000b0061de5fb99e5si10246338pgl.421.2024.05.08.11.37.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 May 2024 11:37:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-173712-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=A8p9t2Ex; arc=pass (i=1 dkim=pass dkdomain=broadcom.com dmarc=pass fromdomain=broadcom.com); spf=pass (google.com: domain of linux-kernel+bounces-173712-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-173712-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id D73A928C042 for ; Wed, 8 May 2024 18:37:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 99E4D54FAA; Wed, 8 May 2024 18:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="A8p9t2Ex" Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (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 A6CFB38DE8 for ; Wed, 8 May 2024 18:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715193425; cv=none; b=G9SSL7aq0XO6NvR8vqs2LReD1Popzls0J7TqS5+nkXd3LZhgCPNCd7QaO49AGwjHuU3vQBtFTqwfyc/H6o/JNU3w0vHz6EIh5k6ukz2mQeRhSR0poUjxKYO6as6EGKbGc0QPDn9b7jjcuQb7r9mOBEjG7k7Iu4aRgi1qpYXjzdM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715193425; c=relaxed/simple; bh=bCzGyxFwWSSIC3kerdP4PUekQTKD+M53u3U2ANTTj5Y=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=YXUTmXYAFXPAexTyyeK8zZ2dfgkywDOkCKTH/RHnNaEY+XEU7r8lVz0yxPVoJXolz0nBDIbvxrn4zK+Djj2BS9IiglrjxLy1MQocfdFTvNJg/UkPbyZbS91x33kkAug4tyI/YbhuOB1lMyOZoAeUPJ10kVL4mrEFctZEYDSoQ5o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=A8p9t2Ex; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-6f4496af4cdso132893b3a.0 for ; Wed, 08 May 2024 11:37:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1715193423; x=1715798223; darn=vger.kernel.org; h=in-reply-to:autocrypt:from:references:cc:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=HqwG7z1oY7wVyl7q6+SmLAGXBKE6IemwhXC38asluyw=; b=A8p9t2Exu2Ilx0pDMZLSYiWVcnDrSP9B4Zd7AMA1f2fQ9CoJ1uRft7M+BvS1COQsX4 qRQ9GOvcqWDQ4ZayAiHnYT8q7UgQpUZXnGg3O3NfvyzTX16F/0klXFe3BSsNagwJ/S7d LJmdP8zZrygDJhhPRnxoRoHJdc1OHbBEWdXbU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715193423; x=1715798223; h=in-reply-to:autocrypt:from:references:cc:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=HqwG7z1oY7wVyl7q6+SmLAGXBKE6IemwhXC38asluyw=; b=rvZgEAVcrSD8h4e0TWMPFTm2kHYSO9Z6padoK/cBSWa6xb3Lsmte+JxoIIkHn51cMv A6rzP+Ds2WB4gDpxVQ4uTvPYdkHqcrkZVGg2bdZi7VLGNsNO9/banUCdk+4FmnJ+eodP 4mpAX02t99UE0X6357Ysxq1ptlrVAJNlBjoqTb5+EMfK4tNlRVCJv4cupngPdbIUTHmq 4SKMoLIlYjx7EJvh9b0xk5Ga3gR3p7GV163YlY7IvEJnGOz0II1s8iSTiL3UTR9OZ1v4 EG0iIRXBna7IQiEdS5vBnwzdh7EZPQ53tcB+PcqHpRjpt+FBDdhXnC9DAB3nMpKJG3M+ H/4Q== X-Gm-Message-State: AOJu0YyST9f8aIoemNiBmyTgqs4XPc43tcurp0O0uVHlY/5VoyBf7cmz NAX01hlS6m4XA1hERsWHakYwZPkQvPzo5VdhJLq76QZL1ygGanMYdyMaQP85cg== X-Received: by 2002:a05:6a20:3252:b0:1a9:4055:6dce with SMTP id adf61e73a8af0-1afc8ddc365mr3398585637.58.1715193422756; Wed, 08 May 2024 11:37:02 -0700 (PDT) Received: from [10.67.48.245] ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id t28-20020a056a00139c00b006f455317cebsm8405372pfg.63.2024.05.08.11.37.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 May 2024 11:37:02 -0700 (PDT) Message-ID: Date: Wed, 8 May 2024 11:37:00 -0700 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] fbdev: Have CONFIG_FB_NOTIFY be tristate To: Arnd Bergmann , Daniel Vetter Cc: linux-kernel@vger.kernel.org, Helge Deller , Thomas Zimmermann , Javier Martinez Canillas , Sam Ravnborg , "open list:FRAMEBUFFER LAYER" , "open list:FRAMEBUFFER LAYER" References: <20240503192858.103640-1-florian.fainelli@broadcom.com> <8e1867fc-34da-457c-b95a-2d51ea97336a@app.fastmail.com> <05a5e893-12f7-49fd-9a9a-abd387571f9b@broadcom.com> <47c63c4c-c657-4210-b476-c91c4f192483@app.fastmail.com> <41191296-0aa0-4010-b70f-efa80b9200d4@app.fastmail.com> From: Florian Fainelli Autocrypt: addr=florian.fainelli@broadcom.com; keydata= xsBNBFPAG8ABCAC3EO02urEwipgbUNJ1r6oI2Vr/+uE389lSEShN2PmL3MVnzhViSAtrYxeT M0Txqn1tOWoIc4QUl6Ggqf5KP6FoRkCrgMMTnUAINsINYXK+3OLe7HjP10h2jDRX4Ajs4Ghs JrZOBru6rH0YrgAhr6O5gG7NE1jhly+EsOa2MpwOiXO4DE/YKZGuVe6Bh87WqmILs9KvnNrQ PcycQnYKTVpqE95d4M824M5cuRB6D1GrYovCsjA9uxo22kPdOoQRAu5gBBn3AdtALFyQj9DQ KQuc39/i/Kt6XLZ/RsBc6qLs+p+JnEuPJngTSfWvzGjpx0nkwCMi4yBb+xk7Hki4kEslABEB AAHNMEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW4uZmFpbmVsbGlAYnJvYWRjb20uY29tPsLB IQQQAQgAywUCZWl41AUJI+Jo+hcKAAG/SMv+fS3xUQWa0NryPuoRGjsA3SAUAAAAAAAWAAFr ZXktdXNhZ2UtbWFza0BwZ3AuY29tjDAUgAAAAAAgAAdwcmVmZXJyZWQtZW1haWwtZW5jb2Rp bmdAcGdwLmNvbXBncG1pbWUICwkIBwMCAQoFF4AAAAAZGGxkYXA6Ly9rZXlzLmJyb2FkY29t Lm5ldAUbAwAAAAMWAgEFHgEAAAAEFQgJChYhBNXZKpfnkVze1+R8aIExtcQpvGagAAoJEIEx tcQpvGagWPEH/2l0DNr9QkTwJUxOoP9wgHfmVhqc0ZlDsBFv91I3BbhGKI5UATbipKNqG13Z TsBrJHcrnCqnTRS+8n9/myOF0ng2A4YT0EJnayzHugXm+hrkO5O9UEPJ8a+0553VqyoFhHqA zjxj8fUu1px5cbb4R9G4UAySqyeLLeqnYLCKb4+GklGSBGsLMYvLmIDNYlkhMdnnzsSUAS61 WJYW6jjnzMwuKJ0ZHv7xZvSHyhIsFRiYiEs44kiYjbUUMcXor/uLEuTIazGrE3MahuGdjpT2 IOjoMiTsbMc0yfhHp6G/2E769oDXMVxCCbMVpA+LUtVIQEA+8Zr6mX0Yk4nDS7OiBlvOwE0E U8AbwQEIAKxr71oqe+0+MYCc7WafWEcpQHFUwvYLcdBoOnmJPxDwDRpvU5LhqSPvk/yJdh9k 4xUDQu3rm1qIW2I9Puk5n/Jz/lZsqGw8T13DKyu8eMcvaA/irm9lX9El27DPHy/0qsxmxVmU pu9y9S+BmaMb2CM9IuyxMWEl9ruWFS2jAWh/R8CrdnL6+zLk60R7XGzmSJqF09vYNlJ6Bdbs MWDXkYWWP5Ub1ZJGNJQ4qT7g8IN0qXxzLQsmz6tbgLMEHYBGx80bBF8AkdThd6SLhreCN7Uh IR/5NXGqotAZao2xlDpJLuOMQtoH9WVNuuxQQZHVd8if+yp6yRJ5DAmIUt5CCPcAEQEAAcLB gQQYAQIBKwUCU8AbwgUbDAAAAMBdIAQZAQgABgUCU8AbwQAKCRCTYAaomC8PVQ0VCACWk3n+ obFABEp5Rg6Qvspi9kWXcwCcfZV41OIYWhXMoc57ssjCand5noZi8bKg0bxw4qsg+9cNgZ3P N/DFWcNKcAT3Z2/4fTnJqdJS//YcEhlr8uGs+ZWFcqAPbteFCM4dGDRruo69IrHfyyQGx16s CcFlrN8vD066RKevFepb/ml7eYEdN5SRALyEdQMKeCSf3mectdoECEqdF/MWpfWIYQ1hEfdm C2Kztm+h3Nkt9ZQLqc3wsPJZmbD9T0c9Rphfypgw/SfTf2/CHoYVkKqwUIzI59itl5Lze+R5 wDByhWHx2Ud2R7SudmT9XK1e0x7W7a5z11Q6vrzuED5nQvkhAAoJEIExtcQpvGagugcIAJd5 EYe6KM6Y6RvI6TvHp+QgbU5dxvjqSiSvam0Ms3QrLidCtantcGT2Wz/2PlbZqkoJxMQc40rb fXa4xQSvJYj0GWpadrDJUvUu3LEsunDCxdWrmbmwGRKqZraV2oG7YEddmDqOe0Xm/NxeSobc MIlnaE6V0U8f5zNHB7Y46yJjjYT/Ds1TJo3pvwevDWPvv6rdBeV07D9s43frUS6xYd1uFxHC 7dZYWJjZmyUf5evr1W1gCgwLXG0PEi9n3qmz1lelQ8lSocmvxBKtMbX/OKhAfuP/iIwnTsww 95A2SaPiQZA51NywV8OFgsN0ITl2PlZ4Tp9hHERDe6nQCsNI/Us= In-Reply-To: <41191296-0aa0-4010-b70f-efa80b9200d4@app.fastmail.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000b6df200617f59628" --000000000000b6df200617f59628 Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/7/24 04:44, Arnd Bergmann wrote: > On Tue, May 7, 2024, at 13:10, Daniel Vetter wrote: >> On Mon, May 06, 2024 at 04:53:47PM +0200, Arnd Bergmann wrote: >>> On Mon, May 6, 2024, at 15:14, Daniel Vetter wrote: >>>> On Fri, May 03, 2024 at 01:22:10PM -0700, Florian Fainelli wrote: >>>>> On 5/3/24 12:45, Arnd Bergmann wrote: >>> >>> This is the current Android GKI config: >>> https://android.googlesource.com/kernel/common.git/+/refs/heads/android-mainline/arch/arm64/configs/gki_defconfig >>> where I can see that CONFIG_DRM is built-in, but DRM_FBDEV_EMULATION >>> CONFIG_VT, CONFIG_FRAMEBUFFER_CONSOLE, CONFIG_FB_DEVICE and >>> CONFIG_FB_CORE are all disabled. >>> >>> So the console won't work at all,I think this means that there >>> is no way to get the console working, but building a fb.ko module >>> allows using /dev/fb with simplefb.ko (or any other one) happens >>> to almost work, but only by dumb luck rather than by design. >> >> So using /dev/fb chardev without fbcon is very much a real idea. This way >> you should be able to run old userspace that uses fbdev directly for >> drawing, but your console needs are served by a userspace console running >> on top of drm. >> >> vt switching gets a bit more entertaining, but I thought logind has all >> the glue already to make that happen. Worst case you need a tiny launcher >> tool to get your userspace console out of the way while you launch a fbdev >> using application, but I think correctly implement the vt ioctls to switch >> to graphics mode /should/ work automatically. >> >> I do agree that this is only really a good idea with drm drivers, since >> those do not rely on any of the fbdev infrastructure like the notifier >> under discussion. > > I'm pretty sure what Florian is looking for has no dependency > on VT, fbcon or logind, but I'm only guessing based on the > information I see in the public Android source trees. > > My understanding is that the Android recovery application is a > graphical tool that accesses the framebuffer directly and > is controlled using the volume and power buttons on a phone. > >>> I suppose making CONFIG_FB_NOTIFIER optional for FB (on by >>> default if any of the consumers of the notification are turned >>> on) would not be a bad direction to go in general and also >>> address Florian's link error, but that doesn't solve the >>> more general concern about a third-party fb.ko module on a >>> kernel that was explicitly built with FB disabled. >>> >>> The GKI defconfig was initially done at a time where one could >>> not have CONFIG_FBDEV_EMULATION and CONFIG_FB_DEVICE without >>> pulling in the entire fbdev module, but now that is possible. >>> Maybe that is something that Android could now include? >>> >>> Alternatively, I wonder if that recovery image could be changed >>> to access the screen through the /dev/dri/ interfaces? I have >>> no experience in using those without Xorg or Wayland, is that >>> a sensible thing to do? >> >> Uh ... I think I'm confused about the requirements. Does android's >> recovery image need fbdev (meaning /dev/fb chardevs), or does it need >> fbcon? >> >> Note that fbcon runs (or well, should run) totally fine on top of drm >> drivers without the fb notifier. This wasn't the case a few years ago >> (because fbcon also used that notifier), but nowadays fb notifiers are >> only needed for legacy fbdev drivers. So could it be that this "need fb >> notifier" requirement is a leftover from rather old kernel versions and >> not actually needed anymore? >> >> I think we should nail the actual requirements here first before jumping >> to solutions ... > > Right, let's wait for Florian to reply. From what he said earlier > though, the only reason that the notifiers are getting in the > way is the link error you get from trying to load a separately > built fb.ko module on a kernel that was built with FB=n / FB_CORE=n, > so I don't think he even cares about notifiers, only about > allowing the recovery application to mmap() the framebuffer. Right, we do not really care about notifiers AFAICT. Based upon this discussion there has been an action on our side to stop making use of the FB subsystem for recovery and use the full blow DRM driver instead. While we get there, though I still see some value into this patch (or a v2, that is). I have a v2 ready if you think there is some value in pursuing that route, if not, we can stop there. -- Florian --000000000000b6df200617f59628 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBVgwggRAoAMCAQICDBP8P9hKRVySg3Qv5DANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMjA5MTAxMjE4MTFaFw0yNTA5MTAxMjE4MTFaMIGW MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xGTAXBgNVBAMTEEZsb3JpYW4gRmFpbmVsbGkxLDAqBgkqhkiG 9w0BCQEWHWZsb3JpYW4uZmFpbmVsbGlAYnJvYWRjb20uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA+oi3jMmHltY4LMUy8Up5+1zjd1iSgUBXhwCJLj1GJQF+GwP8InemBbk5rjlC UwbQDeIlOfb8xGqHoQFGSW8p9V1XUw+cthISLkycex0AJ09ufePshLZygRLREU0H4ecNPMejxCte KdtB4COST4uhBkUCo9BSy1gkl8DJ8j/BQ1KNUx6oYe0CntRag+EnHv9TM9BeXBBLfmMRnWNhvOSk nSmRX0J3d9/G2A3FIC6WY2XnLW7eAZCQPa1Tz3n2B5BGOxwqhwKLGLNu2SRCPHwOdD6e0drURF7/ Vax85/EqkVnFNlfxtZhS0ugx5gn2pta7bTdBm1IG4TX+A3B1G57rVwIDAQABo4IB3jCCAdowDgYD VR0PAQH/BAQDAgWgMIGjBggrBgEFBQcBAQSBljCBkzBOBggrBgEFBQcwAoZCaHR0cDovL3NlY3Vy ZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3J0MEEG CCsGAQUFBzABhjVodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9nc2djY3IzcGVyc29uYWxzaWdu MmNhMjAyMDBNBgNVHSAERjBEMEIGCisGAQQBoDIBKAowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93 d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCQYDVR0TBAIwADBJBgNVHR8EQjBAMD6gPKA6 hjhodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwLmNy bDAoBgNVHREEITAfgR1mbG9yaWFuLmZhaW5lbGxpQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggr BgEFBQcDBDAfBgNVHSMEGDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUUwwfJ6/F KL0fRdVROal/Lp4lAF0wDQYJKoZIhvcNAQELBQADggEBAKBgfteDc1mChZjKBY4xAplC6uXGyBrZ kNGap1mHJ+JngGzZCz+dDiHRQKGpXLxkHX0BvEDZLW6LGOJ83ImrW38YMOo3ZYnCYNHA9qDOakiw 2s1RH00JOkO5SkYdwCHj4DB9B7KEnLatJtD8MBorvt+QxTuSh4ze96Jz3kEIoHMvwGFkgObWblsc 3/YcLBmCgaWpZ3Ksev1vJPr5n8riG3/N4on8gO5qinmmr9Y7vGeuf5dmZrYMbnb+yCBalkUmZQwY NxADYvcRBA0ySL6sZpj8BIIhWiXiuusuBmt2Mak2eEv0xDbovE6Z6hYyl/ZnRadbgK/ClgbY3w+O AfUXEZ0xggJtMIICaQIBATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52 LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwT /D/YSkVckoN0L+QwDQYJYIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIOGfFssI6cgL6u+O t+GGov+a+IAQLXl00Ved5PHgIFYmMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcN AQkFMQ8XDTI0MDUwODE4MzcwM1owaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZI AWUDBAEWMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEH MAsGCWCGSAFlAwQCATANBgkqhkiG9w0BAQEFAASCAQCcSnOJwlIu8SyCg9cIIqgbT/Nq1WmSX+xB MwQmZThH9KgpvrFiAJqE7S6L5mfZRXE2OCYtdu13W9+s5qo9WYEZBDCddJAEOqP1GLoJ+2n1Rie6 TL6ZhiS404P9vavnVTnvv4b7e8X50eMzkbrwl7xlueVgeXo5uVezfPBlrKdDVkRo0wnHDzkVxTfk dnpCsrwZa3JBqsThKq6MSono3avW3Z5fs10TE9aIsre/aAOpI0REsHElZp5yLaerrti62Eh7BsMW 9yVZsK4Q33Qhmi1MsXGP8xmZEYbpsQYydvwi+2xp2OsxzWYEvgQP5xByT8rOYw0NdOWkHSSJAHSa SMLc --000000000000b6df200617f59628--