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.133.124]) by mail.toke.dk (Postfix) with ESMTPS id 13C419A860B for ; Thu, 6 Oct 2022 19:47:11 +0200 (CEST) Authentication-Results: mail.toke.dk; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=fj0ixdJQ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665078430; 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=B+y8wduK3QfMgdOHpN9KWre0ENB0HamAmdiK58oyOXc=; b=fj0ixdJQRNGPBThi4WTDQF2ych7+2vaqCNfsOKldxlM1JK2IRgcjCC1dKacuEcpa6oSqSI wjnBPPG+V8GM/8rW6SLltjSeX7ehXfWMrAKmrcUnmigDVm2l1mvejU/VBfbIYOpzMEav21 mp8bvjcGAb6vTwSZE4XJTKk8eFUkQI0= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-470-96bA1citNU6rMW2ZG6NZ3g-1; Thu, 06 Oct 2022 13:47:07 -0400 X-MC-Unique: 96bA1citNU6rMW2ZG6NZ3g-1 Received: by mail-ed1-f70.google.com with SMTP id q17-20020a056402519100b00459a2e5adbcso2126616edd.16 for ; Thu, 06 Oct 2022 10:47:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:content-language:references :to:subject:cc:user-agent:mime-version:date:message-id:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=B+y8wduK3QfMgdOHpN9KWre0ENB0HamAmdiK58oyOXc=; b=hZFB/kbCZ4qcG1yrBLkAP/WH/QpVSuOP6gGW2H14Qw+qXUZ1zKmfNMmSeUmsivN4VQ hLMFCIZTUpvvQjPXBO/HsZzdOHw+GfZZAezlDBgeTu4n+kgoC59z0Mw+Q2DpNvDuseWP nqHMqYDw/25pbUc40GZO6pc06ZUj0rusewAftCNhTRnzaAC5O7JtFVGihITId6UgELah S2+w2OvjHeml//zZFNutKYd34CuyxezyTMrpIh9clFR/iM3z7RhptyCPtfv8M8DocGMn 4WW6sxw+xGH9ryZeGPn/cltjC4bolc5XJjepMrzJMy3nwx//+bvP1wj9zGM1AsWcsIIR jZGg== X-Gm-Message-State: ACrzQf1eip8HnrWarkP2t7zlkeJRSIcwsYcq25iL6ETVrtHmThfU2FXZ clNhGxqKpX4N7B9DJoFVrnmCutdnhb94+ThS92Z/fqljyWksWXlnDkA+exeVlER59QKslKIvjMc Lh4POqfUhJHWllrk0hObZ X-Received: by 2002:a17:906:794b:b0:787:bb35:84cd with SMTP id l11-20020a170906794b00b00787bb3584cdmr846953ejo.428.1665078425999; Thu, 06 Oct 2022 10:47:05 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6lg0yzavx+mGgIRcjGqtXmVn5OTg1yYRu7aB9cVtFvCh+rxiWW6NISbmvxPn0HjI4X1N5jXw== X-Received: by 2002:a17:906:794b:b0:787:bb35:84cd with SMTP id l11-20020a170906794b00b00787bb3584cdmr846906ejo.428.1665078425568; Thu, 06 Oct 2022 10:47:05 -0700 (PDT) Received: from [192.168.41.81] (83-90-141-187-cable.dk.customer.tdc.net. [83.90.141.187]) by smtp.gmail.com with ESMTPSA id y18-20020a056402359200b00458e40e31c8sm6373631edc.15.2022.10.06.10.47.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 06 Oct 2022 10:47:04 -0700 (PDT) From: Jesper Dangaard Brouer X-Google-Original-From: Jesper Dangaard Brouer Message-ID: Date: Thu, 6 Oct 2022 19:47:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 To: sdf@google.com, Jesper Dangaard Brouer References: <166256538687.1434226.15760041133601409770.stgit@firesoul> <35fcfb25-583a-e923-6eee-e8bbcc19db17@redhat.com> <982b9125-f849-5e1c-0082-7239b8c8eebf@redhat.com> In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: QTUZSI57ONOMAZLODNHCYM3REAKRC4K5 X-Message-ID-Hash: QTUZSI57ONOMAZLODNHCYM3REAKRC4K5 X-MailFrom: jbrouer@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: brouer@redhat.com, bpf@vger.kernel.org, netdev@vger.kernel.org, xdp-hints@xdp-project.net, larysa.zaremba@intel.com, memxor@gmail.com, Lorenzo Bianconi , mtahhan@redhat.com, Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , dave@dtucker.co.uk, Magnus Karlsson , bjorn@kernel.org X-Mailman-Version: 3.3.5 Precedence: list Subject: [xdp-hints] Re: [PATCH RFCv2 bpf-next 00/18] XDP-hints: XDP gaining access to HW offload hints via BTF List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDA1LzEwLzIwMjIgMjAuNDMsIHNkZkBnb29nbGUuY29tIHdyb3RlOg0KPiBPbiAxMC8w NSwgSmVzcGVyIERhbmdhYXJkIEJyb3VlciB3cm90ZToNCj4gDQo+PiBPbiAwNC8xMC8yMDIyIDIw LjI2LCBTdGFuaXNsYXYgRm9taWNoZXYgd3JvdGU6DQo+PiA+IE9uIFR1ZSwgT2N0IDQsIDIwMjIg YXQgMjoyOSBBTSBKZXNwZXIgRGFuZ2FhcmQgQnJvdWVyDQo+PiA+IDxqYnJvdWVyQHJlZGhhdC5j b20+IHdyb3RlOg0KPj4gPiA+DQo+PiA+ID4NCj4+ID4gPiBPbiAwNC8xMC8yMDIyIDAxLjU1LCBz ZGZAZ29vZ2xlLmNvbSB3cm90ZToNCj4+ID4gPiA+IE9uIDA5LzA3LCBKZXNwZXIgRGFuZ2FhcmQg QnJvdWVyIHdyb3RlOg0KPj4gPiA+ID4gPiBUaGlzIHBhdGNoc2V0IGV4cG9zZSB0aGUgdHJhZGl0 aW9uYWwgaGFyZHdhcmUgb2ZmbG9hZCBoaW50cyB0byBYRFAgYW5kDQo+PiA+ID4gPiA+IHJlbHkg b24gQlRGIHRvIGV4cG9zZSB0aGUgbGF5b3V0IHRvIHVzZXJzLg0KPj4gPiA+ID4NCj4+ID4gPiA+ ID4gTWFpbiBpZGVhIGlzIHRoYXQgdGhlIGtlcm5lbCBhbmQgTklDIGRyaXZlcnMgc2ltcGx5IGRl ZmluZXMgdGhlIHN0cnVjdA0KPj4gPiA+ID4gPiBsYXlvdXRzIHRoZXkgY2hvb3NlIHRvIHVzZSBm b3IgWERQLWhpbnRzLiBUaGVzZSBYRFAtaGludHMgc3RydWN0cyBnZXRzDQo+PiA+ID4gPiA+IG5h dHVyYWxseSBhbmQgYXV0b21hdGljYWxseSBkZXNjcmliZWQgdmlhIEJURiBhbmQgaW1wbGljaXRs eSBleHBvcnRlZCB0bw0KPj4gPiA+ID4gPiB1c2Vycy4gTklDIGRyaXZlcnMgcG9wdWxhdGUgYW5k IHJlY29yZHMgdGhlaXIgb3duIEJURiBJRCBhcyB0aGUgbGFzdA0KPj4gPiA+ID4gPiBtZW1iZXIg aW4gWERQIG1ldGFkYXRhIGFyZWEgKG1ha2luZyBpdCBlYXNpbHkgYWNjZXNzaWJsZSBieSBBRl9Y RFANCj4+ID4gPiA+ID4gdXNlcnNwYWNlIGF0IGEga25vd24gbmVnYXRpdmUgb2Zmc2V0IGZyb20g cGFja2V0IGRhdGEgc3RhcnQpLg0KPj4gPiA+ID4NCj4+ID4gPiA+ID4gTmFtaW5nIGNvbnZlbnRp b25zIGZvciB0aGUgc3RydWN0cyAoeGRwX2hpbnRzXyopIGlzIHVzZWQgc3VjaCB0aGF0DQo+PiA+ ID4gPiA+IHVzZXJzcGFjZSBjYW4gZmluZCBhbmQgZGVjb2RlIHRoZSBCVEYgbGF5b3V0IGFuZCBt YXRjaCBhZ2FpbnN0IHRoZQ0KPj4gPiA+ID4gPiBwcm92aWRlZCBCVEYgSURzLiBUaHVzLCBubyBu ZXcgVUFQSSBpbnRlcmZhY2VzIGFyZSBuZWVkZWQgZm9yICBleHBvcnRpbmcNCj4+ID4gPiA+ID4g d2hhdCBYRFAtaGludHMgYSBkcml2ZXIgc3VwcG9ydHMuDQo+PiA+ID4gPg0KPj4gPiA+ID4gPiBU aGUgcGF0Y2ggImk0MGU6IEFkZCB4ZHBfaGludHNfdW5pb24iIGludHJvZHVjZSB0aGUgaWRlYSBv ZiBjcmVhdGluZyBhDQo+PiA+ID4gPiA+IHVuaW9uIG5hbWVkICJ4ZHBfaGludHNfdW5pb24iIGlu IGV2ZXJ5IGRyaXZlciwgd2hpY2ggY29udGFpbnMgYWxsDQo+PiA+ID4gPiA+IHhkcF9oaW50c18q IHN0cnVjdCB0aGlzIGRyaXZlciBjYW4gc3VwcG9ydC4gVGhpcyBtYWtlcyBpdCBlYXNpZXIvcXVp Y2tlcg0KPj4gPiA+ID4gPiB0byBmaW5kIGFuZCBwYXJzZSB0aGUgcmVsZXZhbnQgQlRGIHR5cGVz LsKgIChTZWVraW5nIGlucHV0IGJlZm9yZSBmaXhpbmcNCj4+ID4gPiA+ID4gdXAgYWxsIGRyaXZl cnMgaW4gcGF0Y2hzZXQpLg0KPj4gPiA+ID4NClsuLi5dDQo+PiA+DQo+PiA+ID4gPiBiLiBFYWNo IGRldmljZSBkZWZpbmVzIG11Y2ggZGVuc2VyIDxkZXZpY2U+X3hkcF9yeF9oaW50cyBzdHJ1Y3Qg d2l0aCB0aGUNCj4+ID4gPiA+wqDCoMKgwqDCoCBtZXRhZGF0YSB0aGF0IGl0IHN1cHBvcnRzDQo+ PiA+ID4NCj4+ID4gPiBUaHVzLCB0aGUgTklDIGRldmljZSBpcyBsaW1pdGVkIHRvIHdoYXQgaXMg ZGVmaW5lZCBpbiBVQVBJIHN0cnVjdA0KPj4gPiA+IHhkcF9yeF9oaW50cy7CoCBBZ2FpbiB0aGlz IGxpbWl0cyBpbm5vdmF0aW9uLg0KPj4gPg0KPj4gPiBJIGd1ZXNzIHdoYXQgSSdtIG1pc3Npbmcg ZnJvbSB5b3VyIHNlcmllcyBpcyB0aGUgYnBmL3VzZXJzcGFjZSBzaWRlLg0KPj4gPiBEbyB5b3Ug aGF2ZSBhbiBleGFtcGxlIG9uIHRoZSBicGYgc2lkZSB0aGF0IHdpbGwgd29yayBmb3IsIHNheSwN Cj4+ID4geGRwX2hpbnRzX2l4Z2JlX3RpbWVzdGFtcD8NCg0KV2UgaGF2ZSBiZWVuIGNvbnN1bWlu ZyB0aGlzIGZyb20gQUZfWERQIGFuZCBkZWNvZGluZyBCVEYgaW4gdXNlcnNwYWNlDQphbmQgY2hl Y2tpbmcgQlRGIElEcyBpbiBvdXIgdXNlcnNwYWNlIGFwcHMuICBJIHdpbGwgdHJ5IHRvIGNvZGV1 cA0KY29uc3VtaW5nIHRoaXMgZnJvbSBYRFAgQlBGLXByb2dzIHRvIGdldCBhIGJldHRlciBmZWVs IGZvciB0aGF0Lg0KDQo+PiA+DQo+PiA+IFN1cHBvc2UsIHlvdSBwYXNzIHRoaXMgY3VzdG9tIGhp bnRzIGJ0Zl9pZCB2aWEgeGRwX21kIGFzIHByb3Bvc2VkLA0KPiANCj4+IEkganVzdCB3YW50IHRv IHJlaXRlcmF0ZSB3aHkgd2UgcGxhY2UgYnRmX2Z1bGxfaWQgYXQgdGhlICJlbmQgaW5saW5lIi4N Cj4+IFRoaXMgbWFrZXMgaXQgZWFzaWx5IGF2YWlsYWJsZSBmb3IgQUZfWERQIHRvIGNvbnN1bWUu wqAgUGx1cywgd2UgYWxyZWFkeQ0KPj4gaGF2ZSB0byB3cml0ZSBpbmZvIGludG8gdGhpcyBtZXRh ZGF0YSBjYWNoZS1saW5lIGFueXdheSwgdGh1cyBpdCdzDQo+PiBhbG1vc3QgZnJlZS7CoCBNb3Zp bmcgYnBmX2Z1bGxfaWQgaW50byB4ZHBfbWQsIHdpbGwgcmVxdWlyZSBleHBhbmRpbmcNCj4+IGJv dGggeGRwX2J1ZmYgYW5kIHhkcF9mcmFtZSAoKyBleHRyYSBzdG9yZSBmb3IgY29udmVydGluZw0K Pj4gYnVmZi10by1mcmFtZSkuIElmIEFGX1hEUCBuZWVkIHRoaXMgYnRmX2Z1bGxfaWQgdGhlIEJQ Ri1wcm9nIF9jb3VsZF8NCj4+IG1vdmUvY29weSBpdCBmcm9tIHhkcF9tZCB0byBtZXRhZGF0YSwg YnV0IHRoYXQgd2lsbCBqdXN0IHdhc3RlIGN5Y2xlcywNCj4+IHdoeSBub3QganVzdCBzdG9yZSBp dCBvbmNlIGluIGEga25vd24gbG9jYXRpb24uDQo+IA0KPj4gT25lIG9wdGlvbiwgZm9yIGNvbnZl bmllbmNlLCB3b3VsZCBiZSB0byBtYXAgeGRwX21kLT5icGZfZnVsbF9pZCB0byBsb2FkDQo+PiB0 aGUgYnRmX2Z1bGxfaWQgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEuwqAgQnV0IHRoYXQgd291bGQg ZXNzZW50aWFsbHkgYmUNCj4+IHN5bnRheC1zdWdhciBhbmQgYWRkcyBVQVBJLg0KPiANCj4+ID4g d2hhdCdzIHRoZSBhY3Rpb24gb24gdGhlIGJwZiBzaWRlIHRvIGNvbnN1bWUgdGhpcz8NCj4+ID4N Cj4+ID4gSWYgKGN0eF9oaW50c19idGZfaWQgPT0geGRwX2hpbnRzX2l4Z2JlX3RpbWVzdGFtcF9i dGZfaWQgLyogc3VwcG9zZWRseQ0KPj4gPiBwb3B1bGF0ZWQgYXQgcnVudGltZSBieSBsaWJicGY/ ICovKSB7DQo+IA0KPj4gU2VlIGUuZy4gYnBmX2NvcmVfdHlwZV9pZF9rZXJuZWwoc3RydWN0IHhk cF9oaW50c19peGdiZV90aW1lc3RhbXApDQo+PiBBRkFJSyBsaWJicGYgd2lsbCBtYWtlIHRoaXMg YSBjb25zdGFudCBhdCBsb2FkL3NldHVwIHRpbWUsIGFuZCBnaXZlIHVzDQo+PiBkZWFkLWNvZGUg ZWxpbWluYXRpb24uDQo+IA0KPiBFdmVuIHdpdGggYnBmX2NvcmVfdHlwZV9pZF9rZXJuZWwoKSB5 b3Ugc3RpbGwgd291bGQgaGF2ZSB0aGUgZm9sbG93aW5nOg0KPiANCj4gIMKgwqDCoMKgaWYgKGN0 eF9oaW50c19idGZfaWQgPT0gYnBmX2NvcmVfdHlwZV9pZF9rZXJuZWwoc3RydWN0IHhkcF9oaW50 c19peGdiZSkpIHsNCj4gIMKgwqDCoMKgfSBlbHNlIGlmICh0aGUgc2FtZSBmb3IgZXZlcnkgZHJp dmVyIHRoYXQgaGFzIGN1c3RvbSBoaW50cykgew0KPiAgwqDCoMKgwqB9DQo+IA0KPiBUb2tlIGhh cyBhIGdvb2Qgc3VnZ2VzdGlvbiBvbiBoaWRpbmcgdGhpcyBiZWhpbmQgYSBoZWxwZXI7IGVpdGhl cg0KPiBwcmUtZ2VuZXJhdGVkIG9uIHRoZSBsaWJicGYgc2lkZSBvciBhIGtmdW5jLiBXZSBzaG91 bGQgdHJ5IHRvIGhpZGUNCj4gdGhpcyBwZXItZGV2aWNlIGxvZ2ljIGlmIHBvc3NpYmxlOyBvdGhl cndpc2Ugd2UnbGwgZ2V0IHRvIHBlci1kZXZpY2UNCj4gWERQIHByb2dyYW1zIHRoYXQgb25seSB3 b3JrIG9uIHNvbWUgc3BlY2lhbCBkZXBsb3ltZW50cy4gDQo+IE9UT0gsIHdlJ2xsIHByb2JhYmx5 IGdldCB0aGVyZSB3aXRoIHRoZSBoaW50cyBhbnl3YXk/DQoNCldlbGwgeWVzLCBoaW50cyBpcyB0 cnlpbmcgdG8gbGV0IE5JQyBkcml2ZXIgaW5ub3ZhdGUgYW5kIGV4cG9ydCBIVyBoaW50cw0KdGhh dCBhcmUgc3BlY2lmaWMgZm9yIGEgZ2l2ZW4gZHJpdmVyLiAgVGh1cywgd2Ugc2hvdWxkIGFsbG93 IGNvZGUgdG8gZ2V0DQpkZXZpY2Ugc3BlY2lmaWMgaGludHMuDQoNCkkgZG8gbGlrZSB0aGlzIGlk ZWEgb2YgaGlkaW5nIHRoaXMgYmVoaW5kIHNvbWV0aGluZy4gTGlrZSBsaWJicGYgY291bGQNCmRl dGVjdCB0aGlzIGFuZCBhcHBseSBDTy1SRSB0cmlja3MsIGUuZy4gYmFzZWQgb24gdGhlIHN0cnVj dCBuYW1lDQpzdGFydGluZyB3aXRoIHhkcF9yeF9oaW50c19fX3h4eCBhbmQgbWVtYmVyIHJ4X3Rp bWVzdGFtcCwgaXQgY291bGQgc2Nhbg0KZW50aXJlIHN5c3RlbSAoYWxsIGxvYWRlZCBtb2R1bGVz KSBmb3IgeGRwX3J4X2hpbnRzXyogc3RydWN0cyBhbmQgZmluZA0KdGhvc2UgdGhhdCBjb250YWlu IG1lbWJlciByeF90aW1lc3RhbXAsIGFuZCB0aGVuIGV4cGFuZCB0aGF0IHRvIHRoZQ0KaWYtZWxz ZS1pZiBzdGF0ZW1lbnRzIG1hdGNoaW5nIGFnYWluc3QgSURzIGFuZCBhY2Nlc3MgcnhfdGltZXN0 YW1wIGF0DQpjb3JyZWN0IG9mZnNldC4NCiAgIFVuZm9ydHVuYXRlbHkgdGhpcyBhdXRvIGV4cGFu c2lvbiB3aWxsIGFkZCBjb2RlIHRoYXQgaXNuJ3QgbmVlZGVkIGZvcg0KYSBYRFAgQlBGLXByb2cg bG9hZGVkIG9uIGEgc3BlY2lmaWMgcGh5c2ljYWwgZGV2aWNlIChhcyBzb21lIElEcyB3aWxsDQpu b3QgYmUgYWJsZSB0byBhcHBlYXIpLiBGb3IgdGhlIHZldGggY2FzZSBpdCBpcyB1c2VmdWwuIEdv aW5nIGJhY2sgdG8NCmlmaW5kZXgsIGlmIGEgWERQIEJQRi1wcm9nIGRvIGhhdmUgaWZpbmRleCwg dGhlbiB3ZSBjb3VsZCBsaW1pdCB0aGUNCmV4cGFuc2lvbiB0byBCVEYgbGF5b3V0cyBmcm9tIHRo YXQgZHJpdmVyLiAgSXQganVzdCBmZWVscyBsaWtlIGEgbG90IG9mDQpzeW50YXgtc3VnYXIgYW5k IG1hZ2ljIHRvIGhpZGUgdGhlIGRyaXZlciBuYW1lIGUuZy4NCiJ4ZHBfaGludHNfaXhnYmVfdGlt ZXN0YW1wIiBpbiB0aGUgQy1jb2RlLg0KDQoNCj4+ID7CoMKgwqAgLy8gZG8gc29tZXRoaW5nIHdp dGggcnhfdGltZXN0YW1wDQo+PiA+wqDCoMKgIC8vIGFsc28sIGhhbmRsZSB4ZHBfaGludHNfaXhn YmUgYW5kIHRoZW4geGRwX2hpbnRzX2NvbW1vbiA/DQo+PiA+IH0gZWxzZSBpZiAoY3R4X2hpbnRz X2J0Zl9pZCA9PSB4ZHBfaGludHNfaXhnYmUpIHsNCj4+ID7CoMKgwqAgLy8gZG8gc29tZXRoaW5n IGVsc2UNCj4+ID7CoMKgwqAgLy8gcGx1cyBleHBsaWNpdGx5IGhhbmRsZSB4ZHBfaGludHNfY29t bW9uIGhlcmU/DQo+PiA+IH0gZWxzZSB7DQo+PiA+wqDCoMKgIC8vIGhhbmRsZSB4ZHBfaGludHNf Y29tbW9uDQo+PiA+IH0NCj4gDQo+PiBJIGFkZGVkIGEgQlBGLWhlbHBlciB0aGF0IGNhbiB0ZWxs IHVzIGlmIGxheW91dCBpZiBjb21wYXRpYmxlIHdpdGgNCj4+IHhkcF9oaW50c19jb21tb24sIHdo aWNoIGlzIGJhc2ljYWxseSB0aGUgb25seSBVQVBJIHRoZSBwYXRjaHNldCANCj4+IGludHJvZHVj ZXMuDQo+PiBUaGUgaGFuZGxlIHhkcF9oaW50c19jb21tb24gY29kZSBzaG91bGQgYmUgY29tbW9u Lg0KPj4gDQo+PiBJJ20gbm90IHN1cGVyIGhhcHB5IHdpdGggdGhlIEJQRi1oZWxwZXIgYXBwcm9h Y2gsIHNvIHN1Z2dlc3Rpb25zIGFyZQ0KPj4gd2VsY29tZS7CoCBFLmcuIHhkcF9tZC9jdHgtPmlz X2hpbnRfY29tbW9uIGNvdWxkIGJlIG9uZSBhcHByb2FjaCBhbmQNCj4+IGN0eC0+aGFzX2hpbnQg KGN0eCBpcyBvZnRlbiBjYWxsZWQgeGRwIHNvIGl0IHJlYWRzIHhkcC0+aGFzX2hpbnQpLg0KPj4g DQo+PiBPbmUgZmVhdHVyZSBJIG5lZWQgZnJvbSB0aGUgQlBGLWhlbHBlciBpcyB0byAiZGlzYWJs ZSIgdGhlIHhkcF9oaW50cyBhbmQNCj4+IGFsbG93IHRoZSBCUEYtcHJvZyB0byB1c2UgdGhlIGVu dGlyZSBtZXRhZGF0YSBhcmVhIGZvciBzb21ldGhpbmcgZWxzZQ0KPj4gKGF2b2lkaW5nIGl0IHRv IGJlIG1pc2ludHJlcHJldGVkIGJ5IG5leHQgcHJvZyBvciBhZnRlciByZWRpcmVjdCkuDQo+PiAN Cj4gQXMgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBlbWFpbHMsIGxldCdzIHRyeSB0byBoYXZl IGEgYnBmIHNpZGUNCj4gZXhhbXBsZS9zZWxmdGVzdCBmb3IgdGhlIG5leHQgcm91bmQ/IA0KDQpZ ZXMsIEkgZG8gbmVlZCB0byBhZGQgQlBGLXByb2cgZXhhbXBsZXMgYW5kIHNlbGZ0ZXN0cy4NCg0K SSBhbSBjb25zaWRlcmluZyBzZW5kaW5nIG5leHQgcm91bmQgKHN0aWxsIGFzIFJGQykgd2l0aG91 dCB0aGlzLCB0byBzaG93DQp3aGF0IE1hcnlhbSBhbmQgTWFnbnVzIHNldHRsZWQgb24gZm9yIEFG X1hEUCBkZXNjIG9wdGlvbiBmbGFncy4NCg0KDQo+IEkgYWxzbyBmZWVsIGxpa2UgeGRwX2hpbnRz X2NvbW1vbiBpcw0KPiBhIGJpdCBkaXN0cmFjdGluZy4gSXQgbWFrZXMgdGhlIGNvbW1vbiBjYXNl IGVhc3kgYW5kIGl0IGhpZGVzIHRoZQ0KPiBkaXNjdXNzaW9uL2NvbXBsZXhpdHkgYWJvdXQgcGVy LWRldmljZSBoaW50cy4gTWF5YmUgd2UgY2FuIGRyb3AgdGhpcw0KPiBjb21tb24gY2FzZSBhdCBh bGw/IFdoeSBjYW4ndCBldmVyeSBkcml2ZXIgaGFzIGEgY3VzdG9tIGhpbnRzIHN0cnVjdD8NCj4g SWYgd2UgYWdyZWUgdGhhdCBuYW1pbmcvc2l6ZSB3aWxsIGJlIHRoZSBzYW1lIGFjcm9zcyB0aGVt IChhbmQgcmV2aWV3DQo+IGNhdGNoZXMvZ3VhcmFudGVlZCB0aGF0KSwgd2h5IGRvIHdlIGV2ZW4g Y2FyZSBhYm91dCBoYXZpbmcgY29tbW9uDQo+IHhkcF9oaW50c19jb21tb24gc3RydWN0Pw0KDQpU aGUgeGRwX2hpbnRzX2NvbW1vbiBzdHJ1Y3QgaXMgYSBzdGVwcGluZyBzdG9uZSB0byBtYWtpbmcg dGhpcyBlYXNpbHkNCmNvbnN1bWFibGUgZnJvbSBDLWNvZGUgdGhhdCBuZWVkIHRvIGdlbmVyYXRl IFNLQnMgYW5kIGluZm8gZm9yDQp2aXJ0aW9fbmV0ICdoZHInIGRlc2MuDQoNCkRhdmlkIEFoZXJu IGhhdmUgYmVlbiBiZWdnaW5nIG1lIGZvciB5ZWFycyB0byBqdXN0IGFkZCB0aGlzIHN0YXRpY2Fs bHkNCnRvIHhkcF9mcmFtZS4gIEkgaGF2ZSBiZWVuIHJlbHVjdGFudCwgYmVjYXVzZSBJIHRoaW5r IHdlIGNhbiBjb21lIHVwDQp3aXRoIGEgbW9yZSBmbGV4aWJsZSAobGVzcyBVQVBJIGZpeGVkKSB3 YXksIHRoYXQgYm90aCBhbGxvd3Mga2VybmUtY29kZQ0KYW5kIEJQRi1wcm9nIHRvIGFjY2VzcyB0 aGVzZSBmaWVsZHMuICBJIHRoaW5rIG9mIHRoaXMgYXBwcm9hY2ggYXMgYQ0KY29tcHJvbWlzZSBi ZXR3ZWVuIHRoZXNlIHR3byB1c2Vycy4NCg0KICBNZWFuaW5nIHN0cnVjdCB4ZHBfaGludHNfY29t bW9uIGNhbiBiZSBjaGFuZ2VkIGFueXRpbWUgaW4gdGhlIGtlcm5lbA0KQy1jb2RlIGFuZCBCUEYt cHJvZydzIG11c3QgYWNjZXNzIGFyZWEgdmlhIEJURi9DTy1SRS4NCg0KDQo+PiA+IFdoYXQgSSdk IGxpa2UgdG8gYXZvaWQgaXMgYW4geGRwIHByb2dyYW0gdGFyZ2V0aW5nIHNwZWNpZmljIGRyaXZl cnMuDQo+PiA+IFdoZXJlIHBvc3NpYmxlLCB3ZSBzaG91bGQgYWltIHRvd2FyZHMgc29tZXRoaW5n IGxpa2UgImlmIHRoaXMgZGV2aWNlDQo+PiA+IGhhcyByeF90aW1lc3RhbXAgb2ZmbG9hZCAtPiB1 c2UgaXQgd2l0aG91dCBkZXBlbmRpbmcgdG9vIG11Y2ggb24NCj4+ID4gc3BlY2lmaWMgYnRmX2lk cy4NCj4+ID4NCj4gDQo+PiBJIGRvIHVuZGVyc3RhbmQgeW91ciB3aXNoLCBhbmQgYWRkaW5nIHJ4 X3RpbWVzdGFtcHMgdG8geGRwX2hpbnRzX2NvbW1vbg0KPj4gd291bGQgYmUgdG9vIGVhc3kgKGFu ZCBJTUhPIHdhc3RpbmcgdTY0LzgtYnl0ZXMgZm9yIGFsbCBwYWNrZXRzIG5vdA0KPj4gbmVlZGlu ZyB0aGlzIHRpbWVzdGFtcCkuwqAgSG9wZWZ1bGx5IHdlIGNhbiBjb21lIHVwIHdpdGggYSBnb29k IHNvbHV0aW9uDQo+PiB0b2dldGhlci4NCj4gDQo+PiBPbmUgaWRlYSB3b3VsZCBiZSB0byBleHRl bmQgbGliYnBmIHRvIGxvb2t1cCBvciB0cmFuc2xhdGUgc3RydWN0IG5hbWUNCj4gDQo+PiDCoCBz dHJ1Y3QgeGRwX2hpbnRzX0RSSVZFUl90aW1lc3RhbXAgew0KPj4gwqDCoMKgIF9fdTY0IHJ4X3Rp bWVzdGFtcDsNCj4+IMKgIH0gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7 DQo+IA0KPj4gaW50byBlLmcuIHhkcF9oaW50c19pNDBlX3RpbWVzdGFtcCwgaWYgYW4gaWZpbmRl eCB3YXMgcHJvdmlkZWQgd2hlbiANCj4+IGxvYWRpbmcNCj4+IHRoZSBYRFAgcHJvZy7CoCBBbmQg dGhlIGJwZl9jb3JlX3R5cGVfaWRfa2VybmVsKCkgcmVzdWx0IG9mIHRoZSBzdHJ1Y3QNCj4+IHJl dHVybmluZyBpZCBmcm9tIHhkcF9oaW50c19pNDBlX3RpbWVzdGFtcC4NCj4gDQo+PiBCdXQgdGhp cyBpZGVhcyBkb2Vzbid0IHJlYWxseSB3b3JrIGZvciB0aGUgdmV0aCByZWRpcmVjdCB1c2UtY2Fz ZSA6LSgNCj4+IEFzIHZldGggbmVlZCB0byBoYW5kbGUgeGRwX2hpbnRzIGZyb20gb3RoZXIgZHJp dmVycy4NCj4gDQo+IEFncmVlZC4gSWYgd2Ugd2FudCByZWRpcmVjdCB0byB3b3JrLCB0aGVuIHRo ZSBwYXJzaW5nIHNob3VsZCBiZSBlaXRoZXINCj4gbW9zdGx5IHByZS1nZW5lcmF0ZWQgYnkgbGli YnBmIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIGJ0ZiBpZHMgdGhhdA0KPiBtYXR0ZXI7IG9yIGRv bmUgc2ltaWxhcmx5IGJ5IGEga2Z1bmMuIFRoZSBpZGVhIHRoYXQgd2UgY2FuIHByZS1nZW5lcmF0 ZQ0KPiBwZXItZGV2aWNlIGJwZiBwcm9ncmFtIHNlZW1zIHRvIGJlIG91dCBvZiB0aGUgd2luZG93 IG5vdz8NCj4gDQoNCkhtbSwgdGhlIHBlci1kZXZpY2UgdGhpbmcgY291bGQgYmUgYW4gb3B0aW1p emF0aW9uIHRoYXQgaXMgcGVyZm9ybWVkIGlmDQphbiBpZmluZGV4IGhhdmUgYmVlbiBwcm92aWRl ZC4NCg0KQlVUIGZvciByZWRpcmVjdCB0byB3b3JrLCB3ZSBkbyBuZWVkIHRvIGhhdmUgdGhlIGZ1 bGwgQlRGIElELCB0bw0KaWRlbnRpZnkgc3RydWN0cyBjb21pbmcgZnJvbSBvdGhlciBkZXZpY2Ug ZHJpdmVycyBhbmQgdGhlaXIgQlRGIGxheW91dC4NCldlIGhhdmUgbWVudGlvbmVkIHJlZGlyZWN0 IGludG8gdmV0aCBzZXZlcmFsIHRpbWVzLCBidXQgdGhlIHNhbWUgZ29lcyANCmZvciByZWRpcmVj dCBpbnRvIEFGX1hEUCwgdGhhdCBuZWVkcyB0byBpZGVudGlmeSB0aGUgQlRGIGxheW91dC4NCg0K Wy4uLl0NCj4+ID4gU2VlIGFib3ZlLiBJIHRoaW5rIGV2ZW4gd2l0aCB5b3VyIHNlcmllcywgdGhh dCBidGZfaWQgaW5mbyBzaG91bGQgYWxzbw0KPj4gPiBjb21lIHZpYSBuZXRsaW5rIHNvIHRoZSBw cm9ncmFtcyBjYW4gcXVlcnkgaXQgYmVmb3JlIGxvYWRpbmcgYW5kIGRvDQo+PiA+IHRoZSByZXF1 aXJlZCBhZGp1c3RtZW50cy4gT3RoZXJ3aXNlLCBJJ20gbm90IHN1cmUgSSB1bmRlcnN0YW5kIHdo YXQgSQ0KPj4gPiBuZWVkIHRvIGRvIHdpdGggYSBidGZfaWQgdGhhdCBjb21lcyB2aWEgeGRwX21k L3hkcF9mcmFtZS4gSXQgc2VlbXMgdG9vDQo+PiA+IGxhdGU/IEkgbmVlZCB0byBrbm93IHRoZW0g aW4gYWR2YW5jZSB0byBhdCBsZWFzdCBwb3B1bGF0ZSB0aG9zZSBpZHMNCj4+ID4gaW50byB0aGUg YnBmIHByb2dyYW0gaXRzZWxmPw0KPiANCj4+IFllcywgd2UgbmVlZCB0byBrbm93IHRoZXNlIElE cyBpbiBhZHZhbmNlIGFuZCBjYW4uwqAgSSBkb24ndCB0aGluayB3ZSBuZWVkDQo+PiB0aGUgbmV0 bGluayBpbnRlcmZhY2UsIGFzIHdlIGNhbiBhbHJlYWR5IHJlYWQgb3V0IHRoZSBCVEYgbGF5b3V0 IGFuZCBJRHMNCj4+IHRvZGF5LsKgIEkgY29kZWQgaXQgdXAgaW4gdXNlcnNwYWNlLCB3aGVyZSB0 aGUgaW50ZW50ZWQgY29uc3VtZXIgaXMgQUZfWERQDQo+PiAoYXMgbGliYnBmIGFscmVhZHkgZG9l cyB0aGlzIGl0c2VsZikuDQo+IA0KPj4gU2VlIHRoaXMgY29kZToNCj4+IMKgIC0gDQo+PiBodHRw czovL2dpdGh1Yi5jb20veGRwLXByb2plY3QvYnBmLWV4YW1wbGVzL2Jsb2IvbWFzdGVyL0JURi1w bGF5Z3JvdW5kL2J0Zl9tb2R1bGVfaWRzLmMNCj4+IMKgIC0gDQo+PiBodHRwczovL2dpdGh1Yi5j b20veGRwLXByb2plY3QvYnBmLWV4YW1wbGVzL2Jsb2IvbWFzdGVyL0JURi1wbGF5Z3JvdW5kL2J0 Zl9tb2R1bGVfcmVhZC5jDQo+IA0KPiBTRywgaWYgd2UgY2FuIGhhdmUgc29tZSBjb252ZW50aW9u IG9uIHRoZSBuYW1lcyB3aGVyZSB3ZSBjYW4gcmVsaWFibHkNCj4gcGFyc2Ugb3V0IGFsbCBwb3Nz aWJsZSBzdHJ1Y3RzIHdpdGggdGhlIGhpbnRzLCBsZXQncyByZWx5IHNvbGVseSBvbg0KPiB2bWxp bnV4K3ZtbGludXggbW9kdWxlIGJ0Zi4NCj4gDQoNClllcywgSSBhbSBwcm9wb3NpbmcgY29udmVu dGlvbiBvbiB0aGUgc3RydWN0IEJURiBuYW1lcyB0byBmaW5kIA0KJ3hkcF9oaW50c18qJyB0aGF0 IHRoZSBkcml2ZXIgY2FuIHByb2R1Y2UuDQoNClRvIG1ha2UgaXQgcXVpY2tlciB0byBmaW5kIHhk cF9oaW50cyBzdHJ1Y3QgaW4gYSBkcml2ZXIsIEkgYW0gYWxzbyANCnByb3Bvc2luZyBhICd1bmlv bicgdGhhdCBjb250YWlucyBhbGwgdGhlIHhkcF9oaW50cyBzdHJ1Y3Qncy4NCg0KICAtIFNlZSAi W1BBVENIIDE0LzE4XSBpNDBlOiBBZGQgeGRwX2hpbnRzX3VuaW9uIi4NCg0KVGhlIEJURiBlZmZl Y3Qgb2YgdGhpcyBpcyB0aGF0IGVhY2ggZHJpdmVyIHdpbGwgaGF2ZSBhIHhkcF9oaW50c191bmlv biANCndpdGggc2FtZSAibmFtZSIuICBUaGF0IHBvaW50cyB0byBhbGwgdGhlIG90aGVyIEJURiBJ RHMuDQoNCkkgYW0gd29uZGVyaW5nIGlmIHdlIGNhbiBsZXZlcmFnZSB0aGlzIGZvciBDTy1SRSBy ZWxvY2F0aW9ucyB0b28uDQpUaGVuIHlvdSBjYW4gZGVmaW5lIHlvdXIgQlBGLXByb2cgc2hhZG93 IHVuaW9uIHdpdGggdGhlIG1lbWJlciANCnJ4X3RpbWVzdGFtcCAoYW5kIF9fYXR0cmlidXRlX18o KHByZXNlcnZlX2FjY2Vzc19pbmRleCkpKSBhbmQgbGV0IA0KQ08tUkUvbGliYnBmIGRvIHRoZSBv ZmZzZXQgYWRqdXN0bWVudHMuIChCdXQgYWdhaW4gd2UgYXJlIGJhY2sgdG8gd2hpY2ggDQpkcml2 ZXIgQlBGLXByb2cgYXJlIGF0dGFjaGVkIG9uIGFuZCB2ZXRoIGhhdmluZyB0byBoYW5kbGUgYWxs IHBvc3NpYmxlIA0KZHJpdmVycykNCg0KDQpbLi4uXQ0KPj4gPiA+ID4NCj4+ID4gPiA+IEFsbCB3 ZSBuZWVkIGhlcmUgaXMgZm9yIGxpYmJwZiB0bywgYWdhaW4sIGRvIHhkcF9yeF9oaW50cyAtPg0K Pj4gPiA+ID4gPGRldmljZT5feGRwX3J4X2hpbnRzIHRyYW5zbGF0aW9uIGJlZm9yZSBpdCBldmFs dWF0ZXMNCj4+ID4gPiA+IGJwZl9jb3JlX2ZpZWxkX2V4aXN0cygpPw0KPj4gPiA+ID4NCj4+ID4g PiA+IFRob3VnaHRzPyBBbnkgZG93bnNpZGVzPyBBbSBJIG1pc3Npbmcgc29tZXRoaW5nPw0KPj4g PiA+ID4NCj4+ID4gPg0KPj4gPiA+IFdlbGwsIHRoZSBkb3duc2lkZSBpcyBwcmltYXJpbHkgdGhh dCB0aGlzIGRlc2lnbiBsaW1pdHMgaW5ub3ZhdGlvbi4NCj4+ID4gPg0KPj4gPiA+IEVhY2ggdGlt ZSBhIE5JQyBkcml2ZXIgd2FudCB0byBpbnRyb2R1Y2UgYSBuZXcgaGFyZHdhcmUgaGludCwgdGhl eSBoYXZlDQo+PiA+ID4gdG8gdXBkYXRlIHRoZSBjZW50cmFsIFVBUEkgeGRwX3J4X2hpbnRzIHN0 cnVjdCBmaXJzdC4NCj4+ID4gPg0KPj4gPiA+IFRoZSBkZXNpZ24gaW4gdGhlIHBhdGNoc2V0IGlz IHRvIG9wZW4gZm9yIGlubm92YXRpb24uwqAgRHJpdmVyIGNhbiBleHRlbmQNCj4+ID4gPiB0aGVp ciBvd24geGRwX2hpbnRzXzxkcml2ZXI+X3h4eCBzdHJ1Y3QocykuwqAgVGhleSBzdGlsbCBoYXZl IHRvIGxhbmQNCj4+ID4gPiB0aGVpciBwYXRjaGVzIHVwc3RyZWFtLCBidXQgYXZvaWQgbWFuZ2xp bmcgYSBjZW50cmFsIFVBUEkgc3RydWN0LiBBcw0KPj4gPiA+IHVwc3RyZWFtIHdlIHJldmlldyBk cml2ZXIgY2hhbmdlcyBhbmQgc2hvdWxkIGZvY3VzIG9uIHNhbmUgc3RydWN0IG1lbWJlcg0KPj4g PiA+IG5hbWluZygrc2l6ZSkgZXNwZWNpYWxseSBpZiB0aGlzICJzb3VuZHMiIGxpa2UgYSBoaW50 L2ZlYXR1cmUgdGhhdCBtb3JlDQo+PiA+ID4gZHJpdmVyIGFyZSBsaWtlbHkgdG8gc3VwcG9ydC7C oCBXaXRoIGhlbHAgZnJvbSBCVEYgcmVsb2NhdGlvbnMsIGEgbmV3DQo+PiA+ID4gZHJpdmVyIGNh biBzdXBwb3J0IHNhbWUgaGludC9mZWF0dXJlIGlmIG5hbWluZygrc2l6ZSkgbWF0Y2ggKHdpdGhv dXQNCj4+ID4gPiBuZWNlc3NhcnkgdGhlIHNhbWUgb2Zmc2V0IGluIHRoZSBzdHJ1Y3QpLg0KPj4g Pg0KPj4gPiBUaGUgb3Bwb3NpdGUgc2lkZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UnbGwg aGF2ZSAnaXhnYmVfaGludHMnDQo+PiA+IHdpdGggJ3J4X3RpbWVzdGFtcCcgYW5kICdtdm5ldGFf aGludHMnIHdpdGggc29tZXRoaW5nIGxpa2UNCj4+ID4gJ3J4X3RzdGFtcCcuDQo+IA0KPj4gV2Vs bCwgYXMgSSB3cm90ZSByZXZpZXdlcnMgc2hvdWxkIGFzayBkcml2ZXJzIHRvIHVzZSB0aGUgc2Ft ZSBtZW1iZXIgDQo+PiBuYW1lLg0KPiANCj4gU0chDQo+IA0KPj4gPiA+ID4gQWxzbywgYWJvdXQg dGhlIFRYIHNpZGU6IEkgZmVlbCBsaWtlIHRoZSBzYW1lIGNhbiBiZSBhcHBsaWVkIHRoZXJlLA0K Pj4gPiA+ID4gdGhlIHByb2dyYW0gd29ya3Mgd2l0aCB4ZHBfdHhfaGludHMgYW5kIGxpYmJwZiB3 aWxsIHJld3JpdGUgdG8NCj4+ID4gPiA+IDxkZXZpY2U+X3hkcF90eF9oaW50cy4geGRwX3R4X2hp bnRzIG1pZ2h0IGhhdmUgZmllbGRzIGxpa2UgImhhc190eF92bGFuOjEiOw0KPj4gPiA+ID4gdGhv c2UsIHByZXN1bWFibHksIGNhbiBiZSByZWxvY2F0YWJsZSBieSBsaWJicGYgYXMgd2VsbD8NCj4+ ID4gPiA+DQo+PiA+ID4NCj4+ID4gPiBHb29kIHRvIHRoaW5rIGFoZWFkIGZvciBUWC1zaWRlLCBl dmVuLXRob3VnaCBJIHRoaW5rIHdlIHNob3VsZCBmb2N1cyBvbg0KPj4gPiA+IGxhbmRpbmcgUlgt c2lkZSBmaXJzdC4NCj4+ID4gPg0KPj4gPiA+IEkgbm90aWNlIHlvdXIgbmFtaW5nIHhkcF9yeF9o aW50cyB2cy4geGRwX3R4X2hpbnRzLsKgIEkgaGF2ZSBuYW1lZCB0aGUNCj4+ID4gPiBjb21tb24g c3RydWN0IHhkcF9oaW50c19jb21tb24sIHdpdGhvdXQgYSBSWC9UWCBkaXJlY3Rpb24gaW5kaWNh dGlvbi4NCj4+ID4gPiBNYXliZSB0aGlzIGlzIHdyb25nIG9mIG1lLCBidXQgbXkgdGhpbmtpbmcg d2FzIHRoYXQgbW9zdCBvZiB0aGUgIGNvbW1vbg0KPj4gPiA+IGhpbnRzIGNhbiBiZSBkaXJlY3Rs eSB1c2VkIGFzIFRYLXNpZGUgaGludHMuwqAgSSdtIGhvcGluZyBUWC1zaWRlDQo+PiA+ID4geGRw LWhpbnRzIHdpbGwgbmVlZCB0byBkbyBsaXR0bGUtdG8tbm9uIGFkanVzdG1lbnQsIGJlZm9yZSB1 c2luZyB0aGUNCj4+ID4gPiBoaW50cyBhcyBUWCAiaW5zdHJ1Y3Rpb24iLsKgIEknbSBob3Bpbmcg dGhhdCBYRFAtcmVkaXJlY3Qgd2lsbCBqdXN0IHdvcmsNCj4+ID4gPiBhbmQgeG1pdCBkcml2ZXIg Y2FuIHVzZSBYRFAtaGludHMgYXJlYS4NCj4+ID4gPg0KPj4gPiA+IFBsZWFzZSBjb3JyZWN0IG1l IGlmIEknbSB3cm9uZy4NCj4+ID4gPiBUaGUgY2hlY2tzdW0gZmllbGRzIGhvcGVmdWxseSB0cmFu c2xhdGVzIHRvIHNpbWlsYXIgVFggb2ZmbG9hZCAiYWN0aW9ucyIuDQo+PiA+ID4gVGhlIFZMQU4g b2ZmbG9hZCBoaW50IHNob3VsZCB0cmFuc2xhdGUgZGlyZWN0bHkgdG8gVFgtc2lkZS4NCj4+ID4g Pg0KPj4gPiA+IEkgY2FuIGVhc2lseSBiZSBjb252aW5jZWQgd2Ugc2hvdWxkIG5hbWUgaXQgeGRw X2hpbnRzX3J4X2NvbW1vbiBmcm9tIHRoZQ0KPj4gPiA+IHN0YXJ0LCBidXQgdGhlbiBJIHdpbGwg cHJvcG9zZSB0aGF0IHhkcF9oaW50c190eF9jb21tb24gaGF2ZSB0aGUNCj4+ID4gPiBjaGVja3N1 bSBhbmQgVkxBTiBmaWVsZHMrZmxhZ3MgYXQgc2FtZSBsb2NhdGlvbnMsIHN1Y2ggdGhhdCB3ZSBk b24ndA0KPj4gPiA+IHRha2UgYW55IHBlcmZvcm1hbmNlIGhpbnQgZm9yIG1vdmluZyB0aGVtIHRv ICJUWC1zaWRlIiBoaW50cywgbWFraW5nDQo+PiA+ID4gWERQLXJlZGlyZWN0IGp1c3Qgd29yay4N Cj4+ID4NCj4+ID4gTWlnaHQgYmUgZ29vZCB0byB0aGluayBhYm91dCB0aGlzIGJlZm9yZWhhbmQu IEkgYWdyZWUgdGhhdCBtb3N0IG9mIHRoZQ0KPj4gPiBsYXlvdXQgc2hvdWxkIGhvcGVmdWxseSBt YXRjaC4gSG93ZXZlciBvbmNlIGNhc2UgdGhhdCBJJ20gaW50ZXJlc3RlZA0KPj4gPiBpbiBpcyBy eF90aW1lc3RhbXAgdnMgdHhfdGltZXN0YW1wLiBGb3IgcngsIEknbSBnZXR0aW5nIHRoZSB0aW1l c3RhbXANCj4+ID4gaW4gdGhlIG1ldGFkYXRhOyBmb3IgdHgsIEknbSBtZXJlbHkgc2V0dGluZyBh IGZsYWcgc29tZXdoZXJlIHRvDQo+PiA+IHJlcXVlc3QgaXQgZm9yIGFzeW5jIGRlbGl2ZXJ5IGxh dGVyIChJIGhvcGUgd2UgcGxhbiB0byBzdXBwb3J0IHRoYXQNCj4+ID4gZm9yIGFmX3hkcD8pLiBT byB0aGUgbGF5b3V0IG1pZ2h0IGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50IDotKA0KPj4gPg0KPiAN Cj4+IFllcywgaXQgaXMgZGVmaW5pdGVseSBpbiBteSBwbGFucyB0byBzdXBwb3J0IGhhbmRsaW5n IGF0IFRYLWNvbXBsZXRpb24NCj4+IHRpbWUsIHNvIHlvdSBjYW4gZXh0cmFjdCB0aGUgVFgtd2ly ZS10aW1lc3RhbXAuwqAgVGhpcyBpcyBlYXN5IGZvciBBRl9YRFANCj4+IGFzIGl0IGhhcyB0aGUg Q1EgKENvbXBsZXRpb24gUXVldWUpIHN0ZXAuDQo+IA0KPj4gSSdtIGdldHRpbmcgYWhlYWQgb2Yg bXlzZWxmLCBidXQgZm9yIFhEUCBJIGltYWdpbmUgdGhhdCBkcml2ZXIgd2lsbA0KPj4gcG9wdWxh dGUgdGhpcyB4ZHBfdHhfaGludCBpbiBETUEgVFgtY29tcGxldGlvbiBmdW5jdGlvbiwgYW5kIHdl IGNhbiBhZGQNCj4+IGEga2Z1bmMgIm5vdC1hLXJlYWwtaG9vayIgdG8geGRwX3JldHVybl9mcmFt ZSB0aGF0IGNhbiBydW4gYW5vdGhlciBYRFANCj4+IEJQRi1wcm9nIHRoYXQgY2FuIGluc3BlY3Qg dGhlIHhkcF90eF9oaW50IGluIG1ldGFkYXRhLg0KPiANCj4gQ2FuIHdlIGFsc28gcGxhY2UgdGhh dCB4ZHBfdHhfaGludCBzb21ld2hlcmUgaW4gdGhlIGNvbXBsZXRpb24gcmluZw0KPiBmb3IgQUZf WERQIHRvIGNvbnN1bWU/DQoNClllcywgdGhhdCBpcyBiYXNpY2FsbHkgd2hhdCBJIHNhaWQgYWJv dmUuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWMvZWFzeQ0KZm9yIEFGX1hEUCBhcyBpdCBoYXMgdGhl IENRIChDb21wbGV0aW9uIFF1ZXVlKSByaW5nLiAgVGhlIHBhY2tldHMgaW4gdGhlDQpjb21wbGV0 aW9uIHJpbmcgd2lsbCBzdGlsbCBjb250YWluIHRoZSBtZXRhZGF0YSBhcmVhLCB3aGljaCBjb3Vs ZCBoYXZlDQpiZWVuIHBvcHVsYXRlZCB3aXRoIHRoZSBUWC13aXJlLXRpbWVzdGFtcC4NCg0KDQo+ PiBBdCB0aGlzIHByb3Bvc2VkIGtmdW5jIHhkcF9yZXR1cm5fZnJhbWUgY2FsbCBwb2ludCwgd2Ug bGlrZWx5IGNhbm5vdCBrbm93DQo+PiB3aGF0IGRyaXZlciB0aGF0IHByb2R1Y2VkIHRoZSB4ZHBf aGludHMgbWV0YWRhdGEgZWl0aGVyLCBhbmQgdGh1cyBub3QgDQo+PiBsb2NrIG91ciBkZXNpZ24g b3IgQlRGLXJlbG9hY2F0aW9ucyB0byBhc3N1bWUgd2hpY2ggZHJpdmVyIGlzIGl0IGxvYWRlZCBv bi4NCj4gDQo+PiBbLi4uIGN1dCAuLi4gZ2V0dGluZyB0b28gbG9uZ10NCg0KLS1KZXNwZXINCg0K