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 A67DA989260 for ; Tue, 12 Jul 2022 16:15:05 +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=gkFcTK2y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1657635303; 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=266GFhUCmmCN8xc8Ndw3pmarVXi3iQp2eA7vy//odYI=; b=gkFcTK2yEYCpHd4dWZTpNGeMCMPAOJQE0w6FomPR1QYsaAhxoRGgb+PH99QD/+uDev6h1Z C/UeJj7pyTPGFHxxBmIP6/JDxEjRl+yRV35HdvbrJ35TSF4rpEXi1vcFESfjye2ce8e4Tm rXC2czL1MitQEK3G71kegCnK5N4/VGY= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-382-LUDmIyIBOgKcRRVtJWjyOA-1; Tue, 12 Jul 2022 10:15:02 -0400 X-MC-Unique: LUDmIyIBOgKcRRVtJWjyOA-1 Received: by mail-lf1-f72.google.com with SMTP id y35-20020a0565123f2300b0047f70612402so3687379lfa.12 for ; Tue, 12 Jul 2022 07:15:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:date:mime-version:user-agent:cc :subject:content-language:to:references:in-reply-to :content-transfer-encoding; bh=266GFhUCmmCN8xc8Ndw3pmarVXi3iQp2eA7vy//odYI=; b=DXivYYh7dwJ0fOj1ugyoQgTo8hQiGB6dopQT6Or6xDEklrevAM74qUiV5Qlx8w0pcX eteAF45NCcBXJbrzcnxGA1h7LgsP45PRvIXmFaAM7SgmcSbp+lmxy+/gHUxZy4Rj/CHw CSPQEl9lU84UGqx1BHAYkT9HjBL2Orxq6FfCYKQzA9nduwJ1W+ve4Es2+A2pFQls0V3N 5I6MtbJzxHBiYuNScYcQH175BY/xZWQyGNKrG32yKeUKwTo+lQwY1vna5JdmtEln4O1c vL2ef1MTYMZfnLVrbmO5MkeUZk3EgB7sx092fuDSrw5Mbl3nXnmfvB4tARXAfgxTcrxU 6SYg== X-Gm-Message-State: AJIora8YgSax0eyXsOlh4XlOAMtFDtZv6nP5qzuScsD8zELhVsSGdYpA c6+nq0aPmG/aKzsb4PrL2PA7mDsaivKa4TNlPXlEjOYBW/0kTCOkn2VZljX3w9xpFOlgLuTfyUy E2BTBnTCig+m2wj+2I3cR X-Received: by 2002:a05:6512:68b:b0:485:f4a1:c2db with SMTP id t11-20020a056512068b00b00485f4a1c2dbmr15959900lfe.119.1657635300580; Tue, 12 Jul 2022 07:15:00 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sNfcQ+bZlAH4C3wrlLJwVUL5oiknHzbXe7KBmMTkwnayCg4aRM46N29uwvgOAa3knZGCI5pw== X-Received: by 2002:a05:6512:68b:b0:485:f4a1:c2db with SMTP id t11-20020a056512068b00b00485f4a1c2dbmr15959841lfe.119.1657635299873; Tue, 12 Jul 2022 07:14:59 -0700 (PDT) Received: from [192.168.0.50] (87-59-106-155-cable.dk.customer.tdc.net. [87.59.106.155]) by smtp.gmail.com with ESMTPSA id h28-20020a2ea49c000000b0025d71ab224fsm1069821lji.55.2022.07.12.07.14.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 Jul 2022 07:14:59 -0700 (PDT) From: Jesper Dangaard Brouer X-Google-Original-From: Jesper Dangaard Brouer Message-ID: Date: Tue, 12 Jul 2022 16:14:57 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 To: Magnus Karlsson , =?UTF-8?Q?Toke_H=c3=b8iland-J=c3=b8rgensen?= References: <20220628194812.1453059-1-alexandr.lobakin@intel.com> <62bbedf07f44a_2181420830@john.notmuch> <87iloja8ly.fsf@toke.dk> <20220704154440.7567-1-alexandr.lobakin@intel.com> <87a69o94wz.fsf@toke.dk> <20220705154120.22497-1-alexandr.lobakin@intel.com> <87pmij75r1.fsf@toke.dk> <20220706135023.1464979-1-alexandr.lobakin@intel.com> <87edyxaks0.fsf@toke.dk> In-Reply-To: Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jbrouer@redhat.com 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: DAKMJWHPKVH3EXBSYENR6FB2YXK3MT6K X-Message-ID-Hash: DAKMJWHPKVH3EXBSYENR6FB2YXK3MT6K 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, Alexander Lobakin , John Fastabend , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Larysa Zaremba , Michal Swiatkowski , Jesper Dangaard Brouer , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Magnus Karlsson , Maciej Fijalkowski , Jonathan Lemon , Lorenzo Bianconi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jesse Brandeburg , Yajun Deng , Willem de Bruijn , bpf , Network Development , open list , xdp-hints@xdp-project.net X-Mailman-Version: 3.3.5 Precedence: list Subject: [xdp-hints] Re: [PATCH RFC bpf-next 00/52] bpf, xdp: introduce and use Generic Hints/metadata List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDEyLzA3LzIwMjIgMTIuMzMsIE1hZ251cyBLYXJsc3NvbiB3cm90ZToNCj4gT24gVGh1 LCBKdWwgNywgMjAyMiBhdCAxOjI1IEFNIFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiA8dG9rZUBy ZWRoYXQuY29tPiB3cm90ZToNCj4+DQo+PiBBbGV4YW5kZXIgTG9iYWtpbiA8YWxleGFuZHIubG9i YWtpbkBpbnRlbC5jb20+IHdyaXRlczoNCj4+DQo+Pj4gRnJvbTogVG9rZSBIPz9pbGFuZC1KPz9y Z2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+DQo+Pj4gRGF0ZTogVHVlLCAwNSBKdWwgMjAyMiAyMDo1 MToxNCArMDIwMA0KPj4+DQo+Pj4+IEFsZXhhbmRlciBMb2Jha2luIDxhbGV4YW5kci5sb2Jha2lu QGludGVsLmNvbT4gd3JpdGVzOg0KPj4+Pg0KPj4+PiBbLi4uIHNuaXBwaW5nIGEgYml0IG9mIGNv bnRleHQgaGVyZSAuLi5dDQo+Pj4+DQo+Pj4+Pj4+PiBZZWFoLCBJJ2QgYWdyZWUgdGhpcyBraW5k IG9mIGNvbmZpZ3VyYXRpb24gaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlDQo+Pj4+Pj4+PiBhZGRl ZCBsYXRlciwgYW5kIGFsc28gaXQncyBzb3J0IG9mIG9ydGhvZ29uYWwgdG8gdGhlIGNvbnN1bXB0 aW9uIG9mIHRoZQ0KPj4+Pj4+Pj4gbWV0YWRhdGEgaXRzZWxmLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+ IEFsc28sIHR5aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpbnRvIHRoZSBsb2FkaW5nIG9mIGFuIFhE UCBwcm9ncmFtIGlzIGENCj4+Pj4+Pj4+IHRlcnJpYmxlIGludGVyZmFjZTogdGhlc2UgYXJlIGhh cmR3YXJlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGV0J3MganVzdA0KPj4+Pj4+Pj4gcHV0IHRo ZW0gaW50byBldGh0b29sIG9yICdpcCBsaW5rJyBsaWtlIGFueSBvdGhlciBwaWVjZSBvZiBkZXZp Y2UNCj4+Pj4+Pj4+IGNvbmZpZ3VyYXRpb24uDQo+Pj4+Pj4+DQo+Pj4+Pj4+IEkgZG9uJ3QgYmVs aWV2ZSBpdCBmaXRzIHRoZXJlLCBlc3BlY2lhbGx5IEV0aHRvb2wuIEV0aHRvb2wgaXMgZm9yDQo+ Pj4+Pj4+IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIFhEUC9BRl9YRFAgaXMgOTUlIHNvZnR3YXJl IHN0dWZmIChhcGFydCBmcm9tDQo+Pj4+Pj4+IG9mZmxvYWQgYml0cyB3aGljaCBpcyBwdXJlbHkg TkZQJ3MgZm9yIG5vdykuDQo+Pj4+Pj4NCj4+Pj4+PiBCdXQgWERQLWhpbnRzIGlzIGFib3V0IGNv bnN1bWluZyBoYXJkd2FyZSBmZWF0dXJlcy4gV2hlbiB5b3UncmUNCj4+Pj4+PiBjb25maWd1cmlu ZyB3aGljaCBtZXRhZGF0YSBpdGVtcyB5b3Ugd2FudCwgeW91J3JlIHNheWluZyAicGxlYXNlIHBy b3ZpZGUNCj4+Pj4+PiBtZSB3aXRoIHRoZXNlIChoYXJkd2FyZSkgZmVhdHVyZXMiLiBTbyBldGh0 b29sIGlzIGFuIGV4Y2VsbGVudCBwbGFjZSB0bw0KPj4+Pj4+IGRvIHRoYXQgOikNCj4+Pj4+DQo+ Pj4+PiBXaXRoIEV0aHRvb2wgeW91IGNvbmZpZ3VyZSB0aGUgaGFyZHdhcmUsIGUuZy4gaXQgd29u J3Qgc3RyaXAgVkxBTg0KPj4+Pj4gdGFncyBpZiB5b3UgZGlzYWJsZSByeC1jdmxhbi1zdHJpcHBp bmcuIFdpdGggY29uZmlndXJpbmcgbWV0YWRhdGENCj4+Pj4+IHlvdSBvbmx5IHRlbGwgd2hhdCB5 b3Ugd2FudCB0byBzZWUgdGhlcmUsIGRvbid0IHlvdT8NCj4+Pj4NCj4+Pj4gQWgsIEkgdGhpbmsg d2UgbWF5IGJlIGdldHRpbmcgY2xvc2VyIHRvIGlkZW50aWZ5aW5nIHRoZSBkaXNjb25uZWN0DQo+ Pj4+IGJldHdlZW4gb3VyIHdheSBvZiB0aGlua2luZyBhYm91dCB0aGlzIQ0KPj4+Pg0KPj4+PiBJ biBteSBtaW5kLCB0aGVyZSdzIG5vIHNlcGFyYXRlICJjb25maWd1cmF0aW9uIG9mIHRoZSBtZXRh ZGF0YSIgc3RlcC4NCj4+Pj4gWW91IHNpbXBseSB0ZWxsIHRoZSBoYXJkd2FyZSB3aGF0IGZlYXR1 cmVzIHlvdSB3YW50IChzYXksICJlbmFibGUNCj4+Pj4gdGltZXN0YW1wcyBhbmQgVkxBTiBvZmZs b2FkIiksIGFuZCB0aGUgZHJpdmVyIHdpbGwgdGhlbiBwcm92aWRlIHRoZQ0KPj4+PiBpbmZvcm1h dGlvbiByZWxhdGVkIHRvIHRoZXNlIGZlYXR1cmVzIGluIHRoZSBtZXRhZGF0YSBhcmVhDQo+Pj4+ IHVuY29uZGl0aW9uYWxseS4gQWxsIFhEUCBoaW50cyBpcyBhYm91dCwgdGhlbiwgaXMgYSB3YXkg Zm9yIHRoZSBkcml2ZXINCj4+Pj4gdG8gaW5mb3JtIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaG93 IHRoYXQgaW5mb3JtYXRpb24gaXMgYWN0dWFsbHkgbGFpZA0KPj4+PiBvdXQgaW4gdGhlIG1ldGFk YXRhIGFyZWEuDQo+Pj4+DQo+Pj4+IEhhdmluZyBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24ga25v YiB0byB0ZWxsIHRoZSBkcml2ZXIgInBsZWFzZSBsYXkgb3V0DQo+Pj4+IHRoZXNlIHBhcnRpY3Vs YXIgYml0cyBvZiBtZXRhZGF0YSB0aGlzIHdheSIgc2VlbXMgbGlrZSBhIHRvdGFsbHkNCj4+Pj4g dW5uZWNlc3NhcnkgKGFuZCBxdWl0ZSBjb21wbGljYXRlZCkgZmVhdHVyZSB0byBoYXZlIHdoZW4g d2UgY2FuIGp1c3QgbGV0DQo+Pj4+IHRoZSBkcml2ZXIgZGVjaWRlIGFuZCB1c2UgQ08tUkUgdG8g Y29uc3VtZSBpdD8NCj4+Pg0KPj4+IE1hZ251cyAoaGUncyBjdXJyZW50bHkgb24gdmFjYXRpb24p IHRvbGQgbWUgaXQgd291bGQgYmUgdXNlZnVsIGZvcg0KPj4+IEFGX1hEUCB0byBlbmFibGUvZGlz YWJsZSBwYXJ0aWN1bGFyIG1ldGFkYXRhLCBhdCBsZWFzdCBmcm9tIHBlcmYNCj4+PiBwZXJzcGVj dGl2ZS4gTGV0J3Mgc2F5LCBqdXN0IGZldGNoaW5nIG9mIG9uZSAiY2hlY2tzdW0gb2siIGJpdCBp bg0KPj4+IHRoZSBkcml2ZXIgaXMgZmFzdGVyIHRoYW4gd2Fsa2luZyB0aHJvdWdoIGFsbCB0aGUg ZGVzY3JpcHRvciB3b3Jkcw0KPj4+IGFuZCBkcml2ZXIgbG9naWNzIChpLmUuIHRoZXJlJ3Mgc2V2 ZXJhbCBodW5kcmVkIGxvY3MgaW4gaWNlIHdoaWNoDQo+Pj4ganVzdCBwYXJzZSBkZXNjcmlwdG9y IGRhdGEgYW5kIGJ1aWxkIGFuIHNrYiBvciBtZXRhZGF0YSBmcm9tIGl0KS4NCj4+PiBCdXQgaWYg d2Ugd291bGQganVzdCBlbmFibGUvZGlzYWJsZSBjb3JyZXNwb25kaW5nIGZlYXR1cmVzIHRocm91 Z2gNCj4+PiBFdGh0b29sLCB0aGF0IHdvdWxkIGh1cnQgWERQX1BBU1MuIE1heWJlIGl0J3MgYSBi YWQgZXhhbXBsZSwgYnV0DQo+Pj4gd2hhdCBpZiBJIHdhbnQgdG8gaGF2ZSBvbmx5IFJTUyBoYXNo IGluIHRoZSBtZXRhZGF0YSAoYW5kIGRvbid0DQo+Pj4gd2FudCB0byBzcGVuZCBjeWNsZXMgb24g cGFyc2luZyB0aGUgcmVzdCksIGJ1dCBhdCB0aGUgc2FtZSB0aW1lDQo+Pj4gc3RpbGwgd2FudCBz a2IgcGF0aCB0byBoYXZlIGNoZWNrc3VtIHN0YXR1cyB0byBub3QgZGllIGF0IENQVQ0KPj4+IGNo ZWNrc3VtIGNhbGN1bGF0aW9uPw0KPj4NCj4+IEhtbSwgc28gdGhpcyBmZWVscyBhIGxpdHRsZSBs aWtlIGEgZHJpdmVyLXNwZWNpZmljIG9wdGltaXNhdGlvbj8gSS5lLiwNCj4+IG15IGd1ZXNzIGlz IHRoYXQgbm90IGFsbCBkcml2ZXJzIGhhdmUgYSBtZWFzdXJhYmxlIG92ZXJoZWFkIGZvciBwdWxs aW5nDQo+PiBvdXQgdGhlIG1ldGFkYXRhLiBBbHNvLCBvbmNlIHRoZSBYRFAgbWV0YWRhdGEgYml0 cyBhcmUgaW4gcGxhY2UsIHdlIGNhbg0KPj4gbW92ZSBpbiB0aGUgZGlyZWN0aW9uIG9mIGJ1aWxk aW5nIFNLQnMgZnJvbSB0aGUgc2FtZSBzb3VyY2UsIHNvIEknbSBub3QNCj4+IHN1cmUgaXQncyBh IGdvb2QgaWRlYSB0byBhc3N1bWUgdGhhdCB0aGUgWERQIG1ldGFkYXRhIGlzIHNlcGFyYXRlIGZy b20NCj4+IHdoYXQgdGhlIHN0YWNrIGNvbnN1bWVzLi4uDQo+Pg0KPj4gSW4gYW55IGNhc2UsIGlm IHN1Y2ggYW4gb3B0aW1pc2F0aW9uIGRvZXMgdHVybiBvdXQgdG8gYmUgdXNlZnVsLCB3ZSBjYW4N Cj4+IGFkZCBpdCBsYXRlciAoYmFja2VkIGJ5IHJpZ29yb3VzIGJlbmNobWFya3MsIG9mIGNvdXJz ZSksIHNvIEkgdGhpbmsgd2UNCj4+IGNhbiBzdGlsbCBzdGFydCB3aXRoIHRoZSBzaW1wbGUgY2Fz ZSBhbmQgaXRlcmF0ZSBmcm9tIHRoZXJlPw0KPiANCj4gSnVzdCB0byBjaGVjayBpZiBteSBpbnR1 aXRpb24gd2FzIGNvcnJlY3Qgb3Igbm90IEkgcmFuIHNvbWUgYmVuY2htYXJrcw0KPiBhcm91bmQg dGhpcy4gSSBwb3J0ZWQgSmVzcGVyJ3MgcGF0Y2ggc2V0IHRvIHRoZSB6ZXJvLWNvcHkgZHJpdmVy IG9mDQo+IGk0MGUsIHdoaWNoIHdhcyByZWFsbHkgc2ltcGxlIHRoYW5rcyB0byBKZXNwZXIncyBy ZWZhY3RvcmluZy4gT25lIGxpbmUNCj4gb2YgY29kZSBhZGRlZCB0byB0aGUgZGF0YSBwYXRoIG9m IHRoZSB6YyBkcml2ZXIgYW5kIG1ha2luZw0KPiBpNDBlX3Byb2Nlc3NfeGRwX2hpbnRzKCkgYSBn bG9iYWwgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHJlYWNoZWQgZnJvbQ0KPiB0aGUgemMgZHJpdmVy LiANCg0KSGFwcHkgdG8gaGVhciBpdCB3YXMgc2ltcGxlIHRvIGV4dGVuZCB0aGlzIHRvIEFGX1hE UCBpbiB0aGUgZHJpdmVyLg0KQ29kZSBkZXNpZ24gd2lzZSBJJ20gdHJ5aW5nIHRvIGtlZXAgaXQg c2ltcGxlIGZvciBkcml2ZXJzIHRvIGFkZCB0aGlzLg0KSSBoYXZlIGEgY28td29ya2VyIHRoYXQg aGF2ZSBhbHJlYWR5IGV4dGVuZGVkIGl4Z2JlLg0KDQo+IEkgYWxzbyBtb3ZlZCB0aGUgcHJlZmV0 Y2ggSmVzcGVyIGFkZGVkIHRvIGFmdGVyIHRoZQ0KPiBjaGVjayBpZiB4ZHBfaGludHMgYXJlIGF2 YWlsYWJsZSBzaW5jZSBpdCByZWFsbHkgZGVncmFkZXMgcGVyZm9ybWFuY2UNCj4gaW4gdGhlIHhk cF9oaW50cyBvZmYgY2FzZS4NCg0KR29vZCB0byBrbm93Lg0KDQo+IEZpcnN0IG51bWJlciBpcyB0 aGUgdGhyb3VnaHB1dCBjaGFuZ2Ugd2l0aCBoaW50cyBvbiwgYW5kIHRoZSBzZWNvbmQNCj4gbnVt YmVyIGlzIHdpdGggaGludHMgb2ZmLiBBbGwgYXJlIGNvbXBhcmVkIHRvIHRoZSBwZXJmb3JtYW5j ZSB3aXRob3V0DQo+IEplc3BlcidzIHBhdGNoIHNldCBhcHBsaWVkLiBUaGUgYXBwbGljYXRpb24g aXMgeGRwc29jayAtciAod2hpY2ggdXNlZA0KPiB0byBiZSBwYXJ0IG9mIHRoZSBzYW1wbGVzL2Jw ZiBkaXJlY3RvcnkpLg0KDQpGb3IgcmV2aWV3ZXIgdG8gcmVsYXRlIHRvIHRoZXNlIG51bWJlcnMg d2UgbmVlZCB0byB1bmRlcnN0YW5kL2V4cGxhaW4NCnRoZSBleHRyZW1lIG51bWJlcnMgd2UgYXJl IGRlYWxpbmcgd2l0aC4gIEluIG15IHN5c3RlbSB3aXRoIGk0MGUgYW5kDQp4ZHBzb2NrIC0tcngt ZHJvcCBJIGNhbiBBRl9YRFAgZHJvcCBwYWNrZXRzIHdpdGggYSByYXRlIG9mIDMzLjYzMy43NjEg cHBzLg0KDQpUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcHJvY2Vzc2luZyB0aW1lIHBlciBwYWNrZXQ6 IDI5LjcgbnMgKG5hbm9zZWMpDQogIC0gQ2FsYzogKDEvMzM2MzM3NjEpKjEwXjkNCg0KPiBDb3B5 IG1vZGUgd2l0aCBhbGwgaGludHM6IC0yMSUgLyAtMiUNCg0KVGhlIC0yMSUgZm9yIGVuYWJsaW5n IGFsbCBoaW50cyBkb2VzIHNvdW5kIGxpa2UgYW4gZXhjZXNzaXZlIG92ZXJoZWFkLA0KYnV0IHRp bWUtd2lzZSB0aGlzIGlzIGEgcmVkdWN0aW9uL292ZXJoZWFkIG9mIDYuMiBucy4NCg0KVGhlIHJl YWwgcXVlc3Rpb246IElzIHRoaXMgNi4yIG5zIG92ZXJoZWFkIHRoYXQgZ2l2ZXMgdXMgZS5nLg0K UlgtY2hlY2tzdW1taW5nIGxvd2VyIHRoYW4gdGhlIGdhaW4gd2UgY2FuIG9idGFpbiBmcm9tIGF2 b2lkaW5nIGRvaW5nDQpSWC1jaGVja3N1bW1pbmcgaW4gc29mdHdhcmU/DQogIC0gQTogTXkgcHJl dmlvdXMgZXhwZXJpbWVudHMgY29uY2x1ZGVbMV0gdGhhdCBmb3IgMTUwMCBieXRlcyBmcmFtZXMg d2UNCiAgICBjYW4gc2F2ZSA1NCBucyAob3IgaW5jcmVhc2UgcGVyZm9ybWFuY2Ugd2l0aCA4JSBm b3Igbm9ybWFsIG5ldHN0YWNrKS4NCg0KDQpJIHdhcyBnb2luZyBmb3IgemVybyBvdmVyaGVhZCB3 aGVuIGRpc2FibGluZyB4ZHAtaGludHMsIHdoaWNoIGlzIGFsbW9zdA0KdHJ1ZSBhcyB0aGUgLTIl IGlzIHRpbWUtd2lzZSBhIHJlZHVjdGlvbi9vdmVyaGVhZCBvZiAwLjU5IG5zLg0KDQogIFsxXSAN Cmh0dHBzOi8vZ2l0aHViLmNvbS94ZHAtcHJvamVjdC94ZHAtcHJvamVjdC9ibG9iL21hc3Rlci9h cmVhcy9jb3JlL3hkcF9mcmFtZTAxX2NoZWNrc3VtLm9yZyNtZWFzdXJlbWVudHMtY29tcGFyZS1y ZXN1bHRzLS1jb25jbHVzaW9uDQoNCg0KPiBaZXJvLWNvcHkgbW9kZSB3aXRoIGFsbCBoaW50czog LTI5JSAvIC05JQ0KDQpJJ20gdW5zdXJlIHdoeSB0aGUgcGVyY2VudGFnZXMgaW5jcmVhc2UgaGVy ZSwgcGVyaGFwcyBiZWNhdXNlIHplcm8tY29weSANCmlzIGZhc3RlciBhbmQgdGh1cyB0aGUgb3Zl cmhlYWQgYmVjb21lcyBhIGxhcmdlciBwZXJjZW50YWdlPw0KDQoNCj4gQ29weSBtb2RlIHJ4IHRp bWVzdGFtcCBvbmx5ICh0aGUgcmVzdCByZW1vdmVkIHdpdGggYW4gI2lmIDApOiAtMTElDQo+IFpl cm8tY29weSBtb2RlIHJ4IHRpbWVzdGFtcCBvbmx5OiAtMjAlDQo+IA0KPiBTbywgaWYgeW91IG9u bHkgd2FudCByeCB0aW1lc3RhbXAsIGJ1dCBjYW4gb25seSBlbmFibGUgZXZlcnkgaGludCBvcg0K PiBub3RoaW5nLCB0aGVuIHlvdSBnZXQgYSAxMCUgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gd2l0 aCBjb3B5IG1vZGUgYW5kDQo+IDklIHdpdGggemVyby1jb3B5IG1vZGUgY29tcGFyZWQgdG8gaWYg eW91IHdlcmUgYWJsZSBqdXN0IHRvIGVuYWJsZSByeA0KPiB0aW1lc3RhbXAgYWxvbmUuIFdpdGgg dGhlc2Ugcm91Z2ggbnVtYmVycyAoYSByZWFsIGltcGxlbWVudGF0aW9uIHdvdWxkDQo+IG5vdCBo YXZlIGFuICNpZiAwKSBJIHdvdWxkIHNheSBpdCBtYXR0ZXJzLCBidXQgdGhhdCBkb2VzIG5vdCBt ZWFuIHdlDQo+IHNob3VsZCBub3Qgc3RhcnQgc2ltcGxlIGFuZCBqdXN0IGhhdmUgYSBiaWcgc3dp dGNoIHRvIHN0YXJ0IHdpdGguIEJ1dA0KPiBhcyB3ZSBhZGQgaGludHMgKHRvIHRoZSBzYW1lIGJ0 ZmlkKSwgdGhpcyB3aWxsIGp1c3QgZ2V0IHdvcnNlLg0KDQpJTUhPIHdlICpkbyogYWxyZWFkeSBo YXZlIGluZGl2aWR1YWwgZW5hYmxlL2Rpc2FibGUgaGludHMgZmVhdHVyZXMgdmlhIA0KZXRodG9v bC4NCkhhdmUgeW91IHRyaWVkIHRvIHVzZSB0aGUgaW5kaXZpZHVhbCBldGh0b29sIHN3aXRjaGVz LiBlLmcuOg0KDQogIGV0aHRvb2wgLUsgaTQwZTIgcngtY2hlY2tzdW1taW5nIG9mZg0KDQpUaGUg aTQwZSBjb2RlIHVzZXMgYml0ZmllbGRzIGZvciBleHRyYWN0aW5nIHRoZSBkZXNjcmlwdG9yLCB3 aGljaCBjYXVzZQ0KY29kZSB0aGF0IGlzbid0IG9wdGltYWwgb3IgZnVsbHkgb3B0aW1pemVkIGJ5 IHRoZSBjb21waWxlci4gIE9uIG15IHNldHVwDQpJIGdhaW5lZCA0LjIlIChvciAxLjI0IG5zKSBi eSBkb2luZyB0aGlzLg0KDQoNCj4gSGVyZSBhcmUgc29tZSBvdGhlciBudW1iZXJzIEkgZ290LCBp biBjYXNlIHNvbWVvbmUgaXMgaW50ZXJlc3RlZC4gVGhleQ0KPiBhcmUgWERQIG51bWJlcnMgZnJv bSB4ZHBfcnhxX2luZm8gaW4gc2FtcGxlcy9icGYuDQo+IA0KPiBoaW50cyBvbiAvIGhpbnRzIG9m Zg0KPiBYRFBfRFJPUDogLTE4JSAvIC0xLjUlDQoNCk15IHhkcF9yeHFfaW5mbyAobm8tdG91Y2gg WERQX0RST1ApIG5hbm9zZWMgbnVtYmVycyBhcmU6DQoNCiAgICAgICAgICAgaGludHMgb24gLyBo aW50cyBvZmYNCiAgWERQX0RST1A6IDM1Ljk3bnMgLyAyOS44MG5zICAoZGlmZiA2LjE3IG5zKQ0K DQpNYXliZSBpbnRlcmVzdGluZyBpZiBJIHRvdWNoIGRhdGEgKHZpYSBvcHRpb24gLS1yZWFkKSwg dGhlbiB0aGUgb3ZlcmhlYWQNCmlzIHJlZHVjZWQgdG8gNC44NCBucy4NCg0KLS1KZXNwZXINCg0K PiBYRFBfVFg6IC0xMCUgLyAtMi41JQ0KPiANCj4+Pj4+Pj4gSSBmb2xsb3cgdGhhdCB3YXk6DQo+ Pj4+Pj4+DQo+Pj4+Pj4+IDEpIHlvdSBwaWNrIGEgcHJvZ3JhbSB5b3Ugd2FudCB0byBhdHRhY2g7 DQo+Pj4+Pj4+IDIpIHVzdWFsbHkgdGhleSBhcmUgd3JpdHRlbiBmb3Igc3BlY2lhbCBuZWVkcyBh bmQgdXNlY2FzZXM7DQo+Pj4+Pj4+IDMpIHNvIG1vc3QgbGlrZWx5IHRoYXQgcHJvZ3JhbSB3aWxs IGJlIHRpZWQgd2l0aCBtZXRhZGF0YS9kcml2ZXIvZXRjDQo+Pj4+Pj4+ICAgICBpbiBzb21lIHdh eTsNCj4+Pj4+Pj4gNCkgc28geW91IHdhbnQgdG8gZW5hYmxlIEhpbnRzIG9mIGEgcGFydGljdWxh ciBmb3JtYXQgcHJpbWFyaWx5IGZvcg0KPj4+Pj4+PiAgICAgdGhpcyBwcm9ncmFtIGFuZCB1c2Vj YXNlLCBzYW1lIHdpdGggdGhyZXNob2xkIGFuZCBldmVyeXRoaW5nDQo+Pj4+Pj4+ICAgICBlbHNl Lg0KPj4+Pj4+Pg0KPj4+Pj4+PiBQbHMgZXhwbGFpbiBob3cgeW91IHNlZSBpdCwgSSBtaWdodCBi ZSB3cm9uZyBmb3Igc3VyZS4NCj4+Pj4+Pg0KPj4+Pj4+IEFzIGFib3ZlOiBYRFAgaGludHMgaXMg YWJvdXQgZ2l2aW5nIFhEUCBwcm9ncmFtcyAoYW5kIEFGX1hEUCBjb25zdW1lcnMpDQo+Pj4+Pj4g YWNjZXNzIHRvIG1ldGFkYXRhIHRoYXQgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUuIFR5aW5n IHRoZSBsaWZldGltZQ0KPj4+Pj4+IG9mIHRoYXQgaGFyZHdhcmUgY29uZmlndXJhdGlvbiAoaS5l Liwgd2hpY2ggaW5mb3JtYXRpb24gdG8gcHJvdmlkZSkgdG8NCj4+Pj4+PiB0aGUgbGlmZXRpbWUg b2YgYW4gWERQIHByb2dyYW0gaXMgbm90IGEgZ29vZCBpbnRlcmZhY2U6IGZvciBvbmUgdGhpbmcs DQo+Pj4+Pj4gaG93IHdpbGwgaXQgaGFuZGxlIG11bHRpcGxlIHByb2dyYW1zPyBXaGF0IGFib3V0 IHdoZW4gWERQIGlzIG5vdCB1c2VkIGF0DQo+Pj4+Pg0KPj4+Pj4gTXVsdGlwbGUgcHJvZ3MgaXMg c3R1ZmYgSSBkaWRuJ3QgY292ZXIsIGJ1dCB3aWxsIGRvIGxhdGVyIChhcyB5b3UNCj4+Pj4+IGFs bCBzYXkgdG8gbWUsICJsZXQncyBzdGFydCB3aXRoIHNvbWV0aGluZyBzaW1wbGUiIDopKS4gQWFh YW5kDQo+Pj4+PiBtdWx0aXBsZSBYRFAgcHJvZ3MgKEknbSBub3QgdGFsa2luZyBhYm91dCBhdHRh Y2hpbmcgcHJvZ3MgaW4NCj4+Pj4+IGRpZmZlcmVuZyBtb2RlcykgaXMgbm90IGEga2VybmVsIGZl YXR1cmUsIHJhdGhlciBhIGxpYnBmIGZlYXR1cmUsDQo+Pj4+PiBzbyBJIGJlbGlldmUgaXQgc2hv dWxkIGJlIGhhbmRsZWQgdGhlcmUgbGF0ZXIuLi4NCj4+Pj4NCj4+Pj4gUmlnaHQsIGJ1dCBldmVu IGlmIHdlIGRvbid0ICppbXBsZW1lbnQqIGl0IHN0cmFpZ2h0IGF3YXkgd2Ugc3RpbGwgbmVlZA0K Pj4+PiB0byB0YWtlIGl0IGludG8gY29uc2lkZXJhdGlvbiBpbiB0aGUgZGVzaWduLiBBbmQgZXhw ZWN0aW5nIGxpYnhkcCB0bw0KPj4+PiBhcmJpdHJhdGUgYmV0d2VlbiBkaWZmZXJlbnQgWERQIHBy b2dyYW1zJyBtZXRhZGF0YSBmb3JtYXRzIHNvdW5kcyBsaWtlIGENCj4+Pj4gcm95YWwgUElUQSA6 KQ0KPj4+Pg0KPj4+Pj4+IGFsbCBidXQgeW91IHN0aWxsIHdhbnQgdG8gY29uZmlndXJlIHRoZSBz YW1lIGZlYXR1cmVzPw0KPj4+Pj4NCj4+Pj4+IFdoYXQncyB0aGUgcG9pbnQgb2YgY29uZmlndXJp bmcgbWV0YWRhdGEgd2hlbiB0aGVyZSBhcmUgbm8gcHJvZ3MNCj4+Pj4+IGF0dGFjaGVkPyBUbyBj b25maWd1cmUgaXQgb25jZSBhbmQgbm90IG9uIGV2ZXJ5IHByb2cgYXR0YWNoPyBJJ20NCj4+Pj4+ IG5vdCBzYXlpbmcgSSBkb24ndCBsaWtlIGl0LCBqdXN0IHdhbnQgdG8gY2xhcmlmeS4NCj4+Pj4N Cj4+Pj4gU2VlIGFib3ZlOiB5b3UgdHVybiBvbiB0aGUgZmVhdHVyZXMgYmVjYXVzZSB5b3Ugd2Fu dCB0aGUgc3RhY2sgdG8NCj4+Pj4gY29uc3VtZSB0aGVtLg0KPj4+Pg0KPj4+Pj4gTWF5YmUgSSBu ZWVkIG9waW5pb25zIGZyb20gc29tZSBtb3JlIHBlb3BsZSwganVzdCB0byBoYXZlIGFuDQo+Pj4+ PiBvdmVydmlldyBvZiBob3cgbW9zdCBvZiBmb2xrcyBzZWUgaXQgYW5kIHdvdWxkIGxpa2UgdG8g Y29uZmlndXJlDQo+Pj4+PiBpdC4gJ0NhdXNlIEkgaGVhcmQgZnJvbSBhdCBsZWFzdCBvbmUgb2Yg dGhlIGNvbnN1bWVycyB0aGF0DQo+Pj4+PiBsaWJwZiBBUEkgaXMgYSBwZXJmZWN0IHBsYWNlIGZv ciBIaW50cyB0byBoaW0gOikNCj4+Pj4NCj4+Pj4gV2VsbCwgYXMgYSBwcm9ncmFtIGF1dGhvciB3 aG8gd2FudHMgdG8gY29uc3VtZSBoaW50cywgeW91J2QgdXNlDQo+Pj4+IGxpYnticGYseGRwfSBB UElzIHRvIGRvIHNvIChwcm9iYWJseSBpbiB0aGUgZm9ybSBvZiBzdWl0YWJsZSBDTy1SRQ0KPj4+ PiBtYWNyb3MpLi4uDQo+Pj4+DQo+Pj4+Pj4gSW4gYWRkaXRpb24sIGluIGV2ZXJ5IG90aGVyIGNh c2Ugd2hlcmUgd2UgZG8gZHluYW1pYyBkYXRhIGFjY2VzcyAod2l0aA0KPj4+Pj4+IENPLVJFKSB0 aGUgQlBGIHByb2dyYW0gaXMgYSBjb25zdW1lciB0aGF0IG1vZGlmaWVzIGl0c2VsZiB0byBhY2Nl c3MgdGhlDQo+Pj4+Pj4gZGF0YSBwcm92aWRlZCBieSB0aGUga2VybmVsLiBJIGdldCB0aGF0IHRo aXMgaXMgaGFyZGVyIHRvIGFjaGlldmUgZm9yDQo+Pj4+Pj4gQUZfWERQLCBidXQgdGhlbiBsZXQn cyBzb2x2ZSB0aGF0IGluc3RlYWQgb2YgbWFraW5nIGEgdG90YWxseQ0KPj4+Pj4+IGluY29uc2lz dGVudCBpbnRlcmZhY2UgZm9yIFhEUC4NCj4+Pj4+DQo+Pj4+PiBJIGFsc28gc2VlIENPLVJFIG1v cmUgZml0dGluZyBhbmQgY29udmVuaWVudCB3YXkgdG8gdXNlIHRoZW0sIGJ1dA0KPj4+Pj4gZGlk bid0IG1hbmFnZSB0byBzb2x2ZSB0d28gdGhpbmdzOg0KPj4+Pj4NCj4+Pj4+IDEpIEFGX1hEUCBw cm9ncmFtcywgc28gd2hhdCB0byBkbyB3aXRoIHRoZW0/IFByZXBhcmUgcGF0Y2hlcyBmb3INCj4+ Pj4+ICAgICBMTFZNIHRvIG1ha2UgaXQgYWJsZSB0byBkbyBDTy1SRSBvbiBBRl9YRFAgcHJvZ3Jh bSBsb2FkPyBPcg0KPj4+Pj4gICAgIGp1c3QgaGFyZGNvZGUgdGhlbSBmb3IgcGFydGljdWxhciB1 c2VjYXNlcyBhbmQgTklDcz8gV2hhdCBhYm91dA0KPj4+Pj4gICAgICJnZW5lcmFsLXB1cnBvc2Ui IHByb2dyYW1zPw0KPj4+Pg0KPj4+PiBZb3UgcHJvdmlkZSBhIGxpYnJhcnkgdG8gcmVhZCB0aGUg ZmllbGRzLiBKZXNwZXIgYWN0dWFsbHkgYWxyZWFkeQ0KPj4+PiBpbXBsZW1lbnRlZCB0aGlzLCBk aWQgeW91IGxvb2sgYXQgaGlzIGNvZGU/DQo+Pj4+DQo+Pj4+IGh0dHBzOi8vZ2l0aHViLmNvbS94 ZHAtcHJvamVjdC9icGYtZXhhbXBsZXMvdHJlZS9tYXN0ZXIvQUZfWERQLWludGVyYWN0aW9uDQo+ Pj4+DQo+Pj4+IEl0IGJhc2ljYWxseSBidWlsZHMgYSBsb29rdXAgdGFibGUgYXQgbG9hZC10aW1l IHVzaW5nIEJURiBpbmZvcm1hdGlvbg0KPj4+PiBmcm9tIHRoZSBrZXJuZWwsIGtleWVkIG9uIEJU RiBJRCBhbmQgZmllbGQgbmFtZSwgcmVzb2x2aW5nIHRoZW0gaW50bw0KPj4+PiBvZmZzZXRzLiBJ dCdzIG5vdCBxdWl0ZSB0aGUgemVyby1vdmVyaGVhZCBvZiBDTy1SRSwgYnV0IGl0J3MgZmFpcmx5 DQo+Pj4+IGNsb3NlIGFuZCBjYW4gYmUgaW1wcm92ZWQgdXBvbiAoQ08tUkUgZm9yIHVzZXJzcGFj ZSBiZWluZyBvbmUgd2F5IG9mDQo+Pj4+IGRvaW5nIHRoYXQpLg0KPj4+DQo+Pj4gQWFhYWgsIHNv cnJ5LCBJIGNvbXBsZXRlbHkgbWlzc2VkIHRoYXQuIEkgdGhvdWdodCBvZiBzb21ldGhpbmcNCj4+ PiBzaW1pbGFyIGFzIHdlbGwsIGJ1dCB0aGVuIHRob3VnaHQgInZhcmlhYmxlIGZpZWxkIG9mZnNl dHMsIHRoYXQNCj4+PiB3b3VsZCBhbm5paGlsYXRlIG9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFu Y2UiLCBhbmQgb3VyIFhzayB0ZWFtDQo+Pj4gaXMgc3VwZXIgY29uY2VybmVkIGFib3V0IHBlcmZv cm1hbmNlIGhpdHMgd2hlbiB1c2luZyBIaW50cy4NCj4+Pg0KPj4+Pg0KPj4+Pj4gICAgIEFuZCBp ZiBoYXJkY29kZSwgd2hhdCdzIHRoZSBwb2ludCB0aGVuIHRvIGRvIEdlbmVyaWMgSGludHMgYXQN Cj4+Pj4+ICAgICBhbGw/IFRoZW4gYWxsIGl0IG5lZWRzIGlzIG1ha2luZyBkcml2ZXIgYnVpbGRp bmcgc29tZSBtZXRhIGluDQo+Pj4+PiAgICAgZnJvbnQgb2YgZnJhbWVzIHZpYSBvbi1vZmYgYnV0 dG9uIGFuZCB0aGF0J3MgaXQ/IFdoeSBCVEYgSUQgaW4NCj4+Pj4+ICAgICB0aGUgbWV0YSB0aGVu IGlmIGNvbnN1bWVycyB3aWxsIGFjY2VzcyBtZXRhIGhhcmRjb2RlZCAodmlhIENPLVJFDQo+Pj4+ PiAgICAgb3IgbGl0ZXJhbGx5IGhhcmRjb2RlZCwgZG9lc24ndCBtYXR0ZXIpPw0KPj4+Pg0KPj4+ PiBZb3UncmUgcXVpdGUgcmlnaHQsIHdlIGNvdWxkIHByb2JhYmx5IGltcGxlbWVudCBhbGwgdGhl IGFjY2VzcyB0bw0KPj4+PiBleGlzdGluZyAoZml4ZWQpIG1ldGFkYXRhIHdpdGhvdXQgdXNpbmcg YW55IEJURiBhdCBhbGwgLSBqdXN0IGRlZmluZSBhDQo+Pj4+IGNvbW1vbiBzdHJ1Y3QgYW5kIHNv bWUgZmxhZ3MgdG8gZGVzaWduYXRlIHdoaWNoIGZpZWxkcyBhcmUgc2V0LiBJbiBteQ0KPj4+PiBt aW5kLCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgcmVhc29ucyBmb3IgZ29pbmcgdGhlIEJURiByb3V0 ZSBpbnN0ZWFkOg0KPj4+Pg0KPj4+PiAtIFdlIGNhbiBsZXZlcmFnZSBDTy1SRSB0byBnZXQgY2xv c2UgdG8gb3B0aW1hbCBlZmZpY2llbmN5IGluIGZpZWxkDQo+Pj4+ICAgIGFjY2Vzcy4NCj4+Pj4N Cj4+Pj4gYW5kLCBtb3JlIGltcG9ydGFudGx5Og0KPj4+Pg0KPj4+PiAtIEl0J3MgaW5maW5pdGVs eSBleHRlbnNpYmxlLiBXaXRoIHRoZSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZSB0byBtYWtlDQo+ Pj4+ICAgIGl0IHJlYWxseSBlYXN5IHRvIGNvbnN1bWUgbWV0YWRhdGEgZGVzY3JpYmVkIGJ5IEJU Riwgd2UgbG93ZXIgdGhlIGJhcg0KPj4+PiAgICBmb3IgZnV0dXJlIGlubm92YXRpb24gaW4gaGFy ZHdhcmUgb2ZmbG9hZHMuIEJvdGggZm9yIGp1c3QgYWRkaW5nIG5ldw0KPj4+PiAgICBmaXhlZC1m dW5jdGlvbiBzdHVmZiB0byBoYXJkd2FyZSwgYnV0IGVzcGVjaWFsbHkgZm9yIGZ1bGx5DQo+Pj4+ ICAgIHByb2dyYW1tYWJsZSBoYXJkd2FyZS4NCj4+Pg0KPj4+IEFncmVlIDopIFRoYXQgbGlieGRw IGxvb2t1cCB0cmFuc2xhdG9yIGZpeGVkIGxvdHMgb2Ygc3R1ZmYgaW4gbXkNCj4+PiBtaW5kLg0K Pj4NCj4+IEdyZWF0ISBMb29rcyBsaWtlIHdlJ3JlIHNsb3dseSBjb252ZXJnaW5nIHRvd2FyZHMg YSBzaGFyZWQNCj4+IHVuZGVyc3RhbmRpbmcsIHRoZW4hIDopDQo+Pg0KPj4+Pj4gMikgSW4ta2Vy bmVsIG1ldGFkYXRhIGNvbnN1bWVycz8gQWxzbyBkbyBDTy1SRT8gT3RoZXJ3aXNlLCB3aXRoIG5v DQo+Pj4+PiAgICAgZ2VuZXJpYyBtZXRhZGF0YSBzdHJ1Y3R1cmUgdGhleSB3b24ndCBiZSBhYmxl IHRvIGJlbmVmaXQgZnJvbQ0KPj4+Pj4gICAgIEhpbnRzLiBCdXQgSSBndWVzcyB3ZSBzdGlsbCBu ZWVkIHRvIHByb3ZpZGUga2VybmVsIHdpdGggbWV0YT8NCj4+Pj4+ICAgICBPciBubz8NCj4+Pj4N Cj4+Pj4gSW4gdGhlIHNob3J0IHRlcm0sIEkgdGhpbmsgdGhlICJnZW5lcmljIHN0cnVjdHVyZSIg YXBwcm9hY2ggaXMgZmluZSBmb3INCj4+Pj4gbGV2ZXJhZ2luZyB0aGlzIGluIHRoZSBzdGFjay4g Qm90aCB5b3VyIGFuZCBKZXNwZXIncyBzZXJpZXMgaW5jbHVkZQ0KPj4+PiB0aGlzLCBhbmQgSSB0 aGluayB0aGF0J3MgdG90YWxseSBmaW5lLiBMb25nZXIgdGVybSwgaWYgaXQgdHVybnMgb3V0IHRv DQo+Pj4+IGJlIHVzZWZ1bCB0byBoYXZlIHNvbWV0aGluZyBtb3JlIGR5bmFtaWMgZm9yIHRoZSBz dGFjayBjb25zdW1wdGlvbiBhcw0KPj4+PiB3ZWxsLCB3ZSBjb3VsZCBleHRlbmQgaXQgdG8gYmUg Q08tUkUgYmFzZWQgYXMgd2VsbCAobW9zdCBsaWtlbHkgYnkNCj4+Pj4gaGF2aW5nIHRoZSBzdGFj ayBsb2FkIGEgInRyYW5zbGF0b3IiIEJQRiBwcm9ncmFtIG9yIHNvbWV0aGluZyBhbG9uZw0KPj4+ PiB0aG9zZSBsaW5lcykuDQo+Pj4NCj4+PiBPaCwgdGhhdCB0cmFuc2xhdG9yIHByb2cgc291bmRz IG5pY2UgQlRXIQ0KPj4NCj4+IFllYWgsIGl0J3Mgb25seSBhIHJvdWdoIGlkZWEgSmVzcGVyIGFu ZCBJIGRpc2N1c3NlZCBhdCBzb21lIHBvaW50LCBidXQgSQ0KPj4gdGhpbmsgaXQgY291bGQgaGF2 ZSBwb3RlbnRpYWwgKHNlZSBhbHNvIHBvaW50IGFib3ZlIHJlOiBtYWtpbmcgWERQIGhpbnRzDQo+ PiAqdGhlKiBzb3VyY2Ugb2YgbWV0YWRhdGEgZm9yIHRoZSB3aG9sZSBzdGFjazsgd291bGRuJ3Qg aXQgYmUgbmljZSBpZg0KPj4gZHJpdmVycyBkaWRuJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGlu dHJpY2FjaWVzIG9mIGFzc2VtYmxpbmcgU0tCcz8pLg0KPj4NCj4+IC1Ub2tlDQo+Pg0KPiANCg0K