From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1on0084.outbound.protection.outlook.com [157.56.112.84]) (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 2ADF321F459 for ; Tue, 3 Nov 2015 04:13:49 -0800 (PST) Received: from DB5PR07MB0935.eurprd07.prod.outlook.com (10.161.200.142) by DB5PR07MB1095.eurprd07.prod.outlook.com (10.163.103.149) with Microsoft SMTP Server (TLS) id 15.1.312.18; Tue, 3 Nov 2015 12:13:46 +0000 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 DB5PR07MB0935.eurprd07.prod.outlook.com (10.161.200.142) with Microsoft SMTP Server (TLS) id 15.1.312.18; Tue, 3 Nov 2015 12:13:44 +0000 To: From: Kevin Darbyshire-Bryant X-Enigmail-Draft-Status: N1110 Message-ID: <5638A4F4.2010701@darbyshire-bryant.me.uk> Date: Tue, 3 Nov 2015 12:13:40 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms060101030508010209080608" X-Originating-IP: [2001:470:183f:da2b::632f:a7da] X-ClientProxiedBy: AM3PR08CA0056.eurprd08.prod.outlook.com (25.163.23.152) To DB5PR07MB0935.eurprd07.prod.outlook.com (25.161.200.142) X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 2:b76qhrZeZjX4qI/oJ5ONqXCMRi5LJnVO8NBIp3T6tkzwR9nLCX69qR6HPupvss938RAShBlHpPlxQT5awJM1oFWUvOCs+w7lfxbJnt4EUySfZtVW8i2EbqbJU+3RpWwiMw4FYQzEPixJa22jQXiZGL8USA90gDgnmgaaOscsZGo=; 3:K1kpH+UaXCtWNmL/8q6tK1KmkLRiaX1kfi4CoEPujv6/3g1nVVKxjGRLZTDhjlOKG/fDvQJ0mcH/PetGCXlafgRG5vzWIG7lZhVTtowzQNZHqs5Z37UaE4ESfw5aoDbYUo72aHV/BEYgX/00wY+M9A==; 25:Cu2ILGRgckkwCUT+yMAgDI00wwaRfip1DByWvdJhLmHWBgtz52sb6tgCwc3pCAAroS6yF+4cmCuMWT7uWt/kGNrfiO9K1LHhLUUAF6+dQ+uV1UtKNETafILyXrdQGKfO5ahIDJLf4d3gvOC4ypdPR4im27zH6+Zzc8M94BWS3hVjx1CxfMPCSVooVk10fAoZcYPT9DXXGEKJ4Ge8Rp/fNpzB6mQBVYdYiXdJ2EHYchc5ODGD8JrQ095+t/OAU6hdtniXyAXr18RTuJ3DjuDFWA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR07MB0935; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046); SRVR:DB5PR07MB0935; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB0935; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 4:US+Rlx/uQnLTpkHTZa5XxidDE/GH2ZqixeRSir3lNiylw7KEjY5M7/zkn6QL37FwKLSPEvtp6hMsYhRYhbDtiBI7B8JdFQsqRNzwtixipb2GmNstj3b022N21HfwggWpG2gbhuytM+Vq2RkOvzZ+Pbs0/caxNh0mXZr4stpbJL6BamlDaf1rOeZEbFPQtl6Xm+YVE/yvSM0VaAdn3AdXokaL8m7Rp24yCnzHyl2fnItXNHf3K1hAINPLspJoCoNJ58qYk2sQmB/ZUi1FTAGvkbz6H9fHeJm2D5xlo+r91Ul7FVGz3Dar2uB3RJ9xsP+ddUvnGns0O/shseWPvPEsltpwHx02Pn5OrOHSvxSnNl6v8HuSWFu4C8c0FdjSNGqD X-Forefront-PRVS: 0749DC2CE6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(189002)(199003)(101416001)(84326002)(450100001)(2351001)(83506001)(74482002)(15975445007)(65816999)(87266999)(50986999)(65956001)(54356999)(1720100001)(229853001)(19580405001)(5008740100001)(106356001)(59896002)(77096005)(80316001)(512874002)(5890100001)(5007970100001)(105586002)(5001960100002)(65806001)(110136002)(81156007)(40100003)(122386002)(19580395003)(189998001)(5001920100001)(86362001)(42186005)(4001350100001)(92566002)(97736004)(64126003)(107886002)(33656002)(36756003)(568964001)(5004730100002)(87976001)(3826002)(5001840100002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB0935; 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; DB5PR07MB0935; 23:vEOb0wPJ910/ADoKmwa1DTNcjR7wPjfoFmQ5KSuV9?= =?us-ascii?Q?8MIB3wd42bP+PF8E3CakxacbsogkpnDh+WwBtsgIketJYCOdD7oPoygv1b2j?= =?us-ascii?Q?1VMbD3bVYYN2eQUKY8u1Dux8lj0ZHBUBRQHb8SGpiHkIhOndNfDa+TYdJc9W?= =?us-ascii?Q?OO3Y4ohgLpChHEsS6aF/5OE/iuRW8H6d/RF/cs2js/zhwGlRkuMLpaQUbyTz?= =?us-ascii?Q?6OoXjTfn224Qeo7QBWmFVr41hJArvy+DKSmoKzilL6bMt+dR0Ls4EwwX45FQ?= =?us-ascii?Q?W+oKDFRRiLxzGswRFdAtHi4CSF8/h7O3A4QFbpGp6NZccUqLgmBa6JY2twX5?= =?us-ascii?Q?bycaoCDdWMZukZqsm07JhhHs1mjZsUAm/eeRg6Yq0RG/+9tzgDZtvCu7+YzA?= =?us-ascii?Q?He9S664UUaovT8ApvSsQau1TxELPnShonCgvzvHQzaemTbdvepB3R+nBMclr?= =?us-ascii?Q?23JndQZoeQ0olxSG8Af6LMXJbcyfcFDQIF1apyn2QEZZ4yPU0wCmtXKRHJeK?= =?us-ascii?Q?aS8vM6KylKFHddKa/rt71mV9iVPpaD57KGLbWF9GwwAcQbbTzTjKb78Xvn25?= =?us-ascii?Q?RD60OxYs96LMFuP/nzMb+CPbyM/9riCqaLCm7CT5717kCYrD3F/DxoMPGEHb?= =?us-ascii?Q?EDKGLxwRC/+0VQCKjGn07yHH/KQFfx8xmHB8YRIDaGsWHNGTlxBd7T6w8hCn?= =?us-ascii?Q?u+bcCw/7jfPVof2ATdB46vU7HTSR9ftaHdzJjwgl5EUkp36VILS5POslz0+3?= =?us-ascii?Q?FDY2N+W8N/Cfl3WyIPLSswZjOjrA6ra5IxCAxF3mOs/QrfhMCVPb4LzMr9j1?= =?us-ascii?Q?QHY5jsvFTVBYzyvcXLM387Sm/VlxR+do6n51NsNeHWDpy3VDLAMmtjUhPyKv?= =?us-ascii?Q?08Fwr7UjbsI9YJmpbacQrnwVkZicIWnshgwVVZvHA9+tADJVGcJNw5Z+nyY9?= =?us-ascii?Q?EjeCHtU2oFp7Ri36B6GUO7ZebUtApjOxBwdW1u/1c11lcCvGSIJ3Z1XQQCej?= =?us-ascii?Q?T/XvYKRUmmYoPOPfQk9kVeiyCE55cj3rochRJmA9efj6Qx8pAaYBipNIkB97?= =?us-ascii?Q?pxd9d3T/ItEp0lnEj63JgXkwbK9AipTnxLC02AF7kzS5KdAjQ2Sj2hUL5cHs?= =?us-ascii?Q?KKnG1bYNu5+44ViLYkCMa9Z4OENHEErpMZ53eyCS+SXVgiUJjqPCsxlf6QzH?= =?us-ascii?Q?FCdJ61AjrqtGuUlbRxW2nMNIyPxnJMYini2kBStPVGTLls7ZM6SLYPqdlsjs?= =?us-ascii?Q?d3b/cdBVyHP0Wfpilp4mMn/rrBrfX9/l2Gad/v1FgY+jUram6lNYJGMzWnBz?= =?us-ascii?Q?kQTFh9RTaFvSyx1FhcqdIAKd1jf/haqaLTl45EnAqVZ?= X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 5:Z2UkizZ6hYrflEeKQ9xA6r3UrDx5i2s8a192sHMVykk5x/0tsFWeSShZqsXyqhA2tt9nTzXYruhL5xFIqYExcDHoZDTtUeKWhdLto0BUgd9Qq6/8hT0ylGgTzbEsqL6dS63T7gdtY7cjwrddJzJBtQ==; 24:OozMRiv9tuYCOKf47v08zPn7OATPEe2Gv6s5ss13y4ql228LB3ev1rf+7gO+R2JhBZfqPpZQtTlSscvBzMoG6qmyZbXo+5LNjN4X3jszEUs=; 20:sx1ypf+elrcaYB1tvAN1VQQlis46Qouelda6tnTBShCGpgGMsIy/7CpO1lPV5DU3yQko+ZMG0jv0Vy0yGLDWKQ== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2015 12:13:44.9778 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB0935 X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB1095; 2:Hqf0vbOR4XIPQCj3Z+sN8TOmAXr5xGbg1EiL8Pg990CoKg8C5X0n27z1wpleUETCtr+gM1s/no8xBZ/7GnWOO1lGsSKLzxMc78nmWqWPCvMmCQKAA87pnKZXJPTdCnKAFGlw0s8GnP/d4KYW+OJx3N1r3XA2V08OH9vVJDtQVok=; 23:S0aS1Y9CJaH2NbnCBoObQQ59i1BGfPTIqVFJ1biOJu0UleNehC8gkUzV05Y1cTZdBzCjUa/1UNt4loGzDphPlLPOsRWEKNn5G8TG1ha7uo74dojbvc9UjlPnZC1redWOUO57pZrinysbDJCI8wsXd0eh3FmUCIsL/WGzYzh4qNHBBhCwPHA+clfdg/CRoXmq X-OriginatorOrg: darbyshire-bryant.me.uk Subject: [Cake] More on 'target' corner cases - rate/target/interval confusion? 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, 03 Nov 2015 12:14:12 -0000 --------------ms060101030508010209080608 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi List, I'm still not supposed to be here (I'm working) and I'm full of a cold still however the same/similar questions keep coming up and it prompts a follow up 'base' question that I don't know the answer to. So the background: Targets. In the absence of any other instruction and assuming either a) sufficiently fast rate/unlimited, the first cake classification tin will be set to 'interval/16', for 100mS this is 6.25mS. Where a rate *is* specified then this calculation is performed (I can't get my cold addled head round this at the moment, but suffice it's an integer division only dodge and 'magics' up the time for a MTU * 1.5 packet to flow (byte_target_ns) Wonderful, no problem here. cake_set_rate(.....) /* convert byte-rate into time-per-byte * so it will always unwedge in reasonable time. */ static const u64 MIN_RATE =3D 64; u64 rate_ns =3D 0; u8 rate_shft =3D 0; codel_time_t byte_target_ns; u32 byte_target =3D mtu + (mtu >> 1); if (rate) { rate_shft =3D 32; rate_ns =3D ((u64) NSEC_PER_SEC) << rate_shft; do_div(rate_ns, max(MIN_RATE, rate)); while (!!(rate_ns >> 32)) { rate_ns >>=3D 1; rate_shft--; } } /* else unlimited, ie. zero delay */ b->tin_rate_bps =3D rate; b->tin_rate_ns =3D rate_ns; b->tin_rate_shft =3D rate_shft; byte_target_ns =3D (byte_target * rate_ns) >> rate_shft; Later on we see: b->cparams.target =3D max(byte_target_ns, ns_target); b->cparams.interval =3D max(rtt_est_ns + b->cparams.target - ns_target, b->cparams.target * 8); b->cparams.threshold =3D (b->cparams.target >> 15) * (b->cparams.interval >> 15) * 2; This tin's target is set to our calculated 'fat packet' transit time *OR* our requested time, whichever is the larger. Similarly interval is set to our requested target (yes I'm missing some stuff out!) or target*8, again whichever is larger. I've no problem with any of this, though it does silently override requested parameters. The problem/question comes when combined with our diffserv/tin classification, as ably demonstrated by this: user@computer:~/CODE/tc-adv/tc> sudo tc-adv qdisc replace dev eth0 root c= ake bandwidth 1Mbit ; sudo tc-adv -s qdisc qdisc cake 8005: dev eth0 root refcnt 6 bandwidth 1Mbit diffserv4 flows r= tt 100.0ms raw=20 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)=20 backlog 0b 0p requeues 0=20 capacity estimate: 1Mbit Tin 0 Tin 1 Tin 2 Tin 3 =20 thresh 1Mbit 937504bit 750Kbit 250Kbit target 18.2ms 19.4ms 24.2ms 72.7ms interval 145.3ms 155.0ms 193.8ms 581.4ms Note that as rate decreases, target & interval increase as per the above algorithm. We can see why: cake_config_diffserv4(struct Qdisc *sch) /* class characteristics */ cake_set_rate(&q->tins[0], rate, mtu, US2TIME(q->target), US2TIME(q->interval)); //Base rate cake_set_rate(&q->tins[1], rate - (rate >> 4), mtu, US2TIME(q->target), US2TIME(q->interval)); //15/16= ths cake_set_rate(&q->tins[2], rate - (rate >> 2), mtu, US2TIME(q->target), US2TIME(q->interval)); //3/4 r= ate cake_set_rate(&q->tins[3], rate >> 2, mtu, US2TIME(q->target), US2TIME(q->interval)); //1/4 r= ate http://www.bufferbloat.net/projects/codel/wiki/CakeTechnical makes reference to the bandwidth allocation but makes no reference to its affect on targets/intervals for that tin. Can someone please explain if the above is actually correct and why. i.e. I'm confused why voice traffic has a target latency of 72mS over a measurement interval of 1/2 second when I'd have thought keeping voice latency as low as possible would be the ideal. I'm sure I'm being exceptionally stupid so I await education please :-) Kevin --------------ms060101030508010209080608 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 SIb3DQEJBTEPFw0xNTExMDMxMjEzNDBaME8GCSqGSIb3DQEJBDFCBEAZp1CUs+jii1VFCdOe wo5blSn2swgbmI+I0adCT3iW5tF7bjO0bTG+YLtjB2Uzr1ci2bDaYQWwxprJlJ5cmzByMGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgChIEdHJzS6A8IFMDujWpInwMjfrVZn +fP/SJ+DCAoatLC7E0ebPA1er1E86v7FIWmaNit0sfrJpLCGTOZ3KbmG2Ssx/juijyawHpgU C1Y0RgGtpKzz3gPOcHR3ZEDIPj3ogYefS52gPG4cYUkqoKvRBhYmrlOFwxtu4pPNLOHY72sy Wa4X1ZcoEh8Lrw8PddHWOwm1ZGtZj162htqdZho8PljTJApwX0ID4a9yubMBTs+eLFjFBJdv +kjvz3rDLh4yZxck0yS4AcJMfjWN67eAbWfuhJlIYJyffGPwVKlMJUUw2keaLUG8butUasc/ qQhNMpadNb2XMZfCenO1gP1mVHAsx2IslZJ3Jmx3lGtw0b3A7HYKOR8EQ0P8L7HRmiriXg5A Ryx293gIbP9pEqQvJT0XMFHPZVVxw0xjvfY/IO9lPo1i+imEd6EDTTVnmPDYXc8EyN1W2Aj7 2+/XnME2HCBMaYDOECwMVCIzrQnuGK78eWo1HqOUfAknfS+asoJUQNaauq8WfajeJg10O2rp ZeChNNEh+UqSEqgDYc4eRbrIEnQjyW42Bf7xBVg8Liue7aOjzx3EPW3sTdxsHCXK60+C5lKW uT4x3XQ9tm+90DLzIHyMSZ2S6Z+7Lu7ywwBAiKlk7gvCZqPgcrYMk+yOE8gAb0/wg981Q/kD qYKDTgAAAAAAAA== --------------ms060101030508010209080608--