From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 16B02C4828F for ; Fri, 9 Feb 2024 16:59:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=v3FRP1jIUYbNuT7J+cczQmtHDdPtjNSQwL5d5I7DR9U=; b=Vq+WWmvV8j4jGM v0v2ENn8o2JT4UFFe+4bjH++gbZbLUSvcJ4NGW1m8nYmeA5rSSvhhbQ/wMnl2EWBbMgBW3UsrswpC GENwObzSyPIi2EkHHMhctW5qmNSLPnm8hSN7X1ybio0HF36snrJOXRWfh+5pINTlYEz55zEOqtECZ TDHAv2fhwHm0dTSmKi1ksXdukaB+fQLHfJP19LpfitgNIVpHbpoA0Vx2c2ZOO1xpxnK2aVN0GpZfe GpQIIGznNsVXxgPEz0OjQV6Bm8FmAKibfkCyEzfDdoOzcirXQBFVC+pBaVOgXmhHmkExrnvmnzLIs lHM9FVw39N2AI5HFS2wg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rYUDk-000000002Hg-0PdQ; Fri, 09 Feb 2024 16:59:24 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rYUDf-000000002FD-48YH for kexec@lists.infradead.org; Fri, 09 Feb 2024 16:59:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707497955; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=syjEctozhBfEeP9cGPctM232qlAEbknuGwIIN4ER+PU=; b=V6MFlSzZJBfhm/Lp9IljG/oGJhP+DSENQlTQBv4y05WiRstsOMg5QIFG9MTdHnupmWATOt otK3tHRebNmhgkzGsgCtOJ3nGdu1DAq+XiqLxuRR7jJVoMmGoysI4VqclV1Bhr9qA8Afy/ 1cQUYCZdOVZgvHPZyW+cl34dBP3y3kE= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-423-c4G57TqTMmqR71MFAGNOnw-1; Fri, 09 Feb 2024 11:59:11 -0500 X-MC-Unique: c4G57TqTMmqR71MFAGNOnw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5537885A58F; Fri, 9 Feb 2024 16:59:10 +0000 (UTC) Received: from rotkaeppchen (unknown [10.39.192.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE220C08EF7; Fri, 9 Feb 2024 16:59:05 +0000 (UTC) Date: Fri, 9 Feb 2024 17:59:03 +0100 From: Philipp Rudo To: Alexander Graf Cc: , , , , , , , , Eric Biederman , "H . Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Steven Rostedt , Andrew Morton , "Mark Rutland" , Tom Lendacky , Ashish Kalra , James Gowans , Stanislav Kinsburskii , , , , Anthony Yznaga , Usama Arif , "David Woodhouse" , Benjamin Herrenschmidt , Rob Herring , "Krzysztof Kozlowski" , Subject: Re: [PATCH v3 00/17] kexec: Allow preservation of ftrace buffers Message-ID: <20240209175903.15dcc714@rotkaeppchen> In-Reply-To: <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> References: <20240117144704.602-1-graf@amazon.com> <20240129173450.038e46b7@rotkaeppchen> <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> Organization: Red Hat inc. MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240209_085920_198223_E19B97C4 X-CRM114-Status: GOOD ( 80.04 ) X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org SGkgQWxleCwKCk9uIEZyaSwgMiBGZWIgMjAyNCAxMzo1ODo1MiArMDEwMApBbGV4YW5kZXIgR3Jh ZiA8Z3JhZkBhbWF6b24uY29tPiB3cm90ZToKCj4gSGkgUGhpbGlwcCwKPiAKPiBPbiAyOS4wMS4y NCAxNzozNCwgUGhpbGlwcCBSdWRvIHdyb3RlOgo+ID4gSGkgQWxleCwKPiA+Cj4gPiBhZGRpbmcg bGludXgtaW50ZWdyaXR5IGFzIHRoZXJlIGFyZSBzb21lIHN5bmVyZ2llcyB3aXRoIElNQV9LRVhF QyAoaW4gY2FzZSB3ZQo+ID4gZ2V0IEtITyB0byB3b3JrKS4KPiA+Cj4gPiBGaXN0IG9mIGFsbCBJ IGJlbGlldmUgdGhhdCBoYXZpbmcgYSBnZW5lcmljIGZyYW1ld29yayB0byBwYXNzIGluZm9ybWF0 aW9uIGZyb20KPiA+IG9uZSBrZXJuZWwgdG8gdGhlIG90aGVyIGFjcm9zcyBrZXhlYyB3b3VsZCBi ZSBhIGdvb2QgdGhpbmcuIEJ1dCBJJ20gYWZyYWlkIHRoYXQgIAo+IAo+IAo+IFRoYW5rcywgSSdt IGhhcHB5IHRvIGhlYXIgdGhhdCB5b3UgYWdyZWUgd2l0aCB0aGUgYmFzaWMgbW90aXZhdGlvbiA6 KS4gCj4gVGhlcmUgYXJlIGZ1bmRhbWVudGFsbHkgMiBwcm9ibGVtcyB3aXRoIHBhc3NpbmcgZGF0 YToKPiAKPiAgwqAgKiBQYXNzaW5nIHN0cnVjdHVyZWQgZGF0YSBpbiBhIGNyb3NzLWFyY2hpdGVj dHVyZSB3YXkKPiAgwqAgKiBQYXNzaW5nIG1lbW9yeQo+IAo+IEtITyB0YWNrbGVzIGJvdGguIEl0 IHByb3Bvc2VzIGEgY29tbW9uIEZEVCBiYXNlZCBmb3JtYXQgdGhhdCBhbGxvd3MgdXMgCj4gdG8g cGFzcyBwZXItc3Vic3lzdGVtIHByb3BlcnRpZXMuIFRoYXQgd2F5LCBhIHN1YnN5c3RlbSBkb2Vz IG5vdCBuZWVkIHRvIAo+IGtub3cgd2hldGhlciBpdCdzIHJ1bm5pbmcgb24gQVJNLCB4ODYsIFJJ U0MtViBvciBzMzkweC4gSXQganVzdCBnYWlucyAKPiBhd2FyZW5lc3MgZm9yIEtITyBhbmQgY2Fu IHBhc3MgZGF0YS4KPiAKPiBPbiB0b3Agb2YgdGhhdCwgaXQgcHJvcG9zZXMgYSBzdGFuZGFyZGl6 ZWQgIm1lbSIgcHJvcGVydHkgKGFuZCBzb21lIAo+IG1hZ2ljIGFyb3VuZCB0aGF0KSB3aGljaCBh bGxvd3Mgc3Vic3lzdGVtcyB0byBwYXNzIG1lbW9yeS4KPiAKPiAKPiA+IHlvdSBhcmUgaWdub3Jp bmcgc29tZSBmdW5kYW1lbnRhbCBwcm9ibGVtcyB3aGljaCBtYWtlcyBpdCBleHRyZW1lbHkgaGFy ZCwgaWYKPiA+IG5vdCBpbXBvc3NpYmxlLCB0byByZWxpYWJseSB0cmFuc2ZlciB0aGUga2VybmVs J3Mgc3RhdGUgZnJvbSBvbmUga2VybmVsIHRvIHRoZQo+ID4gb3RoZXIuCj4gPgo+ID4gT25lIHRo aW5nIEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyBob3cgcmV1c2luZyB0aGUgc2NyYXRjaCBhcmVhIGlz IHdvcmtpbmcuIFN1cmUKPiA+IHlvdSBwYXNzIGl0J3MgbG9jYXRpb24gdmlhIHRoZSBkdC9ib290 X3BhcmFtcyBidXQgSSBkb24ndCBzZWUgYW55IGNvZGUgdGhhdAo+ID4gbWFrZXMgaXQgYSBDTUEg cmVnaW9uLiBTbyBJSVVDIHRoZSBzY3JhdGNoIGFyZWEgd29uJ3QgYmUgYXZhaWxhYmxlIGZvciB0 aGUgMm5kCj4gPiBrZXJuZWwuIFdoaWNoIGlzIHByb2JhYmx5IGZvciB0aGUgYmV0dGVyIGFzIElJ VUMgdGhlIDJuZCBrZXJuZWwgZ2V0cyBsb2FkZWQgYW5kCj4gPiBydW5zIGluc2lkZSB0aGF0IGFy ZWEgYW5kIEkgZG9uJ3QgYmVsaWV2ZSB0aGUgQ01BIGRlc2lnbiBldmVyIGNvbnNpZGVyZWQgdGhh dAo+ID4gdGhlIGtlcm5lbCBpbWFnZSBjb3VsZCBiZSBpbmNsdWRlZCBpbiBhIENNQSBhcmVhLiAg Cj4gCj4gCj4gVGhhdCBvbmUgdG9vayBtZSBhIGxvdCB0byBmaWd1cmUgb3V0IHNlbnNpYmx5ICh3 aXRoIHJlY3Vyc2lvbiBhbGwgdGhlIAo+IHdheSBkb3duKSB3aGlsZSBidWlsZGluZyBLSE8gOiku IEkgaG9wZSBJIGRldGFpbGVkIGl0IHNlbnNpYmx5IGluIHRoZSAKPiBkb2N1bWVudGF0aW9uIC0g cGxlYXNlIGxldCBtZSBrbm93IGhvdyB0byBpbXByb3ZlIGl0IGluIGNhc2UgaXQncyAKPiB1bmNs ZWFyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjQwMTE3MTQ0NzA0LjYwMi04LWdy YWZAYW1hem9uLmNvbS8KPiAKPiBMZXQgbWUgZXhwbGFpbiBpbmxpbmUgdXNpbmcgZGlmZmVyZW50 IHdvcmRzIGFzIHdlbGwgd2hhdCBoYXBwZW5zOgo+IAo+IFRoZSBmaXJzdCAoYW5kIG9ubHkgdGhl IGZpcnN0KSBrZXJuZWwgdGhhdCBib290cyBhbGxvY2F0ZXMgYSBDTUEgcmVnaW9uIAo+IGFzICJz Y3JhdGNoIHJlZ2lvbiIuIEl0IGxvYWRzIHRoZSBuZXcga2VybmVsIGludG8gdGhhdCByZWdpb24u IEl0IHBhc3NlcyAKPiB0aGF0IHJlZ2lvbiBhcyAic2NyYXRjaCByZWdpb24iIHRvIHRoZSBuZXh0 IGtlcm5lbC4gVGhlIG5leHQga2VybmVsIG5vdyAKPiB0YWtlcyBpdCBhbmQgbWFya3MgZXZlcnkg cGFnZSBibG9jayB0aGF0IHRoZSBzY3JhdGNoIHJlZ2lvbiBzcGFucyBhcyBDTUE6Cj4gCj4gaHR0 cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDI0MDExNzE0NDcwNC42MDItMy1ncmFmQGFtYXpv bi5jb20vCj4gCj4gVGhlIENNQSBoaW50IGRvZXNuJ3QgbWVhbiB3ZSBjcmVhdGUgYW4gYWN0dWFs IENNQSByZWdpb24uIEl0IG1vc3RseSAKPiBtZWFucyB0aGF0IHRoZSBrZXJuZWwgd29uJ3QgdXNl IHRoaXMgbWVtb3J5IGZvciBhbnkga2VybmVsIGFsbG9jYXRpb25zLiAKPiBLZXJuZWwgYWxsb2Nh dGlvbnMgdXAgdG8gdGhpcyBwb2ludCBhcmUgYWxsb2NhdGlvbnMgd2UgZG9uJ3QgbmVlZCB0byAK PiBwYXNzIG9uIHdpdGggS0hPIGFnYWluLiBLZXJuZWwgYWxsb2NhdGlvbnMgcGFzdCB0aGF0IHBv aW50IG1heSBiZSAKPiBhbGxvY2F0aW9ucyB0aGF0IHdlIHdhbnQgdG8gcGFzcywgc28gd2UganVz dCBuZXZlciBwbGFjZSB0aGVtIGludG8gdGhlIAo+ICJzY3JhdGNoIHJlZ2lvbiIgYWdhaW4uCj4g Cj4gQW5kIGJlY2F1c2Ugd2Ugbm93IGFscmVhZHkgaGF2ZSBhIHNjcmF0Y2ggcmVnaW9uIGZyb20g dGhlIHByZXZpb3VzIAo+IGtlcm5lbCwgd2Uga2VlcCByZXVzaW5nIHRoYXQgZm9yZXZlciB3aXRo IGFueSBuZXcgS0hPIGtleGVjLgoKVGhhbmtzIGZvciB0aGUgZXhwbGFuYXRpb24uIEkndmUgbWlz c2VkIHRoZSBtZW1ibG9ja19tYXJrX3NjcmF0Y2ggaW4Ka2hvX3BvcHVsYXRlLiBUaGUgY29kZSBt YWtlcyBtdWNoIG1vcmUgc2Vuc2Ugbm93IDotKQoKSGF2aW5nIHRoYXQgc2FpZCwgZm9yIGNvbXBs ZXggc2VyaWVzIGxpa2UgdGhpcyBvbmUgSSBsaWtlIHRvIGRvIHRoZQpyZXZpZXcgb24gYSBicmFu Y2ggaW4gbXkgbG9jYWwgZ2l0IGFzIHRoYXQgdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGF0Cihv ciBhdCBsZWFzdCBtYWtlIHRoZW0gbGVzcyBsaWtlbHkpLiBCdXQgeW91ciBwYXRjaGVzIGRpZG4n dCBhcHBseS4gQ2FuCnlvdSB0ZWxsIG1lIHdoYXQgeW91ciBiYXNlIGlzIG9yIG1ha2UgeW91ciBn aXQgYnJhbmNoIGF2YWlsYWJsZS4gVGhhdAp3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwgdG8gbWUuIFRo YW5rcyEKCj4gPiBTdGF5aW5nIGF0IHJldXNpbmcgdGhlIHNjcmF0Y2ggYXJlYS4gT25lIHRoaW5n IHRoYXQgaXMgYnJva2VuIGZvciBzdXJlIGlzIHRoYXQKPiA+IHlvdSByZXVzZSB0aGUgc2NyYXRj aCBhcmVhIHdpdGhvdXQgZXZlciBjaGVja2luZyB0aGUga2hvX3NjcmF0Y2ggcGFyYW1ldGVyIG9m Cj4gPiB0aGUgMm5kIGtlcm5lbCdzIGNvbW1hbmQgbGluZS4gUmVtZW1iZXIsIHdpdGgga2V4ZWMg eW91IGFyZSBkZWFsaW5nIHdpdGggdHdvCj4gPiBkaWZmZXJlbnQga2VybmVscyB3aXRoIHR3byBk aWZmZXJlbnQgY29tbWFuZCBsaW5lcy4gTWVhbmluZyB5b3UgY2FuIG9ubHkgcmV1c2UKPiA+IHRo ZSBzY3JhdGNoIGFyZWEgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGluIHRoZSAybmQga2VybmVsIGlz IGlkZW50aWNhbCB0byB0aGUKPiA+IG9uZSBvZiB0aGUgMXN0IGtlcm5lbC4gSW4gYWxsIG90aGVy IGNhc2VzIHlvdSBuZWVkIHRvIGFkanVzdCB0aGUgc2NyYXRjaCBhcmVhJ3MKPiA+IHNpemUgb3Ig cmVzZXJ2ZSBhIG5ldyBvbmUuICAKPiAKPiAKPiBIbS4gU28geW91J3JlIHNheWluZyBhIHVzZXIg bWF5IHdhbnQgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBzY3JhdGNoIAo+IGFyZWEgd2l0aCBh IEtITyBrZXhlYy4gVGhhdCdzIGluc2FuZWx5IHJpc2t5IGJlY2F1c2UgeW91IChhcyByaWdodGZ1 bGx5IAo+IHBvaW50ZWQgb3V0IGJlbG93KSBtYXkgaGF2ZSBzaWduaWZpY2FudCBmcmFnbWVudGF0 aW9uIGF0IHRoYXQgcG9pbnQuIEFuZCAKPiB3ZSB3aWxsIG9ubHkga25vdyB3aGVuIHdlJ3JlIGlu IHRoZSBuZXcga2VybmVsIHNvIGl0J3MgdG9vIGxhdGUgdG8gCj4gYWJvcnQuIElNSE8gaXQncyBi ZXR0ZXIgdG8ganVzdCBkZWNsYXJlIHRoZSBzY3JhdGNoIHJlZ2lvbiBhcyBpbW11dGFibGUgCj4g ZHVyaW5nIEtITyB0byBhdm9pZCB0aGF0IHBpdGZhbGwuCgpZZXMsIGEgdXNlciBjYW4gc2V0IGFu eSBjb21tYW5kIGxpbmUgd2l0aCBrZXhlYy4gTXkgZXhwZWN0YXRpb24gYXMgYQp1c2VyIGlzIHRo YXQgdGhlIGtlcm5lbCByZXNwZWN0cyB3aGF0ZXZlciBJIHNldCBvbiB0aGUgY29tbWFuZCBsaW5l IGFuZApkb2Vzbid0IHRoaW5rIGl0IGtub3dzIGJldHRlciBhbmQgc2ltcGx5IGlnbm9yZXMgd2hh dCBJIHRlbGwgaXQgdG8gZG8uClNvIGV2ZW4gd2hlbiB5b3Ugc2V0IHRoZSBzY3JhdGNoIGFyZWEg aW1tdXRhYmxlIGR1cmluZyBib290IHlvdSBoYXZlIHRvCm1ha2Ugc3VyZSB0aGF0IGluIHRoZSBl bmQga2VybmVsIHJlc3BlY3RzIHdoYXQgdGhlIHVzZXIgaGFzIHNldCBvbiB0aGUKMm5kIGtlcm5l bCdzIGNvbW1hbmQgbGluZS4KCj4gPiBUaGlzIGRpcmVjdGx5IGxlYWRzIHRvIHRoZSBuZXh0IHBy b2JsZW0uIEluIGtob19yZXNlcnZlX3ByZXZpb3VzX21lbSB5b3UgYXJlCj4gPiByZXVzaW5nIHRo ZSBkaWZmZXJlbnQgbWVtb3J5IHJlZ2lvbnMgd2hlcmV2ZXIgdGhlIDFzdCBrZXJuZWwgYWxsb2Nh dGVkIHRoZW0uCj4gPiBCdXQgdGhhdCBhbHNvIG1lYW5zIHlvdSBhcmUgaGFuZGluZyBvdmVyIHRo ZSAxc3Qga2VybmVsJ3MgbWVtb3J5Cj4gPiBmcmFnbWVudGF0aW9uIHRvIHRoZSAybmQga2VybmVs IGFuZCB5b3UgZG8gdGhhdCBleHRyZW1lbHkgZWFybHkgZHVyaW5nIGJvb3QuCj4gPiBXaGljaCBt ZWFucyB0aGF0IHVzZXJzIHdobyBuZWVkIHRvIGFsbG9jYXRlIGxhcmdlIGNvbnRpbnVvdXMgcGh5 c2ljYWwgbWVtb3J5LAo+ID4gbGlrZSB0aGUgc2NyYXRjaCBhcmVhIG9yIHRoZSBjcmFzaGtlcm5l bCBtZW1vcnksIHdpbGwgaGF2ZSBpbmNyZWFzaW5nIGNoYW5jZSB0bwo+ID4gbm90IGZpbmQgYSBz dWl0YWJsZSBhcmVhLiBXaGljaCBJTUhPIGlzIHVuYWNjZXB0YWJsZS4gIAo+IAo+IAo+IENvcnJl Y3QgOikuIEl0IGJhc2ljYWxseSBtZWFucyB5b3Ugd2FudCB0byBwYXNzIGxhcmdlIGFsbG9jYXRp b25zIGZyb20gCj4gdGhlIDFzdCBrZXJuZWwgdGhhdCB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBvbiB0 byB0aGUgbmV4dC4gU28gaWYgdGhlIDFzdCAKPiBrZXJuZWwgYWxsb2NhdGVkIGEgbGFyZ2UgY3Jh c2ggYXJlYSwgaXQncyBzYWZlc3QgdG8gcGFzcyB0aGF0IGFsbG9jYXRpb24gCj4gdXNpbmcgS0hP IHRvIGVuc3VyZSB0aGUgbmV4dCBrZXJuZWwgYWxzbyBoYXMgdGhlIHJlZ2lvbiBmdWxseSByZXNl cnZlZC4gCj4gT3RoZXJ3aXNlIHRoZSBuZXh0IGtlcm5lbCBtYXkgYWNjaWRlbnRhbGx5IHBsYWNl IGRhdGEgaW50byB0aGUgCj4gcHJldmlvdXNseSByZXNlcnZlZCBjcmFzaCByZWdpb24gKHdoaWNo IHdvdWxkIGJlIGNvbnRpZ3VvdXNseSBmcmVlIGF0IAo+IGVhcmx5IGluaXQgb2YgdGhlIDJuZCBr ZXJuZWwpIGFuZCBmcmFnbWVudCBpdCBhZ2Fpbi4KCkkgZG9uJ3QgdGhpbmsgdGhhdCB0aGlzIGlz IGFuIG9wdGlvbi4gRm9yIG9uZSB5b3VyIHN1Z2dlc3Rpb24gbWVhbnMgdGhhdApldmVyeSAibGFy Z2UgYWxsb2NhdGlvbiIgKHdoYXRldmVyIHRoYXQgbWVhbnMpIG5lZWRzIHRvIGJlIHRyYWNrZWQK bWFudWFsbHkgZm9yIGl0IHRvIHdvcmsgdG9nZXRoZXIgd2l0aCBLSE8uIEluIGFkZGl0aW9uIHRo ZXJlIGlzIHN0aWxsCnRoZSBwcm9ibGVtIHRoYXQgdGhlIDJuZCBrZXJuZWwgbWF5IG5lZWQgYSBs YXJnZXIgYWxsb2NhdGlvbiB0aGFuIHRoZQoxc3Qgb25lLiBCZSBpdCBiZWNhdXNlIGl0J3MgYSBj b21tYW5kIGxpbmUgcGFyYW1ldGVyLCBlLmcuIGtob19zY3JhdGNoCm9yIGNyYXNoa2VybmVsLCBv ciBqdXN0IGEgbmV3IGZlYXR1cmUgdGhhdCByZXF1aXJlcyBhZGRpdGlvbmFsIG1lbW9yeQp0aGUg Mm5kIGtlcm5lbCBoYXMuIElNTyBpdCdzIGluZXZpdGFibGUgdGhhdCBLSE8gZmluZHMgYSB3YXkg dG8KcmVtb3ZlL3JlZHVjZSBtZW1vcnkgZnJhZ21lbnRhdGlvbi4KCj4gPiBGaW5hbGx5LCBhbmQg dGhhdCdzIHRoZSBiaWcgZWxlcGhhbnQgaW4gdGhlIHJvb20sIGlzIHlvdXIgbGF4IGhhbmRsaW5n IG9mIHRoZQo+ID4gdW5zdGFibGUga2VybmVsIGludGVybmFsIEFCSS4gUmVtZW1iZXIsIHlvdSBh cmUgZGVhbGluZyB3aXRoIHR3byBkaWZmZXJlbnQKPiA+IGtlcm5lbHMsIHRoYXQgYWxzbyBtZWFu cyB0d28gZGlmZmVyZW50IHNvdXJjZSBsZXZlbHMgYW5kIHR3byBkaWZmZXJlbnQgY29uZmlncy4K PiA+IFNvIG9ubHkgYmVjYXVzZSBib3RoIHRoZSAxc3QgYW5kIDJuZCBrZXJuZWwgaGF2ZSBhIGUu Zy4gc3RydWN0IGJ1ZmZlcl9wYWdlCj4gPiBkb2Vzbid0IG1lYW5zIHRoYXQgdGhleSBoYXZlIHRo ZSBzYW1lIHN0cnVjdCBidWZmZXJfcGFnZS4gQnV0IHRoYXQncyB3aGF0IHlvdXIKPiA+IGNvZGUg aW1wbGljaXRseSBhc3N1bWVzLiBGb3IgS0hPIGV2ZXIgdG8gbWFrZSBpdCB1cHN0cmVhbSB5b3Ug bmVlZCB0byBtYWtlIHN1cmUKPiA+IHRoYXQgYm90aCBrZXJuZWxzIGFyZSAic3BlYWtpbmcgdGhl IHNhbWUgbGFuZ3VhZ2UiLiAgCj4gCj4gCj4gV293LCBJIGhvcGUgaXQgZGlkbid0IGNvbWUgYWNy b3NzIGFzIHRoYXQhIFRoZSB3aG9sZSBwb2ludCBvZiB1c2luZyBGRFQgCj4gYW5kIGNvbXBhdGli bGUgc3RyaW5ncyBpbiBLSE8gaXMgdG8gc29sdmUgZXhhY3RseSB0aGF0IHByb2JsZW0uIEFueSB0 aW1lIAo+IGEgcGFzc2VkIG92ZXIgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcyBpbmNvbXBhdGlibHks IHlvdSB3b3VsZCBuZWVkIHRvIAo+IG1vZGlmeSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhl IHN1YnN5c3RlbSB0aGF0IG93bnMgdGhlIG5vdyAKPiBpbmNvbXBhdGlibGUgZGF0YS4KPiAKPiBT byBpbiB0aGUgZXhhbXBsZSBvZiBzdHJ1Y3QgYnVmZmVyX3BhZ2UsIGl0IG1lYW5zIHRoYXQgaWYg YW55b25lIGNoYW5nZXMgCj4gdGhlIGZldyBiaXRzIHdlIGNhcmUgYWJvdXQgaW4gc3RydWN0IGJ1 ZmZlcl9wYWdlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IAo+IHRoZSBuZXcga2VybmVsIGVtaXRz ICJmdHJhY2UsY3B1LXYyIiBjb21wYXRpYmxlIHN0cmluZ3MuIFdlIGNhbiBhdCB0aGF0IAo+IHBv aW50IGNob29zZSB3aGV0aGVyIHdlIHdhbnQgdG8gaW1wbGVtZW50IGNvbXBhdCBoYW5kbGluZyBm b3IgCj4gImZ0cmFjZSxjcHUtdjEiIHN0eWxlIHN0cnVjdCBidWZmZXJfcGFnZXMgb3Igb25seSBz dXBwb3J0IHNhbWUgdmVyc2lvbiAKPiBpbmdlc3Rpb24uCgpXZWxsLCBpdCBjYW1lIGFjcm9zcyBs aWtlIHRoYXQgYmVjYXVzZSB0aGVyZSB3YXMgYWJzb2x1dGVseSBubwpleHBsYW5hdGlvbiBvbiB3 aGVuIHRob3NlIHZlcnNpb25zIG5lZWQgdG8gYmUgYnVtcGVkIHVwIHNvIGZhci4KCj4gVGhlIG9u ZSB0aGluZyB0aGF0IHdlIGNvdWxkIGltcHJvdmUgb24gaGVyZSB0b2RheSBJTUhPIGlzIHRvIGhh dmUgCj4gY29tcGlsZSB0aW1lIGVycm9ycyBpZiBhbnkgcGFydCBvZiBzdHJ1Y3QgYnVmZmVyX3Bh Z2UgY2hhbmdlcyAKPiBzZW1hbnRpY2FsbHk6IFNvIHdlJ2QgY3JlYXRlIGEgZmV3IGRlZmluZXMg Zm9yIHRoZSBiaXRzIHdlIHdhbnQgaW4gCj4gImZ0cmFjZSxjcHUtdjEiIGFzIHdlbGwgYXMgc2l6 ZSBvZiBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYW5kIHRoZW4gY29tcGFyZSAKPiB0aGVtIHRvIHdoYXQg dGhlIHN0cnVjdCBvZmZzZXRzIGFyZSBhdCBjb21waWxlIHRpbWUgdG8gZW5zdXJlIHRoZXkgc3Rh eSAKPiBpZGVudGljYWwuCgpIb3cgZG8geW91IGltYWdpbmUgdGhvc2UgbWFjcm9zIHRvIGxvb2sg bGlrZT8gSG93IGRvIHRoZXkgd29yayB3aXRoCnN0cnVjdHMgdGhhdCBjaGFuZ2UgdGhlaXIgbGF5 b3V0IGRlcGVuZGluZyBvbiB0aGUgY29uZmlnPwoKUGVyc29uYWxseSwgSSBoaWdobHkgZG91YnQg dGhhdCBhbnkgc3lzdGVtIHRoYXQgbWFuYWdlcyB0aGVzZSBkaWZmZXJlbnQKdmVyc2lvbnMgbWFu dWFsbHkgd2lsbCB3b3JrIHJlbGlhYmx5LiBJdCBtaWdodCBiZSBwb3NzaWJsZSBmb3IKc29tZXRo aW5nIGFzIHNpbXBsZSBhcyBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYnV0IG9uY2UgaXQgZ2V0cyBtb3Jl CmNvbXBsaWNhdGVkLCBlLmcuIGJ5IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZyBvciBz aW1wbHkgaGF2aW5nCm1vcmUgZGVwZW5kZW5jaWVzIHRvIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMs IGl0IHdpbGwgYmUgYSBjb25zdGFudApzb3VyY2Ugb2YgcGFpbi4KSnVzdCBhc3N1bWUsIGFsdGhv dWdoIGV4dHJlbWVseSB1bmxpa2VseSwgdGhhdCBzdHJ1Y3QgbGlzdF9oZWFkIGlzCmNoYW5nZWQu IE1vc3QgbGlrZWx5IHRoZSBwZXJzb24gd2hvIG1ha2VzIHRoZSBjaGFuZ2Ugd29uJ3QgYmUgZnJv bSB0aGUKZnRyYWNlIHRlYW0gYW5kIHRodXMgd29uJ3Qga25vdyB0aGF0IGhlL3NoZS9pdCBuZWVk cyB0byBidW1wIHRoZQp2ZXJzaW9uLiBFdmVuIHRoZSBjb21waWxlIHRpbWUgZXJyb3JzIHdpbGwg b25seSBoZWxwIGlmCkNPTkZJR19GVFJBQ0VfS0hPIGlzIGVuYWJsZWQgd2hpY2ggbW9zdCBsaWtl IHdvbid0IGJlIHRoZSBjYXNlLgpVbHRpbWF0ZWx5IHRoaXMgbWVhbnMgdGhhdCBLSE8gd2lsbCBi cmVhayBzaWxlbnRseSB1bnRpbCBzb21lb25lIHRyaWVzCnRvIGtleGVjIGluIHRoZSBuZXcga2Vy bmVsIHdpdGggS0hPIGVuYWJsZWQuIEJ1dCBldmVuIHRoZW4gdGhlcmUgd2lsbApvbmx5IGJlIGEg Y3J5cHRpYyBlcnJvciBtZXNzYWdlIChpZiBhbnkpIGFzIHlvdSBoYXZlIGJhc2ljYWxseQppbnRy b2R1Y2VkIGEgbWVtb3J5IGNvcnJ1cHRpb24gdG8gdGhlIDJuZCBrZXJuZWwuIFRoZSBtb3JlIGNv bXBsZXggdGhlCnN0cnVjdHMgYmVjb21lIGFuZCB0aGUgZGVlcGVyIHRoZSBkZXBlbmRlbmN5IGxp c3QgZ29lcyB0aGUgbW9yZSBsaWtlbHkKaXQgYmVjb21lcyB0aGF0IHN1Y2ggYSBicmVha2luZyBj aGFuZ2UgaXMgbWFkZS4KClRoZSB3YXkgSSBzZWUgaXQgdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCBn ZW5lcmF0aW5nIHRoZSB2ZXJzaW9uIGJhc2VkIG9uCnRoZSBhY3R1YWwgbWVtb3J5IGxheW91dCBm b3IgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkLgoKPiBQbGVhc2UgbGV0IG1lIGtub3cgaG93IEkgY2Fu IGNsYXJpZnkgdGhhdCBtb3JlIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJdCAKPiByZWFsbHkgaXMg dGhlIGFic29sdXRlIGNvcmUgb2YgS0hPLgo+IAo+IAo+ID4gUGVyc29uYWxseSBJIHNlZSB0d28g cG9zc2libGUgc29sdXRpb25zOgo+ID4KPiA+IDEpIFlvdSBpbnRyb2R1Y2UgYSBzdGFibGUgaW50 ZXJtZWRpYXRlIGZvcm1hdCBmb3IgZXZlcnkgc3Vic3lzdGVtIHNpbWlsYXIgdG8KPiA+IHdoYXQg SU1BX0tFWEVDIGRvZXMuIFRoaXMgc2hvdWxkIHdvcmsgZm9yIHNpbXBsZSB0eXBlcyBsaWtlIHN0 cnVjdCBidWZmZXJfcGFnZQo+ID4gYnV0IGZvciBjb21wbGV4IG9uZXMgbGlrZSBzdHJ1Y3QgdmZp b19kZXZpY2UgdGhhdCdzIGJhc2ljYWxseSBpbXBvc3NpYmxlLiAgCj4gCj4gCj4gSSBkb24ndCBz ZWUgd2h5LiBUaGUgb25seSByZWFzb24gS0hPIHBhc3NlcyBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYXMg bWVtb3J5IAo+IGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdHJhY2Vz IGV2ZW4gYWZ0ZXIgS0hPIAo+IHNlcmlhbGl6YXRpb24gaXMgZG9uZS4gRm9yIHZmaW9fZGV2aWNl LCBJIHRoaW5rIGl0J3MgcGVyZmVjdGx5IAo+IHJlYXNvbmFibGUgdG8gc2VyaWFsaXplIGFueSBk YXRhIHdlIG5lZWQgdG8gcHJlc2VydmUgZGlyZWN0bHkgaW50byBGRFQgCj4gcHJvcGVydGllcy4K PiAKPiAKPiAKPiA+IDIpIFlvdSBhbHNvIGhhbmQgb3ZlciB0aGUgQUJJIHZlcnNpb24gZm9yIGV2 ZXJ5IGdpdmVuIHR5cGUgKGJhc2ljYWxseSBqdXN0IGEKPiA+IGhhc2ggb3ZlciBhbGwgZmllbGRz IGluY2x1ZGluZyBhbGwgdGhlIGRlcGVuZGVuY2llcykuIFNvIHRoZSAybmQga2VybmVsIGNhbgo+ ID4gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgaGFuZGVkIG92ZXIgaXMgaW4gYSBmb3JtYXQgaXQgY2Fu IGhhbmRsZSBhbmQgaWYgbm90IGJhaWwKPiA+IG91dCB3aXRoIGEgZGVzY3JpcHRpdmUgZXJyb3Ig bWVzc2FnZSByYXRoZXIgdGhhbiByZWFkaW5nIGdhcmJhZ2UuIFBsdXMgc2lkZSBpcwo+ID4gdGhh dCBvbmNlIHN1Y2ggYSBzeXN0ZW0gaXMgaW4gcGxhY2UgeW91IGNhbiByZXVzZSBpdCB0byBhdXRv bWF0aWNhbGx5IHJlc29sdmUKPiA+IGFsbCBkZXBlbmRlbmNpZXMgc28geW91IG5vIGxvbmdlciBu ZWVkIHRvIG1hbnVhbGx5IHN0b3JlIHRoZSBidWZmZXJfcGFnZSBhbmQKPiA+IGl0cyBidWZmZXJf ZGF0YV9wYWdlIHNlcGFyYXRlbHkuCj4gPiBEb3duIHNpZGUgaXMgdGhhdCB0cmF2ZXJzaW5nIHRo ZSBkZWJ1Z2luZm8gKGluY2x1ZGluZyB0aGUgb25lcyBmcm9tIG1vZHVsZXMpIGlzCj4gPiBub3Qg YSBzaW1wbGUgdGFzayBhbmQgSSBleHBlY3QgdGhhdCBzdWNoIGEgc3lzdGVtIHdpbGwgYmUgd2F5 IG1vcmUgY29tcGxleCB0aGFuCj4gPiB0aGUgcmVzdCBvZiBLSE8uIEluIGFkZGl0aW9uIHRoZXJl IGFyZSBzb21lIGNhc2VzIHRoYXQgdGhlIHZlcnNpb25pbmcgd29uJ3QgYmUKPiA+IGFibGUgdG8g Y2FwdHVyZS4gRm9yIGV4YW1wbGUgaWYgYSB0eXBlIGNvbnRhaW5zIGEgInZvaWQgKiItZmllbGQu IFRoZW4gYWx0aG91Z2gKPiA+IHRoZSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIGlzIGlkZW50aWNh bCBpbiBib3RoIGtlcm5lbHMgdGhlIGZpZWxkIGNhbiBiZSBjYXN0Cj4gPiB0byBkaWZmZXJlbnQg dHlwZXMgd2hlbiB1c2VkLiBBbiBvdGhlciBwcm9ibGVtIHdpbGwgYmUgZnVuY3Rpb24gcG9pbnRl cnMgd2hpY2gKPiA+IHlvdSBmaXJzdCBuZWVkIHRvIHJlc29sdmUgaW4gdGhlIDFzdCBrZXJuZWwg YW5kIHRoZW4gbWFwIHRvIHRoZSBpZGVudGljYWwKPiA+IGZ1bmN0aW9uIGluIHRoZSAybmQga2Vy bmVsLiBUaGlzIHdpbGwgYmVjb21lIHBhcnRpY3VsYXJseSAiZnVuIiB3aGVuIHRoZQo+ID4gZnVu Y3Rpb24gaXMgcGFydCBvZiBhIG1vZHVsZSB0aGF0IGlzbid0IGxvYWRlZCBhdCB0aGUgdGltZSB3 aGVuIHlvdSB0cnkgdG8KPiA+IHJlY3JlYXRlIHRoZSBrZXJuZWwncyBzdGF0ZS4gIAo+IAo+IAo+ IFRoZSB3aG9sZSBwb2ludCBvZiBLSE8gaXMgdG8gbGVhdmUgaXQgdG8gdGhlIHN1YnN5c3RlbSB3 aGljaCBwYXRoIHRoZXkgCj4gd2FudCB0byB0YWtlLiBUaGUgc3Vic3lzdGVtIGNhbiBlaXRoZXIg cGFzcyBiaW5hcnkgZGF0YSBhbmQgdmFsaWRhdGUgYXMgCj4gcGFydCBvZiBGRFQgcHJvcGVydGll cyAobGlrZSBjb21wYXRpYmxlIHN0cmluZ3MpLiBUaGF0IGRhdGEgY2FuIGJlIAo+IGlkZW50aWNh bCB0byB0b2RheSdzIGluLWtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKHVzdWFsbHkgYSBiYWQgaWRl YSkgb3IgCj4gY2FuIGJlIGEgbmV3IGludGVybWVkaWF0ZSBkYXRhIGZvcm1hdC4gQnV0IHRoZSBz dWJzeXN0ZW0gY2FuIGFsc28gY2hvb3NlIAo+IHRvIGZ1bGx5IHNlcmlhbGl6ZSBpbnRvIEZEVCBw cm9wZXJ0aWVzIGFuZCBub3QgcGFzcyBhbnkgbWVtb3J5IGF0IGFsbCAKPiBmb3Igc3RhdGUgdGhh dCB3b3VsZCBiZSBpbiBzdHJ1Y3RzLiBPciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4KClRoYXQncyB0 b3RhbGx5IGZpbmUuIE15IHBvaW50IGlzIHRoYXQgdGhlcmUgYXJlIHNpbXBseSB0b28gbWFueSB3 YXlzIHRvCmZ1Y2sgaXQgdXAgYW5kIGJyZWFrIHRoZSAybmQga2VybmVsLiBUaGF0J3Mgd2h5IEkg ZG9uJ3QgYmVsaWV2ZSB0aGF0IHdlCmNhbiByZWx5IG9uIHRoZSBzdWJzeXN0ZW1zIHRvICJkbyBp dCByaWdodCIgYW5kICJyZW1lbWJlciB0byBidW1wIHRoZQp2ZXJzaW9uIi4gSW4gb3RoZXIgd29y ZHMsIEtITyBuZWVkcyB0byBwcm92aWRlIGEgcmVsaWFibGUsIGF1dG9tYXRpYwptZWNoYW5pc20g d2l0aCB3aWNoIHRoZSAybmQga2VybmVsIGNhbiBkZWNpZGUgaWYgaXQgY2FuIGhhbmRsZSB0aGUK cGFzc2VkIGRhdGEgb3Igbm90LgoKPiA+IFNvIHRvIHN1bW1hcml6ZSwgd2hpbGUgaXQgd291bGQg YmUgbmljZSB0byBoYXZlIGEgZ2VuZXJpYyBmcmFtZXdvcmsgbGlrZSBLSE8gdG8KPiA+IHBhc3Mg ZGF0YSBmcm9tIG9uZSBrZXJuZWwgdG8gdGhlIG90aGVyIHZpYSBrZXhlYyB0aGVyZSBhcmUgZ29v ZCByZWFzb25zIHdoeSBpdAo+ID4gZG9lc24ndCBleGlzdCwgeWV0LiAgCj4gCj4gCj4gSSBob3Bl IG15IGV4cGxhbmF0aW9ucyBhYm92ZSBjbGFyaWZ5IHRoaW5ncyBhIGJpdC4gTGV0IG1lIGtub3cg aWYgeW91J3JlIAo+IGF0IEZPU0RFTSwgaGFwcHkgdG8gdGFsayBhYm91dCB0aGUgaW50ZXJuYWxz IHRoZXJlIGFzIHdlbGwgOikKClNvcnJ5LCBJIGNvdWxkbid0IG1ha2UgaXQgdG8gRk9TREVNIGJ1 dCBJIHBsYW4gdG8gYmUgYXQgTFBDIGxhdGVyIHRoaXMKeWVhci4gSW4gZmFjdCBJIGhhZCB5b3Vy IHRhbGsgb24gbXkgbGlzdCBsYXN0IHllYXIuIFVuZm9ydHVuYXRlbHkgaXQgd2FzCnBhcmFsbGVs IHRvIHRoZSBrZXJuZWwgZGVidWdnZXIgbWMuLi4KClRoYW5rcwpQaGlsaXBwCgo+IEFsZXgKPiAK PiAKPiAKPiAKPiAKPiBBbWF6b24gRGV2ZWxvcG1lbnQgQ2VudGVyIEdlcm1hbnkgR21iSAo+IEty YXVzZW5zdHIuIDM4Cj4gMTAxMTcgQmVybGluCj4gR2VzY2hhZWZ0c2Z1ZWhydW5nOiBDaHJpc3Rp YW4gU2NobGFlZ2VyLCBKb25hdGhhbiBXZWlzcwo+IEVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0 IENoYXJsb3R0ZW5idXJnIHVudGVyIEhSQiAxNDkxNzMgQgo+IFNpdHo6IEJlcmxpbgo+IFVzdC1J RDogREUgMjg5IDIzNyA4NzkKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGtleGVjIG1haWxpbmcgbGlzdAo+IGtleGVjQGxpc3RzLmluZnJh ZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tl eGVjCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka2V4 ZWMgbWFpbGluZyBsaXN0CmtleGVjQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9rZXhlYwo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 358C37EF03 for ; Fri, 9 Feb 2024 16:59:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707497958; cv=none; b=jH+u830OmV9V+4A8rjO1xoCgW9lpTvSojKUBZPCPw9M3ZJExU7SF4lftW/7XZBnUPW9yi+ZKU1EC12lyhEzR3uwS19hxRVE78PvctI/Otgn6dwQ30dd1Y5hFAehpexmKAf+UtbAnbRG4nUzMtNm6YL3QmlKhVGZ2RrGZptNjJAA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707497958; c=relaxed/simple; bh=eCa7otyZga8ui0LT2a/f1iShzyZTgUiKXtc4vXi8UiE=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=enZOuBbAkYiwk7uRlISK5/v1QbZJzSGfzfWJMUjizj7/Fclk9ZzpLBgYm2mYYQG8dqHn3upGO5YrHI7+zQsCRCN+42K3Y6r9V3lENZzVdOUPtXrqIPx+T5BD2BnWOPiVCzMU5lJo36Z/EK5nn2RODwoveKeLyZFex7YhNcf/dAQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=V6MFlSzZ; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="V6MFlSzZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707497955; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=syjEctozhBfEeP9cGPctM232qlAEbknuGwIIN4ER+PU=; b=V6MFlSzZJBfhm/Lp9IljG/oGJhP+DSENQlTQBv4y05WiRstsOMg5QIFG9MTdHnupmWATOt otK3tHRebNmhgkzGsgCtOJ3nGdu1DAq+XiqLxuRR7jJVoMmGoysI4VqclV1Bhr9qA8Afy/ 1cQUYCZdOVZgvHPZyW+cl34dBP3y3kE= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-423-c4G57TqTMmqR71MFAGNOnw-1; Fri, 09 Feb 2024 11:59:11 -0500 X-MC-Unique: c4G57TqTMmqR71MFAGNOnw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5537885A58F; Fri, 9 Feb 2024 16:59:10 +0000 (UTC) Received: from rotkaeppchen (unknown [10.39.192.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE220C08EF7; Fri, 9 Feb 2024 16:59:05 +0000 (UTC) Date: Fri, 9 Feb 2024 17:59:03 +0100 From: Philipp Rudo To: Alexander Graf Cc: , , , , , , , , Eric Biederman , "H . Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Steven Rostedt , Andrew Morton , "Mark Rutland" , Tom Lendacky , Ashish Kalra , James Gowans , Stanislav Kinsburskii , , , , Anthony Yznaga , Usama Arif , "David Woodhouse" , Benjamin Herrenschmidt , Rob Herring , "Krzysztof Kozlowski" , Subject: Re: [PATCH v3 00/17] kexec: Allow preservation of ftrace buffers Message-ID: <20240209175903.15dcc714@rotkaeppchen> In-Reply-To: <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> References: <20240117144704.602-1-graf@amazon.com> <20240129173450.038e46b7@rotkaeppchen> <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> Organization: Red Hat inc. Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Hi Alex, On Fri, 2 Feb 2024 13:58:52 +0100 Alexander Graf wrote: > Hi Philipp, >=20 > On 29.01.24 17:34, Philipp Rudo wrote: > > Hi Alex, > > > > adding linux-integrity as there are some synergies with IMA_KEXEC (in c= ase we > > get KHO to work). > > > > Fist of all I believe that having a generic framework to pass informati= on from > > one kernel to the other across kexec would be a good thing. But I'm afr= aid that =20 >=20 >=20 > Thanks, I'm happy to hear that you agree with the basic motivation :).=20 > There are fundamentally 2 problems with passing data: >=20 > =C2=A0 * Passing structured data in a cross-architecture way > =C2=A0 * Passing memory >=20 > KHO tackles both. It proposes a common FDT based format that allows us=20 > to pass per-subsystem properties. That way, a subsystem does not need to= =20 > know whether it's running on ARM, x86, RISC-V or s390x. It just gains=20 > awareness for KHO and can pass data. >=20 > On top of that, it proposes a standardized "mem" property (and some=20 > magic around that) which allows subsystems to pass memory. >=20 >=20 > > you are ignoring some fundamental problems which makes it extremely har= d, if > > not impossible, to reliably transfer the kernel's state from one kernel= to the > > other. > > > > One thing I don't understand is how reusing the scratch area is working= . Sure > > you pass it's location via the dt/boot_params but I don't see any code = that > > makes it a CMA region. So IIUC the scratch area won't be available for = the 2nd > > kernel. Which is probably for the better as IIUC the 2nd kernel gets lo= aded and > > runs inside that area and I don't believe the CMA design ever considere= d that > > the kernel image could be included in a CMA area. =20 >=20 >=20 > That one took me a lot to figure out sensibly (with recursion all the=20 > way down) while building KHO :). I hope I detailed it sensibly in the=20 > documentation - please let me know how to improve it in case it's=20 > unclear: https://lore.kernel.org/lkml/20240117144704.602-8-graf@amazon.co= m/ >=20 > Let me explain inline using different words as well what happens: >=20 > The first (and only the first) kernel that boots allocates a CMA region=20 > as "scratch region". It loads the new kernel into that region. It passes= =20 > that region as "scratch region" to the next kernel. The next kernel now=20 > takes it and marks every page block that the scratch region spans as CMA: >=20 > https://lore.kernel.org/lkml/20240117144704.602-3-graf@amazon.com/ >=20 > The CMA hint doesn't mean we create an actual CMA region. It mostly=20 > means that the kernel won't use this memory for any kernel allocations.=20 > Kernel allocations up to this point are allocations we don't need to=20 > pass on with KHO again. Kernel allocations past that point may be=20 > allocations that we want to pass, so we just never place them into the=20 > "scratch region" again. >=20 > And because we now already have a scratch region from the previous=20 > kernel, we keep reusing that forever with any new KHO kexec. Thanks for the explanation. I've missed the memblock_mark_scratch in kho_populate. The code makes much more sense now :-) Having that said, for complex series like this one I like to do the review on a branch in my local git as that to avoid problems like that (or at least make them less likely). But your patches didn't apply. Can you tell me what your base is or make your git branch available. That would be very helpful to me. Thanks! > > Staying at reusing the scratch area. One thing that is broken for sure = is that > > you reuse the scratch area without ever checking the kho_scratch parame= ter of > > the 2nd kernel's command line. Remember, with kexec you are dealing wit= h two > > different kernels with two different command lines. Meaning you can onl= y reuse > > the scratch area if the requested size in the 2nd kernel is identical t= o the > > one of the 1st kernel. In all other cases you need to adjust the scratc= h area's > > size or reserve a new one. =20 >=20 >=20 > Hm. So you're saying a user may want to change the size of the scratch=20 > area with a KHO kexec. That's insanely risky because you (as rightfully=20 > pointed out below) may have significant fragmentation at that point. And= =20 > we will only know when we're in the new kernel so it's too late to=20 > abort. IMHO it's better to just declare the scratch region as immutable=20 > during KHO to avoid that pitfall. Yes, a user can set any command line with kexec. My expectation as a user is that the kernel respects whatever I set on the command line and doesn't think it knows better and simply ignores what I tell it to do. So even when you set the scratch area immutable during boot you have to make sure that in the end kernel respects what the user has set on the 2nd kernel's command line. > > This directly leads to the next problem. In kho_reserve_previous_mem yo= u are > > reusing the different memory regions wherever the 1st kernel allocated = them. > > But that also means you are handing over the 1st kernel's memory > > fragmentation to the 2nd kernel and you do that extremely early during = boot. > > Which means that users who need to allocate large continuous physical m= emory, > > like the scratch area or the crashkernel memory, will have increasing c= hance to > > not find a suitable area. Which IMHO is unacceptable. =20 >=20 >=20 > Correct :). It basically means you want to pass large allocations from=20 > the 1st kernel that you want to preserve on to the next. So if the 1st=20 > kernel allocated a large crash area, it's safest to pass that allocation= =20 > using KHO to ensure the next kernel also has the region fully reserved.=20 > Otherwise the next kernel may accidentally place data into the=20 > previously reserved crash region (which would be contiguously free at=20 > early init of the 2nd kernel) and fragment it again. I don't think that this is an option. For one your suggestion means that every "large allocation" (whatever that means) needs to be tracked manually for it to work together with KHO. In addition there is still the problem that the 2nd kernel may need a larger allocation than the 1st one. Be it because it's a command line parameter, e.g. kho_scratch or crashkernel, or just a new feature that requires additional memory the 2nd kernel has. IMO it's inevitable that KHO finds a way to remove/reduce memory fragmentation. > > Finally, and that's the big elephant in the room, is your lax handling = of the > > unstable kernel internal ABI. Remember, you are dealing with two differ= ent > > kernels, that also means two different source levels and two different = configs. > > So only because both the 1st and 2nd kernel have a e.g. struct buffer_p= age > > doesn't means that they have the same struct buffer_page. But that's wh= at your > > code implicitly assumes. For KHO ever to make it upstream you need to m= ake sure > > that both kernels are "speaking the same language". =20 >=20 >=20 > Wow, I hope it didn't come across as that! The whole point of using FDT=20 > and compatible strings in KHO is to solve exactly that problem. Any time= =20 > a passed over data structure changes incompatibly, you would need to=20 > modify the compatible string of the subsystem that owns the now=20 > incompatible data. >=20 > So in the example of struct buffer_page, it means that if anyone changes= =20 > the few bits we care about in struct buffer_page, we need to ensure that= =20 > the new kernel emits "ftrace,cpu-v2" compatible strings. We can at that=20 > point choose whether we want to implement compat handling for=20 > "ftrace,cpu-v1" style struct buffer_pages or only support same version=20 > ingestion. Well, it came across like that because there was absolutely no explanation on when those versions need to be bumped up so far. > The one thing that we could improve on here today IMHO is to have=20 > compile time errors if any part of struct buffer_page changes=20 > semantically: So we'd create a few defines for the bits we want in=20 > "ftrace,cpu-v1" as well as size of struct buffer_page and then compare=20 > them to what the struct offsets are at compile time to ensure they stay=20 > identical. How do you imagine those macros to look like? How do they work with structs that change their layout depending on the config? Personally, I highly doubt that any system that manages these different versions manually will work reliably. It might be possible for something as simple as struct buffer_page but once it gets more complicated, e.g. by depending on the kernel config or simply having more dependencies to common data structures, it will be a constant source of pain. Just assume, although extremely unlikely, that struct list_head is changed. Most likely the person who makes the change won't be from the ftrace team and thus won't know that he/she/it needs to bump the version. Even the compile time errors will only help if CONFIG_FTRACE_KHO is enabled which most like won't be the case. Ultimately this means that KHO will break silently until someone tries to kexec in the new kernel with KHO enabled. But even then there will only be a cryptic error message (if any) as you have basically introduced a memory corruption to the 2nd kernel. The more complex the structs become and the deeper the dependency list goes the more likely it becomes that such a breaking change is made. The way I see it there is no way around generating the version based on the actual memory layout for this particular build. > Please let me know how I can clarify that more in the documentation. It=20 > really is the absolute core of KHO. >=20 >=20 > > Personally I see two possible solutions: > > > > 1) You introduce a stable intermediate format for every subsystem simil= ar to > > what IMA_KEXEC does. This should work for simple types like struct buff= er_page > > but for complex ones like struct vfio_device that's basically impossibl= e. =20 >=20 >=20 > I don't see why. The only reason KHO passes struct buffer_page as memory= =20 > is because we want to be able to produce traces even after KHO=20 > serialization is done. For vfio_device, I think it's perfectly=20 > reasonable to serialize any data we need to preserve directly into FDT=20 > properties. >=20 >=20 >=20 > > 2) You also hand over the ABI version for every given type (basically j= ust a > > hash over all fields including all the dependencies). So the 2nd kernel= can > > verify that the data handed over is in a format it can handle and if no= t bail > > out with a descriptive error message rather than reading garbage. Plus = side is > > that once such a system is in place you can reuse it to automatically r= esolve > > all dependencies so you no longer need to manually store the buffer_pag= e and > > its buffer_data_page separately. > > Down side is that traversing the debuginfo (including the ones from mod= ules) is > > not a simple task and I expect that such a system will be way more comp= lex than > > the rest of KHO. In addition there are some cases that the versioning w= on't be > > able to capture. For example if a type contains a "void *"-field. Then = although > > the definition of the type is identical in both kernels the field can b= e cast > > to different types when used. An other problem will be function pointer= s which > > you first need to resolve in the 1st kernel and then map to the identic= al > > function in the 2nd kernel. This will become particularly "fun" when the > > function is part of a module that isn't loaded at the time when you try= to > > recreate the kernel's state. =20 >=20 >=20 > The whole point of KHO is to leave it to the subsystem which path they=20 > want to take. The subsystem can either pass binary data and validate as=20 > part of FDT properties (like compatible strings). That data can be=20 > identical to today's in-kernel data structures (usually a bad idea) or=20 > can be a new intermediate data format. But the subsystem can also choose= =20 > to fully serialize into FDT properties and not pass any memory at all=20 > for state that would be in structs. Or something in between. That's totally fine. My point is that there are simply too many ways to fuck it up and break the 2nd kernel. That's why I don't believe that we can rely on the subsystems to "do it right" and "remember to bump the version". In other words, KHO needs to provide a reliable, automatic mechanism with wich the 2nd kernel can decide if it can handle the passed data or not. > > So to summarize, while it would be nice to have a generic framework lik= e KHO to > > pass data from one kernel to the other via kexec there are good reasons= why it > > doesn't exist, yet. =20 >=20 >=20 > I hope my explanations above clarify things a bit. Let me know if you're= =20 > at FOSDEM, happy to talk about the internals there as well :) Sorry, I couldn't make it to FOSDEM but I plan to be at LPC later this year. In fact I had your talk on my list last year. Unfortunately it was parallel to the kernel debugger mc... Thanks Philipp > Alex >=20 >=20 >=20 >=20 >=20 > Amazon Development Center Germany GmbH > Krausenstr. 38 > 10117 Berlin > Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss > Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B > Sitz: Berlin > Ust-ID: DE 289 237 879 >=20 >=20 > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E86EDC48297 for ; Fri, 9 Feb 2024 16:59:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=M0S6bVGlXlng99alxbgakMmBbEvWBZGYyuMEgbEXvSY=; b=jNYSNV2cEzHPWs rgRBI6d6GPWgGA+RiqHOMYCRC88Pq3qYVK8ObzFD2rPVi71VBZcjzU+FrlByoVjgm+Icl1o6GaXbC Fo/0XpVo96EmTbfYW/lfazH56ZXA4zmpPjuW4Cti8R0e0tCQpvnKZONQQ9eS3YxFLE4WZj35ZqHGT K7yKPZ2pFU/tIAhIFlBXXSBc8heILsTYjKM+Zxgm75dlwAxCnSbDo7kAU8Mc38Z1E3UgA1WslGhTB OPfUu/0doghTKF3QQs6NIHtjM70kZRVBR7mpF2d9baRK++v3CmMO20DJLH9hxSwF4pVw6HR2ASlB7 WNw9I7UdGTUsR+SBzt0g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rYUDj-000000002Hc-27P4; Fri, 09 Feb 2024 16:59:23 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rYUDf-000000002FX-3hxH for linux-arm-kernel@lists.infradead.org; Fri, 09 Feb 2024 16:59:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707497957; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=syjEctozhBfEeP9cGPctM232qlAEbknuGwIIN4ER+PU=; b=WqsXPehP1n7RNfJjXJQoJF5+xrYOOVGJ9hW31yhebMXgDeFXw3984ywNAC8bNnEMzrV3Ty NX0xiK0jDCmvCRK4cDnUh0pRgaD9MmxtJ3vH11Lhi6181gGd9HH9QSvrdq7+4RawglTfxK WJzcKiWJ3vcSiTwma5jFQBTiMv+ZdOE= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-423-c4G57TqTMmqR71MFAGNOnw-1; Fri, 09 Feb 2024 11:59:11 -0500 X-MC-Unique: c4G57TqTMmqR71MFAGNOnw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5537885A58F; Fri, 9 Feb 2024 16:59:10 +0000 (UTC) Received: from rotkaeppchen (unknown [10.39.192.66]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE220C08EF7; Fri, 9 Feb 2024 16:59:05 +0000 (UTC) Date: Fri, 9 Feb 2024 17:59:03 +0100 From: Philipp Rudo To: Alexander Graf Cc: , , , , , , , , Eric Biederman , "H . Peter Anvin" , Andy Lutomirski , Peter Zijlstra , Steven Rostedt , Andrew Morton , "Mark Rutland" , Tom Lendacky , Ashish Kalra , James Gowans , Stanislav Kinsburskii , , , , Anthony Yznaga , Usama Arif , "David Woodhouse" , Benjamin Herrenschmidt , Rob Herring , "Krzysztof Kozlowski" , Subject: Re: [PATCH v3 00/17] kexec: Allow preservation of ftrace buffers Message-ID: <20240209175903.15dcc714@rotkaeppchen> In-Reply-To: <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> References: <20240117144704.602-1-graf@amazon.com> <20240129173450.038e46b7@rotkaeppchen> <3bfbe6b3-d293-483f-9f30-b7d49440be22@amazon.com> Organization: Red Hat inc. MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240209_085920_083435_A1792744 X-CRM114-Status: GOOD ( 80.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQWxleCwKCk9uIEZyaSwgMiBGZWIgMjAyNCAxMzo1ODo1MiArMDEwMApBbGV4YW5kZXIgR3Jh ZiA8Z3JhZkBhbWF6b24uY29tPiB3cm90ZToKCj4gSGkgUGhpbGlwcCwKPiAKPiBPbiAyOS4wMS4y NCAxNzozNCwgUGhpbGlwcCBSdWRvIHdyb3RlOgo+ID4gSGkgQWxleCwKPiA+Cj4gPiBhZGRpbmcg bGludXgtaW50ZWdyaXR5IGFzIHRoZXJlIGFyZSBzb21lIHN5bmVyZ2llcyB3aXRoIElNQV9LRVhF QyAoaW4gY2FzZSB3ZQo+ID4gZ2V0IEtITyB0byB3b3JrKS4KPiA+Cj4gPiBGaXN0IG9mIGFsbCBJ IGJlbGlldmUgdGhhdCBoYXZpbmcgYSBnZW5lcmljIGZyYW1ld29yayB0byBwYXNzIGluZm9ybWF0 aW9uIGZyb20KPiA+IG9uZSBrZXJuZWwgdG8gdGhlIG90aGVyIGFjcm9zcyBrZXhlYyB3b3VsZCBi ZSBhIGdvb2QgdGhpbmcuIEJ1dCBJJ20gYWZyYWlkIHRoYXQgIAo+IAo+IAo+IFRoYW5rcywgSSdt IGhhcHB5IHRvIGhlYXIgdGhhdCB5b3UgYWdyZWUgd2l0aCB0aGUgYmFzaWMgbW90aXZhdGlvbiA6 KS4gCj4gVGhlcmUgYXJlIGZ1bmRhbWVudGFsbHkgMiBwcm9ibGVtcyB3aXRoIHBhc3NpbmcgZGF0 YToKPiAKPiAgwqAgKiBQYXNzaW5nIHN0cnVjdHVyZWQgZGF0YSBpbiBhIGNyb3NzLWFyY2hpdGVj dHVyZSB3YXkKPiAgwqAgKiBQYXNzaW5nIG1lbW9yeQo+IAo+IEtITyB0YWNrbGVzIGJvdGguIEl0 IHByb3Bvc2VzIGEgY29tbW9uIEZEVCBiYXNlZCBmb3JtYXQgdGhhdCBhbGxvd3MgdXMgCj4gdG8g cGFzcyBwZXItc3Vic3lzdGVtIHByb3BlcnRpZXMuIFRoYXQgd2F5LCBhIHN1YnN5c3RlbSBkb2Vz IG5vdCBuZWVkIHRvIAo+IGtub3cgd2hldGhlciBpdCdzIHJ1bm5pbmcgb24gQVJNLCB4ODYsIFJJ U0MtViBvciBzMzkweC4gSXQganVzdCBnYWlucyAKPiBhd2FyZW5lc3MgZm9yIEtITyBhbmQgY2Fu IHBhc3MgZGF0YS4KPiAKPiBPbiB0b3Agb2YgdGhhdCwgaXQgcHJvcG9zZXMgYSBzdGFuZGFyZGl6 ZWQgIm1lbSIgcHJvcGVydHkgKGFuZCBzb21lIAo+IG1hZ2ljIGFyb3VuZCB0aGF0KSB3aGljaCBh bGxvd3Mgc3Vic3lzdGVtcyB0byBwYXNzIG1lbW9yeS4KPiAKPiAKPiA+IHlvdSBhcmUgaWdub3Jp bmcgc29tZSBmdW5kYW1lbnRhbCBwcm9ibGVtcyB3aGljaCBtYWtlcyBpdCBleHRyZW1lbHkgaGFy ZCwgaWYKPiA+IG5vdCBpbXBvc3NpYmxlLCB0byByZWxpYWJseSB0cmFuc2ZlciB0aGUga2VybmVs J3Mgc3RhdGUgZnJvbSBvbmUga2VybmVsIHRvIHRoZQo+ID4gb3RoZXIuCj4gPgo+ID4gT25lIHRo aW5nIEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyBob3cgcmV1c2luZyB0aGUgc2NyYXRjaCBhcmVhIGlz IHdvcmtpbmcuIFN1cmUKPiA+IHlvdSBwYXNzIGl0J3MgbG9jYXRpb24gdmlhIHRoZSBkdC9ib290 X3BhcmFtcyBidXQgSSBkb24ndCBzZWUgYW55IGNvZGUgdGhhdAo+ID4gbWFrZXMgaXQgYSBDTUEg cmVnaW9uLiBTbyBJSVVDIHRoZSBzY3JhdGNoIGFyZWEgd29uJ3QgYmUgYXZhaWxhYmxlIGZvciB0 aGUgMm5kCj4gPiBrZXJuZWwuIFdoaWNoIGlzIHByb2JhYmx5IGZvciB0aGUgYmV0dGVyIGFzIElJ VUMgdGhlIDJuZCBrZXJuZWwgZ2V0cyBsb2FkZWQgYW5kCj4gPiBydW5zIGluc2lkZSB0aGF0IGFy ZWEgYW5kIEkgZG9uJ3QgYmVsaWV2ZSB0aGUgQ01BIGRlc2lnbiBldmVyIGNvbnNpZGVyZWQgdGhh dAo+ID4gdGhlIGtlcm5lbCBpbWFnZSBjb3VsZCBiZSBpbmNsdWRlZCBpbiBhIENNQSBhcmVhLiAg Cj4gCj4gCj4gVGhhdCBvbmUgdG9vayBtZSBhIGxvdCB0byBmaWd1cmUgb3V0IHNlbnNpYmx5ICh3 aXRoIHJlY3Vyc2lvbiBhbGwgdGhlIAo+IHdheSBkb3duKSB3aGlsZSBidWlsZGluZyBLSE8gOiku IEkgaG9wZSBJIGRldGFpbGVkIGl0IHNlbnNpYmx5IGluIHRoZSAKPiBkb2N1bWVudGF0aW9uIC0g cGxlYXNlIGxldCBtZSBrbm93IGhvdyB0byBpbXByb3ZlIGl0IGluIGNhc2UgaXQncyAKPiB1bmNs ZWFyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjQwMTE3MTQ0NzA0LjYwMi04LWdy YWZAYW1hem9uLmNvbS8KPiAKPiBMZXQgbWUgZXhwbGFpbiBpbmxpbmUgdXNpbmcgZGlmZmVyZW50 IHdvcmRzIGFzIHdlbGwgd2hhdCBoYXBwZW5zOgo+IAo+IFRoZSBmaXJzdCAoYW5kIG9ubHkgdGhl IGZpcnN0KSBrZXJuZWwgdGhhdCBib290cyBhbGxvY2F0ZXMgYSBDTUEgcmVnaW9uIAo+IGFzICJz Y3JhdGNoIHJlZ2lvbiIuIEl0IGxvYWRzIHRoZSBuZXcga2VybmVsIGludG8gdGhhdCByZWdpb24u IEl0IHBhc3NlcyAKPiB0aGF0IHJlZ2lvbiBhcyAic2NyYXRjaCByZWdpb24iIHRvIHRoZSBuZXh0 IGtlcm5lbC4gVGhlIG5leHQga2VybmVsIG5vdyAKPiB0YWtlcyBpdCBhbmQgbWFya3MgZXZlcnkg cGFnZSBibG9jayB0aGF0IHRoZSBzY3JhdGNoIHJlZ2lvbiBzcGFucyBhcyBDTUE6Cj4gCj4gaHR0 cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDI0MDExNzE0NDcwNC42MDItMy1ncmFmQGFtYXpv bi5jb20vCj4gCj4gVGhlIENNQSBoaW50IGRvZXNuJ3QgbWVhbiB3ZSBjcmVhdGUgYW4gYWN0dWFs IENNQSByZWdpb24uIEl0IG1vc3RseSAKPiBtZWFucyB0aGF0IHRoZSBrZXJuZWwgd29uJ3QgdXNl IHRoaXMgbWVtb3J5IGZvciBhbnkga2VybmVsIGFsbG9jYXRpb25zLiAKPiBLZXJuZWwgYWxsb2Nh dGlvbnMgdXAgdG8gdGhpcyBwb2ludCBhcmUgYWxsb2NhdGlvbnMgd2UgZG9uJ3QgbmVlZCB0byAK PiBwYXNzIG9uIHdpdGggS0hPIGFnYWluLiBLZXJuZWwgYWxsb2NhdGlvbnMgcGFzdCB0aGF0IHBv aW50IG1heSBiZSAKPiBhbGxvY2F0aW9ucyB0aGF0IHdlIHdhbnQgdG8gcGFzcywgc28gd2UganVz dCBuZXZlciBwbGFjZSB0aGVtIGludG8gdGhlIAo+ICJzY3JhdGNoIHJlZ2lvbiIgYWdhaW4uCj4g Cj4gQW5kIGJlY2F1c2Ugd2Ugbm93IGFscmVhZHkgaGF2ZSBhIHNjcmF0Y2ggcmVnaW9uIGZyb20g dGhlIHByZXZpb3VzIAo+IGtlcm5lbCwgd2Uga2VlcCByZXVzaW5nIHRoYXQgZm9yZXZlciB3aXRo IGFueSBuZXcgS0hPIGtleGVjLgoKVGhhbmtzIGZvciB0aGUgZXhwbGFuYXRpb24uIEkndmUgbWlz c2VkIHRoZSBtZW1ibG9ja19tYXJrX3NjcmF0Y2ggaW4Ka2hvX3BvcHVsYXRlLiBUaGUgY29kZSBt YWtlcyBtdWNoIG1vcmUgc2Vuc2Ugbm93IDotKQoKSGF2aW5nIHRoYXQgc2FpZCwgZm9yIGNvbXBs ZXggc2VyaWVzIGxpa2UgdGhpcyBvbmUgSSBsaWtlIHRvIGRvIHRoZQpyZXZpZXcgb24gYSBicmFu Y2ggaW4gbXkgbG9jYWwgZ2l0IGFzIHRoYXQgdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGF0Cihv ciBhdCBsZWFzdCBtYWtlIHRoZW0gbGVzcyBsaWtlbHkpLiBCdXQgeW91ciBwYXRjaGVzIGRpZG4n dCBhcHBseS4gQ2FuCnlvdSB0ZWxsIG1lIHdoYXQgeW91ciBiYXNlIGlzIG9yIG1ha2UgeW91ciBn aXQgYnJhbmNoIGF2YWlsYWJsZS4gVGhhdAp3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwgdG8gbWUuIFRo YW5rcyEKCj4gPiBTdGF5aW5nIGF0IHJldXNpbmcgdGhlIHNjcmF0Y2ggYXJlYS4gT25lIHRoaW5n IHRoYXQgaXMgYnJva2VuIGZvciBzdXJlIGlzIHRoYXQKPiA+IHlvdSByZXVzZSB0aGUgc2NyYXRj aCBhcmVhIHdpdGhvdXQgZXZlciBjaGVja2luZyB0aGUga2hvX3NjcmF0Y2ggcGFyYW1ldGVyIG9m Cj4gPiB0aGUgMm5kIGtlcm5lbCdzIGNvbW1hbmQgbGluZS4gUmVtZW1iZXIsIHdpdGgga2V4ZWMg eW91IGFyZSBkZWFsaW5nIHdpdGggdHdvCj4gPiBkaWZmZXJlbnQga2VybmVscyB3aXRoIHR3byBk aWZmZXJlbnQgY29tbWFuZCBsaW5lcy4gTWVhbmluZyB5b3UgY2FuIG9ubHkgcmV1c2UKPiA+IHRo ZSBzY3JhdGNoIGFyZWEgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGluIHRoZSAybmQga2VybmVsIGlz IGlkZW50aWNhbCB0byB0aGUKPiA+IG9uZSBvZiB0aGUgMXN0IGtlcm5lbC4gSW4gYWxsIG90aGVy IGNhc2VzIHlvdSBuZWVkIHRvIGFkanVzdCB0aGUgc2NyYXRjaCBhcmVhJ3MKPiA+IHNpemUgb3Ig cmVzZXJ2ZSBhIG5ldyBvbmUuICAKPiAKPiAKPiBIbS4gU28geW91J3JlIHNheWluZyBhIHVzZXIg bWF5IHdhbnQgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBzY3JhdGNoIAo+IGFyZWEgd2l0aCBh IEtITyBrZXhlYy4gVGhhdCdzIGluc2FuZWx5IHJpc2t5IGJlY2F1c2UgeW91IChhcyByaWdodGZ1 bGx5IAo+IHBvaW50ZWQgb3V0IGJlbG93KSBtYXkgaGF2ZSBzaWduaWZpY2FudCBmcmFnbWVudGF0 aW9uIGF0IHRoYXQgcG9pbnQuIEFuZCAKPiB3ZSB3aWxsIG9ubHkga25vdyB3aGVuIHdlJ3JlIGlu IHRoZSBuZXcga2VybmVsIHNvIGl0J3MgdG9vIGxhdGUgdG8gCj4gYWJvcnQuIElNSE8gaXQncyBi ZXR0ZXIgdG8ganVzdCBkZWNsYXJlIHRoZSBzY3JhdGNoIHJlZ2lvbiBhcyBpbW11dGFibGUgCj4g ZHVyaW5nIEtITyB0byBhdm9pZCB0aGF0IHBpdGZhbGwuCgpZZXMsIGEgdXNlciBjYW4gc2V0IGFu eSBjb21tYW5kIGxpbmUgd2l0aCBrZXhlYy4gTXkgZXhwZWN0YXRpb24gYXMgYQp1c2VyIGlzIHRo YXQgdGhlIGtlcm5lbCByZXNwZWN0cyB3aGF0ZXZlciBJIHNldCBvbiB0aGUgY29tbWFuZCBsaW5l IGFuZApkb2Vzbid0IHRoaW5rIGl0IGtub3dzIGJldHRlciBhbmQgc2ltcGx5IGlnbm9yZXMgd2hh dCBJIHRlbGwgaXQgdG8gZG8uClNvIGV2ZW4gd2hlbiB5b3Ugc2V0IHRoZSBzY3JhdGNoIGFyZWEg aW1tdXRhYmxlIGR1cmluZyBib290IHlvdSBoYXZlIHRvCm1ha2Ugc3VyZSB0aGF0IGluIHRoZSBl bmQga2VybmVsIHJlc3BlY3RzIHdoYXQgdGhlIHVzZXIgaGFzIHNldCBvbiB0aGUKMm5kIGtlcm5l bCdzIGNvbW1hbmQgbGluZS4KCj4gPiBUaGlzIGRpcmVjdGx5IGxlYWRzIHRvIHRoZSBuZXh0IHBy b2JsZW0uIEluIGtob19yZXNlcnZlX3ByZXZpb3VzX21lbSB5b3UgYXJlCj4gPiByZXVzaW5nIHRo ZSBkaWZmZXJlbnQgbWVtb3J5IHJlZ2lvbnMgd2hlcmV2ZXIgdGhlIDFzdCBrZXJuZWwgYWxsb2Nh dGVkIHRoZW0uCj4gPiBCdXQgdGhhdCBhbHNvIG1lYW5zIHlvdSBhcmUgaGFuZGluZyBvdmVyIHRo ZSAxc3Qga2VybmVsJ3MgbWVtb3J5Cj4gPiBmcmFnbWVudGF0aW9uIHRvIHRoZSAybmQga2VybmVs IGFuZCB5b3UgZG8gdGhhdCBleHRyZW1lbHkgZWFybHkgZHVyaW5nIGJvb3QuCj4gPiBXaGljaCBt ZWFucyB0aGF0IHVzZXJzIHdobyBuZWVkIHRvIGFsbG9jYXRlIGxhcmdlIGNvbnRpbnVvdXMgcGh5 c2ljYWwgbWVtb3J5LAo+ID4gbGlrZSB0aGUgc2NyYXRjaCBhcmVhIG9yIHRoZSBjcmFzaGtlcm5l bCBtZW1vcnksIHdpbGwgaGF2ZSBpbmNyZWFzaW5nIGNoYW5jZSB0bwo+ID4gbm90IGZpbmQgYSBz dWl0YWJsZSBhcmVhLiBXaGljaCBJTUhPIGlzIHVuYWNjZXB0YWJsZS4gIAo+IAo+IAo+IENvcnJl Y3QgOikuIEl0IGJhc2ljYWxseSBtZWFucyB5b3Ugd2FudCB0byBwYXNzIGxhcmdlIGFsbG9jYXRp b25zIGZyb20gCj4gdGhlIDFzdCBrZXJuZWwgdGhhdCB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBvbiB0 byB0aGUgbmV4dC4gU28gaWYgdGhlIDFzdCAKPiBrZXJuZWwgYWxsb2NhdGVkIGEgbGFyZ2UgY3Jh c2ggYXJlYSwgaXQncyBzYWZlc3QgdG8gcGFzcyB0aGF0IGFsbG9jYXRpb24gCj4gdXNpbmcgS0hP IHRvIGVuc3VyZSB0aGUgbmV4dCBrZXJuZWwgYWxzbyBoYXMgdGhlIHJlZ2lvbiBmdWxseSByZXNl cnZlZC4gCj4gT3RoZXJ3aXNlIHRoZSBuZXh0IGtlcm5lbCBtYXkgYWNjaWRlbnRhbGx5IHBsYWNl IGRhdGEgaW50byB0aGUgCj4gcHJldmlvdXNseSByZXNlcnZlZCBjcmFzaCByZWdpb24gKHdoaWNo IHdvdWxkIGJlIGNvbnRpZ3VvdXNseSBmcmVlIGF0IAo+IGVhcmx5IGluaXQgb2YgdGhlIDJuZCBr ZXJuZWwpIGFuZCBmcmFnbWVudCBpdCBhZ2Fpbi4KCkkgZG9uJ3QgdGhpbmsgdGhhdCB0aGlzIGlz IGFuIG9wdGlvbi4gRm9yIG9uZSB5b3VyIHN1Z2dlc3Rpb24gbWVhbnMgdGhhdApldmVyeSAibGFy Z2UgYWxsb2NhdGlvbiIgKHdoYXRldmVyIHRoYXQgbWVhbnMpIG5lZWRzIHRvIGJlIHRyYWNrZWQK bWFudWFsbHkgZm9yIGl0IHRvIHdvcmsgdG9nZXRoZXIgd2l0aCBLSE8uIEluIGFkZGl0aW9uIHRo ZXJlIGlzIHN0aWxsCnRoZSBwcm9ibGVtIHRoYXQgdGhlIDJuZCBrZXJuZWwgbWF5IG5lZWQgYSBs YXJnZXIgYWxsb2NhdGlvbiB0aGFuIHRoZQoxc3Qgb25lLiBCZSBpdCBiZWNhdXNlIGl0J3MgYSBj b21tYW5kIGxpbmUgcGFyYW1ldGVyLCBlLmcuIGtob19zY3JhdGNoCm9yIGNyYXNoa2VybmVsLCBv ciBqdXN0IGEgbmV3IGZlYXR1cmUgdGhhdCByZXF1aXJlcyBhZGRpdGlvbmFsIG1lbW9yeQp0aGUg Mm5kIGtlcm5lbCBoYXMuIElNTyBpdCdzIGluZXZpdGFibGUgdGhhdCBLSE8gZmluZHMgYSB3YXkg dG8KcmVtb3ZlL3JlZHVjZSBtZW1vcnkgZnJhZ21lbnRhdGlvbi4KCj4gPiBGaW5hbGx5LCBhbmQg dGhhdCdzIHRoZSBiaWcgZWxlcGhhbnQgaW4gdGhlIHJvb20sIGlzIHlvdXIgbGF4IGhhbmRsaW5n IG9mIHRoZQo+ID4gdW5zdGFibGUga2VybmVsIGludGVybmFsIEFCSS4gUmVtZW1iZXIsIHlvdSBh cmUgZGVhbGluZyB3aXRoIHR3byBkaWZmZXJlbnQKPiA+IGtlcm5lbHMsIHRoYXQgYWxzbyBtZWFu cyB0d28gZGlmZmVyZW50IHNvdXJjZSBsZXZlbHMgYW5kIHR3byBkaWZmZXJlbnQgY29uZmlncy4K PiA+IFNvIG9ubHkgYmVjYXVzZSBib3RoIHRoZSAxc3QgYW5kIDJuZCBrZXJuZWwgaGF2ZSBhIGUu Zy4gc3RydWN0IGJ1ZmZlcl9wYWdlCj4gPiBkb2Vzbid0IG1lYW5zIHRoYXQgdGhleSBoYXZlIHRo ZSBzYW1lIHN0cnVjdCBidWZmZXJfcGFnZS4gQnV0IHRoYXQncyB3aGF0IHlvdXIKPiA+IGNvZGUg aW1wbGljaXRseSBhc3N1bWVzLiBGb3IgS0hPIGV2ZXIgdG8gbWFrZSBpdCB1cHN0cmVhbSB5b3Ug bmVlZCB0byBtYWtlIHN1cmUKPiA+IHRoYXQgYm90aCBrZXJuZWxzIGFyZSAic3BlYWtpbmcgdGhl IHNhbWUgbGFuZ3VhZ2UiLiAgCj4gCj4gCj4gV293LCBJIGhvcGUgaXQgZGlkbid0IGNvbWUgYWNy b3NzIGFzIHRoYXQhIFRoZSB3aG9sZSBwb2ludCBvZiB1c2luZyBGRFQgCj4gYW5kIGNvbXBhdGli bGUgc3RyaW5ncyBpbiBLSE8gaXMgdG8gc29sdmUgZXhhY3RseSB0aGF0IHByb2JsZW0uIEFueSB0 aW1lIAo+IGEgcGFzc2VkIG92ZXIgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcyBpbmNvbXBhdGlibHks IHlvdSB3b3VsZCBuZWVkIHRvIAo+IG1vZGlmeSB0aGUgY29tcGF0aWJsZSBzdHJpbmcgb2YgdGhl IHN1YnN5c3RlbSB0aGF0IG93bnMgdGhlIG5vdyAKPiBpbmNvbXBhdGlibGUgZGF0YS4KPiAKPiBT byBpbiB0aGUgZXhhbXBsZSBvZiBzdHJ1Y3QgYnVmZmVyX3BhZ2UsIGl0IG1lYW5zIHRoYXQgaWYg YW55b25lIGNoYW5nZXMgCj4gdGhlIGZldyBiaXRzIHdlIGNhcmUgYWJvdXQgaW4gc3RydWN0IGJ1 ZmZlcl9wYWdlLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IAo+IHRoZSBuZXcga2VybmVsIGVtaXRz ICJmdHJhY2UsY3B1LXYyIiBjb21wYXRpYmxlIHN0cmluZ3MuIFdlIGNhbiBhdCB0aGF0IAo+IHBv aW50IGNob29zZSB3aGV0aGVyIHdlIHdhbnQgdG8gaW1wbGVtZW50IGNvbXBhdCBoYW5kbGluZyBm b3IgCj4gImZ0cmFjZSxjcHUtdjEiIHN0eWxlIHN0cnVjdCBidWZmZXJfcGFnZXMgb3Igb25seSBz dXBwb3J0IHNhbWUgdmVyc2lvbiAKPiBpbmdlc3Rpb24uCgpXZWxsLCBpdCBjYW1lIGFjcm9zcyBs aWtlIHRoYXQgYmVjYXVzZSB0aGVyZSB3YXMgYWJzb2x1dGVseSBubwpleHBsYW5hdGlvbiBvbiB3 aGVuIHRob3NlIHZlcnNpb25zIG5lZWQgdG8gYmUgYnVtcGVkIHVwIHNvIGZhci4KCj4gVGhlIG9u ZSB0aGluZyB0aGF0IHdlIGNvdWxkIGltcHJvdmUgb24gaGVyZSB0b2RheSBJTUhPIGlzIHRvIGhh dmUgCj4gY29tcGlsZSB0aW1lIGVycm9ycyBpZiBhbnkgcGFydCBvZiBzdHJ1Y3QgYnVmZmVyX3Bh Z2UgY2hhbmdlcyAKPiBzZW1hbnRpY2FsbHk6IFNvIHdlJ2QgY3JlYXRlIGEgZmV3IGRlZmluZXMg Zm9yIHRoZSBiaXRzIHdlIHdhbnQgaW4gCj4gImZ0cmFjZSxjcHUtdjEiIGFzIHdlbGwgYXMgc2l6 ZSBvZiBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYW5kIHRoZW4gY29tcGFyZSAKPiB0aGVtIHRvIHdoYXQg dGhlIHN0cnVjdCBvZmZzZXRzIGFyZSBhdCBjb21waWxlIHRpbWUgdG8gZW5zdXJlIHRoZXkgc3Rh eSAKPiBpZGVudGljYWwuCgpIb3cgZG8geW91IGltYWdpbmUgdGhvc2UgbWFjcm9zIHRvIGxvb2sg bGlrZT8gSG93IGRvIHRoZXkgd29yayB3aXRoCnN0cnVjdHMgdGhhdCBjaGFuZ2UgdGhlaXIgbGF5 b3V0IGRlcGVuZGluZyBvbiB0aGUgY29uZmlnPwoKUGVyc29uYWxseSwgSSBoaWdobHkgZG91YnQg dGhhdCBhbnkgc3lzdGVtIHRoYXQgbWFuYWdlcyB0aGVzZSBkaWZmZXJlbnQKdmVyc2lvbnMgbWFu dWFsbHkgd2lsbCB3b3JrIHJlbGlhYmx5LiBJdCBtaWdodCBiZSBwb3NzaWJsZSBmb3IKc29tZXRo aW5nIGFzIHNpbXBsZSBhcyBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYnV0IG9uY2UgaXQgZ2V0cyBtb3Jl CmNvbXBsaWNhdGVkLCBlLmcuIGJ5IGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGNvbmZpZyBvciBz aW1wbHkgaGF2aW5nCm1vcmUgZGVwZW5kZW5jaWVzIHRvIGNvbW1vbiBkYXRhIHN0cnVjdHVyZXMs IGl0IHdpbGwgYmUgYSBjb25zdGFudApzb3VyY2Ugb2YgcGFpbi4KSnVzdCBhc3N1bWUsIGFsdGhv dWdoIGV4dHJlbWVseSB1bmxpa2VseSwgdGhhdCBzdHJ1Y3QgbGlzdF9oZWFkIGlzCmNoYW5nZWQu IE1vc3QgbGlrZWx5IHRoZSBwZXJzb24gd2hvIG1ha2VzIHRoZSBjaGFuZ2Ugd29uJ3QgYmUgZnJv bSB0aGUKZnRyYWNlIHRlYW0gYW5kIHRodXMgd29uJ3Qga25vdyB0aGF0IGhlL3NoZS9pdCBuZWVk cyB0byBidW1wIHRoZQp2ZXJzaW9uLiBFdmVuIHRoZSBjb21waWxlIHRpbWUgZXJyb3JzIHdpbGwg b25seSBoZWxwIGlmCkNPTkZJR19GVFJBQ0VfS0hPIGlzIGVuYWJsZWQgd2hpY2ggbW9zdCBsaWtl IHdvbid0IGJlIHRoZSBjYXNlLgpVbHRpbWF0ZWx5IHRoaXMgbWVhbnMgdGhhdCBLSE8gd2lsbCBi cmVhayBzaWxlbnRseSB1bnRpbCBzb21lb25lIHRyaWVzCnRvIGtleGVjIGluIHRoZSBuZXcga2Vy bmVsIHdpdGggS0hPIGVuYWJsZWQuIEJ1dCBldmVuIHRoZW4gdGhlcmUgd2lsbApvbmx5IGJlIGEg Y3J5cHRpYyBlcnJvciBtZXNzYWdlIChpZiBhbnkpIGFzIHlvdSBoYXZlIGJhc2ljYWxseQppbnRy b2R1Y2VkIGEgbWVtb3J5IGNvcnJ1cHRpb24gdG8gdGhlIDJuZCBrZXJuZWwuIFRoZSBtb3JlIGNv bXBsZXggdGhlCnN0cnVjdHMgYmVjb21lIGFuZCB0aGUgZGVlcGVyIHRoZSBkZXBlbmRlbmN5IGxp c3QgZ29lcyB0aGUgbW9yZSBsaWtlbHkKaXQgYmVjb21lcyB0aGF0IHN1Y2ggYSBicmVha2luZyBj aGFuZ2UgaXMgbWFkZS4KClRoZSB3YXkgSSBzZWUgaXQgdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCBn ZW5lcmF0aW5nIHRoZSB2ZXJzaW9uIGJhc2VkIG9uCnRoZSBhY3R1YWwgbWVtb3J5IGxheW91dCBm b3IgdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkLgoKPiBQbGVhc2UgbGV0IG1lIGtub3cgaG93IEkgY2Fu IGNsYXJpZnkgdGhhdCBtb3JlIGluIHRoZSBkb2N1bWVudGF0aW9uLiBJdCAKPiByZWFsbHkgaXMg dGhlIGFic29sdXRlIGNvcmUgb2YgS0hPLgo+IAo+IAo+ID4gUGVyc29uYWxseSBJIHNlZSB0d28g cG9zc2libGUgc29sdXRpb25zOgo+ID4KPiA+IDEpIFlvdSBpbnRyb2R1Y2UgYSBzdGFibGUgaW50 ZXJtZWRpYXRlIGZvcm1hdCBmb3IgZXZlcnkgc3Vic3lzdGVtIHNpbWlsYXIgdG8KPiA+IHdoYXQg SU1BX0tFWEVDIGRvZXMuIFRoaXMgc2hvdWxkIHdvcmsgZm9yIHNpbXBsZSB0eXBlcyBsaWtlIHN0 cnVjdCBidWZmZXJfcGFnZQo+ID4gYnV0IGZvciBjb21wbGV4IG9uZXMgbGlrZSBzdHJ1Y3QgdmZp b19kZXZpY2UgdGhhdCdzIGJhc2ljYWxseSBpbXBvc3NpYmxlLiAgCj4gCj4gCj4gSSBkb24ndCBz ZWUgd2h5LiBUaGUgb25seSByZWFzb24gS0hPIHBhc3NlcyBzdHJ1Y3QgYnVmZmVyX3BhZ2UgYXMg bWVtb3J5IAo+IGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdHJhY2Vz IGV2ZW4gYWZ0ZXIgS0hPIAo+IHNlcmlhbGl6YXRpb24gaXMgZG9uZS4gRm9yIHZmaW9fZGV2aWNl LCBJIHRoaW5rIGl0J3MgcGVyZmVjdGx5IAo+IHJlYXNvbmFibGUgdG8gc2VyaWFsaXplIGFueSBk YXRhIHdlIG5lZWQgdG8gcHJlc2VydmUgZGlyZWN0bHkgaW50byBGRFQgCj4gcHJvcGVydGllcy4K PiAKPiAKPiAKPiA+IDIpIFlvdSBhbHNvIGhhbmQgb3ZlciB0aGUgQUJJIHZlcnNpb24gZm9yIGV2 ZXJ5IGdpdmVuIHR5cGUgKGJhc2ljYWxseSBqdXN0IGEKPiA+IGhhc2ggb3ZlciBhbGwgZmllbGRz IGluY2x1ZGluZyBhbGwgdGhlIGRlcGVuZGVuY2llcykuIFNvIHRoZSAybmQga2VybmVsIGNhbgo+ ID4gdmVyaWZ5IHRoYXQgdGhlIGRhdGEgaGFuZGVkIG92ZXIgaXMgaW4gYSBmb3JtYXQgaXQgY2Fu IGhhbmRsZSBhbmQgaWYgbm90IGJhaWwKPiA+IG91dCB3aXRoIGEgZGVzY3JpcHRpdmUgZXJyb3Ig bWVzc2FnZSByYXRoZXIgdGhhbiByZWFkaW5nIGdhcmJhZ2UuIFBsdXMgc2lkZSBpcwo+ID4gdGhh dCBvbmNlIHN1Y2ggYSBzeXN0ZW0gaXMgaW4gcGxhY2UgeW91IGNhbiByZXVzZSBpdCB0byBhdXRv bWF0aWNhbGx5IHJlc29sdmUKPiA+IGFsbCBkZXBlbmRlbmNpZXMgc28geW91IG5vIGxvbmdlciBu ZWVkIHRvIG1hbnVhbGx5IHN0b3JlIHRoZSBidWZmZXJfcGFnZSBhbmQKPiA+IGl0cyBidWZmZXJf ZGF0YV9wYWdlIHNlcGFyYXRlbHkuCj4gPiBEb3duIHNpZGUgaXMgdGhhdCB0cmF2ZXJzaW5nIHRo ZSBkZWJ1Z2luZm8gKGluY2x1ZGluZyB0aGUgb25lcyBmcm9tIG1vZHVsZXMpIGlzCj4gPiBub3Qg YSBzaW1wbGUgdGFzayBhbmQgSSBleHBlY3QgdGhhdCBzdWNoIGEgc3lzdGVtIHdpbGwgYmUgd2F5 IG1vcmUgY29tcGxleCB0aGFuCj4gPiB0aGUgcmVzdCBvZiBLSE8uIEluIGFkZGl0aW9uIHRoZXJl IGFyZSBzb21lIGNhc2VzIHRoYXQgdGhlIHZlcnNpb25pbmcgd29uJ3QgYmUKPiA+IGFibGUgdG8g Y2FwdHVyZS4gRm9yIGV4YW1wbGUgaWYgYSB0eXBlIGNvbnRhaW5zIGEgInZvaWQgKiItZmllbGQu IFRoZW4gYWx0aG91Z2gKPiA+IHRoZSBkZWZpbml0aW9uIG9mIHRoZSB0eXBlIGlzIGlkZW50aWNh bCBpbiBib3RoIGtlcm5lbHMgdGhlIGZpZWxkIGNhbiBiZSBjYXN0Cj4gPiB0byBkaWZmZXJlbnQg dHlwZXMgd2hlbiB1c2VkLiBBbiBvdGhlciBwcm9ibGVtIHdpbGwgYmUgZnVuY3Rpb24gcG9pbnRl cnMgd2hpY2gKPiA+IHlvdSBmaXJzdCBuZWVkIHRvIHJlc29sdmUgaW4gdGhlIDFzdCBrZXJuZWwg YW5kIHRoZW4gbWFwIHRvIHRoZSBpZGVudGljYWwKPiA+IGZ1bmN0aW9uIGluIHRoZSAybmQga2Vy bmVsLiBUaGlzIHdpbGwgYmVjb21lIHBhcnRpY3VsYXJseSAiZnVuIiB3aGVuIHRoZQo+ID4gZnVu Y3Rpb24gaXMgcGFydCBvZiBhIG1vZHVsZSB0aGF0IGlzbid0IGxvYWRlZCBhdCB0aGUgdGltZSB3 aGVuIHlvdSB0cnkgdG8KPiA+IHJlY3JlYXRlIHRoZSBrZXJuZWwncyBzdGF0ZS4gIAo+IAo+IAo+ IFRoZSB3aG9sZSBwb2ludCBvZiBLSE8gaXMgdG8gbGVhdmUgaXQgdG8gdGhlIHN1YnN5c3RlbSB3 aGljaCBwYXRoIHRoZXkgCj4gd2FudCB0byB0YWtlLiBUaGUgc3Vic3lzdGVtIGNhbiBlaXRoZXIg cGFzcyBiaW5hcnkgZGF0YSBhbmQgdmFsaWRhdGUgYXMgCj4gcGFydCBvZiBGRFQgcHJvcGVydGll cyAobGlrZSBjb21wYXRpYmxlIHN0cmluZ3MpLiBUaGF0IGRhdGEgY2FuIGJlIAo+IGlkZW50aWNh bCB0byB0b2RheSdzIGluLWtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgKHVzdWFsbHkgYSBiYWQgaWRl YSkgb3IgCj4gY2FuIGJlIGEgbmV3IGludGVybWVkaWF0ZSBkYXRhIGZvcm1hdC4gQnV0IHRoZSBz dWJzeXN0ZW0gY2FuIGFsc28gY2hvb3NlIAo+IHRvIGZ1bGx5IHNlcmlhbGl6ZSBpbnRvIEZEVCBw cm9wZXJ0aWVzIGFuZCBub3QgcGFzcyBhbnkgbWVtb3J5IGF0IGFsbCAKPiBmb3Igc3RhdGUgdGhh dCB3b3VsZCBiZSBpbiBzdHJ1Y3RzLiBPciBzb21ldGhpbmcgaW4gYmV0d2Vlbi4KClRoYXQncyB0 b3RhbGx5IGZpbmUuIE15IHBvaW50IGlzIHRoYXQgdGhlcmUgYXJlIHNpbXBseSB0b28gbWFueSB3 YXlzIHRvCmZ1Y2sgaXQgdXAgYW5kIGJyZWFrIHRoZSAybmQga2VybmVsLiBUaGF0J3Mgd2h5IEkg ZG9uJ3QgYmVsaWV2ZSB0aGF0IHdlCmNhbiByZWx5IG9uIHRoZSBzdWJzeXN0ZW1zIHRvICJkbyBp dCByaWdodCIgYW5kICJyZW1lbWJlciB0byBidW1wIHRoZQp2ZXJzaW9uIi4gSW4gb3RoZXIgd29y ZHMsIEtITyBuZWVkcyB0byBwcm92aWRlIGEgcmVsaWFibGUsIGF1dG9tYXRpYwptZWNoYW5pc20g d2l0aCB3aWNoIHRoZSAybmQga2VybmVsIGNhbiBkZWNpZGUgaWYgaXQgY2FuIGhhbmRsZSB0aGUK cGFzc2VkIGRhdGEgb3Igbm90LgoKPiA+IFNvIHRvIHN1bW1hcml6ZSwgd2hpbGUgaXQgd291bGQg YmUgbmljZSB0byBoYXZlIGEgZ2VuZXJpYyBmcmFtZXdvcmsgbGlrZSBLSE8gdG8KPiA+IHBhc3Mg ZGF0YSBmcm9tIG9uZSBrZXJuZWwgdG8gdGhlIG90aGVyIHZpYSBrZXhlYyB0aGVyZSBhcmUgZ29v ZCByZWFzb25zIHdoeSBpdAo+ID4gZG9lc24ndCBleGlzdCwgeWV0LiAgCj4gCj4gCj4gSSBob3Bl IG15IGV4cGxhbmF0aW9ucyBhYm92ZSBjbGFyaWZ5IHRoaW5ncyBhIGJpdC4gTGV0IG1lIGtub3cg aWYgeW91J3JlIAo+IGF0IEZPU0RFTSwgaGFwcHkgdG8gdGFsayBhYm91dCB0aGUgaW50ZXJuYWxz IHRoZXJlIGFzIHdlbGwgOikKClNvcnJ5LCBJIGNvdWxkbid0IG1ha2UgaXQgdG8gRk9TREVNIGJ1 dCBJIHBsYW4gdG8gYmUgYXQgTFBDIGxhdGVyIHRoaXMKeWVhci4gSW4gZmFjdCBJIGhhZCB5b3Vy IHRhbGsgb24gbXkgbGlzdCBsYXN0IHllYXIuIFVuZm9ydHVuYXRlbHkgaXQgd2FzCnBhcmFsbGVs IHRvIHRoZSBrZXJuZWwgZGVidWdnZXIgbWMuLi4KClRoYW5rcwpQaGlsaXBwCgo+IEFsZXgKPiAK PiAKPiAKPiAKPiAKPiBBbWF6b24gRGV2ZWxvcG1lbnQgQ2VudGVyIEdlcm1hbnkgR21iSAo+IEty YXVzZW5zdHIuIDM4Cj4gMTAxMTcgQmVybGluCj4gR2VzY2hhZWZ0c2Z1ZWhydW5nOiBDaHJpc3Rp YW4gU2NobGFlZ2VyLCBKb25hdGhhbiBXZWlzcwo+IEVpbmdldHJhZ2VuIGFtIEFtdHNnZXJpY2h0 IENoYXJsb3R0ZW5idXJnIHVudGVyIEhSQiAxNDkxNzMgQgo+IFNpdHo6IEJlcmxpbgo+IFVzdC1J RDogREUgMjg5IDIzNyA4NzkKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGtleGVjIG1haWxpbmcgbGlzdAo+IGtleGVjQGxpc3RzLmluZnJh ZGVhZC5vcmcKPiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tl eGVjCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=