From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DBB89A052A; Tue, 2 Feb 2021 08:51:37 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C7CF22402A8; Tue, 2 Feb 2021 08:51:37 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id B3DD12402A6 for ; Tue, 2 Feb 2021 08:51:35 +0100 (CET) IronPort-SDR: urBQwBWh3bBGFQFhu+1qEF6bdJqoyhJtFRZO5u4FQDFU4256Fr3ZNw6RYbpSNvDxn3OEpqWBxs ZwEJ6UAC+5NQ== X-IronPort-AV: E=McAfee;i="6000,8403,9882"; a="178253631" X-IronPort-AV: E=Sophos;i="5.79,394,1602572400"; d="log'?scan'208";a="178253631" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Feb 2021 23:51:34 -0800 IronPort-SDR: KnZD/GDrfjczZ7Y1F26sPjnz4CFVtYzr0zSP4HDBxS4ozqJTqe64sBovgAU4XVH8lVpSfOFk3o ra/+ajLrWGzA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,394,1602572400"; d="log'?scan'208";a="371857972" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga002.jf.intel.com with ESMTP; 01 Feb 2021 23:51:34 -0800 Received: from shsmsx603.ccr.corp.intel.com (10.109.6.143) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Mon, 1 Feb 2021 23:51:33 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX603.ccr.corp.intel.com (10.109.6.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 2 Feb 2021 15:51:31 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.1713.004; Tue, 2 Feb 2021 15:51:31 +0800 From: "Ling, WeiX" To: "Ling, WeiX" , "dts@dpdk.org" Thread-Topic: [dts][PATCH V6] tests/virtio_smoke:add virtio smoke test suite sync with test plan Thread-Index: AQHW+TU4+uoxyq7o10uSxzz65+4WYqpEfeLg Date: Tue, 2 Feb 2021 07:51:31 +0000 Message-ID: <4bc0a9af6cea4cacbc52d5b9edd0a055@intel.com> References: <20210202152313.3878782-1-weix.ling@intel.com> In-Reply-To: <20210202152313.3878782-1-weix.ling@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.36] Content-Type: multipart/mixed; boundary="_002_4bc0a9af6cea4cacbc52d5b9edd0a055intelcom_" MIME-Version: 1.0 Subject: Re: [dts] [PATCH V6] tests/virtio_smoke:add virtio smoke test suite sync with test plan X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" --_002_4bc0a9af6cea4cacbc52d5b9edd0a055intelcom_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Tested-by: Wei Ling Regards, Ling Wei > -----Original Message----- > From: Ling Wei > Sent: Tuesday, February 2, 2021 11:23 PM > To: dts@dpdk.org > Cc: Ling, WeiX > Subject: [dts][PATCH V6] tests/virtio_smoke:add virtio smoke test suite s= ync > with test plan >=20 > v1: > Add virtio smoke test suite sync with test plan. >=20 > v2: > 1.Modiry Copyrint(c)<2019> to Copyrint(c)<2021>. > 2.Fix CentOS check hugepagesize return ' 2048' dts issue. > 3.Add test case run exception handing 'kill dpdk-testpmd' > in set_up and tear_down. >=20 > v3: > Modify patch subject and comments description error. >=20 > v4: > Modify set_up method,kill testpmd then remove vhost-net*. >=20 > v5: > Fix patch spelling error. >=20 > v6: > Fix patch spelling error. >=20 > Signed-off-by: Ling Wei > --- > tests/TestSuite_virtio_smoke.py | 202 > ++++++++++++++++++++++++++++++++ > 1 file changed, 202 insertions(+) > create mode 100644 tests/TestSuite_virtio_smoke.py >=20 > diff --git a/tests/TestSuite_virtio_smoke.py > b/tests/TestSuite_virtio_smoke.py new file mode 100644 index > 00000000..3c9e96fc > --- /dev/null > +++ b/tests/TestSuite_virtio_smoke.py > @@ -0,0 +1,202 @@ > +# BSD LICENSE+#+# Copyright(c) <2021> Intel Corporation. All rights > reserved.+# All rights reserved.+#+# Redistribution and use in source and > binary forms, with or without+# modification, are permitted provided that > the following conditions+# are met:+#+# * Redistributions of source cod= e > must retain the above copyright+# notice, this list of conditions and= the > following disclaimer.+# * Redistributions in binary form must reproduce= the > above copyright+# notice, this list of conditions and the following > disclaimer in+# the documentation and/or other materials provided wit= h > the+# distribution.+# * Neither the name of Intel Corporation nor t= he > names of its+# contributors may be used to endorse or promote product= s > derived+# from this software without specific prior written > permission.+#+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS > AND CONTRIBUTORS+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, > INCLUDING, BUT NOT+# LIMITED TO, THE IMPLIED WARRANTIES OF > MERCHANTABILITY AND FITNESS FOR+# A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+# OWNER OR > CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+# > SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT > NOT+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS OF USE,+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER > CAUSED AND ON ANY+# THEORY OF LIABILITY, WHETHER IN CONTRACT, > STRICT LIABILITY, OR TORT+# (INCLUDING NEGLIGENCE OR OTHERWISE) > ARISING IN ANY WAY OUT OF THE USE+# OF THIS SOFTWARE, EVEN IF > ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.++"""+DPDK Test > suite.+"""++import re+from test_case import TestCase+from pmd_output > import PmdOutput+DEFAULT_MTU =3D 1500+TSO_MTU =3D 9000++class > TestVirtioSmoke(TestCase):+++ def set_up_all(self):+ """+ = Run at > the start of each test suite.+ """+ self.dst_mac =3D "00:01= :02:03:04:05"+ > self.dut_ports =3D self.dut.get_ports()+ self.txItf =3D > self.tester.get_interface(self.tester.get_local_port(self.dut_ports[0]))+ > self.socket =3D self.dut.get_numa_id(self.dut_ports[0])+ self.core= s =3D > self.dut.get_core_list("all", socket=3Dself.socket)+ self.vhost_co= res =3D > self.cores[0:3]+ self.virtio1_cores =3D self.cores[3:6]+ se= lf.base_dir =3D > self.dut.base_dir.replace('~', '/root')+ self.path =3D > self.dut.apps_name['test-pmd']+ self.testpmd_name =3D > self.path.split("/")[-1]+ self.vhost_user =3D > self.dut.new_session(suite=3D"vhost-user")+ self.virtio_user1 =3D > self.dut.new_session(suite=3D"virtio-user1")+ self.pmdout_vhost_us= er =3D > PmdOutput(self.dut, self.vhost_user)+ self.pmdout_virtio_user1 =3D > PmdOutput(self.dut, self.virtio_user1)++ def set_up(self):+ """= + > Run before each test case.+ """+ self.dut.send_expect("kill= all -s > INT %s" % self.testpmd_name, "#")+ self.dut.send_expect("rm - > rf %s/vhost-net*" % self.base_dir, "#")++ @property+ def > check_2M_env(self):+ out =3D self.dut.send_expect("cat /proc/memin= fo > |grep Hugepagesize|awk '{print($2)}'", "# ")+ # On CentOS, sometim= es > return ' 2048'+ resp =3D out.replace(' ', '')+ return True = if resp =3D=3D '2048' > else False++ def launch_testpmd_as_vhost_user(self, param, > cores=3D"Default", udev=3D"", ports=3D[], no_pci=3DTrue):+ > self.pmdout_vhost_user.start_testpmd(cores=3Dcores, param=3Dparam, > vdevs=3D[udev], ports=3Dports, prefix=3D"vhost",+ > fixed_prefix=3DTrue, no_pci=3Dno_pci)+ > self.pmdout_vhost_user.execute_cmd('set fwd mac')++ def > launch_testpmd_as_virtio_user1(self, param, cores=3D"Default", udev=3D"", > no_pci=3DTrue):+ eal_param =3D ""+ if self.check_2M_env:+ > eal_param +=3D " --single-file-segments"+ if 'vectorized' in > self.running_case:+ eal_param +=3D " --force-max-simd-bitwidth= =3D512"+ > self.pmdout_virtio_user1.start_testpmd(cores=3Dcores, param=3Dparam, > vdevs=3D[udev], ports=3D[], prefix=3D"virtio1",+ > fixed_prefix=3DTrue, eal_param=3Deal_param, no_pci=3Dno_pci)++ def > verify_vhost_queue_rx_tx_pkts(self, queue_list):+ out =3D > self.pmdout_vhost_user.execute_cmd('stop')+ for queue_index in > queue_list:+ queue =3D "Queue=3D %d" % queue_index+ = index =3D > out.find(queue)+ rx =3D re.search("RX-packets:\s*(\d*)", out[i= ndex:])+ > tx =3D re.search("TX-packets:\s*(\d*)", out[index:])+ rx_packe= ts =3D > int(rx.group(1))+ tx_packets =3D int(tx.group(1))+ > self.verify(rx_packets > 0 and tx_packets > 0,+ "T= he queue %d rx- > packets or tx-packets is 0 about " % queue_index ++ = "rx- > packets:%d, tx-packets:%d" % (rx_packets, tx_packets))++ def > test_virtio_loopback(self):+ param =3D " --nb-cores=3D{} --rxq=3D{= } --txq=3D{}"+ > other_param =3D " --tx-offloads=3D0x0 --enable-hw-vlan-strip --rss-ip"+ > vhost_dev =3D f"'eth_vhost0,iface=3Dvhost-net,client=3D1,queues=3D8'"+ > virtio_dev =3D f"'net_virtio_user0,mac=3D{self.dst_mac},path=3D./vhost- > net,server=3D1,queues=3D8,mrg_rxbuf=3D1,in_order=3D1'"++ > self.logger.info("Launch vhost as client mode with 2 queues")+ nb_= core =3D > 2+ vhost_rxq_txq =3D 2+ virtio_rxq_txq =3D 8+ vhost_= param =3D > param.format(nb_core, vhost_rxq_txq, vhost_rxq_txq)+ virtio_param = =3D > (other_param + param).format(nb_core, virtio_rxq_txq, virtio_rxq_txq)+ > self.launch_testpmd_as_vhost_user(param=3Dvhost_param, > cores=3Dself.vhost_cores, udev=3Dvhost_dev, no_pci=3DTrue)+ > self.pmdout_vhost_user.execute_cmd('start')+ self.logger.info("Lau= nch > virtio-user as server mode with 8 queues")+ > self.launch_testpmd_as_virtio_user1(param=3Dvirtio_param, > cores=3Dself.virtio1_cores, udev=3Dvirtio_dev, no_pci=3DTrue)+ > self.pmdout_virtio_user1.execute_cmd('set fwd mac')+ > self.pmdout_virtio_user1.execute_cmd('start tx_first 32')+ > self.verify_vhost_queue_rx_tx_pkts(queue_list=3Drange(vhost_rxq_txq))+ > self.pmdout_vhost_user.execute_cmd('quit', '#')++ > self.logger.info("Relaunch vhost with 8 queues and send packets")+ > vhost_rxq_txq =3D 8+ vhost_param =3D param.format(nb_core, > vhost_rxq_txq, vhost_rxq_txq)+ > self.launch_testpmd_as_vhost_user(param=3Dvhost_param, > cores=3Dself.cores[0:3], udev=3Dvhost_dev, no_pci=3DTrue)+ > self.pmdout_vhost_user.execute_cmd('start tx_first 32')+ > self.pmdout_vhost_user.execute_cmd('stop')+ > self.pmdout_vhost_user.execute_cmd('set burst 1')+ > self.pmdout_vhost_user.execute_cmd('start tx_first 1')+ > self.verify_vhost_queue_rx_tx_pkts(queue_list=3Drange(vhost_rxq_txq))++ > self.pmdout_virtio_user1.execute_cmd('quit', '#')+ > self.pmdout_vhost_user.execute_cmd('quit', '#')++ def send_packets(sel= f, > frame_size, pkt_count):+ pkt =3D > "Ether(dst=3D'%s')/IP()/('x'*%d)" %(self.dst_mac, frame_size)+ > self.tester.scapy_append('sendp([%s], iface=3D"%s", count=3D%s)' % (pkt, > self.txItf, pkt_count))+ self.tester.scapy_execute()++ def > verify_virtio_user_receive_packets(self, pkt_count):+ out =3D > self.pmdout_virtio_user1.execute_cmd('show port stats all')+ rx = =3D > re.search("RX-packets:\s*(\d*)", out)+ tx =3D re.search("TX- > packets:\s*(\d*)", out)+ rx_packets =3D int(rx.group(1))+ t= x_packets =3D > int(tx.group(1))+ self.verify(rx_packets >=3D pkt_count and tx_pac= kets >=3D > pkt_count,+ "Virtio-user receive no enough packets, RX= -packets: > {},RX-packets: {}".format(rx_packets, tx_packets))++ def > test_virtio_pvp(self):+ param =3D " --nb-cores=3D{} --txd=3D{} --r= xd=3D{}"+ > vhost_dev =3D f"'net_vhost0,iface=3Dvhost-net,queues=3D1'"+ virtio= _dev =3D > f"'net_virtio_user0,mac=3D{self.dst_mac},path=3D./vhost- > net,packed_vq=3D1,mrg_rxbuf=3D0,in_order=3D1," \+ > f"vectorized=3D1,queue_size=3D1024'"+ self.logger.info("Launch vho= st")+ > nb_core =3D 2+ vhost_rxd_txd =3D 1024+ vhost_param =3D > param.format(nb_core, vhost_rxd_txd, vhost_rxd_txd)+ port =3D > self.dut.ports_info[self.dut_ports[0]]['pci']+ > self.launch_testpmd_as_vhost_user(param=3Dvhost_param, > cores=3Dself.vhost_cores, udev=3Dvhost_dev,+ = ports=3D[port], > no_pci=3DFalse)+ self.pmdout_vhost_user.execute_cmd('start')++ > self.logger.info("Launch virtio")+ nb_core =3D 1+ virtio_pa= ram =3D > param.format(nb_core, vhost_rxd_txd, vhost_rxd_txd)+ > self.launch_testpmd_as_virtio_user1(param=3Dvirtio_param, > cores=3Dself.virtio1_cores, udev=3Dvirtio_dev, no_pci=3DTrue)+ > self.pmdout_virtio_user1.execute_cmd('set fwd mac')+ > self.pmdout_virtio_user1.execute_cmd('start')++ self.logger.info("= Start > send packets and verify")+ # set tester port MTU=3D9000 when need = to > send big packets.+ self.tester.send_expect("ifconfig %s mtu %s" % > (self.txItf, TSO_MTU), "# ")+ # set vhost testpmd port MTU=3D9000+ > self.pmdout_vhost_user.execute_cmd('stop')+ > self.pmdout_vhost_user.execute_cmd('port stop 0')+ > self.pmdout_vhost_user.execute_cmd('port config mtu 0 %s' % TSO_MTU)+ > self.pmdout_vhost_user.execute_cmd('port start 0')+ > self.pmdout_vhost_user.execute_cmd('start')+ > self.send_packets(frame_size=3D64, pkt_count=3D10)+ > self.send_packets(frame_size=3D1518, pkt_count=3D10)+ > self.verify_virtio_user_receive_packets(pkt_count=3D20)++ > self.pmdout_virtio_user1.execute_cmd('quit', '#')+ > self.pmdout_vhost_user.execute_cmd('quit', '#')++ def tear_down(self):= + > """+ Run after each test case.+ """+ self.dut.send_e= xpect("killall -s > INT %s" % self.testpmd_name, "#")++ def tear_down_all(self):+ "= ""+ > Run after each test suite.+ """+ > self.dut.close_session(self.vhost_user)+ > self.dut.close_session(self.virtio_user1)+ > self.tester.send_expect("ifconfig %s mtu %s" % (self.txItf, DEFAULT_MTU), > "# ")-- > 2.25.1 --_002_4bc0a9af6cea4cacbc52d5b9edd0a055intelcom_ Content-Type: application/octet-stream; name="TestVirtioSmoke.log" Content-Description: TestVirtioSmoke.log Content-Disposition: attachment; filename="TestVirtioSmoke.log"; size=7160; creation-date="Tue, 02 Feb 2021 07:51:00 GMT"; modification-date="Tue, 02 Feb 2021 07:51:00 GMT" Content-Transfer-Encoding: base64 MDIvMDIvMjAyMSAwMjo0NDozNSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdHM6IApURVNU IFNVSVRFIDogVGVzdFZpcnRpb1Ntb2tlCjAyLzAyLzIwMjEgMDI6NDQ6MzUgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZHRzOiBOSUMgOiAgICAgICAgZm9ydHZpbGxlX3NwaXJpdAowMi8wMi8y MDIxIDAyOjQ0OjM1ICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDogCjAyLzAyLzIwMjEg MDI6NDQ6MzUgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGVyOiAKMDIvMDIvMjAyMSAwMjo0 NDozOCAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My4yMTQ6IGNhdCAvcHJvYy9tZW1pbmZvIHxn cmVwIEh1Z2VwYWdlc2l6ZXxhd2sgJ3twcmludCgkMil9JwowMi8wMi8yMDIxIDAyOjQ0OjM5ICAg ICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDogMjA0OAowMi8wMi8yMDIxIDAyOjQ0OjM5ICAg ICAgICAgICAgICAgIFRlc3RWaXJ0aW9TbW9rZTogVGVzdCBDYXNlIHRlc3RfdmlydGlvX2xvb3Bi YWNrIEJlZ2luCjAyLzAyLzIwMjEgMDI6NDQ6MzkgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMu MjE0OiAKMDIvMDIvMjAyMSAwMjo0NDozOSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZXI6 IAowMi8wMi8yMDIxIDAyOjQ0OjM5ICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDoga2ls bGFsbCAtcyBJTlQgZHBkay10ZXN0cG1kIAowMi8wMi8yMDIxIDAyOjQ0OjM5ICAgICAgICAgICAg IGR1dC4xMC4yNDAuMTgzLjIxNDogZHBkay10ZXN0cG1kOiBubyBwcm9jZXNzIGZvdW5kCjAyLzAy LzIwMjEgMDI6NDQ6MzkgICAgICAgICAgICAgZHV0LjEwLjI0MC4xODMuMjE0OiBybSAtcmYgL3Jv b3QvZHBkay92aG9zdC1uZXQqCjAyLzAyLzIwMjEgMDI6NDQ6MzkgICAgICAgICAgICAgZHV0LjEw LjI0MC4xODMuMjE0OiAKMDIvMDIvMjAyMSAwMjo0NDozOSAgICAgICAgICAgICAgICBUZXN0Vmly dGlvU21va2U6IExhdW5jaCB2aG9zdCBhcyBjbGllbnQgbW9kZSB3aXRoIDIgcXVldWVzCjAyLzAy LzIwMjEgMDI6NDQ6NDkgICAgICAgICAgICAgICAgVGVzdFZpcnRpb1Ntb2tlOiBMYXVuY2ggdmly dGlvLXVzZXIgYXMgc2VydmVyIG1vZGUgd2l0aCA4IHF1ZXVlcwowMi8wMi8yMDIxIDAyOjQ0OjQ5 ICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDogY2F0IC9wcm9jL21lbWluZm8gfGdyZXAg SHVnZXBhZ2VzaXplfGF3ayAne3ByaW50KCQyKX0nCjAyLzAyLzIwMjEgMDI6NDQ6NTAgICAgICAg ICAgICAgZHV0LjEwLjI0MC4xODMuMjE0OiAyMDQ4CjAyLzAyLzIwMjEgMDI6NDU6MDEgICAgICAg ICAgICAgICAgVGVzdFZpcnRpb1Ntb2tlOiBSZWxhdW5jaCB2aG9zdCB3aXRoIDggcXVldWVzIGFu ZCBzZW5kIHBhY2tldHMKMDIvMDIvMjAyMSAwMjo0NToxNCAgICAgICAgICAgICAgICBUZXN0Vmly dGlvU21va2U6IFRlc3QgQ2FzZSB0ZXN0X3ZpcnRpb19sb29wYmFjayBSZXN1bHQgUEFTU0VEOgow Mi8wMi8yMDIxIDAyOjQ1OjE0ICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDoga2lsbGFs bCAtcyBJTlQgZHBkay10ZXN0cG1kIAowMi8wMi8yMDIxIDAyOjQ1OjE0ICAgICAgICAgICAgIGR1 dC4xMC4yNDAuMTgzLjIxNDogZHBkay10ZXN0cG1kOiBubyBwcm9jZXNzIGZvdW5kCjAyLzAyLzIw MjEgMDI6NDU6MTQgICAgICAgICAgICAgICAgVGVzdFZpcnRpb1Ntb2tlOiBUZXN0IENhc2UgdGVz dF92aXJ0aW9fcHZwIEJlZ2luCjAyLzAyLzIwMjEgMDI6NDU6MTQgICAgICAgICAgICAgZHV0LjEw LjI0MC4xODMuMjE0OiAgCjAyLzAyLzIwMjEgMDI6NDU6MTQgICAgICAgICAgICAgICAgICAgICAg ICAgdGVzdGVyOiAKMDIvMDIvMjAyMSAwMjo0NToxNCAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4 My4yMTQ6IGtpbGxhbGwgLXMgSU5UIGRwZGstdGVzdHBtZCAKMDIvMDIvMjAyMSAwMjo0NToxNCAg ICAgICAgICAgICBkdXQuMTAuMjQwLjE4My4yMTQ6IGRwZGstdGVzdHBtZDogbm8gcHJvY2VzcyBm b3VuZAowMi8wMi8yMDIxIDAyOjQ1OjE0ICAgICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDog cm0gLXJmIC9yb290L2RwZGsvdmhvc3QtbmV0KgowMi8wMi8yMDIxIDAyOjQ1OjE0ICAgICAgICAg ICAgIGR1dC4xMC4yNDAuMTgzLjIxNDogCjAyLzAyLzIwMjEgMDI6NDU6MTQgICAgICAgICAgICAg ICAgVGVzdFZpcnRpb1Ntb2tlOiBMYXVuY2ggdmhvc3QKMDIvMDIvMjAyMSAwMjo0NToyNSAgICAg ICAgICAgICAgICBUZXN0VmlydGlvU21va2U6IExhdW5jaCB2aXJ0aW8KMDIvMDIvMjAyMSAwMjo0 NToyNSAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4My4yMTQ6IGNhdCAvcHJvYy9tZW1pbmZvIHxn cmVwIEh1Z2VwYWdlc2l6ZXxhd2sgJ3twcmludCgkMil9JwowMi8wMi8yMDIxIDAyOjQ1OjI1ICAg ICAgICAgICAgIGR1dC4xMC4yNDAuMTgzLjIxNDogMjA0OAowMi8wMi8yMDIxIDAyOjQ1OjM2ICAg ICAgICAgICAgICAgIFRlc3RWaXJ0aW9TbW9rZTogU3RhcnQgc2VuZCBwYWNrZXRzIGFuZCB2ZXJp ZnkKMDIvMDIvMjAyMSAwMjo0NTozNiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0ZXI6IGlm Y29uZmlnIGVuczc4NmYwIG10dSA5MDAwCjAyLzAyLzIwMjEgMDI6NDU6MzYgICAgICAgICAgICAg ICAgICAgICAgICAgdGVzdGVyOiAKMDIvMDIvMjAyMSAwMjo0NTozNyAgICAgICAgICAgICAgICAg ICAgICAgICB0ZXN0ZXI6IHNjYXB5CjAyLzAyLzIwMjEgMDI6NDU6MzcgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdGVyOiAbWzM5bUlORk86IENhbid0IGltcG9ydCBtYXRwbG90bGliLiBXb24n dCBiZSBhYmxlIHRvIHBsb3QuG1swbQ0KG1szOW1JTkZPOiBDYW4ndCBpbXBvcnQgUHlYLiBXb24n dCBiZSBhYmxlIHRvIHVzZSBwc2R1bXAoKSBvciBwZGZkdW1wKCkuG1swbQ0KG1szM20bWzFtV0FS TklORzogSVB5dGhvbiBub3QgYXZhaWxhYmxlLiBVc2luZyBzdGFuZGFyZCBQeXRob24gc2hlbGwg aW5zdGVhZC4NCkF1dG9Db21wbGV0aW9uLCBIaXN0b3J5IGFyZSBkaXNhYmxlZC4bWzBtG1swbQ0K G1szMm0bWzFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzBtG1szNG0b WzFtG1swbQ0KG1szMm0bWzFtICAgICAgICAgICAgICAgICAgICAgYVNQWS8vWUFTYSAgICAgICAb WzBtG1szNG0bWzFtG1swbQ0KG1szMm0bWzFtICAgICAgICAgICAgIGFweXl5eUNZLy8vLy8vLy8v L1lDYSAgICAbWzBtG1szNG0bWzFtICAgfBtbMG0NChtbMzJtG1sxbSAgICAgICAgICAgIHNZLy8v Ly8vWVNwY3MgIHNjcENZLy9QcCAgG1swbRtbMzRtG1sxbSAgIHwgV2VsY29tZSB0byBTY2FweRtb MG0NChtbMzJtG1sxbSBheXAgYXl5eXl5eXlTQ1AvL1BwICAgICAgICAgICBzeVkvL0MgG1swbRtb MzRtG1sxbSAgIHwgVmVyc2lvbiBnaXQtYXJjaGl2ZS5kZXYzMDQ3NTgwMTYyG1swbQ0KG1szMm0b WzFtIEFZQXNBWVlZWVlZWVkvLy9QcyAgICAgICAgICAgICAgY1kvL1MbWzBtG1szNG0bWzFtICAg fBtbMG0NChtbMzJtG1sxbSAgICAgICAgIHBDQ0NDWS8vcCAgICAgICAgICBjU1NwcyB5Ly9ZG1sw bRtbMzRtG1sxbSAgIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlY2Rldi8bWzBtDQobWzMybRtbMW0g ICAgICAgICBTUFBQUC8vL2EgICAgICAgICAgcFAvLy9BQy8vWRtbMG0bWzM0bRtbMW0gICB8G1sw bQ0KG1szMm0bWzFtICAgICAgICAgICAgICBBLy9BICAgICAgICAgICAgY3lQLy8vL0MbWzBtG1sz NG0bWzFtICAgfCBIYXZlIGZ1biEbWzBtDQobWzMybRtbMW0gICAgICAgICAgICAgIHAvLy9BYyAg ICAgICAgICAgIHNDLy8vYRtbMG0bWzM0bRtbMW0gICB8G1swbQ0KG1szMm0bWzFtICAgICAgICAg ICAgICBQLy8vL1lDcGMgICAgICAgICAgIEEvL0EbWzBtG1szNG0bWzFtICAgfCBXZSBhcmUgaW4g RnJhbmNlLCB3ZSBzYXkgU2thcHBlZS4bWzBtDQobWzMybRtbMW0gICAgICAgc2NjY2NjcC8vL3BT UC8vL3AgICAgICAgICAgcC8vWRtbMG0bWzM0bRtbMW0gICB8IE9LPyBNZXJjaS4bWzBtDQobWzMy bRtbMW0gICAgICBzWS8vLy8vLy8vL3kgIGNhYSAgICAgICAgICAgUy8vUBtbMG0bWzM0bRtbMW0g ICB8ICAgICAgICAgICAgIC0tIFNlYmFzdGllbiBDaGFiYWwbWzBtDQobWzMybRtbMW0gICAgICAg Y2F5Q3lheVAvL1lhICAgICAgICAgICAgICBwWS9ZYRtbMG0bWzM0bRtbMW0gICB8G1swbQ0KG1sz Mm0bWzFtICAgICAgICBzWS9Qc1kvLy8vWUNjICAgICAgICAgIGFDLy9ZcCAbWzBtDQobWzMybRtb MW0gICAgICAgICBzYyAgc2NjYUNZLy9QQ3lwYWFweUNQLy9ZU3MgIBtbMG0NChtbMzJtG1sxbSAg ICAgICAgICAgICAgICAgIHNwQ1BZLy8vLy8vWVBTcHMgICAgG1swbQ0KG1szMm0bWzFtICAgICAg ICAgICAgICAgICAgICAgICBjY2FhY3MgICAgICAgICAbWzBtDQobWzMybRtbMW0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIBtbMG0KMDIvMDIvMjAyMSAwMjo0NTozOSAgICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0ZXI6IHNlbmRwKFtFdGhlcihkc3Q9JzAwOjAxOjAyOjAz OjA0OjA1JykvSVAoKS8oJ3gnKjY0KV0sIGlmYWNlPSJlbnM3ODZmMCIsIGNvdW50PTEwKQowMi8w Mi8yMDIxIDAyOjQ1OjM5ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RlcjogLi4uLi4uLi4u Lg0KU2VudCAxMCBwYWNrZXRzLgowMi8wMi8yMDIxIDAyOjQ1OjQxICAgICAgICAgICAgICAgICAg ICAgICAgIHRlc3RlcjogZXhpdCgpCjAyLzAyLzIwMjEgMDI6NDU6NDEgICAgICAgICAgICAgICAg ICAgICAgICAgdGVzdGVyOiAKMDIvMDIvMjAyMSAwMjo0NTo0MSAgICAgICAgICAgICAgICAgICAg ICAgICB0ZXN0ZXI6IHNjYXB5CjAyLzAyLzIwMjEgMDI6NDU6NDIgICAgICAgICAgICAgICAgICAg ICAgICAgdGVzdGVyOiAbWzM5bUlORk86IENhbid0IGltcG9ydCBtYXRwbG90bGliLiBXb24ndCBi ZSBhYmxlIHRvIHBsb3QuG1swbQ0KG1szOW1JTkZPOiBDYW4ndCBpbXBvcnQgUHlYLiBXb24ndCBi ZSBhYmxlIHRvIHVzZSBwc2R1bXAoKSBvciBwZGZkdW1wKCkuG1swbQ0KG1szM20bWzFtV0FSTklO RzogSVB5dGhvbiBub3QgYXZhaWxhYmxlLiBVc2luZyBzdGFuZGFyZCBQeXRob24gc2hlbGwgaW5z dGVhZC4NCkF1dG9Db21wbGV0aW9uLCBIaXN0b3J5IGFyZSBkaXNhYmxlZC4bWzBtG1swbQ0KG1sz Mm0bWzFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzBtG1szNG0bWzFt G1swbQ0KG1szMm0bWzFtICAgICAgICAgICAgICAgICAgICAgYVNQWS8vWUFTYSAgICAgICAbWzBt G1szNG0bWzFtG1swbQ0KG1szMm0bWzFtICAgICAgICAgICAgIGFweXl5eUNZLy8vLy8vLy8vL1lD YSAgICAbWzBtG1szNG0bWzFtICAgfBtbMG0NChtbMzJtG1sxbSAgICAgICAgICAgIHNZLy8vLy8v WVNwY3MgIHNjcENZLy9QcCAgG1swbRtbMzRtG1sxbSAgIHwgV2VsY29tZSB0byBTY2FweRtbMG0N ChtbMzJtG1sxbSBheXAgYXl5eXl5eXlTQ1AvL1BwICAgICAgICAgICBzeVkvL0MgG1swbRtbMzRt G1sxbSAgIHwgVmVyc2lvbiBnaXQtYXJjaGl2ZS5kZXYzMDQ3NTgwMTYyG1swbQ0KG1szMm0bWzFt IEFZQXNBWVlZWVlZWVkvLy9QcyAgICAgICAgICAgICAgY1kvL1MbWzBtG1szNG0bWzFtICAgfBtb MG0NChtbMzJtG1sxbSAgICAgICAgIHBDQ0NDWS8vcCAgICAgICAgICBjU1NwcyB5Ly9ZG1swbRtb MzRtG1sxbSAgIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlY2Rldi8bWzBtDQobWzMybRtbMW0gICAg ICAgICBTUFBQUC8vL2EgICAgICAgICAgcFAvLy9BQy8vWRtbMG0bWzM0bRtbMW0gICB8G1swbQ0K G1szMm0bWzFtICAgICAgICAgICAgICBBLy9BICAgICAgICAgICAgY3lQLy8vL0MbWzBtG1szNG0b WzFtICAgfCBIYXZlIGZ1biEbWzBtDQobWzMybRtbMW0gICAgICAgICAgICAgIHAvLy9BYyAgICAg ICAgICAgIHNDLy8vYRtbMG0bWzM0bRtbMW0gICB8G1swbQ0KG1szMm0bWzFtICAgICAgICAgICAg ICBQLy8vL1lDcGMgICAgICAgICAgIEEvL0EbWzBtG1szNG0bWzFtICAgfCBDcmFmdCBtZSBpZiB5 b3UgY2FuLhtbMG0NChtbMzJtG1sxbSAgICAgICBzY2NjY2NwLy8vcFNQLy8vcCAgICAgICAgICBw Ly9ZG1swbRtbMzRtG1sxbSAgIHwgICAgICAgICAgICAgICAgICAgLS0gSVB2NiBsYXllchtbMG0N ChtbMzJtG1sxbSAgICAgIHNZLy8vLy8vLy8veSAgY2FhICAgICAgICAgICBTLy9QG1swbRtbMzRt G1sxbSAgIHwbWzBtDQobWzMybRtbMW0gICAgICAgY2F5Q3lheVAvL1lhICAgICAgICAgICAgICBw WS9ZYRtbMG0NChtbMzJtG1sxbSAgICAgICAgc1kvUHNZLy8vL1lDYyAgICAgICAgICBhQy8vWXAg G1swbQ0KG1szMm0bWzFtICAgICAgICAgc2MgIHNjY2FDWS8vUEN5cGFhcHlDUC8vWVNzICAbWzBt DQobWzMybRtbMW0gICAgICAgICAgICAgICAgICBzcENQWS8vLy8vL1lQU3BzICAgIBtbMG0NChtb MzJtG1sxbSAgICAgICAgICAgICAgICAgICAgICAgY2NhYWNzICAgICAgICAgG1swbQ0KG1szMm0b WzFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAbWzBtCjAyLzAyLzIwMjEg MDI6NDU6NDQgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGVyOiBzZW5kcChbRXRoZXIoZHN0 PScwMDowMTowMjowMzowNDowNScpL0lQKCkvKCd4JyoxNTE4KV0sIGlmYWNlPSJlbnM3ODZmMCIs IGNvdW50PTEwKQowMi8wMi8yMDIxIDAyOjQ1OjQ0ICAgICAgICAgICAgICAgICAgICAgICAgIHRl c3RlcjogLi4uLi4uLi4uLg0KU2VudCAxMCBwYWNrZXRzLgowMi8wMi8yMDIxIDAyOjQ1OjQ2ICAg ICAgICAgICAgICAgICAgICAgICAgIHRlc3RlcjogZXhpdCgpCjAyLzAyLzIwMjEgMDI6NDU6NDYg ICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGVyOiAKMDIvMDIvMjAyMSAwMjo0NTo0OCAgICAg ICAgICAgICAgICBUZXN0VmlydGlvU21va2U6IFRlc3QgQ2FzZSB0ZXN0X3ZpcnRpb19wdnAgUmVz dWx0IFBBU1NFRDoKMDIvMDIvMjAyMSAwMjo0NTo0OCAgICAgICAgICAgICBkdXQuMTAuMjQwLjE4 My4yMTQ6IGtpbGxhbGwgLXMgSU5UIGRwZGstdGVzdHBtZCAKMDIvMDIvMjAyMSAwMjo0NTo0OCAg ICAgICAgICAgICBkdXQuMTAuMjQwLjE4My4yMTQ6IGRwZGstdGVzdHBtZDogbm8gcHJvY2VzcyBm b3VuZAowMi8wMi8yMDIxIDAyOjQ1OjQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0czog ClRFU1QgU1VJVEUgRU5ERUQ6IFRlc3RWaXJ0aW9TbW9rZQo= --_002_4bc0a9af6cea4cacbc52d5b9edd0a055intelcom_--