Date: Fri, 5 Jul 2024 19:05:52 +0200 From: Mario Marietto <marietto2008@gmail.com> To: Nimbly2329 <hjlftdygaqf@use.startmail.com> Cc: Dmitry Salychev <dsl@freebsd.org>, freebsd-drivers@freebsd.org Subject: Re: Project Proposal: An Standard Driver Virtual Machine Message-ID: <CA%2B1FSijU75qV4qbBX3EbbN=QtGm4Q9ET0%2BWXu_a%2BGx3LK1MfZQ@mail.gmail.com> In-Reply-To: <CA%2B1FSigHtNONn6600hiPhCA5FifvZYDcZz1szUZ0k9UtA0aCtg@mail.gmail.com> References: <171996207708.31.7910752540216367279@startmail.com> <86ed8aalkh.fsf@peasant.bootbsd.com> <172003689512.28.10920198816573547978@startmail.com> <CA%2B1FSigHtNONn6600hiPhCA5FifvZYDcZz1szUZ0k9UtA0aCtg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--0000000000009ecac4061c8315bc Content-Type: multipart/alternative; boundary="0000000000009ecac4061c8315bb" --0000000000009ecac4061c8315bb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello. @Nimbly2329 <hjlftdygaqf@use.startmail.com> : it's not possible to use loadable kernel drivers between different versions of the FreeBSD kernels. Check the image below : [image: kldload-vmm.ko.png] On Wed, Jul 3, 2024 at 10:09=E2=80=AFPM Mario Marietto <marietto2008@gmail.= com> wrote: > ---> it does allow to use loadable kernel drivers between different > version of the FreeBSD kernel > > Can someone elaborate more on this ? Because it happened yesterday that I > tried to load the vmm.ko module present in my FreeBSD 14.0-RELEASE system > to FreeBSD 14.1-RELEASE system but it hasn't been accepted. The same > happened with the ZFS module. > > On Wed, Jul 3, 2024 at 10:01=E2=80=AFPM Nimbly2329 <hjlftdygaqf@use.start= mail.com> > wrote: > >> >> Nimbly2329 <hjlftdygaqf@use.startmail.com> writes:> Motivation:>> In is = not a obscure fact that driver development is the hardest part in both main= taining and creating an operating system, and >> > that FreeBSD struggles to keep the pace with Linux and Windows. And is= the the number one cause that there is no way of >> > developing novel and viable operating systems. >> > >> > Plan: >> > >> > (1) We and maybe with the cooperation of another public source kernel/= OS projects develop a Standard Driver Virtual >> > Machine, (2) and then we manage to get it implemented in at least Linu= x, so that Linus et al. promote that all new drivers >> > shall be written against the Standard Driver Virtual Machine. (3) Fina= lly profit in little to no effort in porting drivers from Linux. >> >> I wish we had more Spare Time Investment proposals instead of project >> ones :) >> >> Regards, >> Dmitry >> >> -- https://wiki.freebsd.org/DmitrySalychev >> >> >> I have reading some resources regarding FreeBSD drivers, looks like >> FreeBSD has a superior system to Linux's Dynamic Kernel Module System >> (dmks), for loading drivers, as by the architecture book ( >> https://download.freebsd.org/doc/en/books/arch-handbook/arch-handbook_en= .pdf, >> or in other of the sources at freebsd.org I don't remember exactly) it >> does allow to use loadable kernel drivers between different version of = the >> FreeBSD kernel, giving both backwards and forward compatibility by desig= n, >> through an stable Binary Application Interface. >> >> >> Therefore if where for only being able to write a loadable kernel >> drivers, that would be enough, but it also has to work with static linke= d >> drivers. >> >> >> Does is possible to statically link an otherwise loadable kernel driver >> final binary? >> >> There is a way to implement an device detection from userspace?, so that >> device drivers can be loaded as needed. >> >> >> If boat of those are possible, then there is an even simpler plan, and >> that is to make Linux implement the FreeBSD's Driver ABI, and my proposa= l >> also is simpler. >> >> >> Regards, >> >> Nimbly2329 >> >> >> By the way where is the documentation of the FreeBSD's driver ABI? >> > > > -- > Mario. > --=20 Mario. --0000000000009ecac4061c8315bb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Hello.</div><div><br></div><div><a class=3D"gmail_plu= sreply" id=3D"plusReplyChip-0" href=3D"mailto:hjlftdygaqf@use.startmail.com= " tabindex=3D"-1">@Nimbly2329</a> : it's not possible to use loadable k= ernel drivers between different versions of the FreeBSD kernels. Check the = image below :</div><div><br></div><div><img src=3D"cid:ii_ly8y4ica0" alt=3D= "kldload-vmm.ko.png" width=3D"575" height=3D"452"><br></div></div><br><div = class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Jul 3, = 2024 at 10:09=E2=80=AFPM Mario Marietto <<a href=3D"mailto:marietto2008@= gmail.com">marietto2008@gmail.com</a>> wrote:<br></div><blockquote class= =3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg= b(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div>---> it=20 does allow to use loadable kernel drivers=C2=A0 between different version o= f=20 the FreeBSD kernel</div><div><br></div><div>Can someone elaborate more on t= his ? Because it happened yesterday that I tried to load the vmm.ko module = present in my FreeBSD 14.0-RELEASE system to FreeBSD 14.1-RELEASE system bu= t it hasn't been accepted. The same happened with the ZFS module. <br><= /div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_a= ttr">On Wed, Jul 3, 2024 at 10:01=E2=80=AFPM Nimbly2329 <<a href=3D"mail= to:hjlftdygaqf@use.startmail.com" target=3D"_blank">hjlftdygaqf@use.startma= il.com</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"m= argin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left= :1ex"><div><span style=3D"font-family:arial,helvetica,sans-serif"><span sty= le=3D"color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span><= /span><span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D= "color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span= ><span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"colo= r:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span><spa= n style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"font-size= :medium"><span style=3D"color:rgb(59,67,92)"></span></span></span><br></div= ><blockquote><pre id=3D"m_-4122716595978511451m_-7981900796853909745body.mi= me.1"><span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D= "color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span><span = style=3D"color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></spa= n></span>Nimbly2329 <<a href=3D"mailto:hjlftdygaqf@use.startmail.com" ta= rget=3D"_blank">hjlftdygaqf@use.startmail.com</a>> writes: <span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"color= :rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span> <span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"color= :rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span>> = Motivation: <span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"color= :rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span>> <span style=3D"font-family:arial,helvetica,sans-serif"><span style=3D"color= :rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span>> = In is not a obscure fact that driver development is the hardest part in bot= h maintaining and creating an <span style=3D"font-family:arial,helvetica,sa= ns-serif"><span style=3D"color:rgb(59,67,92)"><span style=3D"font-size:medi= um"></span></span><span style=3D"color:rgb(59,67,92)"><span style=3D"font-s= ize:medium"></span></span><span style=3D"color:rgb(59,67,92)"><span style= =3D"font-size:medium"></span></span><span style=3D"color:rgb(59,67,92)"><sp= an style=3D"font-size:medium"></span></span><span style=3D"color:rgb(59,67,= 92)"><span style=3D"font-size:medium"></span></span><span style=3D"color:rg= b(59,67,92)"><span style=3D"font-size:medium"></span></span><span style=3D"= color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span><span s= tyle=3D"color:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span= ><span style=3D"color:rgb(59,67,92)"><span style=3D"font-size:medium"></spa= n></span><span style=3D"color:rgb(59,67,92)"><span style=3D"font-size:mediu= m"></span></span><span style=3D"color:rgb(59,67,92)"><span style=3D"font-si= ze:medium"></span></span><span style=3D"color:rgb(59,67,92)"><span style=3D= "font-size:medium"></span></span><span style=3D"color:rgb(59,67,92)"><span = style=3D"font-size:medium"></span></span><span style=3D"color:rgb(59,67,92)= "><span style=3D"font-size:medium"></span></span><span style=3D"color:rgb(5= 9,67,92)"><span style=3D"font-size:medium"></span></span><span style=3D"col= or:rgb(59,67,92)"><span style=3D"font-size:medium"></span></span></span>ope= rating system, and > that FreeBSD struggles to keep the pace with Linux and Windows. And is= the the number one cause that there is no way of > developing novel and viable operating systems. > > Plan: > > (1) We and maybe with the cooperation of another public source kernel/= OS projects develop a Standard Driver Virtual > Machine, (2) and then we manage to get it implemented in at least Linu= x, so that Linus et al. promote that all new drivers > shall be written against the Standard Driver Virtual Machine. (3) Fina= lly profit in little to no effort in porting drivers from Linux. I wish we had more Spare Time Investment proposals instead of project ones :) Regards, Dmitry --=20 <a href=3D"https://wiki.freebsd.org/DmitrySalychev" target=3D"_blank">https= ://wiki.freebsd.org/DmitrySalychev</a> <br></pre></blockquote><p style=3D"margin:0px;color:rgb(59,67,92);font-fami= ly:arial,helvetica;font-size:medium">I have reading some resources regarding FreeBSD drivers, looks like=20 FreeBSD has a superior system to Linux's Dynamic Kernel Module System= =20 (dmks), for loading drivers, as by the architecture book (<a href=3D"https:= //download.freebsd.org/doc/en/books/arch-handbook/arch-handbook_en.pdf" rel= =3D"noopener noreferrer" target=3D"_blank">https://download.freebsd.org/doc= /en/books/arch-handbook/arch-handbook_en.pdf</a>, or in other of the sources at <a href=3D"http://freebsd.org" target=3D"_bl= ank">freebsd.org</a> I don't remember exactly) it=20 does allow to use loadable kernel drivers=C2=A0 between different version o= f=20 the FreeBSD kernel, giving both backwards and forward compatibility by=20 design, through an stable Binary Application Interface.<br></p><p style=3D"= margin:0px;color:rgb(59,67,92);font-family:arial,helvetica;font-size:medium= "><br></p><p style=3D"margin:0px;color:rgb(59,67,92);font-family:arial,helv= etica;font-size:medium">Therefore if where for only being able to write a loadable kernel drivers, that=20 would be enough, but it also has to work with static linked drivers.<br></p= ><p style=3D"margin:0px;color:rgb(59,67,92);font-family:arial,helvetica;fon= t-size:medium"><br></p><p style=3D"margin:0px;color:rgb(59,67,92);font-fami= ly:arial,helvetica;font-size:medium">Does is possible to statically link an= otherwise loadable kernel driver final binary?<br></p><p style=3D"margin:0= px;color:rgb(59,67,92);font-family:arial,helvetica;font-size:medium">There = is a way to implement an device detection from userspace?, so that device d= rivers can be loaded as needed.<br></p><p style=3D"margin:0px;color:rgb(59,= 67,92);font-family:arial,helvetica;font-size:medium"><br></p><p style=3D"ma= rgin:0px;color:rgb(59,67,92);font-family:arial,helvetica;font-size:medium">= If boat of those are possible, then there is an even simpler plan, and=20 that is to make Linux implement the FreeBSD's Driver ABI, and my=20 proposal also is simpler.<br></p><p style=3D"margin:0px;color:rgb(59,67,92)= ;font-family:arial,helvetica;font-size:medium"><br></p><p style=3D"margin:0= px;color:rgb(59,67,92);font-family:arial,helvetica;font-size:medium">Regard= s,<br></p><p style=3D"margin:0px;color:rgb(59,67,92);font-family:arial,helv= etica;font-size:medium">Nimbly2329<br></p><p style=3D"margin:0px;color:rgb(= 59,67,92);font-family:arial,helvetica;font-size:medium"><br></p><p style=3D= "margin:0px;color:rgb(59,67,92);font-family:arial,helvetica;font-size:mediu= m">By the way where is the documentation of the FreeBSD's driver ABI?<b= r></p> </blockquote></div><br clear=3D"all"><br><span class=3D"gmail_signature_pre= fix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature">Mario.<br></d= iv> </blockquote></div><br clear=3D"all"><br><span class=3D"gmail_signature_pre= fix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature">Mario.<br></d= iv> --0000000000009ecac4061c8315bb-- --0000000000009ecac4061c8315bc Content-Type: image/png; name="kldload-vmm.ko.png" Content-Disposition: inline; filename="kldload-vmm.ko.png" Content-Transfer-Encoding: base64 Content-ID: <ii_ly8y4ica0> X-Attachment-Id: ii_ly8y4ica0 iVBORw0KGgoAAAANSUhEUgAABDgAAANRCAIAAACJLpvEAAAA0GVYSWZJSSoACAAAAAoAAAEEAAEA AAA4BAAAAQEEAAEAAABRAwAAAgEDAAMAAACGAAAAEgEDAAEAAAABAAAAGgEFAAEAAACMAAAAGwEF AAEAAACUAAAAKAEDAAEAAAADAAAAMQECAA0AAACcAAAAMgECABQAAACqAAAAaYcEAAEAAAC+AAAA AAAAAAgACAAIAJ0EAAAZAAAAnQQAABkAAABHSU1QIDIuMTAuMzgAADIwMjQ6MDc6MDUgMTg6NDc6 NDAAAQABoAMAAQAAAAEAAAAAAAAAZwQwGwAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVf U0tFKh3sIOIQoTq1i4o41ioUoUKoFVp1MLn0C5q0JCkujoJrwcGPxaqDi7OuDq6CIPgB4uzgpOgi Jf4vKbSI8eC4H+/uPe7eAUKryjSzLwFoumVkUkkxl18Vg68IIoAwxhCTmVmfk6Q0PMfXPXx8vYvz LO9zf45BtWAywCcSJ1jdsIg3iGc2rTrnfeIIK8sq8TlxzKALEj9yXXH5jXPJYYFnRoxsZp44QiyW eljpYVY2NOJp4qiq6ZQv5FxWOW9x1qoN1rknf2GooK8sc53mKFJYxBIkiFDQQAVVWIjTqpNiIkP7 SQ//iOOXyKWQqwJGjgXUoEF2/OB/8Ltbszg16SaFkkDgxbY/xoHgLtBu2vb3sW23TwD/M3Cld/21 FjD7SXqzq0WPgPA2cHHd1ZQ94HIHGH6qy4bsSH6aQrEIvJ/RN+WBoVtgYM3trbOP0wcgS12lb4CD Q2CiRNnrHu/u7+3t3zOd/n4AoUdyuWI52n0AAA12aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8 P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4 bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1F eGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt cmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxu czp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0 PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4 bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczpkYz0iaHR0cDov L3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRv YmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAv MS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjQwNjI2ZjNjLWQ5ODYt NGI4ZC1hMmE4LTk3OWM2MjEzMDlkMSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxZDE3 YTFlOS1hNjdlLTQ3OTktOGZkZC01NzljMzVkMjhjYjEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1l bnRJRD0ieG1wLmRpZDo5ZGE2YmQ1ZS01ZTVhLTQ5NWEtYWRhMS1mYzRkMTBjNTQ2ZjAiCiAgIEdJ TVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IlVuaXgiCiAgIEdJTVA6VGltZVN0YW1wPSIx NzIwMTk0NDYyNTUwMDgzIgogICBHSU1QOlZlcnNpb249IjIuMTAuMzgiCiAgIGRjOkZvcm1hdD0i aW1hZ2UvcG5nIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJ TVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyNDowNzowNVQxODo0Nzo0MCswMzowMCIK ICAgeG1wOk1vZGlmeURhdGU9IjIwMjQ6MDc6MDVUMTg6NDc6NDArMDM6MDAiPgogICA8eG1wTU06 SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJz YXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1w LmlpZDplY2Y1Nzg1YS0xMTZjLTQyOTgtYWQxMC0zZGQ0OTkyNGFkMmIiCiAgICAgIHN0RXZ0OnNv ZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoVW5peCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDct MDVUMTg6NDc6NDIrMDM6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5Pgog IDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3 Ij8+yWmXrwAAAAlwSFlzAAASdAAAEnQB3mYfeAAAAAd0SU1FB+gHBQ8vKnHGqesAACAASURBVHja 7d1btqI6uwBQl8OO0XKbVufB8zvcyiXknjDn0yoLgVwI+SQhtxsAAAAAAAAAAAAAAAA093w+n8+n fAAAAHK5ywIAAECgAgAAcOAv+ptbw72WZZGtAABAA5/zUrb+BgAAiBMz9OsViqw+OXl9KFYBAABS PLLv0dAvAAAgkcn0AACAQAUAAECgAgAAXCJQMWMeAAAoyjoqAADAjKyjAgAA5JV5jopRYQAAQHeB CgAAgEAFAAAQqAAAAPQZqJgxDwAAdBeo7MyYf33oDcUAAEAK66gAAAAzMhIMAADIy2R6AABAoAIA AAAAAAAAAAAAAAAAAAAAAACcZx0VAAAgL68nBgAABCoAAABH/qK/uTXca1kW2QoAADTwOS9l628A AIA4MUO/XqHI6pOT14diFQAAIMUj+x4N/QIAABKZTA8AAAhUAAAABCoAAMAlAhUz5gEAgKKsowIA AMzIOioAAEBemeeoGBUGAAB0F6gAAAAIVAAAAIEKAABAn4GKGfMAAEB3gcrOjPnXh95QDAAApLCO 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 rHXhOV8iQ9oujiFKEaXMcQLdDk+IOM+J2+T+71yilKsHKp8Vq9vr7XWSv8OpL9VA9PmQl/pR6wRF ptYRHsGudnpC7gin9tk2RfTfE5i7Te42l1xHApVhYhUXf7m76RyFXm79n35SNM11epiEUWYR4Cp2 9CvXJX2nOrkkey/lYDK9CPU6UYpCVxMaJkGtA7TJcgmCApXSHYj057Nf760buupnf4FP9CEKFXqF BCJWQS2a446AcgeOA5Wi3Vb5HpIt4SsQlXjNf5OjZ6w8q+cZGDKdSntiGBZ4PqtHSc/5tqWZWOuq BcBtjz5Ku9T2eh/lBlS6rahfkztpQyqnffo2OVeeV8sl7fzEHocdiMNFkXa6HTtbZnnp9bsOdfsj SsjKfTtvxojeMj1jb2trJ1U4eshZpWwZPgOvdNrLpSj96PUvqBFr3erRP7cc+ifelJz//ErpqyP8 jhCxz/DSPNzy7NFD2qVcRx+6DUks92ppb1JG1bo3ndS68BPu5y7DoXtItcjerCj4wEwOX/up0Mon X9dtnaOnV8VCqytmT3vNFNXZ53Vq3RUasYi0Z8wWM+n7v95HuTpGSft8rU3b+2b4V67czgP98lQX AKBbVqY/3bXNHusDAABf7rIAAADojScq53hgAgAAFXiiAgAAAAAAAAAAAAAAAGT1fD6fz6d8AACg LZPpAQCA7vzn9cSvn9KXZQn88udP7+Hf2j9Wyj5LOJsnF5E9W5T7fLVuJxWHT+2+vrW6fUr+uK5L 5ElvV/Ho59m23l6hTZ6+pXWHukjLcKFA5axXQeYdKVRin/RPuU/c4gdGI6duiq8xiu4lrmKtjVwC dX5ihn5Bj138obvgGRv6rdxwRwEAgQrAtQItgFEsy6K9ZWIPWcBXkycT9PJVIQBgjEAlsfNUYnhG +OTaxC2rdSvzpmgnLbkmy37+s1rftJNy7yd6+fqv/bR87iF8y57zpE5WR0zlz9IynC2jvHU+vNaV u4pb7fMzgdHtbYV2qVwZjdImt23nw+tGeF2KPoGzqS5RN6Lbz/BcOpuiEq0N3QUqWe5JgffUxIth dXLt6qF/tyxxnm1TdGrLQF+NReWrfb5yL9S3WC2m1eSHb3nxKKXhVP7AMgo/z4HauohcyltGIZfk 9O1St2lvW+fP1uQSN83AqXqFro4S7WdgLqXUJS9iGc69SZRS4s4RPrn2d8s+30WbkqL0Lfvsm85U 7pV1WEmea5q0Kqfusj1cR18nEH6eo7d1JSp89ijlIu1S27S3rfNn095bmWa/4rK0nym5FF7uXsQy nEf9DgFnrz2uYOdyW5bl1M+E41bsw9+6akYpoEqgLtVsP11xnAhUprlzF42bm+SPXwLk0sT38spj J24lh2Qw9PVebhC/MhKliFI0myQFKpNFKf2P9L1yiuTSzS/67bJIzrvenae0o/1kpEBl+ihFijSd w/l91HCpyiBKma80ZyrEhnOrLt4mi3P6L9a2ZaSGzBmo7I++AHSXm4RqFcI/Bi1KKVKXqJ/5Ie1n 2zJSQyZw3ylakSgwd3dEWweg/WSwQEX9CxT4QlXUkJ0NAjvin5ekhzAZr80SbZ2WARCrQMFARf0T CMFFKra2DkD7yWCBSnr9q7mM1+9vzKMsg1giRddpCsct99v5ByOfJzz045T00syeCasHGn35tt6u jp19RseufbbevymabwHftrWuRM6XSPuVb9Alrve2rQ1N/IVcY+EvFtxZ/WCnJuXaZ+LRT51n9lYp b4p2TizXOa82SRmT33O55wpFIsrifbYhhbvzz/Ats9TkW/CbSRPLPTHnd9ZXznj0uMpzWEbNr47E O0JKduU9z7PFl1jnE3O+UAs2RJtcIufz3rWLhi4pNTm9kU9pP1fbrpCTOZuiU61NYJ0HACCpC+s3 Y2ACd1kAAAD05iELgB2Hv8t6OA4AAADsMe4LmMafLACAQWOS1c895wQAAAAAAAAAAABgVObtAQAA eVlHBQAAEKgAAAAciX89sbciAgAAffmcl7L1NwAAQJyYoV+vUGT1ycnrQ7EKAACQ4pF9j4Z+AQAA iUymBwAABCoAAAACFQAA4BKBihnzAABAUdZRAQAAZmQdFQAAIK/Mc1SMCgMAALoLVAAAAAQqAACA QAUAAKDPQMWMeQAAoLtAZWfG/OtDbygGAABSWEcFAACYkZFgAABAXibTAwAAAhUAAAAAAAAAAAAA AACm89fDSYS/NMy7jwEA4ApMpgcAAGYMVKyjAgAAdBeoAAAACFQAAIDJPaK/+TXc6/1P890BAIBE kU9UXmHJsizvsOT9t/kqAABAg0DlHaX8/pdYBQAASPfIvkdDvwAAgEQm0wMAAAIVAAAAgQoAAHCJ QMWMeQAAoKi/6G9uBSoRk+nDYx4z9QEAQKByIsz4fMxyNpwQqAAAAJ8yz1ExKgwAAOguUAEAABCo AAAAAhUAAIA+A5Xn82kWCgAA0FegsjNjPu6tXwAAAJ+sowIAAHTnEf3Nd8zgKQoAAJCXyfQAAIBA BQAA4MgjfRcGfQEAAHl5ogIAAAhUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAICp/B8LlZPCSZcSIgAAAABJRU5ErkJggg== --0000000000009ecac4061c8315bc--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2B1FSijU75qV4qbBX3EbbN=QtGm4Q9ET0%2BWXu_a%2BGx3LK1MfZQ>