From owner-freebsd-current@FreeBSD.ORG Tue Aug 9 14:45:05 2011 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE1F8106566B; Tue, 9 Aug 2011 14:45:05 +0000 (UTC) (envelope-from onwahe@gmail.com) Received: from mail-gx0-f182.google.com (mail-gx0-f182.google.com [209.85.161.182]) by mx1.freebsd.org (Postfix) with ESMTP id 3E6408FC16; Tue, 9 Aug 2011 14:45:04 +0000 (UTC) Received: by gxk28 with SMTP id 28so53548gxk.13 for ; Tue, 09 Aug 2011 07:45:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=7QMwpNbOqKmcOJ8tY27fPj0vPwhcow6GuTWgQiOtNc8=; b=FLeKa/87gTXGIrBxhqxnw6qlX4GRBQA/MujufThN4OLc042wiywGtextCzGmid+FvC NN4GmZsXG+5x37zIvHOMBtKY+o19zugdR9m+qoruY/QingkPL18lZ+j+BwrgOtLACP5X V16JpF+m/WESa4MToUBY59FxZOvJLgonXSmCs= MIME-Version: 1.0 Received: by 10.142.153.2 with SMTP id a2mr6865389wfe.329.1312901103894; Tue, 09 Aug 2011 07:45:03 -0700 (PDT) Received: by 10.142.144.20 with HTTP; Tue, 9 Aug 2011 07:45:03 -0700 (PDT) In-Reply-To: References: <92B5D566-9816-4134-9358-2306D0F7DAFC@averesystems.com> <1312781293.2521.1.camel@srgsec> Date: Tue, 9 Aug 2011 16:45:03 +0200 Message-ID: From: Svatopluk Kraus To: Kevin Lo Content-Type: multipart/mixed; boundary=000e0cd2bf7eec40aa04aa139b75 Cc: Jeremiah Lott , freebsd-current@freebsd.org, Andrew Boyer Subject: Re: [patch] Problem with two NIC on same NET (in_scrubprefix: err=17, new prefix add failed) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Aug 2011 14:45:05 -0000 --000e0cd2bf7eec40aa04aa139b75 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, after more testing of all matter related to two NIC on same net, I just updated my submit http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159601 The patch I send here yesterday must be updated too. IFA_RTSELF flag must be treat correctly on more places. The new patch is attached and commented output of my testing too. To achieve same testing result following patches must be used too: http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159600 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159601 http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159603 Svata On Mon, Aug 8, 2011 at 4:57 PM, Svatopluk Kraus wrote: > Thanks for committing the fix. > > I've continued with work on two NIC on same NET. Now, with > point-to-point interfaces too and I have more small fixes which I > submitted today: > > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159600 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159601 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159602 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3D159603 > > I have one more related problem, but I'm not sure how complex the fix sho= uld be. > > When an interface is marked down a network route is deleted (or > replaced) and a loopback route persists in routing table. It is OK. > However, when an interface is marked up again, then a network route is > installed unconditionally (but error is ignored) and a loopbak route > is deleted and added immediately and unconditionally too. IMHO, it is > not correct behaviour. I think that a second half of in_ifinit() > should be here starting by in_addprefix() call with some small or > bigger changes. > > Maybe, adding network route and ignoring error could be OK, but > deleting loopback route should be done under IFA_RTSELF flag is set > condition (with existing route refcount check). V_useloopback should > be check before re-adding the route and existing route must be check > to evaluate refcount correctly. The proposed patch is attached. > > However, I prefer to call in_addprefix() (which is static now) instead > of rtinit() and add some more checks from in_ifinit(). Can you (or > anyone) review the patch? > > =A0Thanks once again, > > =A0 =A0Svata > > > On Mon, Aug 8, 2011 at 7:28 AM, Kevin Lo wrote: >> Hi Andrew, >> >> I just committed Svatopluk's fix to HEAD, thanks! >> >> =A0 =A0 =A0 =A0Kevin >> >> On Wed, 2011-08-03 at 11:11 -0400, Andrew Boyer wrote: >>> We found and fixed a similar issue with an identical patch. =A0It has b= een working fine for us under stable/8. >>> >>> Unfortunately I am weeks and weeks behind on pushing fixes back to the = tree, so you had to duplicate the work. =A0If it can be committed (and MFC'= d to 8, please) it would save others the trouble. >>> >>> -Andrew >>> >>> On Aug 3, 2011, at 10:51 AM, Svatopluk Kraus wrote: >>> >>> > I have two NIC on same NET (both are up). If a NIC which installs >>> > network route is going down then an error happens during network rout= e >>> > replacement (in_scrubprefix: err=3D17, new prefix add failed). >>> > >>> > =A0I've done a little bit investigation. In rtinit1(), before >>> > rtrequest1_fib() is called, info.rti_flags is initialized by flags >>> > (function argument) or-ed with ifa->ifa_flags. Both NIC has a loopbac= k >>> > route to itself, so IFA_RTSELF is set on ifa(s). As IFA_RTSELF is >>> > defined by RTF_HOST, rtrequest1_fib() is called with RTF_HOST flag >>> > even if netmask is not NULL. Consequently, netmask is set to zero in >>> > rtrequest1_fib(), and request to add network route is changed under >>> > hands to request to add host route. It is the reason of logged info >>> > and my problem. >>> > >>> > =A0When I've done more investigation, it looks similar to >>> > http://svnweb.freebsd.org/base?view=3Drevision&revision=3D201543. So,= I >>> > propose the following patch. >>> > >>> > Index: sys/net/route.c >>> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>> > --- sys/net/route.c (revision 224635) >>> > +++ sys/net/route.c (working copy) >>> > @@ -1478,7 +1478,7 @@ >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0*/ >>> > =A0 =A0 =A0 =A0 =A0 =A0 bzero((caddr_t)&info, sizeof(info)); >>> > =A0 =A0 =A0 =A0 =A0 =A0 info.rti_ifa =3D ifa; >>> > - =A0 =A0 =A0 =A0 =A0 info.rti_flags =3D flags | ifa->ifa_flags; >>> > + =A0 =A0 =A0 =A0 =A0 info.rti_flags =3D flags | (ifa->ifa_flags & ~I= FA_RTSELF); >>> > =A0 =A0 =A0 =A0 =A0 =A0 info.rti_info[RTAX_DST] =3D dst; >>> > =A0 =A0 =A0 =A0 =A0 =A0 /* >>> > =A0 =A0 =A0 =A0 =A0 =A0 =A0* doing this for compatibility reason >>> > >>> > >>> > =A0Is the patch sufficient? >>> > >>> > =A0 =A0 =A0Svata >>> > _______________________________________________ >>> > freebsd-current@freebsd.org mailing list >>> > http://lists.freebsd.org/mailman/listinfo/freebsd-current >>> > To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd= .org" >>> >>> -------------------------------------------------- >>> Andrew Boyer =A0aboyer@averesystems.com >>> >>> >>> >>> >>> _______________________________________________ >>> freebsd-current@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-current >>> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.o= rg" >> >> >> > --000e0cd2bf7eec40aa04aa139b75 Content-Type: text/plain; charset=US-ASCII; name="patch_raw_ip_new.txt" Content-Disposition: attachment; filename="patch_raw_ip_new.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gr4z8mvs1 SW5kZXg6IHN5cy9uZXRpbmV0L3Jhd19pcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXRpbmV0L3Jh d19pcC5jCShyZXZpc2lvbiAyMjQ3MDUpCisrKyBzeXMvbmV0aW5ldC9yYXdfaXAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNzYxLDE3ICs3NjEsNjkgQEAKIAkJICAgIHx8IChpZnAtPmlmX2ZsYWdzICYg SUZGX1BPSU5UT1BPSU5UKSkKIAkJCWZsYWdzIHw9IFJURl9IT1NUOwogCi0JCWVyciA9IGlmYV9k ZWxfbG9vcGJhY2tfcm91dGUoKHN0cnVjdCBpZmFkZHIgKilpYSwgc2EpOwotCQlpZiAoZXJyID09 IDApCi0JCQlpYS0+aWFfZmxhZ3MgJj0gfklGQV9SVFNFTEY7CisJCS8qCisJCSAqIFRyeSB0byBp bnN0YWxsIG91ciBwcmVmaXguIFRoZSBwcmVmaXggYWxyZWFkeSBjYW4gYmUKKwkJICogaW5zdGFs bGVkIGJ5IGFub3RoZXIgaW50ZXJmYWNlLCBzbyBlcnJvciBjYW4gYmUgaWdub3JlZC4KKwkJICov CiAKIAkJZXJyID0gcnRpbml0KCZpYS0+aWFfaWZhLCBSVE1fQURELCBmbGFncyk7CiAJCWlmIChl cnIgPT0gMCkKIAkJCWlhLT5pYV9mbGFncyB8PSBJRkFfUk9VVEU7CiAKKwkJLyoKKwkJICogSW5z dGFsbGVkIGxvb3BiYWNrIHJvdXRlIGlzbid0IGRlbGV0ZWQgd2hlbiBpbnRlcmZhY2UKKwkJICog aXMgZ29pbmcgZG93bi4gU28sIGhlcmUgb25seSBjaGVjayBWX3VzZWxvb3BiYWNrIGZsYWcKKwkJ ICogYW5kIGFjdCBhY2NvcmRpbmcgdG8gaXQuCisJCSAqLworCisJCWlmICghVl91c2Vsb29wYmFj aykgeworCQkJaWYgKGlhLT5pYV9mbGFncyAmIElGQV9SVFNFTEYpIHsKKwkJCQlzdHJ1Y3Qgcm91 dGUgaWFfcm87CisJCQkJaW50IGZyZWVpdCA9IDA7CisKKwkJCQliemVybygmaWFfcm8sIHNpemVv ZihpYV9ybykpOworCQkJCWlhX3JvLnJvX2RzdCA9ICpzYTsKKwkJCQlydGFsbG9jX2lnbl9maWIo JmlhX3JvLCAwLCAwKTsKKwkJCQlpZiAoKGlhX3JvLnJvX3J0ICE9IE5VTEwpICYmIChpYV9yby5y b19ydC0+cnRfaWZwICE9IE5VTEwpICYmCisJCQkJICAgIChpYV9yby5yb19ydC0+cnRfaWZwID09 IFZfbG9pZikpIHsKKwkJCQkJUlRfTE9DSyhpYV9yby5yb19ydCk7CisJCQkJCWlmIChpYV9yby5y b19ydC0+cnRfcmVmY250IDw9IDEpCisJCQkJCQlmcmVlaXQgPSAxOworCQkJCQllbHNlIHsKKwkJ CQkJCVJUX1JFTVJFRihpYV9yby5yb19ydCk7CisJCQkJCQlpYS0+aWFfZmxhZ3MgJj0gfklGQV9S VFNFTEY7CisJCQkJCX0KKwkJCQlSVEZSRUVfTE9DS0VEKGlhX3JvLnJvX3J0KTsKKwkJCQl9CisJ CQkJaWYgKGZyZWVpdCkgeworCQkJCQllcnIgPSBpZmFfZGVsX2xvb3BiYWNrX3JvdXRlKChzdHJ1 Y3QgaWZhZGRyICopaWEsCisJCQkJICAgICAgIAkJCQkgICAgICBzYSk7CisJCQkJCWlmIChlcnIg PT0gMCkKKwkJCQkJCWlhLT5pYV9mbGFncyAmPSB+SUZBX1JUU0VMRjsKKwkJCQl9CisJCQl9CisJ CX0KKwkJZWxzZSBpZiAoIShpYS0+aWFfZmxhZ3MgJiBJRkFfUlRTRUxGKSAmJgorCQkJICEoaWZw LT5pZl9mbGFncyAmIElGRl9MT09QQkFDSykpIHsKKwkJCXN0cnVjdCByb3V0ZSBpYV9ybzsKKwor CQkJYnplcm8oJmlhX3JvLCBzaXplb2YoaWFfcm8pKTsKKwkJCSooKHN0cnVjdCBzb2NrYWRkcl9p biAqKSgmaWFfcm8ucm9fZHN0KSkgPSBpYS0+aWFfYWRkcjsKKwkJCXJ0YWxsb2NfaWduX2ZpYigm aWFfcm8sIDAsIDApOworCQkJaWYgKChpYV9yby5yb19ydCAhPSBOVUxMKSAmJiAoaWFfcm8ucm9f cnQtPnJ0X2lmcCAhPSBOVUxMKSAmJgorCQkJICAgIChpYV9yby5yb19ydC0+cnRfaWZwID09IFZf bG9pZikpIHsKKwkJCQlSVF9MT0NLKGlhX3JvLnJvX3J0KTsKKwkJCQlSVF9BRERSRUYoaWFfcm8u cm9fcnQpOworCQkJCVJURlJFRV9MT0NLRUQoaWFfcm8ucm9fcnQpOworCQkJCWlhLT5pYV9mbGFn cyB8PSBJRkFfUlRTRUxGOworCQkJfSBlbHNlIHsKIAkJZXJyID0gaWZhX2FkZF9sb29wYmFja19y b3V0ZSgoc3RydWN0IGlmYWRkciAqKWlhLCBzYSk7CiAJCWlmIChlcnIgPT0gMCkKIAkJCWlhLT5p YV9mbGFncyB8PSBJRkFfUlRTRUxGOworCQkJfQorCQkJaWYgKGlhX3JvLnJvX3J0ICE9IE5VTEwp CisJCQkJUlRGUkVFKGlhX3JvLnJvX3J0KTsKKwkJfQogCiAJCWlmYV9mcmVlKCZpYS0+aWFfaWZh KTsKIAkJYnJlYWs7Cg== --000e0cd2bf7eec40aa04aa139b75 Content-Type: text/plain; charset=US-ASCII; name="raw_ip_test.txt" Content-Disposition: attachment; filename="raw_ip_test.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gr4z8sly2 Vl91c2Vsb29wYmFjayBpcyBzZXQuCnNsb3Q0IGFuZCBzbG90IDYgYXJlIHBvaW50LXRvLXBvaW50 IGludGVyZmFjZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJhc2gjIGlmY29uZmlnIHNsb3Q0 IGluZXQgMTcyLjE2LjEuNDggMTAuMC4wLjIwIG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1CmJhc2gj IGlmY29uZmlnIHNsb3Q2IGluZXQgMTcyLjE2LjEuNDggMTAuMC4wLjIwIG5ldG1hc2sgMjU1LjI1 NS4yNTUuMjU1CmJhc2gjCmJhc2gjIG5ldHN0YXQgLXJuClJvdXRpbmcgdGFibGVzCgpJbnRlcm5l dDoKRGVzdGluYXRpb24gICAgICAgIEdhdGV3YXkgICAgICAgICAgICBGbGFncyAgICBSZWZzICAg ICAgVXNlICBOZXRpZiBFeHBpcmUKMTAuMC4wLjIwICAgICAgICAgIGxpbmsjNyAgICAgICAgICAg ICBVSCAgICAgICAgICAwICAgICAgICAwICBzbG90NAoxMjcuMC4wLjEgICAgICAgICAgbGluayMx ICAgICAgICAgICAgIFVIICAgICAgICAgIDAgICAgICAgIDAgICAgbG8wCjE3Mi4xNi4xLjQ4ICAg ICAgICBsaW5rIzcgICAgICAgICAgICAgVUhTICAgICAgICAgMSAgICAgICAgMCAgICBsbzAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKTG9vcGJhY2sgcm91dGUgaGFzIHR3byByZWZlcmVuY2VzLgpO ZXR3b3JrIHJvdXRlIGxlYWRzIHRvIHNsb3Q0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNo IyBzeXNjdGwgbmV0LmxpbmsuZXRoZXIuaW5ldC51c2Vsb29wYmFjaz0wCm5ldC5saW5rLmV0aGVy LmluZXQudXNlbG9vcGJhY2s6IDEgLT4gMAoKYmFzaCMgaWZjb25maWcgc2xvdDYgaW5ldCAxNzIu MTYuMS40OSAxMC4wLjAuMjAgbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUKYmFzaCMgbmV0c3RhdCAt cm4KUm91dGluZyB0YWJsZXMKCkludGVybmV0OgpEZXN0aW5hdGlvbiAgICAgICAgR2F0ZXdheSAg ICAgICAgICAgIEZsYWdzICAgIFJlZnMgICAgICBVc2UgIE5ldGlmIEV4cGlyZQoxMC4wLjAuMjAg ICAgICAgICAgbGluayM3ICAgICAgICAgICAgIFVIICAgICAgICAgIDAgICAgICAgIDAgIHNsb3Q0 CjEyNy4wLjAuMSAgICAgICAgICBsaW5rIzEgICAgICAgICAgICAgVUggICAgICAgICAgMCAgICAg ICAgMCAgICBsbzAKMTcyLjE2LjEuNDggICAgICAgIGxpbmsjNyAgICAgICAgICAgICBVSFMgICAg ICAgICAwICAgICAgICAwICAgIGxvMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpWX3VzZWxvb3Bi YWNrIGlzIG5vdCBzZXQuCk5ldyAxNzIuMTYuMS40OSBsb29wYmFjayByb3V0ZSBpcyBub3QgaW5z dGFsbGVkLgpPbGQgMTcyLjE2LjEuNDggbG9vcGJhY2sgcm91dGUgaGFzIG9uZSByZWZlcmVuY2Uu CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmJhc2gjIGlmY29uZmlnIHNsb3Q0IGluZXQgMTcyLjE2 LjEuNDkgMTAuMC4wLjIwIG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1CmJhc2gjIG5ldHN0YXQgLXJu ClJvdXRpbmcgdGFibGVzCgpJbnRlcm5ldDoKRGVzdGluYXRpb24gICAgICAgIEdhdGV3YXkgICAg ICAgICAgICBGbGFncyAgICBSZWZzICAgICAgVXNlICBOZXRpZiBFeHBpcmUKMTAuMC4wLjIwICAg ICAgICAgIGxpbmsjOSAgICAgICAgICAgICBVSCAgICAgICAgICAwICAgICAgICAwICBzbG90Ngox MjcuMC4wLjEgICAgICAgICAgbGluayMxICAgICAgICAgICAgIFVIICAgICAgICAgIDAgICAgICAg IDAgICAgbG8wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCk5ldyAxNzIuMTYuMS40OSBsb29wYmFj ayByb3V0ZSBpcyBub3QgaW5zdGFsbGVkLgpPbGQgMTcyLjE2LjEuNDggbG9vcGJhY2sgcm91dGUg d2FzIGRlbGV0ZWQuCgpOZXR3b3JrIHJvdXRlIGxlYWRzIHRvIHNsb3Q2IGFzIGl0IHdhcyByZXBs YWNlZCBkdXJpbmcgMTcyLjE2LjEuNDgKYWRkcmVzcyBkZWxldGV0aW9uLgoKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpiYXNoIyBzeXNjdGwgbmV0LmxpbmsuZXRoZXIuaW5ldC51c2Vsb29wYmFjaz0x Cm5ldC5saW5rLmV0aGVyLmluZXQudXNlbG9vcGJhY2s6IDAgLT4gMQoKYmFzaCMgaWZjb25maWcg c2xvdDQgaW5ldCAxNzIuMTYuMS40OCAxMC4wLjAuMjAgbmV0bWFzayAyNTUuMjU1LjI1NS4yNTUK YmFzaCMgaWZjb25maWcgc2xvdDYgaW5ldCAxNzIuMTYuMS40OCAxMC4wLjAuMjAgbmV0bWFzayAy NTUuMjU1LjI1NS4yNTUKYmFzaCMKYmFzaCMgbmV0c3RhdCAtcm4KUm91dGluZyB0YWJsZXMKCklu dGVybmV0OgpEZXN0aW5hdGlvbiAgICAgICAgR2F0ZXdheSAgICAgICAgICAgIEZsYWdzICAgIFJl ZnMgICAgICBVc2UgIE5ldGlmIEV4cGlyZQoxMC4wLjAuMjAgICAgICAgICAgbGluayM3ICAgICAg ICAgICAgIFVIICAgICAgICAgIDAgICAgICAgIDAgIHNsb3Q0CjEyNy4wLjAuMSAgICAgICAgICBs aW5rIzEgICAgICAgICAgICAgVUggICAgICAgICAgMCAgICAgICAgMCAgICBsbzAKMTcyLjE2LjEu NDggICAgICAgIGxpbmsjNyAgICAgICAgICAgICBVSFMgICAgICAgICAxICAgICAgICAwICAgIGxv MAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpWX3VzZWxvb3BiYWNrIGlzIHNldC4KTG9vcGJhY2sg cm91dGUgaGFzIHR3byByZWZlcmVuY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNoIyBz eXNjdGwgbmV0LmxpbmsuZXRoZXIuaW5ldC51c2Vsb29wYmFjaz0wCm5ldC5saW5rLmV0aGVyLmlu ZXQudXNlbG9vcGJhY2s6IDEgLT4gMAoKYmFzaCMgaWZjb25maWcgc2xvdDQgZG93bgpiYXNoIyBp ZmNvbmZpZyBzbG90NiBkb3duCmJhc2gjCmJhc2gjIG5ldHN0YXQgLXJuClJvdXRpbmcgdGFibGVz CgpJbnRlcm5ldDoKRGVzdGluYXRpb24gICAgICAgIEdhdGV3YXkgICAgICAgICAgICBGbGFncyAg ICBSZWZzICAgICAgVXNlICBOZXRpZiBFeHBpcmUKMTI3LjAuMC4xICAgICAgICAgIGxpbmsjMSAg ICAgICAgICAgICBVSCAgICAgICAgICAwICAgICAgICAwICAgIGxvMAoxNzIuMTYuMS40OCAgICAg ICAgbGluayM3ICAgICAgICAgICAgIFVIUyAgICAgICAgIDEgICAgICAgIDAgICAgbG8wCgpiYXNo IyBpZmNvbmZpZyBzbG90NCB1cApiYXNoIyBpZmNvbmZpZyBzbG90NiB1cApiYXNoIwpiYXNoIyBu ZXRzdGF0IC1ybgpSb3V0aW5nIHRhYmxlcwoKSW50ZXJuZXQ6CkRlc3RpbmF0aW9uICAgICAgICBH YXRld2F5ICAgICAgICAgICAgRmxhZ3MgICAgUmVmcyAgICAgIFVzZSAgTmV0aWYgRXhwaXJlCjEw LjAuMC4yMCAgICAgICAgICBsaW5rIzcgICAgICAgICAgICAgVUggICAgICAgICAgMCAgICAgICAg MCAgc2xvdDQKMTI3LjAuMC4xICAgICAgICAgIGxpbmsjMSAgICAgICAgICAgICBVSCAgICAgICAg ICAwICAgICAgICAwICAgIGxvMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpWX3VzZWxvb3BiYWNr IGlzIG5vdCBzZXQuCkxvb3BiYWNrIHJvdXRlIGlzIGRlbGV0ZWQgYWZ0ZXIgdXAtPmRvd24tPnVw IGN5Y2xlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNoIyBzeXNjdGwgbmV0LmxpbmsuZXRo ZXIuaW5ldC51c2Vsb29wYmFjaz0xCm5ldC5saW5rLmV0aGVyLmluZXQudXNlbG9vcGJhY2s6IDAg LT4gMQoKYmFzaCMgaWZjb25maWcgc2xvdDQgZG93bgpiYXNoIyBpZmNvbmZpZyBzbG90NCB1cApi YXNoIwpiYXNoIyBuZXRzdGF0IC1ybgpSb3V0aW5nIHRhYmxlcwoKSW50ZXJuZXQ6CkRlc3RpbmF0 aW9uICAgICAgICBHYXRld2F5ICAgICAgICAgICAgRmxhZ3MgICAgUmVmcyAgICAgIFVzZSAgTmV0 aWYgRXhwaXJlCjEwLjAuMC4yMCAgICAgICAgICBsaW5rIzkgICAgICAgICAgICAgVUggICAgICAg ICAgMCAgICAgICAgMCAgc2xvdDYKMTI3LjAuMC4xICAgICAgICAgIGxpbmsjMSAgICAgICAgICAg ICBVSCAgICAgICAgICAwICAgICAgICAwICAgIGxvMAoxNzIuMTYuMS40OCAgICAgICAgbGluayM3 ICAgICAgICAgICAgIFVIUyAgICAgICAgIDAgICAgICAgIDAgICAgbG8wCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KClZfdXNlbG9vcGJhY2sgaXMgc2V0LgpMb29wYmFjayByb3V0ZSBpcyBpbnN0YWxs ZWQgYWZ0ZXIgdXAtPmRvd24tPnVwIGN5Y2xlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNo IyBpZmNvbmZpZyBzbG90NiBpbmV0IDE3Mi4xNi4xLjQ5IDEwLjAuMC4yMCBuZXRtYXNrIDI1NS4y NTUuMjU1LjI1NQpiYXNoIwpiYXNoIyBuZXRzdGF0IC1ybgpSb3V0aW5nIHRhYmxlcwoKSW50ZXJu ZXQ6CkRlc3RpbmF0aW9uICAgICAgICBHYXRld2F5ICAgICAgICAgICAgRmxhZ3MgICAgUmVmcyAg ICAgIFVzZSAgTmV0aWYgRXhwaXJlCjEwLjAuMC4yMCAgICAgICAgICBsaW5rIzcgICAgICAgICAg ICAgVUggICAgICAgICAgMCAgICAgICAgMCAgc2xvdDQKMTI3LjAuMC4xICAgICAgICAgIGxpbmsj MSAgICAgICAgICAgICBVSCAgICAgICAgICAwICAgICAgICAwICAgIGxvMAoxNzIuMTYuMS40OCAg ICAgICAgbGluayM3ICAgICAgICAgICAgIFVIUyAgICAgICAgIDAgICAgICAgIDAgICAgbG8wCjE3 Mi4xNi4xLjQ5ICAgICAgICBsaW5rIzkgICAgICAgICAgICAgVUhTICAgICAgICAgMCAgICAgICAg MCAgICBsbzAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTmV3IDE3Mi4xNi4xLjQ5IGxvb3BiYWNr IHJvdXRlIGlzIGluc3RhbGxlZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpiYXNoIyBpZmNvbmZp ZyBzbG90NiBpbmV0IDE3Mi4xNi4xLjQ4IDEwLjAuMC4yMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1 NQpiYXNoIyBuZXRzdGF0IC1ybgpSb3V0aW5nIHRhYmxlcwoKSW50ZXJuZXQ6CkRlc3RpbmF0aW9u ICAgICAgICBHYXRld2F5ICAgICAgICAgICAgRmxhZ3MgICAgUmVmcyAgICAgIFVzZSAgTmV0aWYg RXhwaXJlCjEwLjAuMC4yMCAgICAgICAgICBsaW5rIzcgICAgICAgICAgICAgVUggICAgICAgICAg MCAgICAgICAgMCAgc2xvdDQKMTI3LjAuMC4xICAgICAgICAgIGxpbmsjMSAgICAgICAgICAgICBV SCAgICAgICAgICAwICAgICAgICAwICAgIGxvMAoxNzIuMTYuMS40OCAgICAgICAgbGluayM3ICAg ICAgICAgICAgIFVIUyAgICAgICAgIDEgICAgICAgIDAgICAgbG8wCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCk9sZCAxNzIuMTYuMS40OSBsb29wYmFjayByb3V0ZSBpcyBkZWxldGVkLgoxNzIuMTYu MS40OCBsb29wYmFjayByb3V0ZSBoYXMgdHdvIHJlZmVyZW5jZXMuCg== --000e0cd2bf7eec40aa04aa139b75--