diff --git a/CAN/2foc/2foc-special.hex b/CAN/2foc/2foc-special.hex new file mode 100644 index 000000000..ca633ba7f --- /dev/null +++ b/CAN/2foc/2foc-special.hex @@ -0,0 +1,1911 @@ +:020000040000fa +:080000000002040000000000f2 +:020000040000fa +:1000080036350000163500001a3500001e35000090 +:100018002235000036350000363500003635000040 +:1000280036350000363500003635000084270000dc +:10003800be060000363500003635000036350000b3 +:10004800002e000036350000363500003635000039 +:1000580036350000363500000a3500003635000018 +:10006800363500003a35000036350000a63200006b +:1000780036350000363500003635000036350000cc +:100088008221000036350000363500003635000084 +:1000980036350000363500003635000036350000ac +:1000a8003635000036350000363500004c2b000090 +:1000b800363500003635000036350000363500008c +:1000c800363500003635000036350000363500007c +:1000d800363500003635000036350000363500006c +:1000e800363500003635000036350000363500005c +:1000f800363500003635000036350000363500004c +:1001080036350000363500009633000036350000dd +:10011800363500003635000036350000742f0000f3 +:10012800363500003635000036350000363500001b +:10013800363500003635000036350000363500000b +:1001480036350000363500003635000036350000fb +:1001580036350000363500003635000036350000eb +:1001680036350000363500003635000036350000db +:1001780036350000363500003635000036350000cb +:1001880036350000363500003635000036350000bb +:1001980036350000363500003635000036350000ab +:1001a800363500003635000036350000363500009b +:1001b800363500003635000036350000363500008b +:1001c800363500003635000036350000363500007b +:1001d800363500003635000036350000363500006b +:1001e800363500003635000036350000363500005b +:0801f800363500003635000029 +:020000040000fa +:1002080036350000263500002a3500002e3500005e +:10021800323500003635000036350000363500002e +:1002280036350000363500003635000084270000da +:10023800be060000363500003635000036350000b1 +:10024800002e000036350000363500003635000037 +:1002580036350000363500000a3500003635000016 +:10026800363500003a35000036350000a632000069 +:1002780036350000363500003635000036350000ca +:100288008221000036350000363500003635000082 +:1002980036350000363500003635000036350000aa +:1002a8003635000036350000363500004c2b00008e +:1002b800363500003635000036350000363500008a +:1002c800363500003635000036350000363500007a +:1002d800363500003635000036350000363500006a +:1002e800363500003635000036350000363500005a +:1002f800363500003635000036350000363500004a +:1003080036350000363500009633000036350000db +:10031800363500003635000036350000742f0000f1 +:100328003635000036350000363500003635000019 +:100338003635000036350000363500003635000009 +:1003480036350000363500003635000036350000f9 +:1003580036350000363500003635000036350000e9 +:1003680036350000363500003635000036350000d9 +:1003780036350000363500003635000036350000c9 +:1003880036350000363500003635000036350000b9 +:1003980036350000363500003635000036350000a9 +:1003a8003635000036350000363500003635000099 +:1003b8003635000036350000363500003635000089 +:1003c8003635000036350000363500003635000079 +:1003d8003635000036350000363500003635000069 +:1003e8003635000036350000363500003635000059 +:0803f800363500003635000027 +:020000040000fa +:100400008fc720000e6d24000e0188000000000040 +:10041000000020000000e000020032000001200087 +:10042000200288000c00070080322100010020001b +:1004300011000700000020000000e0000200320070 +:100440000000020000000000901702000000000001 +:100450000040da000000fe004440a90040082000ef +:100460000000e0000300320000002000a00188002e +:100470004440a80000000600910188008000780038 +:100480000000eb0015003700e280400032a0b4000d +:100490009101ba00e280400032a0b4009102ba009b +:1004a000e280400032a0b4000002eb00472bde00e7 +:1004b000f507b200602ce10004003a000059eb009f +:1004c0008301e900fdff3e00040037006128e100e0 +:1004d000010032000082eb00040007001101ba00a5 +:1004e0000200e000e8ff3a00000006003159ba00bf +:1004f0008301e9000c0032002159ba008301e900b0 +:10050000080032000400e00003003a00e2804000ee +:1005100032a0b400f5ff370011d9ba008301e90019 +:10052000faff3a008100e800e180400032a0b40008 +:100530000000060094290400000000000021ef00e4 +:100540001108880020088800000006000a21ef003a +:100550007108880090088800000006001421ef0050 +:10056000d1088800f00888001e61a900000006007c +:1005700000088800000006005008880000000600ff +:10058000a008880000000600c008880000000600df +:100590003200f800023b8800910188000008bb008f +:1005a0000500fc0051052000313b8800a10a200015 +:1005b000313b880061e7a800000000000000000057 +:1005c0003200f900000006000400a100010037001d +:1005d0000400a0003200f8009101880011002400fe +:1005e000013b8800f10f20003208bb000400a70087 +:1005f000b20078000198bb008301e900faff3a00dd +:10060000680151000400a700680151006800500013 +:100610001208bb00e2ff3700f30f20003200f800a1 +:100620009101880031002400013b88000208bb00d2 +:100630000388bb00daff37003200f800003b880077 +:10064000d7ff37003200f80091018800800278005f +:1006500062004000e08048003549ba003204e00002 +:100660000410a700100032008301e9000e003200e0 +:100670002549ba003204e0000410a7000a00320045 +:100680008301e900080032000408a300eeff3200f5 +:1006900015c9ba003204e0000410a70002003200bd +:1006a0008301e900e8ff3a003200f900000006008b +:1006b000889fbe008a9fbe008c1f7800b000070094 +:1006c000b700330003866c006450e1002e00320056 +:1006d0006420e100330032006150e1002f0032005d +:1006e0006120e1003100320085855500eb07b00044 +:1006f0000900200008042000050037000804440019 +:1007000089844c000a0031000603430087834b00b4 +:100710000001530081815b00f8ff33000203be003b +:100720000800a0000804440089844c00f6ff39004a +:10073000c639dd0083017300010032001300200080 +:100740008904d1000884d3000998a3000500320071 +:100750000800a7000300a0008904d1000884d3008a +:100760008b05e8008904d1000884d3000001eb0068 +:100770000281d2004700070001f0a1000cf0a700a1 +:1007800001f0a0008f0037006420e10091003200ea +:100790000801be000200be00f7ff37006120e10043 +:1007a0008c0032006000b800f3ff3700000020002a +:1007b00001f82700f0ff3700839f68000100e00088 +:1007c00002003d0060001000e08018000300e0001f +:1007d00002003d0060011100e0811900b400070033 +:1007e0004f00e00002003b0060001000e0801800b5 +:1007f0000000060014002000bd003700f4ff2f00a9 +:10080000bb0037000001be00480007000470a700cd +:1008100003f0a1006509b100160032000d0035009b +:100820006828e10006003500f0ff2f00f1ff2700e7 +:100830000300e00013003b00010028000000050059 +:1008400000004000818048008502e900fcff3a007a +:1008500008003700f88f420002003c008000eb00e7 +:10086000000005008100d1000080d3008502e8006f +:10087000fcff3a000300e00002003b0060001000b3 +:10088000e0801800000006004f89de008201780039 +:10089000b200370081002000618055000b003d0050 +:1008a0000b00200061fe2f000100e1001d0034005c +:1008b00082817100610164008904d1000884d30041 +:1008c0000000e800faff3a007100200061006400b7 +:1008d000030070000200600009003200610444005f +:1008e000e0844c000988a500050032008b05e80073 +:1008f0006808e10002003a008904d1000884d300ae +:10090000f20f20000258e10005003d00c75ddd0048 +:10091000f907b20089807500080078000000060021 +:100920000bf827008b00780000000500c70ade00e6 +:10093000f107b200f50fb20008003200e1cf42002b +:10094000020032000170a00024000500810f700039 +:10095000010032000408050044000500810f70000a +:1009600002003a00140005008502e9000000400082 +:1009700081c04800fcff3b000170a000240005007e +:100980000004be00e9ff07000003be000405be002e +:100990000200be00e5ff0700844f7500000006005e +:1009a0000200be006450e100050036006420e10052 +:1009b000020036000968a30001003a000800be00ea +:1009c0000160a0004f0678004f05be004f04be0036 +:1009d00000000600f0ff2f00f1ff2700f9ff3700ad +:1009e000889fbe008a9fbe008c1f7800e4ff07002e +:1009f000ebff330003866c006450e10024003200fa +:100a00006420e100270032006150e1002200320042 +:100a10006120e100210032008b854200eb07b1002c +:100a20000134b800003ab8000804420089844a0042 +:100a3000013ab8000030b8008880400009014a003f +:100a4000040033000000400081804800020149009a +:100a50008b05e900c909dd00830170000100320047 +:100a600013002000c814de004814dd004709de0032 +:100a70001200b200c808de000884700085ff07007d +:100a800001f0a1000cf0a70001f0a000cdff37009d +:100a90006120e100cfff32000801be000200be006d +:100aa000f7ff37006150e100fcff3a00c9ff370053 +:100ab0006022b800060220000000d0008180d20031 +:100ac0000482d2008582d2000000a00002025200ff +:100ad00083825a00030031000202420083824a00ee +:100ae0000000a1000603e900f3ff3a000000060041 +:100af000889fbe008a9fbe00841f7800a0ff070069 +:100b00004f00780011003300f0ff2f00838f6c003e +:100b100006003b00040565000a00a7000800370036 +:100b200009f0a6001000200008003700820f5400d2 +:100b3000838f5c00030039001000200001003e009c +:100b40000000200009f0a7000000ea004f05be00e9 +:100b50004f04be000000e00000000600881f78007f +:100b6000030478000300e00007003d00600010006f +:100b7000e080180060011900e081190002003b00cc +:100b800001f02d00030037000400070008f0a70063 +:100b900001f0a0004f04780000000600889fbe000e +:100ba0008a9fbe00008270000402710004827100fe +:100bb000260032000004be000200be006011b80032 +:100bc0006b092000950220000182cf000a00390045 +:100bd0000541b1000082cf00070039000541b10096 +:100be0000982cf00040039000541b1000882cf001e +:100bf000010039000541b1000542520012003200e7 +:100c00000a003b0082817100610164008100d10013 +:100c10000080d3008984d3000884d3008b05e800ca +:100c20000442e800f7ff3a000700370008044400d8 +:100c300089844c0000004800818048008b05e90051 +:100c40000442e900f9ff3a0012ff07004f05be0019 +:100c50004f04be00000006000002780002003700ca +:100c6000315a78000201e900e00f5100fcff3a0020 +:040c7000000006007a +:020000040000fa +:100c7400000600000201000004050000030000005b +:100c8400000000004a01000094020000de0300009e +:100c94002705000070060000b907000001090000e4 +:100ca400480a00008f0b0000d50c0000190e00004c +:100cb4005d0f00009f100000e011000020130000f1 +:100cc4005e1400009b150000d61600000f180000eb +:100cd400461900007b1a0000af1b0000e01c000056 +:100ce4000e1e00003b1f0000652000008c21000048 +:100cf400b1220000d3230000f3240000ff7f000092 +:100d0400fb7f0000ec7f0000d37f0000b07f000079 +:100d1400837f00004c7f00000b7f0000c17e000039 +:100d24006c7e00000e7e0000a57d0000337d000077 +:100d3400b87c0000327c0000a37b00000a7b00002a +:100d4400687a0000bc79000006790000477800004a +:100d54007f770000ad760000d3750000ef740000cb +:100d6400017400000b7300000c7200000471000099 +:080d7400f36f0000d96e0000ce +:020000040000fa +:100d7c003600f800809fbe00829fbe00849fbe009c +:100d8c00869fbe00889fbe008a9fbe008c1f780085 +:100d9c000400fa00440f2000240288009a11070076 +:100dac001654800026538800355480003553880033 +:100dbc0034002000110009000403d80010548800ee +:100dcc000603ea0005035300110009000403d800d0 +:100ddc0020548800110009008402d8003054880087 +:100dec00e4a9200014427800614262008004eb0008 +:100dfc000b00320084a1200014427800e04f520016 +:100e0c0004003200e0a3200054090700800478009d +:100e1c000300370040150700800478004953880010 +:100e2c00a90f070000457800e4a9200014427800bf +:100e3c006242620005003200731007000082fb0062 +:100e4c00a563280065447a0004003700c80320001d +:100e5c00110009008804d8000044e800f4aa20001e +:100e6c0014427800884f5200c1003200e4a92000df +:100e7c0014427800704262000f003200e416070042 +:100e8c0084a1200014427800e04f52000a003a007e +:100e9c0064608000800f520006003a00e4aa200033 +:100eac0014427800884f520003003200626ca80094 +:100ebc000100370060608800e4a92000144278002b +:100ecc006142620049003200e4a92000144278001b +:100edc006242620045003200cd160700546080006b +:100eec00800f520006003a00e4aa20001442780059 +:100efc00884f520003003200626ca80001003700da +:100f0c0050608800e14f540013003a00f4aa20000e +:100f1c0014427800e64f52000f003a007e824400e3 +:100f2c008455880075162000850f52004503340047 +:100f3c0064eb2f00090242008455880061c0b300a5 +:100f4c00e0aa20000148780013c0b300f2aa2000e8 +:100f5c000349780039003700e64f540010003a007e +:100f6c00f4aa200014427800e14f52000c003a0021 +:100f7c007e8254008455880039033b00a414200061 +:100f8c00090242008455880016c0b300e5aa20006f +:100f9c00864a780060c0b300afeab700680037003b +:100fac00f4aa200014427800844f54000900340045 +:100fbc007e8244008455880075162000850f5200ef +:100fcc000a00340064eb2f000902420084558800ab +:100fdc00060037007e8254008455880003003b00d5 +:100fec00a41420000902420084558800f1aa2000b4 +:100ffc0091407800e2aa200001497800f3aa200071 +:10100c00884978000802fb00cfa2de006102520082 +:10101c00e0825a00e50f5200e08f5a0054003e0067 +:10102c000460010005003700110037001d00370077 +:10103c0029003700350037004100370024a8200074 +:10104c00b4558800c4ab20001456880044a8200076 +:10105c00a4558800a4ab20000456880064a8200086 +:10106c009455880084ab2000f4558800400037006c +:10107c0024a82000b4558800c4ab20001456880066 +:10108c0064a82000a455880084ab20000456880076 +:10109c0044a8200094558800a4ab2000f455880087 +:1010ac003300370044a82000b4558800a4ab2000be +:1010bc001456880064a82000a455880084ab200036 +:1010cc000456880024a8200094558800c4ab200046 +:1010dc00f45588002600370044a82000b455880039 +:1010ec00a4ab20001456880024a82000a455880026 +:1010fc00c4ab20000456880064a8200094558800d6 +:10110c0084ab2000f45588001900370064a8200037 +:10111c00b455880084ab20001456880024a8200005 +:10112c00a4558800c4ab20000456880044a82000b5 +:10113c0094558800a4ab2000f45588000c003700af +:10114c0064a82000b455880084ab20001456880095 +:10115c0044a82000a4558800a4ab200004568800a5 +:10116c0024a8200094558800c4ab2000f4558800b6 +:10117c000804fb0024002000110009000404d8001e +:10118c0001467800e4a92000144278006242620013 +:10119c0017003200e5a9200095427800e1c26200f8 +:1011ac000002eb00200032008455800004825400c1 +:1011bc00350b2000850f5200020034008416b1005c +:1011cc0004003700c5f42f00850f520001003d00cc +:1011dc008416b000fe0f420001003d0024fe2f00db +:1011ec00fe0f520006003400e4012000040037001a +:1011fc00c4032000110009008404d8007e82500032 +:10120c00e00f520008003d000402ea000402420014 +:10121c0005682800e5047a002564280065047a0036 +:10122c000804ea00050037000402420005682800a3 +:10123c00e5047a002564280065047a00e04f560026 +:10124c0028003200b5558000a455800015037800a5 +:10125c00140053000980b90096558000960378005d +:10126c0008b9b900c11bdd004f11de00028173000b +:10127c00cf99de00e2bf9f00f3bf9f00d3ff2f008a +:10128c00efbb970003b9b900c10bdd004f00de00c6 +:10129c0000807300cf88de00800341003755880042 +:1012ac001603780009b3b900950278001482520035 +:1012bc0008a2b9004138dd004f33de000603700090 +:1012cc00cfbbde000603ea00c128dd004f22de00a2 +:1012dc0004827000cfaade0004025300445588003b +:1012ec0022003700b5558000a45580001501780008 +:1012fc00140051000980b900965580001601780041 +:10130c000891b900c11bdd004f11de000281730092 +:10131c00cf99de006311b900c10bdd004f00de0078 +:10132c0000807300cf88de008003410037558800b1 +:10133c001603780009b3b9009502780014825200a4 +:10134c0008a2b9004138dd004f33de0006037000ff +:10135c00cfbbde00c128dd004f22de00048270000e +:10136c00cfaade00040253004455880084a120005b +:10137c0014427800e04f5200c0003a0004c0200034 +:10138c00144278006a425200e14f52008b003e003a +:10139c00e04f5500b90032002555800064508000a4 +:1013ac000482520005c0200095427800ebcf520019 +:1013bc0054003a00025280000052800000004200ab +:1013cc00cf80de00165280002752800006004000bd +:1013dc008780480002015200cf91de00441bdd00e3 +:1013ec00cc13de00870373004413dd0000014300bf +:1013fc0081814b00125288002352880030518000aa +:10140c001652800027528000cf80de00860f5000dd +:10141c00878f580005003d0036518000cfb3de00a9 +:10142c0016528800275288000d003700305180007a +:10143c0016528000275280000000ea00cf80de00a8 +:10144c00860f5000878f580005003400260aee00e6 +:10145c0000037800cfb3de001652880027528800b4 +:10146c00e5c0200095427800e0cf52002100320008 +:10147c001652800027528000e00f5300e08f5b0073 +:10148c000e003400f051800016528000275280006c +:10149c00cf80de00860f5000878f580002003d0081 +:1014ac003e2aec0043003700165280002752800081 +:1014bc00f65188000e6cef003e003700f0518000b2 +:1014cc001652800027528000cf80de00860f50001d +:1014dc00878f5800020034003e2aed00350037009b +:1014ec001652800027528000f65188000e6cef00d7 +:1014fc00300037001652800027528000f6518800c9 +:10150c002c00370020608000025280000201520043 +:10151c000091b9003560800000528000000042004c +:10152c000580b900d6518000e751800002004000d0 +:10153c00838048000001430081814b00d251880018 +:10154c00e3518800d0518000e1518000e6528000c8 +:10155c00f7528000860f5000878f5800050034002a +:10156c00e6528000f7528000d6518800e75188007f +:10157c000f003700e0528000f1528000d6518000fd +:10158c00e751800060001000e0801800860f5000ca +:10159c00878f580006003400e6528000f752800016 +:1015ac0060031300e0831b00d6518800e7518800cc +:1015bc003e2aef00045288003000370004c020009f +:1015cc0014427800e64f520013003a003a2aef001a +:1015dc003c2aef00a20af8003e0af900f5518000ff +:1015ec0034518000848f520003003400260af80026 +:1015fc003e0af9002100370035518000f45180007b +:10160c008502ea00848f52001c003400260aee008a +:10161c00f05188001900370005c020009542780071 +:10162c0004c5b30084cf520011003a000655800067 +:10163c0065a5200095427800cfb3de008502fb0043 +:10164c00e58252000600be00050178000201e900a7 +:10165c00030033000000400081804800fbff37008e +:10166c00d0518800e15188003e2aef00030037007a +:10167c003a2aef003c2aef003e2aef0004c020007b +:10168c0014427800eb4f52000800320004c02000d6 +:10169c0014427800e64f52000400320084a120006e +:1016ac0014427800e04f52003a003200f5518000ad +:1016bc0034558000048252009252800035528000d2 +:1016cc008502520002a9b900a05280003552800058 +:1016dc008502420000a8b900765180008751800035 +:1016ec0002004000838048000001430081814b00d0 +:1016fc0072518800835188003452880076518000e2 +:10170c0087518000c4528000d5528000840f530052 +:10171c00858f5b0005003400c4528000d5528000d8 +:10172c0074518800855188000f003700c652800024 +:10173c00d7528000745180008551800060031300e3 +:10174c00e0831b00840f5300858f5b000600340080 +:10175c00c4528000d552800060021200e0821a0050 +:10176c0074518800855188007a5180008b5180001b +:10177c0064a52000144278000402fb000402e90076 +:10178c00030033008b85d1000a85d300fbff3700a3 +:10179c007c0037003555800034518000848f520016 +:1017ac000300340014002000545288000500370058 +:1017bc0034558000260aee00800f520001003d00d7 +:1017cc004aaaef0054528000e00f5200530032003e +:1017dc0054528000e10f52001f003a003551800036 +:1017ec0034558000048252009052800032528000a6 +:1017fc00020152000091b900a552800030528000c5 +:10180c00000042000580b90096518000a75180006d +:10181c0002004000838048000001430081814b009e +:10182c0092518800a3518800345288009451800052 +:10183c00a5518000e00f5200e08f5a0028003500bf +:10184c00322aef00342aef000002eb0054528800d9 +:10185c00345288002200370054528000e10f4200bd +:10186c001f003a0035518000345580008502ea0093 +:10187c0004825200905280003252800002015200c9 +:10188c000091b900a5528000305280000000420047 +:10189c000580b90096518000a751800002004000dd +:1018ac00838048000001430081814b0092518800e5 +:1018bc00a35188003452880094518000a5518000b7 +:1018cc00e00f5200e08f5a0005003c00322aef0076 +:1018dc00342aef000002eb00545288003452880086 +:1018ec00d6518000e75180009a518000ab518000a6 +:1018fc0064a52000144278000a0543008b854b0038 +:10190c000402fb000402e900030033008b85d100c4 +:10191c000a85d300fbff37001a00370005c02000f2 +:10192c009542780004c5b30084cf52000b003a00f6 +:10193c00da518000eb51800064a52000144278003d +:10194c000402fb000402e900030033008b85d10084 +:10195c000a85d300fbff37000a003700da518000fc +:10196c00eb51800084c02000144278000402fb007c +:10197c000402e900030033008b85d1000a85d300f3 +:10198c00fbff3700a80aee009652800042528000fe +:10199c00020150000691b900a4528000465280000a +:1019ac000603400004b3b900b4518000c551800057 +:1019bc000203430083834b000601420087814a00e7 +:1019cc00b2518800c351880040528800b651800043 +:1019dc00c7518000c4528000d5528000840f530040 +:1019ec00858f5b0005003400c4528000d552800006 +:1019fc00b4518800c55188000f003700c6528000d2 +:101a0c00d7528000b4518000c55180006003130090 +:101a1c00e0831b00840f5300858f5b0006003400ad +:101a2c00c4528000d552800060021200e0821a007d +:101a3c00b4518800c5518800b6518000c751800050 +:101a4c0065a52000954278008502fb000600be00cb +:101a5c00050178000201e900030033008180d10008 +:101a6c000080d300fbff37008005780024032000a2 +:101a7c00f7ff270016032000050037000402e900d9 +:101a8c0003003a0072eca8009d1207000700370013 +:101a9c00150e8000e08f520004003d00130e8000f4 +:101aac0083826300868f5200f4ff3600146080003e +:101abc00e00f520006003400022ced001460800090 +:101acc00e00f520002003a00712ca8008c120700a3 +:101adc006a53880009d3b90008d8b900410add005f +:101aec004f00de0000007200cf88de00d5ff2f0013 +:101afc000582b9004138dd004f33de00060370006b +:101b0c00cfbbde000602420008d0b90009dbb900e9 +:101b1c004139dd004f33de0006037100cfbbde0020 +:101b2c00cf8cde00c109dd004f04de00088471009b +:101b3c0008044300e04f5600010032000804ea009c +:101b4c0015568000880a5200f5558000880a44001a +:101b5c000402ea0005568000880a5200c255800033 +:101b6c00d1558000e0558000b00a0700e4a92000a0 +:101b7c00144278006442620027003a0064558000e9 +:101b8c000402e80064558800f30f52002200340070 +:101b9c00ac2aef00305580003455800000a0b9000d +:101bac001651800027518000f450800005518000b0 +:101bbc0006035000878358004638dd004a33de00a8 +:101bcc0006037000cabbde000601420087814a0092 +:101bdc00f250880003518800f450800005518000b9 +:101bec00e00f5200e08f5a0002003d001e2aef0069 +:101bfc00202aef00f650800007518000d45080005e +:101c0c00e5508000840f5300858f5b000200340088 +:101c1c00722ca8003a1207008480a9000080fa00f8 +:101c2c004f0678004f05be004f04be004f03be00a8 +:101c3c004f02be004f01be004f00be003600f9003f +:101c4c0000400600f3aa200093417800e4aa20008b +:101c5c00034a7800f5aa2000884a7800f7fc370080 +:101c6c00f7aa200097437800e0aa200007487800e4 +:0c1c7c00f1aa20008848780031fd3700f4 +:020000040000fa +:101c8800e6874700889fbe008a9fbe008c9fbe00e3 +:101c98008e1f7800104278008049eb00e94f52000f +:101ca8000b003a008002eb00e2cf50005f023a00de +:101cb80064c1200014427800e04f52005b023200f9 +:101cc80010409000b6120700150020005702370098 +:101cd800e74f52000b003a008002eb00e1cf5000c2 +:101ce80052023a000449780001c02000914078006f +:101cf8001141980024c0b3008449780015002000e1 +:101d08004a02370035c3b300854f52000c003a0031 +:101d18008002eb00e1cf500044023a0034c3b30024 +:101d28000449780074c120001442780014419800d6 +:101d380024c0b30084497800150020003b02370016 +:101d480025c3b300854f52003a003a008002eb00e9 +:101d5800e2cf500035023a0004c020001442780057 +:101d6800e04f52000500320006c0200016437800fc +:101d780004cbb300844f53002c023a00104090006b +:101d880017ecb7001f13070017ccbf00d80e0700c9 +:101d98000002eb0083042000a2b62000000025000a +:101da8001100200025fa0700220424000000250065 +:101db80011002000f4f9070074c1200014427800d3 +:101dc8000482fb0005002000545b8800655b8800e6 +:101dd80016c0b300a5ba2000864a7800ab6bef00a6 +:101de800c4aa2c00645d880002042000a1b620006b +:101df8000080eb00f21107006102b800745d8800f2 +:101e0800855d880003042000a2b62000000025009c +:101e180011002000eaf9070003042000a2ba2000fc +:101e28000004250011002000e5f907001500200036 +:101e3800fe01370085c4b300854f520029003a00df +:101e480064c12000144278008002eb00e04f520089 +:101e5800f6013200e5cf50000d003a00a040900096 +:101e6800c808dd00104290000482fb008102720065 +:101e780024002000110009008402d80002e2240096 +:101e8800850078003210070015002000e7013700b0 +:101e98008002eb00e8cf5000e4013a007041900066 +:101ea8004811dd00604290000482fb0002017200cc +:101eb800d0409000c808dd00404290000482fb003a +:101ec80081007200b0429000c82add0020429000d4 +:101ed8000482fb00050072001d1007001500200099 +:101ee800d201370095c7b300854f52000f003a0062 +:101ef80064c12000144278008002eb00e04f5200d9 +:101f0800ca013200e3cf5000c8013a00a042900055 +:101f1800c82add00104290000482fb000500720010 +:101f2800a412070015002000c001370075c7b300d0 +:101f3800854f52003a003a008002eb00e6cf50008d +:101f4800ba01360064c1200014427800e04f520004 +:101f5800b6013200104290000482fb00e5a920007f +:101f68009542780004437800e5a92000864a780065 +:101f7800f4a92000144278009f6aef0020429000e4 +:101f88000482fb00b0429000c82add00850272007e +:101f980095628800404290000482fb00d042900085 +:101fa800c82add0085027200a562880060429000a0 +:101fb8000482fb000402d10004437800a5c5200078 +:101fc800864a7800a4628000e10f420005003a00ca +:101fd8009ecaa80016c0b300b5c52000864a78007e +:101fe800020037009ecaa9005b6cef004402200083 +:101ff800e8cf500002003a00704290000482fb00d3 +:10200800c4628800e4a9200014427800614262009a +:1020180015002000850132009e8aa900830137003f +:10202800b5c5b300854f520024003a008002eb008a +:10203800e3cf50007d013a00204390009042900089 +:102048000002eb00e1cf520004003a0066c0b20083 +:102058000682fb000402e9004f22de008442780079 +:1020680061c120008548780084c0b30084497800a5 +:10207800b5c5b300054978001441980034c0b300d1 +:102088002441980034419800b4c1b30044419800f9 +:1020980014c0b3005441980064c0b3006441980070 +:1020a80066c12000164378007641980064c120007c +:1020b80014427800150020005c01370055c6b300b3 +:1020c800854f52006a003a0064c12000144278002b +:1020d8008002eb00e04f520054013200e8cf50007c +:1020e8000e003a0070419000c0409000c808dd0022 +:1020f800304290000482fb0081007200a0429000f0 +:10210800c82add00104290000482fb00050072001e +:102118009510070015002000440137008002eb00ed +:10212800e6cf500041013a0010429000e14f5200c2 +:10213800040032008002eb00e24f52003b013a00fb +:102148000500370010029000a0029000246188006a +:10215800356188000400370010029000a00290004a +:102168000461880015618800246180003561800061 +:10217800f4b79f0085bf9f000c6180001d6180003f +:102188000401be000c00be009af90700e00f5000e1 +:1021980003003c007fb597008fbd97000100370012 +:1021a8000c05be000200200003f823000a00be0050 +:1021b8008ef90700e00f50000c0035001e002000cb +:1021c800150020000e28dd00cf80de00acf90700e6 +:1021d8000004be000001be000a00be0083f907002b +:1021e800e00f50001d003d000300370008002000ec +:1021f80009f823000007eb00f4c0b3000e475200b3 +:1022080002002000037024000c00be00f2f9070051 +:102218000801be0024f9070078f907000005be0090 +:1022280002002000037024007fb097008fb8970049 +:10223800e9f907000801be001bf907006ff907005c +:102248000002be000e4178008a0078000400780081 +:102258004510070015002000f40037000e07e800bd +:10226800f00f5700d6ff3a008002eb00ef0037006e +:1022780095c6b300854f52006a003a0064c1200039 +:10228800144278008002eb00e04f5200e700320071 +:10229800e8cf50000e003a0070419000c040900016 +:1022a800c808dd00304290000482fb008100720003 +:1022b800a0429000c82add00104290000482fb0072 +:1022c800050072003a10070015002000d7003700fb +:1022d8008002eb00e6cf5000d4003a001042900094 +:1022e800e14f5200040032008002eb00e24f52003e +:1022f800ce003a000500370010029000a0029000be +:10230800e4608800f560880004003700100290003f +:10231800a0029000c4608800d5608800e460800056 +:10232800f5608000f4b79f0085bf9f00cc608000f7 +:10233800dd6080000401be000c00be002df907001e +:10234800e00f500003003c007fb597008fbd970059 +:10235800010037000c05be000200200003f823002e +:102368000a00be0021f90700e00f50000c003500fc +:102378001e002000150020000e28dd00cf80de00a2 +:102388003ff907000004be000001be000a00be00bd +:1023980016f90700e00f50001d003d00030037004c +:1023a8000800200009f823000007eb00f4c0b30080 +:1023b8000e47520002002000037024000c00be00eb +:1023c80085f907000801be00b7f807000bf90700f8 +:1023d8000005be0002002000037024007fb09700b3 +:1023e8008fb897007cf907000801be00aef8070017 +:1023f80002f907000002be000e4178008a0078004a +:1024080004007800ea0f0700150020008700370055 +:102418000e07e800f00f5700d6ff3a008002eb00e5 +:1024280082003700f74f52001b003a008002eb0091 +:10243800e5cf50007d003a0064c1200014427800c6 +:10244800e04f52007900320004c0200014427800a6 +:102458006a425200e14f520074003e00a0429000d0 +:10246800c82add00104290000482fb0005027200b9 +:10247800245588002455800026558000150020002a +:1024880004002800840f530068003a000402e800a2 +:10249800245588006500370025c7b300854f5200d2 +:1024a80020003a008002eb00e3cf50005f003a00c2 +:1024b80064c1200014427800e04f52005b003200f3 +:1024c80006c020001643780004c5b300844f5300ab +:1024d80056003a00a0429000c82add001042900041 +:1024e8000482fb000502720004558800055580002f +:1024f80004402600848f52000300340004558800ed +:1025080015002000490037000655800015002000fe +:1025180004c02900840f530044003d00045588007e +:1025280042003700d5c6b300854f520021003a005b +:102538008002eb00e5cf50003c003a0064c1200067 +:1025480014427800e04f52003800320004c02000e6 +:1025580014427800e64f520034003a00a04290003e +:10256800c82add00104290000482fb0005027200b8 +:10257800145588001555800034518000848f52000e +:1025880004003400260af800a20af9001500200009 +:102598002600370014558000260aee00150020009a +:1025a800800f520021003d00260aee0010558800d9 +:1025b8001e003700e5c6b300854f520013003a00ed +:1025c8008002eb00e1cf500018003a0054c0b3007d +:1025d80084497800e4c6b300044978000202780010 +:1025e80026aa200016437800066a780031aa20003f +:1025f80091407800114298000042eb004441980055 +:102608003441980015002000080037008002eb00d4 +:1026180006c7b300864f520004003a0051c0b2000a +:102628008182fb008502e900cf2ade0005007800e0 +:102638004f0778004f06be004f05be004f04be008e +:082648006f00b1000000060064 +:020000040000fa +:10265000000a0000dc00000000000000000c000088 +:102660001600000002000000b0b2ff00ff0c0000e6 +:1026700010000a0000ff7f00ff7f010000ff7f00c5 +:10268000c4ff3c0000000000e0460000080000001d +:1026900000000000740c00000200000000000000b8 +:1026a000b20b000032000000020000000000000039 +:1026b000000000000002000002010200ff02020010 +:1026c0000200ff000202010002ff010000020200fe +:1026d000020202000202000001ff020001020200e9 +:1026e000ff0002000202ff000201020000000000e1 +:1026f000dc0a00008e000000000000006e0c0000ec +:102700000600000000000000660c00000800000049 +:1027100000000000760c0000020000000200000033 +:1027200001000000280c00000e0000000000000066 +:10273000160c000012000000000000006a0b0000f0 +:10274000480000000200000001000000000000003e +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027a0000000000000000000360c00000e000000d9 +:1027b000000000000008000000020000020000000d +:1027c00000002100104220006330840040a550002a +:1027d000c660e7007008810029914a00a16bb10032 +:1027e0008cc1ad00d1cee100eff13100121002003a +:1027f0007332520022b552009442f70072d6620042 +:1028000039931800837bb3005aa3bd00d39cc30047 +:10281000fff3de00e36224004334200004011400cf +:10282000e664c70074a4440085546a00a54bb50053 +:102830002885090095eee500cff5ac00c58dd500e3 +:1028400053367200261116003006d70076f6660061 +:102850009556b400465bb7007aa7190097388700f1 +:10286000dff7fe00e79dd700bcc7c40048e558006d +:102870008668a70078400800611802002823380005 +:10288000ccc9ed00d98ee900aff9480089699900fb +:102890000aa92b00b9f55a00d44ab7007a966a0003 +:1028a000711a50000a333a00122afd00dbdccb001b +:1028b000bffb9e00eb799b00588b3b00bb1aab0023 +:1028c000a66c87007ce44c00c55c22002c033c0015 +:1028d000600c41001caeed008ffdec00cdcddd00a5 +:1028e0002aad0b00bd688d00499d97007eb66e0035 +:1028f000d55ef4004e133e00322e51001e700e00c5 +:102900009fffbe00efdddf00fccf1b00bf3aaf0032 +:10291000599f78008f889100a981ca00b1eba1006e +:102920000cd12d00c14ef1006fe1800010a100001c +:10293000c230e3002004500025404600706760006c +:10294000b983980093fba300dab33d00c31cd30006 +:102950007fe35e00f3b102009012f30022d2320056 +:1029600035421400527762005672ea00b5cba500da +:10297000a8958900856ef5004fe52c00d50dc500a2 +:10298000e234c30024a0140081046600744764008c +:102990002454050044dba700fab7990087b89700d4 +:1029a0005fe77e00f71dc7003cd7d30026f2360054 +:1029b0009106b0001657660076761500463456002c +:1029c0004cd96d00c90ef9002fe9c80099e98900ba +:1029d0008ab9ab00a944580065480600782768000a +:1029e000c018e10008823800a3287d00cb5cdb0022 +:1029f0003feb1e00fbf98b00d89bbb00ab9abb00e2 +:102a0000754a54005a376a00167af1000ad01a0043 +:102a1000b32a92003a2efd000fed6c00dd4dcd0083 +:102a2000aabd8b00ade89d00c98d26007c076c0017 +:102a3000645c45004ca23c00832ce0001cc10c00ef +:102a40001fef3e00ff5dcf007cdf9b00afbabf00f1 +:102a5000d98ff8009f176e00367e55004e745e00c9 +:102a6000932eb2003ed10e00f01e0000e40b0000d9 +:102a70001c00000000000000004700008000000073 +:102a800000000000804700008000000000000000ff +:102a9000440c00000e00000000000000520c00007a +:102aa0000a0000000200000000005a0000000000c0 +:102ab00000000000000000005c0c00000a000000a4 +:082ac00000000000000000000e +:020000040000fa +:102ac8000600fa00889fbe008a1f78004a2cef0093 +:102ad800b4b82f000408780006a2a9000602a800ce +:102ae80004902100346288000602ab0007013a0016 +:102af800b80037000402e900030032000602ab0008 +:102b0800fcff3a00b30037003462880074ff2f00de +:102b180054628800780037000402e900030032009c +:102b28000802ab00fcff3a00b000370034628800ae +:102b380064ff2f00546288006f0037000602e90026 +:102b4800060032000403780041108000818263008f +:102b5800faff3a0034628800aa003700346288001d +:102b680054ff2f005462880063003700f40f2000e0 +:102b7800a4bf9f00b4bf9f00c4bf9f00ee81570051 +:102b88008000eb0002902100f78f2100f8fd2f0054 +:102b98000662a80000000000326288000822ab002c +:102ba800ce0032009d0037000602e9000400320022 +:102bb800040378000822ab00fbff320096003700c0 +:102bc8003462880034ff2f00546288004a003700be +:102bd8000602e90005003200040378000682ab0013 +:102be800fbff3a00346288009d0037003462880099 +:102bf80024ff2f00546288003f0037004fba970027 +:102c0800f90f52000e003a00afba9700c82add004b +:102c18003fba970005027200f5ff2700850f5200a2 +:102c280004003a00e4fe2f0054628800482cec00af +:102c38001300370004087800482cef001000370014 +:102c4800482cec00f00f520005003a00c4fe2f009b +:102c58005462880094d82f000408780026003700b2 +:102c680064e82f0004087800d4fe2f00546288001e +:102c780021003700482cec00f4fe2f005462880035 +:102c88004562800044062000848f5200780034009a +:102c9800b4fe2f005462880094d82f00900f1200c1 +:102ca8000500320064e82f00900f12000200320085 +:102cb800a4c82f00040878000662a9000642a800ec +:102cc80004902100346288000642ab007b003a0081 +:102cd8006d0037000602e9000400320004037800a2 +:102ce8000642ab00fbff3a006600370034628800fa +:102cf80014ff2f00546288004e2cec0007e2a90054 +:102d0800c902a90004fe2f00856c2000950a620004 +:102d1800cf02a8000004eb0029002000faef2f00e2 +:102d2800110009000904d800618260004822dd0012 +:102d380056168000860265008502720055168800c6 +:102d480000192000010020002b0e07000804e800ed +:102d5800f30f5400f2ff3a0007e2a8000019200020 +:102d680001002000240e070004fe2f00612020002f +:102d7800910862000642a80004902100346288008d +:102d88000642ab0049003a00420037000602e9005b +:102d980004003200040378000642ab00fbff3a004f +:102da8003b0037003462880004ff2f00546288001b +:102db80016c0b300c5c42000864a78004504070041 +:102dc800506280004f0578004f04be000080fa0072 +:102dd80000000600340d2000141088000490210023 +:102de800346288000802ab0045003a0004902100d4 +:102df800346288000400240041108000010262004f +:102e08003a003a00040028004510800005026200dc +:102e180056ff320097ff37003462880006108000a2 +:102e280086297800010278000410a20004f0a700a7 +:102e38000402ea000402e9004f22de004522dd0018 +:102e48003610800086026400850272003510880002 +:102e58000682a800326288000682ab001b003a0096 +:102e68008100e800e38f500049ff3a0063ff370014 +:102e78000662a9000642a800049021003462880076 +:102e880091ff37003462880050628000cdff370020 +:102e9800346288000019200001002000d60d0700c8 +:102ea8000c04070050628000c6ff3700f48f210031 +:102eb8003462880004037800b7ff3700f48f2100dc +:102ec800346288000403780085ff37003762880081 +:102ed800070278000703780040ff37003762880050 +:102ee800070278000703780032ff3700f48f2100cb +:102ef80034628800040378000700240012ff3700ba +:102f0800f48f21003462880005ff3700f48f210018 +:082f180034628800f9fe370065 +:020000040000fa +:102f20000400fa00889fbe008a9fbe00c90a0700fd +:102f3000550b0700ad0c0700a4002000345088009a +:102f40001d0607008660a9009660a8004f0e0700c6 +:102f5000540e07009460a80080a720000300090019 +:102f60000058eb00626cef000001eb006000b8005d +:102f7000f90b0700d70d0700bf0b0700e00f50004b +:102f800002003200042aef00faff370004aaef0023 +:102f9000620e0700800c0700e400200005002000fe +:102fa000a4bf9f00b5bf9f000002eb0043002000bc +:102fb0006c8157000000250011002000a1f50700da +:102fc0009760a8004ff097001e0d0700e4a92000ad +:102fd000144278000042eb00e5a92000844a780002 +:102fe000f5a920009542780084427800f0a92000dd +:102ff0000548780064c1200014427800e04f520078 +:10300000fcff3200e4a92000144278006142620013 +:1030100004003a00e4a920001442780062426200f1 +:10302000f4ff320034518000e00f5200f1ff320013 +:10303000c4528000d5528000e00f5200e08f5a0049 +:10304000ecff3200e4a920001442780061426200e3 +:1030500004003a00e4a920001442780070426200a3 +:103060000a003200e2a92000124178004311de007c +:1030700061016100a1c5200091407800906280004c +:103080008180fb005a070700020037008b40a9002f +:103090009b40a900186aef00628ca900e4a92000f7 +:1030a00014427800624262000b0032009e4aa9007e +:1030b000a0c520001040780062c0b3000440bc00ee +:1030c000cf91de00000020001100200078f60700fc +:1030d000420e070010003700e4a9200014427800d7 +:1030e0006442620003003200420e07007050880004 +:1030f000010037000e2aef00e4a9200014427800f6 +:10310000614262000400320016c0b30085a12000b5 +:10311000864a7800628ca80082c0200012417800a4 +:103120003160800020608000a30c0700000e0700c3 +:10313000006cef0004a02000650920003502980013 +:103140008082eb0025029800800207000005eb005a +:1031500009cab3006b092000470b0700e00f5000bd +:103160000b003200a4aa200014427800e04f520065 +:1031700001003200b70d070000c0200009487800a8 +:1031800006aaef00e4012000245088000e0037005a +:10319000c262ab000c003200700ca800a4aa200090 +:1031a00014427800e04f520001003200a90d0700e0 +:1031b000006cef0004a020003b0298008082eb002e +:1031c00025029800e4ff3700700ca90004c020001d +:1031d00014427800e04f52000700320004c0200083 +:1031e00014427800894f520003003200f90d0700a5 +:1031f000900d0700820c070064518000840f550079 +:10320000d5ff32006a51800018c0200018447800b1 +:1032100004c0200014427800894f520011003a0087 +:10322000e94f5400ccff3a00bc0d0700ef0b07003c +:103230000042eb0025c62000844a780084427800d2 +:1032400000c020000548780004a020003b02980040 +:103250008082eb0025029800843e200014608800e4 +:10326000bdff370004c0200014427800e04f520038 +:1032700011003a00e64f540007003200ea4f5400b4 +:1032800005003200eb4f54000300320004c5b300c8 +:10329000844f5400b0ff3a000840780000ecb700bb +:1032a000062aef0004aaef00843e20001460880084 +:1032b000460d0700a8ff370004c020001442780024 +:1032c000e64f52000d00320004c020001442780086 +:1032d000ea4f52000900320004c020001442780076 +:1032e000eb4f52000500320005c0200095427800e7 +:1032f00004c5b30084cf520097ff3a00e04f54005a +:1033000002003200e94f540007003a00510d070057 +:10331000006cef0004a020003b0298008082eb00cc +:10332000250298008cff3700e64f5400070032005a +:10333000ea4f540005003200eb4f54000300320006 +:1033400004c5b300844f540083ff3a00920b07007a +:10335000843e2000146088008842780004c0200069 +:08336000054a78007cff3700ec +:020000040000fa +:10336800889fbe0080047800e4a9200014427800f9 +:10337800624262000000eb0000013a0084a12000d4 +:1033880014427800e04f5200fc003200b662800020 +:103398006333b90024002000110009000403d80099 +:1033a8000004780084a1200014427800e24f520003 +:1033b8000f003c0014c6200014427800e04f520071 +:1033c8000b003200b5c52000954278000042eb00a2 +:1033d80084cf52000100320034c0b3008442780028 +:1033e80081a1200085487800628ca9008b0d070018 +:1033f80084a1200014427800e14f52001c003a00da +:1034080055518000865680002400200011000900d4 +:103418008402d800860f5000030034000603e80039 +:10342800865688001200370094568000840f540096 +:103438000a003400455680008502e8004556880099 +:10344800860c2000868f520009003400c82aef003d +:103458000402e800945688000500370084f82f001d +:10346800a4608800122cef0020c0b30018eab7004f +:1034780084a1200014427800e24f520017003a005d +:10348800945680000804ea00840f54000a003d00a6 +:10349800355680008502e80035568800860c2000e5 +:1034a800868f52000d003400c62aef000402e9009e +:1034b80094568800090037000004eb0088568800fd +:1034c800880c7800624ca800728ca8000d0c0700cc +:1034d8000842780081a120008448780084a1200057 +:1034e80014427800e34f520012003a00d20af80062 +:1034f800100cf9008456800055518000850f520049 +:1035080003003d000402e8008456880009003700e3 +:10351800245680000402e800245688000571220021 +:10352800850f52000300340046c0b30085a1200077 +:10353800864a780084a1200014427800e44f5200a3 +:1035480014003a0080608000140cb4009056880083 +:10355800545680000402e80054568800055327009a +:10356800850f52000b003600e4628000b0628000d4 +:10357800250f800000abb90011000900443bd800ba +:1035880070568800ca2aef0056c0b30085a12000f3 +:10359800864a780084a1200014427800e54f520042 +:1035a80069003a0080608000120cb40090568800d0 +:1035b800545680000402e8005456880005a62e00e0 +:1035c800850f520060003600d02aef00e4628000c8 +:1035d800b0628000250f800000a9b9001100090021 +:1035e8004419d80000017800625688007656800099 +:1035f80006025100350b2000850f520003003400ed +:103608008416b100850f5200fdff3c00c5f42f0061 +:10361800850f520003003d008416b000850f52004c +:10362800fdff35008403780007f0a7008703ea0050 +:10363800a5052000858f53002e00340025002000aa +:10364800110009000502d8000002780006024200b5 +:1036580075162000850f5200030034008416b1004f +:10366800850f5200fdff3c00e00f520002003d00b4 +:103678008416b000feff33000653880012538800fa +:1036880085608000a505b000a0608000120cb40021 +:1036980026002000110009000600d80080824200a0 +:1036a80004825200a4628800a5628000741620007b +:1036b800848f52000500340080e92f00542cb40098 +:1036c800a5628000848f5200fbff3c00a46280004a +:1036d800e00f520005003d0080162000542cb40075 +:1036e800a4628000e00f5200fbff3500186aef006b +:1036f8001500370094608000e00f52000900320086 +:103708000002eb009460880085f82f00a56088000f +:103718005456880045c0b30081a120008548780030 +:10372800090037000004eb0088568800880c7800f0 +:10373800628ca90062aca800728ca800710b07000b +:103748000840780018eab70081568000810c78009c +:103758009056800074162000840f50000300340037 +:103768008016b100840f5000fdff3c00e00f5000b0 +:1037780002003d008016b000feff33004f04be007b +:043788000000060037 +:020000040000fa +:10378c000003be003064ab000b003200048020004c +:10379c008021800000026200070032003264ab001e +:1037ac00050032000480200091218000010262009b +:1037bc000080eb00e1003a003064ab0038003a00c6 +:1037cc0003027800824078000601be0000702400dd +:1037dc00a804070084be2000000aeb00140290002d +:1037ec00e20f52000d003c00655f8000e28f52003a +:1037fc000a003c00765f8000e20f530007003c009b +:10380c0087be20000402e800940398008502e800bb +:10381c00a50398000603e800b603980084be2000b8 +:10382c0014437800e3426300e3826200c6ff2f007a +:10383c0080218000800363008783720087218800c9 +:10384c00a4439000e3836300c83bdd00f5cf2f0059 +:10385c00812180000180620000807300802188003b +:10386c00c4439000e3836300902180000003630055 +:10387c000683730096218800644290006302620004 +:10388c004822dd0091218000818262008502720055 +:10389c00952188003064a8000000eb00a7003700d9 +:1038ac0004802000852180000502620036003a0069 +:1038bc0003027800824078000601be0000712400eb +:1038cc006c040700ea2bef00445f8000e20f52000b +:1038dc000c003c00655f8000e28f520009003c0048 +:1038ec00765f8000e20f530006003c0087be20008c +:1038fc00840be8008502e800a50398000603e800a5 +:10390c00b603980084be200014437800e3426300a1 +:10391c00e3826200c6ff2f008021800080036300d9 +:10392c008783720087218800a4439000e38363009f +:10393c00c83bdd00f5cf2f008121800001806200a3 +:10394c000080730080218800c4439000e3836300ef +:10395c009021800000036300068373009621880089 +:10396c0064429000630262004822dd0091218000d5 +:10397c008182620085027200952188003164a80062 +:10398c000000eb006d0037003264ab0036003a00eb +:10399c0003027800824078000601be000072240009 +:1039ac0034040700ec2bef00445f8000e20f520060 +:1039bc000c003c00555f8000e28f520009003c0077 +:1039cc00765f8000e20f530006003c0087be2000ab +:1039dc00840be8008502e800950398000603e800d4 +:1039ec00b603980084be200014437800e3426300c1 +:1039fc00e3826200c6ff2f008021800080036300f9 +:103a0c008783720087218800a4439000e3836300be +:103a1c00c83bdd00f5cf2f008121800001806200c2 +:103a2c000080730080218800c4439000e38363000e +:103a3c0090218000000363000683730096218800a8 +:103a4c0064429000630262004822dd0091218000f4 +:103a5c008182620085027200952188003264a80080 +:103a6c000000eb003500370003027800824078003c +:103a7c000601be0000732400fe030700ee2bef00ce +:103a8c00445f8000e20f52000c003c00555f800048 +:103a9c00e28f520009003c00665f8000e20f530089 +:103aac0006003c0087be2000840be8008502e8007d +:103abc00950398000603e800a603980084be200036 +:103acc0014437800e3426300e3826200c6ff2f00d8 +:103adc008021800080036300878372008721880027 +:103aec00a4439000e3836300c83bdd00f5cf2f00b7 +:103afc008121800001806200008073008021880099 +:103b0c00c4439000e38363009021800000036300b2 +:103b1c000683730096218800644290006302620061 +:103b2c004822dd00912180008182620085027200b2 +:103b3c00952188003364a8000000eb00000006000b +:020000040000fa +:103b4c00881f780034558000c0c3200004487800da +:103b5c004822de0084427800d2c320000549780058 +:103b6c0064508000e6c32000044b78004822de003d +:103b7c0084407800f0c32000014878004450800055 +:103b8c005550800002c42000044978004823de0010 +:103b9c000640780041ecb70021c42000854878002d +:103bac00482ade000443780035c42000864a780099 +:103bbc0036ccbf000080fb004400dd000080a0007c +:103bcc00cf80de00c3c3200082c0b300ecfe070030 +:103bdc00e4a92000144278000444b20036003200fc +:103bec0036ccbf000080fb00440620000482b900e4 +:103bfc00451f200084824200d461800018c0b300ad +:103c0c00ea0f5200040034006a835200860f5200ff +:103c1c0001003d000044eb000402e800d461880080 +:103c2c00848f520058003c003a2cef00a4628000b4 +:103c3c00c7c32000844b78004822de008442780001 +:103c4c00d2c3200005497800240f8000e6c3200071 +:103c5c00044b78004822de0004417800f1c32000b8 +:103c6c00824878000453800005c42000844a780000 +:103c7c004822de008440780017c42000814b780075 +:103c8c001453800022c42000044978004822de002e +:103c9c008443780036c42000074b78004400dd00d4 +:103cac009010b300cf80de00c3c3200082c0b300ed +:103cbc00b3fe070034003700e4a92000144278005a +:103ccc000442b2003200320036ccbf000080fb0050 +:103cdc00440620000482b900451f20008482420063 +:103cec00c461800018c0b300ea0f52000400340015 +:103cfc006a835200860f520001003d000044eb0025 +:103d0c000402e800c4618800848f52001e003c004d +:103d1c00382cef0054628000e1c320008448780006 +:103d2c004822de0004437800f5c32000864a780060 +:103d3c00c4c42000144278000402fb0007c4200015 +:103d4c00844b78004822de008442780012c42000a4 +:103d5c00054978007462800026c42000044b78006a +:103d6c004822de000441780031c4200082487800eb +:103d7c004400dd009010b300cf80de00c3c32000f0 +:103d8c0082c0b3007efe0700e04f54004e003a00a4 +:103d9c0044a1200014427800e04f52001800320079 +:103dac000044eb00c4c32000084a7800d6c32000ae +:103dbc00084b780074508000e0c320000448780061 +:103dcc004822de0084427800f2c3200005497800c6 +:103ddc0036ccbf000080fb004400dd00c010b300f7 +:103dec00cf80de00c3c3200042c0b30064fe0700d6 +:103dfc008843780046a12000074b7800320037003a +:103e0c0001c0200091407800c2c320000149780015 +:103e1c0024c6200014427800d5c32000844a7800c0 +:103e2c00d6518000e751800065a5200095427800ae +:103e3c008502fb00e58252000600be0005017800f9 +:103e4c000201e900030033008180d1000080d3001f +:103e5c00fbff37003eecb7004802de0084407800e0 +:103e6c00f0c320000148780002c7200012417800fe +:103e7c0004c42000024a780015c72000954278003f +:103e8c0016c42000054b780027c720009743780004 +:103e9c0020c420000748780031c7200091407800ea +:103eac0032c420000149780036ccbf000080fb00f2 +:103ebc004400dd003010b300cf80de00c3c320000f +:103ecc0082c0b3002efe07004f04780000000600ed +:020000040000fa +:103edc004a2cef0006a2a9000602a80004902100bb +:103eec00346288000602ab0093003a004e003700a3 +:103efc000402e900030032000602ab00fcff3a00aa +:103f0c0049003700346288004aacef0044003700a7 +:103f1c000402e900030032000802ab00fcff3a0087 +:103f2c004700370034628800e4ff2f005462880099 +:103f3c003b0037000402e900040032004710800007 +:103f4c0087026300fbff3a004300370034628800ad +:103f5c00d4ff2f0054628800310037000402e900be +:103f6c00040032004710800087026300fbff3a0018 +:103f7c003f00370034628800c4ff2f005462880071 +:103f8c00270037000402e900030032000802ab00ee +:103f9c00fcff3a003c00370034628800b4ff2f006d +:103fac00546288001e0037000402e900040032004d +:103fbc004710800087026300fbff3a00380037008f +:103fcc0034628800a4ff2f0054628800140037006c +:103fdc000402e900040032004710800087026300ed +:103fec00fbff3a00340037003462880094ff2f0046 +:103ffc00546288000a0037000602e900050032000e +:10400c00040378000642ab00fbff3a0034628800e0 +:10401c00030037003462880084ff2f00546288004c +:10402c005062800000000600240d2000141088004f +:10403c0004902100346288000802ab003b003a0077 +:10404c000490210034628800040024004510800094 +:10405c000502620031003a000490210034628800ad +:10406c0004002800471080000702620027003a0075 +:10407c009401200014108800049021003462880000 +:10408c000802ab001e003a00049021003462880044 +:10409c0004002400451080000502620014003a0060 +:1040ac00049021003462880004002800471080002e +:1040bc00070262000a003a000662a9000642a80044 +:1040cc0004902100346288000642ab00d4ff320019 +:1040dc00f48f21003462880004037800c9ff370094 +:1040ec00f48f21003462880006002800baff3700e4 +:1040fc00f48f21003462880006002400acff3700e6 +:10410c00f48f210034628800a0ff3700f48f210067 +:10411c00346288000600280092ff3700f48f2100db +:10412c00346288000600240084ff3700f48f2100dd +:10413c003462880078ff3700f48f210034628800e5 +:04414c006dff3700cc +:020000040000fa +:10415000e6874700889fbe008a9fbe008c9fbe00f6 +:104160008e1f78000007eb008e538800ae53880046 +:1041700021e3a8006044b8000805be000dfe2f0032 +:104180008c3e200084322000148a66002003a9009f +:104190002023a80040062000010020001809070085 +:1041a0002023a9000002eb00030037000402e8000e +:1041b0008c0f5200460032002003ab00fbff3200a0 +:1041c0000518800085bf9f004619800006826600a2 +:1041d0000400a000441988002003a9002023a8009f +:1041e0004006200001002000050907002023a90047 +:1041f0000c027800020037000402e90036003200a9 +:104200002003ab00fcff320004188000f4b79f00cd +:1042100045198000058266000410a000441988003a +:104220002003a9002023a800400620000100200050 +:10423000f30807002023a9000002eb000300370069 +:104240000402e8008c0f5200250032002003ab006e +:10425000fbff320004188000001880007509070079 +:1042600074072000840f50001f0036000fbb97001a +:104270006132b9000a0542008b854a007fb397007e +:104280006132b9000804420089844a000e07e80040 +:10429000840c2000840f5700baff3a00820c2000e3 +:1042a000030020000a00be0043f10700805388008d +:1042b000820c2000030020000800be003ef1070031 +:1042c000a053880021e3a9000000eb00070037009d +:1042d0000080eb00050037000080eb000300370092 +:1042e0000080eb0001003700e0ff2f004f0778004f +:1042f0004f06be004f05be004f04be006f00b10068 +:0443000000000600b3 +:020000040000fa +:104304003600f800809fbe00829fbe00849fbe00de +:10431400869fbe00889fbe008a9fbe008c9fbe0001 +:104324008e1f7800ea8747008700a9001c00200040 +:104334000e7824004a208000fa03b2001d002000f9 +:104344008a6edd00052180000d8262004a00320081 +:104354004455dd000e054500ca459000ef85650013 +:10436400e88f550002003400738ca8008b002000f5 +:104374009a42780061c26200230032005a449000dd +:104384000884fb004244de000884fb00090020008e +:1043940004002000050028000404740085847400cf +:1043a4002a4290000482fb003a4390006f036300aa +:1043b4004833dd000603720007002000463add00a2 +:1043c400ca32de00850272004632dd000404740045 +:1043d400858474001a4278008482fb00c22ade00bd +:1043e4001a4290007f0262004622dd0004827200bd +:1043f40005002000c222dd00040020000404740033 +:1044040085847400080037009a4278000582fb0016 +:104414004222de001a4490007f0464004644dd001a +:104424000804720009002000e60045000b01780032 +:104434006880570007f207008d86ea000d21880086 +:104444005a4290006242620002003200734ca8009b +:1044540005003700e88157000b4178000800be00d2 +:10446400345f8000040001000c06e800e60f5600eb +:10447400b0ff3a0003003700e50f560001003a0090 +:10448400710ca800af00b1004f0778004f06be00c2 +:104494004f05be004f04be004f03be004f02be00d6 +:1044a4004f01be004f00be003600f9000040060078 +:020000040000fa +:1044b400889fbe000044eb0009f0230064c620007e +:1044c400084a7800d421ef00606380006500400052 +:1044d400cf80de00490807006a0cf800da01f90011 +:1044e400da01f800d801f900d801f800d601f90082 +:1044f400c1e1a8008be0a9009be0a80074002000a3 +:10450400840e880014002000a40e880064c62000d5 +:1045140014427800e04f520039003a006063800092 +:10452400a00fb000cf80de003408070064c620006e +:1045340014427800e04f520031003a005400200049 +:10454400a40e880064c6200014427800e04f520094 +:104554002b003a0060638000a00fb000cf80de0023 +:104564002608070064c6200014427800e04f520079 +:1045740023003a0054012000a40e880064c62000e1 +:1045840014427800e04f52001d003a00606380003e +:10459400a00fb000cf80de001808070064c620001a +:1045a40014427800e04f520015003a00d421ef0085 +:1045b40064c6200014427800e04f520010003a0014 +:1045c4006063800065004000cf80de000b080700b8 +:1045d40064c6200014427800e04f520008003a00fc +:1045e400a90e880064c6200014427800e04f5200ef +:1045f40003003a00766cef0010c0b3000b003700e4 +:1046040064c72000084a780074c620001442780069 +:10461400e04f520004003200803e200001002000e0 +:10462400f6070700a5ff37000040eb004f04be006b +:04463400000006007c +:020000040000fa +:10463800889fbe00000478008103780044638000ee +:10464800880f52000b003d0004bab90011000900a0 +:10465800482ad80080037800446380000491b90098 +:10466800110009004819d8000001780004047800f6 +:104678000e0037008402ea00850f54000b003d004d +:104688008802ea0004bbb90011000900453bd800c4 +:1046980080037800446380000491b9001100090088 +:1046a8004519d800000178000404ea00446380003a +:1046b800848f53000b00340004c2b90011000900b4 +:1046c800472ad80000047800446380000491b900a8 +:1046d800110009004719d800000178008403780008 +:1046e8000e0037008402ea00858f53000b003d005e +:1046f8008702ea0004c4b90011000900454cd8003b +:1047080000047800446380000491b9001100090096 +:104718004519d800000178008403ea00446380004a +:10472800840f51000b00340004c2b90011000900c5 +:10473800422ad800000478004463800004bbb90012 +:1047480011000900423bd80080037800040178007a +:104758000e0037008402ea00850f51000b003d006f +:104768000201ea0004c2b90011000900422ad80077 +:10477800000478004463800004bbb90011000900fc +:10478800423bd800800378000401ea0054638000ab +:1047980004004400b00e880084804300c10e8800e5 +:1047a80004014100d20e88004f04be00000006003c +:020000040000fa +:1047b8000002eb00240588002505800005c0a00044 +:1047c80005d0a10005e0a100250588003405880072 +:1047d800350580000500a1006500b3003505880097 +:1047e80044058800450580000580a0000590a100cb +:1047f80005a0a00045058800450580000540a000eb +:104808000550a1000560a000450588004505800009 +:104818000500a0000510a1000520a000450588009e +:1048280054058800f5cf2f00560580008682620067 +:1048380005a0a00055058800550580000540a10089 +:104848000506b300550588006405880065058000e5 +:1048580005c0a00005d0a00005e0a00065058800ff +:104868007405880084058800c5ff2f008605800030 +:10487800868262000520a00085058800f5ff2c00cf +:10488800860580008682620005e0a0008505880014 +:1048980094058800a4058800f58f2f00460b20009a +:1048a800168b6200f5ff2c00a60580008682620048 +:1048b80005e0a000a5058800b4058800b5058000be +:1048c8000500a0000510a1000520a000b50588007e +:1048d800d405880004068800050680000530b3006a +:1048e80005a0a100050688001406880015068000aa +:1048f80005c0a00005d0a00005e0a00015068800ae +:1049080024068800340688004406880081e0a9004f +:044918000000060095 +:020000040000fa +:10491c00889fbe008a9fbe008c9fbe000082eb0069 +:10492c00855f8000ef8f52004d003e00faff2f0094 +:10493c00fbff29000383650007002000c036dd0063 +:10494c000c0020006113b8000606760087867600fe +:10495c000182650005002000c024dd000800200055 +:10496c006102b80004047400858474008a0f560038 +:10497c008b8f5e002e003200f2cbbf008082fb00da +:10498c004240a90012003400a65f8000b75f80008f +:10499c0044bf20000005eb008c0f53008d8f5b0093 +:1049ac0005003a00240037005403be008c0f53005e +:1049bc008d8f5b00040032000a05e800850f55005e +:1049cc00f9ff350002003700e10f45001b003a00eb +:1049dc00e4ff2f00e34f500021003200c22add001b +:1049ec0044bf2000050242000c8abe000045e800ce +:1049fc0024bf20000a4a78000a85fb00cf68de003d +:104a0c00f4ff21000d02620005002000c021dd0032 +:104a1c00020020006162b800040171008581710000 +:104a2c004f4ade000a007800de030700030037005f +:104a3c003a002000010037000005eb00805f800089 +:104a4c000002e800845f8800cf48de008a0278000c +:104a5c00f40020000801be00d70207000002eb00a2 +:104a6c00040078004f06be004f05be004f04be0088 +:044a7c000000060030 +:020000040000fa +:104a8000881f7800e00f5100e08f590023003d009f +:104a9000f5c3b3008543610025002000853bdd00a0 +:104aa00050439000634363000743730056409800ef +:104ab000c61bde004a1cdd004613de000603740040 +:104ac000f8ff200006036400264098004833de000b +:104ad0003044900007cfb3008743640006c37300df +:104ae000364098004219de00f67f20000201630084 +:104af00002037800f603b2008532dd004611de00c5 +:104b00009043900006ceb30006c3630002417300d9 +:104b10001240980063c8720017003700f57f20002c +:104b20000281620002037800f603b2002500200033 +:104b30000533dd004611de009043900005ceb30042 +:104b400085c2630002c1720012409800d0429000fa +:104b5000e3c26200554098008042eb002540980077 +:104b6000b043900005cfb30085c263003540980084 +:104b7000c5cfb30005486300d04290000510a100e6 +:104b8000554098006fc36000c043900005cfb3004c +:104b900085c2630086c272004540980066004000ee +:104ba0000181fb00840078002bf007004f0478009f +:044bb00000000600fb +:020000040000fa +:104bb40080427800004aeb000000eb00efcf520087 +:104bc40042003a00843e20001460880074c1200032 +:104bd400144278000482fb00840242000281fb003c +:104be400828f520039003c008402e9008582420031 +:104bf40061c37a000683fb00858040001142900067 +:104c04004822dd000402730005c0200095427800ac +:104c1400e6cf52001400320005003e00e0cf5200ff +:104c240027003200e2cf520026003a000800370085 +:104c3400eacf520023003900ebcf520004003600c3 +:104c440006c5b30086cf52001e003a00120037009a +:104c540005002800850f520001003a0014002800c6 +:104c6400245588001700370035518000850f520005 +:104c7400020034003451800005003700260aee009b +:104c8400800f520002003d00260aee000002780068 +:104c9400145588000b00370005c02900850f520009 +:104ca40001003d000502780005402600850f5200f2 +:104cb4000100340005027800045588000100370023 +:104cc40034050700a0fb07001000200000000600c8 +:020000040000fa +:104cd400e4a92000144278006142620004003a0012 +:104ce400e4a92000144278007042620032003200cd +:104cf400d0020700c5568000c056880084a1200059 +:104d040014427800e04f520005003200082aef00f8 +:104d14000a2aef000000eb006050880032003700e0 +:104d2400465080005750800005005000cf80de00c0 +:104d34000002430081824b00445088005550880093 +:104d4400d45680000402e800d45688000040eb00ea +:104d5400f40f520024003a00da2aef006650800073 +:104d64004050800051508000a4568000b556800009 +:104d740004025000858258000603e800cfb3de0029 +:104d84000402430085824b004f2bde0006024200e2 +:104d9400e0824a008582d1000482d30064508800f6 +:104da4004450800055508000a4568800b5568800b1 +:104db40010c0b3000c003700e4a9200014427800ae +:104dc400624262000040eb00804f52000600320055 +:104dd400f00607004050880051508800eb0307009c +:0c4de400605088000040eb00000006005a +:020000040000fa +:104df000889fbe00010478008242780004c620002b +:104e0000054a7800f48f2f00051e2000950a6200e5 +:104e1000e1e1a900e1a1a900e00f500004003d007c +:104e2000e0e1a8000000ea00e0628800020037002c +:104e3000e0e1a900e0628800e4628000c0628000d6 +:104e4000cf80de00cfa2de00048bb90000a9b9003c +:104e5000060341000400b8008100430002e1200085 +:104e60000300200054ee0700f06288008416200042 +:104e700004c4b900b8628800e0c1a900e301a80039 +:104e8000e2e1a800140f80000440a1000450a0003b +:104e90000460a100140f8800140f80000490a0008b +:104ea00004a0a000140f8800e421ef008b40a900ab +:104eb000e041a800e46280000402e900340f8800a9 +:104ec00004c6200014427800e04f52000700320070 +:104ed000040f80000480a1000490a00004a0a000a2 +:104ee000040f88009b40a80005003700040f8000d5 +:104ef0000430b30004a0a000040f88009b40a90068 +:084f00004f04be000000060092 +:020000040000fa +:104f08003600f800809fbe00829fbe00849fbe00ce +:104f1800869fbe00db040700c00007003e040700b0 +:104f2800e4a9200014427800644262003000320094 +:104f38000400280035108000050262002c003200b1 +:104f4800446180000402e80044618800f40f5200c4 +:104f580027003400282cef00e0a02000d8f6070036 +:104f6800f50f400004003a0015c0b30006c5200044 +:104f7800054b780011003700e00f50000f003a0091 +:104f88007550800084508000848f520002003400e5 +:104f9800122aec0009003700755080008450800008 +:104fa800848f520005003d000002eb0094508800f9 +:104fb8008442780006c52000054b78009550800093 +:104fc80044062000848f520004003c0004c52000e1 +:104fd80014427800e04f52000200320014c720004b +:104fe8001442780015c0b30046a12000054b780094 +:104ff8008460a9004f03be004f02be004f01be00ef +:0c5008004f00be003600f900004006001a +:020000040000fa +:10501400881f7800581680005516800054168000aa +:105024004922de00614262000804d1006404640085 +:10503400c72ade00e282620005447400044474005e +:1050440002003200e74f540006003a000044eb002f +:1050540024ae2000084a7800708ca8002a050700b6 +:105064002a003700e2cabf00884f500026003200f1 +:1050740072c0b3000440bc000882fb00040041007d +:1050840024bb200064427800e24f520006003a003c +:105094000044eb0026ae2000084b780070cca8003a +:1050a4001905070019003700e14f520009003a00c2 +:1050b400e4568000cfa2de00f65680000757800039 +:1050c4000603420087834a00f65688000757880083 +:1050d4000a003700e14f420008003a00e45680001d +:1050e400cfa2de00f656800007578000040253006a +:1050f40085825b00f45688000557880027ae20009f +:10510400884b78000100370000447800084078009c +:085114004f04780000000600c2 +:020000040000fa +:10511c00881f78008a9fbe000004a8008082fb00d4 +:10512c0005834200060343000744200007034300a5 +:10513c008683e800e0cf50000800320063846100f1 +:10514c0068044400421dde000b002000c550dd0049 +:10515c00010b4400820b7800030037004511dd0081 +:10516c00020b7800800beb008741200006422000e8 +:10517c00e34f50000f003600e44050002642200060 +:10518c00e3cf50000b003600e8405000a741200050 +:10519c0046422000e3cf5000060036006c40500021 +:1051ac0066422000e34f5000020036008003eb0003 +:1051bc0007037800638062004200dd00f1002000ec +:1051cc000008dd008080ea0096806000008b700093 +:1051dc00e24f520009003e00678362000603430061 +:1051ec00300020000600dd000080ea00170060009f +:1051fc000482fb000623dd00860b700010002000eb +:10520c000500dd001424b7000004a9004f05be0002 +:08521c004f04780000000600b9 +:020000040000fa +:10522400846180009561800061024200e0824a004e +:1052340084618800956188006461800075618000e4 +:1052440061034200e0834a00666188007761880058 +:1052540034508000e00f520003003200e10f42009e +:1052640006003a00030037001400200014508800a0 +:1052740010003700022aef000e003700345080007f +:1052840005002000840f5300858f5b000900350062 +:105294002c2cef002e2cef0004a020009402900090 +:1052a40005f0a7008502ea008502e900cf2ade00a6 +:1052b4001502980024508000e00f520003003200d1 +:1052c400e10f420006003a000300370014002000fa +:1052d4000450880012003700002aef001000370045 +:1052e40026508000070020008461800095618000c2 +:1052f400840f5300858f5b0009003c00302cef00c5 +:10530400322cef0004a020009402780005f0a700de +:105314008502ea008502e900cf2ade00050a78004a +:04532400000006007f +:020000040000fa +:105328000a00fa00889fbe008a9fbe000004be00e3 +:1053380082407800030078000042eb00e4f79f0009 +:105348000a702000080565000b002000485add009f +:105358004855de000a057200c85dde00e14f5500c1 +:105368000800320003003900e74f550011003a00e9 +:105378000c003700ea8157007281570040f207009d +:105388000d003700ef4264006a825700f28157002f +:1053980001417800800078000540780003fe07008e +:1053a80005003700ea81570072815700560207004e +:1053b800010037000000eb00e00f50000f00320042 +:1053c800eff09700e0cf50000c0032006705650051 +:1053d8004855dd0074c12000144278000482fb00a7 +:1053e8004422dd000a057200080fb2004440de00c6 +:1053f8000000750072815700400507004f05be0088 +:0c5408004f04be000080fa000000060007 +:020000040000fa +:1054140010018000801f780020018000801f780028 +:1054240030018000801f780000378200700ab500c8 +:1054340080027800745380001301c0000400cd0082 +:105444001454880010378200740ab50000037800f1 +:10545400b75380001301c6000400cd003454880003 +:105464004f007800300188004f0078002001880048 +:105474004f00780010018800000006001001800031 +:10548400801f780020018000801f78003001800098 +:10549400801f780000378200700ab500800278000f +:1054a400745380001301c0000400cd00145488001c +:1054b40010378200740ab50080027800945380008b +:1054c4001301c0000400cd00245488004f0078006c +:1054d400300188004f007800200188004f007800d8 +:0854e400100188000000060021 +:020000040000fa +:1054ec00042080000480a0000490a10004a0a1006e +:1054fc0004208800060e20000502200007208000f2 +:10550c0007026300850f5200fcff3a00f48f2f0056 +:10551c0005402000950a6200050e20000620800040 +:10552c0006826200fdff3a0030e4a80031e4a800d6 +:10553c0032e4a80033e4a80034e4a90035e4a9005f +:10554c0036e4a90037e4a900c4ff2f00074320006c +:10555c00970b6200f4cf2f0005432000950a6200e0 +:10556c00c4ff2f0026432000160b6200f4cf2f003f +:10557c0027432000970b620004fe2f00352080008b +:10558c00050262000420a000342088003420800032 +:10559c0004d0a10004e0a00004f0a1003420880095 +:1055ac000ca4a8009860a8009700a8002c04070081 +:0855bc0038040700000006009e +:020000040000fa +:1055c400889fbe008a9fbe000004a800000340001c +:1055d400060343000744200007044300c283de009f +:1055e4008783430006422000868343004383de0012 +:1055f400060343008941200009034300e18f500062 +:1056040008003a00e3846100e8844400429dde001f +:10561400cfd5de00c550dd00018c44001204980093 +:10562400050037004511dd00020c7800f27f2000f0 +:105634000300200013049800e3006000c208dd00aa +:10564400f20020000111dd000281ea00170161006f +:105654000122dd00840b7100670260000402420035 +:1056640037002000843bdd008783ea0096836300d3 +:10567400042add00048b7300140020000020dd00e8 +:105684001424b7000004a9004f05be004f04be0057 +:04569400000006000c +:020000040000fa +:105698003600f800809fbe00829fbe00849fbe0037 +:1056a800869fbe00881f78008860a9000004a800b3 +:1056b800040022005520800005026200020032002a +:1056c80014002000245f8800040021005520800079 +:1056d800050262000004eb00880f5200030032004c +:1056e800714ca800730ca80018002000048020004a +:1056f800552080000502620002003200716ca8008b +:10570800732ca800041020005520800005026200b8 +:1057180003003200736ca800718ca80071aca8005b +:10572800f4002000542088000004a900245f8000b1 +:10573800e10f520001003a0072030700e00f540025 +:10574800010032006f0307004f0478004f03be00ca +:105758004f02be004f01be004f00be003600f900e8 +:0457680000400600f7 +:020000040000fa +:10576c000002eb0004198800141988002419880021 +:10577c002143a90047c0b30046322000074b7800f4 +:10578c00151980000580a1000590a000151988004e +:10579c002063a8002043a800051980000506b3006b +:1057ac000570a10005198800051980000530b300ab +:1057bc000519880035fc2f0026322000168b62005c +:1057cc00941988002343a90044198800fd824200e3 +:1057dc0047198000878262003500b30045198800a4 +:1057ec002603a900041c8800041c80000440a100ae +:1057fc000450a000041c8800c4ff2f0005382000b2 +:10580c00950a620081c3a90004302000441c880062 +:10581c0034002000541c8800d4002000141c880084 +:0c582c00046e2000241c88000000060010 +:020000040000fa +:10583800240f800005c6200095427800e0cf520072 +:105848002400320015c6200095427800e0cf5200af +:105858002000320005002100010f800081826200d3 +:105868000a00320025638000f6628000868f5200ad +:1058780017003400e762800006835300868f5200c9 +:1058880013003d00620ca80011003700f00f420021 +:1058980004003500e5628000f0824200850f520066 +:1058a8000b003400624ca800e00f520002003d00db +:1058b800e562800005024200e5628000850f520023 +:1058c80002003500e562800005025200240f8800be +:1058d80024638800e56280006120b900c003dd0010 +:1058e8000600200011000900453bd8000000060012 +:020000040000fa +:1058f800881f7800004478000043eb000882fb0012 +:105908000500200086407800f2ff200003002000f8 +:10591800064078006e0207000043eb00f400200008 +:105928000500200011c0b300f2ff20000300200092 +:1059380006407800660207000884fb000470200017 +:10594800080272000043eb00cfa2de0021c0b300c2 +:10595800f2ff200003002000064078005c020700e8 +:105968000043eb00f47020000500200031c0b300b4 +:10597800f2ff2000030020000640780054020700d0 +:105988000043eb00f41020000500200041c0b300e4 +:10599800f2ff200003002000064078004c020700b8 +:0859a8004f0478000000060026 +:020000040000fa +:1059b000889fbe000004a8000000400000004000d6 +:1059c0000543200005004000e10f520012003a009c +:1059d0006112b800638361006134b8004299de004f +:1059e000cf91de00f67f200002016300030020005b +:1059f000e18f500004003a00680444004511dd00c6 +:105a000002084400020037004511dd00080841008b +:105a1000140098000c003700f47f2000020162009f +:105a200003002000e18f500003003a004511dd0023 +:105a300068084100020037004511dd0002087800c7 +:105a40000002eb00140098000004a9004f04be00ff +:045a5000000006004c +:020000040000fa +:105a540005002700143a80008482620004002300b9 +:105a6400848f520020003200e4012000343a880080 +:105a7400f4f32f0045742000950a620004fe2f0001 +:105a840046742000160b6200a50920003600200091 +:105a94008407200037742000844b7800854b7800fd +:105aa400864b780075052000160020006404200051 +:105ab40027742000844b7800854b7800864b78004f +:105ac4000600270005002300173a80000702630040 +:105ad400850f5200fcff3a0005022000163a8000b0 +:0c5ae40006826200fdff32000000060098 +:020000040000fa +:105af000365580003455800006a3b900105180004f +:105b000021518000f45080000551800000035300b3 +:105b100081835b004638dd004a33de0006037000f7 +:105b2000cabbde000600420087804a00f0508800b1 +:105b300001518800f450800005518000e00f5200b0 +:105b4000e08f5a0002003d001e2aef00202aef00dd +:105b5000f650800007518000d4508000e55080004e +:105b6000840f5300858f5b0002003400722ca80064 +:085b70006602070000000600b8 +:020000040000fa +:105b7800889fbe000004be000200780058638800b9 +:105b880069638800dc020700370307000002eb00a6 +:105b9800a40e8800c1e1a90075c62000844a7800d7 +:105ba80016c0b30067c72000864b78000804e900d8 +:105bb800280e880075072000450e8800690e8800a9 +:105bc800740e8800840e880025002000050e8800c9 +:105bd800340e8800c7e1a80004002800671c2000d4 +:105be800970b6200f40f2f00a51c2000950a620095 +:085bf8004f04be00000006008e +:020000040000fa +:105c00003600f800809fbe00829fbe00849fbe00c9 +:105c1000869fbe003a2aef003c2aef000002eb000c +:105c20003455880044558800e4a9200014427800c7 +:105c30006442620007003a00546180000402e800f8 +:105c400054618800f30f5200020034002a2cef0048 +:105c5000a7ff0700e4a92000144278006242620016 +:105c600001003200ebfc07001afc07008500a900c8 +:105c70004f03be004f02be004f01be004f00be00ea +:085c80003600f90000400600a7 +:020000040000fa +:105c8800889fbe008a9fbe000004eb00281688008b +:105c98008084eb0009168800681688004916880079 +:105ca80050030700f4fb2f00153a8000050262003c +:105cb8006b0420007a052000257420008b4a7800a8 +:105cc8008a4a7800844a780069198800aa0207007d +:105cd800fe0207002603070057010700143a800058 +:105ce8000460a000257420008b4a78008a4a780056 +:105cf800844a780008038800180388004f05be000e +:085d08004f04be00000006007c +:020000040000fa +:105d1000104278008049eb00e14f42000f003a004a +:105d20000000eb00e1cf500018003a0054c0b3006f +:105d30008449780000c9eb0084c0b3001441980086 +:105d400034c0b3002441980034419800b4c1b3007a +:105d500044419800100020000c003700e04f520032 +:105d600003003a000000fe0010002000070037008a +:105d700010002000ec4f520004003200d4c0b200ea +:105d80000480fb000000e9004f00de000000060078 +:020000040000fa +:105d9000345780000402e80034578800f40f5200a2 +:105da00017003a00e62aef00415b8000f4568000bd +:105db0000557800086ae2000c20bdd00870343003c +:105dc000848bbe008100e80007022000110009005a +:105dd0008700d800415b8800c208dd000103430052 +:105de00036005200a6805a000002be00cb28dd001b +:105df0004522de0004827000c5aade002457880018 +:085e000020578000000006009d +:020000040000fa +:105e0800889fbe008a9fbe006a0007008004eb00de +:105e18000afa20000b002000087122000a00be00c8 +:105e2800f50107008904e800888f5400fbff3a0059 +:105e380028508000c4f80700e10f400003003a0032 +:105e4800720ca800042aef00ffff3700e20f4000a1 +:105e580003003a00720ca800042aef00f5ff37008f +:105e6800285088004f05be004f04be000000060001 +:020000040000fa +:105e780006c72000164378000683fb0017c72000da +:105e880097437800c83bdd000702730027c720004e +:105e9800974378008783fb0036c7200016437800b5 +:105ea8004833dd0006837300040078000000a10079 +:105eb80007002000c032dd00040020006103b800a4 +:105ec800060272008782720010002000e00f520064 +:105ed800e08f5a0001003a0070638000000006005d +:020000040000fa +:105ee8003600f800809fbe00829fbe00849fbe00df +:105ef800869fbe00d421ef00c1e1a90016c0b300ff +:105f080065c62000864a780064c7200014427800dd +:105f1800e04f52000400320075c62000864a78001f +:105f2800766cef0003003700676cef00706ca80018 +:105f3800740107008be0a9004f03be004f02be00aa +:105f48004f01be004f00be003600f90000400600b9 +:020000040000fa +:105f580050518800315188006102b90004abb90082 +:105f6800060343000422b800850243001451880048 +:105f780025518800610ab900105180002151800024 +:105f880004abb900060343000422b80085024300ad +:105f98000002520081825a006a2bb9006a22b800b6 +:105fa80085024300d4508800e5508800425188009b +:045fb80000000600df +:020000040000fa +:105fbc000002eb00041988001419880024198800c9 +:105fcc0047c0b30046322000074b7800f5cf2f00b6 +:105fdc0026322000168b62002063a9002043a80003 +:105fec00f5f12f0007322000978b62000519800015 +:105ffc000530b3000519880035fc2f00263220002f +:10600c00168b6200941988002343a9004419880058 +:04601c00000006007a +:020000040000fa +:1060200044c3200014427800e04f520009003200bf +:1060300004508000e00f520003003200c082a9002b +:10604000c282a90001003700c082a800346cef00b2 +:106050000a00370014508000e00f520003003200a5 +:10606000c082a900c282a80001003700c082a80037 +:1060700016c0b30045c32000864a78000000060021 +:020000040000fa +:10608000c902a90004fe2f00856c2000950a620059 +:10609000c922a900f40f2e00856c2000950a620029 +:1060a000cf02a800cf22a800440c200024108800b2 +:1060b00007e2a9000722a8000742a9000782a8005a +:1060c00007e2a8009620a9008620a90080382100b8 +:1060d000010020004a01070080f7070000000600c9 +:020000040000fa +:1060e000889fbe000004a8004200dd00c03fb2004f +:1060f00004432000040040000082e800e0cf50008c +:10610000080032006383610068034300421cde0024 +:1061100009002000c542dd0005084300020a78009e +:10612000030037004511dd0068084100000aeb005c +:0c6130000004a9004f04be00000006009f +:020000040000fa +:10613c000164a80084208000040cb3008420880033 +:10614c0004fc2f0005412000950a62009420800079 +:10615c008403b3009420880012e4a80094208000eb +:10616c000480a0000490a10004a0a000942088004a +:10617c00c4ff2f0095208000050262000420a000bf +:0c618c009420880012c4a8000000060047 +:020000040000fa +:106198000002eb0004558800145588002455880037 +:1061a8006033b800b6518800c7518800765188001e +:1061b8008751880096518800a7518800d6518800d9 +:1061c800e7518800f451880004528800165288006c +:1061d800275288003452880044528800545288005c +:0461e80000000600ad +:020000040000fa +:1061ec000002eb007463880004aaef0005c72000ce +:1061fc00954278000443780005c72000864a780051 +:10620c0015c720009542780015c72000864a7800f3 +:10621c0025c720009542780025c72000864a7800c3 +:10622c0035c720009542780035c72000864a780093 +:04623c000000060058 +:020000040000fa +:1062400004fe2f00e6348000860262005500b30091 +:10625000e5348800f60f2e00e53480000503630066 +:106260000560200086827200e5348800f6348000e4 +:10627000060262007400b300f434880064198000e0 +:0c628000040eb300641988000000060042 +:020000040000fa +:10628c000004a800040021005520800005026200d3 +:10629c0001003a00714ca9000480200055208000b8 +:1062ac000502620001003a00716ca9000410200084 +:1062bc00552080000502620002003a00718ca90092 +:0c62cc0071aca9000004a900000006004d +:020000040000fa +:1062d800889fbe008a9fbe008c1f7800004578000a +:1062e800014678000404be00864578008b4078009b +:1062f8000a40780078ff07000a4278008b4078004f +:106308000801be000c40780082fb07004f067800a9 +:0c6318004f05be004f04be000000060050 +:020000040000fa +:10632400a4628000e5628000b0628000260f8000d5 +:1063340000b3b90011000900453bd8000400400037 +:1063440074162000840f5000030034008016b1003e +:10635400840f5000fdff3c00e00f500002003d00a0 +:0c6364008016b000feff330000000600b1 +:020000040000fa +:106370009052880024002000110009008400d800f9 +:10638000a052880064a52000024a78000201fb00a8 +:1063900004322000050020000201e9000300330060 +:1063a0000402420085824a00fbff3700c452880085 +:0863b000d55288000000060030 +:020000040000fa +:1063b8002060880024002000110009008400d80013 +:1063c8003060880084c02000024a78000201fb0087 +:1063d80004322000050020000201e9000300330018 +:1063e8000402420085824a00fbff3700e45288001d +:0863f800f552880000000600c8 +:020000040000fa +:10640000a46380000402e800000042000000d10004 +:10641000a063880034062000840f500003003e0073 +:10642000702ca800390007000500370084252000e3 +:10643000840f500002003600704ca80033000700a3 +:046440000000060052 +:020000040000fa +:10644400881f7800004478000842e900ed4f5200ac +:1064540001003600a8c0b3000840780068010700b6 +:1064640008407800640107004099220005000700f5 +:10647400084078001ffd07001bfc07004f0478004c +:04648400000006000e +:020000040000fa +:10648800305f8800f4cf2f000520800005026200ed +:1064980004a0a00004208800060e200005082000a3 +:1064a8000720800007026300850f5200fcff3a00b6 +:1064b80020ff0700f4002000542088000004a900f1 +:0464c80000000600ca +:020000040000fa +:1064cc0074638000e00f52000c00320014002000b6 +:1064dc0074638800dc0007001201070004a0200090 +:1064ec00e5012000250298008082eb00350298001f +:1064fc0006cab30005c02000864a780000000600da +:020000040000fa +:10650c0074638000e00f52000c003a00140020006d +:10651c0074638800cc0007000201070004a020006f +:10652c00e5012000250298008082eb0035029800de +:10653c0006cab30005c02000864a78000000060099 +:020000040000fa +:10654c003600f800809fbe00829fbe00849fbe0074 +:10655c00869fbe008660a900c262ab0002003200ba +:10656c00700ca800b80007004f03be004f02be001d +:10657c004f01be004f00be003600f900004006007f +:020000040000fa +:10658c00c902a90004fe2f00856c2000950a620048 +:10659c00c862a900f50f2e001636800086826200b4 +:1065ac0005b0a00015368800453580000502620054 +:0c65bc009400b300443588000000060085 +:020000040000fa +:1065c800e00f51000b0032004802dd004800de00f9 +:1065d800314378008682fb00050068000000400017 +:1065e8000580200065007800040068000201e900c9 +:0865f800f5ff3a000000060067 +:020000040000fa +:10660000f03fb1000180b10006003500ee03090043 +:1066100000000000403fb1000180b100fbff3d00e1 +:106620001000b000203fb0000200350000800900db +:0866300000000000000006005c +:020000040000fa +:106638004580a90044a0a80044e0a8004480a80020 +:106648004440a9004420a8004400a900f4ff270002 +:10665800745388000500280095538800b4538800b7 +:046668000000060028 +:020000040000fa +:10666c00e023ef0004022200641c88002444200074 +:10667c00a41c880074002000b41c88006404200052 +:10668c00741c880004702000841c88008de3a80012 +:04669c0000000600f4 +:020000040000fa +:1066a000e023ef0004022000c41c88000444200002 +:1066b000041d880074002000141d88007b02420025 +:1066c000d41c880004782000e41c880099e3a8000a +:0466d00000000600c0 +:020000040000fa +:1066d40002322000a1002000803e200025fd07009a +:1066e400c8fd070020fc0700d2ff0700786aef000e +:0c66f400a8fe0700aa0007000000060036 +:020000040000fa +:1067000080027800566380006933b900a40020003d +:10671000110009000403d80000027800850f520020 +:0c67200001003400456388000000060002 +:020000040000fa +:10672c00849fbe00861f78009b40a90016c0b30052 +:10673c0015c62000864a78008b40a9009b40a80013 +:0c674c004f0378004f02be000040060022 +:020000040000fa +:106758000002eb00a40e8800c1e1a9000443780000 +:1067680075c62000864a780016c0b30065c72000a9 +:08677800864a780000000600cb +:020000040000fa +:1067800004fe2f0026368000860262000540a0002d +:1067900025368800a5358000050262000410a0009f +:0867a000a4358800000006008a +:020000040000fa +:1067a800881f78000044780079fe07002c2aec0046 +:1067b8008842780014c02000054a78004f04780009 +:0467c80000000600c7 +:020000040000fa +:1067cc0016c0b300a5aa2000864a780082000700f4 +:1067dc00240007000c0007007200070032f70700c6 +:0467ec0000000600a3 +:020000040000fa +:1067f00024628000e10f52000400340014382000ad +:1068000010084200442cef0001003700442cec003b +:04681000000006007e +:020000040000fa +:106814008480a9009480a8002023a8002003a90054 +:1068240085a0a90081e3a80021e3a80000000600d8 +:020000040000fa +:1068340014002800040040004300de006500b90095 +:1068440094032000110009000480d8000000060011 +:020000040000fa +:10685400c0ff0700050007004200070033000700df +:0c6864004cfe0700aa6aef0000000600ce +:020000040000fa +:106870006a0cf800da01f900da01f800d801f90031 +:0c688000d801f800d601f9000000060065 +:020000040000fa +:10688c000000eb0037e7070081bb200090fa2f00d7 +:08689c0027e7070000000600d9 +:020000040000fa +:1068a4000000eb0033e70700017d2000d0f82f0043 +:0868b40025e7070000000600c3 +:020000040000fa +:1068bc000000eb002fe70700d1072000d0fa2f00d3 +:0868cc0023e7070000000600ad +:020000040000fa +:1068d40004fe2f00c5348000050262000400a000fd +:0868e400c43488000000060026 +:020000040000fa +:1068ec000142780082017800010020000441780008 +:0868fc00a3f3070000000600f1 +:020000040000fa +:1069040001427800820178000100200004417800ef +:086914009df3070000000600de +:020000040000fa +:10691c00e4152000a4638800704ca900702ca90019 +:04692c000000060061 +:020000040000fa +:106930000000eb0010e707008500a9009500a80003 +:04694000000006004d +:020000040000fa +:10694400010020008001eb00034178008ef3070072 +:046954000000060039 +:020000040000fa +:106958000000eb000ae707008780a9000000060096 +:020000040000fa +:1069680081e3a90021e3a9009480a90000000600a2 +:020000040000fa +:106978002c03a9002c23a9002c43a9000000060021 +:020000040000fa +:1069880000002800e001b6004f00de00000006000d +:020000040000fa +:0c699800f056800001578000000006004f +:020000040000fa +:0c69a40063a0a8008660a90000000600a7 +:020000040000fa +:0c69b0008be0a9009be0a800000006009e +:020000040000fa +:0869bc00805088000000060075 +:020000040000fa +:0869c400daff070000000600e5 +:020000040000fa +:0869cc000500070000000600b1 +:020000040000fa +:0869d4002037820000000600dc +:020000040000fa +:0869dc00e056880000000600ef +:020000040000fa +:0869e4009500a9000000060067 +:020000040000fa +:0869ec00c082a90000000600b2 +:020000040000fa +:0869f400a2fd070000000600ef +:020000040000fa +:0869fc0017ecb70000000600d3 +:020000040000fa +:086a040036ecb70000000600ab +:020000040000fa +:086a0c0036ecb70000000600a3 +:020000040000fa +:086a140085c0a9000040060046 +:020000040000fa +:086a1c00200f800000000600bd +:020000040000fa +:086a2400e1e1a90000000600f9 +:020000040000fa +:086a2c008020a900ffff3700e4 +:020000040000fa +:086a34008060a900ffff37009c +:020000040000fa +:086a3c008040a900ffff3700b4 +:020000040000fa +:086a44008080a900ffff37006c +:020000040000fa +:086a4c008020a900ffff3700c4 +:020000040000fa +:086a54008060a900ffff37007c +:020000040000fa +:086a5c008040a900ffff370094 +:020000040000fa +:086a64008080a900ffff37004c +:020000040000fa +:086a6c000040da000000fe000a +:020000040000fa +:046a740000400600d8 +:020000040000fa +:046a78000000060014 +:020000040000fa +:046a7c000000060010 +:020000040000fa +:0200000401f009 +:04000000ffff0000fe +:020000040000fa +:0200000401f009 +:04000400ffff0000fa +:020000040000fa +:0200000401f009 +:04000800ffff0000f6 +:020000040000fa +:0200000401f009 +:04000c0078ff000079 +:020000040000fa +:0200000401f009 +:0400100078ff000075 +:020000040000fa +:0200000401f009 +:040014007fff00006a +:020000040000fa +:0200000401f009 +:04001800ffff0000e6 +:020000040000fa +:0200000401f009 +:04001c00ddff000004 +:00000001FF diff --git a/info/firmware.info.xml b/info/firmware.info.xml index 88ab0cda5..cb9d7159a 100644 --- a/info/firmware.info.xml +++ b/info/firmware.info.xml @@ -120,6 +120,13 @@ + + + ../CAN/2foc/2foc-special.hex + + + + ../CAN/2foc/2foc.r1.dc.hex diff --git a/scripts/FirmwareUpdater.script.info.all.sh b/scripts/FirmwareUpdater.script.info.all.sh index 2246850a5..96692c96a 100755 --- a/scripts/FirmwareUpdater.script.info.all.sh +++ b/scripts/FirmwareUpdater.script.info.all.sh @@ -10,7 +10,9 @@ echo "" echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a info | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.info.all.txt" echo "" -./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a info | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.info.all.txt +# ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a info | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.info.all.txt +./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml | grep ^\".*$ | sed 's/"//g'` -f ../info/firmware.info.xml -p all -a info | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.info.all.txt + echo "" echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a info | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.info.all.txt" echo "" diff --git a/scripts/FirmwareUpdater.script.program.all.sh b/scripts/FirmwareUpdater.script.program.all.sh index 10a08b4c7..90b27b99f 100755 --- a/scripts/FirmwareUpdater.script.program.all.sh +++ b/scripts/FirmwareUpdater.script.program.all.sh @@ -10,7 +10,7 @@ echo "" echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a program | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.program.all.txt" echo "" -./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a program | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.program.all.txt +./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml | grep ^\".*$ | sed 's/"//g'` -f ../info/firmware.info.xml -p all -a program | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.program.all.txt echo "" echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a program | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.program.all.txt" echo "" diff --git a/scripts/FirmwareUpdater.script.update.all.foc-special.sh b/scripts/FirmwareUpdater.script.update.all.foc-special.sh new file mode 100644 index 000000000..ba4c11406 --- /dev/null +++ b/scripts/FirmwareUpdater.script.update.all.foc-special.sh @@ -0,0 +1,21 @@ + +#!/bin/bash + + +# this script which uses FirmwareUpdater by means of the python program manageFWrobot.py + +echo "" +echo "" +echo "" +echo "This script is about to install the 2foc-special.hex FW binary with the HW FAULT on overheating disabled on all 2FOC boards of $YARP_ROBOT_NAME" +read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1 + +echo "Starting the 2FOC update with 2foc-special.hex..." + + +echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc-special.xml` -f ../info/firmware.info.xml -p all -b foc-special -a update | tee ../logs/log.of.FirmwareUpdater.ergocub-2foc-special.update.all.foc-special.txt" +echo "" +./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc-special.xml | grep ^\".*$ | sed 's/"//g'` -f ../info/firmware.info.xml -p all -b foc-special -a update | tee ../logs/log.of.FirmwareUpdater.ergocub-2foc-special.update.all.foc-special.txt +echo "" +echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc-special.xml` -f ../info/firmware.info.xml -p all -b foc-special -a update | tee ../logs/log.of.FirmwareUpdater.ergocub-2foc-special.update.all.foc-special.txt" +echo "" diff --git a/scripts/FirmwareUpdater.script.update.all.foc.sh b/scripts/FirmwareUpdater.script.update.all.foc.sh index 4c914d794..ecd7490a8 100644 --- a/scripts/FirmwareUpdater.script.update.all.foc.sh +++ b/scripts/FirmwareUpdater.script.update.all.foc.sh @@ -7,10 +7,14 @@ echo "" echo "" echo "" +echo "This script is about to install the standard 2foc.hex FW binary on all 2FOC boards of $YARP_ROBOT_NAME" +read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1 -echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.update.all.foc.txt" +echo "Starting the 2FOC update with 2foc.hex..." + +echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc.xml` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater.ergocub-2foc..update.all.foc.txt" echo "" -./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.update.all.foc.txt +./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc.xml | grep ^\".*$ | sed 's/"//g'` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater..ergocub-2foc.update.all.foc.txt echo "" -echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.update.all.foc.txt" +echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.2foc.xml` -f ../info/firmware.info.xml -p all -b foc -a update | tee ../logs/log.of.FirmwareUpdater..ergocub-2foc.update.all.foc.txt" echo "" diff --git a/scripts/FirmwareUpdater.script.verify.all.sh b/scripts/FirmwareUpdater.script.verify.all.sh index afeee9d20..fa3b3b13b 100755 --- a/scripts/FirmwareUpdater.script.verify.all.sh +++ b/scripts/FirmwareUpdater.script.verify.all.sh @@ -10,7 +10,7 @@ echo "" echo "this bash is executing: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a verify | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.verify.all.txt" echo "" -./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a verify | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.verify.all.txt +./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml | grep ^\".*$ | sed 's/"//g'` -f ../info/firmware.info.xml -p all -a verify | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.verify.all.txt echo "" echo "this bash has executed: ./manageFWrobot.py -n `yarp resource --from network.$YARP_ROBOT_NAME.xml` -f ../info/firmware.info.xml -p all -a verify | tee ../logs/log.of.FirmwareUpdater.$YARP_ROBOT_NAME.verify.all.txt" echo "" diff --git a/scripts/firmwareupdater.ini b/scripts/firmwareupdater.ini new file mode 100644 index 000000000..9fb67c5a4 --- /dev/null +++ b/scripts/firmwareupdater.ini @@ -0,0 +1,7 @@ +[DRIVERS] +CFW2_CAN "0" +CFW2_CAN "1" +ESD_CAN "5" +ESD_CAN "6" +SOCKETCAN "can0" +ETH "10.0.1.104:3333" diff --git a/scripts/manageFWrobot.py b/scripts/manageFWrobot.py index 49b3fe504..d5e142928 100755 --- a/scripts/manageFWrobot.py +++ b/scripts/manageFWrobot.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # Copyright (C) 2018 iCub Facility - Istituto Italiano di Tecnologia @@ -79,16 +79,16 @@ def get_board_properties2(boardroot, brd): if brd.get('required', '') == 'version': findAlsoByVersion = True if None == brd.find('version'): - print pyprefix + errorprefix + 'syntax error in the xml robot network: cannot find tag as indicated by ' - print pyprefix + errorprefix + 'i will not consider this board. please rewrite the xml file.' + print (pyprefix + errorprefix + 'syntax error in the xml robot network: cannot find tag as indicated by ' ) + print (pyprefix + errorprefix + 'i will not consider this board. please rewrite the xml file.') return prop targetversion = brd.find('version').attrib tmajor = targetversion.get('major', '0') tminor = targetversion.get('minor', '0') tbuild = targetversion.get('build', '0') elif brd.get('required', '') != '': - print pyprefix + errorprefix + 'syntax error in the xml robot network: is not allowed. if required is present, it can be only: ="version"' - print pyprefix + errorprefix + 'i will not consider this board. please rewrite the xml file.' + print (pyprefix + errorprefix + 'syntax error in the xml robot network: is not allowed. if required is present, it can be only: ="version"') + print (pyprefix + errorprefix + 'i will not consider this board. please rewrite the xml file.') return prop for p in boardroot.findall('board'): @@ -162,8 +162,8 @@ def eth_force_maintenance(brd, prp): command = 'FirmwareUpdater --nogui --force-eth-maintenance --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip') + ' --verbosity ' + str(_verbosityFU) if _verbose > 1: - print pyprefix + debugprefix + 'eth_force_maintenance(): sending eth board in maintenance mode w/ command:' - print pyprefix + debugprefix+ command + print (pyprefix + debugprefix + 'eth_force_maintenance(): sending eth board in maintenance mode w/ command:') + print (pyprefix + debugprefix+ command) if 1 == _debugmode: r = 0 @@ -173,7 +173,7 @@ def eth_force_maintenance(brd, prp): r = r / 256 if 0 != r: - print pyprefix + errorprefix + 'eth_force_maintenance(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip') + print (pyprefix + errorprefix + 'eth_force_maintenance(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip')) return r return r @@ -189,8 +189,8 @@ def eth_force_application(brd, prp): command = 'FirmwareUpdater --nogui --force-eth-application --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip') + ' --verbosity ' + str(_verbosityFU) if _verbose > 1: - print pyprefix + debugprefix + 'eth_force_application(): sending eth board in application mode w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'eth_force_application(): sending eth board in application mode w/ command:') + print (pyprefix + debugprefix + command) if 1 == _debugmode: r = 0 @@ -200,7 +200,7 @@ def eth_force_application(brd, prp): r = r / 256 if 0 != r: - print pyprefix + errorprefix + 'eth_force_application(): FAILURE sending in application mode eth board @ ' + adr.get('ip') + print (pyprefix + errorprefix + 'eth_force_application(): FAILURE sending in application mode eth board @ ' + adr.get('ip')) return r return r @@ -218,13 +218,13 @@ def goto_maintenance(brd, prp): elif 0 != adr.get('canadr', 0): r = eth_force_maintenance(brd, prp) else: - print pyprefix + errorprefix + 'goto_maintenance(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'goto_maintenance(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 1 elif 'CFW' == ondevice: - print pyprefix + ' [info]: boards on device ' + ondevice + ' dont need to be forced in maintenance mode!' + print (pyprefix + ' [info]: boards on device ' + ondevice + ' dont need to be forced in maintenance mode!' ) r = 0 else: - print pyprefix + errorprefix + 'goto_maintenance(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'goto_maintenance(): FAILURE the device ' + ondevice + ' is unsupported') r = 1 return r @@ -242,13 +242,13 @@ def goto_application(brd, prp): elif 0 != adr.get('canadr', 0): r = eth_force_application(brd, prp) else: - print pyprefix + errorprefix + 'goto_application(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'goto_application(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 1 elif 'CFW' == ondevice: - print pyprefix + ' [info]: boards on device ' + ondevice + ' dont need to be forced in application mode!' + print (pyprefix + ' [info]: boards on device ' + ondevice + ' dont need to be forced in application mode!' ) r = 0 else: - print pyprefix + errorprefix + 'goto_application(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'goto_application(): FAILURE the device ' + ondevice + ' is unsupported') r = 1 return r @@ -261,7 +261,7 @@ def do_firmware_verify_cfw(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_cfw(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_cfw(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) stringOfCANfwversion = from_firmware_to_stringofversion(fw) tmp1 = 'FirmwareUpdater --nogui --verify ' + stringOfCANfwversion + ' --device CFW2 --id ' + adr.get('canbus', '0') @@ -269,8 +269,8 @@ def do_firmware_verify_cfw(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_cfw(): verifying can firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_verify_cfw(): verifying can firmware w/ command:') + print (pyprefix + debugprefix + command ) if 1 == _debugmode: r = 0 @@ -283,14 +283,14 @@ def do_firmware_verify_cfw(brd, prp): r = 0 elif 1 == r: if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_cfw(): TODO update FW of can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_cfw(): TODO update FW of can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r else: - print pyprefix + errorprefix + 'do_firmware_verify_cfw(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_verify_cfw(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_cfw(): FW is OK!' + print (pyprefix + debugprefix + 'do_firmware_verify_cfw(): FW is OK!') return r # end of: def @@ -304,12 +304,12 @@ def do_firmware_verify_canovereth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_canovereth(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_canovereth(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) r = eth_force_maintenance(brd, prp) if 0 != r: - print pyprefix + errorprefix + 'do_firmware_verify_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_verify_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) return r stringOfCANfwversion = from_firmware_to_stringofversion(fw) @@ -318,8 +318,8 @@ def do_firmware_verify_canovereth(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_canovereth(): verifying can firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_verify_canovereth(): verifying can firmware w/ command:') + print (pyprefix + debugprefix + command ) if 1 == _debugmode: @@ -333,14 +333,14 @@ def do_firmware_verify_canovereth(brd, prp): r = 0 elif 1 == r: if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_canovereth(): TODO update FW of can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_canovereth(): TODO update FW of can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r else: - print pyprefix + errorprefix + 'do_firmware_verify_canovereth(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_verify_canovereth(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_canovereth(): FW is OK!' + print (pyprefix + debugprefix + 'do_firmware_verify_canovereth(): FW is OK!') return r # end of: def @@ -353,20 +353,20 @@ def do_firmware_verify_eth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_eth(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_eth(): performing fw verify on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) # r = eth_force_maintenance(brd, prp) # # if 0 != r: -# print pyprefix + errorprefix + 'do_firmware_verify_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') +# print (pyprefix + errorprefix + 'do_firmware_verify_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) # return r stringOfETHfwversion = from_firmware_to_stringofversionETH(fw) command = 'FirmwareUpdater --nogui --verify ' + stringOfETHfwversion + ' --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip', '0') + ' --verbosity ' + str(_verbosityFU) if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_eth(): verifying eth firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_verify_eth(): verifying eth firmware w/ command:' ) + print (pyprefix + debugprefix + command ) if 1 == _debugmode: r = 0 @@ -379,14 +379,14 @@ def do_firmware_verify_eth(brd, prp): r = 0 elif 1 == r: if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_eth(): TODO update FW of eth board @ ' + adr.get('ip', '0') + print (pyprefix + debugprefix + 'do_firmware_verify_eth(): TODO update FW of eth board @ ' + adr.get('ip', '0')) return r else: - print pyprefix + errorprefix + 'do_firmware_verify_eth(): ERROR cannot find eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_verify_eth(): ERROR cannot find eth board @ ' + adr.get('ip', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_verify_eth(): FW is the latest one!' + print (pyprefix + debugprefix + 'do_firmware_verify_eth(): FW is the latest one!') return r # end of: def @@ -404,12 +404,12 @@ def do_firmware_verify(brd, prp): elif 0 != adr.get('canadr', 0): r = do_firmware_verify_canovereth(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_verify(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_verify(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 2 elif 'CFW' == ondevice: r = do_firmware_verify_cfw(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_verify(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_verify(): FAILURE the device ' + ondevice + ' is unsupported') r = 2 return r @@ -423,7 +423,7 @@ def do_firmware_query_cfw(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_cfw(): performing query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_query_cfw(): performing query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) stringOfCANfwversion = from_firmware_to_stringofversion(fw) tmp1 = 'FirmwareUpdater --nogui --query' + ' --device CFW2 --id ' + adr.get('canbus', '0') @@ -431,8 +431,8 @@ def do_firmware_query_cfw(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_cfw(): querying can board type + firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_query_cfw(): querying can board type + firmware w/ command:') + print (pyprefix + debugprefix + command ) if 1 == _debugmode: r = 0 @@ -444,11 +444,11 @@ def do_firmware_query_cfw(brd, prp): if 0 == r: r = 0 else: - print pyprefix + errorprefix + 'do_firmware_query_cfw(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_query_cfw(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_cfw(): board is found!' + print (pyprefix + debugprefix + 'do_firmware_query_cfw(): board is found!') return r # end of: def @@ -462,12 +462,12 @@ def do_firmware_query_canovereth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_canovereth(): performing query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_query_canovereth(): performing query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) r = eth_force_maintenance(brd, prp) if 0 != r: - print pyprefix + errorprefix + 'do_firmware_query_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_query_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) return r #stringOfCANfwversion = from_firmware_to_stringofversion(fw) @@ -476,8 +476,8 @@ def do_firmware_query_canovereth(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_canovereth(): querying can board + firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_query_canovereth(): querying can board + firmware w/ command:') + print (pyprefix + debugprefix + command ) if 1 == _debugmode: @@ -490,11 +490,11 @@ def do_firmware_query_canovereth(brd, prp): if 0 == r: r = 0 else: - print pyprefix + errorprefix + 'do_firmware_query_canovereth(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_query_canovereth(): ERROR cannot find can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_canovereth(): FW is OK!' + print (pyprefix + debugprefix + 'do_firmware_query_canovereth(): FW is OK!') return r # end of: def @@ -507,20 +507,20 @@ def do_firmware_query_eth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_eth(): performing fw query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_query_eth(): performing fw query on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) # r = eth_force_maintenance(brd, prp) # # if 0 != r: -# print pyprefix + errorprefix + 'do_firmware_query_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') +# print (pyprefix + errorprefix + 'do_firmware_query_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) # return r # stringOfETHfwversion = from_firmware_to_stringofversionETH(fw) command = 'FirmwareUpdater --nogui --query' + ' --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip', '0') + ' --verbosity ' + str(_verbosityFU) if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_eth(): querying eth board + firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_query_eth(): querying eth board + firmware w/ command:' ) + print (pyprefix + debugprefix + command ) if 1 == _debugmode: r = 0 @@ -532,11 +532,11 @@ def do_firmware_query_eth(brd, prp): if 0 == r: r = 0 else: - print pyprefix + errorprefix + 'do_firmware_query_eth(): ERROR cannot find eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_query_eth(): ERROR cannot find eth board @ ' + adr.get('ip', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_query_eth(): board found!' + print (pyprefix + debugprefix + 'do_firmware_query_eth(): board found!') return r # end of: def @@ -554,12 +554,12 @@ def do_firmware_query(brd, prp): elif 0 != adr.get('canadr', 0): r = do_firmware_query_canovereth(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_query(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_query(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 2 elif 'CFW' == ondevice: r = do_firmware_query_cfw(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_query(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_query(): FAILURE the device ' + ondevice + ' is unsupported') r = 2 return r @@ -579,22 +579,36 @@ def getTimeOfFirmwareUpdate(brdtype): r = 15 elif brdtype == 'foc': r = 105 + elif brdtype == 'foc-special': + r = 105 elif brdtype == 'mtb': r = 105 elif brdtype == 'mtb4': r = 280 + elif brdtype == 'mtb4c': + r = 280 elif brdtype == 'mais': r = 50 elif brdtype == 'strain': r = 70 elif brdtype == 'strain2': r = 280 + elif brdtype == 'strain2c': + r = 280 + elif brdtype == 'rfe': + r = 280 elif brdtype == 'mc4': r = 66 elif brdtype == 'bll': r = 66 elif brdtype == 'dsp': r = 66 + elif brdtype == 'amc': + r = 30 + elif brdtype == 'amc2c': + r = 30 + elif brdtype == 'amcbldc': + r = 280 else: r = 666 @@ -616,12 +630,12 @@ def do_firmware_program(brd, prp): elif 0 != adr.get('canadr', 0): r = do_firmware_program_canovereth(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_program(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_program(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 1 elif 'CFW' == ondevice: r = do_firmware_program_cfw(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_program(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_program(): FAILURE the device ' + ondevice + ' is unsupported') r = 1 return r @@ -634,7 +648,7 @@ def do_firmware_program_cfw(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_cfw(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_program_cfw(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) tmp1 = 'FirmwareUpdater --nogui --program --device CFW2 --id ' + adr.get('canbus', '0') @@ -642,13 +656,13 @@ def do_firmware_program_cfw(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_cfw(): uploading can firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_program_cfw(): uploading can firmware w/ command:') + print (pyprefix + debugprefix + command ) if _verbose > 0: boardtype = brd.get('type') timeofupload = getTimeOfFirmwareUpdate(boardtype) - print pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds' + print (pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds') if 1 == _debugmode: r = 0 @@ -658,12 +672,12 @@ def do_firmware_program_cfw(brd, prp): r = r / 256 if 0 != r: - print pyprefix + errorprefix + 'do_firmware_program_cfw(): FAILURE programming can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_program_cfw(): FAILURE programming can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_cfw(): done!' + print (pyprefix + debugprefix + 'do_firmware_program_cfw(): done!') return r # end of: def @@ -677,12 +691,12 @@ def do_firmware_program_canovereth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_canovereth(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_program_canovereth(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) r = eth_force_maintenance(brd, prp) if 0 != r: - print pyprefix + errorprefix + 'do_firmware_program_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_program_canovereth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) return r tmp1 = 'FirmwareUpdater --nogui --program --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip', '0') @@ -690,13 +704,13 @@ def do_firmware_program_canovereth(brd, prp): command = tmp1 + tmp2 if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_canovereth(): uploading can firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_program_canovereth(): uploading can firmware w/ command:') + print (pyprefix + debugprefix + command ) if _verbose > 0: boardtype = brd.get('type') timeofupload = getTimeOfFirmwareUpdate(boardtype) - print pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds' + print (pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds') if 1 == _debugmode: r = 0 @@ -706,12 +720,12 @@ def do_firmware_program_canovereth(brd, prp): r = r / 256 if 0 != r: - print pyprefix + errorprefix + 'do_firmware_program_canovereth(): FAILURE programming can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_program_canovereth(): FAILURE programming can board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_canovereth(): done!' + print (pyprefix + debugprefix + 'do_firmware_program_canovereth(): done!') return r # end of: def @@ -724,25 +738,25 @@ def do_firmware_program_eth(brd, prp): fw = prp.find('firmware') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_eth(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_program_eth(): performing fw program on board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0')) r = eth_force_maintenance(brd, prp) if 0 != r: - print pyprefix + errorprefix + 'do_firmware_program_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_program_eth(): FAILURE sending in maintenance mode eth board @ ' + adr.get('ip', '0')) return r command = 'FirmwareUpdater --nogui --program --device ' + brd.find('ondevice').text + ' --id eth1 --eth_board ' + adr.get('ip', '0') + ' --file ' + fw.find('file').text + ' --verbosity ' + str(_verbosityFU) if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_eth(): uploading eth firmware w/ command:' - print pyprefix + debugprefix + command + print (pyprefix + debugprefix + 'do_firmware_program_eth(): uploading eth firmware w/ command:' ) + print (pyprefix + debugprefix + command ) if _verbose > 0: boardtype = brd.get('type') timeofupload = getTimeOfFirmwareUpdate(boardtype) - print pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds' + print (pyprefix + ' - message: please be prepared to wait for some time ... fw program of a ' + boardtype + ' typically lasts ' + str(timeofupload) + ' seconds') if 1 == _debugmode: r = 0 @@ -752,18 +766,18 @@ def do_firmware_program_eth(brd, prp): r = r / 256 if 0 != r: - print pyprefix + errorprefix + 'do_firmware_program_eth(): FAILURE programming eth board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_program_eth(): FAILURE programming eth board @ ' + adr.get('ip', '0')) return r if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_program_eth(): done!' + print (pyprefix + debugprefix + 'do_firmware_program_eth(): done!') return r # end of: def -#print pyprefix + 'processing: part = ' + part.get('name') + ', board = ' + brd.get('type') + ', name = ' + brd.get('name') + ', address = ' + from_board_to_stringofaddress(brd) +#print (pyprefix + 'processing: part = ' + part.get('name') + ', board = ' + brd.get('type') + ', name = ' + brd.get('name') + ', address = ' + from_board_to_stringofaddress(brd)) def get_string_of_firmwareproperties(prp): fw = prp.find('firmware') @@ -774,12 +788,12 @@ def get_string_of_firmwareproperties(prp): # it prints info about a given board as found in firmware xml file def print_firmware_info(partname, brd, prp): r = 0 - print pyprefix + ' - [INFO] board = ' + brd.get('type') + ', ' + get_string_of_firmwareproperties(prp) + print (pyprefix + ' - [INFO] board = ' + brd.get('type') + ', ' + get_string_of_firmwareproperties(prp)) import os.path fw = prp.find('firmware') fname = fw.find('file').text if False == os.path.exists(fname): - print pyprefix + ' - [ERROR] file ' + fname + ' does not exist' + print (pyprefix + ' - [ERROR] file ' + fname + ' does not exist') return 1 return r # end of: def @@ -799,40 +813,40 @@ def do_firmware_update(brd, prp): r = do_firmware_verify_eth(brd, prp) if 0 == r: - print pyprefix + ' - message: the board already has the most recent FW.' + print (pyprefix + ' - message: the board already has the most recent FW.') r = 10 if _verbose > 1: adr = brd.find('ataddress').attrib - print pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') ) elif 1 == r: - print pyprefix + ' - message: the board has an old FW which is going to be udapted.' + print (pyprefix + ' - message: the board has an old FW which is going to be udapted.') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0')) r = do_firmware_program_eth(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot verify board @ ' + adr.get('ip', '0') + print (pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot verify board @ ' + adr.get('ip', '0') ) elif 0 != adr.get('canadr', 0): r = do_firmware_verify_canovereth(brd, prp) if 0 == r: - print pyprefix + ' - message: the board already has the most recent FW.' + print (pyprefix + ' - message: the board already has the most recent FW.') r = 10 if _verbose > 1: adr = brd.find('ataddress').attrib - print pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) elif 1 == r: - print pyprefix + ' - message: the board has an old FW which is going to be udapted.' + print (pyprefix + ' - message: the board has an old FW which is going to be udapted.') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) r = do_firmware_program_canovereth(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot find board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot find board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) else: - print pyprefix + errorprefix + 'do_firmware_update(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_update(): FAILURE the device ' + ondevice + ' with CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + ' is unsupported') r = 2 elif 'CFW' == ondevice: @@ -840,21 +854,21 @@ def do_firmware_update(brd, prp): r = do_firmware_verify_cfw(brd, prp) if 0 == r: - print pyprefix + ' - message: the board already has the most recent FW.' + print (pyprefix + ' - message: the board already has the most recent FW.') r = 10 if _verbose > 1: adr = brd.find('ataddress').attrib - print pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): no need to program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) elif 1 == r: - print pyprefix + ' - message: the board has an old FW which is going to be udapted.' + print (pyprefix + ' - message: the board has an old FW which is going to be udapted.') if _verbose > 1: - print pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + debugprefix + 'do_firmware_update(): will program board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) r = do_firmware_program_cfw(brd, prp) else: - print pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot find board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') + print (pyprefix + errorprefix + 'do_firmware_update(): FAILURE because cannot find board @ ' + adr.get('ip', '0') + ':CAN' + adr.get('canbus', '0') + ':' + adr.get('canadr', '0') ) else: - print pyprefix + errorprefix + 'do_firmware_update(): FAILURE the device ' + ondevice + ' is unsupported' + print (pyprefix + errorprefix + 'do_firmware_update(): FAILURE the device ' + ondevice + ' is unsupported') r = 1 return r @@ -874,19 +888,19 @@ def query(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --query request:' + print (pyprefix + '[debug] processing a --query request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -899,31 +913,31 @@ def query(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: firmware query' - print pyprefix + ' - target: ' + details - print pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp) + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: firmware query') + print (pyprefix + ' - target: ' + details) + print (pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp)) r = do_firmware_query(brd, prp) if 0 == r: if _verbose > 0: - print pyprefix + ' - result: SUCCESS!! found the board' + print (pyprefix + ' - result: SUCCESS!! found the board') elif 1 == r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! the remote board cannot be found' + print (pyprefix + ' - result: FAILURE!! the remote board cannot be found') else: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! unknown return value from FirmwareUpdater =' + r + print (pyprefix + ' - result: FAILURE!! unknown return value from FirmwareUpdater =' + r) # end of: if _excl... # end of: if targetboard @@ -954,19 +968,19 @@ def verify(targetpart, targetboard, robotroot, boardroot, verbose): estimatedTimeForFWprogram = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --verify request:' + print (pyprefix + '[debug] processing a --verify request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -979,36 +993,36 @@ def verify(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: firmware verify' - print pyprefix + ' - target: ' + details - print pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp) + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: firmware verify') + print (pyprefix + ' - target: ' + details) + print (pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp)) r = do_firmware_verify(brd, prp) if 0 == r: if _verbose > 0: - print pyprefix + ' - result: SUCCESS!! the fw version on remote board matches the requirements' + print (pyprefix + ' - result: SUCCESS!! the fw version on remote board matches the requirements') elif 1 == r: countOfRequiredUpdates = countOfRequiredUpdates + 1 brdtime = getTimeOfFirmwareUpdate(brd.get('type')) estimatedTimeForFWprogram = estimatedTimeForFWprogram + brdtime - print pyprefix + ' - result: ACTION!! the fw version of remote board must be updated (estimated time = ' + str(brdtime) + ' seconds)' + print (pyprefix + ' - result: ACTION!! the fw version of remote board must be updated (estimated time = ' + str(brdtime) + ' seconds)') elif 2 == r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! the remote board cannot be found' + print (pyprefix + ' - result: FAILURE!! the remote board cannot be found') else: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! unknown return value from FirmwareUpdater =' + r + print (pyprefix + ' - result: FAILURE!! unknown return value from FirmwareUpdater =' + r) # end of: if _excl... # end of: if targetboard @@ -1018,14 +1032,14 @@ def verify(targetpart, targetboard, robotroot, boardroot, verbose): if _verbose > 0: print_result('verify()', countOfFound, countOfExcluded, countOfFailures) - print pyprefix + '-- Number of boards which need FW update: ' + str(countOfRequiredUpdates) + print (pyprefix + '-- Number of boards which need FW update: ' + str(countOfRequiredUpdates)) mi = estimatedTimeForFWprogram // 60 ho = mi // 60 h = ho m = mi % 60 s = estimatedTimeForFWprogram % 60 - print pyprefix + '-- Estimated time for FW program of boards w/ old FW version: ' + str(estimatedTimeForFWprogram) + ' seconds (' + str(h) + 'h' + str(m) + 'm' + str(s) + 's)' - print pyprefix + '--' + print (pyprefix + '-- Estimated time for FW program of boards w/ old FW version: ' + str(estimatedTimeForFWprogram) + ' seconds (' + str(h) + 'h' + str(m) + 'm' + str(s) + 's)') + print (pyprefix + '--') # end of if ... # end of if ... @@ -1044,19 +1058,19 @@ def maintenance(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --forcemaintenance request:' + print (pyprefix + '[debug] processing a --forcemaintenance request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1069,26 +1083,26 @@ def maintenance(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: force maintenance' - print pyprefix + ' - target: ' + details + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: force maintenance') + print (pyprefix + ' - target: ' + details ) r = goto_maintenance(brd, prp) if 0 != r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() elif _verbose > 0: - print pyprefix + ' - result: SUCCESS' + print (pyprefix + ' - result: SUCCESS') # end of: if _excl... # end of: if targetboard @@ -1117,19 +1131,19 @@ def program(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --program request:' + print (pyprefix + '[debug] processing a --program request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1142,27 +1156,27 @@ def program(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: firmware program' - print pyprefix + ' - target: ' + details - print pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp) + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: firmware program') + print (pyprefix + ' - target: ' + details) + print (pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp)) r = do_firmware_program(brd, prp) if 0 != r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() elif _verbose > 0: - print pyprefix + ' - result: SUCCESS' + print (pyprefix + ' - result: SUCCESS') # end of: if _excl... # end of: if targetboard @@ -1189,19 +1203,19 @@ def update(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --update request:' + print (pyprefix + '[debug] processing a --update request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1214,30 +1228,30 @@ def update(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: firmware update' - print pyprefix + ' - target: ' + details - print pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp) + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: firmware update') + print (pyprefix + ' - target: ' + details) + print (pyprefix + ' - using: ' + get_string_of_firmwareproperties(prp)) r = do_firmware_update(brd, prp) if 0 == r: if _verbose > 0: - print pyprefix + ' - result: SUCCESS: the board has been programmed with latest firmware version' + print (pyprefix + ' - result: SUCCESS: the board has been programmed with latest firmware version') elif 10 == r: if _verbose > 0: - print pyprefix + ' - result: SUCCESS: the board already has the latest version of firmware' + print (pyprefix + ' - result: SUCCESS: the board already has the latest version of firmware') else: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() @@ -1266,19 +1280,19 @@ def maintenance(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --forcemaintenance request:' + print (pyprefix + '[debug] processing a --forcemaintenance request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1291,26 +1305,26 @@ def maintenance(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: force maintenance' - print pyprefix + ' - target: ' + details + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: force maintenance') + print (pyprefix + ' - target: ' + details ) r = goto_maintenance(brd, prp) if 0 != r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() elif _verbose > 0: - print pyprefix + ' - result: SUCCESS' + print (pyprefix + ' - result: SUCCESS') # end of: if _excl... # end of: if targetboard @@ -1337,19 +1351,19 @@ def application(targetpart, targetboard, robotroot, boardroot, verbose): countOfAttempts = 0 if _verbose > 1: - print pyprefix + '[debug] processing a --forceapplication request:' + print (pyprefix + '[debug] processing a --forceapplication request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1362,26 +1376,26 @@ def application(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: countOfAttempts = countOfAttempts + 1 if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: force application' - print pyprefix + ' - target: ' + details + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: force application') + print (pyprefix + ' - target: ' + details) r = goto_application(brd, prp) if 0 != r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() elif _verbose > 0: - print pyprefix + ' - result: SUCCESS' + print (pyprefix + ' - result: SUCCESS') # end of: if _excl... # end of: if targetboard @@ -1411,19 +1425,19 @@ def info(targetpart, targetboard, robotroot, boardroot, verbose): estimatedTimeForFWprogram = 0; if _verbose > 1: - print pyprefix + '[debug] processing a --info request:' + print (pyprefix + '[debug] processing a --info request:') for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1436,8 +1450,8 @@ def info(targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: @@ -1446,18 +1460,18 @@ def info(targetpart, targetboard, robotroot, boardroot, verbose): estimatedTimeForFWprogram = estimatedTimeForFWprogram + getTimeOfFirmwareUpdate(brd.get('type')) if _verbose > 0: - print pyprefix + '- OPERATION #' + str(countOfAttempts) - print pyprefix + ' - type: info from xml file' - print pyprefix + ' - target: ' + details + print (pyprefix + '- OPERATION #' + str(countOfAttempts)) + print (pyprefix + ' - type: info from xml file') + print (pyprefix + ' - target: ' + details) r = print_firmware_info(part.get('name'), brd, prp) if 0 != r: countOfFailures = countOfFailures + 1 - print pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)' + print (pyprefix + ' - result: FAILURE!! (However, the operation will be attempted with other boards until completion)') # exit() elif _verbose > 0: - print pyprefix + ' - result: SUCCESS' + print (pyprefix + ' - result: SUCCESS') # end of: if _excl... @@ -1474,8 +1488,8 @@ def info(targetpart, targetboard, robotroot, boardroot, verbose): h = ho m = mi % 60 s = estimatedTimeForFWprogram % 60 - print pyprefix + '-- Estimated time for FW program of all boards: ' + str(estimatedTimeForFWprogram) + ' seconds (' + str(h) + 'h' + str(m) + 'm' + str(s) + 's)' - print pyprefix + '--' + print (pyprefix + '-- Estimated time for FW program of all boards: ' + str(estimatedTimeForFWprogram) + ' seconds (' + str(h) + 'h' + str(m) + 'm' + str(s) + 's)') + print (pyprefix + '--') # end of if ... return r @@ -1495,16 +1509,15 @@ def findInprev(currIP, targetpart, targetboard, robotroot, boardroot, verbose): #print 'looking for a prev = ' + currIP for part in robotroot.findall('part'): - # print pyprefix + part.tag, part.attrib + # print (pyprefix + part.tag, part.attrib) if ('all' == targetpart) or (targetpart == part.get('name')): - #print pyprefix + 'processing part = ' + part.get('name') + #print (pyprefix + 'processing part = ' + part.get('name')) for brd in part.findall('board'): prp = get_board_properties2(boardroot, brd) - if len(prp) == 0: - print pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file' - print pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd) + print (pyprefix + errorprefix + 'cannot find a match for ' + 'following board' + ' in firmware xml file. i continue parsing other boards of network file') + print (pyprefix + errorprefix + 'part = ' + part.get('name') + ', ' + get_string_of_fulldescriptionofboard(brd)) continue if ('all' == targetboard) or (targetboard == brd.get('type')): @@ -1516,8 +1529,8 @@ def findInprev(currIP, targetpart, targetboard, robotroot, boardroot, verbose): countOfExcluded = countOfExcluded + 1 if _verbose > 0: - print pyprefix + '- EXCLUSION #' + str(countOfExcluded) - print pyprefix + ' - of: ' + details + print (pyprefix + '- EXCLUSION #' + str(countOfExcluded)) + print (pyprefix + ' - of: ' + details) else: @@ -1564,26 +1577,26 @@ def topology(targetpart, targetboard, robotroot, boardroot, verbose): estimatedTimeForFWprogram = 0; if _verbose > 1: - print pyprefix + '[debug] processing a --topology request:' + print (pyprefix + '[debug] processing a --topology request:') currIP = '10.0.1.104' nextIP = 'none' prevIP = 'none' - print pyprefix + ' (in daisy chain order)' - #print pyprefix + ' | (in daisy chain order)' - print pyprefix + ' -> 10.0.1.104 [linux host] ->' + print (pyprefix + ' (in daisy chain order)' ) + #print (pyprefix + ' | (in daisy chain order)') + print (pyprefix + ' -> 10.0.1.104 [linux host] ->') while True: brd = findInprev(currIP, targetpart, targetboard, robotroot, boardroot, verbose) if 'none' == brd: break - print pyprefix + ' -> ' + from_board_to_stringofIPaddress(brd) + ' [' + brd.get('type') + ', ' + brd.get('name') + '] ->' + print (pyprefix + ' -> ' + from_board_to_stringofIPaddress(brd) + ' [' + brd.get('type') + ', ' + brd.get('name') + '] ->') adr = brd.find('ataddress').attrib currIP = adr.get('ip', '0') - print pyprefix + ' -> END' - print pyprefix + '' + print (pyprefix + ' -> END') + print (pyprefix + '') return r @@ -1593,14 +1606,14 @@ def topology(targetpart, targetboard, robotroot, boardroot, verbose): def print_result(nameOfCaller, nFound, nExcluded, nFailures): - print pyprefix + '--' - print pyprefix + '-- FINAL REPORT for ' + str(nameOfCaller) - print pyprefix + '-- Number of boards matching your criteria (w/ --part ' + _part + ' --board ' + _board + '): ' + str(nFound) - print pyprefix + '-- Number of boards excluded from the above number (w/ --excludeboard ' + _excludedboard + '): ' + str(nExcluded) - print pyprefix + '-- Number of boards for which the operation was attempted: ' + str(nFound - nExcluded) - print pyprefix + '-- Number of boards for which the operation had success: ' + str(nFound - nExcluded - nFailures) - print pyprefix + '-- Number of boards for which the operation failed: ' + str(nFailures) - print pyprefix + '--' + print (pyprefix + '--') + print (pyprefix + '-- FINAL REPORT for ' + str(nameOfCaller) ) + print (pyprefix + '-- Number of boards matching your criteria (w/ --part ' + _part + ' --board ' + _board + '): ' + str(nFound) ) + print (pyprefix + '-- Number of boards excluded from the above number (w/ --excludeboard ' + _excludedboard + '): ' + str(nExcluded)) + print (pyprefix + '-- Number of boards for which the operation was attempted: ' + str(nFound - nExcluded)) + print (pyprefix + '-- Number of boards for which the operation had success: ' + str(nFound - nExcluded - nFailures)) + print (pyprefix + '-- Number of boards for which the operation failed: ' + str(nFailures) ) + print (pyprefix + '--') # end of: def print_result() @@ -1609,6 +1622,7 @@ def print_result(nameOfCaller, nFound, nExcluded, nFailures): if __name__ == '__main__': import argparse + from argparse import RawTextHelpFormatter parser = argparse.ArgumentParser(description='This script is a front-end for the FirmwareUpdater program in non GUI mode. ' + 'It performs automatic firmware program on the whole robot, on parts of it, or even on selected board types. ' + @@ -1625,11 +1639,12 @@ def print_result(nameOfCaller, nFound, nExcluded, nFailures): parser.add_argument('-p', '--part', action='store', required=False, default='all', choices=['all', 'head', 'face', 'left_arm', 'right_arm', 'torso', 'left_leg', 'right_leg', 'custom', 'test'], help='the part on which to perform the action. default = all') + #tumme parser.add_argument('-b', '--board', action='store', required=False, default='all', - choices=['all', 'ems4', 'mc4plus', 'mc2plus', 'mtb', 'mtb4', 'strain', 'strain2', 'foc', 'mc4', 'mais', 'bll', 'dsp'], + choices=['all', 'ems4', 'mc4plus', 'mc2plus', 'mtb', 'mtb4', 'mtb4c','strain', 'strain2', 'strain2c', 'rfe', 'foc', 'foc-special', 'mc4', 'mais', 'bll', 'dsp', 'amc', 'amcbldc'], help='the board on which to perform the action. default = all') parser.add_argument('-xb', '--excludeboard', action='store', required=False, default='none', - choices=['none', 'ems4', 'mc4plus', 'mc2plus', 'mtb', 'mtb4', 'strain', 'strain2', 'foc', 'mc4', 'mais', 'bll', 'dsp'], + choices=['none', 'ems4', 'mc4plus', 'mc2plus', 'mtb', 'mtb4', 'mtb4c', 'strain', 'strain2', 'strain2c', 'rfe', 'foc', 'foc-special', 'mc4', 'mais', 'bll', 'dsp', 'amc', 'amcbldc'], help='exclude a board on which to perform the action. default = none') parser.add_argument('-a', '--action', action='store', required=True, default='info', choices=['info', 'topology', 'query', 'verify', 'update', 'program', 'forcemaintenance', 'forceapplication'], help='the action to perform on board(s) selected by --part and --board. ' + @@ -1661,34 +1676,38 @@ def print_result(nameOfCaller, nFound, nExcluded, nFailures): _excludedboard = args.excludeboard + import datetime # some warnings ... if _debugmode: - print pyprefix + '[warning] debugmode is enabled!' + print (pyprefix + '[warning] debugmode is enabled!') if _verbosity > 0: - print pyprefix + '[info] the script is executing' + print (pyprefix + '[info] the script is executing') if 0 == _verbosity: _verbose = 0 _verbosityFU = 0 elif 1 == _verbosity: - print pyprefix + "[info] verbosity turned on for basic python only" + print (pyprefix + "[info] verbosity turned on for basic python only" ) _verbose = 1 _verbosityFU = 0 elif 2 == _verbosity: - print pyprefix + "[info] verbosity turned on for full python only" + print (pyprefix + "[info] verbosity turned on for full python only" ) _verbose = 2 _verbosityFU = 0 else: - print pyprefix + "[info] verbosity turned on for full python and FirmwareUpdater" + print (pyprefix + "[info] verbosity turned on for full python and FirmwareUpdater" ) _verbose = 3 _verbosityFU = 1 + # get the current date and time + now = datetime.datetime.now() + print(now) # open the xml files: one for robot description and one for board properties @@ -1720,10 +1739,15 @@ def print_result(nameOfCaller, nFound, nExcluded, nFailures): elif _action == 'topology': r = topology(_part, _board, xmlrootOfRobot, xmlrootOfBoards, _verbose) else: - print pyprefix + '[error] unsupported action: ' + _action + print (pyprefix + '[error] unsupported action: ' + _action) if _verbosity > 0: - print pyprefix + '[info] the script is over' + print (pyprefix + '[info] the script is over') + + + # get the current date and time + now = datetime.datetime.now() + print(now)