From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755154AbdKBNL2 (ORCPT ); Thu, 2 Nov 2017 09:11:28 -0400 Received: from mail-eopbgr20050.outbound.protection.outlook.com ([40.107.2.50]:28704 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750858AbdKBNL0 (ORCPT ); Thu, 2 Nov 2017 09:11:26 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Oleksandr_Andrushchenko@epam.com; To: tiwai@suse.com, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, xen-devel , Clemens Ladisch , Takashi Sakamoto , Konrad Rzeszutek Wilk From: Oleksandr Andrushchenko Subject: [RFC v1] ALSA: xen-front: Add Xen para-virtualized frontend driver Message-ID: Date: Thu, 2 Nov 2017 15:11:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [85.223.209.55] X-ClientProxiedBy: VI1PR08CA0220.eurprd08.prod.outlook.com (2603:10a6:802:15::29) To DB5PR0301MB1943.eurprd03.prod.outlook.com (2603:10a6:0:35::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0fb92769-beaa-4c75-f53b-08d521f336d5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603238);SRVR:DB5PR0301MB1943; X-Microsoft-Exchange-Diagnostics: 1;DB5PR0301MB1943;3:5bPY+uU1xO70xGMVRhZiZAc9QyK8F5khHV22RxSxmkm+koKgvVcdUDR6wm9Vcin6odaXLQB2oF/UaXkoev81QEKfz5bWJfEQwkD+alp1Zn43rWl6Kob3TCH+3hPFrkDPRDjj56ADfJoJyAbx0EvXqUyjNA4d6PULMBCldfRUzRbXPLNnCb28Xy4gTfWrhg4O4Nt0vU4V259XSr0dkpWixNtiCnL1H+8zFkGyo9hMlpUngR4vU4n/jD7gvEtC5eHI;25:qNubuGGq6GW26rftGmQS024oKVsksrUOZBaRue3eYFEKTQlEboTKqGcduJzq0dlyPWTpGzO2dPWsWIuVQKS5vq/xu4r7vnNao8rR5voQ3jV5cZMXKfxfBtX8Z2L6Hu1dDAhQmllDW6JVBVBn5ocv1e6mWa7gGJEam3LRSY5yll+FwCz5mdVwUuKx7yZGnOjW4ajrdAoVG5nsXoWOVLWqUFFOd6FpHTEWqaI5B56oHEUGFQxdol5zh+NsOsozv1Qx8Q5WT6U8YKg8GI22EoY/BY2yqshwLur8Sz7OKBH8oo+NMnCydIeZaiDa8Ufd7hC00XvfodsrcDmWnZ54xKPeBA==;31:PmdvMANNdAcWGSdD4BBhzM2P1TVG7Kk5l/Sqiyl0zmG1ipo5htUVhlUe3ggTuRawMFrwfMt7YqAmfYsPzewLB/ij7gt73dSh55j+jMCUET2yGkAmu6R1osJPajlj6fNqpDvx0XGQ1wIWZliJd5GHdvVrX0twByizWFwy3HdhmCitjkc3r+aDqo7MIDD5Q14bYODA7BqjRFXU+YrNEKt2vU340QvPqbv1giMR5Mpk0b8= X-MS-TrafficTypeDiagnostic: DB5PR0301MB1943: X-Microsoft-Exchange-Diagnostics: 1;DB5PR0301MB1943;20:b8IuNFajon0/KCo/U+NERYt/5fVWQv2Fn98eqKdfogQfZXm8G523533B0u4CI5X3bg2UK0b8eukHElvXdtx+CGMORTzwlLo6xkukaOF0jDHnplu0DW+n6x4GGGhoaeU+NBiZC3jqFJqSGcio3cI8nPQhZYKWKAPMuF9R6pxvKmCj4YzoNqIozNT6PnSH3w1g/nWKoOfUnAxlsq319YYC+4niLYpfzeDBQGRe3znxtoW8c2hMrJDJKqYHXD9hfABfxZkzNG72duvhrF9b3flxd4WV3CZNIhpGnrsuvKWI9Kn7lWq9DA+5Tr0hNwbJDVE/1Z/X2v7mpINlsaKlKHB1kE1gtxUrjuwbULteAxLidlaE2IqNUC/87SHT387S1ZoAN8TJtVOw3PC0eF7Lvy6o2QzUU8eqQUx+7NG1R8hmt9NibuRE1Hopg7VERnVypTzgJ+nErA0vxR0PiA6t8+Xay9kXfdoh1DqhQuOkQ7e5ilfTFktVfvXg3hHpZ1gWY2xB;4:si+PSnobrNKu5EHu8LjEgZS0GkQn2kCV11uzxjEC7xjjTCn7hwVdM7z09JuHKbsAnBRiOY8oNrDbBhnlW/p5Cnyghg1xwQfTqckikpoJ5ljVxkumP+01HEMVQmBnLtgomZMcp4ZBAPiKSmTI7S96/SbOLPqh6wU31sIoktJVbyDYEkQJNJdZvJshbvFnWdqJ6O+IVItEbtick2JK9WAkyn0CHud7rktklydQZscqKCHaMsfbAXfgVd4Vg66/LVJwPTZVyBSVG06THfa/eg3pymdl50jBTRbdpM1hnYg/T4kCGZllhaUz68snRnEd8Wa6a7oaSGPGxkE9Knzi6b/PqpXx3oRLb1ss44fBma6YNhY= X-Exchange-Antispam-Report-Test: UriScan:(166708455590820)(84791874153150); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3231020)(3002001)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB5PR0301MB1943;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB5PR0301MB1943; X-Forefront-PRVS: 047999FF16 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(6049001)(346002)(376002)(189002)(199003)(6486002)(478600001)(105586002)(66066001)(65806001)(5660300001)(77096006)(68736007)(3846002)(6116002)(72206003)(966005)(101416001)(6666003)(8676002)(2906002)(6306002)(106356001)(25786009)(2870700001)(65956001)(53936002)(47776003)(31686004)(81156014)(81166006)(7736002)(8936002)(110136005)(58126008)(16526018)(189998001)(31696002)(64126003)(36756003)(316002)(65826007)(86362001)(80792005)(23676003)(305945005)(50986999)(33646002)(83506002)(67846002)(54356999)(16576012)(97736004)(50466002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR0301MB1943;H:[10.17.182.9];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjVQUjAzMDFNQjE5NDM7MjM6UmhwdUE3eUorc250TXV3NnpLemx1ak9G?= =?utf-8?B?QlZhbmNRWXZpeG9rQ1hWcDJudlhJTU12KzRReGY3b0dWcGpESGZtbnU3dUt2?= =?utf-8?B?T3dWL3NtWm9xSGJrZVRXbGtYYUtmbGQ0OTNaUGdHOGpEMFQyMFV4dGdmNnVu?= =?utf-8?B?MDFONXB4aXlrVGNuRVE1Mjd1amswR0lLYmRrdTMyV21DNWw0R2pVUkNqRG1E?= =?utf-8?B?M1hOZHg0dXpLQjh2V3FuQ3NJUDVPcG5uTWFZY3gwU0J3THRBVy8wR21hd1BK?= =?utf-8?B?SDh3TlNmWlkvLysxVDc4QXRQRDk1c1MydFVkMERnSVc2RGxwdTlBaWRHMGJG?= =?utf-8?B?ODBvblh1SGdseVRIZVVxeGgxYThCZlBNeTlSeUt5cFZQQ1A4d3oyUVVYNStE?= =?utf-8?B?aUJkajZuMVQ4RmNneHFVZ1JKbndOMEhaUkExbmRESS9FSVZ6K0VmUFNsR1Nl?= =?utf-8?B?bDFhdS9Pelp6LzBoMVlESks4MUxHajk3eUpNaHlWQnRZRk5Kc1VrMHo2dG1m?= =?utf-8?B?MkZiVWhBR29EUGpPOGZHOUVRclpPalF0U01LQnQxcUlJRkkxbThEU2xSRmhX?= =?utf-8?B?MXdnNUVYdys5VG1Uc1J1R0M1Vy9zSDhsWXAzc2xNZlVNbGdhdnBFa0xPQVRy?= =?utf-8?B?c1Y3dUg3REE0MktYWGlzalBQalF1c0NkYW90bExHbzJoZmM0SWpFa1hGTTJG?= =?utf-8?B?bmlGV0lsSVhrUmJEd2N4QngzaXUzdnVRU1FhNXI3bHVjck5rUXpQeGVCWm14?= =?utf-8?B?NU0vaGF2d3VYMWJ2blNsOHYydU51UHExQmlKZ3NRMVcyd0tVd2lqaWlYV0x3?= =?utf-8?B?Vk5VdEpGU041cmJhd04zU3R4c1lqQTJjV1Nkd1pCcmlEQjJSUTBMeUU2dHNK?= =?utf-8?B?ZjBtekxNRnplTkNNYnh1YTM1V1grY3Bjc01hTzE2UWRzMFJHY3RSMVNlWUpZ?= =?utf-8?B?R2wyZkJkYldLcVhRSFVVWjlmQkthcmVXbjJ1VS9qN2ZwczlZS0RNZC9UNEt6?= =?utf-8?B?TEN2S2phS1JxZnlQZHJTd0xDQ2swUWJxTkVhcXhLOEZ0RFVpU2xCSWxDUWtR?= =?utf-8?B?akx2UER3TUpnZW9CVGJ0KzQwMkJwUkFhdGFBbDVCSzVWMnFHL3dSbFpNV2Qv?= =?utf-8?B?cngrTmVkcFlnOHZWcmYwem83SmFLNGtJMzRGWjc3N1hacXkxTlhhTU5lblc4?= =?utf-8?B?K1hwRytwcEsycTk5cTJ5VWxhYWE1UG9kbzYrTmJ1Tkd4NjFkeExzNk5CUStl?= =?utf-8?B?UXBBcE9FYU9zLzNjRjJSWVJSalhtQm1CNjhFQUYrTU1lUmxIK3N0SllQb1RK?= =?utf-8?B?RzhTWjZmK3oxSldLUU01VWJVdjJvTmx5VDJsZFJHYmRxNFdQeTlqSjlHZ09h?= =?utf-8?B?U1Q4UDk4Wld5NS92aSt6MGNKWHM1aXFiVkhnMWRvVVN1SmFkSXl1U25nWGk5?= =?utf-8?B?aTZKbGpWL1ErNnJYTmVpMlB6MGNnVTBram5oL3FqRHFHdGNpcVVHTlZFSGpQ?= =?utf-8?B?N0dsbDJMY0djdnRZdXh5bDZpUEVuNHpwTXdFeTBPRmk3eGJXYzlUZWRreXdQ?= =?utf-8?B?NkZHUnhYQVhQNVF1clBrYk56TURpWVZMbjFrOFJoTUlkRXBLQmFlSmY2MlZW?= =?utf-8?B?UDBqZTRsbjlmNS9kVkpTcW13d0V4VU1lTUlFWk95UEJ1UG0vczRRV0E2RWdD?= =?utf-8?Q?T14rslJO8cDQ6sLtxeO0lTU0V3oE/OnfN5mRyQOsl?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR0301MB1943;6:C0eQ8i8Elag9twyOLzp6Q6XeUVtYObBXFdihDsMuxfXtz2QR9vXAeWQ+uvkD68xuUWUR2l1H2Cax6ACoKwLTQQ0545G/Pgk8x9BjWbFWNreO7yn3Pn9wU4CTEA+MG5VEdeqsftQ0VHepApgFxEMIvrdHbnGJpG+RUAXgEzpwFKYXxfZ1C5R+tss6BcV+QaMBr/G4P3/rMPnfIMOC0HRy+KXFVPD7WT+72FcYkfLQSJ9OlnRCu8tDDQvK3u5DImZD6+wGGUFOqZOU9tQsVPQmUv5Wqv7AS7OMAfrkTHNgbTqWVkK5LsgFlxkdk/3ae91bnR1h5p/zlD2pCai6OpA5oNDuKXU7MJI56iZWyqwAqPY=;5:Dexb8ti8Ifgn3PhCpjsowuhHdSLyS5WuMFfkc0TZILEfmTpz+ZYXEBNOlP77oT5FHXNUc6R215YgIrkt4EgLaY7YJGteuHgMAphs5SOHZxiCiUd6z3Ucjs6EsbyzA+7/la+QZBgvSNFcaApgBh13FhDJsH+umGEVshDwygTTRvY=;24:5kgpJvFZ9CdCMnjz7uMGpig9nsFIPKdrouK0kPqj2cHBXdIDw2DLbal8J/PhF7wg67SXZHgPC1aVs5aSvtdG3IjEJZdaEnyDkkvSZVY/R5w=;7:cSEihRulIpqnGRwLEzRZp1bJQdFuWi9aKgi2wmiga1AySb6rVpWrf2wAbae/9vqlWTLdXueHQo6mZdGAuOrjOyFKyobFFh7HShm8t6KZjgt17uLwOlsMQzf8N3XkzGBOezzOppgcM98XDMxY/mQ5mXioQapbvUwwIEaHsy2wW2ziJjt8TD65M7JSSxo0er9cPhWmz4lYs8w9puBLKLCyXavwQMW7XUkIGWCo49t2Xs7jsphjcvrxnLWo2bSe4FQG SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2017 13:11:21.6054 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0fb92769-beaa-4c75-f53b-08d521f336d5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR0301MB1943 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, all! Foreword ======== This RFC is aimed to introduce support of para-virtualized sound frontend driver for Xen [1] and gather opinions from the relevant communities (ALSA, Xen). It implements the protocol from [2] with the following limitations:   - mute/unmute is not supported   - get/set volume is not supported Volume control is not supported for the reason that most of the use-cases (at the moment) are based on scenarios where unprivileged OS (e.g. Android, AGL etc) uses software mixers. Both capture and playback are supported. The relevant backend is implemented as a user-space application [3] and uses accompanying helper library [4]. Both frontend driver and backend were tested on real HW running Xen hypervisor (Renesas R-Car ARM based H3/M3 boards, x86). Discussion ========== During the first attempt to upstream the driver [5] number of comments and concerns were raised, one of the biggest flaws in the design were questioned by both Clemens Ladisch [6] and Takashi Sakamoto [7]: the absence of synchronization between frontend and backend during capture/playback. Two options were discussed: “In design of ALSA PCM core, drivers are expected to synchronize to actual hardwares for semi-realtime data transmission. The synchronization is done by two points: 1) Interrupts to respond events from actual hardwares. 2) Positions of actual data transmission in any serial sound interfaces     of actual hardwares. “ and finally a change to the existing protocol was suggested: “In 'include/xen/interface/io/sndif.h', there's no functionalities I described the above: 1. notifications from DomU to Dom0 about the size of period for     interrupts from actual hardwares. Or no way from Dom0 to DomU about     the configured size of the period. 2. notifications of the interrupts from actual hardwares to DomU.” This is implemented as a change to the sndif protocol [8] and allows removing period emulation: 1. Introduced a new event channel from back to front 2. New event with number of bytes played/captured (XENSND_EVT_CUR_POS,    to be used for sending snd_pcm_period_elapsed at frontend (in Linux    implementation). Sent in bytes, not frames to make the protocol    generic and consistent) 3. New request for playback/capture control (XENSND_OP_TRIGGER) with    start/pause/stop/resume sub-ops. Along with these changes other comments on the driver were addressed, e.g. split into smaller chunks, moved the driver from misc to xen etc. Hope, this helps to get the full picture of what was discussed and makes it possible to move forward. Waiting for your valuable comments, Thank you, Oleksandr [1] https://github.com/andr2000/linux/commits/snd_upstream_v1 [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/xen/interface/io/sndif.h [3] https://github.com/xen-troops/snd_be [4] https://github.com/xen-troops/libxenbe [5] https://lkml.org/lkml/2017/8/7/363 [6] http://mailman.alsa-project.org/pipermail/alsa-devel/2017-August/123617.html [7] http://mailman.alsa-project.org/pipermail/alsa-devel/2017-August/123744.html [8] https://github.com/andr2000/linux/commit/095d7feae00bf00c852c67c4f1044de5601678ed From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [RFC v1] ALSA: xen-front: Add Xen para-virtualized frontend driver Date: Thu, 2 Nov 2017 15:11:17 +0200 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0052.outbound.protection.outlook.com [104.47.0.52]) by alsa0.perex.cz (Postfix) with ESMTP id 0BCAE266DEA for ; Thu, 2 Nov 2017 14:11:24 +0100 (CET) Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: tiwai@suse.com, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, xen-devel , Clemens Ladisch , Takashi Sakamoto , Konrad Rzeszutek Wilk List-Id: alsa-devel@alsa-project.org SGksIGFsbCEKCkZvcmV3b3JkCj09PT09PT09CgpUaGlzIFJGQyBpcyBhaW1lZCB0byBpbnRyb2R1 Y2Ugc3VwcG9ydCBvZiBwYXJhLXZpcnR1YWxpemVkIHNvdW5kIGZyb250ZW5kCmRyaXZlciBmb3Ig WGVuIFsxXSBhbmQgZ2F0aGVyIG9waW5pb25zIGZyb20gdGhlIHJlbGV2YW50IGNvbW11bml0aWVz CihBTFNBLCBYZW4pLiBJdCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBmcm9tIFsyXSB3aXRoIHRo ZQpmb2xsb3dpbmcgbGltaXRhdGlvbnM6CiDCoCAtIG11dGUvdW5tdXRlIGlzIG5vdCBzdXBwb3J0 ZWQKIMKgIC0gZ2V0L3NldCB2b2x1bWUgaXMgbm90IHN1cHBvcnRlZApWb2x1bWUgY29udHJvbCBp cyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgcmVhc29uIHRoYXQgbW9zdCBvZiB0aGUgdXNlLWNhc2Vz CihhdCB0aGUgbW9tZW50KSBhcmUgYmFzZWQgb24gc2NlbmFyaW9zIHdoZXJlIHVucHJpdmlsZWdl ZCBPUwooZS5nLiBBbmRyb2lkLCBBR0wgZXRjKSB1c2VzIHNvZnR3YXJlIG1peGVycy4KQm90aCBj YXB0dXJlIGFuZCBwbGF5YmFjayBhcmUgc3VwcG9ydGVkLgoKVGhlIHJlbGV2YW50IGJhY2tlbmQg aXMgaW1wbGVtZW50ZWQgYXMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIFszXQphbmQgdXNlcyBh Y2NvbXBhbnlpbmcgaGVscGVyIGxpYnJhcnkgWzRdLgoKQm90aCBmcm9udGVuZCBkcml2ZXIgYW5k IGJhY2tlbmQgd2VyZSB0ZXN0ZWQgb24gcmVhbCBIVyBydW5uaW5nIFhlbiAKaHlwZXJ2aXNvcgoo UmVuZXNhcyBSLUNhciBBUk0gYmFzZWQgSDMvTTMgYm9hcmRzLCB4ODYpLgoKRGlzY3Vzc2lvbgo9 PT09PT09PT09CgpEdXJpbmcgdGhlIGZpcnN0IGF0dGVtcHQgdG8gdXBzdHJlYW0gdGhlIGRyaXZl ciBbNV0gbnVtYmVyIG9mIGNvbW1lbnRzIGFuZApjb25jZXJucyB3ZXJlIHJhaXNlZCwgb25lIG9m IHRoZSBiaWdnZXN0IGZsYXdzIGluIHRoZSBkZXNpZ24gd2VyZSBxdWVzdGlvbmVkCmJ5IGJvdGgg Q2xlbWVucyBMYWRpc2NoIFs2XSBhbmQgVGFrYXNoaSBTYWthbW90byBbN106IHRoZSBhYnNlbmNl IG9mCnN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGZyb250ZW5kIGFuZCBiYWNrZW5kIGR1cmluZyBj YXB0dXJlL3BsYXliYWNrLgpUd28gb3B0aW9ucyB3ZXJlIGRpc2N1c3NlZDoKCuKAnEluIGRlc2ln biBvZiBBTFNBIFBDTSBjb3JlLCBkcml2ZXJzIGFyZSBleHBlY3RlZCB0byBzeW5jaHJvbml6ZSB0 bwphY3R1YWwgaGFyZHdhcmVzIGZvciBzZW1pLXJlYWx0aW1lIGRhdGEgdHJhbnNtaXNzaW9uLiBU aGUKc3luY2hyb25pemF0aW9uIGlzIGRvbmUgYnkgdHdvIHBvaW50czoKMSkgSW50ZXJydXB0cyB0 byByZXNwb25kIGV2ZW50cyBmcm9tIGFjdHVhbCBoYXJkd2FyZXMuCjIpIFBvc2l0aW9ucyBvZiBh Y3R1YWwgZGF0YSB0cmFuc21pc3Npb24gaW4gYW55IHNlcmlhbCBzb3VuZCBpbnRlcmZhY2VzCiDC oMKgwqAgb2YgYWN0dWFsIGhhcmR3YXJlcy4K4oCcCgphbmQgZmluYWxseSBhIGNoYW5nZSB0byB0 aGUgZXhpc3RpbmcgcHJvdG9jb2wgd2FzIHN1Z2dlc3RlZDoKCuKAnEluICdpbmNsdWRlL3hlbi9p bnRlcmZhY2UvaW8vc25kaWYuaCcsIHRoZXJlJ3Mgbm8gZnVuY3Rpb25hbGl0aWVzIEkKZGVzY3Jp YmVkIHRoZSBhYm92ZToKMS4gbm90aWZpY2F0aW9ucyBmcm9tIERvbVUgdG8gRG9tMCBhYm91dCB0 aGUgc2l6ZSBvZiBwZXJpb2QgZm9yCiDCoMKgwqAgaW50ZXJydXB0cyBmcm9tIGFjdHVhbCBoYXJk d2FyZXMuIE9yIG5vIHdheSBmcm9tIERvbTAgdG8gRG9tVSBhYm91dAogwqDCoMKgIHRoZSBjb25m aWd1cmVkIHNpemUgb2YgdGhlIHBlcmlvZC4KMi4gbm90aWZpY2F0aW9ucyBvZiB0aGUgaW50ZXJy dXB0cyBmcm9tIGFjdHVhbCBoYXJkd2FyZXMgdG8gRG9tVS7igJ0KClRoaXMgaXMgaW1wbGVtZW50 ZWQgYXMgYSBjaGFuZ2UgdG8gdGhlIHNuZGlmIHByb3RvY29sIFs4XSBhbmQgYWxsb3dzIApyZW1v dmluZwpwZXJpb2QgZW11bGF0aW9uOgoxLiBJbnRyb2R1Y2VkIGEgbmV3IGV2ZW50IGNoYW5uZWwg ZnJvbSBiYWNrIHRvIGZyb250CjIuIE5ldyBldmVudCB3aXRoIG51bWJlciBvZiBieXRlcyBwbGF5 ZWQvY2FwdHVyZWQgKFhFTlNORF9FVlRfQ1VSX1BPUywKIMKgwqAgdG8gYmUgdXNlZCBmb3Igc2Vu ZGluZyBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkIGF0IGZyb250ZW5kIChpbiBMaW51eAogwqDCoCBp bXBsZW1lbnRhdGlvbikuIFNlbnQgaW4gYnl0ZXMsIG5vdCBmcmFtZXMgdG8gbWFrZSB0aGUgcHJv dG9jb2wKIMKgwqAgZ2VuZXJpYyBhbmQgY29uc2lzdGVudCkKMy4gTmV3IHJlcXVlc3QgZm9yIHBs YXliYWNrL2NhcHR1cmUgY29udHJvbCAoWEVOU05EX09QX1RSSUdHRVIpIHdpdGgKIMKgwqAgc3Rh cnQvcGF1c2Uvc3RvcC9yZXN1bWUgc3ViLW9wcy4KCkFsb25nIHdpdGggdGhlc2UgY2hhbmdlcyBv dGhlciBjb21tZW50cyBvbiB0aGUgZHJpdmVyIHdlcmUgYWRkcmVzc2VkLAplLmcuIHNwbGl0IGlu dG8gc21hbGxlciBjaHVua3MsIG1vdmVkIHRoZSBkcml2ZXIgZnJvbSBtaXNjIHRvIHhlbiBldGMu CgoKSG9wZSwgdGhpcyBoZWxwcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHdhcyBk aXNjdXNzZWQgYW5kIG1ha2VzIGl0CnBvc3NpYmxlIHRvIG1vdmUgZm9yd2FyZC4KCldhaXRpbmcg Zm9yIHlvdXIgdmFsdWFibGUgY29tbWVudHMsCgpUaGFuayB5b3UsCk9sZWtzYW5kcgoKWzFdIGh0 dHBzOi8vZ2l0aHViLmNvbS9hbmRyMjAwMC9saW51eC9jb21taXRzL3NuZF91cHN0cmVhbV92MQpb Ml0gCmh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZh bGRzL2xpbnV4LmdpdC90cmVlL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9zbmRpZi5oClszXSBo dHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29wcy9zbmRfYmUKWzRdIGh0dHBzOi8vZ2l0aHViLmNv bS94ZW4tdHJvb3BzL2xpYnhlbmJlCls1XSBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy84Lzcv MzYzCls2XSAKaHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9waXBlcm1haWwvYWxzYS1k ZXZlbC8yMDE3LUF1Z3VzdC8xMjM2MTcuaHRtbApbN10gCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJv amVjdC5vcmcvcGlwZXJtYWlsL2Fsc2EtZGV2ZWwvMjAxNy1BdWd1c3QvMTIzNzQ0Lmh0bWwKWzhd IApodHRwczovL2dpdGh1Yi5jb20vYW5kcjIwMDAvbGludXgvY29tbWl0LzA5NWQ3ZmVhZTAwYmYw MGM4NTJjNjdjNGYxMDQ0ZGU1NjAxNjc4ZWQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpBbHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFs c2EtcHJvamVjdC5vcmcKaHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL2Fsc2EtZGV2ZWwK