From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1on0080.outbound.protection.outlook.com [157.56.112.80]) (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 DA97B21F34A for ; Tue, 24 Nov 2015 02:55:28 -0800 (PST) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kevin@darbyshire-bryant.me.uk; Received: from [10.102.59.64] (109.159.227.69) by AM2PR07MB0932.eurprd07.prod.outlook.com (10.162.37.14) with Microsoft SMTP Server (TLS) id 15.1.331.20; Tue, 24 Nov 2015 10:55:24 +0000 To: Dave Taht References: <56542A13.3010307@darbyshire-bryant.me.uk> From: Kevin Darbyshire-Bryant Message-ID: <56544217.10908@darbyshire-bryant.me.uk> Date: Tue, 24 Nov 2015 10:55:19 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms060106010000020909090109" X-Originating-IP: [109.159.227.69] X-ClientProxiedBy: AM3PR02CA0069.eurprd02.prod.outlook.com (25.163.180.37) To AM2PR07MB0932.eurprd07.prod.outlook.com (25.162.37.14) X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0932; 2:V7ghc8KsLQziIdKFJs5qB80MR/AJR+8CgF3cLrLLq9IhwpCMjMOE6x8TEGUlM9N0s0t85TmyJdVTMpCvQ7+CXmqvkUbYep2NccPU+gca16nXR0vNuFP0ZkfNamrl1YgNQ9ly5LP/tQYijzWDIg3ykg==; 3:WfhVvsEyJEaJZWZCxFhyC9ufO4B6ifkHCfmLL+mGYbiawC0Qv4e0eAgcL8ybkgAkl7gX/2CrYmFSkxvQdO/rRVQ1sztk+0jpAawgZYrcc3i9i8Mktv7IP782xf95hv+9; 25:SgJxheP2s/upO9vvXLHIxFABMgAyNHDIPqqHm0GIP3DsiYk1DdA6OBUiI5cdY65w4fMvRgO99l/9zndmwLpv7gRklZKPGpQKSN+WDjbQ/pb+hWes+sHEzsgyMFf/Flky7Ahf6kOv4nRKjanYKvn1b5838bBbLMIR/hZkhYxMIfdClGFDl9RsnXc8c1VBQTfLtr4/I2ySnRnb+iLsXcqEkRuaSle4Mr/5fzlqZ7n6Sp8k+TQ0LWegblb3KawTyBHXnIfKMx/MCgRaEfAZavAs6A== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM2PR07MB0932; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(159216200783502); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001); SRVR:AM2PR07MB0932; BCL:0; PCL:0; RULEID:; SRVR:AM2PR07MB0932; X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0932; 4:nwwe7fxt8bFPUMcWYWCnqH6S8/uPTZc8UfLFRRt8Gfe6QkEtwhycrjNnL+QSrb5vg2MLRh0uSsi0vEG2AeKsbmoVQ/vJTiAUL5BC1ir1pI95XqNauLgAtUhtNScfcxqlUrl1xiRdT2aM66HNDaPNY8I6EledKRV5stUsz2Vn6YHL7jQy6ojBkpG70YMnKas72wPjiJ4RdRIzm33IRFm2lRbT0Lpkd8gKSbBEFCdMCyS2tXIZpdfrk14my9agui2R93Nr4YwsA1YxRRewSa5Lf3bHfxKsIfMNlI8x1qbpxAESZO3/u5md/wpRTZWpgArkPg5wAKKyh7UWl2Qv+tOlv9HV5qVU3q0stTDKJUtJpoZVrlK27a6mZnJtFHbKOrwjLDrWBuDN7Sy9DyOoHKIC+9gEiTPybduMzbZVWWC9ckKNWuKEHSK1u5zIPehaUE8V X-Forefront-PRVS: 0770F75EA9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6049001)(6009001)(199003)(479174004)(189002)(377454003)(24454002)(81156007)(84326002)(5890100001)(15975445007)(122386002)(4001350100001)(86362001)(97736004)(586003)(77096005)(5004730100002)(66066001)(64126003)(512874002)(2950100001)(117636001)(568964002)(83506001)(110136002)(3846002)(101416001)(42186005)(65816999)(65806001)(76176999)(189998001)(19580395003)(40100003)(87976001)(106356001)(19580405001)(5008740100001)(105586002)(74482002)(36756003)(5001960100002)(6116002)(50986999)(54356999)(65956001)(5007970100001)(92566002)(62816006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM2PR07MB0932; H:[10.102.59.64]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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; AM2PR07MB0932; 23:V7g052NBoHPy0sETyOHOxCti1iyCx/4zf3Po9IF+g?= =?us-ascii?Q?1ng4ZiWcia4QOWmR/rOSTkGHlFztcQJEpG0kG8x2pCZQ+uNZDiUaHFg23ORH?= =?us-ascii?Q?mSobeXSAgeCe+Ae9BaWHOPbCy0W2UIJL76TFJJNdYiuSs8pQnMty8x/WWKAp?= =?us-ascii?Q?ZDJW3w2YndurYGo2TCMaesBl70AxbquRSfFPrxHT+lsX1hlaDvCnKVEoL8Bi?= =?us-ascii?Q?KKmIGvOaeIRTZiMGOh8XWeHajNbjT56MwKsqmNNyZWrBlt853M4m1R9Ktnct?= =?us-ascii?Q?JozqtemikcRZ+mT1tKTOFqqDeJEVbi1HGpbG6ydb17isMeaJnV430DVcj+Hf?= =?us-ascii?Q?D3QnR/5LoOFV/8jb9PQUOUEj4N4L4+NZ4zXEk9b7x808CtjcFkCbUce4yMTf?= =?us-ascii?Q?NtqzXk/iZrMpA4tsqi4+l0iKrgTzkdwrbVg6ZkbO/i5yxXpx2q2ufL7nhbYo?= =?us-ascii?Q?wMxmZZ2vFyUm05IVxGRvTEwgi6O4gwgwiSc07t+plcwSMuYOeDyObfYRjgNn?= =?us-ascii?Q?Zh0n5bVOcfwvW4qw6F44twwRid5cKsb+4lE8A+HXYxFXS4z5G+dGLMFmiqY7?= =?us-ascii?Q?MLjLAhCypLQTHtmH2f4l43m6O/G7CRYnHBOU80q8mR1Cft/vP1dc3FKXxW6D?= =?us-ascii?Q?wV+baxpf4QNKJymqv+5wIkN8Kvs80+cdarzWJmlFZ1frGJ6J56f3lhCALaf3?= =?us-ascii?Q?hU8kG71XXOk24XNHIqEdpRQGI7IuEuKBeU5YARy5f4DCPuvS/IwGmuSLl/Kg?= =?us-ascii?Q?fQl7jW5+iED7z03xfJqy9MP1EmUit9KW7223z2wQt/GLPH9KY3fyFsLGImvX?= =?us-ascii?Q?bwnM3ysc1JUBvv6BjEarv/5J1vkcFykDM7QPxT/mno4ojiwAKV/Nbh5cgh+u?= =?us-ascii?Q?SJdkyByEEi4jG54or84xwHBAG8FFYYvWzMChG+Pc+3iJMqCqOLVX3lft70fM?= =?us-ascii?Q?+CdmDet+Hklf0v7PXQ+jsjen9cimN11OYEAFGSOjpqbig1N9gI7ltZWG/uIo?= =?us-ascii?Q?l9qFKUV4JHlYk2j56Voxa8hocqRbc/IBIwpnN1OgeB5lNOfVrP/xiRSZT2bF?= =?us-ascii?Q?e34p8gdEAejCY8O4EmnDoE5i+xkS018k6J193nMJ+XCDlmHvzKQeoTvbizm/?= =?us-ascii?Q?xTodB9wZBbNvdbYrosbvPARfghbJYlTIcAlpuNVd32WEcC87rh2vFR97tO3V?= =?us-ascii?Q?GQdmx5ZR4ahyg7j9tKkSXFNV6qvgKykINmajIbXyt4xf/Dy42pgmWcJK1upA?= =?us-ascii?Q?K+qbBY/l+u+E35mNhBmLPCWRHHbBbLui4YJILC2orWmpJ5zlppQVURXLZDqW?= =?us-ascii?Q?qAo2xqElNspILtWGJ0sNXg=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM2PR07MB0932; 5:y5UCda2+DD4a4AR7owKSk4llf5gZIu32ofxjzkSgfzPchR0o6bBpZPqO8UmQCQWGJiwiahffw4cowdlTFOslBK95miV9UynF7KlOTzy8yN2VyJ45aSQsJQdO+E42WJybsNHxV6db0sTl8GFy33a7Zg==; 24:Qd/tI7RCygthwOQ/XoRWzKb+Pa1A6AOLza+TEmCWn1uDJ/MxU1F5j3GXW0VWol1GeqC7ss4Hygzxb5nQ59kGGQ/HSUqrzBbiuUY8KbBtGTg= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2015 10:55:24.4654 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM2PR07MB0932 Cc: "cake@lists.bufferbloat.net" Subject: Re: [Cake] GSO peel behaviour tweaks 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: Tue, 24 Nov 2015 10:55:51 -0000 --------------ms060106010000020909090109 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 24/11/15 10:48, Dave Taht wrote: > I don't know what this used to look like but it is essentially wrong > in both (all?) versions. > > - q->peel_threshold =3D (q->rate_flags & CAKE_FLAG_ATM) ?= > - 0 : min(65535U, q->rate_bps >> 12); > + q->peel_threshold =3D (q->rate_flags & CAKE_FLAG_ATM) |= | > + q->rate_overhead ? 0 : min(65535U, q->rate_bps = >> 12); > > What we want to do is closer to: > > A) start peeling once we start accruing or incurring delay in excess > of, say, 250usec. At 1Mbit, this is basically peel always. At a gbit, > it's peel with roughly two 10 full-size packet offloads in play. There > are nuances vs a vs ack GRO stuff (served with a 300 quantum in > fq_codel), and in the 10-100Mbit range... > > A1) So doing nothing at a rate unlimited is wrong > A2) Taking the current len * flows as a way to calculate it is wrong > A3) I don't know if this was ever "right". It doesn't need to be > perfect, but this is far from right... > > While I am unfond of the rate estimator's overhead, it perhaps could > be used to calculate the peel threshold in a saner way... > > B) always peel when we are trying to do accurate on-wire accounting. > > As for the other patch... > > In general random pointer lookups into memory (like the skb->gro > pointer) cost more than math as the other two params here are possibly > part of a local cache hit already... and I have no idea what the ratio > is between gso packets and how often you'd hit the comparison... but > see point A2 above... > > - if (unlikely((len * max_t(u32, b->bulk_flow_count, 1U) > > - q->peel_threshold && skb_is_gso(skb)))) { > > + if (unlikely(skb_is_gso(skb) && > + (len * max_t(u32, b->bulk_flow_count, 1U) > > + q->peel_threshold))) { > > > > > > Dave T=C3=A4ht > Let's go make home routers and wifi faster! With better software! > https://www.gofundme.com/savewifi > > > On Tue, Nov 24, 2015 at 10:12 AM, Kevin Darbyshire-Bryant > wrote: >> I've just pushed 2 commits related to GSO peeling behaviour to master.= >> >> 1st tweak is at worst benign and at best removes a multiply compare fo= r >> every packet enqueued. I'd like to think the optimiser in the compile= r >> would have done what I've done explicitly (in essence check this is a >> gso packet 1st before thinking about peeling it) but when I checked on= >> x86_64 there was a definite difference in produced code. >> >> 2nd tweak is *not* benign. In essence this forces peeling if either A= TM >> framing or packet overhead is specified. Previously only ATM framing >> forced peeling. I think this is more correct but unfortunately will b= e >> slower. >> >> Commits can be reverted - feel free :-) >> >> >> _______________________________________________ >> Cake mailing list >> Cake@lists.bufferbloat.net >> https://lists.bufferbloat.net/listinfo/cake >> Both changes reverted --------------ms060106010000020909090109 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 SIb3DQEJBTEPFw0xNTExMjQxMDU1MTlaME8GCSqGSIb3DQEJBDFCBED05cKnJ6mU6cJZcjQ3 9wa8Hrtdx+Jjrta197+Fix/QLe5MbX6sB4L4sp+yt0DJo2xyu8FzQ/y+ieUBsh7s0hkMMGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgB20WQO4wVFTPQWNtCZfrsGJZ1YzXUi 714kvq6qFfASdbguP+ekFOWSZbcyhiN9rs5/eT6OvEVLo6AuUep545WJt0WySK/QXf0UTVsh BuNdplJpNzqX314kxLdv3xihRUT4sdu0b/5gtMLS7IV3GzaSmxAQ1BVbmI+No/6VuqTxQPwM dtIlCias2dH3Pyq85pdB5Vt9RH75U6CTOiQgYAxTfcUwTcQCXDXUs3gCwllO2T4mfmG8p6XU 80lCBh49cvj+KRbRkBGsAQ1M9UQ9VHO9r/iruz8J5MzRekC3WvIFwocz5rwT5HJOJ396tLKP mFkk/5Ee576JG9XYwVqEdSbY1lxJ6AOSrMnpqyjzMoOh5cYCMLJbtIksVvNyDkXjeVtoARWQ dUoI/U95BX0dHMoyq2llpNz2LIZ8Vrm16lhZEwEnM5tpxdfFoTs7H4RZdGbfNB8RZLojonJQ 5DKAk/MSKGlcwiS4C68NclitcjqDG5CS/2Ij+3C2QY2fX6kWr1P5xY1amGRowzYp+WmYZT1O S8Fub1n09ttOXe63BrHzQnhIWZ5z48go0MSvuzPBLpOi7Mj6K7KS3EaEgyqRObK5k9iAVqaD qXSKsI/nzK1kfesbSdKnZs6s1hOgXvJTwaK2BtLpomc0q+8Mh5wrma/pBTEBQnCo64OCOy7L 0x5mowAAAAAAAA== --------------ms060106010000020909090109--