From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ludovic Leroy Date: Fri, 16 Dec 2016 21:16:08 +0000 Subject: Re: Problem to priorize SSH traffic Message-Id: <58545998.9040905@free.fr> MIME-Version: 1 Content-Type: multipart/mixed; boundary="------------000507090805020503020101" List-Id: References: <1737987792.142216491.1481907014295.JavaMail.root@zimbra45-e7.priv.proxad.net> In-Reply-To: <1737987792.142216491.1481907014295.JavaMail.root@zimbra45-e7.priv.proxad.net> To: lartc@vger.kernel.org This is a multi-part message in MIME format. --------------000507090805020503020101 Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Thanks for replying. The script is attached. Hope this helps. Ludovic Le 16/12/2016 21:34, Alan Goodman a écrit : > It might help if you provide the script you are using to build your tc > queues... I find this more readable than the output from the tc stats. > > Alan > > > On 16/12/16 16:50, Ludovic Leroy wrote: >> Hello LARTC community, >> >> I am building a TC policy at home that answers my needs for a small >> DSL uplink 800kbit: >> * High UDP responsiveness for DNS queries and ping (Leaf 1:10 prio 1) >> * SSH traffic gets higher priority. I view my camera remotely via ssh >> tunnel (Leaf 1:20 prio 2) >> * Guarantied http(s)/IMAP (Leaf 1:30 prio 3) >> * Torrent seeding (Leaf 1:40 prio 4) >> * Default (Leaf 1:99 prio 5) >> * Gigabit local network (Leaf 1:1000 prio 1000) >> >> The problem is torrent traffic consumes all the bandwidth leaving >> little room for SSH traffic (<100kbit). See attached picture. >> SSH traffic class with higher priority than torrent class should be >> offered excess bandwidth first, but that is not the case. >> The only solution I found is to reduce the torrent ceil value. >> Could you help me? >> >> Regards, >> Ludovic L. >> >> # tc -d class show dev eth1 >> class htb 1:99 parent 1:1 leaf 199: prio 5 quantum 1650 rate 66Kbit >> ceil 800Kbit linklayer ethernet burst 16Kb/1 mpu 0b overhead 0b >> cburst 1599b/1 mpu 0b overhead 0b level 0 >> class htb 1:10 parent 1:1 leaf 110: prio 1 quantum 1650 rate 66Kbit >> ceil 200Kbit linklayer ethernet burst 16Kb/1 mpu 0b overhead 0b >> cburst 1599b/1 mpu 0b overhead 0b level 0 >> class htb 1:1000 root prio 0 quantum 200000 rate 100Mbit ceil 100Mbit >> linklayer ethernet burst 1600b/1 mpu 0b overhead 0b cburst 1600b/1 >> mpu 0b overhead 0b level 0 >> class htb 1:1 root rate 800Kbit ceil 800Kbit linklayer ethernet burst >> 16Kb/1 mpu 0b overhead 0b cburst 1599b/1 mpu 0b overhead 0b level 7 >> class htb 1:20 parent 1:1 leaf 120: prio 2 quantum 9900 rate 396Kbit >> ceil 800Kbit linklayer ethernet burst 16Kb/1 mpu 0b overhead 0b >> cburst 1599b/1 mpu 0b overhead 0b level 0 >> class htb 1:30 parent 1:1 leaf 130: prio 3 quantum 4950 rate 198Kbit >> ceil 800Kbit linklayer ethernet burst 16Kb/1 mpu 0b overhead 0b >> cburst 1599b/1 mpu 0b overhead 0b level 0 >> class htb 1:40 parent 1:1 leaf 140: prio 4 quantum 1650 rate 66Kbit >> ceil 800Kbit linklayer ethernet burst 16Kb/1 mpu 0b overhead 0b >> cburst 1599b/1 mpu 0b overhead 0b level 0 >> class sfq 140:22 parent 140: >> class sfq 140:34 parent 140: >> class sfq 140:3b parent 140: >> class sfq 140:6c parent 140: >> class sfq 140:a9 parent 140: >> class sfq 140:149 parent 140: >> class sfq 140:287 parent 140: >> class sfq 140:2fd parent 140: >> class sfq 140:318 parent 140: >> class sfq 140:376 parent 140: >> class sfq 140:3d6 parent 140: >> class sfq 140:3e3 parent 140: >> >> # tc -d qdisc show dev eth1 >> qdisc htb 1: root refcnt 2 r2q 5 default 99 direct_packets_stat 2 ver >> 3.17 direct_qlen 1000 >> qdisc pfifo 110: parent 1:10 limit 1000p >> qdisc pfifo 120: parent 1:20 limit 1000p >> qdisc pfifo 130: parent 1:30 limit 1000p >> qdisc sfq 140: parent 1:40 limit 127p quantum 1514b depth 127 flows >> 128/1024 divisor 1024 perturb 10sec >> qdisc sfq 199: parent 1:99 limit 127p quantum 1514b depth 127 flows >> 128/1024 divisor 1024 perturb 10sec >> >> # tc -d filter show dev eth1 >> filter parent 1: protocol all pref 1 fw >> filter parent 1: protocol all pref 1 fw handle 0xa classid 1:10 >> filter parent 1: protocol all pref 2 fw >> filter parent 1: protocol all pref 2 fw handle 0x14 classid 1:20 >> filter parent 1: protocol all pref 3 fw >> filter parent 1: protocol all pref 3 fw handle 0x1e classid 1:30 >> filter parent 1: protocol all pref 4 fw >> filter parent 1: protocol all pref 4 fw handle 0x28 classid 1:40 >> filter parent 1: protocol all pref 99 fw >> filter parent 1: protocol all pref 99 fw handle 0x63 classid 1:99 >> filter parent 1: protocol all pref 1000 fw >> filter parent 1: protocol all pref 1000 fw handle 0x3e8 classid 1:1000 >> >> # tc -s class show dev eth1 >> class htb 1:99 parent 1:1 leaf 199: prio 5 rate 66Kbit ceil 800Kbit >> burst 16Kb cburst 1599b >> Sent 1705141 bytes 10742 pkt (dropped 0, overlimits 0 requeues 0) >> rate 8048bit 6pps backlog 0b 0p requeues 0 >> lended: 10742 borrowed: 0 giants: 0 >> tokens: 29290142 ctokens: 198864 >> >> class htb 1:10 parent 1:1 leaf 110: prio 1 rate 66Kbit ceil 200Kbit >> burst 16Kb cburst 1599b >> Sent 20229 bytes 229 pkt (dropped 0, overlimits 0 requeues 0) >> rate 48bit 0pps backlog 0b 0p requeues 0 >> lended: 229 borrowed: 0 giants: 0 >> tokens: 30859841 ctokens: 943734 >> >> class htb 1:1000 root prio 0 rate 100Mbit ceil 100Mbit burst 1600b >> cburst 1600b >> Sent 79426 bytes 563 pkt (dropped 0, overlimits 0 requeues 0) >> rate 784bit 1pps backlog 0b 0p requeues 0 >> lended: 563 borrowed: 0 giants: 0 >> tokens: 1917 ctokens: 1917 >> >> class htb 1:1 root rate 800Kbit ceil 800Kbit burst 16Kb cburst 1599b >> Sent 164307843 bytes 134601 pkt (dropped 0, overlimits 0 requeues 0) >> rate 796440bit 78pps backlog 0b 0p requeues 0 >> lended: 108779 borrowed: 0 giants: 0 >> tokens: 2192729 ctokens: -117287 >> >> class htb 1:20 parent 1:1 leaf 120: prio 2 rate 396Kbit ceil 800Kbit >> burst 16Kb cburst 1599b >> Sent 5042698 bytes 4448 pkt (dropped 0, overlimits 0 requeues 0) >> rate 64032bit 6pps backlog 0b 0p requeues 0 >> lended: 4448 borrowed: 0 giants: 0 >> tokens: 5142031 ctokens: 235296 >> >> class htb 1:30 parent 1:1 leaf 130: prio 3 rate 198Kbit ceil 800Kbit >> burst 16Kb cburst 1599b >> Sent 32111 bytes 216 pkt (dropped 0, overlimits 0 requeues 0) >> rate 0bit 0pps backlog 0b 0p requeues 0 >> lended: 216 borrowed: 0 giants: 0 >> tokens: 10309330 ctokens: 241546 >> >> class htb 1:40 parent 1:1 leaf 140: prio 4 rate 66Kbit ceil 800Kbit >> burst 16Kb cburst 1599b >> Sent 157507664 bytes 118966 pkt (dropped 0, overlimits 0 requeues 0) >> rate 724312bit 65pps backlog 0b 27p requeues 0 >> lended: 10187 borrowed: 108779 giants: 0 >> tokens: -2031932 ctokens: -222767 >> >> class sfq 140:56 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 2814b 2p requeues 0 >> allot 1520 >> >> class sfq 140:63 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 7570b 5p requeues 0 >> allot 1520 >> >> class sfq 140:9a parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 6056b 4p requeues 0 >> allot 1448 >> >> class sfq 140:f8 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 1310b 2p requeues 0 >> allot 528 >> >> class sfq 140:1c7 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 3028b 2p requeues 0 >> allot 1520 >> >> class sfq 140:269 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 4542b 3p requeues 0 >> allot 1304 >> >> class sfq 140:2ff parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 6056b 4p requeues 0 >> allot -72 >> >> class sfq 140:30d parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 1514b 1p requeues 0 >> allot 1520 >> >> class sfq 140:326 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 1502b 1p requeues 0 >> allot 1520 >> >> class sfq 140:3ad parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 1514b 1p requeues 0 >> allot 1520 >> >> class sfq 140:3c5 parent 140: >> (dropped 0, overlimits 0 requeues 0) >> backlog 1560b 2p requeues 0 >> allot 1520 > --------------000507090805020503020101 Content-Type: application/x-shellscript; name="qos.sh" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qos.sh" IyEvYmluL3NoCiMKIyMjIEJFR0lOIElOSVQgSU5GTwojIFByb3ZpZGVzOiAgICAgICAgICBx b3Muc2gKIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkbmV0d29yayAkc3lzbG9n CiMgUmVxdWlyZWQtU3RvcDogICAgICRyZW1vdGVfZnMgJG5ldHdvcmsgJHN5c2xvZwojIFNo b3VsZC1TdGFydDogICAgICAkbG9jYWxfZnMKIyBTaG91bGQtU3RvcDogICAgICAgJGxvY2Fs X2ZzCiMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKIyBEZWZhdWx0LVN0b3A6ICAgICAg MCAxIDYKIyBTaG9ydC1EZXNjcmlwdGlvbjogc3RhcnRzL3N0b3BzIHFvcwojIERlc2NyaXB0 aW9uOiAgICAgICBsb2FkIG9yIHN0b3AgdGhlIFRyYWZmaWMgQ29udHJvbCBydWxlcyBvbiB0 aGUgbmV0d29yayBpbnRlcmZhY2UKIyMjIEVORCBJTklUIElORk8KCkVUSF9VUFJBVEU9MTAw ICMgbWJpdHMvcwpEU0xfVVBSQVRFPTgwMCAjIGtiaXRzL3MKQlVSU1Q9IjE2a2IiCgoKTkVU Q0FSRD1ldGgxICAgICMgbmV0d29yayBjYXJkIHRvIGFwcGx5IHRoZSBRb1MgdG8KClRDPS9z YmluL3RjCklQVD0vc2Jpbi9pcHRhYmxlcwoKY2FzZSAiJDEiIGluCiAgICBzdGFydCkKICAg ICAgICBlY2hvICJ+fn5+IExPQURJTkcgVFJBRkZJQyBDT05UUk9MIFJVTEVTIE9OICRORVRD QVJEIGB1bmFtZSAtbmAgfn5+fiIKICAgICAgICBlY2hvCiAgICAgICAgZWNobyAiIy1DbGVh bmluZyIKICAgICAgICAkVEMgcWRpc2MgZGVsIGRldiAkTkVUQ0FSRCByb290CgoJZWNobyAi Iy1Sb290IgoJJFRDIHFkaXNjIGFkZCBkZXYgJE5FVENBUkQgcm9vdCBoYW5kbGUgMTogaHRi IGRlZmF1bHQgOTkgcjJxIDUKCWVjaG8gIiMtLS0tLS0tLXVwbGluayBpbnRlcm5ldCIKCSRU QyBjbGFzcyBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjAgY2xhc3NpZCAxOjEgaHRiIHJh dGUgJHtEU0xfVVBSQVRFfWtiaXQgY2VpbCAke0RTTF9VUFJBVEV9a2JpdCBidXJzdCAke0JV UlNUfQoKCWVjaG8gIiMtLS0tLS0tLW1lZ2FiaXQgbG9jYWwiCgkkVEMgY2xhc3MgYWRkIGRl diAkTkVUQ0FSRCBwYXJlbnQgMTowIGNsYXNzaWQgMToxMDAwIGh0YiByYXRlICR7RVRIX1VQ UkFURX1tYml0IGNlaWwgJHtFVEhfVVBSQVRFfW1iaXQKCWVjaG8gIiMgPT0gbGFuIGZpbHRl ciIKCSRUQyBmaWx0ZXIgYWRkIGRldiAkTkVUQ0FSRCBwYXJlbnQgMTowIHByb3RvY29sIGFs bCBwcmlvIDEwMDAgaGFuZGxlIDEwMDAgZncgZmxvd2lkIDE6MTAwMAoKCWVjaG8gIiMtLS0t LS0tLS0tLS0tLS0taW50ZXJhY3RpdmUiCgkkVEMgY2xhc3MgYWRkIGRldiAkTkVUQ0FSRCBw YXJlbnQgMToxIGNsYXNzaWQgMToxMCBodGIgcmF0ZSAkKCggJERTTF9VUFJBVEUgLyAxMiAg KSlrYml0IGNlaWwgMjAwa2JpdCBidXJzdCAke0JVUlNUfSBwcmlvIDEKCWVjaG8gIiMtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tc3ViIGludGVyYWN0aXZlOiBwZmlmbyIKCSRUQyBx ZGlzYyBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjEwIGhhbmRsZSAxMTA6IHBmaWZvIGxp bWl0IDEwMDAKCWVjaG8gIiMgPT0gaW50ZXJhY3RpdmUgZmlsdGVyIgoJJFRDIGZpbHRlciBh ZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjAgcHJvdG9jb2wgYWxsIHByaW8gMSBoYW5kbGUg MTAgZncgZmxvd2lkIDE6MTAKCQoJZWNobyAiIy0tLS0tLS0tLS0tLS0tLS1zc2giCgkkVEMg Y2xhc3MgYWRkIGRldiAkTkVUQ0FSRCBwYXJlbnQgMToxIGNsYXNzaWQgMToyMCBodGIgcmF0 ZSAkKCggJERTTF9VUFJBVEUgLyAxMiAqIDYgKSlrYml0IGNlaWwgJHtEU0xfVVBSQVRFfWti aXQgYnVyc3QgJHtCVVJTVH0gcHJpbyAyCgllY2hvICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLXN1YiBzc2g6IHBmaWZvIgoJJFRDIHFkaXNjIGFkZCBkZXYgJE5FVENBUkQgcGFy ZW50IDE6MjAgaGFuZGxlIDEyMDogcGZpZm8gbGltaXQgMTAwMAoJZWNobyAiIyA9PSBzc2gg ZmlsdGVyIgoJJFRDIGZpbHRlciBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjAgcHJvdG9j b2wgYWxsIHByaW8gMiBoYW5kbGUgMjAgZncgZmxvd2lkIDE6MjAKCQoJZWNobyAiIy0tLS0t LS0tLS0tLS0tLS1odHRwKHMpL0lNQVAiCgkkVEMgY2xhc3MgYWRkIGRldiAkTkVUQ0FSRCBw YXJlbnQgMToxIGNsYXNzaWQgMTozMCBodGIgcmF0ZSAkKCggJERTTF9VUFJBVEUgLyAxMiAq IDMgKSlrYml0IGNlaWwgJHtEU0xfVVBSQVRFfWtiaXQgYnVyc3QgJHtCVVJTVH0gcHJpbyAz CgllY2hvICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXN1YiBodHRwKHMpL0lNQVA6 IHBmaWZvIgoJJFRDIHFkaXNjIGFkZCBkZXYgJE5FVENBUkQgcGFyZW50IDE6MzAgaGFuZGxl IDEzMDogcGZpZm8gbGltaXQgMTAwMAoJZWNobyAiIyA9PSBodHRwKHMpL0lNQVAgZmlsdGVy IgoJJFRDIGZpbHRlciBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjAgcHJvdG9jb2wgYWxs IHByaW8gMyBoYW5kbGUgMzAgZncgZmxvd2lkIDE6MzAKCQoJZWNobyAiIy0tLS0tLS0tLS0t LS0tLS10b3JyZW50IgoJJFRDIGNsYXNzIGFkZCBkZXYgJE5FVENBUkQgcGFyZW50IDE6MSBj bGFzc2lkIDE6NDAgaHRiIHJhdGUgJCgoICREU0xfVVBSQVRFIC8gMTIgKiAxICkpa2JpdCBj ZWlsICR7RFNMX1VQUkFURX1rYml0IGJ1cnN0ICR7QlVSU1R9IHByaW8gNAoJIyRUQyBjbGFz cyBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjEgY2xhc3NpZCAxOjQwIGh0YiByYXRlIDEw MGtiaXQgY2VpbCAyMDBrYml0IGJ1cnN0ICR7QlVSU1R9IHByaW8gNAoJZWNobyAiIy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1zdWIgZGVmYXVsdDogc2ZxIgoJJFRDIHFkaXNjIGFk ZCBkZXYgJE5FVENBUkQgcGFyZW50IDE6NDAgaGFuZGxlIDE0MDogc2ZxIHBlcnR1cmIgMTAK CWVjaG8gIiMgPT0gdG9ycmVudCBmaWx0ZXIiCgkkVEMgZmlsdGVyIGFkZCBkZXYgJE5FVENB UkQgcGFyZW50IDE6MCBwcm90b2NvbCBhbGwgcHJpbyA0IGhhbmRsZSA0MCBmdyBmbG93aWQg MTo0MAoKCWVjaG8gIiMtLS0tLS0tLS0tLS0tLS0tZGVmYXVsdCIKCSRUQyBjbGFzcyBhZGQg ZGV2ICRORVRDQVJEIHBhcmVudCAxOjEgY2xhc3NpZCAxOjk5IGh0YiByYXRlICQoKCAkRFNM X1VQUkFURSAvIDEyICogMSApKWtiaXQgY2VpbCAke0RTTF9VUFJBVEV9a2JpdCBidXJzdCAk e0JVUlNUfSBwcmlvIDUKCWVjaG8gIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tc3Vi IGRlZmF1bHQ6IHNmcSIKCSRUQyBxZGlzYyBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjk5 IGhhbmRsZSAxOTk6IHNmcSBwZXJ0dXJiIDEwCgllY2hvICIjID09IGRlZmF1bHQgZmlsdGVy IgoJJFRDIGZpbHRlciBhZGQgZGV2ICRORVRDQVJEIHBhcmVudCAxOjAgcHJvdG9jb2wgYWxs IHByaW8gOTkgaGFuZGxlIDk5IGZ3IGZsb3dpZCAxOjk5CgoJIyBsb2NhbAoJaXB0YWJsZXMg LXQgbWFuZ2xlIC1BIFBPU1RST1VUSU5HIC1vIGV0aDEuMTAwIC1kIDE5Mi4xNjguMjcuMC8y OCAtaiBDT05OTUFSSyAtLXNldC1tYXJrIDEwMDAKCWlwdGFibGVzIC10IG1hbmdsZSAtQSBQ T1NUUk9VVElORyAtbyBldGgxIC1kIDIxMi4yNy4zOC4yNTMvMzIgLWogQ09OTk1BUksgLS1z ZXQtbWFyayAxMDAwCgkjIGludGVyYWN0aXZlIAoJaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBP U1RST1VUSU5HIC1vIGV0aDEgLXAgdWRwIC1tIG11bHRpcG9ydCAtLWRwb3J0cyA1MywxMjMg LWogQ09OTk1BUksgLS1zZXQtbWFyayAxMAoJaXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBPU1RS T1VUSU5HIC1vIGV0aDEgLXAgaWNtcCAtaiBNQVJLIC0tc2V0LW1hcmsgMTAKCWlwdGFibGVz IC10IG1hbmdsZSAtQSBQT1NUUk9VVElORyAtbyBldGgxIC1wIGljbXAgLWogUkVUVVJOIAoJ IyBzc2ggKyBzc2wKCWlwdGFibGVzIC10IG1hbmdsZSAtQSBQT1NUUk9VVElORyAtbyBldGgx IC1wIHRjcCAtLXRjcC1mbGFncyBTWU4sQUNLIFNZTixBQ0sgLS1zcG9ydCAyMiAtaiBDT05O TUFSSyAtLXNldC1tYXJrIDIwCglpcHRhYmxlcyAtdCBtYW5nbGUgLUEgUE9TVFJPVVRJTkcg LW8gZXRoMSAtcCB0Y3AgLS10Y3AtZmxhZ3MgU1lOLEFDSyBTWU4sQUNLIC0tc3BvcnQgNDQz IC1qIENPTk5NQVJLIC0tc2V0LW1hcmsgMjAKCSMgaHR0cChzKS9JTUFQIAoJaXB0YWJsZXMg LXQgbWFuZ2xlIC1BIFBPU1RST1VUSU5HIC1vIGV0aDEgLXAgdGNwIC0tdGNwLWZsYWdzIFNZ TixSU1QsQUNLIFNZTiAtbSBtdWx0aXBvcnQgLS1kcG9ydHMgODAsNDQzLDQ2NSw5OTMgLWog Q09OTk1BUksgLS1zZXQtbWFyayAzMAoJIyB0b3JyZW50CglpcHRhYmxlcyAtdCBtYW5nbGUg LUEgUE9TVFJPVVRJTkcgLW8gZXRoMSAtcCB0Y3AgLS10Y3AtZmxhZ3MgU1lOIFNZTiAtbSBv d25lciAtLXVpZC1vd25lciBsdWRvIC1qIENPTk5NQVJLIC0tc2V0LW1hcmsgNDAKCQoJaXB0 YWJsZXMgLXQgbWFuZ2xlIC1BIFBPU1RST1VUSU5HIC1qIENPTk5NQVJLIC0tcmVzdG9yZS1t YXJrCgogICAgOzsKICAgIHN0b3ApCiAgICAgICAgJElQVCAtdCBtYW5nbGUgLUYKICAgICAg ICAkSVBUIC10IG1hbmdsZSAtWAogICAgICAgIGVjaG8gImlwdGFibGVzIHJ1bGVzIHJlbW92 ZWQiCiAKICAgICAgICAkVEMgcWRpc2MgZGVsIGRldiAkTkVUQ0FSRCByb290IGhhbmRsZSAx CiAgICAgICAgZWNobyAidHJhZmZpYyBjb250cm9sIHJ1bGVzIHJlbW92ZWQiCgogICAgICAg IGV4aXQgMAogICAgICAgIDs7CiAgICByZXN0YXJ0KQogICAgICAgICQwIHN0b3AKICAgICAg ICAkMCBzdGFydAogICAgICAgIGV4aXQgMAogICAgICAgIDs7CiAgICBzaG93KQogICAgICAg IGVjaG87ZWNobyAiIC0tLS0gcWRpc2NzIGRldGFpbHMgLS0tLS0iCiAgICAgICAgJFRDIC1k IHFkaXNjIHNob3cgZGV2ICRORVRDQVJECiAgICAgICAgZWNobztlY2hvICIgLS0tLSBxZGlz Y3Mgc3RhdGlzdGljcyAtLSIKICAgICAgICAkVEMgLXMgcWRpc2Mgc2hvdyBkZXYgJE5FVENB UkQKICAgICAgICBleGl0IDAKICAgICAgICA7OwogICAgKikKICAgICAgICBlY2hvO2VjaG8g InVzYWdlOiQwIHtzdGFydHxzdG9wfHJlc3RhcnR8c2hvd30iCiAgICAgICAgZWNobyAibG9h ZCBvciBzdG9wIHRoZSBUcmFmZmljIENvbnRyb2wgcnVsZXMgb24gdGhlIG5ldHdvcmsgaW50 ZXJmYWNlIgogICAgICAgIGVjaG87CiAgICA7Owplc2FjCgoK --------------000507090805020503020101--