From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-db3-obe.outbound.protection.outlook.com (mail-db3on0076.outbound.protection.outlook.com [157.55.234.76]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "MSIT Machine Auth CA 2" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id A14B621F76F for ; Thu, 10 Dec 2015 04:59:16 -0800 (PST) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kevin@darbyshire-bryant.me.uk; Received: from [IPv6:2001:470:183f:da2b::632f:a7da] (2001:470:183f:da2b::632f:a7da) by HE1PR07MB0937.eurprd07.prod.outlook.com (10.162.27.143) with Microsoft SMTP Server (TLS) id 15.1.337.19; Thu, 10 Dec 2015 12:59:11 +0000 To: Dave Taht References: <5664173D.40808@darbyshire-bryant.me.uk> <56695F78.5020802@darbyshire-bryant.me.uk> <56696B65.4040608@darbyshire-bryant.me.uk> <5669719D.9030609@darbyshire-bryant.me.uk> <5669737C.8070503@darbyshire-bryant.me.uk> From: Kevin Darbyshire-Bryant X-Enigmail-Draft-Status: N1110 Message-ID: <5669771B.1010400@darbyshire-bryant.me.uk> Date: Thu, 10 Dec 2015 12:59:07 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms030003020809070406090008" X-Originating-IP: [2001:470:183f:da2b::632f:a7da] X-ClientProxiedBy: AM3PR08CA0050.eurprd08.prod.outlook.com (25.163.23.146) To HE1PR07MB0937.eurprd07.prod.outlook.com (25.162.27.143) X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB0937; 2:fGMPy4alqFB7HEdS2S3V1tQ4xCGMNKamqNkE7JXbw3mHVaZCEPETsXD7pUlg3P4EY6YUbXOyYc4DobSZqFmtIB/dtu6c3ApZyvfaWFk2kIT2JZUAFfzI3TJgakxv30/bX8ggqt8M0TEMkSOC75U0/A==; 3:kzppOmerH8vKzJs8ShRALcFkQDCbGb/qNZEc3tsO5g1WC6sTovzD0Tg76E8MAUrFsbMd/36ZyT5VF07uCmcTFYpX2jcpek6ofSr8OrMKclqx3v26EkgYzl+AzV1KJITK; 25:Tgh+1DsMqiFzZXl+W7os6VHcFjkqvQNgCztpNQwFpDKp40djBAOEsM4SoHvApi17hdYQw0v4d8Fd3+YMuuzJIvREKgQnIg+t4kt1hZfgeRm5smw+FfxRI0sAUBtIH9A3m28wM9hN/30qo6/KPOeFhWMVF8ANPA0VXktkWNUmREQApAPFX5bJ4MPkIRApKCBAtOK4xW3tEaNTuBzkuKf6UKUZ4G309bu+Wbua49O27RI3kCfG6XHl9JRFbUATE3ColjzkVYXwH2T6Kt4T4OcCvA==; 4:nNGd+QC5UFYwkuBsNo+pYi1geQ7ll7Z8JSqedXI5NiSMirbRSBXPkW1j8lzqJzfmkIyCSjMRfTZlV1QzP+7hG7Fwfjo0eNkIfOjzjX/iXCvjKixrNzCshtO69H1pqiBkIJwdrwtmnIqRlhd4BWw40v0kiosaRKQ9BzkUrjPEzbOTlZ9gM6lgQrhUHa2DnM4aYvVz3YZFxE5v1yMLwYGSvkzM8Hi4Nu60f7GgzXWu1a62VUQTBmIDaODiQj6BDngzEelpeYHlPFwQ8AFkSSjUdgiCrgaSP5NwYv24jBBmAa6pCqBDUDLVyc15jHn2dQLYu+UgCN15ItMp1RZug+6U+KWOflue3ZEyECKMpYv1m876RHC3v8fs1FHWjX/V/iyy X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR07MB0937; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(10201501046)(3002001); SRVR:HE1PR07MB0937; BCL:0; PCL:0; RULEID:; SRVR:HE1PR07MB0937; X-Forefront-PRVS: 078693968A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(52314003)(377454003)(189002)(24454002)(377424004)(199003)(479174004)(4001150100001)(81156007)(15975445007)(1706002)(65816999)(84326002)(568964002)(110136002)(99136001)(189998001)(59896002)(5001960100002)(87266999)(122386002)(50986999)(5008740100001)(2950100001)(1096002)(92566002)(40100003)(54356999)(6116002)(5890100001)(64126003)(586003)(101416001)(87976001)(512874002)(36756003)(83506001)(19580405001)(76176999)(86362001)(33656002)(77096005)(105586002)(65956001)(65806001)(93886004)(42186005)(106356001)(5004730100002)(19580395003)(97736004)(80316001)(4001350100001)(74482002)(3826002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR07MB0937; H:[IPv6:2001:470:183f:da2b::632f:a7da]; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: darbyshire-bryant.me.uk does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR07MB0937; 23:XO5bkqZO83t14UqRLvKttmRBKeNkfbEg6r8QWwyNa?= =?us-ascii?Q?WhfYR2Prai6MhhzWwMo8dc1uKXY1jCtxr0XJJegk+jMDHVIeSTHVWwmZNtX1?= =?us-ascii?Q?eVdP+pzJJIHUNgpYITyh+S9yfauhrt56IEfOMO0mNkHtjY/KsWKnGFeTbM96?= =?us-ascii?Q?BmTKoY7Us+pd56fmvrn4ZuzZFTj97JIEvJjxuS4svslv3j5UK2Jpq9LnJdIL?= =?us-ascii?Q?dg+pGVaCBR8YA1lBDNZE5pk3abUUZusWp9rmYEBkNgqMl00tyDfukyGZHc7M?= =?us-ascii?Q?AtbYgsBA2kULwUKf7fp3mrkF00kajs2yKnI3EwWDLoMSbRp5ioXeSfKECeYR?= =?us-ascii?Q?Ta9BQBLwBY0WGaG8Sxiei1SPbCAKaBZXeQi8qFL/clZ1jYB54PxGy3tkrqTV?= =?us-ascii?Q?dbUYhgEQPJSZ13Fienk60ye0dObibgm2gkTZAmf66SWrQgdNL/SxUf60Jucr?= =?us-ascii?Q?hCi93lG+K7bmhV5WtBB5K2Tw7i7DQvUr6d2Fq95l/PvKNWH/aicnfvdDqTVz?= =?us-ascii?Q?LkxeMjYjaPq46RBLPgUJUYcrXByX/dXC+VG3RSDXIzjWk1uwtskGBJGS5Jvv?= =?us-ascii?Q?79nVsIjeNsIcfNxuVQaC7WAouHlWX9yb0DrMSzLemju32e+4ZWVnwhtRSQWN?= =?us-ascii?Q?BjrFe3Twm3qJvKPIUhez2F78gtoa6NPqzRRsQbE4EM8lcbCAD7p+X5CnBshD?= =?us-ascii?Q?GMS9zdt3Ckxh9AiFkhMsfIibsmt2CAUZ74w+pWeonMmW1NJSLnuftFA+qX2Q?= =?us-ascii?Q?sMQPVM3a8JUUA5TYt8L6QEAfvJbIrpRp/jjS52vxbnPwMnSi26rYeBmCF+Wk?= =?us-ascii?Q?mZ5wOTMwP4BTGax46PfINPXMo45CzgXw7Du9Pg5rN1ZmDdhgB9wYNORbHrEq?= =?us-ascii?Q?w9CW/xbTnd9HlTyGuJEWp4T25ZYMA2QSg0CJk8rauMJuPtD7ndIUkOrISuhQ?= =?us-ascii?Q?3p8oPQ4vToOiIF05eSuEsP+Cz17IdVcq9isw1cH4fVbDbHARHwlDpaG2TYAZ?= =?us-ascii?Q?GKeDkYyI1fFaQdPGxhwbyzshm8VK1uhyvxA7mUSrw+KYzlrHF7hl9TgEVlU+?= =?us-ascii?Q?0cM/DDSf51if1wbAD8+RtoPcqFyVM2c7R4bmvn/goeOTY4WG5nR+e0WV4FTC?= =?us-ascii?Q?HKWyh5jQ0EB7BKhIcT+dPrZ/F3YTCGUpohsY/lxuuHKxV0w/dkffotLHy7Jb?= =?us-ascii?Q?s7Ao9uLC9zHRGvvROG6jn6w+JatW3grRfuImU5M8OtfvQQSgAxcLAyRnsKc4?= =?us-ascii?Q?VAAV8OOARR/u0kCVa9HRyjeUiuwTXorSUxYwndISeItkrMvpoBZefiND6Qyr?= =?us-ascii?Q?8a2K7AiTTaZcZg/GQ8lhWI0rMUvHrAhEqOm2SfR6sUq28dVKbpYmTuxMvse7?= =?us-ascii?Q?+1W8ISNvphzSU2sYkKl8tP7ZvRwPb0cCrz5S33UkcUT3VPxwDQQKVe8pBl1+?= =?us-ascii?Q?HJFjyHqGGSV8wemhM5AXDWX9VmVs34=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB0937; 5:oZujsX9pYR5Paw9yG85d+pcC8ICUb9stjo+eopM8sdSUddyjreinn8dGmU5KWwyvXe0Rr9k/tZ8THAHm6ILmgG4NrQ5p8+5N6zlzdyU711XzNx4cKaomq0Mr+rBrxaRycgpQuSuH3RXjgiLZ2WtPZQ==; 24:Mw2SZTWOyKfeW1I4WGZDDfBYF6fsnbc2+7MkrVUXX7BpinoP4pcjSb5gKEL26v/FLPwbU/mEPb0pRYW7NUdbpLZYfADSaWAaoL4lLclzZDo= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Dec 2015 12:59:11.8811 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR07MB0937 Cc: cake@lists.bufferbloat.net Subject: Re: [Cake] dscp & tunneling X-BeenThere: cake@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: Cake - FQ_codel the next generation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Dec 2015 12:59:39 -0000 --------------ms030003020809070406090008 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 10/12/15 12:49, Dave Taht wrote: > etags (or ctags) are friends here, as is cscope. I am in deep > gratitude to toke for supplying me a pretty good working .emacs.d set > of files for browsing code recently - I'd lost 20 years worth of > accumulated tools when my lab got stolen and don't do enough software > development today to justify sinking the time into making emacs sing > and dance anymore. That said, I don't understand 90% of all the cool > stuff he handed me... > > in the linux kernel tree, do a make TAGS. then in emacs it's esc->. to > look up a symbol. There are ton of other things in cscope that are > pretty amazing. vi has similar interfaces as do eclipse. Well I'm beginning to get the vague whiff of a rat...... In iproute2 land 'iptunnel.c' is responsible for setting 'iph.tos'. 'ip tunnel' in openwrt land returns: # ip tunnel BusyBox v1.24.1 (2015-12-10 10:25:05 GMT) multi-call binary. Usage: ip [OPTIONS] {address | route | link | rule} {COMMAND} ip [OPTIONS] OBJECT {COMMAND} where OBJECT :=3D {address | route | link | rule} OPTIONS :=3D { -f[amily] { inet | inet6 | link } | -o[neline] } First line gives a clue...this isn't real 'iproute2', this is busybox. And a vaguely remember something going by on the openwrt commit list about switching to 'busybox ip route' built-ins. Does busybox understand the tos flag? I can't prove it yet. But it's one of those gut feels I get...... > > On Thu, Dec 10, 2015 at 1:43 PM, Kevin Darbyshire-Bryant > wrote: >> >> On 10/12/15 12:35, Kevin Darbyshire-Bryant wrote: >>> On 10/12/15 12:22, Dave Taht wrote: >>>> On Thu, Dec 10, 2015 at 1:09 PM, Kevin Darbyshire-Bryant >>>> wrote: >>>> >>>>> the same test shows all those flows going in the best effort tin an= d >>>>> nothing being split out according to dscp. Things are split out >>>>> correctly with ipv4. Assuming that my installation of flent is doi= ng >>>>> the right thing (putting dscp on its outbound ipv6 packets) and kno= wing >>>>> that both flent & cake handle the ipv4 version of the test correctl= y and >>>>> that by the time 'cake' sees my tunnel it's all ipv4 outer packets >>>>> anyway, this suggests dscp from inner ipv6 to outer ipv4 isn't taki= ng >>>>> place, at least for 6in4 'sit' tunnels :-( >>>> Wireshark is your friend here. >>> I shall befriend it once again :-) >>>> It would not surprise me if dscp inherit had broken again, or, it wa= s >>>> borked on decapsulation. Not a widely tested feature, that. >>> I'm only 'testing' the encapsulation side...ipv6 into router, router >>> encapsulates into ipv6, cake then sits across 'eth0' the Internet fac= ing >>> interface and isn't classifying the flows - and I swear this used to = work. > I had it working 3 years back, yes, also. > >>>> I remember making it work several years ago, remember sort of seeing= >>>> the patches go upstream somewhere.... it was a long time ago. >>> Is there anyone lurking on this list, with the time, who can help me >>> with net/ipv6/sit.c? >>> >>> It looks like this is the relevant area: Need to see what >>> INET_ECN_encapsulate does (and where tos gets set) >>> >>> if (ttl =3D=3D 0) >>> ttl =3D iph6->hop_limit; >>> tos =3D INET_ECN_encapsulate(tos, ipv6_get_dsfield(iph6)); >>> >>> if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0) { >>> ip_rt_put(rt); >>> goto tx_error; >>> } >>> >>> skb_set_inner_ipproto(skb, IPPROTO_IPV6); >>> >>> err =3D iptunnel_xmit(NULL, rt, skb, fl4.saddr, fl4.daddr, >>> protocol, tos, ttl, df, >>> !net_eq(tunnel->net, dev_net(dev))); >>> iptunnel_xmit_stats(err, &dev->stats, dev->tstats); >>> return NETDEV_TX_OK; >> Ahhh....further up... >> >> if (tos =3D=3D 1) >> tos =3D ipv6_get_dsfield(iph6); >> >> and further up still... >> >> static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, >> struct net_device *dev) >> { >> struct ip_tunnel *tunnel =3D netdev_priv(dev); >> const struct iphdr *tiph =3D &tunnel->parms.iph; >> const struct ipv6hdr *iph6 =3D ipv6_hdr(skb); >> u8 tos =3D tunnel->parms.iph.tos; >> >> >> So how & who sets (or should be setting) iph.tos =3D 1? >> >> Rabbit hole, rabbit hole...... >> >> >> >> >> >> _______________________________________________ >> Cake mailing list >> Cake@lists.bufferbloat.net >> https://lists.bufferbloat.net/listinfo/cake >> --------------ms030003020809070406090008 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC DYEwggY0MIIEHKADAgECAgEeMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAklMMRYwFAYD VQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0 ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wNzEwMjQyMTAxNTVaFw0xNzEwMjQyMTAxNTVaMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUg U2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0 ZSBDbGllbnQgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHCYPMzi3YGrEp pC4Tq5a+ijKDjKaIQZZVR63UbxIP6uq/I0fhCu+cQhoUfE6ERKKnu8zPf1Jwuk0tsvVCk6U9 b+0UjM0dLep3ZdE1gblK/1FwYT5Pipsu2yOMluLqwvsuz9/9f1+1PKHG/FaR/wpbfuIqu54q zHDYeqiUfsYzoVflR80DAC7hmJ+SmZnNTWyUGHJbBpA8Q89lGxahNvuryGaC/o2/ceD2uYDX 9U8Eg5DpIpGQdcbQeGarV04WgAUjjXX5r/2dabmtxWMZwhZna//jdiSyrrSMTGKkDiXm6/3/ 4ebfeZuCYKzN2P8O2F/Xe2AC/Y7zeEsnR7FOp+uXAgMBAAGjggGtMIIBqTAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUU3Ltkpzg2ssBXHx+ljVO8tS4UYIw HwYDVR0jBBgwFoAUTgvvGqRAW6UXaYcwyjRoQ9BBrvIwZgYIKwYBBQUHAQEEWjBYMCcGCCsG AQUFBzABhhtodHRwOi8vb2NzcC5zdGFydHNzbC5jb20vY2EwLQYIKwYBBQUHMAKGIWh0dHA6 Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNydDBbBgNVHR8EVDBSMCegJaAjhiFodHRwOi8v d3d3LnN0YXJ0c3NsLmNvbS9zZnNjYS5jcmwwJ6AloCOGIWh0dHA6Ly9jcmwuc3RhcnRzc2wu Y29tL3Nmc2NhLmNybDCBgAYDVR0gBHkwdzB1BgsrBgEEAYG1NwECATBmMC4GCCsGAQUFBwIB FiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRmMDQGCCsGAQUFBwIBFihodHRw Oi8vd3d3LnN0YXJ0c3NsLmNvbS9pbnRlcm1lZGlhdGUucGRmMA0GCSqGSIb3DQEBBQUAA4IC AQAKgwh9eKssBly4Y4xerhy5I3dNoXHYfYa8PlVLL/qtXnkFgdtY1o95CfegFJTwqBBmf8py TUnFsukDFUI22zF5bVHzuJ+GxhnSqN2sD1qetbYwBYK2iyYA5Pg7Er1A+hKMIzEzcduRkIMm CeUTyMyikfbUFvIBivtvkR8ZFAk22BZy+pJfAoedO61HTz4qSfQoCRcLN5A0t4DkuVhTMXIz uQ8CnykhExD6x4e6ebIbrjZLb7L+ocR0y4YjCl/Pd4MXU91y0vTipgr/O75CDUHDRHCCKBVm z/Rzkc/b970MEeHt5LC3NiWTgBSvrLEuVzBKM586YoRD9Dy3OHQgWI270g+5MYA8GfgI/EPT 5G7xPbCDz+zjdH89PeR3U4So4lSXur6H6vp+m9TQXPF3a0LwZrp8MQ+Z77U1uL7TelWO5lAp sbAonrqASfTpaprFVkL4nyGH+NHST2ZJPWIBk81i6Vw0ny0qZW2Niy/QvVNKbb43A43ny076 khXO7cNbBIRdJ/6qQNq9Bqb5C0Q5nEsFcj75oxQRqlKf6TcvGbjxkJh8BYtv9ePsXklAxtm8 J7GCUBthHSQgepbkOexhJ0wP8imUkyiPHQ0GvEnd83129fZjoEhdGwXV27ioRKbj/cIq7JRX un0NbeY+UdMYu9jGfIpDLtUUGSgsg2zMGs5R4jCCB0UwggYtoAMCAQICAw5ySjANBgkqhkiG 9w0BAQsFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNV BAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0 Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBMB4XDTE1MDYyMDIw MzA1MloXDTE2MDYyMDE0MjY0N1owVjEmMCQGA1UEAwwda2V2aW5AZGFyYnlzaGlyZS1icnlh bnQubWUudWsxLDAqBgkqhkiG9w0BCQEWHWtldmluQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVr MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAugCNtDhytCJ9HOfenUHr/vUGUECv PL1IJXgHMl4cIJmwgLOkXhIcTMxHnX+kFweqvT+eDWv1hzA9yMWhvjLFC4eLoFaV0xiAat8O XQ7t3MwKY5DW0mB1dOnjiFIcc/XMwyYI4KfEGnFMJQkzon0rDVpkl/Q1f/hu1sELO7Zc6TFL wuuDuiP7S73zrz50TRoq0+Ob3x0uOMW2uVwVzf6NLwHgBE2LFleMXblyUMx0IlIcLan2nWiI Vsa3XYd+C6KAGGwlmO4VAZ25KuX7hkj8f82lSapvtKTtvrSoDghXlHH2JXiIQX+Sn0UgOmbX 1KyOe9vN7WzQ+tpPRzpFRffnnnp1VQye3wVRPBumjDxQSFTOhUtslnvbefUQSPw6p5w9ZiXI GJICLkX/MkYN/TwGCvuUG2PxBybSR1A2I5ap+VI/zGSG3XGVEA69SOZQyD+8YjJZfaY2nCu+ DuM64JrJUi2CvX6fwcdHNschJNrrfetpnrx3JrGnG9o+pWuUG1phBg+KKN2bhrdzY79qm7ha 86EMKSUOn5nBdGY3YxdXq/naoUQeOCUV2JMFGOulu7sKpiWcz7HVFacXjd9ebisVLv+jOwll z14BWRb87s1+LBEJn/Ybn3ekhtgyEAhB4kgj0scl4hI8xCU6zrZyDnbXmxSvDXbClZA0PACt f/jhGvUCAwEAAaOCAuMwggLfMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQG CCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQULkW2CpDiQpRNumQ7wdspjFfgX+AwHwYD VR0jBBgwFoAUU3Ltkpzg2ssBXHx+ljVO8tS4UYIwKAYDVR0RBCEwH4Eda2V2aW5AZGFyYnlz aGlyZS1icnlhbnQubWUudWswggFMBgNVHSAEggFDMIIBPzCCATsGCysGAQQBgbU3AQIDMIIB KjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYI KwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqB vlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEg VmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVs aWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0 aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov L2NybC5zdGFydHNzbC5jb20vY3J0dTEtY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5Bggr BgEFBQcwAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczEvY2xpZW50L2Nh MEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3Mx LmNsaWVudC5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3dy5zdGFydHNzbC5jb20vMA0G CSqGSIb3DQEBCwUAA4IBAQBicQWe98eF/o09TXFsExc+WSyYjt3oSnXyocLzXQp82CQhIg21 5RqNZ1e+hsO7tq8S6hdItUDbKpecpIV59+57ke1zVl2slTRIT19fhYINHH78rVVRPzuHoiDt MXnGrp9hbq3Cz8P4mm8INKDiYK46kyplRAQ3ZMouPG1lsnDzgQAvbCj74H8yAp7fK8if6cxs 28BCUmdP8D3c6M1ffdNNaqNT+4Z3mtOujXXg7zOfmXN0Zg/mEtZ0NrWE2uICGdWjTv9KZiI7 fi4hk2CRpCL63qzmu6BwtcgtwhgYYtuAk2N43+SiyDkyLKGAcjEor3t5f9HivN29E0F0MXTH 1OdgMYIFDTCCBQkCAQEwgZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBM dGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYD VQQDEy9TdGFydENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQID DnJKMA0GCWCGSAFlAwQCAwUAoIICSTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG SIb3DQEJBTEPFw0xNTEyMTAxMjU5MDdaME8GCSqGSIb3DQEJBDFCBEAxVfIA9Li4w9snunMI 24N8X+JBHJCBTkjVrMok78/BTHKQHcTDNBFdO16AfioGmY/uV33ZEfHQJtRSeChP8swjMGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgABiiwSA2iE+0Fn46S5RsnbQ539jMKI ldP92JxjO/slu45Pls7FO1F+S8rGTsC44AiLtLZRP3gjemiPwrFziXh7yl7ClI9Ahte1fdXB /35lBuYGWLJCbo1f6XQ33SibNagUUNahnUMqasrThSvwiWAPmXG3CM5l24C6xOLa1I0F0hAT uomdzt+rLQs4SCkNVNv5ud7YDg7IWhx6Yx93RqX8ZhW2d5xaHSFi3yCtFEm9mrpyc0DTFnmz czgB1dqkoIQbmvP2t2FuL9vnQmlpgXZdoBPpLXGUMLshZswwIesMEL6mouqVY/kLWNVp2S+7 8LcvxjrX88u51PP2P8NMDqoCTrqOCdtUUH4TW6iDzCb2Jf+BkO1dxQF32i1NnM/U+V+a5QDi BBJEApjTUOEq2r5j0i1BUt779x1yTjgblsOj38IECvDOyClCjLI3Rb/hBZGgtRQGnP0qugkQ kllBstuAYDSCOktbx6D7bjwVJjnjPQrDwVaNAOi74jS59xyCNFZscO6mlgg+9psZLFQvfVy4 xIEdnHi669NbXERZCJg3wzxGF4rlhmX15vHLWuKINZH3eAJBXezw2ykJYGeHi1huoyplQXs3 kkjHhHnpA4vQ0iRKtGQMdvdQmSUfoAtNmamd9q8DPhyrAv5mEheBbqK5O0HkFwPQBJHudlbm IeAV2wAAAAAAAA== --------------ms030003020809070406090008--