From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 D01C9650 for ; Wed, 8 Nov 2023 01:17:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hyjV2aOB" Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1B339193 for ; Tue, 7 Nov 2023 17:17:30 -0800 (PST) Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-40839807e82so1514575e9.0 for ; Tue, 07 Nov 2023 17:17:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699406248; x=1700011048; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=c9YPgxuoMwLg76ioqZ3IgWHBoV61odditqzhqJ1hENs=; b=hyjV2aOB3i0iCsBRk42V6JghcEQUYE0FHxT+7oax7WHbtIsEHW1jOLxm9pJKWQQda/ WfwWy/PdoBvmp96jfhbn3h8fYQhQUfUF/JV/kaB49K+wlbY26CCHF/xCYyJZiY9BE0Xz UCHCe3XTxGVpaIXQ82UuLOMfhgfc5mfXanq1elPeJCtnqvb0SorJV+gGyKs8pzQX6AA1 4crELOzClhrc4AsLGPeMfZ4pljr2FfqUmg4q/IU+5TQh5+QalL4RF3AT585nTLZ8Cevf E9oXGCkvalE7gV4lVyQ8ATxi9V7Xu5RBAVSO/JMEROIKpI21NGTkpN1CD5lY2jo7Ykar BUTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699406248; x=1700011048; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c9YPgxuoMwLg76ioqZ3IgWHBoV61odditqzhqJ1hENs=; b=wGI1WXFyivepLtFog7u85CYfEsCpUlKPiyNzWXGkP/6GMNIeBpjGPibeatNF9u7EvE 25UKEy9Ha0SXfxv/2/hryJJltLqDl3wNIDpyTxZ6Y6YpSQ9ON32eiGV1bgG1UhRiHpkE fiwzPC1PFf5CzYI/6F0TwxASsT59sgtv8g4Cw32sz3zpwVu0mIooLlP6jSXwGkgwD6T8 LepzqGukXVVtGKOqyBU1ZkOhwG+6SSHJ+vrYHZxBtqdlAw+/d/r7M7S3iVkTCqOyY+/2 6Zs8KM8QXKmb2pbfvqggi1np/KabONPuFpx45e9bLJdi8YJaHXFRPT8fBIYUsjCPNSpd epBw== X-Gm-Message-State: AOJu0Yzg/fyYS6cnfsf5fb/JrBhAGL78bh29WH2KM7NgFtapF/egzpM2 94ebpNHg8Vdpz6L/FyhsuiuErVDSj1u0Dqfg6KViaaGjpok= X-Google-Smtp-Source: AGHT+IGhxgguE4IuvkgTaiWIiGJF1oidEjPSW8RiSFLlRciJgT1GG2l/my+me8cw94xtnsn9ZFLwSSIx8ppUtjARxaw= X-Received: by 2002:a05:600c:3ba7:b0:408:33ba:569a with SMTP id n39-20020a05600c3ba700b0040833ba569amr5231776wms.8.1699406248071; Tue, 07 Nov 2023 17:17:28 -0800 (PST) Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20231103212024.327833-1-hawkinsw@obs.cr> In-Reply-To: From: Alexei Starovoitov Date: Tue, 7 Nov 2023 17:17:16 -0800 Message-ID: Subject: Re: [Bpf] [PATCH v3] bpf, docs: Add additional ABI working draft base text To: Will Hawkins Cc: bpf@ietf.org, bpf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Nov 7, 2023 at 11:56=E2=80=AFAM Will Hawkins wrot= e: > > On Mon, Nov 6, 2023 at 3:38=E2=80=AFAM Alexei Starovoitov > wrote: > > > > On Sun, Nov 5, 2023 at 4:17=E2=80=AFPM Will Hawkins w= rote: > > > > > > On Sun, Nov 5, 2023 at 4:51=E2=80=AFAM Alexei Starovoitov > > > wrote: > > > > > > > > On Fri, Nov 3, 2023 at 2:20=E2=80=AFPM Will Hawkins wrote: > > > > > + > > > > > +The ABI is specified in two parts: a generic part and a processo= r-specific part. > > > > > +A pairing of generic ABI with the processor-specific ABI for a c= ertain > > > > > +instantiation of a BPF machine represents a complete binary inte= rface for BPF > > > > > +programs executing on that machine. > > > > > + > > > > > +This document is the generic ABI and specifies the parameters an= d behavior > > > > > +common to all instantiations of BPF machines. In addition, it de= fines the > > > > > +details that must be specified by each processor-specific ABI. > > > > > + > > > > > +These psABIs are the second part of the ABI. Each instantiation = of a BPF > > > > > +machine must describe the mechanism through which binary interfa= ce > > > > > +compatibility is maintained with respect to the issues highlight= ed by this > > > > > +document. However, the details that must be defined by a psABI a= re a minimum -- > > > > > +a psABI may specify additional requirements for binary interface= compatibility > > > > > +on a platform. > > > > > > > > I don't understand what you are trying to say in the above. > > > > In my mind there is only one BPF psABI and it doesn't have > > > > generic and processor parts. There is only one "processor". > > > > BPF is such a processor. > > > > > > What I was trying to say was that the document here describes a > > > generic ABI. In this document there will be areas that are specific t= o > > > different implementations and those would be considered processor > > > specific. In other words, the ubpf runtime could define those things > > > differently than the rbpf runtime which, in turn, could define those > > > things differently than the kernel's implementation. > > > > I see what you mean. There is only one BPF psABI. There cannot be two. > > ubpf can decide not to follow it, but it could only mean that > > it's non conformant and not compatible. > > Okay. That was not how I was structuring the ABI. I thought we had > decided that, as the document said, an instantiation of a machine had > to > > 1. meet the gABI > 2. specify its requirements vis a vis the psABI > 3. (optionally) describe other requirements. > > If that is not what we decided then we will have to restructure the docum= ent. This abi.rst file is the beginning of "BPF psABI" document. We probably should rename it to psabi.rst to avoid confusion. See my slides from IETF 118. I hope they explain what "BPF psABI" is for. From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 549FE65E for ; Wed, 8 Nov 2023 01:17:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ietf.org header.i=@ietf.org header.b="b+z3O8Ll"; dkim=pass (1024-bit key) header.d=ietf.org header.i=@ietf.org header.b="b+z3O8Ll"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bxGQ5tFX" Received: from mail.ietf.org (mail.ietf.org [50.223.129.194]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD4BF93 for ; Tue, 7 Nov 2023 17:17:32 -0800 (PST) Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 3A65DC1D471A for ; Tue, 7 Nov 2023 17:17:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1699406252; bh=SwRLRoAN28DJknd28WRGTtrquxRvz9bJn27TF0+9QyQ=; h=References:In-Reply-To:From:Date:To:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe; b=b+z3O8Ll8Wv5Xkk48fmsFIpxH6CzGCtN4UcbxQTZlSsWHhGZcDBzaimZTx208cbM3 N/NLVKOQuujUZ+v5zOXXLE5AgMeZcN8Bed5R76uWsnA1YP1L/gjxZl8G5VHKNCniUp C37E19R00vVan7VH6xeuJwFSzPYJT3769uF4H6JI= X-Mailbox-Line: From bpf-bounces@ietf.org Tue Nov 7 17:17:32 2023 Received: from ietfa.amsl.com (localhost [IPv6:::1]) by ietfa.amsl.com (Postfix) with ESMTP id 0BD97C18E52E; Tue, 7 Nov 2023 17:17:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1699406252; bh=SwRLRoAN28DJknd28WRGTtrquxRvz9bJn27TF0+9QyQ=; h=References:In-Reply-To:From:Date:To:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe; b=b+z3O8Ll8Wv5Xkk48fmsFIpxH6CzGCtN4UcbxQTZlSsWHhGZcDBzaimZTx208cbM3 N/NLVKOQuujUZ+v5zOXXLE5AgMeZcN8Bed5R76uWsnA1YP1L/gjxZl8G5VHKNCniUp C37E19R00vVan7VH6xeuJwFSzPYJT3769uF4H6JI= Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E28F8C18E52D for ; Tue, 7 Nov 2023 17:17:30 -0800 (PST) X-Virus-Scanned: amavisd-new at amsl.com X-Spam-Flag: NO X-Spam-Score: -7.108 X-Spam-Level: Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2zg_D-pQEQif for ; Tue, 7 Nov 2023 17:17:30 -0800 (PST) Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7C787C18E1A2 for ; Tue, 7 Nov 2023 17:17:30 -0800 (PST) Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-4081ccf69dcso1456575e9.0 for ; Tue, 07 Nov 2023 17:17:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699406248; x=1700011048; darn=ietf.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=c9YPgxuoMwLg76ioqZ3IgWHBoV61odditqzhqJ1hENs=; b=bxGQ5tFXer5tFK3cJ7McvAn3VZWomx+Zyi71+7NlFSRD08P7jLAgbVLf9CXU7CJJNC glHcD5EIbYShlnbXdah50s1Tjb6AHWWFqnduZzEj2W6hhrlfRKw574ZTeLma5C7Mxv1+ BfdJsedOzwkz7d556VO1MlXDX45ADMa5ajRbL6huYUWpeb+7odW9FEOUbOv3/6AYcPpk 1tkvNoUYhTtSyndrj7frLTTbDlSaYm39/d1x+Ju18yVxD3ZYJVpdbtlT9UaX1afllLs4 t5VY7LF68rKT106BNQB6ikJcfe7/yhgmY4kyK19VwF1aoXaSZEmgvn9vvrYRwaQvF+63 Jffg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699406248; x=1700011048; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c9YPgxuoMwLg76ioqZ3IgWHBoV61odditqzhqJ1hENs=; b=tvhuSSrqW/Ss/Rxw8CwcsE2GCFPZiEoNFbvHMwqAlNsC/2xMZB8vaTuYPF+k2v0741 xofagwFbYO7KJLU+/jEkgy8C1FIFEOTRCUj5Qbf7o0/zziWyM9SoPKIERfL760b0kuyq oB57YEgzvxvp/wwzNzIihxy+XOqBNUeM0Bv2coBXyn+js6CB1rsycANN7MLv3ih9MTWr 0vh7cqF2KFEiLs8D/s91lI0Oy24wBxjUx8ALkvswwqC5EyU5owD3TRwq9OdXulQgxyMI /RS1VRtaZ13oPvwrI0efv1AlxxXwCYO/pd0/U1FaMBKkWs7FxNmYPe1dRjjVL3p4hM8j yg0g== X-Gm-Message-State: AOJu0YwCHatM5SW61S90QclQMUSrHiBWFzwE3TkrRJTN1Q/e4iQGhW7N uJPBuX6iszGD60VG7NTwWjqbf5wDdp5KkkbYrMI= X-Google-Smtp-Source: AGHT+IGhxgguE4IuvkgTaiWIiGJF1oidEjPSW8RiSFLlRciJgT1GG2l/my+me8cw94xtnsn9ZFLwSSIx8ppUtjARxaw= X-Received: by 2002:a05:600c:3ba7:b0:408:33ba:569a with SMTP id n39-20020a05600c3ba700b0040833ba569amr5231776wms.8.1699406248071; Tue, 07 Nov 2023 17:17:28 -0800 (PST) Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20231103212024.327833-1-hawkinsw@obs.cr> In-Reply-To: From: Alexei Starovoitov Date: Tue, 7 Nov 2023 17:17:16 -0800 Message-ID: To: Will Hawkins Cc: bpf@ietf.org, bpf Archived-At: Subject: Re: [Bpf] [PATCH v3] bpf, docs: Add additional ABI working draft base text X-BeenThere: bpf@ietf.org X-Mailman-Version: 2.1.39 Precedence: list List-Id: Discussion of BPF/eBPF standardization efforts within the IETF List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: bpf-bounces@ietf.org Sender: "Bpf" Message-ID: <20231108011716.Hgn4_vr24CV9i58IeR3_AScbah7PuhavnLeByqbuEGA@z> T24gVHVlLCBOb3YgNywgMjAyMyBhdCAxMTo1NuKAr0FNIFdpbGwgSGF3a2lucyA8aGF3a2luc3dA b2JzLmNyPiB3cm90ZToKPgo+IE9uIE1vbiwgTm92IDYsIDIwMjMgYXQgMzozOOKAr0FNIEFsZXhl aSBTdGFyb3ZvaXRvdgo+IDxhbGV4ZWkuc3Rhcm92b2l0b3ZAZ21haWwuY29tPiB3cm90ZToKPiA+ Cj4gPiBPbiBTdW4sIE5vdiA1LCAyMDIzIGF0IDQ6MTfigK9QTSBXaWxsIEhhd2tpbnMgPGhhd2tp bnN3QG9icy5jcj4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIFN1biwgTm92IDUsIDIwMjMgYXQgNDo1 MeKAr0FNIEFsZXhlaSBTdGFyb3ZvaXRvdgo+ID4gPiA8YWxleGVpLnN0YXJvdm9pdG92QGdtYWls LmNvbT4gd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBPbiBGcmksIE5vdiAzLCAyMDIzIGF0IDI6MjDi gK9QTSBXaWxsIEhhd2tpbnMgPGhhd2tpbnN3QG9icy5jcj4gd3JvdGU6Cj4gPiA+ID4gPiArCj4g PiA+ID4gPiArVGhlIEFCSSBpcyBzcGVjaWZpZWQgaW4gdHdvIHBhcnRzOiBhIGdlbmVyaWMgcGFy dCBhbmQgYSBwcm9jZXNzb3Itc3BlY2lmaWMgcGFydC4KPiA+ID4gPiA+ICtBIHBhaXJpbmcgb2Yg Z2VuZXJpYyBBQkkgd2l0aCB0aGUgcHJvY2Vzc29yLXNwZWNpZmljIEFCSSBmb3IgYSBjZXJ0YWlu Cj4gPiA+ID4gPiAraW5zdGFudGlhdGlvbiBvZiBhIEJQRiBtYWNoaW5lIHJlcHJlc2VudHMgYSBj b21wbGV0ZSBiaW5hcnkgaW50ZXJmYWNlIGZvciBCUEYKPiA+ID4gPiA+ICtwcm9ncmFtcyBleGVj dXRpbmcgb24gdGhhdCBtYWNoaW5lLgo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gK1RoaXMgZG9jdW1l bnQgaXMgdGhlIGdlbmVyaWMgQUJJIGFuZCBzcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgYW5kIGJl aGF2aW9yCj4gPiA+ID4gPiArY29tbW9uIHRvIGFsbCBpbnN0YW50aWF0aW9ucyBvZiBCUEYgbWFj aGluZXMuIEluIGFkZGl0aW9uLCBpdCBkZWZpbmVzIHRoZQo+ID4gPiA+ID4gK2RldGFpbHMgdGhh dCBtdXN0IGJlIHNwZWNpZmllZCBieSBlYWNoIHByb2Nlc3Nvci1zcGVjaWZpYyBBQkkuCj4gPiA+ ID4gPiArCj4gPiA+ID4gPiArVGhlc2UgcHNBQklzIGFyZSB0aGUgc2Vjb25kIHBhcnQgb2YgdGhl IEFCSS4gRWFjaCBpbnN0YW50aWF0aW9uIG9mIGEgQlBGCj4gPiA+ID4gPiArbWFjaGluZSBtdXN0 IGRlc2NyaWJlIHRoZSBtZWNoYW5pc20gdGhyb3VnaCB3aGljaCBiaW5hcnkgaW50ZXJmYWNlCj4g PiA+ID4gPiArY29tcGF0aWJpbGl0eSBpcyBtYWludGFpbmVkIHdpdGggcmVzcGVjdCB0byB0aGUg aXNzdWVzIGhpZ2hsaWdodGVkIGJ5IHRoaXMKPiA+ID4gPiA+ICtkb2N1bWVudC4gSG93ZXZlciwg dGhlIGRldGFpbHMgdGhhdCBtdXN0IGJlIGRlZmluZWQgYnkgYSBwc0FCSSBhcmUgYSBtaW5pbXVt IC0tCj4gPiA+ID4gPiArYSBwc0FCSSBtYXkgc3BlY2lmeSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50 cyBmb3IgYmluYXJ5IGludGVyZmFjZSBjb21wYXRpYmlsaXR5Cj4gPiA+ID4gPiArb24gYSBwbGF0 Zm9ybS4KPiA+ID4gPgo+ID4gPiA+IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgdHJ5 aW5nIHRvIHNheSBpbiB0aGUgYWJvdmUuCj4gPiA+ID4gSW4gbXkgbWluZCB0aGVyZSBpcyBvbmx5 IG9uZSBCUEYgcHNBQkkgYW5kIGl0IGRvZXNuJ3QgaGF2ZQo+ID4gPiA+IGdlbmVyaWMgYW5kIHBy b2Nlc3NvciBwYXJ0cy4gVGhlcmUgaXMgb25seSBvbmUgInByb2Nlc3NvciIuCj4gPiA+ID4gQlBG IGlzIHN1Y2ggYSBwcm9jZXNzb3IuCj4gPiA+Cj4gPiA+IFdoYXQgSSB3YXMgdHJ5aW5nIHRvIHNh eSB3YXMgdGhhdCB0aGUgZG9jdW1lbnQgaGVyZSBkZXNjcmliZXMgYQo+ID4gPiBnZW5lcmljIEFC SS4gSW4gdGhpcyBkb2N1bWVudCB0aGVyZSB3aWxsIGJlIGFyZWFzIHRoYXQgYXJlIHNwZWNpZmlj IHRvCj4gPiA+IGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgYW5kIHRob3NlIHdvdWxkIGJlIGNv bnNpZGVyZWQgcHJvY2Vzc29yCj4gPiA+IHNwZWNpZmljLiBJbiBvdGhlciB3b3JkcywgdGhlIHVi cGYgcnVudGltZSBjb3VsZCBkZWZpbmUgdGhvc2UgdGhpbmdzCj4gPiA+IGRpZmZlcmVudGx5IHRo YW4gdGhlIHJicGYgcnVudGltZSB3aGljaCwgaW4gdHVybiwgY291bGQgZGVmaW5lIHRob3NlCj4g PiA+IHRoaW5ncyBkaWZmZXJlbnRseSB0aGFuIHRoZSBrZXJuZWwncyBpbXBsZW1lbnRhdGlvbi4K PiA+Cj4gPiBJIHNlZSB3aGF0IHlvdSBtZWFuLiBUaGVyZSBpcyBvbmx5IG9uZSBCUEYgcHNBQkku IFRoZXJlIGNhbm5vdCBiZSB0d28uCj4gPiB1YnBmIGNhbiBkZWNpZGUgbm90IHRvIGZvbGxvdyBp dCwgYnV0IGl0IGNvdWxkIG9ubHkgbWVhbiB0aGF0Cj4gPiBpdCdzIG5vbiBjb25mb3JtYW50IGFu ZCBub3QgY29tcGF0aWJsZS4KPgo+IE9rYXkuIFRoYXQgd2FzIG5vdCBob3cgSSB3YXMgc3RydWN0 dXJpbmcgdGhlIEFCSS4gSSB0aG91Z2h0IHdlIGhhZAo+IGRlY2lkZWQgdGhhdCwgYXMgdGhlIGRv Y3VtZW50IHNhaWQsIGFuIGluc3RhbnRpYXRpb24gb2YgYSBtYWNoaW5lIGhhZAo+IHRvCj4KPiAx LiBtZWV0IHRoZSBnQUJJCj4gMi4gc3BlY2lmeSBpdHMgcmVxdWlyZW1lbnRzIHZpcyBhIHZpcyB0 aGUgcHNBQkkKPiAzLiAob3B0aW9uYWxseSkgZGVzY3JpYmUgb3RoZXIgcmVxdWlyZW1lbnRzLgo+ Cj4gSWYgdGhhdCBpcyBub3Qgd2hhdCB3ZSBkZWNpZGVkIHRoZW4gd2Ugd2lsbCBoYXZlIHRvIHJl c3RydWN0dXJlIHRoZSBkb2N1bWVudC4KClRoaXMgYWJpLnJzdCBmaWxlIGlzIHRoZSBiZWdpbm5p bmcgb2YgIkJQRiBwc0FCSSIgZG9jdW1lbnQuCldlIHByb2JhYmx5IHNob3VsZCByZW5hbWUgaXQg dG8gcHNhYmkucnN0IHRvIGF2b2lkIGNvbmZ1c2lvbi4KU2VlIG15IHNsaWRlcyBmcm9tIElFVEYg MTE4LiBJIGhvcGUgdGhleSBleHBsYWluIHdoYXQgIkJQRiBwc0FCSSIgaXMgZm9yLgoKLS0gCkJw ZiBtYWlsaW5nIGxpc3QKQnBmQGlldGYub3JnCmh0dHBzOi8vd3d3LmlldGYub3JnL21haWxtYW4v bGlzdGluZm8vYnBmCg==