From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-db3-obe.outbound.protection.outlook.com (mail-db3on0074.outbound.protection.outlook.com [157.55.234.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.bufferbloat.net (Postfix) with ESMTPS id 0CE893B25D for ; Wed, 4 May 2016 08:07:20 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=darbyshire-bryant.me.uk; s=selector1; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=djRlGo7vlt3T3/1gnwuoqYOZZojcuF+LQOQ8qI/wsLs=; b=mw/8NCgF453Bi3JslpkZptSm3uuBWOJPliZ6q1DOnAFewlp/p8Ktk0g+iMzofieCokYJi5z9lUSNwtuVZAGXvI5QmnMYJTMAgSFmNOcippxPx5WCpa4EC6+krlONqAYUIw4LByL+pLXw+Atq7+WXusl1W8lq1FTg8gigQbsCOLE= Authentication-Results: lists.bufferbloat.net; dkim=none (message not signed) header.d=none; lists.bufferbloat.net; dmarc=none action=none header.from=darbyshire-bryant.me.uk; Received: from [10.102.59.213] (109.159.227.69) by HE1PR07MB0939.eurprd07.prod.outlook.com (10.162.27.145) with Microsoft SMTP Server (TLS) id 15.1.477.8; Wed, 4 May 2016 12:07:17 +0000 To: Jonathan Morton References: <5729C7A0.40600@darbyshire-bryant.me.uk> <0B1F2C22-6F2C-4C06-904D-88065399BDCB@gmail.com> CC: From: Kevin Darbyshire-Bryant Message-ID: <5729E5F1.1020004@darbyshire-bryant.me.uk> Date: Wed, 4 May 2016 13:07:13 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: <0B1F2C22-6F2C-4C06-904D-88065399BDCB@gmail.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms020000010901040703000409" X-Originating-IP: [109.159.227.69] X-ClientProxiedBy: DB3PR05CA0034.eurprd05.prod.outlook.com (10.160.41.162) To HE1PR07MB0939.eurprd07.prod.outlook.com (10.162.27.145) X-MS-Office365-Filtering-Correlation-Id: cd4f3dcb-3c4d-4e6d-cf6f-08d37414a35d X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB0939; 2:qAIsLHqZtb8Ljl1RGZUolg//Nd1Vb2FM3+fnpFy39BX4zR3ZM4jjHljWRC7RuQKNNIGSxaGmDVuyT0SH9RGfgoDCd98eeFkm6CCcta/+ouZ7LG+OCUbk3FI4RBvL4doNdkxwqMaFG4HUsS/+e9DsKRLCwEgohxfvsZhd3kyIPuG9x1m2CdOMfYxHdJsHVw9P; 3:LFJVHQVhgdx0yqB8YPj75POQMtGS5Xrv8FEkRsckRVDQGc06wDvDWM2Mjcec/ilRfedI8T0IIAoDvwuhgdfaJUdEJdmuvJCCHG4QzikeNVFc8fMUBoHDdvgi49wbS6o2; 25:9BUn44C8lZSKBh+TxeZ0hyUkaE6iXBJ/VVEpUbl+GnYBFA1qeKbdjJCE2ObQ++09Ns8sRwcJ7R7yMXSp519b9ngc1KmFu8FPN9XzJZ9J9Qy7JxTPNvp3xswrMLA0SLgrKL4sbAfZJ4ymrHLtRIc+UAN9129edHqm3bDKBJleZ8LXXRSPSlKOVhw6aaAyNpcBKbKORQ+hVVxtMlTPmzRvFbeYMKlxpoF6wwp7CfsPnP6/JLHZqNk8qYVBXC+AWeQ2YsEDqTy+2U2f7VGH7TNdu+ozj9jEk2G1PgT/kUZYxhLZXC1yxLKQNQz1u0d8SBUmwI5pqsYeTJcC7aJ6he2JMA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR07MB0939; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(9101521098)(9101528026)(6040130)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041072)(6043046); SRVR:HE1PR07MB0939; BCL:0; PCL:0; RULEID:; SRVR:HE1PR07MB0939; X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB0939; 4:IOxBWOz8V1ByvLym1u6vQVx0px0nI0E4EhmexFOaIIjQ7TEzBWukB+rreHYqXReSsBjAGLrnMpyov+kFNuWGb/H+YVfhxEcbK+lGhNux9LMcmJ/fhcMscUyAwGEt/UwZ9voAWpDBaMQ8kkIrbfAje/vNXWRhP8lkMdm6q3xF9GTZBXii4bxx01roOqCbWFv3bHwOhilfbGAYg/BJviwboPRuJOCHs95HMvlo1xf8XkVeen/YY2peJ5wzx2RDdcZ8lBgqISbtqsD2Hv2quqjECCnWXE25VXlK522iNUMzka/q77DMCH/12zKbUKlpGQDxUPeDBQVhfyzaS7D2vPxd8kNe9sxbhUNQL4+MvkqVC8UsKeAs354gSjwq2J9p3WAKpBsyZvG//qd3QqE/BDqqfTW/+gchvMdle8841drxS20tYBG1TlU6r+XRw7nhQ4Vq9aL8IMDTFtsJjW+9wRQebEK8yrC2bGK09+axno9eVkY= X-Forefront-PRVS: 093290AD39 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6049001)(57704003)(24454002)(6116002)(189998001)(65956001)(36756003)(5008740100001)(65806001)(3846002)(66066001)(19580405001)(42186005)(5890100001)(92566002)(83506001)(586003)(2906002)(5004730100002)(568964002)(4001350100001)(1411001)(4326007)(74482002)(76176999)(80316001)(19580395003)(33656002)(77096005)(59896002)(65816999)(110136002)(86362001)(2950100001)(64126003)(81166005)(50986999)(87266999)(512874002)(54356999)(84326002); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR07MB0939; H:[10.102.59.213]; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR07MB0939; 23:i0tj5gfFAoAGVswpO3lbWHM9qlf6L5z0s3noQtITd?= =?us-ascii?Q?8w8rkzduDFUqG7R+ReV4CbkJAWMMASvHNm/yuZA0BYJ6uG8kPr8ys0NRwCZ4?= =?us-ascii?Q?VFMUNmOuNB73PbyRy7HNEIPFP/i1VX4egG5WC34ED8KdH36zZaCWErq5cerL?= =?us-ascii?Q?LQT4KQeB/qgaJEn5xYqo6VsCcgAOOy2JilZ7wDT7Yn+NHWtHXfbXEFagZjG8?= =?us-ascii?Q?4M7y/X3oDyYi/XutIY94kueiV8/9SVZ3PGy+dL0h5rJ4TTjkXSOZhhVxDP4A?= =?us-ascii?Q?UUclHzj/IN0MJO4D0ZElUFnX72MgTFUEUzKvvelLqiNYwz6emLvQsb9mVWKG?= =?us-ascii?Q?EZxvg4hUqLasr1cvQe2z+kC3zSew7ZWLWOjHm4l4lmxL2oGL4bEee9Kp5cU6?= =?us-ascii?Q?UTQhhd7KDubfJ+BsYmIdeOucgcEJtdvVk77w6pfMtnKtcZ1rIMnRP0KEyGH8?= =?us-ascii?Q?ejQ1pjU5Elt31ZSRPjY4O4Qxyc4zv8RQjllHIPDpLGT74whZVcurUPTcMXii?= =?us-ascii?Q?kjZHkdnrR8Ehe7iva/dsF+jgdNHbu5PotDPwX/f6d45xntqH2XdkZD0rsZXp?= =?us-ascii?Q?1p3bxqlZvPO9bDwl7FJtv7rlpUWTeju7lK4+HayLasmdvLsKh2HXSvgZJjF3?= =?us-ascii?Q?3qPhnd5TNV0B0OdQQJUbV1/nxjd04vXOQ+s644gOqcHVywACt0CyA11tHEdd?= =?us-ascii?Q?wcB6iHzVBUpk8ogf7RFneQSSGlLGhKwtrYHaTQYSNTENlvm236F8Jftkz80D?= =?us-ascii?Q?wNjYoKmloK33v0lNrPqNxK9cHkH0BlfdmT7jj9cgXe7A2EmYprQ6ujJtDCrP?= =?us-ascii?Q?KSp9bQxHbC64bT81T3NW9HI5AW+4Rl62Vh+nVluXnFuiQXjt0IQe8k8gOcjC?= =?us-ascii?Q?Z3TVZVXeDnp4yhSTvL7r6nzpMh4VT3m7BmuycFYeJoAVCrjU+ERde2UldcxJ?= =?us-ascii?Q?vhXIHtsZbMcpvn34vyLlr0ULJJ7zrjowVLDr35ZYSfpPzOkCfyZwqoAiB3FA?= =?us-ascii?Q?8qs/FhZ7TrGDePDHvfUQ4x9IcBJPSA3au0hUHQpwObHotTuf0Pe1g784Hlvs?= =?us-ascii?Q?WY/LEAPGC2wQtc/x5we7SeQazKHr7FiZDSf3uJPWwirc3kThYGqXZWXw7fQ0?= =?us-ascii?Q?Xebzfgd7SoPS/qBHeZz9ie1fL0p70K5?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR07MB0939; 5:O+zGl4SslXABlc5h+nzBWC7SDNJRAkRGBvQJHhEw9/LtvpErGqnspp/hTpnigc022ZvZGyrjGG7Z6KCNNsJwHReLQ8cFn1+gvrTDEHBVrHK6EP0i9dv2TbxSG+mRbkm0bnJiAhsdYNJCZgScrYJ/FA==; 24:jRiXlmvdUQ7V/B8CRWeNKRn6zVVmTj8juzzzhuRSAm9qmgrjkykzdf+R45sv3D6I7nqHKSCXFHG8gAlz9z1sd3nOSoT5PHXV9fMw0sBkvBE=; 7:UicfYuMffqsp1h9sc8YOhCH3Kz1+96ui0E3GYQ8TyVhltp6K4sFCItgmCCfAcHaC4pgNHFlwN6s1PxAyhw8adO95VnOjDOVZW6n6fNUVRyKNEiX72VHhfAeNGNTTFZoanB/fQwkr9XBwt/IrpWOhP09+/TWfT58w4CEgnGoWywwxVQqGc3mXAeZDUCpGsqTe SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2016 12:07:17.5092 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR07MB0939 Subject: Re: [Cake] cake, codel5.h, ecn marking & dropping. Confused X-BeenThere: cake@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: Cake - FQ_codel the next generation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 May 2016 12:07:21 -0000 --------------ms020000010901040703000409 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 04/05/16 12:41, Jonathan Morton wrote: >> On 4 May, 2016, at 12:57, Kevin Darbyshire-Bryant wrote: >> >> In essence my (mis)understanding of this code is something like: We've= >> got here because we've been dropping and codel is telling is to contin= ue >> to drop. With that decided we enter a do..while, the first thing to >> happen is to ECN mark and let that marked packet escape to send the >> signal. Otherwise we appear to iterate around the loop. So here's th= e >> nub of my question: the INET_ECN_set_ce is done on every iteration of >> that loop...with its potential early escape..do we escape on every >> iteration? Do we need to twiddle the ECN bits on every packet that >> we're about to drop? And we seem to mark the packet on exit of the lo= op >> anyway. > It=E2=80=99s rather oddly structured code, to be sure. > > The vital clue for you may be that you can only set CE on an IPv{4,6} p= acket which already has something *other* than Not-ECT set; it=E2=80=99s = impossible for non-IP packets, and not ECN compliant for Not-ECT IP packe= ts. So INET_ECN_set_ce() returns true only when it succeeds. > > On a UDP flood stream, typically Not-ECT is set, so the early-out never= triggers. Instead Codel drops a packet, schedules the next drop, and ch= ecks whether the next drop schedule has already been reached (which can h= appen for high drop rates and/or slow transmission rates). > > It then attempts to set CE on the first packet transmitted after a drop= sequence, just in case it was a mixed ECT/Not-ECT stream; strenuous effo= rts to get the congestion signal heard as early as possible. This is mor= e likely when flow isolation isn=E2=80=99t in use, or when it is per-host= instead of per-flow. That=E2=80=99s also why the first attempt to set C= E is within the drop loop. > > - Jonathan Morton > Thanks Jonathan. Appreciate the time taken for the explanation. Much happier :-) Kevin --------------ms020000010901040703000409 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 SIb3DQEJBTEPFw0xNjA1MDQxMjA3MTNaME8GCSqGSIb3DQEJBDFCBEBrfOcQdQBCXR8sdtbp kXHyKl++LPzyC74sVyQ19bdM96s6k7XlF/X0yhCqq0cIlhqfiqyzXjFMYjSekoWDvSU0MGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgAnQEozxATCHY7cIUqfoPxiFYPC1iz4 XgnKk1oN05+OKFGMp2Jtwl1jvasAjjAq0hVmingKpQvk2UMc/q67HstZK3dDJQ787tjV+C1s aZ9xydNOqnSYhJyeAX9Yrs/NN9v/ad0H8AilNjWAK5h40ssYp4C4e593kQV3i20Ox0lIikVV iIiMZFXQD6E1v30mD4cSq5jWfDda8/iXuPJgAcQ4rBHrntEepmeUgYU77f9SBv0Uhkitpbdg aVGhT++B3jk9KcTU8OVKUXbxC+YrFEdHjPoy5OX4PLCNRH+VZTP4T5O83HSZ8lCAPmRoESNF NXQFMrhL6IjLKSdjSv8KDf3aZG3+GvaGL9HQWqdLFDR7Xr2abjN6mfPjeO8xUcQduNNjVBJC /A3fMs9YNcE5/kUy7D6uiSEUfq7u6dL17h1DTI2ON2C1+siwrrn5TNuAO4D1ktgZ2WuzVUHc 2tmKLpO04dnX4Ec7jFX6GKAGrRJ10IqEI+usbV5ky9b8TDBUmpG7SLUB+dkLEAHr39OKBhd+ gl+jqpX+zKkgY0Kn1yTkPJ+mP2lLQEkvJW7DVb0Uaj//prxv9HERWy7/3T8Wa4R5H5w+eFPN Mf/GqgWpr0blCb7sE2SR1Cq0mhcWkYELp6MXqhP+5SkHiBrNVWjx7PTpzzs7ZmYTfBYTUXla PnZqlAAAAAAAAA== --------------ms020000010901040703000409--