diff --git a/Bin/UKSSTMS320F28335.hex b/Bin/UKSSTMS320F28335.hex index 9b6463e..12a5d2a 100644 --- a/Bin/UKSSTMS320F28335.hex +++ b/Bin/UKSSTMS320F28335.hex @@ -1,4 +1,4 @@ -:20000000AA08000000000000000000000000000000000000E1AF62020000A4B100FFC0DA4C +:20000000AA08000000000000000000000000000000000000B9B46A02000067B600FFC0DA9F :2000200000000000C1C081C1400101C3C003800241C201C6C006800741C70005C1C581C4C4 :20004000400401CCC00C800D41CD000FC1CF81CE400E000AC1CA81CB400B01C9C0098008A5 :2000600041C801D8C018801941D9001BC1DB81DA401A001EC1DE81DF401F01DDC01D801CD4 @@ -21,836 +21,915 @@ :200280001B406ABF000000000000000000000000000000000000000000000000D8FF01DD25 :2002A00000000A1460133D13CE1359075907CA09D4099C13B0135613A6134F075707CB09F0 :2002C000D209320F190FEC13F212C206A30256030E00050FD80EB20C1C0C140400005C03AC -:2002E0001100090500050000000019081708D50AD30AFFFFA4DD00000000FFFFA5DD0000DF -:200300000000FFFFA6DD00000000FFFFA7DD00000000F4FFB4DD0000000000000000000056 -:20032000299A00005B9A0000249A00001F9A0000FFFF20DE00000000FFFF21DE0000000095 -:20034000FFFF22DE00000000FFFF23DE00000000FFFF24DE00000000FEFF2ADE000000009B -:200360000000FEFF2CDE000000000000FFFF90DE00000000FFFF91DE00000000FEFF96DE2C -:20038000000000000000FEFF98DE000000000000FEFF9ADE000000000000FEFF9CDE0000FE +:2002E0001100090500050000000019081708D50AD30AFFFFA2DE00000000FFFFA3DE0000E1 +:200300000000FFFFA4DE00000000FFFFA5DE00000000F4FFB2DE0000000000000000000059 +:20032000F29F000024A00000ED9F0000E89F0000FFFF42DF00000000FFFF43DF0000000016 +:20034000FFFF44DF00000000FFFF45DF00000000FFFF46DF00000000FEFF4CDF000000000F +:200360000000FEFF4EDF000000000000FFFF18DF00000000FFFF19DF00000000FEFF26DF66 +:20038000000000000000FEFF28DF000000000000FEFF2ADF000000000000FEFF2CDF00004B :2003A00000000000EEFF2ADD00004A0C023E4A0C023E0000803F0000803F6C09F93B6C0981 -:2003C000F93B6C09F93B6C09F93B0000803FF0FFB0DA00003F0006005B004F0066006D009D -:2003E0007D0007007F006F00400000000000000079000000FFFFCDDE00000600FFFFCFDE78 -:2004000000000000FFFFD0DE00000000FEFFD4DE000000000000FFFFB8DE00000000FFFFEF -:20042000B9DE00000000FFFFBADE00000100FFFFC0DE00000000FFFFC1DE00000000FFFF57 -:20044000C2DE00000000FEFFF6DE00009AB10000FEFFF8DE00009AB10000FEFFFADE0000ED -:2004600000000000FEFFFCDE000000000000FFFF3CDD00000000FFFF3DDD00000000FBFF7C -:20048000E4DE000008000C00100000000400FFFFF2DE00000A00FFFFF3DE00000100FFFFCC -:2004A00002DF00000100FFFF03DF00000100FCFFEEDE00000000000000000000FFFF00D0E4 -:2004C00000000100FFFFC0DD00000000FFFF41DC00000000FFFF29DD000000000000000061 -:2004E000A4310000008002FEA4C5A927013B008FC0DBC7924196A9A8AB81A98A01BEC4188D -:2005000000E04192C4984148046CC44E026D00BE008FC0DBA9A8AB81A98A1F765C03A6CC54 -:20052000010088FFC4CDFFFDA8CAA993D8FF01F1C49601910B9982FE060010E70B0001E82E -:20054000EAFA20E740000DE8BA9E6FE819F000E7100000E7490000E70000007710E7400007 -:200560004076EAB002E8010250E800004076C2AD0600A71EA59243880960C4060561010278 -:200580004156C4000B6F00BE096FA706C40F036201BE046F01020156C400A6920600BDB26E -:2005A0007AD178D0013BBDAA808DC0DB9A92929EA985A9BD120F007700770077007789E601 -:2005C000010002E840164076C2AD7BD11F765C0379D0013B03E226009A92929EA985A9BDF5 -:2005E000120F007700770077007789E6010002E840164076C2AD00D11F765C0303E2280057 -:20060000008FC0DB013BA9A8A181A98A74D0C8E29400008F80DEA9A8A181A98AC49202520F -:20062000046002E8D123056F02E8E1300AE801004076C2AD013B008F2ADD0356A1010156CD -:20064000A40001D9A192045203E2C400DA64BE86BE8B0600BDB2BDAA03E2BD0404FE005249 -:20066000A95906601F765C030B920B2B0C96A1921F765C0307540A63008FC0DB013BA9A803 -:20068000A181A98AC44FEDFF0102008F88DD013BA9A8A181A9837FD0008FC0DB944CC4E235 -:2006A000C500EDFFEA01A19207544F63A9A8A181A98AC44D4A6C00BEA6921F767803A985BD -:2006C00000D5A71E009B1E9207520260019B0356A8011F765C030793A99F2765013B008FAF -:2006E000C0DBA9A8A581A98AC492A9CD0080A9CC0060A8CA0A60008F88DDA9A8A581A98A1A -:2007000001DEA706C40DA71E1F767803009B1E9207520260019B0356A8011F765C0301DD31 -:200720000793A99FA555DC62A6920761A985421EA706C00097B0A71EA7BD120F0077007785 -:200740000077007789E60000A192089E1F767803A988209242617FD0008FC0DB949316D047 -:20076000D3FF9492C1FFA8CAA940146C1F7678031F9205520C6002E849280CE8010094E698 -:20078000080014AD0465A6920250A988A692E3FF6801A1921F765C030754E2FF8401A6401B -:2007A0000F6C79D0C8E29401007720E74000AFE2280400E72000007790E800760E6F78D08A -:2007C000C8E29401007720E74000AFE2260400E72000007790E800761F7678032192696168 -:2007E000A692E3FFDE001F7678031F9202521F61A1400F6C79D0008FC0DBC8E294011F76C9 -:200800005C0320E74000AFE2280400E720003B6F78D0008FC0DBC8E294011F765C0320E718 -:200820004000AFE2260400E720002D6F08BEA192A672008FC0DB013BA9A8A681A983807609 -:2008400088DDA606A181A71E18D0C7929596A19206520D6378D0C8E294011F765C0320E7B7 -:200860004000AFE2220400E720000D6F78D0C8E294011F765C0320E74000AFE2240400E79C -:200880002000007716E8000D14AD136512E8401A14AD0F63A12D008F00D950E800B212358F -:2008A0000156A400407660B002E841164076C2AD16D0008FC0DB26E8000D94937FD0D0FFA1 -:2008C000949232E8401AC9FFA8CAA940036C02E8001150E80148A9A8013B18D08CE6000089 -:2008E000A1818CE60900A983A9A8A181A98A13E29501432BA6BF120FC493A892CDFF01F0BC -:200900000190A980A61BECFF3461A692C852316130D09592FB9CA6540363A845186D008FD9 -:20092000C0DBA9A8A181A98A30D0A69294540F6248D0945428651F765C03A7CC01000B18CD -:20094000F7FF82FF431A10000B981D6F4392A7CD01001F765C03205097FF0B18FBFFA91862 -:20096000FFFEA9CB43970356A70207900B980B6F1F765C03A7CC0100431A01000B18EFFF9F -:2009800083FF0B981F765C030E92E0FF8C00AD5CA19283DCA45C40760080EFFF8400808DE3 -:2009A000C0DB013BA9AAA681A98A8CE6000078D078D113E2940079D092929A9EA985A9BDEE -:2009C000120F007700770077007789E604000077CFE6210002E808184076C2AD1F765C0337 -:2009E00003E2220002E8101CCFE621000FE830334076C2AD7AD11F765C0378D0013B008F33 -:200A0000C0DB03E224009A92949EA985A9BD120F007700770077007789E6010002E80818C9 -:200A20004076C2AD7BD11F765C0379D0013B008FC0DB03E226009A92949EA985A9BD120F84 -:200A4000007700770077007789E6010002E808184076C2AD1F765C0303E22800236FA9A837 -:200A6000013BA681A98A8CE6000078D013E2940040765C80176FA9A8A181A98A8CE600006D -:200A800018D013E294000E6F008FC0DBA9A8A181A983A9A8A181A98AC52B18D0C51A0080C2 -:200AA000942B84FEAFE2BE04BE86BE8B0600BDB2BDAA02FE0052A92706601F765C030B9220 -:200AC0000B2B0C96008FC0DB013BA9A8AB81A98AC492A94FEDFFCB00CDFF0190A92F422B81 -:200AE000AB92075260610356AB01A95A1F7678034218FFFB008D40DEA22D2E06412B2256A1 -:200B00000190A95D0356A201A007A98A20FFE80340764680013B019B019089FFA2954298E0 -:200B2000A82D4218FFF72E06412B22560190A95D0356AC01A007A98A20FFE803407646807B -:200B400001908AFF4298AB9206522D60029A4218FFEFA294013BA92D2E06412B22560190AA -:200B6000A95D0356AC01A007A98A20FFE80340764680013B039B0190A2958BFF4298A82D2E -:200B80004218FFDF2E062256412B0190A95D0356AC01A007A98A20FFE80340764680019077 -:200BA0008CFF42984292C0FF42CDBFFF42CA008F88DD013BC0FF42CAC0FF42CAC3FF40900C -:200BC000A8CA4296A9A8AB81A9837FD0008FC0DBC4E2C500944C416D408F80DEA9A0AB810E -:200BE000A9830356C501408F2ADD0156A500AFE2C50100E7400000778CE60000A9A8AB81F4 -:200C0000A6BF120FA98318D148D0A6929D7E95541163408F30DEA9A0AB81A983421A08008F -:200C2000A9A8C581A98AC443056CAA920360421A000142920761AA9205601F765C030B1A80 -:200C400002001F765C030E921E60AD5CAB9282DCA45C40760080176FA9A8AB81A98A8CE6FE -:200C6000000018D013E294000E6F008FC0DBA9A8AB81A983A9A8AB81A98AC52B18D0C51A4C -:200C80000080942B82FEBE86BE8B060000BE013B008FC0DBA9A8A681A98A01DE18D0A69234 -:200CA000C41800E01852942BF46400BE013B008FC0DB408FD6DEA9A8A681A98A0356A601A5 -:200CC0000156A50070D0C8E294001F76780303E2C5001F9206521760408F80DEA9A0A681C3 -:200CE000A983C59203520F60A640056D18D094288601096F008FC0DBA9A8A681A98A18D0F5 -:200D00009428300201DEA6920452D2641F9201521060008FC0DB1F765C03A9A80781A98AA4 -:200D2000C41A0040CC1A0040D41A0040DC1A00401F7678031F9206520760008FC0DBC41A83 -:200D40000040CC1A00401F7678032492036140765C8006008076F9151F765C03408FF22B87 -:200D6000008F3E4900B61202BDB2AC2B013B1AC21EA020A81F7678032EC31F765C031C1E80 -:200D8000008F80DEA9A8AC81A98AC42B008F30DEA9A8AC81A98AAC92019CC4211052A92D80 -:200DA000F0641F7678031F9206521860008F80DE408F30DEBF56C4031F765C03BF56C501D9 -:200DC000BF56CC03CD2BBF56D402BF56D503BF56DC02BF56DD0210282C011F7678031F9252 -:200DE00001521F601F765C03AC2B013BBF5610C8008F80DEA9A8AC81A98ABF56C403008F24 -:200E000030DEA9A8AC81A98AAC92AC9301F002910190A8CAC496AC92019CA92D0452E96461 -:200E20001F7678031E9209523460008F80DE408F30DEC42BBF56C50108D0BF56CC010ED1D6 -:200E4000CD2BBF56D404BF56D503BF56DC04BF56DD02BF56E404BF56E505BF56EC04BF56C1 -:200E6000ED04BF56F406BF56FC05BF56940609D0BF5694070AD0BF5694060BD0BF56940611 -:200E80000CD0BF5694060DD0BF569408BF569C08AC2B013B90E50356AC0180769EDE008FF1 -:200EA000DEDE5AFF0156A600A9A8AC81A98AC6C3408FAADEA9A9C42B0156A500AC92019C77 -:200EC000A92D03E2C5000652E764AC2B013B00BE0356AC01008F42DC0156A400AC92019C95 -:200EE000C4C2A92D1C52F564AC2B013B0356AC01008F40DE0156A400AC92019CC4C2A92DD7 -:200F00002052F564AC2BC0762ED71235408F40D7008F00D90156A5000156A400AC92019C8D -:200F200011F68524A92D185211F68424EF64AC2B1235008F40DD0156A400AC92019CA92D49 -:200F4000045211F68424F5641F7678031E92A993FF9D01532269A993FD9D015315690752BB -:200F60000A61095222601F765C03BF56070FBF56080D1B6F1F765C03BF560608BF5607081B -:200F8000BF560808126F1F765C03BF560608BF560710BF560810096F1F765C03BF56060AAA -:200FA000BF560714BF560814BE8B06001F76780323921F765C030780026104DF00D5013BEA -:200FC00000D40356A5038076F0D8A4810156A60001DCA492C62B0852F56401DDA59202523C -:200FE000F0641F7678031F9204526D61A79200D52D65013BA592A2FF008FF0D8CBFFA594AA -:20100000A3FFA927A9A8AB81A61E0356AB04A92D019BA592ACEA189A67FFA594C699A988F5 -:20102000A2FFCBFFA594189CA3FFA92701DDA9A8AB81A98A0356AB04A92DA692ACEA019A11 -:2010400066FFC498A792A554D66200D5013B008FF0D803BEA9A8A581A71EA592A672A9A860 -:20106000A681A98A08D001DDC7929496A5920352EF641F7678031F92008FF8D80252046026 -:20108000A9280003036FA928000FFC981F76780323920961408FF0D8A58A0FDCC41AFF00D9 -:2010A000F51A003F1F7678031F9206521260408FF0D8A58A0FDCC41A3000FD1A00E0CD1ABA -:2010C0000030076F008FF8D8C41A0F00F41AFC01008FF0D8A48308DC01DDC51A0100F41AE5 -:2010E0000700FC1A00E00600BDB2BDAABDA203E2BD0403E2BD0503E2BD060CFE1F767803A9 -:2011000044961F9206520860449206601F765C030B920B2B0C961F765C030792008F30DEB5 -:20112000013B4494A988A9A84481A98A808DC0DBC4924696449201F0019047964492A0FF9D -:20114000A92D499603354896049AAC94A95BA9AAA681A98A457EC44FEDFFBE02008FE9DE5D -:20116000A9A84481A98A64BE4492A672C4E2C405A9AAA681A98A8CE62800408DD6DE13E2EA -:20118000C40044920356A9010156A1004C1E02E891340BE801E0AFE2C10020E72800407696 -:2011A000C2AD442D008F40DD1235AFE2C10110E740000156A40003E2C100407660B0013B2F -:2011C0008CE60000A9AA4481A6BF120FA98A70D0408F2ADD947E4C060156A500A685A9BDC5 -:2011E000120F007700770077007789E60000408DAADE21E3C5414C0600E70C000156A100E7 -:2012000000E72101AFE2C10320E7C80002E8512B0BE801004076C2ADAFE2C10110E7400098 -:20122000007703E2C1004076EAB0013B008FDEDE8CE60000A9A84481A98A13E2C400449270 -:20124000A940ECFFAA001F765C03CFE62000AFE22A0140762A80452D008F00D912350156B3 -:20126000A400407660B04488008F80DE013BA9A8A681A98A1F765C0303E22C00C4920352B4 -:20128000086012E8000D14AD046390E503E22C00008F80DEA9A8A681A98AC4920252086087 -:2012A00012E8B01414AD046390E503E22C0001E8A9FDAFE22C0508E899274076C2AD1F7607 -:2012C0005C03CFE606000E921660008FC0DB4588013BA9A88CE6280018D0A681A98381DE26 -:2012E000A9A8A681A98A13E295008CE6330018D013E29403013BCFE62000AFE22A01408D06 -:20130000AADE0356A301AFE6000020E740000156A10000E70100AFE2C10020E7080002E841 -:20132000512B0BE801004076C2ADAFE2C10110E74000007703E2C1004076EAB0013B408F16 -:20134000DEDE8CE60000A9A0A381A61EABBF120F68B6C63F4892A772008FC0DBA9A8A781EA -:20136000A61EA9A04681A71EAA286900C792C696A9A04481A71E4892AA72A9A8AA81A61EDB -:20138000AA286A00C792C6964892AA72A9A8AA81A98AC43F116F1F7678031F9201520660BA -:2013A000CFE62000AFE60000036FCFE620001F765C0303E22A00008FDEDEA9A84481A983EC -:2013C000A9A84681A98AC8E2C400008FDEDEA9A8A381A98A4488C8E2C401008FC0DBA9A8AB -:2013E000A681A98AC8E2C505432BC492CDFF01F00190008FDEDEA959A9A8A681A98A96E699 -:20140000050096E60D00C8E2C400CFE6290020E728004076C2AD01E8C9F400D50CE8D1CC92 -:2014200094E6080014AD0B651F765C03C8E21000007794E6050014AD026501D54492013B45 -:20144000008F9EDE1F765C030356A901412B0156A4001E064076468000520A614393A1CC83 -:201460000100045187FFA818FFFEA8CA4396008FDEDE013BA9A8A381A98AC8E2C400CFE636 -:20148000290020E728004076C2AD01E8C9F400D50CE8D1CC94E6080014AD0B651F765C031C -:2014A000C8E21000007794E6050014AD026501D5013B008F9EDE1F765C030356A301412BDA -:2014C0000156A4001E064076468000520A614393A1CC0100045187FFA818FFFEA8CA43968D -:2014E0001F7678031F920652606047925E60008FC0DB013BA9A84581A98A30D0C8E294008E -:20150000007794E6060014AD0A654393A1CC0100205187FFA818FFFEA8CA4396008F80DE74 -:20152000A9A84481A98AC49203522760008FC0DBA9A84581A98A48D0412BC8E2940000D525 -:2015400094E6060014AD026301D54992008FEEDE1F765C030356A9010156A4001E0640760D -:20156000468000520A614393A1CC0100085187FFA818FFFEA8CA4396008F80DE013BA9A843 -:201580004481A98AC49202521060008FC0DBA9A84581A98A48D0C8E29400007794E6060078 -:2015A00014AD0365431A10004492015204610352E0FF87004392E1FF84001F767B0300926E -:2015C0007F601F767B0306060C19080F03670406081E088A8CE62000A9A80109081E13E29D -:2015E000C400088A1F765C03AFE22A00A9A81F767B038CE600000109081E13E2C400088A95 -:201600008CE62B00A9A80109081E13E2C4030883013B008FDEDEA9A00109081EA9A844814F -:20162000A71EC792C5960883A9A00109081EA9A84681A71EC792C5960883A9A00109081E98 -:20164000A9A8A381A71EC792C596088A1F765C03A9A80109AFE22C001F767B038CE6000079 -:20166000081E13E2C400088A8CE63200A9A80109081E13E2C4020883008FC0DBA5C4A9A8AA -:201680004481A71E01DE70DF08C2C792C59608C5A7060109081E1F765C0310921F767B03C1 -:2016A000C79608C5A7060109081E4392C79608C5A7060109081E1F765C030E92C7961F76C1 -:2016C0005C030E921560AD5C459283DCA45C407600800E6F008FC0DBA9A8A681A983A9A885 -:2016E000A681A98AC52B18D0C51A0080942B8CFEAFE2BE06AFE2BE05AFE2BE04BE82BE8690 -:20170000BE8B06001B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD003F -:2017200030E6000602FE422916561F7633003892419623760008267600003892382B21289A -:20174000FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE422916564A -:201760001F763300389241962376000826760000381890002128FFFF1029103B4192389677 -:201780002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892419623762B -:2017A000000826760000381890002128FFFF1029103B419238962576006F1B76F0FF00E2CD -:2017C000BD0030E6000602FE422916561F76330038924196237600082676000038189C00C7 -:2017E0002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE4229CD -:2018000016561F76330038924196237600082676000038189E002128FFFF1029103B41922A -:2018200038962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300229241966B -:2018400023760101221868002128FFFF1029103B419222962576006F1B76F0FF00E2BD00CC -:2018600030E6000602FE422916561F76330022924196237601012292222B2128FFFF102906 -:20188000103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633008E -:2018A000229241962376010026760101221878002128FFFF1029103B419222962576006F53 -:2018C0001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E67E -:2018E00000064229165610292576006F1B76F0FF00E2BD0030E600064229165610292576E2 -:20190000006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD00E4 -:2019200030E600064229165610292576006F1B76F0FF00E2BD0030E6000642291656102926 -:201940002576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2C6 -:20196000BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600064229165662 -:2019800010292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF2F -:2019A00000E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600064229AC -:2019C000165610292576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002292CA -:2019E000419623760100267601012292222B2128FFFF1029103B419222962576006F1B76E6 -:201A0000F0FF00E2BD0030E6000602FE422916561F7633002C924196237620002676390159 -:201A20002C922C2B2128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E60006EC -:201A400002FE422916561F7633002C92419623762000267639012C1832002128FFFF1029CD -:201A6000103B41922C962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300A2 -:201A80002292419623760100267601012218F8002128FFFF1029103B419222962576006FF1 -:201AA0001B76F0FF00E2BD0030E6000602FE422916561F763300229241962376010026768B -:201AC00001012218FA002128FFFF1029103B419222962576006F1B76F0FF00E2BD0030E63B -:201AE000000602FE422916561F763300309241962376800026760000301803002128FFFF61 -:201B00001029103B419230962576006F1B76F0FF00E2BD0030E6000602FE422916561F76F7 -:201B20003300329241962376000126760001321875002128FFFF1029103B419232962576E0 -:201B4000006F1B76F0FF00E2BD0030E6000602FE422916561F763300329241962376000107 -:201B6000267600013218FD002128FFFF1029103B419232962576006F1B76F0FF00E2BD00F2 -:201B800030E6000602FE422916561F7633003092419623768000267600002C18230021288C -:201BA000FFFF1029103B419230962576006F1B76F0FF00E2BD0030E6000602FE42291656EE -:201BC0001F763300329241962376000126760001321871002128FFFF1029103B419232964A -:201BE0002576006F1B76F0FF00E2BD0030E6000602FE422916561F763300329241962376CD -:201C00000001267600013292322B2128FFFF1029103B419232962576006F1B76F0FF00E233 -:201C2000BD0030E60006422916562376390110292576006F1B76F0FF00E2BD0030E60006A3 -:201C4000422916562576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76BD -:201C6000F0FF00E2BD0030E6000602FE422916561F7633002C9241962376200026763901F7 -:201C80002C1837002128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E6000624 -:201CA00002FE422916561F7633002C92419623762000267639012C922C2B2128FFFF1029CC -:201CC000103B41922C962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330040 -:201CE0002C92419623762000267639012C1833002128FFFF1029103B41922C962576006FDF -:201D00001B76F0FF00E2BD0030E6000602FE422916561F7633002C924196237620002676FF -:201D200039012C1822002128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E664 -:201D4000000602FE422916561F76330038924196237600082676000038189F002128FFFFCA -:201D60001029103B419238962576006F1B76F0FF00E2BD0030E6000602FE422916561F768D -:201D800033003892419623760008267600003892382B2128FFFF1029103B419238962576FE -:201DA000006F1B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD0030E663 -:201DC0000006422916562376390110292576006F1B76F0FF00E2BD0030E6000642291656FE -:201DE0002376391110292576006F1B76F0FF00E2BD0030E600064229165610292576006F68 -:201E00001B76F0FF00E2BD0030E6000602FE422916561F763300309241962376800026769A -:201E20000000301801002128FFFF1029103B419230962576006F1B76F0FF00E2BD0030E6B6 -:201E4000000602FE422916561F7633003092419623768000267600002C922C2B2128FFFF33 -:201E60001029103B419230962576006F1B76F0FF00E2BD0030E6000602FE422916561F7694 -:201E800033002A92419623761000267610012A922A2B2128FFFF1029103B41922A9625761C -:201EA000006F1B76F0FF00E2BD0030E6000602FE422916561F7633002A924196237610009D -:201EC000267610012A1802002128FFFF1029103B41922A962576006F1B76F0FF00E2BD008A -:201EE00030E6000602FE422916561F76330024924196237602002676000024181F002128BF -:201F0000FFFF1029103B419224962576006F1B76F0FF00E2BD0030E6000602FE4229165696 -:201F20001F763300269241962376040026763D012692262B2128FFFF1029103B4192269670 -:201F40002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196237677 -:201F600002002676000024180F002128FFFF1029103B419224962576006F1B76F0FF00E2B4 -:201F8000BD0030E6000602FE422916561F763300269241962376040026763D01261826005F -:201FA0002128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000602FE422917 -:201FC00016561F7633002492419623760200267600002492242B2128FFFF1029103B419266 -:201FE00024962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330026924196B4 -:202000002376040026763D01261826002128FFFF1029103B419226962576006F1B76F0FF01 -:2020200000E2BD0030E6000602FE422916561F763300249241962376020026760000241846 -:2020400008002128FFFF1029103B419224962576006F1B76F0FF00E2BD0030E6000602FEDB -:20206000422916561F763300269241962376040026763D012692262B2128FFFF1029103BE7 -:20208000419226962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300249217 -:2020A0004196237602002676000024180C002128FFFF1029103B419224962576006F1B76D7 -:2020C000F0FF00E2BD0030E6000602FE422916561F763300269241962376040026763D01B1 -:2020E0002692262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000638 -:2021000002FE422916561F76330024924196237602002676000024180E002128FFFF102992 -:20212000103B419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300E3 -:20214000269241962376040026763D0126183E002128FFFF1029103B419226962576006F99 -:202160001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6D5 -:20218000000602FE422916561F76330028924196237608002676080128180F002128FFFF2D -:2021A0001029103B419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7659 -:2021C000330028924196237608002676080128180F002128FFFF1029103B419228962576AF -:2021E000006F1B76F0FF00E2BD0030E6000602FE422916561F763300289241962376080064 -:2022000026760801281803002128FFFF1029103B419228962576006F1B76F0FF00E2BD0051 -:2022200030E6000602FE422916561F76330028924196237608002676080128180300212880 -:20224000FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE422916564F -:202260001F7633002A92419623760800267608012892282B2128FFFF1029103B4192289654 -:202280002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330028924196237630 -:2022A000080026760801281802002128FFFF1029103B419228962576006F1B76F0FF00E267 -:2022C000BD0030E6000602FE422916561F76330032924196237600012676000132187500F5 -:2022E0002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE4229C8 -:2023000016561F7633003292419623760001267600013292322B2128FFFF1029103B4192F8 -:2023200032962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003292419656 -:202340002376000126760001321831002128FFFF1029103B419232962576006F1B76F0FFDB -:2023600000E2BD0030E6000602FE422916561F76330032924196237600012676000132926D -:20238000322B2128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE35 -:2023A000422916561F7633002E92419623764000267600002E922E2B2128FFFF1029103B8E -:2023C00041922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E92C2 -:2023E000419623764000267600002E1828002128FFFF1029103B41922E962576006F1B7626 -:20240000F0FF00E2BD0030E6000602FE422916561F7633002E924196237640002676000067 -:202420002E1820002128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E600068F -:2024400002FE422916561F7633002E92419623764000267600002E1838002128FFFF1029D3 -:20246000103B41922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330096 -:202480002E92419623764000267600002E1838002128FFFF1029103B41922E962576006F46 -:2024A0001B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000267636 -:2024C00000002E183E002128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E6D7 -:2024E0000006422916562376390110292576006F1B76F0FF00E2BD0030E6000602FE422943 -:2025000016561F763300229241962376010026760101221848002128FFFF1029103B4192A4 -:2025200022962576006F06000052A888C48A096509520763FF9CC4CDF8FF0790A8CAC4964A -:20254000A69245520D614E5208614F520D60C41A2000C418BFFF086FC418DFFF056FC41A0C -:202560002000C41A4000A59201520360C4187FFF02520360C41A8000C418EFFFC418F7FF25 -:202580000600BDB200D5013B008FC0DDA9A8A581A98AC47D01DDA5924652F76433D1008F03 -:2025A000C0DD34D0BF569C0CBF56940C1F76400335D03BD1BF56940836D0BF56940937D0AF -:2025C000BF56941038D0BF56940839D0BF56940C3AD0BF56940C3DD0BF569C053CD10092AA -:2025E000FE9C949641D00092FF9C94963ED0BF56940810D0BF56DC08BF56F408BF56940D50 -:20260000BF56EC1BBF569C12BE8B0600A9BD120F00770077BDB21F7671038BE60100A48BFE -:2026200050E8094088E23C004076C2AD88E6000000770077A9BF120FC18AA993B7FFFF919C -:20264000D497C18AFF90DC96BE8B06000852A927A4C50960089A01D54E9B40762190008D23 -:202660003B03972BAB9209520B60089AA78A01D54E9B40762190008D3B03BF5697010600E0 -:20268000A71EBDB2A492BDAA0152BDA22A60008F5070C08D40D01F76410300A822761F76D3 -:2026A000BE01408F71AC09CDFFF7A81A0004008F2CAC099709CDFFFD1F763700A81A000175 -:2026C00000A01F76BE0109971F76370002A81F763300321A0100321A0200237600011A7663 -:2026E00002523360008F5077C08DC0D31F764F0300A82276408F806F1F76BE01FDCDFFEFCC -:202700008076E7ABA58AA81A0020079716DD07CDFF3F1ADCA81A008007971F763700C518FE -:20272000CFFF408FA2ABC41A040004C21F763300321A04001F76370006A01F763300321A69 -:202740000800237600011A76D396A38A01D54E9B69FF089AC38640762190A2C4A2830BD0D2 -:20276000A28A0CDE0CDDC61A00400ADCC518FFDFCA18BFFFCA18DFFFCA18F7FFCA18FBFF85 -:20278000CA1A0200CA1A0100C418FFBF92CCE0FF0BD00150929640764E90A38AA70640761F -:2027A0009390D392025205601F76BF01081A0400C38A099ABF56E402A38A4076B390408D7F -:2027C00033030CD0932BA28A008D9E01932B9B2B0BDCC41A4000CA1A2000BE82BE86BE8B77 -:2027E00006001F764103BF5602011F764F03BF5602021F764003009606000002008D42039A -:20280000941E0600BDB2BDAAA486008D3A0392923660A9AA13FF6700A98A008D36030102B4 -:202820000156C4009206008D3803920F0466C28ABF56E40208D092C5A7C408D0090201DE6F -:2028400092C2C207A98A008D3603C792C4969206008D3803920F4966C28AE446FE6CA28AF3 -:20286000099A4076B390D292025205601F76BF01081A0400008D9E01922B376F008D3803CD -:20288000928A408D3803A492008D36030190A98801DC9AA89206008D3803920F0466C28A80 -:2028A000BF56E402A6920B6008D092830902C207A98AC592A7FFFF90C4960D6F08D0928337 -:2028C000A5C408D0090201DE92C2C207A98AC592FF90C496008D36039206008D3803920F76 -:2028E0000466C28AE446FE6C1F763300211A0001BE86BE8B0600BDB200BEACA0BDAAA486ED -:20290000BDA2A98201DEA61B3075FD69D292025205601F76BF010818FBFF00BE01DEA61B98 -:202920001027FD69408D3603A9AB08D09AA20109921E008D3A03922BC28AE446FE6CA28A3F -:20294000089A4076B39001BE008D38030102A30F92C21C68A7AB0902C207A98AC792C496BC -:20296000C28AE446FE6C00BE01DEA61BE803FD69A28A099A4076B390D292025210601F7643 -:20298000BF01009A081A04000B6FC28A0902A7ABBF56E401C207A98AC792C496009ABE8211 -:2029A000BE86BE8B0600BDB2BDAAA486EFFF2A01C28AFCCCFF00A958EC47EDFF1D01408D4D -:2029C000A0019A92E0FF1E01408D3B039A920152116000BE408D3D03BF569A01408D3403B2 -:2029E0009AC2408D3F039A2B408D3E039A2B0DD19A2B408D3F039A92E0FF0401408D3D0305 -:202A00009A924F60F2C4208F0000A9A8A60F06662F8F0000A9A8A60F0867608F00000AD107 -:202A2000208F0000F2A09AA80CD19A923A52E0FFE900408DA0019A922E60408D34039AC42C -:202A4000A692A94001DE9AC2066DF28A0356A008C496076FF28AA9A80109F21EA092C498E5 -:202A6000008D34039206E20FE8FFCC000FD10CD0BF569A33A28A099ABF5692334076B39016 -:202A8000408D3F03008DA001BF569A01BF569201EFFFB800008D3F03BF569201EFFFB200E4 -:202AA000408D3E039A923E60A0921F760403115425611F767B033354036033921F60A0881C -:202AC000408D31039A0EA60F0560408D33039A921560A0921F767B03325407603292056133 -:202AE000408D33039A920A61408D3F03008D3D03BF569A01922BEFFF8500408D32039A786C -:202B0000408D3E039A80019A013BA7949A96A9AAA781A98A0ED1089A9C78A28A4076B390E3 -:202B2000706F9A80019A013BA7949A96A9AAA781A98A0ED19C78408D3E039A9207520E60B8 -:202B40000DD19A9210520A60408D33039A9206600A9A1F767703A0941096408D3E039A9243 -:202B600002521A60A0920DD103529A78336842523166008FC0DD949203522C68A092335258 -:202B80000B600CD19A923A522560A09233520460008D3D03922B0DD09258408D3E03008FA7 -:202BA000C0DD9A9294540467A91B90012A68A28A099A4076B390408D3D039A2B0DD0408DCE -:202BC0003F03BF569A01408DA001BF569A01922B186FA28A099A4076B390408D3E039A2B06 -:202BE0000DD0408D3D03BF569A01408D3F039A2B922B076FC28ACC18DFFFC28ACC1A2000D4 -:202C0000C28AEC46EDFFD6FE1F7633000BDC211A0001C41A4000BE86BE8B0600BDB2BDAA04 -:202C2000A486A61EBDA2A582D292025205601F76BF010818FBFF408D360308D09AC292A226 -:202C4000008D3A03BF569201C28AE446FE6CA28A089A4076B390008D38030102921EC2839B -:202C600000BE0902BF56E501C207A98AC392A7FFFF90C496A692BE82BE86BE8B060022760D -:202C80001F76780316D0008F806F259294CDFCFF03901F76BE0118D0A8CA16961F767803B0 -:202CA000269294CDFCFF03901F76BE011AD0A8CA18961F7678032792019094CDFEFF1F76C2 -:202CC000BE01A8CA1BD01A961F767803289201901F76BE0194CDFEFFA8CA1B961A7669FF00 -:202CE000060016D0008F806F1F7678039492039018D02596949203901AD0269694920190E8 -:202D00001BD0279694920190289622761F76BE011618FCFF1818FCFF1A1A01001B1A0100EB -:202D20001A7669FF06001F7678031F9302531660008F880A1F76BF01A94002A8036C041A72 -:202D40000008A941036C041A0002A942036C041A8000A943036C041A080003533B60AB28B5 -:202D6000CB0BAA2800091F76BF01248F0000005202A90AA80360041A000801520360041A8E -:202D8000000202520360041A800003520360041A080004520360041A020005520360041A4D -:202DA000000106520360041A400007520360041A010008520360051A000809520360051A5D -:202DC00000010A5203600D1A20000B5203600D1A040001531E60AB2BAA28000B1F76BF0127 -:202DE000128F0000A94004A90CA8036C031A0008A941036C031A0001A942036C031A000264 -:202E0000A943036C0B1A0200A944036C0B1A1000060022761F76BE01408F806F06180000D1 -:202E20000F8F00F0A5C4071800FF08183F00091800FF1BDD0BDE1606A918C0FF161EA9A8FC -:202E400018C0A89219C0C618EFFF0B18DFFF0B18BFFFC518F7FF1A76008FC06F1F767803A8 -:202E6000BF561E0109D0CC92C4FF01F001901E721F76BF010192C3FF1F76780301F00190D6 -:202E800080FF1E721F76BF010192C5FF1F76780301F0019081FF1E729492C2FF01F001906C -:202EA00082FF1E941E960352036104520360BF561F010152036102520360BF561F03055288 -:202EC000036106520360BF561F0607520360BF561F0208520360BF561F04095209611F923C -:202EE000015208610552066106520461056FBF561F05BF5624011F92015203610652036091 -:202F0000BF5623010252036103520360BF5621010152036105520360BF5620010152036173 -:202F200003520360BF56220202520360BF56220103520F6101520D61065206611F76BF0117 -:202F40000D1A00100A6F1F76BF01021A8000056F1F76BF010B1A001006520E61035209614C -:202F6000015204610D1A0080096F0B1A0080066F0B1A0040036F021A800006520B610452D3 -:202F80000961025204610B1A0004066F0B1A0040036F021A000206520661045204610B1ADC -:202FA0000020036F021A0800227604520A6204522461015240610252346103522661446FBA -:202FC0000552116106524060088F8A021F76BE01059AA82801FC0AA81A1E1F76BF01021AF2 -:202FE0000800326F088F00001F76BE01049AA82801BC0AA81A1E286F088F49031F76BE015A -:2030000005020AA81A1E206FA928CB0BA82808091F76BE010A1E059AA828257C1A1E146F61 -:20302000088F8A0B1F76BE01059AA82801F80AA81A1E0A6F2FFF10161F76BE010A1E059AD6 -:20304000A82813BC1A1E1A7669FF0600BDB2BDAABDA202FE1F7678031F9200D200D30252AC -:2030600032601F76BF0116D0008FC0DB0992C1FF94CDFEFF01F016D116D00190A8CAA9CD69 -:20308000FDFF949616D0099203F01F766F030290A8CA9C9600CDFFF39492039089FFA8CAE7 -:2030A00000961F76BF010040036C0102A9860042026C02DA004A026C04DA0044026C08DA8E -:2030C00010D0947A1F7678031F9201523160408DC0DBA18A1F76BF01A183877620A116DCA1 -:2030E000C418FDFF16DD0992C3FFA18A03F00290C59816DCC418FBFF0992412B008F2ADE35 -:20310000C1FF01F00190A95DA606407646800356A902A18A1F766F0316D0079016DCC4983E -:2031200000CDFFE79192069089FFA8CA00961F7678031F9204525B60408DC0DBA18A1F7699 -:20314000BF0116DCC418FEFF01CC0004C9FF412BA95D008F2ADE20FFE8034076468016D9CD -:203160001F76BF010190C198014B026C01DA0148026C02DA0945026C04DA0942026C08DAB3 -:20318000014A026C10DA0147026C20DA0944026C40DA0044046CA9AA8009A9860149056C8D -:2031A000A9AA18FF0100A9860941056CA9AA19FF0100A986004B056CA9AA1AFF0100A986C7 -:2031C0000045056CA9AA1BFF0100A9860940056CA9AA1CFF0100A986004A056CA9AA1DFF1A -:2031E0000100A98610D0008FC0DB947A1F7678031F92065210601F76BF010046026D01DA19 -:203200000048026D02DA004B026D04DA10D0008FC0DB947A1F7678031F920552E0FF8900EB -:203220001F76BF010945036D01DA026F10DB0944036D02DA026F40DB0042036D04DA056F1B -:20324000A9A21CFF0100A9820044036D08DA056FA9A21DFF0100A9820046036D10DA056F2B -:20326000A9A21EFF0100A9820040036D20DA056FA9A21FFF0100A9820048036D40DA056FC1 -:20328000A9A21FFF0200A982004A056DA9AA8009A986056FA9A21FFF0400A9820043066D0F -:2032A000A9AA18FF0100A986056FA9A21FFF0800A9820045066DA9AA19FF0100A986056F9D -:2032C000A9A21FFF1000A9820047066DA9AA1AFF0100A986056FA9A21FFF2000A98200418B -:2032E000066DA9AA1BFF0100A986056FA9A21FFF4000A982004B066DA9AA1CFF0100A9861A -:20330000056FA9A21FFF8000A9820049066DA9AA1DFF0100A986056FA9A21FFF0001A982C1 -:203320001F76780310D0008FC0DB2EA2947A008FC06FCC92013B1F76BF01C4FF01F00190A3 -:2033400009D0A985A9860192C3FF01F0019080FFA9850156A2000192C5FF01F0019081FF61 -:20336000A9850156A2009492C2FF01F0019082FFA9850156A20017D0008FC0DB82FE947A76 -:20338000BE82BE86BE8B06000600A983C57C0600BDB2BDAABDA206FE1F767B03A482BF565A -:2033A00000010EDCEC92FF90A95AE492FF90A988A9AA37FFA6AFA986DC92FF90A988A9AA4E -:2033C00037FFA6AFA986D492FF90A98809D0A9AA37FFA6AFA9869492FF9008D0A959949272 -:2033E000FF90A988A9B237FFA6AFA98BFC92FF90A988008D3203A9B237FFA6AFA98BF49243 -:20340000FF90A988408FFFFFA9B237FFA6AFA98BA9A210FFA101A71E441EA98A9392C7962D -:203420000202BF56CC34407674AEA90E461EA28A465DA9B240764AAE419644830102A38ADA -:203440004076089244830102A38ABF56C534407608924192A90E461EC38AE446FE6CA9B29D -:20346000A38AA28340769B93C38AE446FE6CA9A210FFA101A983A38A4692A993FF91A7FF96 -:20348000FF90C597CD960602D52BDD2B4076089286FEBE82BE86BE8B060006000600A98AE8 -:2034A000C4920600A988BDB21F767103A9A8008D3203A48BBF560101BDAA10FFA101408FC7 -:2034C000FFFFA71EA986A98A9193C7970202CF7E407674AEA9CDFF00A283A7FFFF90A18A22 -:2034E000D597DD960602E52BED2B40760892BE86BE8B0600BDB202FEA48B0EDCEC92FF9045 -:20350000A980E492FF90A988A70637FFA6AFA71EDC92FF90A9880129A70637FFA6AFA71EFA -:20352000D492FF90A988412BA70637FFA6AFA71EFC92FF90A9934196F492A838419620FF70 -:203540000080A70F0666A706415C40765297086FAD5CA792029B81DCA45C4076BC9B399A4D -:20356000A18A4076DF9782FEBE8B0600BDB2BDAA02FE1F767103A486BF5601010EDCEC929D -:20358000FF90A980E492FF90A988A70637FFA6AFA71EDC92FF90A988A70637FFA6AFA71E15 -:2035A000D492FF90A988A70637FFA6AFA71E012920FF0080A70F0666A7064076DC97419650 -:2035C000086FAD5CA792029B81DCA45C4076FF9BA9AA008D320310FFA1011F767803A71E4D -:2035E000A98BA98A9292408FFFFFC796BF56CF384192FF90D7964192A7FFFF90DF96189204 -:20360000A9CDFF00A7FFFF90E197E9960602407674AEA9CDFF0009D0A7FFA183A28AFF9056 -:2036200008D1F597FD960A029D2B952B4076089282FEBE86BE8B060002FEA61EAC281F00E4 -:20364000013B2256A60740FF0156A400C492A640036CFF90036FA7FFFF9082FE0600BDB2F9 -:20366000A48BBDAAE1C50AD09183A706A58A02194076A998A927A706A58A01194076A99875 -:20368000A1C5008D3203408FFFFF0EDF0356A908AB94A95AA78A9192C7960202BF56CF3330 -:2036A000407674AE0AD0A95DE106918A021940764AAEA988A20EA60F1061008D3C03912BF8 -:2036C000D192025205601F76BF01081A0400A18A099A4076B390096FA18A339A4076DF97F0 -:2036E000008D3C03BF569101BE86BE8B0600A4830EDDED92FF90A980E592FF90A988A70697 -:2037000037FFA6AFA71EDD92FF90A988A70637FFA6AFA71ED592FF90A98809D0A70637FF4A -:20372000A6AFA71E9592FF9008D0A90EE41E9592FF90A988E40637FFA6AFE41EFD92FF90AC -:20374000A988E40637FFA6AFE41EF592FF90A988E40637FFA6AFE41E02020156E4000AD0EA -:203760001F767B033A9AF4C394C3BF5600014076DF9706000600BDB2BDAABDA2A482008D1E -:20378000A00193923D61408DA0010FD09B2B935A008FC0DD013BA9A8A281A98AC49203520B -:2037A0003268A91B90012F66A29233521A61008FC0DDA9A8A281A98AC458A059408FFFFF9C -:2037C000A38A82D981D8A1880EDC035694089CCAA959A606407674AEA188A90EA60F05601A -:2037E0000CD0A292937A1C6FD392025205601F76BF01081A0400A38A099A4076B390A928EE -:20380000FFFF0E6FD392025205601F76BF01081A0400A38A099A4076B390A928FFFFBE82BC -:20382000BE86BE8B0600BDB206FEA48B0EDCEC92FF90A90E421EE492FF90A988420637FF91 -:20384000A6AF421EDC92FF90A988420637FFA6AF421ED492FF90A98809D0420637FFA6AF80 -:20386000421E9492FF9008D0A90E441E9492FF90A988440637FFA6AF441EFC92FF90A988D7 -:20388000440637FFA6AF441EF492FF90A9880DD0440637FFA6AF441E9492FF900CD0A90E4F -:2038A000461E9492FF90A9880BD0460637FFA6AF461E9492FF90A9880AD0460637FFA6AF11 -:2038C000461E9492FF90A9880ED0460637FFA6AF461E94CCFF0004520A6105521260420654 -:2038E000448A46C4A6934076FF9B076F4206448A46C4A6934076BC9B3C9AA18A4076DF975E -:2039000086FEBE8B0600C4A0D41A01000600C4A0D41A02000600D493009A039100530260D7 -:20392000019A06001F76BF010118F7FF06001F76BF01011A08000600227608D0408F806FD0 -:203940001F76BE0195CCFCFF015008960BDD08CCF7FF0450089608CCDFFF10500896081854 -:203960003FFF1F76BF01C51A08000118F7FF1A761F76C10169FF0002BF560007BF56011F1C -:20398000022BBF56040C0A2800800B2B0C2BBF560F10D42BC41E001A800006001F767603F3 -:2039A0002588BDB2A48BA6921352E6FF5801C07612C10129A7060456A601A71EC7C5207619 -:2039C000C18A260ED40F0561BF562511EFFF470108D091C5673E1F767603252B262BD11833 -:2039E000F7FFD118FDFFEFFF3A011F76C1010246ECFF3501C18A1F767603260EC407A71EE6 -:203A00001F76C10107921F767603C796BF562513260AEFFF24011F76C1010246ECFF1F0111 -:203A200007921F767603BF5625112796EFFF17011F76C1010246ECFF120107921F7676038D -:203A4000BF56250F2796EFFF0A011F76C1010246ECFF050108D091C5673E1F76C101074066 -:203A60000B6DD118FBFF1F767603D118FEFF252B262BEFFFF4001F767603BF562509EFFF35 -:203A8000EE001F76C1010246ECFFE90007921F767603BF56250B2796EFFFE1001F76C101F6 -:203AA0000246ECFFDC0007881F767603277EC18A260ED40F0561BF562507EFFFD00008D016 -:203AC00091C5673E1F767603BF562509EFFFC7001F76C1010246ECFFC20007921F767603F2 -:203AE000BF5625072796EFFFBA001F76C1010246ECFFB50007921F767603BF56250527963E -:203B0000EFFFAD001F76C1010246ECFFA800079208D01F767603279691C5673E1F76760393 -:203B2000BF562503EFFF9B00D140086CBF5625010AD0D11A040091C5673ED141ECFF8F00AF -:203B40001F7676030AD0BF56250DD11A080091C5673EEFFF84001F76C101BF56008F082BA8 -:203B6000021A20001F767603BF562512776F1F76C101BF56008FC18AE4920896021A200033 -:203B80001F767603BF562510696F1F76C101BF56008708280003021A20001F767603BF5670 -:203BA000250E5C6F1F76C101082B021A20001F767603BF56250C526F0AD091C5673E1F76C2 -:203BC000C101BF56008708280005021A20001F767603BF56250A426F26801F76C101BF5601 -:203BE000008FC18AA706C407A71EC79208961F767603260A1F76C101021A20001F767603D8 -:203C0000BF5625082B6F1F76C101BF56008FC18AE4920896021A20001F767603BF562506E4 -:203C20001D6F0AD091C5673E1F76C101BF56008708280002021A20001F767603BF56250476 -:203C40000D6F1F76C101BF56008708280006021A20001F767603BF562502BE8B06001F7655 -:203C60003000A880A927A48E142820400002008FB4DD1F767803181E4076189A0052FD61CE -:203C8000A792A793C0FF0191A995A880A7922661408FA8DDAB9220BE1F90A674A792A654CF -:203CA0000267A7881F767603A65C0356AB01283AA90E2AA82C1E008FB4DD4076109A4076EC -:203CC000189A0052FD61A93AA60DA98EAB92A694A927A792A69EA980DE601F763000142889 -:203CE000104006001F763000A880A927A48E142820400002008FB4DD1F767803181E4076C5 -:203D0000189A0052FD61A792A793C0FF0191A995A880A7922661408FAEDDAB9220BE1F9033 -:203D2000A674A792A6540267A7881F767603A65C0356AB012E3AA90E30A8321E008FB4DD22 -:203D40004076149A4076189A0052FD61A93AA60DA98EAB92A694A927A792A69EA980DE60EF -:203D60001F76300014281040060002FE1F76760338C5008FB4DD673E22761F763400008F2C -:203D800027B01CA81A7669FF407634AF1F7671030F8F40423A0642A8C00097B0A9BD120F16 -:203DA0000077007702E84116008F16DE89E60000407673AF2376002082FE060002FE227633 -:203DC0001F7678031F9204520460008FB7A6036F008F9EA01F7634001AA81A760F8F404202 -:203DE0001F76710369FF3A0642A8C00097B0A9BD120F0077007702E8D123008F0EDE89E6E4 -:203E00000000407673AF1F7630000C2820402376001082FE0600BDB2BDAABDA240767FA632 -:203E200000D3103B69FF4076C1B0267600002F760000407684B14076A3AF407696941F762C -:203E40007803009A1E9340764CA90D9A40767E91418F00C201D4A9A04076CD90418F00C230 -:203E600002D4A9A04076CD904076429C4076FE93008FC06FA48300D20BDC0CDDC51A0100CE -:203E8000C41A0100012920FF50C3407692AF008FC06FA48301DAA2920EDC0FDDC51A010046 -:203EA000C41A01000A52EF64008FC06FA4830BDC0ADDC51A0100C41A01004076CC93407637 -:203EC0005BB11F767803109B1E9240769BB140766B9C4076E0B01F7678031F9204520561E9 -:203EE000407608A84076378440766385407658A04076D3831F7678031F9206520360407661 -:203F0000C4AA1F767803C076C0DB1E927EDFC79622761F76C001BF56292F1A761F765C0309 -:203F200005926861052B00D2008FC0DB013BA9A8A281A98A60D09488A6925861008F00DF67 -:203F4000A9A8A281A98AA692C40AC4544F66408FFEDEC42BA9A0A281A98AC4928052086816 -:203F6000008FFEDE013BA9A8A281A98AC42B013B086F109AA794A9CCF0FFC4968052F16784 -:203F8000008FFEDEA9A8A281A98AC4800356A203408FF0D8A61EA792C3FFA927A606AB0D43 -:203FA0000156A500A7CD0F00A82DC59262FFA988E161013B0A6F008FFEDEA9A8A281A98ABB -:203FC000A692A0FFA988C40AA640F66C408DFEDE013BA9B2A281A98B008FC0DB69FF009A00 -:203FE000C193407639AAC108030001DAA29202529C647FD0008FC0DB9441076C7FDC69FF21 -:20400000C418FDFF4076549F7FD0008FC0DB9442076C7FDC69FFC418FBFF40768E9E7FD093 -:20402000008FC0DB9443076C7FDC69FFC418F7FF407658A07FD0008FC0DB9445076C7FDCA9 -:2040400069FFC418DFFF40765C8069FF4076B3951F7678031F920152136016D0408FC0DB6F -:204060009592A58AC1FF01F016D0A3CE0356A9027FDC0790C49895CC0400C1FFA95B1F92B6 -:2040800006525A607FD0008FC0DB94921F767C03A99300B6D6FFC5FF01910190A9880292E8 -:2040A000026001B6A892A7CE1B61008FC06FA4831F7678030BDDC51A00401F92065207614F -:2040C000045205610DDCC41A0020056F1F76BF01041A0800008FE8031F767A033EA81F7647 -:2040E0007C03039200B60297026001B6A693A7CF16611F7678031F931F76BF010B1A0004DE -:2041000006530661045304610B1A0020036F021A0800008FE8031F767A033EA81F767C03C2 -:20412000037E1F767A033E0607601F76BF010D1A00400D1A000400D2A2920461408D40D012 -:20414000036F408DC0D3A18A40764899A91BFFFF53611F76BF0100BE0F1A01001F767B0305 -:20416000375214C2116237523061335208623352386103523E61065238613E6F34522D61A0 -:2041800035522761396F3A5208623A5212613852186139521261306F3B5207613C522C60C4 -:2041A000A18A4076A099286FA18A40764799246FA18A40760499206FA18A407607981C6FE2 -:2041C000A18A40764398186FA18A4076DA97146FA18A4076DB97106FA18A407655970C6FAD -:2041E000A18A4076BC98086FA18A4076B79E046FA18A4076DF9E01DAA2920252E3FF90FE39 -:204200009C6FBDB200BE00D0408FC0DBAA2B008F80DCA9A8A00DA98A9580C427A70EAB0FCC -:204220000361C47F01BE01D8A0928052F168A6921061408D80DC809AA18A407685AE80D092 -:20424000A82802019196A18AA9287E3F4076BC9BBE8B0600BDB200BE008DA101A9A8A60DEF -:20426000A71EA9A8A60DA98301DE0EDFC7929596A6920852F468A483408D9E010EDD035634 -:20428000E508DD58EDCAA988A9A8408FC0DB10FFA101957EA983BF569C010A02407608925B -:2042A000BE8B0600BDB2BDAABDA202FEA4860EDC0356E408DC2FECCAA927A9AA10FFA1018C -:2042C000A71E00D51F767B033392C7960356AB01BF56CF03D796AB922061A588AA92A67277 -:2042E000008FC0DB03D1A9A8A60DA98A0356A501A980A9AA10FFA101A61EA792A17204D079 -:20430000C492C7FF9E96A792A07201DDC492FF909696AB92A554E2660356AB014196A9937D -:20432000039A408FFFFFA894A959A9AA10FFA101A982A98AA10E407674AEA9CDFF0004D0A3 -:20434000A7FF9B974193A073FF90AB280500089B9396AB9241944195A958069A4194A980E4 -:20436000079A4194932BA758A859932BA958A28AA383A10E932B008D9E019B2BBF569201F1 -:204380004076089282FEBE82BE86BE8B0600BDB210FEAD5C89DCA45DAD5CC07600C18FDC23 -:2043A000A45C08F6852400D0C07609C105F68424008FC0DB942B01D8A0928052FC68A4C550 -:2043C0001F7678031E921F7678037EDFC7961F920452086160D162D0BF569C0ABF56940814 -:2043E000116F1F76700300D0BF562002AD5C8FDCA45C9492008F22DC949601D8A09206527A -:20440000F6681F76780324921F767003BF5621651A611F7678031E881E92095283DE0260D6 -:2044200004BE00D00129008F34DC0356A603C07601DDA00D0156A700C792949601D8A092D2 -:204440000852F4681F7678031F920152116000D0008FC0DBA9A8A00DA98A01D830D1A092EA -:20446000BF569C46105248D1BF569C3CF2681F7678031F920252216000D0008FC0DBA9A8A2 -:20448000A00DA98A01D830D1A092BF569CAA065248D1BF569C96F26806D0008FC0DBA9A872 -:2044A000A00DA98A01D830D1A092BF569C73085248D1BF569C69F2681F7678031F920352EF -:2044C000116000D0008FC0DBA9A8A00DA98A01D830D1A092BF569C46145248D1BF569C3CD1 -:2044E000F2681F7678031E9209521B6000D0013BAD5C89DCA480008F80DEA7069481A71EBA -:20450000008F08DCC792949601D8A0920F52F1683DD1008FC0DB3ED0BF569C46BF569446B4 -:204520001F7678031F9206522560008FC0DB30D032D19428A401A4C531D09428A40133D081 -:204540009C2884037ADF9428840348D094282C0149D094282C014AD0942820034BD09428A1 -:204560002003C792A4C56ED16FD09C967BDFC79294961F76780323920A6100D0008F30DC2E -:204580009428000801D8A0920452FB684076D38390FEBE8B0600BDB2408D80DCA9287E3F84 -:2045A000A8280201A18A4076FF9B809AA18A407685AEA98080D0A988910EA70F0E60A688E4 -:2045C000012920FFFFFFA60F08611F7678031E887ED0910EA60F16614076549F408DC0DB96 -:2045E0007FD0912B40768E9E1F7678031F92015217607FD91F765C03C11A10000F28FFFFD7 -:204600000F6F00D0008F80DC9492008FC0DB949601D8A0928052F7681F7670033F2BBE8BF0 -:2046200006001B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2FD -:20464000BD0203E2BD0330E6000602FE69FF42291656227601021F767803015610002376F0 -:2046600000102676391110291A767FD0008FC0DB944F046D69FF40765AA51F765C03040A8F -:20468000049214520468042BBF56050116D1008FC0DB7FD09C9294CA0190A9880C9301F129 -:2046A0000191A6CB10601F7678031F93065306611F76BF010B1A0008146F1F76BF010B1A86 -:2046C00000200F6F1F7678031F93065306611F76BF010F1A0008056F1F76BF010F1A002022 -:2046E0000653E1FF4B011F765C03120A12930A53E0FFA1001F7678031F931F765C03055395 -:20470000122B0360189322601F7678031F93015305601F765C03179319601F7678031F9378 -:2047200006530F6104530D61025306611F76BF010B1A0004226F1F76BF010B1A00401D6FDA -:204740001F76BF01021A0002186F1F7678031F9306530F6104530D61025306611F76BF01FE -:204760000D1A00040A6F1F76BF010D1A0040056F1F76BF01041A00021F765C0316930F60E4 -:204780001F7678031F930353136101531161065319601F76BF01021A8000186F1F7678036D -:2047A0001F9303530F6101530D61065306611F76BF010B1A00100A6F1F76BF01041A800009 -:2047C000056F1F76BF010D1A00101F765C03179315601F7678031F9306530B610353046184 -:2047E00001531561196F1F76BF010B1A0040226F1F76BF01021A80001D6F1F7678031F93DD -:204800000653146103530D61015306611F76BF010B1A00800F6F1F76BF010D1A00800A6F5E -:204820001F76BF010D1A0040056F1F76BF01041A020000523E601F765C03128062D0940E89 -:20484000A70F37601F7678031F9303530F6101530D61065306611F76BF010D1A00100A6FFC -:204860001F76BF01021A8000056F1F76BF010B1A001006530E6103530961015304610D1AE1 -:204880000080096F0B1A0080066F0B1A0040036F021A800006530B61045309610253046153 -:2048A0000B1A0004066F0B1A0040036F021A00021F765C03009A199300530260019AA693A2 -:2048C000A9CF04611128F401132B110AC4E21100197E12E8D01F14AD5364130A1393019170 -:2048E00000B6112B149713930791026101B6A692157F3C601F7678031E92095224611F7626 -:204900005C0316D0BF56160194937FD0D0FF9492C9FFA8CAA940026C167F0C42116D0C437A -:204920000C6D0C44036D172B2B6F1592009B00520260019B1797246F14921796216FBF5697 -:2049400017011E6F1F765C030C41BF561801036C1492026F009A0C401796036D162B106FFA -:2049600014931492189716960B6F14931488149216971896177E046F69FF407633AB82FE4D -:20498000AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300DF -:2049A000303BF1FF177602761B76F0FF0500BDABBDAABDA8BDA0BDC2BDC300E2BD0003E2FE -:2049C000BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300229257 -:2049E000419623760100267601012218FA002128FFFF10291F765C030E9202610E0B1F764F -:204A00005C030D92E0FF38011F765C030F920D61FF9C0F960A60008FC0DBA4837FDC7FDDCB -:204A2000C518EFFFC41A04001F7678032392196100D1008F0871013BA9A8A181A98AD49269 -:204A4000C3FFA988008FE9DEA9A8A181A98A69FFA192C47E4076018601D9A1920452EA649C -:204A60001F7678031F92065237601F76C4010992C3FFA90EA9BD120F0077007763D0808D63 -:204A8000C0DB8BE60000008F40D78CE6010069FF13E29201407660B06ED16FD0013B008FF2 -:204AA000C0DB9A92929EA985A9BD160F6FD0C8E29402007720E7800089E609004076C2AD2C -:204AC00050E800C8007790E8008800778CE600001DD013E292001F7678031F92055240604A -:204AE00000D11F765C0307921F7674033D0A3D5402623D2B008F0871013BA9A83D81A98A22 -:204B00003D2DC492C3FFA90EA9BD120F69FF008F40D712350156A4008BE60000407660B04E -:204B2000013B1F767403008F88DD8EE60000A9A83D81A98A13E2C400008F80DEA9A83D81CE -:204B4000A98A01D9C492085205613D924076E482046F3D924076B780A1920652C3641F76D1 -:204B600078032292E1FF89001F76740301293E0640FFA61E013B3C85A60F39691F767803BC -:204B8000229200D13465008F0871013BA9A8A181A98A1F7674033D2D1F767803C492C3FF6F -:204BA000A90EA9BD120F2212A194A92D008F40D769FF8BE6000012350156A400407660B0F1 -:204BC0001F767403A192013B008F88DD3D2D1F7678032233AB72A9A8AB81A98A01D98CE67E -:204BE0000000A19213E2C4002254CE641F7674033C0A3C92FF9CA9853E0F3E681F76780335 -:204C0000229200D11F7674033C2B11651F7674033D2D1F76780369FF2212A1944076B780E2 -:204C200001D91F767803A1922254F1641F765C0306921F767403029C3D0A3D5402623D2BB2 -:204C40001F76780320931F7674033D9200530F611F765C03065402600D9A1F7674033D93C0 -:204C60001F765C03069F015302600C9A69FF40762094026F0D0B008F0071A4831F763300F5 -:204C800019DC01DDC51A0040C41A1000BF562101103B419282FE2296AFE2BE03AFE2BE0204 -:204CA000AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE86BE870300303BF1FF177633 -:204CC0000276005206601F76BF01041A0001056F1F76BF01021A00010600005206601F76F7 -:204CE000BF01041A4000056F1F76BF01021A400006004076EEA3019A4076FAA3009A4076E6 -:204D0000EEA301024076A0B1009A4076FAA31E024076A0B10600009A4076FAA31E0240761B -:204D2000A0B1019A4076EEA31E024076A0B1009A4076EEA31E024076A0B10600BDB2BDAA35 -:204D4000BDA20EFE00D2A98BA288A492A52D0252A65BE3FFF000A9B2026301D256FFA98375 -:204D6000AC9205640452036301D3026FAC2BAC92A58B4B2B0B650A02421EA9B2C00097B092 -:204D80004B0AA98BAC924B54F762A9B20A650A02421EA9B2C00097B001DE58FFA98BF862F8 -:204DA000A292A58BA694A988026001BEA692AC944B2B0452A9880F650A02421EA9B2C00093 -:204DC00097B0AC80A98B4B0AA69281DFFC9CA72D4B54F362AC920263AC2B019A66FFA95864 -:204DE0000152026000D08076E803A9B242C2C00097B0441EA9B242C2C000A6B0A61E6402E6 -:204E0000421EA606C00097B0461E6402421EA9B2C000A6B0A61E0A02421EA606C00097B001 -:204E2000481E0A02421EA9B2C000A6B04A1EA61E460648074407A607046000D0A02DAC5A69 -:204E4000A3921561039A013B4B96AD888ADEA6880356A9010156A600C6060960AC924B5410 -:204E600006610F024B0BC61E4B92F062A2922061019A013B4B96AD5D8ADDA55D0356A9016E -:204E80000156A5000F02C50F09614B9203520661019C04524B96F0640B6FAD5D8ADDA55D19 -:204EA0000ABE4B920356A9010156A500C5C2009A4B2B013BAD5D8ADDA55D0356A9010156AE -:204EC000A5008076B0DAA606C507A61EC685C51E019A4B2D66FFA0CE046180020156C5005A -:204EE0004B0A4B920452E76448A3AB92AA2BFF90A927A9A9AC28180037FF5AFF4A064E1EFA -:204F00004E92FF904E964D2B4E06ABCAAACB4E1E4606009BFF903FFF5AFF4E06ABCAAACBD1 -:204F20004E1E44063B565AFF4E06ABCAAACB4E1E026F4EB2408FE4DE013BA9A0A481A98A48 -:204F40004B2BC45BA3921052246200D14E92013B0190A9884E0640FF4E1EA692407606A459 -:204F600001D9A1920852F364A35A00D1A293A292B0FF0190A85A407606A401D9A192065235 -:204F8000F664407618A401DB4B0A4B920452DB648EFEBE82BE86BE8B060011D0008F107053 -:204FA00094920F9004520E60CCCC8001C6FF0252096022761F76C001BF562555BF5625AA6C -:204FC0001A7669FF060022761F76C001BF5629681A7669FF0600BDB202FE1F76C001A8884C -:204FE000A9801143026C257611CC80010561227611187FFE1A762276408F1070A58AA7924A -:2050000011D00F9001DCC41A400095CDF0FFA8CA21961A76A79204600102A98B026FA759C6 -:20502000A92880C3A828C90169FFAC1E0556A100407670A5A1A91140FF6C22761118BFFF44 -:205040001A76A6930153036102530A602276A69211CD7FFE039086FFA8CA11961A76A693EB -:205060000A60A9B2013BAC281E0040FF2256A10741FFA98BA69301530A60A9B2013BAC2808 -:205080001E0040FF2256A10741FFA98BA69302530960A9B2AC281F00013B2256A10740FF3F -:2050A000A98BA7921460A69203521160227611CC7FFFA91A000169FF119620FFDA05407697 -:2050C000A0B11F76C001111A80011A761F76710382FE69FF3AB2BE8B0600BDB202FE2276BA -:2050E0001F76C001BF561A011B2B1A92036001BE046F03561A01A9881F76710342C269FF89 -:205100003A06C00097B03E1E1F76C0011B92036001BE046F03561B01A9881F76710342C2A1 -:205120003A06C00097B0408D1070A18315D0008F200B3C1E0CDD1F762C0094CCF8FF01506C -:2051400014DC3596C41A04003418F7FFC51A0800787680001F76C0011C1A1000A18A1C1A1E -:2051600000041C1A00081C1A20000DDC10D91C1A00011C1A00101C1A00201C1A00401C1A46 -:2051800000801C18FBFFC41A01001D1A02001D1A04001D1A08001D1A10001D1A20001C1AFB -:2051A00004001D1A00041D1A00081D1A00101D1A00201D1A00011D1A00021D1A00401D1AB4 -:2051C0000080C11A0001201A0002201A0004201A0008201A0010201A00201A7669FF82FE9B -:2051E000BE8B0600407670A5049A029B407678A54076FAA5060002FE22761F762B0020288C -:20520000FFFF2128FFFF2228FFFF2328FFFF2428FFFF2528FFFF2628FFFF2728FFFF1A76FA -:205220001F76FFCF69FF38924196399241963A9241963B9241963C9241963D9241963E92FE -:2052400041963F921F762B0041962F9201F0019082FE06001B76F0FF0500BDABBDA8BDA097 -:20526000BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000669FF422913 -:20528000165600D1227601021F767803015610002376391110291A767FD0008FC0DB944FB7 -:2052A000046D69FF40765AA51F765C03040A049214520668042B1F765C03BF560501008F27 -:2052C000C06FA4831F76780306DDC51A01001F9206520E6104520C61025205610FDCC41AE7 -:2052E00000040A6F1F76BF010F1A0040056F1F76BF01061A00021F7678031F920652086106 -:20530000045206611F76BF010F1A0020056F1F76BF01061A080001021F767B031407A61E4C -:20532000008F204E141EA9A8A60F026714A8110A11920A520264112B0D92AC2B1261008FDF -:20534000C0DBA9A8AC0DA98A62D0949211540465019A66FFA172AC92019C0D54A92DF068D2 -:20536000100A109202520265102B7FD0008FC0DB9493A89216D094CAA940EDFF8300A84B12 -:20538000586D20FF204E140F306910920A60013B1F766F0300D401D569FF008540762BA494 -:2053A0001F767B03109201520A60008FC0DB013B01D569FFCC8501D440762BA4A192408D2C -:2053C000C0DB02D400D569FFD1CEA90E40762BA41F767B03109202527B60013B03D400D578 -:2053E000D98540762BA4746F1092076000D4000200D569FF40762BA41F767B03109201523E -:20540000076001D4000200D569FF40762BA402D4000200D569FF40762BA41F767B0310923D -:205420000252566003D4000200D540762BA4506F1092086020FFB82200D401D569FF4076A5 -:205440002BA41F767B0310920152086020FFB82201D401D569FF40762BA4A10E02D400D522 -:2054600069FF40762BA41F767B03109202523060012903D400D520FFFFFF40762BA4286F97 -:2054800069FF40760AB110920760013B00D404D50C8540762BA41F767B03109201520760BC -:2054A000013B01D404D50C8540762BA41F767B0302D400D5120640762BA41F767B031092DC -:2054C00002520660120603D400D540762BA4AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E225 -:2054E000BE00BEC5BEC4BE83BE8ABE870300303BF1FF1776027602FE2276008F61A21F76F9 -:2055000035000AA81A7669FF407670B11F763300221A2000237601001F7678031F920652FE -:205520002360008F00711F76C401D4CCF0FF05500296DCCCF0FF0350039603CC1FFF105042 -:20554000039603CCFFF1A91A0005039603CCFF0FA91A00400396E4CCF0FF0750049604CCB9 -:205560000FFF205004961F7678031F9203521460008F00711F76C401D4CCF0FF02500296B6 -:20558000DC18F0FF03CC1FFF1050039603CCFFF0A91A000203961F7678031F92015228608A -:2055A000008F00711F76C401D4CCF0FF06500296DCCCF0FF0550039603CC0FFF4050039689 -:2055C00003CCFFF7A91A0007039603CCFF0FA91A00200396E4CCF0FF0350049604CC0FFFE0 -:2055E0006050049604CCFFF1A91A000104961F7678031F9202520960408F0071A58A02DC78 -:20560000C418F0FFDD18F0FF1F9205524C60408F0071A58A1F76C40102DCC41A0F00DDCCEA -:20562000F0FF0250039603CC3FFF3050039603CCFFF0A91A0006039603CCFF0FA91A00C0EA -:205640000396E5CCF8FF0A50049604CCBFFFB050049604CCFFF7A91A0007049604CCFF0FE5 -:20566000A91A00400496EDCCF0FF0550059605CC1FFF1050059605CCFFFEA91A000E0596D1 -:205680000518FF0FF5CCF8FF08500696061AF00006CCFFFDA91A000D069606CCFF0FA91A46 -:2056A00000900696408F0071C0760068A5C41F76C401A78A1AD019DD01DEC61A000119DC57 -:2056C000011A0008C51A1000001A10000018BFFF001A000F011A00401F763300BF56210135 -:2056E0001F76A001C41A000819CCFFFCA91A0004199697CCFFFDA91A00011A96BF560980C7 -:2057000000CC7FFCA91A0001009600CCFFE3A91A0008009600CC001CC9FFA92D019A66FF53 -:20572000A98800CC800304600102AC1E086F00CC8003013BC6FF80FFA985AC1E013BA68513 -:205740001F7671034456A900421E3A06C00097B0008FA60E42A8C00097B01F7678031F9360 -:205760001F76A00105960018FCFF025303602502026FBB021F76740382FE3E1E060034FE18 -:20578000A892FF9C0564105204640F9A026F009A22761F76BE01AB28F0FFAA28457F09CD33 -:2057A000FFDF013B08BEA81A001008D4A0A908B6099709CDFF3FA81A00400997A9851F763B -:2057C00080015AFF2AC25D56A000A5A92CA8AB2BAA28467F1F768401AB0302C3AB28FEFFC4 -:2057E000AA28FFFF00B60AC21F76800103BE00C31F76840100A0081E1F76800102A900C25A -:2058000000BE0002011960C2601A80F2081E000260C401190C1E000201191E1E000201199C -:20582000221E00020119181E14C21844FF6C16065E1E5E18FFFD5E1A00015D1800FF5D1ACB -:2058400005005E1A7F005E18FAFF5EC416C26018FFEF6006141E1844FF6D0002488F706470 -:205860001F768301541E088F7064541A010000A00031531A0200010200BE02A8541A0600A4 -:205880001F768001408FEAAE00D4301E54C5020232A82EA9008FBFAE1F76370008A01F7696 -:2058A0008001241E26C220C31F7637000AA81F763300321A1000321A2000237600011A7622 -:2058C0001F767A0369FF000200B6102B161EB4FE12C214C30600BDB206FE00021F767B033C -:2058E0000ED0141E94C4A606A80EA9580CD19CC5467EA0CC00804396A0CC00404296A0CC26 -:2059000000204196A018FF1FA70645974392447F00520861A092805205674692008FC0DB6C -:205920009496429201D80861A092805205674592008FC0DB9496419201D80861A092805273 -:2059400005674492008FC0DB94961F76BF010F1A010086FEBE8B06001F767A031192A8887A -:2059600009611F7680010806A940046D0A06A9403E6C02D5A692013BAB28010001B6A572AF -:20598000AA2B1F768001A9A8A581A98308A90AC301B6C58500915AFFA692A772A9A8A78146 -:2059A000A983C5853FFFABCAAACBA71EA9A8A681A98A1F768401C48500915AFFA6853FFF23 -:2059C000AACBABCAA81A00E0061E04C322761F76800100022E1E1A760102041E1F76BF014A -:2059E0000E1A01001F767A03BF56110169FF0600009A019C1952FE640600005206601F7680 -:205A0000BF010D1A0010056F1F76BF010B1A00100600BDB21F76BF01BDAA0D1A0008BDA2D2 -:205A2000A95B01024076A0B100D1808DC06FA28AA392CEFF0BDCC41A008040768AAAA392B9 -:205A400080FFA95B01024076A0B10DDA0102C21A00804076A0B101D9A1921052E7641F761D -:205A6000BF010B1A0008BE82BE86BE8B06001F767A03008F5902BF563605372870173CA850 -:205A80000600BDB2BDAABDA202FE79D0008FC0DBAC1E013BA98B94854C82A61E4456A90030 -:205AA00042A2C00097B078D0A98342A2215694004456A100C00097B07FD0A607A5039449D5 -:205AC000046C7AD0013B9485A918FF0FA95AA91A0080407696AA7BD0A9B2408FC0DB34FF69 -:205AE000957AA61EA9B242A232FFA607C00097B0A98A42A2C802AC1EA9B24456A900C000A6 -:205B000097B01CD0A49E82FE289C9596BE82BE86BE8B0600A9280290407696AA1F76780365 -:205B20001F9206520F6104520D61025206611F76BF010F1A00040A6F1F76BF010F1A0040B4 -:205B4000056F1F76BF01061A0002060002FE1F767A033E060461010241563E003692380AB7 -:205B6000385462663C06382B3F607FD0008FC0DB94470A6D3A92019C392B90E5A9CCFF0309 -:205B80003A961860256F3792C0FF39540267390A3792390A395402673996C4E23900C4E212 -:205BA00037014FE800C84FE809803A9210E740000F617FD094480C6D8CE600003788013B6A -:205BC000A9BF120F42C2A9854076CEAA2D6F407617AB1F767A03008FC0DBBF563A017FDCE1 -:205BE000C418FFFE216F3C060119A61E3C1E20FF5802A60F136120FFF4013C0F0F6120FF32 -:205C000090013C0F0B6120FF2C013C0F0761C8023C0F046164023C0F0760407617AB1F769E -:205C20007A03BF563A0182FE06001B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2DF -:205C4000BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F7633003292B4 -:205C600041962376000126760001321875002128FFFF1029408FC0D369FFA58A40768A910D -:205C800040768F91103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE0066 -:205CA000BEC5BEC4BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0FF -:205CC000BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF14 -:205CE000422916561F763300329241962376000126760001321871002128FFFF1029408F29 -:205D0000C0D369FFA58A40768A9140766092103B4192329682FEAFE2BE03AFE2BE02AFE246 -:205D2000BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602761B766E -:205D4000F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2B9 -:205D6000BD0330E6000602FE69FF422916561F763300329241962376000126760001321824 -:205D8000FD002128FFFF1029408F40D069FFA58A40768A9140768F91103B4192329682FE03 -:205DA000AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300AB -:205DC000303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0074 -:205DE00003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F76330032924196F9 -:205E000023760001267600013292322B2128FFFF1029408F40D069FFA58A40768A914076AD -:205E20006092103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC525 -:205E4000BEC4BE83BE8ABE870300303BF1FF177602762276008F806FA483A4C41F76BE0196 -:205E600026DDC51A030027DE261A0C00A483261A3000261AC000261A000317DD261A000CD2 -:205E8000261A0030261A00C0C61A0300271A0C00271A3000271AC000271A0003271A000C5F -:205EA000271A0030271A00C0C51A0300A48328DD171A0C0016DC171A3000171AC000171AB0 -:205EC0000003171A000C171A0030171A00C0C51A0300281A0C00281A3000281AC000281A4A -:205EE0000003281A000C281A0030281A00C0C41A00C0161AC000161A0030161A000C1A7623 -:205F000069FF06002276008F806FA4C4A4831F76BE0118DEC61A030019DD181A0C00181ADB -:205F20003000181AC000181A0003181A000C181A0030181A00C0C51A0300A48369FF191AD4 -:205F40000C0014DD15DC191A3000191AC000191A0003191A000C191A0030191A00C0C51A53 -:205F60000300141A0C00141A3000141AC000141A0003141A000C141A0030141A00C0C41A03 -:205F80000300151A0C00151A3000151AC000151A0003151A000C151A0030151A00C0407604 -:205FA000B6AC0600227615D0008F200B1F762C0094CCF8FFA483A4C5A4C40150359614DD25 -:205FC000C518FCFF0CDF3418F7FFA4830DDE341A0400C41A60000EDDC41A1C00C41A030054 -:205FE000C41A0030C41A000EC41A8001CC1A4000C41A0040C41A0080211A0300C71A600027 -:206000002C1A1C002C1A03002C1A00302C1A000E2C1A8001C61A40002C1A00402C1A0080D8 -:206020002D1A0300C51A6000A4830FDD2E1A1C0018DC2E1A03002E1A00302E1A000E2E1A0B -:206040008001C51A40002E1A00402E1A00802F1A0300C41A0700381A38001A7669FF4076E7 -:20606000B6AC07F6007769FF0600BD3ABDB2BDAABDA202FE0129A9BF120F58FF5B61A85CE6 -:206080007F91A8088000421EA493D6FFA85CA9BF160F6761A85D7F91A8088000A859A958B4 -:2060A000A593D6FFA85DA493A571A8180001A697A418FF00A518FF007FDCA492A59EA796FB -:2060C0004D64A90801FF3E62A193A09236FFA859A958420635FF0EF6A11FA95BA3010AF639 -:2060E000A11F2D56A204A32DA03640FF0BF6A11F33FF009B30FF54FFA20CA39540FFA708EE -:2061000001001FF677FF200940FFA70801001FF677FF5AFFA7922265A90801FF1363A9A9BE -:2061200046FF7F91A85BA95AA625A79596FFA20CA395A9BD120F82FEBE82BE86BE8BBE8E62 -:206140000600009B57FFA8087FFF5AFFA693F260A8280080AA71AB92ED6F20FF0000EA6FBA -:206160005AFFA493A818000196FFA85CA9A9A8087FFFA81C0080A4CBDD6F58FF5AFF00BE48 -:2061800025610129A6920190A958A60640FFA407A71EC793A640046DA892C7FFA92DA09271 -:2061A00001520460A8CCFF00A92DAC58A592A0F201DEA092FF90A958A592408FC0DAC7FF0B -:2061C0009570A95DA9A9A60FDE66A5920600A71E8076C0DA0A6FA5928470FF90A95881DF43 -:2061E000A592C7FF9670A95DA706F660A59206000052A927FF76FFFF00BE3365A9A8013BDE -:20620000A681A983A793C592FF90A92FAA71A880009AA740046DB0FFA880056FB0FFA81C40 -:2062200001A0A880019C0852F564A9A8013BA681A983A793C592C7FFA92FAA71A880009A59 -:20624000A740046DB0FFA880056FB0FFA81C01A0A880019C0852F56401DEAB92A654CF62C8 -:20626000A79206001B76F0FF00E2BD0030E6000602FE422916561F763300329241962376D1 -:206280000001267600013292322B2128FFFF102901021F767A03100A1F768001061E1F76C1 -:2062A0003300211A0001103B419282FE329680E2BE00303BF1FF177602761B76F0FF050004 -:2062C000BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E652 -:2062E000000602FE69FF422916561F7633003292419623760001267600013292322B212855 -:20630000FFFF1029008F006169FF4076F8A91F76800102020C1E1F763300211A0001103B04 -:206320004192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE839A -:20634000BE8ABE870300303BF1FF1776027600021F763000008F000C0119021E1F767803A1 -:20636000408F100C000206A81F763000062B0119072BE41A1000041A20001F763000008FA0 -:20638000080C0A1E1F76300000020119121E1F76300000020E2B0F2B1F7678030EA816A0FA -:2063A000081E1F763000162B172B1F763000E41A1000E51A10000C1A20001F763000141A54 -:2063C00020001F767803181E101E060000E0E45003E2F40188E61000C48303E2D500C4836F -:2063E000F52BC483FD2BC483E51A1000C483E51A2000C483E518FFFBC483E518FFF7C48393 -:206400000002E51A0040D41E06000129BDB240FFBDAAA98B00D2086110024076A0B101DAA1 -:20642000A9B2A20FFA66BE86BE8B06001F76C001201A00104076B6AC2276008F200BA4C4EB -:20644000A4831F762C000ED015DE14DDC618F8FFC51A03003418F7FF3418FBFF94CCBFFF35 -:2064600020502E960FDC2ECCE3FF08502E962ECCFCFF01502E962ECCFFDFA91A00102E968C -:206480002ECCFFF7A91A00062E962E187FFEC418BFFF2E18FFBF2E18FF7F2F1A03001A767E -:2064A00007F6007769FF0600AD28000469FF1F5616561A5610E6000240291F760000022947 -:2064C0001B762276A928A4B1A828000001091B61C076A4B104290F6F009BA92401DF046C29 -:2064E0000429A82401DFA61EA1F78624A706A1810109A71EA92403635CFF043BA95901DF70 -:206500000900ECFF1A76A928FFFFA828FFFF01090E61FF76FFFF066F01DFBDC3A71E673E2F -:20652000BEC5A92401DFA82458FFF760407627B1407644B11B76F0FF0500BDABBDA8BDA0C9 -:20654000BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000669FF422920 -:206560001656227601021F76780301561800008FB4DD69FF1F7676033AC5673E1A76AFE23A -:20658000BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BE9 -:2065A000F1FF17760276BDB2CFE6010008D003E2BD040ED103E2BD0503E2BD0603E2BD076C -:2065C000AFE2F400AFE2D40510E394040CD012E39C1F0ED118E394DA0AE3C4A000E3E4C68F -:2065E00000E7BB0110E700010CD010E7C00003E29C0203E2940008D0F406941E03E2F40113 -:20660000AFE2BE07AFE2BE06AFE2BE05AFE2BE04BE8B0600022904295F565AFF42065F5676 -:20662000421E00021FF617564200AB06325602292076022904295F565AFF420656FF421ED7 -:2066400000021FF6175642003256022920765AFF00021FF617564200A9A920765AFF0002C9 -:206660001FF6175642002076103B1F7633002018FEFF222B242B69FF262B282B2A2B2C2B24 -:206680002E2B302B322B342B362B382B232B252B272B292B2B2B2D2B2F2B312B332B352B60 -:2066A000372B392B06001F763300201A01002128FFFF102969FF06000000A0E514AD09626C -:2066C000A0E51F76740314AD90E5B4562901156F4FE803C092E601008CB5050000E7CA00D1 -:2066E000007700E78A000077CFE812F0007700E75100007700E74000060002FE1F767B031C -:206700000E0AC4E20E00007712E8D01F14AD11640F0A0F920E2B0A5202600F2B0F3457048E -:206720000C96120603610002036F00020119121E82FE0600A928FFFFAA28FFFFAB28FFFF85 -:20674000A828FFFFAB0F04ED00D400BE0B6FA927A928FFFFA92FA4A9C488A928FFFF0209CA -:20676000A98AA6924076989C06000077006F1F767B03BDB238C5A959673E1F767B033CC59E -:20678000A70603ECA192673E1F767B033A0603ECA71E673E407642B1BE8B0600608F0000F2 -:2067A0001F767B03208F00FA04A006A80406081E0A2B0406046FA98A842BA9A81F767B03A3 -:2067C000060FFA68060022761F76C00169FF1C1A0800787680001A761F76C401028FE64990 -:2067E00069FFBF5618E0A9A84076A0B10600408F00C0008F000D2276009A85C4019C8052B1 -:2068000084C2FC641A7669FF06001F767B0336A806001F767B0338A8060006001F767B03CB -:0E6820003297339606000119C356FFFF06009B -:20682E001201000000C0A78B0000A78B0000A78B0000A78B0000A78B0000A78B0000A78B19 -:20684E000000A78B0000A78B0000A78B0000A78B0000A78B0000A78B0000758C0000688C09 -:20686E000000F88F00009A8B00000F890000B18B0000828C0000458A00003A8A00002F8A30 -:20688E000000248A0000198A00000E8A0000038A0000F8890000ED890000668A00005B8AA8 -:2068AE000000508A0000DD8A0000C28A00000F890000B9890000A089000005900000718AAA -:2068CE000000D2890000078E0000D18D00009B8D0000658D00002F8D0000F98C00000F8969 -:2068EE0000000F890000228E0000EC8D0000B68D0000808D00004A8D0000148D00000F8969 -:20690E0000000F890000CF8E0000B48E0000998E00007E8E0000638E0000488E00000F89A0 -:20692E0000000F890000DE8C0000C38C00000F8900000F8900000F8900000F8900000F8900 -:20694E0000000F890000A78A00008C8A0000F28B0000BC8B00000D8C0000D78B00000F89F3 -:20696E0000000F890000DD8F0000C28F0000A78F00008C8F0000718F0000568F00000F89E6 -:20698E0000000F890000A88C00008D8C00000F8900000F890000498B0000F88A00000F89E6 -:2069AE0000000F8900007F8B00002E8B0000648B0000138B00003B8F0000058F0000208FD4 -:2069CE000000EA8E00000F8900000F8900000F8900000F8900000F8900000F8900000F8909 -:2069EE0000000F8900000F8900000F8900000F8900000F8900000F8900000F8900000F89C9 -:206A0E0000000F890000858900006A8900004F89000034890000198900000F890000288C4C -:206A2E000000438C00002C012C01000000000F00160014000A003C000A0008000600080080 -:0A6A4E000600080033000B000A00E8 -:206A58002800000012C1219B0000AE9B00000F9B00009E9B0000029B0000909B0000F59AE4 -:206A78000000799B0000DB9A0000699B0000CE9A00005F9B0000B29A0000529B0000A59A97 -:186A98000000449B0000989A0000389B0000829A00006D9A00000000DF +:2003C000F93B6C09F93B6C09F93B0000803FFFFF08DE00000000FFFF09DE00000000FFFF11 +:2003E0000ADE00000000FFFF0FDE00001400FFFF12DE00000100F0FFB0DA00003F00060069 +:200400005B004F0066006D007D0007007F006F00400000000000000079000000FFFF75DFE2 +:2004200000000600FFFF77DF00000000FFFF78DF00000000FEFF7CDF000000000000FFFFB7 +:200440006CDF00000000FFFF6DDF00000000FFFF6EDF00000100FEFF9CDF00005DB6000030 +:20046000FEFF9EDF00005DB60000FEFFA0DF000000000000FEFFA2DF000000000000FFFFF7 +:200480003CDD00000000FFFF3DDD00000000FBFF8EDF000008000C00100000000400FFFF9E +:2004A00098DF00000A00FFFF99DF00000100FFFFA7DF00000100FFFFA8DF00000100FCFF3E +:2004C00094DF00000000000000000000FFFF00D000000100FFFF40DE00000000FFFF41DCA3 +:1004E00000000000FFFF29DD000000000000000008 +:2004F00067360000008002FEA4C5A927013B008FC0DBC7924196A9A8AB81A98A01BEC418B5 +:2005100000E04192C4984148046CC44E026D00BE008FC0DBA9A8AB81A98A1F765C03A6CC44 +:20053000010088FFC4CDFFFDA8CAA993D8FF01F1C49601910B9982FE060010E70B0001E81E +:20055000EAFA20E740000DE8BA9E6FE819F000E7100000E7490000E70000007710E74000F7 +:200570004076C2B502E8010250E8000040769AB20600A71EA59243880960C40605610102AE +:200590004156C4000B6F00BE096FA706C40F036201BE046F01020156C400A6920600BDB25E +:2005B0007AD178D0013BBDAA808DC0DB9A92929EA985A9BD120F007700770077007789E6F1 +:2005D000010002E8401640769AB27BD11F765C0379D0013B03E226009A92929EA985A9BD08 +:2005F000120F007700770077007789E6010002E8401640769AB200D11F765C0303E228006A +:20061000008FC0DB013BA9A8A181A98A74D0C8E29400008F30DFA9A8A181A98AC49202524E +:20063000046002E8D123056F02E8E1300AE8010040769AB2013B008F2ADD0356A1010156E0 +:20065000A40001D9A192045203E2C400DA64BE86BE8B0600BDB2BDAA03E2BD0404FE005239 +:20067000A95906601F765C030B920B2B0C96A1921F765C0307540A63008FC0DB013BA9A8F3 +:20069000A181A98AC44FEDFF0102008F86DE013BA9A8A181A9837FD0008FC0DB944CC4E226 +:2006B000C500EDFFEA01A19207544F63A9A8A181A98AC44D4A6C00BEA6921F767D03A985A8 +:2006D00000D5A71E009B009207520260019B0356A8011F765C030793A99F2765013B008FBD +:2006F000C0DBA9A8A581A98AC492A9CD0080A9CC0060A8CA0A60008F86DEA9A8A581A98A0B +:2007100001DEA706C40DA71E1F767D03009B009207520260019B0356A8011F765C0301DD3A +:200730000793A99FA555DC62A6920761A985421EA706C0006FB5A71EA7BD120F0077007798 +:200750000077007789E60000A192089E1F767D03A988029242617FD0008FC0DB949316D050 +:20077000D3FF9492C1FFA8CAA940146C1F767D03019205520C6002E849280CE8010094E6A1 +:20079000080014AD0465A6920250A988A692E3FF6801A1921F765C030754E2FF8401A6400B +:2007B0000F6C79D0C8E29401007720E74000AFE2280400E72000007790E800760E6F78D07A +:2007D000C8E29401007720E74000AFE2260400E72000007790E800761F767D030392696171 +:2007F000A692E3FFDE001F767D03019202521F61A1400F6C79D0008FC0DBC8E294011F76D2 +:200810005C0320E74000AFE2280400E720003B6F78D0008FC0DBC8E294011F765C0320E708 +:200830004000AFE2260400E720002D6F08BEA192A672008FC0DB013BA9A8A681A9838076F9 +:2008500086DEA606A181A71E18D0C7929596A19206520D6378D0C8E294011F765C0320E7A8 +:200870004000AFE2220400E720000D6F78D0C8E294011F765C0320E74000AFE2240400E78C +:200890002000007716E8000D14AD136512E8401A14AD0F63A12D008F00D950E800B212357F +:2008B0000156A400407638B502E8411640769AB216D0008FC0DB26E8000D94937FD0D0FFD7 +:2008D000949232E8401AC9FFA8CAA940036C02E8001150E80148A9A8013B18D08CE6000079 +:2008F000A1818CE60900A983A9A8A181A98A13E29501432BA6BF120FC493A892CDFF01F0AC +:200910000190A980A61BECFF3461A692C852316130D09592FB9CA6540363A845186D008FC9 +:20093000C0DBA9A8A181A98A30D0A69294540F6248D0945428651F765C03A7CC01000B18BD +:20095000F7FF82FF431A10000B981D6F4392A7CD01001F765C03205097FF0B18FBFFA91852 +:20097000FFFEA9CB43970356A70207900B980B6F1F765C03A7CC0100431A01000B18EFFF8F +:2009900083FF0B981F765C030E92E0FF8C00AD5CA19283DCA45C40760080EFFF8400808DD3 +:2009B000C0DB013BA9AAA681A98A8CE6000078D078D113E2940079D092929A9EA985A9BDDE +:2009D000120F007700770077007789E604000077CFE6210002E8081840769AB21F765C034A +:2009F00003E2220002E8101CCFE621000FE8303340769AB27AD11F765C0378D0013B008F46 +:200A1000C0DB03E224009A92949EA985A9BD120F007700770077007789E6010002E80818B9 +:200A300040769AB27BD11F765C0379D0013B008FC0DB03E226009A92949EA985A9BD120F97 +:200A5000007700770077007789E6010002E8081840769AB21F765C0303E22800236FA9A84A +:200A7000013BA681A98A8CE6000078D013E2940040765C80176FA9A8A181A98A8CE600005D +:200A900018D013E294000E6F008FC0DBA9A8A181A983A9A8A181A98AC52B18D0C51A0080B2 +:200AB000942B84FEAFE2BE04BE86BE8B0600BDB2BDAA02FE0052A92706601F765C030B9210 +:200AD0000B2B0C96008FC0DB013BA9A8AB81A98AC492A94FEDFFCB00CDFF0190A92F422B71 +:200AF000AB92075260610356AB01A95A1F767D034218FFFB008DC0DEA22D1006412B22562A +:200B10000190A95D0356A201A007A98A20FFE80340764680013B019B019089FFA2954298D0 +:200B3000A82D4218FFF71006412B22560190A95D0356AC01A007A98A20FFE8034076468089 +:200B500001908AFF4298AB9206522D60029A4218FFEFA294013BA92D1006412B22560190B8 +:200B7000A95D0356AC01A007A98A20FFE80340764680013B039B0190A2958BFF4298A82D1E +:200B90004218FFDF10062256412B0190A95D0356AC01A007A98A20FFE80340764680019085 +:200BB0008CFF42984292C0FF42CDBFFF42CA008F86DE013BC0FF42CAC0FF42CAC3FF4090FD +:200BD000A8CA4296A9A8AB81A9837FD0008FC0DBC4E2C500944C416D408F30DFA9A0AB814D +:200BF000A9830356C501408F2ADD0156A500AFE2C50100E7400000778CE60000A9A8AB81E4 +:200C1000A6BF120FA98318D148D0A6929D7E95541163408F30DEA9A0AB81A983421A08007F +:200C3000A9A8C581A98AC443056CAA920360421A000142920761AA9205601F765C030B1A70 +:200C500002001F765C030E921E60AD5CAB9282DCA45C40760080176FA9A8AB81A98A8CE6EE +:200C7000000018D013E294000E6F008FC0DBA9A8AB81A983A9A8AB81A98AC52B18D0C51A3C +:200C90000080942B82FEBE86BE8B060000BE013B008FC0DBA9A8A681A98A01DE18D0A69224 +:200CB000C41800E01852942BF46400BE013B008FC0DB408F80DFA9A8A681A98A0356A601EA +:200CD0000156A50070D0C8E294001F767D0303E2C500019206521760408F30DFA9A0A6811B +:200CF000A983C59203520F60A640056D18D094288601096F008FC0DBA9A8A681A98A18D0E5 +:200D10009428300201DEA6920452D264019201521060008FC0DB1F765C03A9A80781A98AB2 +:200D3000C41A0040CC1A0040D41A0040DC1A00401F767D03019206520760008FC0DBC41A8C +:200D50000040CC1A00401F767D030692036140765C8006008076F9151F765C03408FF22B90 +:200D7000008F3E4900B61202BDB2AC2B013B1AC21EA020A81F767D0310C31F765C031C1E89 +:200D9000008F30DFA9A8AC81A98AC42B008F30DEA9A8AC81A98AAC92019CC4211052A92DBF +:200DB000F0641F767D03019206521860008F30DF408F30DEBF56C4031F765C03BF56C50131 +:200DD000BF56CC03CD2BBF56D402BF56D503BF56DC02BF56DD0210282C011F767D0301925B +:200DF00001521F601F765C03AC2B013BBF5610C8008F30DFA9A8AC81A98ABF56C403008F63 +:200E100030DEA9A8AC81A98AAC92AC9301F002910190A8CAC496AC92019CA92D0452E96451 +:200E30001F767D03009209523460008F30DF408F30DEC42BBF56C50108D0BF56CC010ED12E +:200E5000CD2BBF56D404BF56D503BF56DC04BF56DD02BF56E404BF56E505BF56EC04BF56B1 +:200E7000ED04BF56F406BF56FC05BF56940609D0BF5694070AD0BF5694060BD0BF56940601 +:200E90000CD0BF5694060DD0BF569408BF569C08AC2B013B90E50356AC01807652DF008F2C +:200EB00088DF5AFF0156A600A9A8AC81A98AC6C3408F5EDFA9A9C42B0156A500AC92019C07 +:200ED000A92D03E2C5000652E764AC2B013B00BE0356AC01008F42DC0156A400AC92019C85 +:200EF000C4C2A92D1C52F564AC2B013B0356AC01008FC0DE0156A400AC92019CC4C2A92D47 +:200F10002052F564AC2BC0762ED71235408F40D7008F00D90156A5000156A400AC92019C7D +:200F300011F68524A92D185211F68424EF64AC2B1235008FC0DD0156A400AC92019CA92DB9 +:200F5000045211F68424F5641F767D030092A993FF9D01532269A993FD9D015315690752C4 +:200F70000A61095222601F765C03BF56070FBF56080D1B6F1F765C03BF560608BF5607080B +:200F9000BF560808126F1F765C03BF560608BF560710BF560810096F1F765C03BF56060A9A +:200FB000BF560714BF560814BE8B06001F767D0305921F765C030780026104DF00D5013BF3 +:200FD00000D40356A5038076F0D8A4810156A60001DCA492C62B0852F56401DDA59202522C +:200FF000F0641F767D03019204526D61A79200D52D65013BA592A2FF008FF0D8CBFFA594B3 +:20101000A3FFA927A9A8AB81A61E0356AB04A92D019BA592ACEA189A67FFA594C699A988E5 +:20103000A2FFCBFFA594189CA3FFA92701DDA9A8AB81A98A0356AB04A92DA692ACEA019A01 +:2010500066FFC498A792A554D66200D5013B008FF0D803BEA9A8A581A71EA592A672A9A850 +:20107000A681A98A08D001DDC7929496A5920352EF641F767D030192008FF8D8025204602F +:20109000A9280003036FA928000FFC981F767D0305920961408FF0D8A58A0FDCC41AFF00E2 +:2010B000F51A003F1F767D03019206521260408FF0D8A58A0FDCC41A3000FD1A00E0CD1AC3 +:2010D0000030076F008FF8D8C41A0F00F41AFC01008FF0D8A48308DC01DDC51A0100F41AD5 +:2010F0000700FC1A00E00600BDB2BDAABDA203E2BD0403E2BD0503E2BD060CFE1F767D0394 +:201110004496019206520860449206601F765C030B920B2B0C961F765C030792008F30DEC3 +:20113000013B4494A988A9A84481A98A808DC0DBC4924696449201F0019047964492A0FF8D +:20115000A92D499603354896049AAC94A95BA9AAA681A98A457EC44FEDFFBE02008FBCDD7B +:20117000A9A84481A98A64BE4492A672C4E2C405A9AAA681A98A8CE62800408D80DF13E22F +:20119000C40044920356A9010156A1004C1E02E891340BE801E0AFE2C10020E72800407686 +:2011B0009AB2442D008FC0DD1235AFE2C10110E740000156A40003E2C100407638B5013BE5 +:2011D0008CE60000A9AA4481A6BF120FA98A70D0408F2ADD947E4C060156A500A685A9BDB5 +:2011F000120F007700770077007789E60000408D5EDF21E3C5414C0600E70C000156A10022 +:2012100000E72101AFE2C10320E7C80002E8512B0BE8010040769AB2AFE2C10110E74000AB +:20123000007703E2C1004076C2B5013B008F88DF8CE60000A9A84481A98A13E2C4004492D8 +:20125000A940ECFFAA001F765C03CFE62000AFE22A0140762A80452D008F00D912350156A3 +:20127000A400407638B54488008F30DF013BA9A8A681A98A1F765C0303E22C00C492035216 +:20129000086012E8000D14AD046390E503E22C00008F30DFA9A8A681A98AC49202520860C6 +:2012B00012E8B01414AD046390E503E22C0001E8A9FDAFE22C0508E8992740769AB21F761A +:2012D0005C03CFE606000E921660008FC0DB4588013BA9A88CE6280018D0A681A98381DE16 +:2012F000A9A8A681A98A13E295008CE6330018D013E29403013BCFE62000AFE22A01408DF6 +:201310005EDF0356A301AFE6000020E740000156A10000E70100AFE2C10020E7080002E87C +:20133000512B0BE8010040769AB2AFE2C10110E74000007703E2C1004076C2B5013B408F4C +:2013500088DF8CE60000A9A0A381A61EABBF120F68B6C63F4892A772008FC0DBA9A8A7812F +:20137000A61EA9A04681A71EAA286900C792C696A9A04481A71E4892AA72A9A8AA81A61ECB +:20139000AA286A00C792C6964892AA72A9A8AA81A98AC43F116F1F767D03019201520660C3 +:2013B000CFE62000AFE60000036FCFE620001F765C0303E22A00008F88DFA9A84481A98331 +:2013D000A9A84681A98AC8E2C400008F88DFA9A8A381A98A4488C8E2C401008FC0DBA9A8F0 +:2013F000A681A98AC8E2C505432BC492CDFF01F00190008F88DFA959A9A8A681A98A96E6DE +:20141000050096E60D00C8E2C400CFE6290020E7280040769AB201E8C9F400D50CE8D1CCA5 +:2014300094E6080014AD0B651F765C03C8E21000007794E6050014AD026501D54492013B35 +:20145000008F52DF1F765C030356A901412B0156A4001E064076468000520A614393A1CCBE +:201470000100045187FFA818FFFEA8CA4396008F88DF013BA9A8A381A98AC8E2C400CFE67B +:20149000290020E7280040769AB201E8C9F400D50CE8D1CC94E6080014AD0B651F765C032F +:2014B000C8E21000007794E6050014AD026501D5013B008F52DF1F765C030356A301412B15 +:2014D0000156A4001E064076468000520A614393A1CC0100045187FFA818FFFEA8CA43967D +:2014F0001F767D0301920652606047925E60008FC0DB013BA9A84581A98A30D0C8E2940097 +:20151000007794E6060014AD0A654393A1CC0100205187FFA818FFFEA8CA4396008F30DFB3 +:20153000A9A84481A98AC49203522760008FC0DBA9A84581A98A48D0412BC8E2940000D515 +:2015500094E6060014AD026301D54992008F94DF1F765C030356A9010156A4001E06407656 +:20157000468000520A614393A1CC0100085187FFA818FFFEA8CA4396008F30DF013BA9A882 +:201590004481A98AC49202521060008FC0DBA9A84581A98A48D0C8E29400007794E6060068 +:2015B00014AD0365431A10004492015204610352E0FF87004392E1FF84001F767803089259 +:2015D0007F601F7678032A060C192C0F036728062C1E2C8A8CE62000A9A801092C1E13E2B8 +:2015F000C4002C8A1F765C03AFE22A00A9A81F7678038CE6000001092C1E13E2C4002C8A1C +:201610008CE62B00A9A801092C1E13E2C4032C83013B008F88DFA9A001092C1EA9A8448128 +:20163000A71EC792C5962C83A9A001092C1EA9A84681A71EC792C5962C83A9A001092C1EF8 +:20165000A9A8A381A71EC792C5962C8A1F765C03A9A80109AFE22C001F7678038CE6000048 +:201670002C1E13E2C4002C8A8CE63200A9A801092C1E13E2C4022C83008FC0DBA5C4A9A80A +:201690004481A71E01DE70DF2CC2C792C5962CC5A70601092C1E1F765C0310921F76780348 +:2016B000C7962CC5A70601092C1E4392C7962CC5A70601092C1E1F765C030E92C7961F7621 +:2016D0005C030E921560AD5C459283DCA45C407600800E6F008FC0DBA9A8A681A983A9A875 +:2016F000A681A98AC52B18D0C51A0080942B8CFEAFE2BE06AFE2BE05AFE2BE04BE82BE8680 +:20171000BE8B06001B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD002F +:2017300030E6000602FE422916561F7633003892419623760008267600003892382B21288A +:20175000FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE422916563A +:201770001F763300389241962376000826760000381890002128FFFF1029103B4192389667 +:201790002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892419623761B +:2017B000000826760000381890002128FFFF1029103B419238962576006F1B76F0FF00E2BD +:2017D000BD0030E6000602FE422916561F76330038924196237600082676000038189C00B7 +:2017F0002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE4229BD +:2018100016561F76330038924196237600082676000038189E002128FFFF1029103B41921A +:2018300038962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300229241965B +:2018500023760101221868002128FFFF1029103B419222962576006F1B76F0FF00E2BD00BC +:2018700030E6000602FE422916561F76330022924196237601012292222B2128FFFF1029F6 +:20189000103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633007E +:2018B000229241962376010026760101221878002128FFFF1029103B419222962576006F43 +:2018D0001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E66E +:2018F00000064229165610292576006F1B76F0FF00E2BD0030E600064229165610292576D2 +:20191000006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD00D4 +:2019300030E600064229165610292576006F1B76F0FF00E2BD0030E6000642291656102916 +:201950002576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2B6 +:20197000BD0030E600064229165610292576006F1B76F0FF00E2BD0030E600064229165652 +:2019900010292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF1F +:2019B00000E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000642299C +:2019D000165610292576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002292BA +:2019F000419623760100267601012292222B2128FFFF1029103B419222962576006F1B76D6 +:201A1000F0FF00E2BD0030E6000602FE422916561F7633002C924196237620002676390149 +:201A30002C922C2B2128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E60006DC +:201A500002FE422916561F7633002C92419623762000267639012C1832002128FFFF1029BD +:201A7000103B41922C962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330092 +:201A90002292419623760100267601012218F8002128FFFF1029103B419222962576006FE1 +:201AB0001B76F0FF00E2BD0030E6000602FE422916561F763300229241962376010026767B +:201AD00001012218FA002128FFFF1029103B419222962576006F1B76F0FF00E2BD0030E62B +:201AF000000602FE422916561F763300309241962376800026760000301803002128FFFF51 +:201B10001029103B419230962576006F1B76F0FF00E2BD0030E6000602FE422916561F76E7 +:201B30003300329241962376000126760001321875002128FFFF1029103B419232962576D0 +:201B5000006F1B76F0FF00E2BD0030E6000602FE422916561F7633003292419623760001F7 +:201B7000267600013218FD002128FFFF1029103B419232962576006F1B76F0FF00E2BD00E2 +:201B900030E6000602FE422916561F7633003092419623768000267600002C18230021287C +:201BB000FFFF1029103B419230962576006F1B76F0FF00E2BD0030E6000602FE42291656DE +:201BD0001F763300329241962376000126760001321871002128FFFF1029103B419232963A +:201BF0002576006F1B76F0FF00E2BD0030E6000602FE422916561F763300329241962376BD +:201C10000001267600013292322B2128FFFF1029103B419232962576006F1B76F0FF00E223 +:201C3000BD0030E60006422916562376390110292576006F1B76F0FF00E2BD0030E6000693 +:201C5000422916562576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76AD +:201C7000F0FF00E2BD0030E6000602FE422916561F7633002C9241962376200026763901E7 +:201C90002C1837002128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E6000614 +:201CB00002FE422916561F7633002C92419623762000267639012C922C2B2128FFFF1029BC +:201CD000103B41922C962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330030 +:201CF0002C92419623762000267639012C1833002128FFFF1029103B41922C962576006FCF +:201D10001B76F0FF00E2BD0030E6000602FE422916561F7633002C924196237620002676EF +:201D300039012C1822002128FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E654 +:201D5000000602FE422916561F76330038924196237600082676000038189F002128FFFFBA +:201D70001029103B419238962576006F1B76F0FF00E2BD0030E6000602FE422916561F767D +:201D900033003892419623760008267600003892382B2128FFFF1029103B419238962576EE +:201DB000006F1B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD0030E653 +:201DD0000006422916562376390110292576006F1B76F0FF00E2BD0030E6000642291656EE +:201DF0002376391110292576006F1B76F0FF00E2BD0030E600064229165610292576006F58 +:201E10001B76F0FF00E2BD0030E6000602FE422916561F763300309241962376800026768A +:201E30000000301801002128FFFF1029103B419230962576006F1B76F0FF00E2BD0030E6A6 +:201E5000000602FE422916561F7633003092419623768000267600002C922C2B2128FFFF23 +:201E70001029103B419230962576006F1B76F0FF00E2BD0030E6000602FE422916561F7684 +:201E900033002A92419623761000267610012A922A2B2128FFFF1029103B41922A9625760C +:201EB000006F1B76F0FF00E2BD0030E6000602FE422916561F7633002A924196237610008D +:201ED000267610012A1802002128FFFF1029103B41922A962576006F1B76F0FF00E2BD007A +:201EF00030E6000602FE422916561F76330024924196237602002676000024181F002128AF +:201F1000FFFF1029103B419224962576006F1B76F0FF00E2BD0030E6000602FE4229165686 +:201F30001F763300269241962376040026763D012692262B2128FFFF1029103B4192269660 +:201F50002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196237667 +:201F700002002676000024180F002128FFFF1029103B419224962576006F1B76F0FF00E2A4 +:201F9000BD0030E6000602FE422916561F763300269241962376040026763D01261826004F +:201FB0002128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000602FE422907 +:201FD00016561F7633002492419623760200267600002492242B2128FFFF1029103B419256 +:201FF00024962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330026924196A4 +:202010002376040026763D01261826002128FFFF1029103B419226962576006F1B76F0FFF1 +:2020300000E2BD0030E6000602FE422916561F763300249241962376020026760000241836 +:2020500008002128FFFF1029103B419224962576006F1B76F0FF00E2BD0030E6000602FECB +:20207000422916561F763300269241962376040026763D012692262B2128FFFF1029103BD7 +:20209000419226962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300249207 +:2020B0004196237602002676000024180C002128FFFF1029103B419224962576006F1B76C7 +:2020D000F0FF00E2BD0030E6000602FE422916561F763300269241962376040026763D01A1 +:2020F0002692262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000628 +:2021100002FE422916561F76330024924196237602002676000024180E002128FFFF102982 +:20213000103B419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300D3 +:20215000269241962376040026763D0126183E002128FFFF1029103B419226962576006F89 +:202170001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6C5 +:20219000000602FE422916561F76330028924196237608002676080128180F002128FFFF1D +:2021B0001029103B419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7649 +:2021D000330028924196237608002676080128180F002128FFFF1029103B4192289625769F +:2021F000006F1B76F0FF00E2BD0030E6000602FE422916561F763300289241962376080054 +:2022100026760801281803002128FFFF1029103B419228962576006F1B76F0FF00E2BD0041 +:2022300030E6000602FE422916561F76330028924196237608002676080128180300212870 +:20225000FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE422916563F +:202270001F7633002A92419623760800267608012892282B2128FFFF1029103B4192289644 +:202290002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330028924196237620 +:2022B000080026760801281802002128FFFF1029103B419228962576006F1B76F0FF00E257 +:2022D000BD0030E6000602FE422916561F76330032924196237600012676000132187500E5 +:2022F0002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE4229B8 +:2023100016561F7633003292419623760001267600013292322B2128FFFF1029103B4192E8 +:2023300032962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003292419646 +:202350002376000126760001321831002128FFFF1029103B419232962576006F1B76F0FFCB +:2023700000E2BD0030E6000602FE422916561F76330032924196237600012676000132925D +:20239000322B2128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE25 +:2023B000422916561F7633002E92419623764000267600002E922E2B2128FFFF1029103B7E +:2023D00041922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E92B2 +:2023F000419623764000267600002E1828002128FFFF1029103B41922E962576006F1B7616 +:20241000F0FF00E2BD0030E6000602FE422916561F7633002E924196237640002676000057 +:202430002E1820002128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E600067F +:2024500002FE422916561F7633002E92419623764000267600002E1838002128FFFF1029C3 +:20247000103B41922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330086 +:202490002E92419623764000267600002E1838002128FFFF1029103B41922E962576006F36 +:2024B0001B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000267626 +:2024D00000002E183E002128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E6C7 +:2024F0000006422916562376390110292576006F1B76F0FF00E2BD0030E6000602FE422933 +:2025100016561F763300229241962376010026760101221848002128FFFF1029103B419294 +:2025300022962576006F06000052A888C48A096509520763FF9CC4CDF8FF0790A8CAC4963A +:20255000A69245520D614E5208614F520D60C41A2000C418BFFF086FC418DFFF056FC41AFC +:202570002000C41A4000A59201520360C4187FFF02520360C41A8000C418EFFFC418F7FF15 +:202590000600BDB200D5013B008F40DEA9A8A581A98AC47D01DDA5924652F76433D1008F72 +:2025B00040DE34D0BF569C0CBF56940C1F76400335D03BD1BF56940836D0BF56940937D01E +:2025D000BF56941038D0BF56940839D0BF56940C3AD0BF56940C3DD0BF569C053CD100929A +:2025F000FE9C949641D00092FF9C94963ED0BF56940810D0BF56DC08BF56F408BF56940D40 +:20261000BF56EC1BBF569C12BE8B0600A9BD120F00770077BDB21F7671038BE60100A48BEE +:2026300050E8094088E23C0040769AB288E6000000770077A9BF120FC18AA993B7FFFF91AF +:20265000D497C18AFF90DC96BE8B06000852A927A4C50960089A01D54E9B40762190008D13 +:202670003B03972BAB9209520B60089AA78A01D54E9B40762190008D3B03BF5697010600D0 +:20269000A71EBDB2A492BDAA0152BDA22A60008F5070C08D40D01F76410300A822761F76C3 +:2026B000BE01408F49B109CDFFF7A81A0004008F04B1099709CDFFFD1F763700A81A0001AB +:2026D00000A01F76BE0109971F76370002A81F763300321A0100321A0200237600011A7653 +:2026F00002523360008F5077C08DC0D31F764F0300A82276408F806F1F76BE01FDCDFFEFBC +:202710008076BFB0A58AA81A0020079716DD07CDFF3F1ADCA81A008007971F763700C51811 +:20273000CFFF408F7AB0C41A040004C21F763300321A04001F76370006A01F763300321A7C +:202750000800237600011A76D396A38A01D54E9B69FF089AC38640762190A2C4A2830BD0C2 +:20277000A28A0CDE0CDDC61A00400ADCC518FFDFCA18BFFFCA18DFFFCA18F7FFCA18FBFF75 +:20279000CA1A0200CA1A0100C418FFBF92CCE0FF0BD00150929640764E90A38AA70640760F +:2027B0009390D392025205601F76BF01081A0400C38A099ABF56E402A38A4076B390408D6F +:2027D00033030CD0932BA28A008D9E01932B9B2B0BDCC41A4000CA1A2000BE82BE86BE8B67 +:2027F00006001F764103BF5602011F764F03BF5602021F764003009606000002008D42038A +:20281000941E0600BDB2BDAAA486008D3A0392923660A9AA13FF6700A98A008D36030102A4 +:202830000156C4009206008D3803920F0466C28ABF56E40208D092C5A7C408D0090201DE5F +:2028500092C2C207A98A008D3603C792C4969206008D3803920F4966C28AE446FE6CA28AE3 +:20287000099A4076B390D292025205601F76BF01081A0400008D9E01922B376F008D3803BD +:20289000928A408D3803A492008D36030190A98801DC9AA89206008D3803920F0466C28A70 +:2028B000BF56E402A6920B6008D092830902C207A98AC592A7FFFF90C4960D6F08D0928327 +:2028D000A5C408D0090201DE92C2C207A98AC592FF90C496008D36039206008D3803920F66 +:2028F0000466C28AE446FE6C1F763300211A0001BE86BE8B0600BDB200BEACA0BDAAA486DD +:20291000BDA2A98201DEA61B3075FD69D292025205601F76BF010818FBFF00BE01DEA61B88 +:202930001027FD69408D3603A9AB08D09AA20109921E008D3A03922BC28AE446FE6CA28A2F +:20295000089A4076B39001BE008D38030102A30F92C21C68A7AB0902C207A98AC792C496AC +:20297000C28AE446FE6C00BE01DEA61BE803FD69A28A099A4076B390D292025210601F7633 +:20299000BF01009A081A04000B6FC28A0902A7ABBF56E401C207A98AC792C496009ABE8201 +:2029B000BE86BE8B0600BDB2BDAAA486EFFF2A01C28AFCCCFF00A958EC47EDFF1D01408D3D +:2029D000A0019A92E0FF1E01408D3B039A920152116000BE408D3D03BF569A01408D3403A2 +:2029F0009AC2408D3F039A2B408D3E039A2B0DD19A2B408D3F039A92E0FF0401408D3D03F5 +:202A10009A924F60F2C4208F0000A9A8A60F06662F8F0000A9A8A60F0867608F00000AD1F7 +:202A3000208F0000F2A09AA80CD19A923A52E0FFE900408DA0019A922E60408D34039AC41C +:202A5000A692A94001DE9AC2066DF28A0356A008C496076FF28AA9A80109F21EA092C498D5 +:202A7000008D34039206E20FE8FFCC000FD10CD0BF569A33A28A099ABF5692334076B39006 +:202A9000408D3F03008DA001BF569A01BF569201EFFFB800008D3F03BF569201EFFFB200D4 +:202AB000408D3E039A923E60A0921F760403115425611F767E031954036019921F60A0883D +:202AD000408D31039A0EA60F0560408D33039A921560A0921F767E03185407601892056154 +:202AF000408D33039A920A61408D3F03008D3D03BF569A01922BEFFF8500408D32039A785C +:202B1000408D3E039A80019A013BA7949A96A9AAA781A98A0ED1089A9C78A28A4076B390D3 +:202B3000706F9A80019A013BA7949A96A9AAA781A98A0ED19C78408D3E039A9207520E60A8 +:202B50000DD19A9210520A60408D33039A9206600A9A1F767903A0941096408D3E039A9231 +:202B700002521A60A0920DD103529A78336842523166008F40DE949203522C68A0923352C7 +:202B90000B600CD19A923A522560A09233520460008D3D03922B0DD09258408D3E03008F97 +:202BB00040DE9A9294540467A91B90012A68A28A099A4076B390408D3D039A2B0DD0408D3D +:202BD0003F03BF569A01408DA001BF569A01922B186FA28A099A4076B390408D3E039A2BF6 +:202BF0000DD0408D3D03BF569A01408D3F039A2B922B076FC28ACC18DFFFC28ACC1A2000C4 +:202C1000C28AEC46EDFFD6FE1F7633000BDC211A0001C41A4000BE86BE8B0600BDB2BDAAF4 +:202C3000A486A61EBDA2A582D292025205601F76BF010818FBFF408D360308D09AC292A216 +:202C5000008D3A03BF569201C28AE446FE6CA28A089A4076B390008D38030102921EC2838B +:202C700000BE0902BF56E501C207A98AC392A7FFFF90C496A692BE82BE86BE8B06002276FD +:202C90001F767D0316D0008F806F079294CDFCFF03901F76BE0118D0A8CA16961F767D03B4 +:202CB000089294CDFCFF03901F76BE011AD0A8CA18961F767D030992019094CDFEFF1F76E9 +:202CD000BE01A8CA1BD01A961F767D030A9201901F76BE0194CDFEFFA8CA1B961A7669FF09 +:202CF000060016D0008F806F1F767D039492039018D00796949203901AD00896949201900F +:202D10001BD00996949201900A9622761F76BE011618FCFF1818FCFF1A1A01001B1A010017 +:202D30001A7669FF06001F767D03019302531660008F880A1F76BF01A94002A8036C041A7B +:202D50000008A941036C041A0002A942036C041A8000A943036C041A080003533B60AB28A5 +:202D7000CB0BAA2800091F76BF01248F0000005202A90AA80360041A000801520360041A7E +:202D9000000202520360041A800003520360041A080004520360041A020005520360041A3D +:202DB000000106520360041A400007520360041A010008520360051A000809520360051A4D +:202DD00000010A5203600D1A20000B5203600D1A040001531E60AB2BAA28000B1F76BF0117 +:202DF000128F0000A94004A90CA8036C031A0008A941036C031A0001A942036C031A000254 +:202E1000A943036C0B1A0200A944036C0B1A1000060022761F76BE01408F806F06180000C1 +:202E30000F8F00F0A5C4071800FF08183F00091800FF1BDD0BDE1606A918C0FF161EA9A8EC +:202E500018C0A89219C0C618EFFF0B18DFFF0B18BFFFC518F7FF1A76008FC06F1F767D0393 +:202E7000BF56000109D0CC92C4FF01F0019000721F76BF010192C3FF1F767D0301F00190FD +:202E900080FF00721F76BF010192C5FF1F767D0301F0019081FF00729492C2FF01F0019093 +:202EB00082FF009400960352036104520360BF5601010152036102520360BF5601030552F0 +:202ED000036106520360BF56010607520360BF56010208520360BF560104095209610192A4 +:202EF000015208610552066106520461056FBF560105BF56060101920152036106520360DB +:202F1000BF5605010252036103520360BF5603010152036105520360BF56020101520361BD +:202F300003520360BF56040202520360BF56040103520F6101520D61065206611F76BF0143 +:202F50000D1A00100A6F1F76BF01021A8000056F1F76BF010B1A001006520E61035209613C +:202F7000015204610D1A0080096F0B1A0080066F0B1A0040036F021A800006520B610452C3 +:202F90000961025204610B1A0004066F0B1A0040036F021A000206520661045204610B1ACC +:202FB0000020036F021A0800227604520A6204522461015240610252346103522661446FAA +:202FD0000552116106524060088F8A021F76BE01059AA82801FC0AA81A1E1F76BF01021AE2 +:202FF0000800326F088F00001F76BE01049AA82801BC0AA81A1E286F088F49031F76BE014A +:2030100005020AA81A1E206FA928CB0BA82808091F76BE010A1E059AA828257C1A1E146F51 +:20303000088F8A0B1F76BE01059AA82801F80AA81A1E0A6F2FFF10161F76BE010A1E059AC6 +:20305000A82813BC1A1E1A7669FF0600BDB2BDAABDA202FE1F767D03019200D200D30252B5 +:2030700032601F76BF0116D0008FC0DB0992C1FF94CDFEFF01F016D116D00190A8CAA9CD59 +:20309000FDFF949616D0099203F01F766F030290A8CA9C9600CDFFF39492039089FFA8CAD7 +:2030B00000961F76BF010040036C0102A9860042026C02DA004A026C04DA0044026C08DA7E +:2030D00010D0947A1F767D03019201523160408DC0DBA18A1F76BF01A183877620A116DCAA +:2030F000C418FDFF16DD0992C3FFA18A03F00290C59816DCC418FBFF0992412B008F4CDF02 +:20311000C1FF01F00190A95DA606407646800356A902A18A1F766F0316D0079016DCC4982E +:2031300000CDFFE79192069089FFA8CA00961F767D03019204525B60408DC0DBA18A1F76A2 +:20315000BF0116DCC418FEFF01CC0004C9FF412BA95D008F4CDF20FFE8034076468016D99A +:203170001F76BF010190C198014B026C01DA0148026C02DA0945026C04DA0942026C08DAA3 +:20319000014A026C10DA0147026C20DA0944026C40DA0044046CA9AA8009A9860149056C7D +:2031B000A9AA18FF0100A9860941056CA9AA19FF0100A986004B056CA9AA1AFF0100A986B7 +:2031D0000045056CA9AA1BFF0100A9860940056CA9AA1CFF0100A986004A056CA9AA1DFF0A +:2031F0000100A98610D0008FC0DB947A1F767D030192065210601F76BF010046026D01DA22 +:203210000048026D02DA004B026D04DA10D0008FC0DB947A1F767D0301920552E0FF8900F4 +:203230001F76BF010945036D01DA026F10DB0944036D02DA026F40DB0042036D04DA056F0B +:20325000A9A21CFF0100A9820044036D08DA056FA9A21DFF0100A9820046036D10DA056F1B +:20327000A9A21EFF0100A9820040036D20DA056FA9A21FFF0100A9820048036D40DA056FB1 +:20329000A9A21FFF0200A982004A056DA9AA8009A986056FA9A21FFF0400A9820043066DFF +:2032B000A9AA18FF0100A986056FA9A21FFF0800A9820045066DA9AA19FF0100A986056F8D +:2032D000A9A21FFF1000A9820047066DA9AA1AFF0100A986056FA9A21FFF2000A98200417B +:2032F000066DA9AA1BFF0100A986056FA9A21FFF4000A982004B066DA9AA1CFF0100A9860A +:20331000056FA9A21FFF8000A9820049066DA9AA1DFF0100A986056FA9A21FFF0001A982B1 +:203330001F767D0310D0008FC0DB10A2947A008FC06FCC92013B1F76BF01C4FF01F00190AC +:2033500009D0A985A9860192C3FF01F0019080FFA9850156A2000192C5FF01F0019081FF51 +:20337000A9850156A2009492C2FF01F0019082FFA9850156A20017D0008FC0DB82FE947A66 +:20339000BE82BE86BE8B06001F76BF0100920093C5FFD7FF01F001F10190019190FFA9CB2D +:2033B0000092CAFF01F0019081FFA8CA060009D0008FC06F1F76BF0194CD0004D9FF09CC2A +:2033D000004090FFCDFFA9CBC492C2FF01F0019081FFA8CA06001F767803BDB20B93A988EF +:2033F0000153BDAAE0FFEC001F767D0301930653E0FFE6001F765C030D93E0FFE1001F7687 +:203410007803099308CBE0FFD9007FD0008FC0DB179394271660AB46036C1B46086CAB477F +:20343000036D1B47046D00530C600F6F0C1B900103680C288F01182B1728E803A61A0001E7 +:203450000C1B1F03E7FFB700A6920552056018930361A61A0002AC28200311300E0DA98A2B +:2034700034FFA71E608F0000A9A832FFA7070156A5002406C5962406CD97D57EDD3F4076F1 +:203490005197E596407664971F767D03008FC0DBA4C5ED9632921F767D037BDFF596308867 +:2034B0001CDC08D009D1FD7EC792A4C5008FC0DB959600D0C7929D96A9A80AD1A00DA71EC6 +:2034D000A61EA092A17218DFC7929D96A092A6C50ED1A17201D8C7929D96A0920452ED687F +:2034F0001F76780312D01992C076A4DF13D1959614D0C7929D9615D1CF92959616D0D79226 +:20351000A4C59D9618D11A921F767C0379DF959617D01892959619D0BF569D06BF569510BC +:20353000C792A4C51AD178DF9D96C792A4C51BD07ADF95961CD0C792A4C51ED11F76780366 +:203550006EDC6FDF95961DD0C792A4C5008FBCDD95961FD0C7929D9620D11E92959621D05E +:203570001F929D9622D12092959600D021929D9623D122929D9624D1A092A172949301D8BC +:20359000A0929D970452F8681F7678031B3FE5921C96A9282003ED930E0A1D970E54026068 +:2035B0000E2B0C1B200302670C0A010201562600066FBF561801036FBF560B03BE86BE8BB4 +:2035D0000600BDAAAA280100A888A9800876303BBE5AA75D008F0010A9A8A50F2B60A693D5 +:2035F0005461A75DA9A8A50F2560A693015322601F767D03019206521D601F765C030D9259 +:2036100019601F7678030B92015214610C2BC076C0DB0E2B172B162B0D2B7FDF102BC792BE +:203630001B96092B082B019ABF560B0140767897316FA75D20FF0110A50F0B601F767803DE +:203650000B9201520661A6930461A61BE8031B69A75D20FF0210A50F0460A61B20030F688D +:20367000A78020FF0310A70F0860A692015205661F767803167E0E6FAA2B0C6F1F7678034C +:203690000D7E086F0F7E066F1F767803BF560B03172BBD7A0076AA92BE8606001F7678035E +:2036B0000C9311880E92150A111C0100172B0C2B1397127E14960E2B06000876303BBE2F63 +:2036D0001F7678030B9201521860010201562400100A0F9210540566102B019A40767897BF +:2036F0001F76780317920961FF9C17960660059A407678974076DB98BD570076060008764E +:20371000303BBE2F049A40767897BD57007606000052A88005611F7678031393046F1F76B0 +:2037300078030C93005203611488026F0E88005203611227026F1127A7550366009A1B6FE5 +:20375000A692A89EA794A9082003A91B20030668A908E0FCA91B2003FC67AC28007DAB3272 +:20377000AC282800A930AB07A40D208F00000156A400C4920600A988A693A80800F00F538F +:203790003B660356A601C0763AC1A927AB0800E0A706AB0DA71EC7C52076A9284D55EFFF37 +:2037B000A000029AEFFF9D00289AEFFF9A00A9282003EFFF96001F7678030F92EFFF910040 +:2037D0001F7678032406EFFF8C001F7678032406A80EEFFF86001F767D030192EFFF8100AA +:2037F0001F767D0300927C6FA928E803796F1F7678031792756FA61B10105D68A61B8810E7 +:203810001D671F767803169304600B9301531661A692A908F0EFA988AC28CDCCA636AC2878 +:20383000150022560D93A92D2831A692AC95ABEAAB5C169240761599536FA61B00113B68C4 +:20385000A61B7C1138671F7678030C9303530468AB280300026F0C27A60800EF2606AB010B +:20387000A71EA6920360A7923B6F01520460A706A80E366F02520360AB92326F03520560E7 +:203890001F76780315922C6F84DEAC28CDCCA636AC2815002256A92DAB92AC540C690C9393 +:2038B000A692AB9F2831ABEAAC95AB5C009A40761599166F009A146F1F7678031692056182 +:2038D0001F76780313920C6F0C920A6F1F76780316920361039A046F1F7678030B920600B2 +:2038F0001F7678030B92015227601F767D030192065222600876303BBE2F7FD0008FC0DB60 +:2039100094881F7678031B0EA60F116040765197A9881F7678031C0EA60F09604076649744 +:20393000A9881F7678031D0EA60F0461039A40767897BD5700760600A9881F7678030B9221 +:20395000015217601F767D030192065212600876303BBE2F1F767803197E8076A4DF029A89 +:20397000C697CE7CD67D1A0A40767897BD5700760600608F00001F767803208F00FA28A054 +:203990002AA828062C1E2E2B2806046FA98A842BA9A81F7678032A0FFA6806000600A983BD +:2039B000C57C0600BDB2BDAABDA206FE1F767803A482BF5608010EDCEC92FF90A95AE492B3 +:2039D000FF90A988A9AA37FFA6AFA986DC92FF90A988A9AA37FFA6AFA986D492FF90A988A9 +:2039F00009D0A9AA37FFA6AFA9869492FF9008D0A9599492FF90A988A9B237FFA6AFA98B42 +:203A1000FC92FF90A988008D3203A9B237FFA6AFA98BF492FF90A988408FFFFFA9B237FFC8 +:203A3000A6AFA98BA9A210FFA101A71E441EA98A9392C7960202BF56CC3440764CB3A90E90 +:203A5000461EA28A465DA9B2407622B3419644830102A38A4076089244830102A38ABF5613 +:203A7000C534407608924192A90E461EC38AE446FE6CA9B2A38AA28340769B93C38AE44616 +:203A9000FE6CA9A210FFA101A983A38A4692A993FF91A7FFFF90C597CD960602D52BDD2BAF +:203AB0004076089286FEBE82BE86BE8B060006000600A98AC4920600A988BDB21F7671030B +:203AD000A9A8008D3203A48BBF560101BDAA10FFA101408FFFFFA71EA986A98A9193C797EF +:203AF0000202CF7E40764CB3A9CDFF00A283A7FFFF90A18AD597DD960602E52BED2B4076F1 +:203B10000892BE86BE8B0600BDB202FEA48B0EDCEC92FF90A980E492FF90A988A70637FF91 +:203B3000A6AFA71EDC92FF90A9880129A70637FFA6AFA71ED492FF90A988412BA70637FF91 +:203B5000A6AFA71EFC92FF90A9934196F492A838419620FF0080A70F0666A706415C40760D +:203B70005C9A086FAD5CA792029B81DCA45C407685A1399AA18A4076E99A82FEBE8B0600AA +:203B9000BDB2BDAA02FE1F767103A486BF5601010EDCEC92FF90A980E492FF90A988A706F2 +:203BB00037FFA6AFA71EDC92FF90A988A70637FFA6AFA71ED492FF90A988A70637FFA6AF1C +:203BD000A71E012920FF0080A70F0666A7064076E69A4196086FAD5CA792029B81DCA45CB8 +:203BF0004076C8A1A9AA008D320310FFA1011F767C03A71EA98BA98A9292408FFFFFC79642 +:203C1000BF56CF384192FF90D7964192A7FFFF90DF961292A9CDFF00A7FFFF90E197E996E7 +:203C3000060240764CB3A9CDFF0009D0A7FFA183A28AFF9008D1F597FD960A029D2B952B58 +:203C50004076089282FEBE86BE8B060002FEA61EAC281F00013B2256A60740FF0156A4009F +:203C7000C492A640036CFF90036FA7FFFF9082FE0600BDB2A48BBDAAE1C50AD09183A70687 +:203C9000A58A02194076B39BA927A706A58A01194076B39BA1C5008D3203408FFFFF0EDF1A +:203CB0000356A908AB94A95AA78A9192C7960202BF56CF3340764CB30AD0A95DE106918A45 +:203CD0000219407622B3A988A20EA60F1061008D3C03912BD192025205601F76BF01081A0C +:203CF0000400A18A099A4076B390096FA18A339A4076E99A008D3C03BF569101BE86BE8B40 +:203D10000600A4830EDDED92FF90A980E592FF90A988A70637FFA6AFA71EDD92FF90A988E1 +:203D3000A70637FFA6AFA71ED592FF90A98809D0A70637FFA6AFA71E9592FF9008D0A90E34 +:203D5000E41E9592FF90A988E40637FFA6AFE41EFD92FF90A988E40637FFA6AFE41EF592A6 +:203D7000FF90A988E40637FFA6AFE41E02020156E4000AD01F7678033A9AF4C394C3BF56DC +:203D900008014076E99A06000600BDB2BDAABDA2A482008DA00193923D61408DA0010FD02C +:203DB0009B2B935A008F40DE013BA9A8A281A98AC49203523268A91B90012F66A2923352C8 +:203DD0001A61008F40DEA9A8A281A98AC458A059408FFFFFA38A82D981D8A1880EDC0356D5 +:203DF00094089CCAA959A60640764CB3A188A90EA60F05600CD0A292937A1C6FD3920252F3 +:203E100005601F76BF01081A0400A38A099A4076B390A928FFFF0E6FD392025205601F76EA +:203E3000BF01081A0400A38A099A4076B390A928FFFFBE82BE86BE8B0600BDB206FEA48B7F +:203E50000EDCEC92FF90A90E421EE492FF90A988420637FFA6AF421EDC92FF90A988420665 +:203E700037FFA6AF421ED492FF90A98809D0420637FFA6AF421E9492FF9008D0A90E441E6F +:203E90009492FF90A988440637FFA6AF441EFC92FF90A988440637FFA6AF441EF492FF905B +:203EB000A9880DD0440637FFA6AF441E9492FF900CD0A90E461E9492FF90A9880BD04606F4 +:203ED00037FFA6AF461E9492FF90A9880AD0460637FFA6AF461E9492FF90A9880ED04606D8 +:203EF00037FFA6AF461E94CCFF0004520A61055212604206448A46C4A6934076C8A1076FEC +:203F10004206448A46C4A693407685A13C9AA18A4076E99A86FEBE8B0600BDB200BE00D052 +:203F3000408FC0DBAA2B008F80DCA9A8A00DA98A9580C427A70EAB0F0361C47F01BE01D868 +:203F5000A0928052F168A6921061408D80DC809AA18A40765DB380D0A82802019196A18AA2 +:203F7000A9287E3F407685A1BE8B0600A888A927BDB2A9A8A48B1F767E03BDAA10FFA1015B +:203F9000408FFFFFA71EA986A98AAB9219278050C73FCF960302D77E40764CB3A9CDFF00E1 +:203FB000A7FFA283008D9E01FF90A18ADD97E5960502BF56910140760892BE86BE8B0600C0 +:203FD000BDB2BDAAA486008DA10100D5A9AAA50DA71EA9AAA50DA98A01DD0EDFC79294967D +:203FF000A5920852F468A28A0EDC0356D408DCCAA9590356E408ECCAA993A11B0010126755 +:20401000A19280520967008FC0DB7F529C97156040760C99126F069AA28A029B4076439D9D +:204030001E6FA19240766E9800520760069AA28A039B4076439D136F008D9E01A11B0010C1 +:20405000BF569201036808BE026F0ABEA9AAA28A10FFA101A983A60640760892BE86BE8B59 +:204070000600BDB2BDAABDA204FEA4860EDC0356D408DCCA42960356E408ECCA4396412BEC +:20409000FF9C7D52E7FFB600429280520567809A429E435426674292A91B0010E8FFAA00A1 +:2040B000A91B0F100666A9281010429E435419674292A91B1010E8FF9D00A91B88100667B4 +:2040D000A9288810429E43540C674292A98820FF0011A60FE0FF8E0043927C52E0FF8A001A +:2040F000A9AA10FFA101A71E1F767E031992C79643920356A901BF56CF03D796421B001030 +:2041100005680876303BBE924196439200D327614292A91B00100767A358A072008FC0DB95 +:204130009488066FA392429440764899A9880356A301A98003D1A9AA10FFA101A98AA793A0 +:20415000A17304D0A693D7FF9C97A793A073A6CCFF0001DB94964392A354DB66421B0010E7 +:2041700004684192BD96007643920356A9014196A993408FFFFF039AA894A959A9AA10FF32 +:20419000A101A982A98AA10E40764CB3A9CDFF0004D09B974193A073A7FFFF9005D1939615 +:2041B0004192A172069A4194A988079A9B2BA6594194A99341929B2BA85908D0A0729B2BA2 +:2041D000932B008D9E01BF569201421B0010036805BE026F08BEA9AA10FFA101A28AA9830F +:2041F00043920356A901A694A90E40760892066F039A029BA28A4076439D84FEBE82BE861F +:20421000BE8B0600BDB210FEAD5C89DCA45DAD5CC07600C18FDCA45C08F6852400D0C0763B +:2042300009C105F68424008FC0DB942B01D8A0928052FC68A4C51F767D0300921F767D03B2 +:204250007EDFC79601920452086160D162D0BF569C0ABF569408116F1F76700300D0BF5606 +:204270002002AD5C8FDCA45C9492008F22DC949601D8A0920652F6681F767D0306921F76B8 +:204290007003BF5621651A611F767D0300880092095283DE026004BE00D00129008F34DCDD +:2042B0000356A603C07601DDA00D0156A700C792949601D8A0920852F4681F767D03019241 +:2042D0000152116000D0008FC0DBA9A8A00DA98A01D830D1A092BF569C46105248D1BF564C +:2042F0009C3CF2681F767D0301920252216000D0008FC0DBA9A8A00DA98A01D830D1A092C8 +:20431000BF569CAA065248D1BF569C96F26806D0008FC0DBA9A8A00DA98A01D830D1A092E3 +:20433000BF569C73085248D1BF569C69F2681F767D0301920352116000D0008FC0DBA9A8A9 +:20435000A00DA98A01D830D1A092BF569C46145248D1BF569C3CF2681F767D0300920952A2 +:204370001B6000D0013BAD5C89DCA480008F30DFA7069481A71E008F08DCC792949601D820 +:20439000A0920F52F1683DD1008FC0DB3ED0BF569C46BF5694461F767D0301920652256070 +:2043B000008FC0DB30D032D19428A401A4C531D09428A40133D09C2884037ADF94288403AA +:2043D00048D094282C0149D094282C014AD0942820034BD094282003C792A4C56ED16FD097 +:2043F0009C967BDFC79294961F767D0305920A6100D0008F30DC9428000801D8A0920452F7 +:20441000FB684076D38390FEBE8B0600BDB2408D80DCA9287E3FA8280201A18A4076C8A1FD +:20443000809AA18A40765DB3A98080D0A988910EA70F0E60A688012920FFFFFFA60F086161 +:204450001F767D0300887ED0910EA60F166140768F9E408DC0DB7FD0912B40761A9D1F763E +:204470007D030192015217607FD91F765C03C11A10000F28FFFF0F6F00D0008F80DC949284 +:20449000008FC0DB949601D8A0928052F7681F7670033F2BBE8B0600C4A0D41A0100060062 +:2044B000C4A0D41A02000600D493009A039100530260019A06001F76BF010118F7FF06003D +:2044D0001F76BF01011A08000600227608D0408F806F1F76BE0195CCFCFF015008960BDD99 +:2044F00008CCF7FF0450089608CCDFFF1050089608183FFF1F76BF01C51A08000118F7FF97 +:204510001A761F76C10169FF0002BF560007BF56011F022BBF56040C0A2800800B2B0C2B78 +:20453000BF560F10D42BC41E001A800006001F767A032388BDB2A48BA6921352E6FF580180 +:20455000C07612C10129A7060456A601A71EC7C52076C18A240ED40F0561BF562311EFFF86 +:20457000470108D091C5673E1F767A03232B242BD118F7FFD118FDFFEFFF3A011F76C1011D +:204590000246ECFF3501C18A1F767A03240EC407A71E1F76C10107921F767A03C796BF560F +:2045B0002313240AEFFF24011F76C1010246ECFF1F0107921F767A03BF5623112596EFFF2D +:2045D00017011F76C1010246ECFF120107921F767A03BF56230F2596EFFF0A011F76C10119 +:2045F0000246ECFF050108D091C5673E1F76C10107400B6DD118FBFF1F767A03D118FEFFAE +:20461000232B242BEFFFF4001F767A03BF562309EFFFEE001F76C1010246ECFFE9000792D0 +:204630001F767A03BF56230B2596EFFFE1001F76C1010246ECFFDC0007881F767A03257EE1 +:20465000C18A240ED40F0561BF562307EFFFD00008D091C5673E1F767A03BF562309EFFF73 +:20467000C7001F76C1010246ECFFC20007921F767A03BF5623072596EFFFBA001F76C10173 +:204690000246ECFFB50007921F767A03BF5623052596EFFFAD001F76C1010246ECFFA800B2 +:2046B000079208D01F767A03259691C5673E1F767A03BF562303EFFF9B00D140086CBF5641 +:2046D00023010AD0D11A040091C5673ED141ECFF8F001F767A030AD0BF56230DD11A080032 +:2046F00091C5673EEFFF84001F76C101BF56008F082B021A20001F767A03BF562312776F91 +:204710001F76C101BF56008FC18AE4920896021A20001F767A03BF562310696F1F76C1016A +:20473000BF56008708280003021A20001F767A03BF56230E5C6F1F76C101082B021A200075 +:204750001F767A03BF56230C526F0AD091C5673E1F76C101BF56008708280005021A2000F9 +:204770001F767A03BF56230A426F24801F76C101BF56008FC18AA706C407A71EC792089606 +:204790001F767A03240A1F76C101021A20001F767A03BF5623082B6F1F76C101BF56008F4F +:2047B000C18AE4920896021A20001F767A03BF5623061D6F0AD091C5673E1F76C101BF5631 +:2047D000008708280002021A20001F767A03BF5623040D6F1F76C101BF56008708280006E1 +:2047F000021A20001F767A03BF562302BE8B06001F763000A880A927A48E14282040000245 +:20481000008FB2DE1F767C03121E4076E19F0052FD61A792A793C0FF0191A995A880A792DC +:204830002661408FA6DEAB9220BE1F90A674A792A6540267A7881F767A03A65C0356AB01C6 +:20485000263AA90E28A82A1E008FB2DE4076D99F4076E19F0052FD61A93AA60DA98EAB92DC +:20487000A694A927A792A69EA980DE601F7630001428104006001F763000A880A927A48EF4 +:20489000142820400002008FB2DE1F767C03121E4076E19F0052FD61A792A793C0FF01915D +:2048B000A995A880A7922661408FACDEAB9220BE1F90A674A792A6540267A7881F767A03A8 +:2048D000A65C0356AB012C3AA90E2EA8301E008FB2DE4076DD9F4076E19F0052FD61A93A66 +:2048F000A60DA98EAB92A694A927A792A69EA980DE601F76300014281040060002FE1F76A7 +:204910007A0336C5008FB2DE673E22761F763400008FFFB41CA81A7669FF40760CB41F76E1 +:2049300071030F8F40423A0642A8C0006FB5A9BD120F0077007702E84116008F10DF89E622 +:20495000000040764BB42376002082FE0600BDB2BDAABDA202FEA85BA58BA4864B9303528E +:204970004197C12B146106520F60A31B00103868A31B03103566A39240766E980052326078 +:20499000BF56C1032F6FBF56C1012C6FA38820FF0010A60F0460419210521561A38820FFB6 +:2049B0001010A60F0860419228520D6150520B6178520961A38820FF0011A60F1160419259 +:2049D0007C520E60005200D11161A192A394407648999A9601D94192A154F866076FBF563A +:2049F000C102C27B4193029ACA9782FEBE82BE86BE8B0600BDB2BDAA02FE1F767C032192E6 +:204A100025611F76800108421A6D0A420A6D1F767C03FABE0A061F767C032E03A60F7269A5 +:204A300004021F768001061E0A426C6C1F767C03212B1E2B1F7680010A1E0D6F1F767C038B +:204A50000402212B1F768001081E1F767C031E921F5423661F767C031A921C610876303BD2 +:204A7000BE5A1B59AD5D1C93008F40DD1D88A1CCFF0082DD1A2BA55D417E407634A21F769E +:204A90007C03A1CD00FF1F2B42CB1E962097BD7A00761E921F5436691F7680010406A940E0 +:204AB000316D1F767C03008F40DD1F581F59012904B601D89C2504BE94AF5AFF1F92C0FF4D +:204AD0001F768001A908001F08C3A9251F767C030AC51F767C0320AF1F7680010AC21F760A +:204AF0007C031F0802001F768401161E1F767C03BF5621012EC31F76840114A91F76800187 +:204B100004C282FEBE86BE8B0600BDAA34FEA892FF9C0564105204640F9A026F009A2276BF +:204B30001F76BE01AB28F0FFAA28457F09CDFFDF013B08B6A81A0010A4A908BE099700D2B4 +:204B500009CDFF3FA81A00400997A9851F7680015AFF2AC35D56A400A0A9AB2BAA28467FF8 +:204B700008D42CC2ACA91F7684015AFF5D56AC0002A8A5A9AB28E0FFAA28457F0AC3AB0379 +:204B9000AB28FAFFAA28FFFF12C21F76800107BE00AA1F768401003A08A0101E1F768001D0 +:204BB00002A900C200BE0002011960C2601A80F2081E000260C401190C1E000201191E1EA8 +:204BD00000020119221E00020119181E14C21844FF6C16065E1E5E18FFFD5E1A00015D1882 +:204BF00000FF5D1A05005E1A7F005E18FAFF5EC416C26018FFEF6006141E1844FF6D000202 +:204C1000488F70641F768301541E088F7064541A010000A00031531A0200010200BE02A8C9 +:204C3000541A06001F768001408FC2B300D4301E54C5020232A82EA9008F97B31F76370001 +:204C500008A01F768001241E26C220C31F7637000AA81F763300321A1000321A20002376D2 +:204C700000011A761F767C0369FF000200B6182B261EB4FE22C224C3BE86060006FE00020B +:204C90001F767D030ED03C1E94A3AA8820FF001F0CD094C5A60F3D61A9A9A80EA958463FFA +:204CB000A0CC00804396A0CC00404296A0CC00204196A706A018FF1F45974392447F0052EF +:204CD0000861A092805205674692008FC0DB9496429201D80861A092805205674592008FD3 +:204CF000C0DB9496419201D80861A092805205674492008FC0DB9496A9A9455C445DA80EE6 +:204D100046934076299A1F76BF010F1A01000E6F0AD094930F91085309601F767C03A7060F +:204D30001B3F1C971D7FBF561A0186FE06001F767C031992A88809611F7680010806A9409A +:204D5000046D0A06A9403E6C02D5A692013BAB28010001B6A572AA2B1F768001A9A8A581E0 +:204D7000A98308A90AC301B6C58500915AFFA692A772A9A8A781A983C5853FFFABCAAACB26 +:204D9000A71EA9A8A681A98A1F768401C48500915AFFA6853FFFAACBABCAA81A00E0061E2D +:204DB00004C322761F76800100022E1E1A760102041E1F76BF010E1A01001F767C03BF56C4 +:204DD000190169FF060002FE22761F767D03019204520460008FADAC036F008F92A61F768B +:204DF00034001AA81A760F8F40421F76710369FF3A0642A8C0006FB5A9BD120F0077007709 +:204E100002E8D123008F08DF89E6000040764BB41F7630000C2820402376001082FE060082 +:204E3000BDB2BDAABDA2407675AC00D3103B69FF407699B5267600002F760000407647B6D8 +:204E500040767BB4407696941F767D03009A0093407612A30D9A40767E91418F00C201D4FD +:204E7000A9A04076CD90418F00C202D4A9A04076CD9040760BA24076FE93008FC06FA48373 +:204E900000D20BDC0CDDC51A0100C41A0100012920FF50C340766AB4008FC06FA48301DAB1 +:204EB000A2920EDC0FDDC51A0100C41A01000A52EF64008FC06FA4830BDC0ADDC51A0100D7 +:204ED000C41A01004076CC934076469A1F767D03109B009240765EB6407670A44076B8B52F +:204EF0001F767D030192045205614076FEAD40763784407663854076939F4076D3831F7645 +:204F10007D03019206520360407681AF1F767D03C076C0DB00927EDFC79622761F76C001AD +:204F3000BF56292F1A7669FF407687A21F765C0305926761052B00D2008FC0DB013BA9A811 +:204F5000A281A98A60D09488A6925761008F7EDFA9A8A281A98AA692C40AC4544E66408F7B +:204F7000BEDEC42BA9A0A281A98AC49280520868008FBEDE013BA9A8A281A98AC42B013B26 +:204F9000086F109AA794A9CCF0FFC4968052F167008FBEDEA9A8A281A98AC4800356A203A9 +:204FB000408FF0D8A61EA792C3FFA927A606AB0D0156A500A7CD0F00A82DC59262FFA9881A +:204FD000E161013B0A6F008FBEDEA9A8A281A98AA692A0FFA988C40AA640F66C408DBEDE71 +:204FF000013BA9B2A281A98B008FC0DB009AC193407624A4C108030001DAA29202529D64ED +:205010007FD0008FC0DB9441066C7FDCC418FDFF40768F9E7FD0008FC0DB9442066C7FDC8E +:20503000C418FBFF40761A9D7FD0008FC0DB9443066C7FDCC418F7FF4076939F7FD0008F68 +:20505000C0DB9445066C7FDCC418DFFF40765C804076B3951F767D0301920152136016D061 +:20507000408FC0DB9592A58AC1FF01F016D0A3CE0356A9027FDC0790C49895CC0400C1FFE1 +:20509000A95B019206525A607FD0008FC0DB94921F767E03A99300B6D6FFC5FF01910190F4 +:2050B000A9882792026001B6A892A7CE1B61008FC06FA4831F767D030BDDC51A004001921E +:2050D00006520761045205610DDCC41A0020056F1F76BF01041A0800008FE8031F767D03DF +:2050F00032A81F767E03289200B62797026001B6A693A7CF16611F767D0301931F76BF0145 +:205110000B1A000406530661045304610B1A0020036F021A0800008FE8031F767D0332A896 +:205130001F767E03287E1F767D03320607601F76BF010D1A00400D1A00044076FD9900D2EA +:20515000A2920461408D40D0036F408DC0D3A18A4076529CA91BFFFF53611F76BF0100BE9F +:205170000F1A01001F767D0337523CC2116237523061335208623352386103523E61065273 +:2051900038613E6F34522D6135522761396F3A5208623A5212613852186139521261306F59 +:2051B0003B5207613C522C60A18A4076AA9C286FA18A4076519C246FA18A40760E9C206F97 +:2051D000A18A4076119B1C6FA18A40764D9B186FA18A4076E49A146FA18A4076E59A106F96 +:2051F000A18A40765F9A0C6FA18A4076C69B086FA18A40766D9D046FA18A4076BE9D01DA1C +:20521000A2920252E3FF91FE9C6F1B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E248 +:20523000BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF42291656227601021F762A +:205250007C0301560A00237600102676391110291A767FD0008FC0DB944F046D69FF40761B +:2052700050AB1F765C03040A049214520468042BBF56050116D1008FC0DB7FD09C9294CA83 +:205290000190A9880C9301F10191A6CB10601F767D030193065306611F76BF010B1A00084D +:2052B000146F1F76BF010B1A00200F6F1F767D030193065306611F76BF010F1A0008056FE0 +:2052D0001F76BF010F1A00200653E1FF4B011F765C03120A12930A53E0FFA1001F767D03F4 +:2052F00001931F765C030553122B0360189322601F767D030193015305601F765C031793F1 +:2053100019601F767D03019306530F6104530D61025306611F76BF010B1A0004226F1F766D +:20533000BF010B1A00401D6F1F76BF01021A0002186F1F767D03019306530F6104530D617B +:20535000025306611F76BF010D1A00040A6F1F76BF010D1A0040056F1F76BF01041A0002E3 +:205370001F765C0316930F601F767D0301930353136101531161065319601F76BF01021A95 +:205390008000186F1F767D03019303530F6101530D61065306611F76BF010B1A00100A6F02 +:2053B0001F76BF01041A8000056F1F76BF010D1A00101F765C03179315601F767D0301932E +:2053D00006530B610353046101531561196F1F76BF010B1A0040226F1F76BF01021A8000AF +:2053F0001D6F1F767D0301930653146103530D61015306611F76BF010B1A00800F6F1F760E +:20541000BF010D1A00800A6F1F76BF010D1A0040056F1F76BF01041A020000523E601F7672 +:205430005C03128062D0940EA70F37601F767D03019303530F6101530D61065306611F76C4 +:20545000BF010D1A00100A6F1F76BF01021A8000056F1F76BF010B1A001006530E610353BF +:205470000961015304610D1A0080096F0B1A0080066F0B1A0040036F021A800006530B6188 +:2054900004530961025304610B1A0004066F0B1A0040036F021A00021F765C03009A1993B4 +:2054B00000530260019AA693A9CF04611128F401132B110AC4E21100197E12E8D01F14ADF7 +:2054D0005564130A1393019100B6112B149713930791026101B6A692157F3C601F767D033C +:2054F0000092095224611F765C0316D0BF56160194937FD0D0FF9492C9FFA8CAA940026C28 +:20551000167F0C42116D0C430C6D0C44036D172B2D6F1592009B00520260019B1797266FDF +:2055300014921796236FBF561701206F1F765C030C41BF561801036C1492026F009A0C40DF +:205550001796036D162B126F14931492189716960D6F14931488149216971896177E066FEA +:2055700069FF4076FEAF4076EA9882FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE0036 +:20559000BEC5BEC4BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDAABDA80C +:2055B000BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE36 +:2055D00069FF422916561F7633002292419623760100267601012218FA002128FFFF10293D +:2055F0001F765C030E9202610E0B1F765C030D92E0FF38011F765C030F920D61FF9C0F969D +:205610000A60008FC0DBA4837FDC7FDDC518EFFFC41A04001F767D030592196100D1008FD5 +:205630000871013BA9A8A181A98AD492C3FFA988008FBCDDA9A8A181A98A69FFA192C47EFB +:205650004076018601D9A1920452EA641F767D030192065237601F76C4010992C3FFA90E47 +:20567000A9BD120F0077007763D0808DC0DB8BE60000008F40D78CE6010069FF13E2920150 +:20569000407638B56ED16FD0013B008FC0DB9A92929EA985A9BD160F6FD0C8E29402007768 +:2056B00020E7800089E6090040769AB250E800C8007790E8008800778CE600001DD013E297 +:2056D00092001F767D0301920552406000D11F765C0307921F7674033D0A3D5402623D2B7B +:2056F000008F0871013BA9A83D81A98A3D2DC492C3FFA90EA9BD120F69FF008F40D71235FF +:205710000156A4008BE60000407638B5013B1F767403008F86DE8EE60000A9A83D81A98A79 +:2057300013E2C400008F30DFA9A83D81A98A01D9C492085205613D924076E482046F3D92A3 +:205750004076B780A1920652C3641F767D030492E1FF89001F76740301293E0640FFA61E09 +:20577000013B3C85A60F39691F767D03049200D13465008F0871013BA9A8A181A98A1F7631 +:2057900074033D2D1F767D03C492C3FFA90EA9BD120F0412A194A92D008F40D769FF8BE60D +:2057B000000012350156A400407638B51F767403A192013B008F86DE3D2D1F767D030433D0 +:2057D000AB72A9A8AB81A98A01D98CE60000A19213E2C4000454CE641F7674033C0A3C920A +:2057F000FF9CA9853E0F3E681F767D03049200D11F7674033C2B11651F7674033D2D1F766D +:205810007D0369FF0412A1944076B78001D91F767D03A1920454F1641F765C0306921F7668 +:205830007403029C3D0A3D5402623D2B1F767D0302931F7674033D9200530F611F765C0363 +:20585000065402600D9A1F7674033D931F765C03069F015302600C9A69FF40762094026FC1 +:205870000D0B008F0071A4831F76330019DC01DDC51A0040C41A1000BF562101103B4192DC +:2058900082FE2296AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8AD0 +:2058B000BE86BE870300303BF1FF17760276005206601F76BF01041A0001056F1F76BF01F7 +:2058D000021A00010600005206601F76BF01041A4000056F1F76BF01021A40000600407649 +:2058F000E4A9019A4076F0A9009A4076E4A90102407663B6009A4076F0A91E02407663B69A +:205910000600009A4076F0A91E02407663B6019A4076E4A91E02407663B6009A4076E4A9EF +:205930001E02407663B60600BDB2BDAABDA20EFE00D2A98BA288A492A52D0252A65BE3FFB2 +:20595000F000A9B2026301D256FFA983AC9205640452036301D3026FAC2BAC92A58B4B2BD0 +:205970000B650A02421EA9B2C0006FB54B0AA98BAC924B54F762A9B20A650A02421EA9B2AC +:20599000C0006FB501DE58FFA98BF862A292A58BA694A988026001BEA692AC944B2B04521B +:2059B000A9880F650A02421EA9B2C0006FB5AC80A98B4B0AA69281DFFC9CA72D4B54F362DA +:2059D000AC920263AC2B019A66FFA9580152026000D08076E803A9B242C2C0006FB5441E31 +:2059F000A9B242C2C0007EB5A61E6402421EA606C0006FB5461E6402421EA9B2C0007EB5B3 +:205A1000A61E0A02421EA606C0006FB5481E0A02421EA9B2C0007EB54A1EA61E46064807CF +:205A30004407A607046000D0A02DAC5AA3921561039A013B4B96AD888ADEA6880356A90124 +:205A50000156A600C6060960AC924B5406610F024B0BC61E4B92F062A2922061019A013BBA +:205A70004B96AD5D8ADDA55D0356A9010156A5000F02C50F09614B9203520661019C0452E8 +:205A90004B96F0640B6FAD5D8ADDA55D0ABE4B920356A9010156A500C5C2009A4B2B013B5D +:205AB000AD5D8ADDA55D0356A9010156A5008076B0DAA606C507A61EC685C51E019A4B2D67 +:205AD00066FFA0CE046180020156C5004B0A4B920452E76448A3AB92AA2BFF90A927A9A95F +:205AF000AC28180037FF5AFF4A064E1E4E92FF904E964D2B4E06ABCAAACB4E1E4606009B03 +:205B1000FF903FFF5AFF4E06ABCAAACB4E1E44063B565AFF4E06ABCAAACB4E1E026F4EB256 +:205B3000408F8EDF013BA9A0A481A98A4B2BC45BA3921052246200D14E92013B0190A988DB +:205B50004E0640FF4E1EA6924076FCA901D9A1920852F364A35A00D1A293A292B0FF01906E +:205B7000A85A4076FCA901D9A1920652F66440760EAA01DB4B0A4B920452DB648EFEBE821C +:205B9000BE86BE8B060011D0008F107094920F9004520E60CCCC8001C6FF025209602276B6 +:205BB0001F76C001BF562555BF5625AA1A7669FF060022761F76C001BF5629681A7669FF82 +:205BD0000600BDB202FE1F76C001A888A9801143026C257611CC80010561227611187FFE32 +:205BF0001A762276408F1070A58AA79211D00F9001DCC41A400095CDF0FFA8CA21961A7631 +:205C1000A79204600102A98B026FA759A92880C3A828C90169FFAC1E0556A100407666AB8C +:205C3000A1A91140FF6C22761118BFFF1A76A6930153036102530A602276A69211CD7FFE64 +:205C5000039086FFA8CA11961A76A6930A60A9B2013BAC281E0040FF2256A10741FFA98B74 +:205C7000A69301530A60A9B2013BAC281E0040FF2256A10741FFA98BA69302530960A9B26F +:205C9000AC281F00013B2256A10740FFA98BA7921460A69203521160227611CC7FFFA91AD1 +:205CB000000169FF119620FFDA05407663B61F76C001111A80011A761F76710382FE69FF74 +:205CD0003AB2BE8B0600BDB202FE22761F76C001BF561A011B2B1A92036001BE046F03560C +:205CF0001A01A9881F76710342C269FF3A06C0006FB53E1E1F76C0011B92036001BE046FBB +:205D100003561B01A9881F76710342C23A06C0006FB5408D1070A18315D0008F200B3C1E32 +:205D30000CDD1F762C0094CCF8FF015014DC3596C41A04003418F7FFC51A080078768000CD +:205D50001F76C0011C1A1000A18A1C1A00041C1A00081C1A20000DDC10D91C1A00011C1A5F +:205D700000101C1A00201C1A00401C1A00801C18FBFFC41A01001D1A02001D1A04001D1AC9 +:205D900008001D1A10001D1A20001C1A04001D1A00041D1A00081D1A00101D1A00201D1AC4 +:205DB00000011D1A00021D1A00401D1A0080C11A0001201A0002201A0004201A0008201A99 +:205DD0000010201A00201A7669FF82FEBE8B0600407666AB049A029B40766EAB4076F0AB60 +:205DF000060002FE22761F762B002028FFFF2128FFFF2228FFFF2328FFFF2428FFFF252880 +:205E1000FFFF2628FFFF2728FFFF1A761F76FFCF69FF38924196399241963A9241963B92CD +:205E300041963C9241963D9241963E9241963F921F762B0041962F9201F0019082FE060058 +:205E50001B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD02FC +:205E700003E2BD0330E6000669FF4229165600D1227601021F767C0301560A00237639114E +:205E900010291A767FD0008FC0DB944F046D69FF407650AB1F765C03040A049214520668D7 +:205EB000042B1F765C03BF560501008FC06FA4831F767D0306DDC51A0100019206520E617D +:205ED00004520C61025205610FDCC41A00040A6F1F76BF010F1A0040056F1F76BF01061A48 +:205EF00000021F767D03019206520861045206611F76BF010F1A0020056F1F76BF01061AE3 +:205F1000080001021F767D033C07A61E008F204E3C1EA9A8A60F02673CA8390A39920A5236 +:205F30000264392B3592AC2B1261008FC0DBA9A8AC0DA98A62D0949239540465019A66FFC1 +:205F5000A172AC92019C3554A92DF068380A389202520265382B7FD0008FC0DB9493A89288 +:205F700016D094CAA940EDFF8300A84B586D20FF204E3C0F306938920A60013B1F766F03D5 +:205F900000D401D569FF0085407621AA1F767D03389201520A60008FC0DB013B01D569FF99 +:205FB000CC8501D4407621AAA192408DC0DB02D400D569FFD1CEA90E407621AA1F767D0390 +:205FD000389202527B60013B03D400D5D985407621AA746F3892076000D4000200D569FFCA +:205FF000407621AA1F767D0338920152076001D4000200D569FF407621AA02D4000200D535 +:2060100069FF407621AA1F767D0338920252566003D4000200D5407621AA506F389208607E +:2060300020FFB82200D401D569FF407621AA1F767D0338920152086020FFB82201D401D586 +:2060500069FF407621AAA10E02D400D569FF407621AA1F767D03389202523060012903D440 +:2060700000D520FFFFFF407621AA286F69FF4076E2B538920760013B00D404D534854076C8 +:2060900021AA1F767D03389201520760013B01D404D53485407621AA1F767D0302D400D5A8 +:2060B0003A06407621AA1F767D033892025206603A0603D400D5407621AAAFE2BE03AFE226 +:2060D000BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177673 +:2060F000027602FE2276008F57A81F7635000AA81A7669FF407633B61F763300221A2000BB +:20611000237601001F767D03019206522360008F00711F76C401D4CCF0FF05500296DCCCD4 +:20613000F0FF0350039603CC1FFF1050039603CCFFF1A91A0005039603CCFF0FA91A00408E +:206150000396E4CCF0FF0750049604CC0FFF205004961F767D03019203521460008F0071AD +:206170001F76C401D4CCF0FF02500296DC18F0FF03CC1FFF1050039603CCFFF0A91A0002F0 +:2061900003961F767D03019201522860008F00711F76C401D4CCF0FF06500296DCCCF0FF65 +:2061B0000550039603CC0FFF4050039603CCFFF7A91A0007039603CCFF0FA91A002003965A +:2061D000E4CCF0FF0350049604CC0FFF6050049604CCFFF1A91A000104961F767D03019235 +:2061F00002520960408F0071A58A02DCC418F0FFDD18F0FF019205524C60408F0071A58AD1 +:206210001F76C40102DCC41A0F00DDCCF0FF0250039603CC3FFF3050039603CCFFF0A91A1F +:206230000006039603CCFF0FA91A00C00396E5CCF8FF0A50049604CCBFFFB050049604CC22 +:20625000FFF7A91A0007049604CCFF0FA91A00400496EDCCF0FF0550059605CC1FFF105072 +:20627000059605CCFFFEA91A000E05960518FF0FF5CCF8FF08500696061AF00006CCFFFD84 +:20629000A91A000D069606CCFF0FA91A00900696408F0071C0760068A5C41F76C401A78AE1 +:2062B0001AD019DD01DEC61A000119DC011A0008C51A1000001A10000018BFFF001A000FFE +:2062D000011A00401F763300BF5621011F76A001C41A000819CCFFFCA91A0004199697CC7F +:2062F000FFFDA91A00011A96BF56098000CC7FFCA91A0001009600CCFFE3A91A00080096D0 +:2063100000CC001CC9FFA92D019A66FFA98800CC800304600102AC1E086F00CC8003013B34 +:20633000C6FF80FFA985AC1E013BA6851F7671034456A900421E3A06C0006FB5008FA60E97 +:2063500042A8C0006FB51F767D0301931F76A00105960018FCFF025303602502026FBB02C5 +:206370001F76740382FE3E1E0600009A019C1952FE640600005206601F76BF010D1A0010D1 +:20639000056F1F76BF010B1A00100600BDB21F76BF01BDAA0D1A0008BDA2A95B0102407673 +:2063B00063B600D1808DC06FA28AA392CEFF0BDCC41A0080407647AFA39280FFA95B0102CD +:2063D000407663B60DDA0102C21A0080407663B601D9A1921052E7641F76BF010B1A00088D +:2063F000BE82BE86BE8B06001F767D03BF562A052B287017008F59021F767803BF56203C1C +:206410001F767803BF5621A01F7678031F2870171F767D0330A80600BDB2BDAABDA202FE80 +:2064300079D0008FC0DBAC1E013BA98B94854C82A61E4456A90042A2C0006FB578D0A98375 +:2064500042A2215694004456A100C0006FB57FD0A607A5039449046C7AD0013B9485A918CD +:20647000FF0FA95AA91A0080407653AF7BD0A9B2408FC0DB34FF957AA61EA9B242A232FF7A +:20649000A607C0006FB5A98A42A2C802AC1EA9B24456A900C0006FB51CD0A49E82FE289CBC +:2064B0009596BE82BE86BE8B0600A9280290407653AF1F767D03019206520F6104520D617F +:2064D000025206611F76BF010F1A00040A6F1F76BF010F1A0040056F1F76BF01061A00024D +:2064F000060002FE1F767D03320604610102415632002A922C0A2C546F6630062C2B4C6088 +:206510007FD0008FC0DB9447176C2B92C0FF2D5402672D0A2B922D0A2D5402672D96C4E2B0 +:206530002D00C4E22B014FE800C84FE80980007710E74000086F2E922D2B90E5019CA9187D +:20655000FF032E968EE600002D802B88A9BF120F2E931F7678031E7F1F7678031F7E1F7658 +:20657000780322960D617FD094480A6D1F767D032B88013BA98542C2407699AF2D6F407642 +:20659000E2AF1F767D03008FC0DBBF562E017FDCC418FFFE216F30060119A61E301E20FF92 +:2065B0005802A60F136120FFF401300F0F6120FF9001300F0B6120FF2C01300F0761C8026D +:2065D000300F04616402300F07604076E2AF1F767D03BF562E0182FE06001B76F0FF050050 +:2065F000BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E61F +:20661000000602FE69FF422916561F76330032924196237600012676000132187500212883 +:20663000FFFF1029408FC0D369FFA58A40768A9140768F91103B4192329682FEAFE2BE03BB +:20665000AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FFE9 +:20667000177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0173 +:2066900003E2BD0203E2BD0330E6000602FE69FF422916561F763300329241962376000149 +:2066B00026760001321871002128FFFF1029408FC0D369FFA58A40768A9140766092103B35 +:2066D0004192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83E7 +:2066F000BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E20A +:20671000BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F762E +:2067300033003292419623760001267600013218FD002128FFFF1029408F40D069FFA58A07 +:2067500040768A9140768F91103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE00DA +:2067700080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABC6 +:20679000BDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E60006DF +:2067B00002FE69FF422916561F7633003292419623760001267600013292322B2128FFFF88 +:2067D0001029408F40D069FFA58A40768A9140766092103B4192329682FEAFE2BE03AFE238 +:2067F000BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF17764C +:2068100002762276008F806FA483A4C41F76BE0126DDC51A030027DE261A0C00A483261A5A +:206830003000261AC000261A000317DD261A000C261A0030261A00C0C61A0300271A0C00F5 +:20685000271A3000271AC000271A0003271A000C271A0030271A00C0C51A0300A48328DDA5 +:20687000171A0C0016DC171A3000171AC000171A0003171A000C171A0030171A00C0C51AE5 +:206890000300281A0C00281A3000281AC000281A0003281A000C281A0030281A00C0C41A3E +:2068B00000C0161AC000161A0030161A000C1A7669FF06002276008F806FA4C4A4831F7644 +:2068D000BE0118DEC61A030019DD181A0C00181A3000181AC000181A0003181A000C181AE3 +:2068F0000030181A00C0C51A0300A48369FF191A0C0014DD15DC191A3000191AC000191A4B +:206910000003191A000C191A0030191A00C0C51A0300141A0C00141A3000141AC000141A39 +:206930000003141A000C141A0030141A00C0C41A0300151A0C00151A3000151AC000151A25 +:206950000003151A000C151A0030151A00C040768EB10600227615D0008F200B1F762C00A8 +:2069700094CCF8FFA483A4C5A4C40150359614DDC518FCFF0CDF3418F7FFA4830DDE341A46 +:206990000400C41A60000EDDC41A1C00C41A0300C41A0030C41A000EC41A8001CC1A400060 +:2069B000C41A0040C41A0080211A0300C71A60002C1A1C002C1A03002C1A00302C1A000E57 +:2069D0002C1A8001C61A40002C1A00402C1A00802D1A0300C51A6000A4830FDD2E1A1C0074 +:2069F00018DC2E1A03002E1A00302E1A000E2E1A8001C51A40002E1A00402E1A00802F1AF9 +:206A10000300C41A0700381A38001A7669FF40768EB107F6007769FF0600BD3ABDB2BDAA58 +:206A3000BDA202FE0129A9BF120F58FF5B61A85C7F91A8088000421EA493D6FFA85CA9BF05 +:206A5000160F6761A85D7F91A8088000A859A958A593D6FFA85DA493A571A8180001A69795 +:206A7000A418FF00A518FF007FDCA492A59EA7964D64A90801FF3E62A193A09236FFA859E0 +:206A9000A958420635FF0EF6A11FA95BA3010AF6A11F2D56A204A32DA03640FF0BF6A11F6E +:206AB00033FF009B30FF54FFA20CA39540FFA70801001FF677FF200940FFA70801001FF6EA +:206AD00077FF5AFFA7922265A90801FF1363A9A946FF7F91A85BA95AA625A79596FFA20CF9 +:206AF000A395A9BD120F82FEBE82BE86BE8BBE8E0600009B57FFA8087FFF5AFFA693F26025 +:206B1000A8280080AA71AB92ED6F20FF0000EA6F5AFFA493A818000196FFA85CA9A9A808FD +:206B30007FFFA81C0080A4CBDD6F58FF5AFF00BE25610129A6920190A958A60640FFA4074A +:206B5000A71EC793A640046DA892C7FFA92DA09201520460A8CCFF00A92DAC58A592A0F2DA +:206B700001DEA092FF90A958A592408FC0DAC7FF9570A95DA9A9A60FDE66A5920600A71EA6 +:206B90008076C0DA0A6FA5928470FF90A95881DFA592C7FF9670A95DA706F660A592060078 +:206BB0000052A927FF76FFFF00BE3365A9A8013BA681A983A793C592FF90A92FAA71A880BF +:206BD000009AA740046DB0FFA880056FB0FFA81C01A0A880019C0852F564A9A8013BA68128 +:206BF000A983A793C592C7FFA92FAA71A880009AA740046DB0FFA880056FB0FFA81C01A096 +:206C1000A880019C0852F56401DEAB92A654CF62A79206001B76F0FF00E2BD0030E600062B +:206C300002FE422916561F7633003292419623760001267600013292322B2128FFFF102932 +:206C500001021F767C03180A1F768001061E1F763300211A0001103B419282FE329680E2E5 +:206C7000BE00303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2B4 +:206C9000BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300329254 +:206CB000419623760001267600013292322B2128FFFF1029008F006169FF4076CBA31F7604 +:206CD000800102020C1E1F763300211A0001103B4192329682FEAFE2BE03AFE2BE02AFE257 +:206CF000BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF1776027600021E +:206D10001F763000008F000C0119021E1F767C03408F100C000200A81F763000062B011910 +:206D3000072BE41A1000041A20001F763000008F080C0A1E1F76300000020119121E1F768F +:206D5000300000020E2B0F2B1F767C0308A810A0021E1F763000162B172B1F763000E41ADF +:206D70001000E51A10000C1A20001F763000141A20001F767C03121E0A1E060000E0E45005 +:206D900003E2F40188E61000C48303E2D500C483F52BC483FD2BC483E51A1000C483E51A18 +:206DB0002000C483E518FFFBC483E518FFF7C4830002E51A0040D41E06000129BDB240FFD3 +:206DD000BDAAA98B00D208611002407663B601DAA9B2A20FFA66BE86BE8B06001F76C001BC +:206DF000201A001040768EB12276008F200BA4C4A4831F762C000ED015DE14DDC618F8FF0B +:206E1000C51A03003418F7FF3418FBFF94CCBFFF20502E960FDC2ECCE3FF08502E962ECCC9 +:206E3000FCFF01502E962ECCFFDFA91A00102E962ECCFFF7A91A00062E962E187FFEC418A7 +:206E5000BFFF2E18FFBF2E18FF7F2F1A03001A7607F6007769FF0600AD28000469FF1F5628 +:206E700016561A5610E6000240291F76000002291B762276A92867B6A828000001091B6198 +:206E9000C07667B604290F6F009BA92401DF046C0429A82401DFA61EA1F78624A706A1817E +:206EB0000109A71EA92403635CFF043BA95901DF0900ECFF1A76A928FFFFA828FFFF010919 +:206ED0000E61FF76FFFF066F01DFBDC3A71E673EBEC5A92401DFA82458FFF7604076FFB56D +:206EF00040761CB61B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0168 +:206F100003E2BD0203E2BD0330E6000669FF42291656227601021F767C0301561200008F16 +:206F3000B2DE69FF1F767A0338C5673E1A76AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E261 +:206F5000BE00BEC5BEC4BE83BE8ABE870300303BF1FF17760276BDB2CFE6010008D003E24B +:206F7000BD040ED103E2BD0503E2BD0603E2BD07AFE2F400AFE2D40510E394040CD012E31E +:206F90009C1F0ED118E394DA0AE3C4A000E3E4C600E7BB0110E700010CD010E7C00003E2ED +:206FB0009C0203E2940008D0F406941E03E2F401AFE2BE07AFE2BE06AFE2BE05AFE2BE04FA +:206FD000BE8B0600022904295F565AFF42065F56421E00021FF617564200AB063256022965 +:206FF0002076022904295F565AFF420656FF421E00021FF6175642003256022920765AFF20 +:2070100000021FF617564200A9A920765AFF00021FF6175642002076103B1F7633002018B2 +:20703000FEFF222B242B69FF262B282B2A2B2C2B2E2B302B322B342B362B382B232B252B1D +:20705000272B292B2B2B2D2B2F2B312B332B352B372B392B06001F763300201A0100212840 +:20707000FFFF102969FF06000000A0E514AD0962A0E51F76740314AD90E5B4562901156F2B +:207090004FE803C092E601008CB5050000E7CA00007700E78A000077CFE812F0007700E700 +:2070B0005100007700E74000060002FE1F767D03360AC4E23600007712E8D01F14AD116404 +:2070D000370A3792362B0A520260372B3734570434963A0603610002036F000201193A1EF9 +:2070F00082FE0600A928FFFFAA28FFFFAB28FFFFA828FFFFAB0F04ED00D400BE0B6FA92735 +:20711000A928FFFFA92FA4A9C488A928FFFF0209A98AA69240769DA406000077006F1F7662 +:207130007E03BDB21EC5A959673E1F767E0322C5A70603ECA192673E1F767E03200603EC29 +:20715000A71E673E40761AB6BE8B060022761F76C00169FF1C1A0800787680001A761F76B9 +:20717000C401028FE64969FFBF5618E0A9A8407663B60600408F00C0008F000D2276009A82 +:2071900085C4019C805284C2FC641A7669FF06001F767E031CA806001F767E031EA80600C1 +:1471B00006001F767E031897199606000119C356FFFF060014 +:2071C4001201000000C0A78B0000A78B0000A78B0000A78B0000A78B0000A78B0000A78B7A +:2071E4000000A78B0000A78B0000A78B0000A78B0000A78B0000A78B0000758C0000688C6A +:207204000000F88F00009A8B00000F890000B18B0000828C0000458A00003A8A00002F8A90 +:207224000000248A0000198A00000E8A0000038A0000F8890000ED890000668A00005B8A08 +:207244000000508A0000DD8A0000C28A00000F890000B9890000A089000005900000718A0A +:207264000000D2890000078E0000D18D00009B8D0000658D00002F8D0000F98C00000F89C9 +:2072840000000F890000228E0000EC8D0000B68D0000808D00004A8D0000148D00000F89C9 +:2072A40000000F890000CF8E0000B48E0000998E00007E8E0000638E0000488E00000F8901 +:2072C40000000F890000DE8C0000C38C00000F8900000F8900000F8900000F8900000F8961 +:2072E40000000F890000A78A00008C8A0000F28B0000BC8B00000D8C0000D78B00000F8954 +:2073040000000F890000DD8F0000C28F0000A78F00008C8F0000718F0000568F00000F8946 +:2073240000000F890000A88C00008D8C00000F8900000F890000498B0000F88A00000F8946 +:2073440000000F8900007F8B00002E8B0000648B0000138B00003B8F0000058F0000208F34 +:207364000000EA8E00000F8900000F8900000F8900000F8900000F8900000F8900000F8969 +:2073840000000F8900000F8900000F8900000F8900000F8900000F8900000F8900000F8929 +:2073A40000000F890000858900006A8900004F89000034890000198900000F890000288CAD +:2073C4000000438C00002C012C01000000000F00160014000A003C000A00080006000800E1 +:0A73E4000600080033000B000A0049 +:2073EE004800000012C1EAA0000077A10000D8A0000067A10000CBA0000059A10000BEA07F +:20740E00000042A10000A4A0000032A1000097A0000028A100007BA000001BA100006EA07F +:20742E0000000DA1000061A0000001A100004BA0000036A000005A9900005E990000F399B6 +:20744E000000E99900006199000064990000689900006D99000072990000789900007D996C +:18746E00000081990000CD990000ED99000084990000F9990000000051 :00000001FF diff --git a/Bin/UKSSTMS320F28335.map b/Bin/UKSSTMS320F28335.map index a9c3b51..a2ea084 100644 --- a/Bin/UKSSTMS320F28335.map +++ b/Bin/UKSSTMS320F28335.map @@ -2,7 +2,7 @@ TMS320C2000 Hex Converter v5.2.7 ******************************************************************************** -INPUT FILE NAME: +INPUT FILE NAME: OUTPUT FORMAT: Binary PHYSICAL MEMORY PARAMETERS @@ -12,20 +12,20 @@ PHYSICAL MEMORY PARAMETERS BOOT LOADER PARAMETERS Table Type: SERIAL PORT (SCI 8 bit Mode) - Entry Point: 0x0000afe1 + Entry Point: 0x0000b4b9 OUTPUT TRANSLATION MAP -------------------------------------------------------------------------------- 00000000..003fffff Page=0 Memory Width=8 ROM Width=8 -------------------------------------------------------------------------------- - OUTPUT FILES: C:\setcorp\git\tms_periph_28335\166\Bin\UKSSTMS320F28335.bin [b0..b7] + OUTPUT FILES: UKSSTMS320F28335_e8cb0244.bin [b0..b7] - CONTENTS: 00000000..00006aaf BOOT TABLE - .cinit : dest=0000b1a4 size=00000262 width=00000002 - .text : dest=00008000 size=000031a4 width=00000002 + CONTENTS: 00000000..00007485 BOOT TABLE + .cinit : dest=0000b667 size=0000026a width=00000002 + .text : dest=00008000 size=00003667 width=00000002 .econst : dest=0000c000 size=00000112 width=00000002 - .switch : dest=0000c112 size=00000028 width=00000002 + .switch : dest=0000c112 size=00000048 width=00000002 -------------------------------------------------------------------------------- 00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*" diff --git a/Bin/UKSSTMS320F28335.out b/Bin/UKSSTMS320F28335.out index 843254e..738d25a 100644 Binary files a/Bin/UKSSTMS320F28335.out and b/Bin/UKSSTMS320F28335.out differ diff --git a/Doc/PERIPH28335_CAN.md b/Doc/PERIPH28335_CAN.md new file mode 100644 index 0000000..f78147f --- /dev/null +++ b/Doc/PERIPH28335_CAN.md @@ -0,0 +1,112 @@ +# periph_28335: общая панель RS/CAN и регистратор УМП + +## Где находятся панели + +В верхнем ряду вкладок, рядом с **Altera Logic**, появилась **periph_28335**. +Внутри неё: + +- **Dima / CAN terminal** — существующий CAN-терминал, его проекты, узлы и настройки адаптера; +- **rs232_periph_28335** — существующие операции RS232/485, Modbus и настройки COM; +- **Логгер УМП** — единая панель графиков и архива для обоих транспортов. + +В общей группе CAN остались «Шина CAN / мост» и «DevBoard_V1». +В общей группе RS232/485 остался RS_TERMINAL_2812. +Терминалы сохраняют свои соединения: перенос вкладок не создаёт новые порты. + +## Онлайн и чтение по CAN + +1. Откройте **periph_28335 → Dima / CAN terminal → Настройки**. +2. Выберите Candle/gs_usb либо SLCAN/Lawicel и канал адаптера. + Для штатной прошивки Бальзам 166 используется CAN 250000 бит/с. + Нажмите «Подключить». +3. Перейдите в соседнюю вкладку **Логгер УМП**. +4. В строке **Связь логгера** выберите **CAN · адаптер Dima**. +5. Укажите **CAN-плата (Mode)**: физический номер платы в прошивке, 1..16. + Платы нагрузки Бальзам 166 имеют номера 5/6; выбирайте фактически подключённую. + Это не RS-адрес 16 и не индекс строки таблицы Dima. Выбор проекта в Dima + не меняет CAN-адрес регистратора: он явно определяется этим полем. +6. Нажмите **Начать запись** или **Онлайн**, если запись на плате уже идёт. + Остальные действия, флажки, легенда, единицы мА и CSV одинаковы для RS и CAN. +7. После команды отключения и секунды постинтервала нажмите + **Прочитать отключение**. Запись текущего банка на плате продолжается. + +Кнопка **Настройки связи** открывает настройки выбранного транспорта. +Состояние адаптера/порта и адреса CAN постоянно отображаются над графиком. +**Прервать обмен** останавливает чтение GUI, не посылая команду остановки +регистратора или УМП. При переключении канала/платы незавершённые запросы +отменяются, поздние ответы не продолжают старую цепочку. + +Для RS выберите **RS232/485** и настройте COM в соседней RS-панели: +обычно 115200, адрес 16. Сообщения «не подключён» и «занят запросом» разделены. +Отключение RS-порта не останавливает CAN-просмотр. CAN-разрыв не мешает RS. +Демо, если оно включено в сборке, по-прежнему работает без физической платы. + +## Изменения прошивки + +Для CAN требуется новая прошивка этой ветки. Предыдущая версия регистратора +умела отдавать данные только через Modbus. Старая плата игнорирует новые +служебные запросы; GUI сообщает о тайм-ауте без изменения команд УМП. + +- MBOX0: прежняя передача технологических данных, ID 0xBA0010 + Mode - 1. +- MBOX1: прежний приём команд, ID 0xBA0000 + Mode - 1; дополнительно + распознаётся служебный заголовок 0x1F00 и длина ровно 8 байт. +- MBOX2: отдельные ответы регистратора, ID 0xBA0020 + Mode - 1. + +Биты маски записи регистров у служебного запроса равны нулю. Обработчик +перехватывает его до изменения modbus[] и до журналирования CAN-команд: +опрос собственного журнала не заполняет журнал. + +Запрос ставится в очередь из ISR. Основной цикл формирует целый снимок +под короткой блокировкой IRQ и отправляет максимум один кадр за вызов +UMP_CAN_service(). Ожидания передачи в цикле нет. Перед следующим +фрагментом приоритет отдаётся ожидающей штатной телеметрии MBOX0. +Если ACK служебного mailbox не приходит 250 тиков таймера, передача +отменяется. При этом штатные CAN-команды и MBOX0 не отменяются. + +По CAN доступны те же расширенные адреса 0x1000 / 0x1010 / 0x1100, +состав записи и версия снимка 2. Новый протокол не даёт писать через +служебный запрос в технологические адреса 0..127. + +## Формат кадров + +CAN 2.0B, расширенный ID, 8 байт данных. Порядок соответствует существующей +прошивке: MDL (слова 1,2), затем MDH (заголовок, слово 0). Каждое слово +содержит сначала старший байт. + +Запрос: `[адрес BE16, значение/длина BE16, 0x1F00 BE16, token:function BE16]`. +Функция 3 — чтение, 6 — запись; token — номер запроса 1..255. + +Ответ: `[данные0 BE16, данные1 BE16, (0x1F00+индекс) BE16, token:error BE16]`. +Номер фрагмента 0..61, в нём два слова снимка. Ошибка 0 означает успех, +1 — неизвестная функция, 2 — неверный адрес/диапазон, 3 — запрещённое значение. +У записи успешный ответ содержит эхо адреса и значения. + +Пример: Mode=5, token=7, чтение статуса 16 слов. +Запрос ID `0x00BA0004`, данные `10 00 00 10 1F 00 07 03`. +Ответы ID `0x00BA0024`, восемь фрагментов по два слова. +Онлайн-снимок из 124 слов передаётся 62 фрагментами. + +GUI принимает только ответ выбранной платы с номером текущего запроса, +восстанавливает порядок фрагментов, игнорирует одинаковые дубликаты и +отклоняет противоречащие. Неполный снимок не попадает на график. +После потери подтверждения записи GUI прямо сообщает, что команда могла +выполниться; автоматического повторного старта регистратора нет. + +Онлайн показывает последние три записи из полного снимка. При высокой +нагрузке шины/низкой скорости возможны пропуски онлайн-отображения; +они считаются существующим счётчиком. Архив читается целиком по блокам. +Предполагается один активный читатель архива: его курсор общий для RS/CAN. +Одновременное управление архивным курсором из двух независимых программ +не поддерживается. + +## Проверки и ограничения + +CAN-доступ перенесён из 167 с сохранением формата ответов SetGUI. +Host-тест проверяет формирование ответов, границы и запрет записи +технологических команд через диагностический сервис. Полная сборка и +линковка TI C2000 22.6.1.LTS прошли; размещение памяти проверено по MAP. +Подробности адаптации 166: [UMP_LOGGER.md](UMP_LOGGER.md). + +Испытание CAN на реальной плате ещё требуется: проверить тайминги IRQ и +приоритет штатной телеметрии на нагруженной шине. Архив находится в ОЗУ: +команда отключения фиксирует его, пропадание питания стирает. diff --git a/Doc/UMP_LOGGER.md b/Doc/UMP_LOGGER.md new file mode 100644 index 0000000..c2ee27c --- /dev/null +++ b/Doc/UMP_LOGGER.md @@ -0,0 +1,188 @@ +# Логгер запуска и отключения УМП: прошивка Бальзам 166 и SetGUI + +## Назначение и работа оператора + +В SetGUI открыть **periph_28335 → rs232_periph_28335 → Настройки**, +выбрать COM, скорость (обычно 115200) и собственный адрес платы `Mode` +(для платы нагрузки 5 или 6), затем **Логгер УМП**. Для CAN использовать +**can_periph_28335**, выбрать соответствующую плату и **Логгер УМП**. +Общий RS-адрес 16 здесь не рекомендуется: ответ содержит собственный адрес, +и SetGUI проверяет совпадение адресов. CAN-настройки: [PERIPH28335_CAN.md](PERIPH28335_CAN.md). + +Перенесён протокол v2 из 167: 40 слов на запись, два банка по 800 записей. +Существующий SetGUI понимает эту прошивку без изменений программы. +Кнопки записи управляют регистратором; команду запуска УМП подаёт контроллер. + +1. **Начать запись** включает только регистратор, не пуск УМП. + Период снимков по умолчанию 20 мс, диапазон 1–1000 мс. +2. Флажки выбирают отображаемые сигналы. Аналоги рисуются линиями, + дискретные сигналы — отдельными дорожками. Выбор не меняет состав + записи на плате: скрытую кривую можно включить после захвата. +3. **Онлайн** подключает график к уже идущей записи, в том числе после + восстановления соединения. Тайм-аут не посылает плате команду останова. +4. Фронт `cUMPreset` (бит 6 команды 0x7F) или спад `cUMPstart` (бит 7) + запускает фиксацию отключения. Ещё через 1000 тиков таймера / 1 секунду + банк становится архивом. Повторные команды внутри этой секунды + не продлевают интервал. Другие изменения команд не служат триггером. +5. **Прочитать отключение** загружает архив, не останавливая запись на плате. + На время чтения и просмотра архива онлайн-график приостанавливается; + вернуться к нему можно кнопкой **Онлайн**. +6. **Остановить и прочитать** останавливает только регистратор и читает + текущий банк. При этом существующий архив отключения остаётся доступным. +7. **Сохранить CSV** сохраняет все поля загруженного/онлайн-буфера, + включая невидимые кривые, время и код события. История GUI ограничена + 800 последними точками; это не непрерывная запись на диск. + +При разрыве связи журнал на плате продолжает работать. Архив хранится в ОЗУ +до следующей фиксации отключения либо перезагрузки/пропадания питания. +EEPROM не используется: под отключением в этой задаче понимается команда +управляющего контроллера, а не потеря питания. + +## Память и точность + +Использована существующая секция `.logg` по адресу 0x200000: 64000 +16-битных слов. Два банка по 800 записей × 40 слов занимают её целиком. +Текущий банк кольцевой. При триггере сохраняются последние до 399 записей, +добавляется событие отключения, оставшаяся половина банка отведена +постинтервалу. При 20 мс это до примерно 8 секунд до отключения и 1 секунды +после. Дополнительные события CAN и дискретов сокращают временную глубину. + +При интенсивном потоке событий или периоде 1 мс постинтервал может заполнить +свои места раньше секунды. Последнее место зарезервировано под конечный +снимок; он помечается `event & 0x200`, и GUI сообщает об усечении. +Событие отключения и предыстория при этом не вытесняются. + +Время — 32-битный счётчик миллисекунд записи. Он идёт только при включённом +регистраторе и не является абсолютным временем. События в одном тике имеют +одинаковую отметку; порядок сохраняется порядком записей. На перезапуске +регистратора счётчик продолжает прежнюю шкалу, при перезагрузке платы — 0. + +Онлайн-опрос возвращает три последних записи каждые 40 мс. Он не гарантирует +передачу каждого события при высоком CAN-трафике, медленном UART или паузах +GUI. Номера записей позволяют убрать дубликаты и явно показать пропуски. +Полный сохранившийся фрагмент следует читать кнопкой архива. Частота 20 мс +выбрана с учётом размера кадра; на низких скоростях нужна большая пауза +снимков и подходящий тайм-аут RS. + +Все писатели и чтение одного Modbus-блока используют короткие критические +секции с восстановлением прежнего состояния IRQ. Внутри нет ожидания UART, +EEPROM, выделения памяти или копирования целого банка. Реальную задержку +прерываний и длительность критических секций нужно измерить на F28335. + +## Состав записи: 40 слов + +| Слова | Данные | Единицы/смысл | +|---|---|---| +| 0–1 | Время, младшее/старшее слово | мс записи | +| 2 | Событие | 1 период, 2 CAN RX, 3 изменение I/O, 4 RS-команда, 5 конец постинтервала | +| 2, бит 8 | Триггер отключения | флаг поверх причины события | +| 2, бит 9 | Усечён постинтервал | установлен в конечном снимке | +| 3 | Commands / modbus[0x7F] | все 16 бит, в том числе пуск, сброс, инициализация и калибровка ЦАП | +| 4 | Входы OMEGA, Start_1, Res_in | биты 0,1,2, активный уровень приведён к 1 | +| 5 | START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0,1,2, активный уровень приведён к 1 | +| 6 | IMPowse | остаток импульса, мс | +| 7 | WAKEpowse | остаток инициализации, тики DAC_FREQ | +| 8 | modbus[0x7B] | 12-битный код, переданный функцией dSEND в ЦАП | +| 9 | modbus[0x1C] | расчётное задание в 0.1 мА; GUI/CSV переводит в мА | +| 10–13 | sens_data[0..3] | измеренные сигналы, знаковое 16-битное значение в исходном масштабе | +| 14–17 | modbus[0..3] | маски ошибок измерений | +| 18 | CAN заголовок | адрес регистра в младших 13 битах и маска трёх слов в старших | +| 19–21 | Три слова последнего принятого CAN-кадра | без преобразования | +| 22 | Счётчик записанных CAN RX | младшие 16 бит | +| 23 | CanTimeOutErrorTR | младшие 16 бит счётчика тайм-аутов CAN TX | +| 24–25 | Фиксированные границы разгона 166 | 6 и 16 мА; это не регистры настройки | +| 26–28 | DAC_min(), DAC_max(), DAC_cal() | коды калибровки и ручного задания ЦАП | +| 29–30 | DAC_04, DAC_20 | значения соответствующих регистров | +| 31–32 | count_load, time_dac | положение и длительность разгона в тиках | +| 33–34 | Эффективные границы разгона 166 | 60 и 160 в 0.1 мА; GUI показывает 6 и 16 мА | +| 35 | kod | целочисленное положение, используемое Anal_output | +| 36–39 | adc_table_lem[0..3] | ADCRESULT2..5 после сдвига на 4, диапазон 0..4095 | + +**Отправленный код ЦАП не является измеренным током выхода.** В этом проекте +не установлено, какой вход аппаратно измеряет ток ЦАП. При включённом +`cCalibrDac` отправляется `DAC_cal()`, а расчётное задание 0x1C остаётся +результатом алгоритма разгона. Для диагностики это различие сохранено. +В 166 каналы «АЦП 0..3» берутся из `adc_table_lem`, обновляемой в режиме +нагрузки. Таблица `adc_table_tpl` в этом режиме не обновляется и не используется. + +Управляющая формула 166 сохранена: `sinus = 10/16 * count_load + 2/16 * time_dac`. +Регулируемый разгон и ограничители 167 не переносились. Поля границ показывают +фиксированные 6..16 мА; записи в регистры 0x50/0x51 или 0x64/0x65 их не меняют. +`READY` в 166 — обратный счётчик начальной задержки: запись разрешена при +`READY == 0`. Это противоположно флагу готовности 167 и учтено при переносе. + +## Протокол расширения Modbus + +Технологические адреса 0..127 сохранены. Новая область использует полный +16-битный адрес; исходная реализация игнорировала старший байт. +Сначала GUI читает 16 слов 0x1000 и проверяет сигнатуру, версию, размер записи +и тип платы. До успешной проверки расширенные записи запрещены. +Обычный ответ расширения не содержит исторических хвостовых нулей. +Между ответом и следующим запросом GUI выдерживает паузу RTU. + +FC03, 0x1000, 16 слов: + +| Смещение | Значение | +|---|---| +| 0,1 | 0x554D, версия 2 | +| 2,3 | состояние и число записей выбранного источника | +| 4,5 | 40 слов в записи, 800 записей в банке | +| 6 | период периодических снимков, мс | +| 7,8 | счётчик времени, младшее/старшее слово | +| 9,10 | Desk (требуется 6 / dsk_LOAD), Mode | +| 11 | частота временной базы, 1000 Гц | +| 12 | поколение архива, mod 65536 | +| 13 | число записей архива | +| 14 | оставшиеся миллисекунды постинтервала | +| 15 | состояние текущего регистратора независимо от выбора источника | + +Состояния: 0 — ещё не запущен, 1 — запись, 3 — остановлен/архив. + +FC06: +- 0x1000: 1 — новый текущий журнал, 0 — остановить его; +- 0x1001: период 1..1000, менять только при остановленном журнале; +- 0x1002: хронологический индекс первой записи окна 0..799; +- 0x1003: источник окна, 0 — текущий остановленный банк, 1 — архив отключения. + +FC03, 0x1010, до 120 слов: окно до трёх записей от установленного индекса. +Чтение текущего банка этим окном во время записи не выдаёт изменяющиеся +данные. GUI сначала останавливает его; архив можно читать при работающем +текущем банке. После всех блоков GUI повторно проверяет поколение архива; +при замене во время чтения результат не подменяет предыдущий график. + +FC03, 0x1100, ровно 124 слова: онлайн-блок. Слова 0,1 — 32-битный номер +первой записи, 2 — число записей 0..3, 3 — поколение архива, далее до трёх +записей по 40 слов. Неиспользованные слова равны нулю. Окно онлайн не +зависит от курсора/выбора архива. Разделение 0x1010 и 0x1100 предотвращает +пересечение двух окон. + +Недопустимые диапазоны и значения возвращают исключения Modbus 2/3. +CRC и разбор стандартного ответа GUI используют существующее общее ядро. +Расширение описано отдельно в core/ump_logger.py, без изменения общей +библиотеки и без необходимости пересобирать её DLL. + +## Проверка и запуск + +Перенесены регистратор и RS/CAN-доступ из коммитов 167 `df71922` и `a3633d8`. +Сборка всех 27 C/ASM-файлов и линковка TI C2000 22.6.1.LTS (Debug, COFF, +FPU32, O1) прошли. Остались шесть прежних предупреждений в measure.c/peripher.c. +В MAP: RAML0 занято 0x38D1 из 0x4000 слов, .ebss — 0xFA9 из 0x3000, +.stack — 0x3F0 слов, .logg — 0xFA00 слов во внешней RAM ZONE7A. +Это проверка размещения, не измерение максимального использования стека. +Сборка проверки лежит вне репозитория, штатные файлы Bin не заменены. + +Host-тест компилирует настоящий log_to_mem.c с подменой GPIO/IRQ. +Проверяет кольцо, архив, переполнение постинтервала, онлайн-окно, CAN-протокол, +готовность именно 166, фиксированные границы и четыре канала АЦП. +Запуск из корня 166: `py -3 tests/ump_logger/run_test.py` (Clang/lld или MSVC +в PATH); при необходимости передать `--compiler "полный путь к cl.exe"`. +Тест не проверяет физические GPIO, тайминги прерываний и 16-битную ABI TI. + +Для устройства собрать Debug в CCS и загрузить прошивку. На стенде: +начать запись → подать CAN-пуск → подать отключение → через секунду прочитать +архив. Сверить START/STOP с физическими выходами и измерениями, повторить с +разрывом RS/CAN. Проверить период 1 мс и задержки IRQ под нагрузкой. +Тесты существующего SetGUI (`test_ump_logger.py`, `test_ump_logger_can.py`, +`test_periph28335_tab.py`) в окружении Qt 5: **47 passed**. Проверены протокол, +онлайн/архив, CAN-фрагменты, графики, курсоры и CSV. +Проверка на устройстве не выполнялась. diff --git a/Source/Internal/DAC.c b/Source/Internal/DAC.c index 20c06a7..31f14f9 100644 --- a/Source/Internal/DAC.c +++ b/Source/Internal/DAC.c @@ -27,6 +27,9 @@ void Setup_DAC_time(void) period_dac = READY_FREQ / DAC_FREQ; time_dac = LOAD_TIME * DAC_FREQ; + /* Diagnostic values for the fixed 166 ramp (0.1 mA). */ + ump_dac_go10 = 60; ump_dac_stop10 = 160; + ump_dac_duration = time_dac; } void dOUT(int x) @@ -140,6 +143,11 @@ void Load_runner() x = (x+1)&0x3FF; } + /* Observe the existing ramp without changing DAC control. */ + ump_dac_ramp = count_load; + ump_dac_duration = time_dac; + ump_dac_position = (unsigned int)sinus; + if(!x || cInitDac) { Init_DAC(); x=1; cInitDac=0; diff --git a/Source/Internal/Include/DAC.h b/Source/Internal/Include/DAC.h index 31e0786..257b94f 100644 --- a/Source/Internal/Include/DAC.h +++ b/Source/Internal/Include/DAC.h @@ -3,5 +3,6 @@ void Anal_output(long vrot, long maxx); void Init_DAC(void); void Setup_DAC_time(void); -extern unsigned long IMPowse; +/* Ñ÷¸ò÷èê ïóñêîâîãî èìïóëüñà è âûäåðæêè èíèöèàëèçàöèè äîñòóïíû ëîããåðó. */ +extern unsigned long IMPowse, WAKEpowse; extern unsigned int period_dac, time_dac; diff --git a/Source/Internal/Include/ecan.h b/Source/Internal/Include/ecan.h index d252d5d..36cf526 100644 --- a/Source/Internal/Include/ecan.h +++ b/Source/Internal/Include/ecan.h @@ -1,3 +1,6 @@ void InitCan(int Port, int DevNum); void CAN_send(int Port, int data[], int Addr); extern int CAN_input_data[]; + +/* Íåáëîêèðóþùàÿ ïåðåäà÷à îòâåòîâ ëîããåðà îòäåëüíûì CAN mailbox. */ +void UMP_CAN_service(void); diff --git a/Source/Internal/Include/log_to_mem.h b/Source/Internal/Include/log_to_mem.h index b16c399..a4afb52 100644 --- a/Source/Internal/Include/log_to_mem.h +++ b/Source/Internal/Include/log_to_mem.h @@ -31,6 +31,22 @@ extern LOG Log; /* Î÷èñòêà ïàìàòè (îáíóëåíèå) */ void clear_mem(); +/* Ëîããåð ÓÌÏ: îòäåëüíîå àäðåñíîå ïðîñòðàíñòâî Modbus, áåç èçìåíåíèÿ + * 128 òåõíîëîãè÷åñêèõ ðåãèñòðîâ. Äâà áàíêà ïî 800 çàïèñåé: + * òåêóùèé êîëüöåâîé æóðíàë è çàôèêñèðîâàííûé ôðàãìåíò îòêëþ÷åíèÿ. */ +#define UMP_LOG_BASE 0x1000U +#define UMP_LOG_DATA 0x1010U +#define UMP_LOG_WORDS 40U +#define UMP_LOG_CAPACITY 800U +#define UMP_LOG_LIVE 0x1100U +extern unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position; +void ump_log_tick(void); +void ump_log_io(void); +void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c); +void ump_log_rs(void); +unsigned int ump_log_read(unsigned int address); +int ump_log_write(unsigned int address, unsigned int value); + #ifdef __cplusplus } #endif diff --git a/Source/Internal/Include/ump_can_protocol.h b/Source/Internal/Include/ump_can_protocol.h new file mode 100644 index 0000000..e374045 --- /dev/null +++ b/Source/Internal/Include/ump_can_protocol.h @@ -0,0 +1,39 @@ +/* Ñëóæåáíûé CAN-ïðîòîêîë ëîããåðà ÓÌÏ. Íå èñïîëüçóåò àäðåñà 0..127 + * òåõíîëîãè÷åñêîãî îáìåíà. Ôîðìàò ïîëåçíûõ äàííûõ ñîâìåñòèì ñ ïîðÿäêîì + * ñëîâ ñòàðîãî CAN: MDL (ñëîâà 1,2), çàòåì MDH (ìàðêåð, ñëîâî 0). + * Çàïðîñ: ìàðêåð 0x1F00, ñëîâî 0 = token:8 | function:8, + * ñëîâà 1,2 = àäðåñ ðàñøèðåíèÿ è ÷èñëî ñëîâ/çàïèñûâàåìîå çíà÷åíèå. + * Îòâåòû: ìàðêåð 0x1F00 + íîìåð ôðàãìåíòà, ñëîâî 0 = token:8 | error:8, + * ñëîâà 1,2 = äâà ñëîâà åäèíîãî çàôèêñèðîâàííîãî ñíèìêà. + * Áèòû ìàñêè çàïèñè â çàãîëîâêå çàïðîñà ðàâíû íóëþ: ñòàðàÿ ïëàòà + * èãíîðèðóåò çàïðîñ, íå èçìåíÿÿ òåõíîëîãè÷åñêèå ðåãèñòðû. */ +#ifndef UMP_CAN_PROTOCOL_H +#define UMP_CAN_PROTOCOL_H +#include "log_to_mem.h" +#define UMP_CAN_MARKER 0x1F00U +#define UMP_CAN_MAX_WORDS 124U + +/* Âûçûâàþùèé êîä çàùèùàåò âåñü ñíèìîê îò IRQ. Ôóíêöèÿ íå æä¸ò CAN è + * íå ïèøåò çà ïðåäåëàìè reply[124]. Îøèáêè âîçâðàùàþòñÿ îòäåëüíûì êàäðîì. */ +static unsigned int ump_can_prepare(unsigned int function, unsigned int address, + unsigned int value, unsigned int *reply, unsigned int *error) +{ + unsigned int i; + *error = 0; + if (function == 3) { + if (!((address == UMP_LOG_BASE && value == 16) || + (address == UMP_LOG_DATA && (value == 40 || value == 80 || value == 120)) || + (address == UMP_LOG_LIVE && value == 124))) *error = 2; + else { + for (i = 0; i < value; i++) reply[i] = ump_log_read(address+i); + return value; + } + } else if (function == 6) { + if (address < UMP_LOG_BASE || address > UMP_LOG_BASE+3) *error = 2; + else if (!ump_log_write(address, value)) *error = 3; + } else *error = 1; + /* Äëÿ çàïèñè âîçâðàùàåì ýõî àäðåñà è çíà÷åíèÿ, äëÿ îøèáêè — å¸ êîíòåêñò. */ + reply[0] = address; reply[1] = value; + return 2; +} +#endif diff --git a/Source/Internal/ecan.c b/Source/Internal/ecan.c index 82b901b..cf586c7 100644 --- a/Source/Internal/ecan.c +++ b/Source/Internal/ecan.c @@ -11,6 +11,8 @@ #include "RS485.h" #include "message.h" #include "peripher.h" +#include "log_to_mem.h" +#include "ump_can_protocol.h" // Prototype statements for functions found within this file. @@ -30,6 +32,16 @@ int CanTimeOutErrorTR = 0; int wait=0; +/* MBOX2 âûäåëåí ïîä îòâåòû ðåãèñòðàòîðà; øòàòíûé MBOX0 ïðîäîëæàåò + * ïåðåäàâàòü òåõíîëîãè÷åñêèå äàííûå íåçàâèñèìî. ISR òîëüêî ñòàâèò çàïðîñ, + * à ñíèìîê è îòïðàâêà êîðîòêèìè øàãàìè âûïîëíÿþòñÿ â îñíîâíîì öèêëå. */ +static volatile unsigned int ump_can_pending; +static volatile unsigned int ump_can_tag, ump_can_address, ump_can_value; +static unsigned int ump_can_reply[UMP_CAN_MAX_WORDS]; +static unsigned int ump_can_length, ump_can_index, ump_can_reply_tag; +static unsigned int ump_can_waiting; +static unsigned long ump_can_sent_at; + void InitCan(int Port, int DevNum) { struct ECAN_REGS ECanShadow; @@ -61,6 +73,7 @@ void InitCan(int Port, int DevNum) // Specify that 8 bits will be sent/received ECanMboxes->MBOX0.MSGCTRL.all = 0x00000008; ECanMboxes->MBOX1.MSGCTRL.all = 0x00000008; + ECanMboxes->MBOX2.MSGCTRL.all = 0x00000008; // Disable all Mailboxes // Required before writing the MSGIDs @@ -72,11 +85,12 @@ void InitCan(int Port, int DevNum) // çàäàåì àäðåñ 1 àùèêa íà ïðèåì ECanMboxes->MBOX1.MSGID.all = id + DevNum; //ïîìåíàòü!!!! 1 è 0!!! -// çàäàåì ðåæèìû ðàáîòû àùèêa 0 íà ïåðåäà÷ó, îñòàëüíûå íà ïðèåì - ECanRegs->CANMD.all = 0xFFFFFFFE; +// MBOX0 è MBOX2 ïåðåäàþò äàííûå; MBOX1 ïðèíèìàåò êîìàíäû. + ECanMboxes->MBOX2.MSGID.all = id + 0x20 + DevNum; + ECanRegs->CANMD.all = 0xFFFFFFFA; -// âûáèðàåì òîëüêî 2 àùèêa äëà ðàáîòû, îñòàëüíûå çàïðåùàåì - ECanRegs->CANME.all = 0x00000003; +// Âêëþ÷àåì òðè mailbox: òåëåìåòðèÿ, êîìàíäû è îòâåòû ëîããåðà. + ECanRegs->CANME.all = 0x00000007; // Clear all TAn bits ECanRegs->CANTA.all = 0xFFFFFFFF; @@ -196,6 +210,18 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes) hiword = ECanMboxes->MBOX1.MDH.all; loword = ECanMboxes->MBOX1.MDL.all; + /* Ñëóæåáíûé çàïðîñ ëîããåðà íå ÿâëÿåòñÿ êîìàíäîé ÓÌÏ è ñàì íå äîëæåí + * çàïîëíÿòü æóðíàë CAN-ñîáûòèÿìè ïðè îíëàéí-÷òåíèè. Êîðîòêèå êàäðû + * îòáðàñûâàþòñÿ: íåçàïîëíåííûå áàéòû mailbox ìîãëè îñòàòüñÿ îò ïðîøëîãî. */ + if ((unsigned int)(hiword >> 16) == UMP_CAN_MARKER) { + if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8) { + ump_can_tag = (unsigned int)hiword; + ump_can_address = (unsigned int)(loword >> 16); + ump_can_value = (unsigned int)loword; + ump_can_pending = 1; + } + return; + } adr = (hiword >> 16); bit[0] = adr & 0x8000; @@ -212,6 +238,8 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes) if(bit[1]) if(adr < ANSWER_LEN) modbus[adr] = Data[1]; adr++; if(bit[2]) if(adr < ANSWER_LEN) modbus[adr] = Data[2]; + /* Ôèêñèðóåì ïðèìåí¸ííóþ êîìàíäó äî âûõîäà èç îáðàáîò÷èêà CAN. */ + ump_log_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]); led2_toggle(); } @@ -257,3 +285,52 @@ interrupt void CANa_reset_err(void) //=========================================================================== // No more. //=========================================================================== + + +/* Îäèí âûçîâ îáñëóæèâàåò ìàêñèìóì îäèí êàäð è íèêîãäà íå æä¸ò ACK â öèêëå. + * Ñíèìîê ôèêñèðóåòñÿ îäèí ðàç íà çàïðîñ: CAN-ôðàãìåíòû íå ñìåøèâàþò + * çíà÷åíèÿ äî/ïîñëå ïåðåêëþ÷åíèÿ êîëüöåâîãî áàíêà. Íîâûå çàïðîñû çàáèðàåì + * ïîñëå çàâåðøåíèÿ ïðåäûäóùåãî îòâåòà. GUI äåðæèò òîëüêî îäèí çàïðîñ. */ +void UMP_CAN_service(void) +{ + unsigned int saved, tag, address, value, error; + unsigned long hiword, loword; + if (ump_can_waiting) { + if (ECanaRegs.CANTA.all & 4UL) { + ECanaRegs.CANTA.all = 4UL; + ump_can_waiting = 0; + } else if ((ECanaRegs.CANAA.all & 4UL) || + ((unsigned long)CpuTimer1.InterruptCount - ump_can_sent_at > 250UL)) { + /* Íåò ïîäòâåðæäåíèÿ øèíû: îòìåíÿåì òîëüêî ñëóæåáíûé mailbox. + * GUI îáíàðóæèò íåïîëíûé îòâåò ïî òàéì-àóòó; óïðàâëåíèå MBOX0 + * è ïðè¸ì êîìàíä MBOX1 ïðîäîëæàþòñÿ. */ + ECanaRegs.CANTRR.all = 4UL; + /* Äî ôàêòè÷åñêîãî çàâåðøåíèÿ îòìåíû mailbox íå ïåðåèñïîëüçóåì. */ + if (!(ECanaRegs.CANAA.all & 4UL)) return; + ECanaRegs.CANAA.all = 4UL; + ump_can_waiting = 0; + ump_can_length = 0; + } else return; + } + if (ump_can_index >= ump_can_length && ump_can_pending) { + saved = __disable_interrupts(); + tag = ump_can_tag; address = ump_can_address; value = ump_can_value; + ump_can_pending = 0; + ump_can_length = ump_can_prepare(tag & 0xFF, address, value, ump_can_reply, &error); + ump_can_reply_tag = (tag & 0xFF00) | error; + ump_can_index = 0; + __restore_interrupts(saved); + } + if (ump_can_index >= ump_can_length) return; + /* Ïåðåä ñëåäóþùèì ôðàãìåíòîì óñòóïàåì øòàòíîé òåëåìåòðèè MBOX0. */ + if (ECanaRegs.CANTRS.all & 1UL) return; + hiword = ((unsigned long)(UMP_CAN_MARKER + ump_can_index/2) << 16) | ump_can_reply_tag; + loword = ((unsigned long)ump_can_reply[ump_can_index] << 16) | ump_can_reply[ump_can_index+1]; + ECanaRegs.CANTA.all = 4UL; ECanaRegs.CANAA.all = 4UL; + ECanaMboxes.MBOX2.MDH.all = hiword; + ECanaMboxes.MBOX2.MDL.all = loword; + ump_can_sent_at = CpuTimer1.InterruptCount; + ECanaRegs.CANTRS.all = 4UL; + ump_can_waiting = 1; + ump_can_index += 2; +} diff --git a/Source/Internal/log_to_mem.c b/Source/Internal/log_to_mem.c index fb39ff7..301e969 100644 --- a/Source/Internal/log_to_mem.c +++ b/Source/Internal/log_to_mem.c @@ -1,3 +1,12 @@ +#include "DSP2833x_Device.h" +#include "filter_bat2.h" +#include "measure.h" +#include "package.h" +#include "RS485.h" +#include "message.h" +#include "peripher.h" +#include "DAC.h" +#include "ADC.h" #include "log_to_mem.h" int no_write = 0, @@ -22,3 +31,236 @@ void clear_mem() for (i=Log.Start; i= UMP_LOG_CAPACITY/2) ump_count = UMP_LOG_CAPACITY/2-1; + ump_post_dropped = 0; + ump_post = 1000; + reason |= 0x100; + } + /* Ïîñëåäíåå ìåñòî îñòàâëÿåì äëÿ ñíèìêà êîíöà ïîñòèíòåðâàëà. Ïðè + * ïåðåïîëíåíèè ÷åñòíî îòìå÷àåì óñå÷åíèå áèòîì 0x200 â êîíå÷íîé çàïèñè. */ + if (ump_post && ump_count >= UMP_LOG_CAPACITY-1) { + ump_post_dropped = 1; + return; + } + if (reason == 5 && ump_post_dropped) reason |= 0x200; + p = logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS; + p[0] = (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16); + p[2] = reason; p[3] = commands; + p[4] = ump_inputs(); p[5] = ump_outputs(); + p[6] = (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse; + p[8] = modbus[0x7B]; p[9] = modbus[0x1C]; + for (i = 0; i < 4; i++) { p[10+i] = sens_data[i]; p[14+i] = modbus[i]; } + p[18] = ump_can_header; + p[19] = ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2]; + p[22] = ump_can_count; p[23] = CanTimeOutErrorTR; + /* Èñõîäíûå óñòàâêè — ìÀ; ýôôåêòèâíûå óñòàâêè ïîñëå îãðàíè÷åíèé — 0.1 ìÀ. + * p[8] — îòïðàâëåííûé êîä, à p[9] — ðàñ÷¸òíîå çàäàíèå, ÍÅ èçìåðåíèå òîêà. */ + /* 166: fixed ramp endpoints; no configurable DAC_go/DAC_stop. */ + p[24] = 6; p[25] = 16; + p[26] = DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal(); + p[29] = DAC_04; p[30] = DAC_20; + p[31] = ump_dac_ramp; p[32] = ump_dac_duration; + p[33] = ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position; + for (i = 0; i < 4; i++) p[36+i] = adc_table_lem[i]; + ump_prev_commands = commands; ump_prev_inputs = p[4]; ump_prev_outputs = p[5]; + ump_next++; + if (ump_next == UMP_LOG_CAPACITY) ump_next = 0; + if (ump_count < UMP_LOG_CAPACITY) ump_count++; + ump_sequence++; +} + +/* Çàâåðø¸ííûé áàíê áîëüøå íå èçìåíÿåòñÿ äî ñëåäóþùåãî îòêëþ÷åíèÿ. + * Íîìåð ïîêîëåíèÿ ïîçâîëÿåò GUI îáíàðóæèòü çàìåíó àðõèâà âî âðåìÿ ÷òåíèÿ. */ +static void ump_freeze(void) +{ + ump_archive_bank = ump_bank; + ump_archive_count = ump_count; ump_archive_next = ump_next; + ump_generation++; + ump_bank ^= 1; + ump_count = 0; ump_next = 0; ump_post = 0; +} + +void ump_log_tick(void) +{ + unsigned int saved = __disable_interrupts(); + if (ump_state == 1) { + ump_time++; + if (++ump_divider >= ump_period) { ump_divider = 0; ump_capture(1); } + if (ump_post && --ump_post == 0) { + ump_capture(5); + ump_freeze(); + } + } + __restore_interrupts(saved); +} + +/* Äîïîëíèòåëüíûé ñíèìîê òîëüêî ïðè èçìåíåíèè êîìàíä, âõîäîâ èëè âûõîäîâ. + * Ýòî íå çàìåíÿåò ïåðèîäè÷åñêóþ çàïèñü àíàëîãîâûõ âåëè÷èí â òàéìåðå. */ +void ump_log_io(void) +{ + unsigned int saved; + if (ump_state != 1 || Desk != dsk_LOAD) return; + saved = __disable_interrupts(); + if (Commands != ump_prev_commands || ump_inputs() != ump_prev_inputs || + ump_outputs() != ump_prev_outputs) ump_capture(3); + __restore_interrupts(saved); +} + +/* Âûçûâàåòñÿ ïîñëå ïðèìåíåíèÿ ñëîâ ïðèíÿòîãî CAN-êàäðà: ñíèìîê ñîäåðæèò + * íîâûå êîìàíäû, à òàêæå èñõîäíûé àäðåñ/ìàñêó è âñå òðè ñëîâà êàäðà. */ +void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c) +{ + unsigned int saved; + if (ump_state != 1 || Desk != dsk_LOAD) return; + saved = __disable_interrupts(); + ump_can_header = header; + ump_can_data[0] = a; ump_can_data[1] = b; ump_can_data[2] = c; + ump_can_count++; + ump_capture(2); + __restore_interrupts(saved); +} + +void ump_log_rs(void) +{ + unsigned int saved = __disable_interrupts(); + ump_capture(4); + __restore_interrupts(saved); +} + +/* Óïðàâëåíèå æóðíàëîì îòäåëåíî îò òåõíîëîãè÷åñêèõ êîìàíä: íà÷àëî çàïèñè + * ÍÅ çàïóñêàåò ÓÌÏ. Âûáîð àðõèâà íå îñòàíàâëèâàåò òåêóùóþ çàïèñü. */ +int ump_log_write(unsigned int address, unsigned int value) +{ + unsigned int saved, valid = 1; + saved = __disable_interrupts(); + if (address == UMP_LOG_BASE && value == 0) { + ump_state = 3; ump_post = 0; + } else if (address == UMP_LOG_BASE && value == 1 && Desk == dsk_LOAD && !READY && ump_state != 1) { + ump_count = 0; ump_next = 0; ump_cursor = 0; ump_divider = 0; ump_post = 0; + ump_source = 0; + ump_prev_commands = Commands; + no_write = 0; never_write = 0; + ump_state = 1; + ump_capture(1); + } + else if (address == UMP_LOG_BASE+1 && ump_state != 1 && value >= 1 && value <= 1000) + ump_period = value; + else if (address == UMP_LOG_BASE+2 && value < UMP_LOG_CAPACITY) + ump_cursor = value; + else if (address == UMP_LOG_BASE+3 && value <= 1) ump_source = value; + else valid = 0; + __restore_interrupts(saved); + return valid; +} + +/* Ïðåîáðàçîâàíèå õðîíîëîãè÷åñêîãî èíäåêñà â ôèçè÷åñêóþ ïîçèöèþ êîëüöà. + * Äëÿ àðõèâà ñîõðàíåíû ñîáñòâåííûå count/next, íåçàâèñèìûå îò æèâîãî áàíêà. */ +static unsigned int ump_word(unsigned int archived, unsigned int record, unsigned int word) +{ + unsigned int count = archived ? ump_archive_count : ump_count; + unsigned int next = archived ? ump_archive_next : ump_next; + unsigned int bank = archived ? ump_archive_bank : ump_bank; + unsigned int slot; + if (record >= count) return 0; + slot = next + UMP_LOG_CAPACITY - count + record; + while (slot >= UMP_LOG_CAPACITY) slot -= UMP_LOG_CAPACITY; + return logs_block[((unsigned long)bank * UMP_LOG_CAPACITY + slot) * UMP_LOG_WORDS + word]; +} + +/* Âåñü Modbus-áëîê ÷èòàåòñÿ âûçûâàþùèì êîäîì ïîä îäíîé áëîêèðîâêîé IRQ. + * Ïîýòîìó timestamp/äàííûå è çàãîëîâîê îíëàéí-áëîêà îòíîñÿòñÿ ê îäíîìó + * ñîñòîÿíèþ êîëüöà, äàæå åñëè â ýòîò ìîìåíò ïðèõîäèò íîâàÿ CAN-êîìàíäà. */ +unsigned int ump_log_read(unsigned int address) +{ + unsigned int offset, count; + unsigned long first; + switch (address) { + case UMP_LOG_BASE: return 0x554D; + case UMP_LOG_BASE+1: return 2; + case UMP_LOG_BASE+2: return ump_source ? 3 : ump_state; + case UMP_LOG_BASE+3: return ump_source ? ump_archive_count : ump_count; + case UMP_LOG_BASE+4: return UMP_LOG_WORDS; + case UMP_LOG_BASE+5: return UMP_LOG_CAPACITY; + case UMP_LOG_BASE+6: return ump_period; + case UMP_LOG_BASE+7: return (unsigned int)ump_time; + case UMP_LOG_BASE+8: return (unsigned int)(ump_time >> 16); + case UMP_LOG_BASE+9: return Desk; + case UMP_LOG_BASE+10: return Mode; + case UMP_LOG_BASE+11: return (unsigned int)READY_FREQ; + case UMP_LOG_BASE+12: return ump_generation; + case UMP_LOG_BASE+13: return ump_archive_count; + case UMP_LOG_BASE+14: return ump_post; + case UMP_LOG_BASE+15: return ump_state; + } + if (address >= UMP_LOG_DATA && address < UMP_LOG_DATA+120 && (ump_source || ump_state != 1)) { + offset = address - UMP_LOG_DATA; + return ump_word(ump_source, ump_cursor + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS); + } + /* Ïîñëåäíèå òðè çàïèñè äëÿ îíëàéí-ãðàôèêà, áåç îñòàíîâêè è áåç + * èçìåíåíèÿ êóðñîðà àðõèâíîãî ÷òåíèÿ. Ïåðâûå äâà ñëîâà — èõ íîìåð. */ + if (address >= UMP_LOG_LIVE && address < UMP_LOG_LIVE+124) { + count = ump_count < 3 ? ump_count : 3; + first = ump_sequence - count; + offset = address - UMP_LOG_LIVE; + if (offset == 0) return (unsigned int)first; + if (offset == 1) return (unsigned int)(first >> 16); + if (offset == 2) return count; + if (offset == 3) return ump_generation; + offset -= 4; + if (offset / UMP_LOG_WORDS < count) + return ump_word(0, ump_count - count + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS); + } + return 0; +} diff --git a/Source/Internal/main.c b/Source/Internal/main.c index 45f53d9..e21da0f 100644 --- a/Source/Internal/main.c +++ b/Source/Internal/main.c @@ -104,6 +104,8 @@ void main() while(1) { + /* ×òåíèå ëîããåðà ïî CAN íå áëîêèðóåò öèêë óïðàâëåíèÿ. */ + UMP_CAN_service(); if(CanGO) { CanGO=0; @@ -183,6 +185,9 @@ void main() if(!IMPowse) { clear_START_DPTB(); clear_STOP_DPTB(); } } + /* Ñíèìîê ïîñëå îáíîâëåíèÿ âõîäîâ è ôîðìèðîâàíèÿ ïóñêîâûõ âûõîäîâ. */ + ump_log_io(); + for(i=0;i<2;i++) { if(i) rs = &rs_a; diff --git a/Source/Internal/measure.c b/Source/Internal/measure.c index b3873ff..837d0d5 100644 --- a/Source/Internal/measure.c +++ b/Source/Internal/measure.c @@ -135,6 +135,8 @@ interrupt void cpu_timer1_isr_SENS(void) if(Desk==dsk_LOAD) { Load_runner(); + /* Áàçà âðåìåíè 1 ìñ; ñíèìîê ñîäåðæèò ðåçóëüòàò òåêóùåãî øàãà ÖÀÏ. */ + ump_log_tick(); return; } diff --git a/Source/Internal/message.c b/Source/Internal/message.c index 43186ed..42a3c6f 100644 --- a/Source/Internal/message.c +++ b/Source/Internal/message.c @@ -17,6 +17,7 @@ #include "spise2p.h" #include "caliber.h" +#include "log_to_mem.h" int modbus[ANSWER_LEN+1]; unsigned int param[ANSWER_LEN+1]; @@ -176,15 +177,36 @@ void Save_params() /***************************************************************/ /***************************************************************/ +static void modbus_exception(RS_DATA *rs_arr, unsigned int function, unsigned int error) +{ + unsigned int crc; + rs_arr->buffer[0] = CNTRL_ADDR; + rs_arr->buffer[1] = function | 0x80; + rs_arr->buffer[2] = error; + crc = get_crc_16(0xFFFF, rs_arr->buffer, 3); + rs_arr->buffer[3] = LOBYTE(crc); rs_arr->buffer[4] = HIBYTE(crc); + rs_arr->flag_TIMEOUT_to_Send = true; + RS_Send(rs_arr, rs_arr->buffer, 5); +} + void ReceiveCommandModbus3(RS_DATA *rs_arr) { - unsigned int crc, Address_MB, Length_MB, i; + unsigned int crc, Address_MB, Length_MB, i, value, saved = 0; // ïîëó÷èëè íà÷àëüíûé àäðåñ ÷òåíèà - Address_MB =/*(rs_arr->RS_Header[2] << 8) |*/ rs_arr->RS_Header[3]; + Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; // ïîëó÷èëè êîëè÷åñòâî ñëîâ äàííûõ Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; + if (!Length_MB || Length_MB > 125 || + !((Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB) || + (Address_MB >= UMP_LOG_BASE && Address_MB <= UMP_LOG_BASE+15 && + Length_MB <= UMP_LOG_BASE+16-Address_MB) || + (Address_MB >= UMP_LOG_DATA && Address_MB < UMP_LOG_DATA+120 && + Length_MB <= UMP_LOG_DATA+120-Address_MB) || + (Address_MB == UMP_LOG_LIVE && Length_MB == 124))) { + modbus_exception(rs_arr, CMD_MODBUS_3, 2); return; + } ///////////////////////////////////////////////// // Îòñûëêà @@ -194,12 +216,17 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr) rs_arr->buffer[1] = CMD_MODBUS_3; rs_arr->buffer[2] = Length_MB*2; + /* Çàùèùàåì öåëîñòíîñòü îäíîãî ñíèìêà/áëîêà; ïåðåäà÷à UART èä¸ò óæå + * ñ ðàçðåø¸ííûìè ïðåðûâàíèÿìè è íå çàäåðæèâàåò èçìåðåíèå/óïðàâëåíèå. */ + if (Address_MB >= UMP_LOG_BASE) saved = __disable_interrupts(); for (i=0;ibuffer[3+i*2 ]=(Modbus[Address_MB+i].byt.byte_hi); - rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i].byt.byte_lo); + value = Address_MB >= UMP_LOG_BASE ? ump_log_read(Address_MB+i) : modbus[Address_MB+i]; + rs_arr->buffer[3+i*2] = (value >> 8) & 0xFF; + rs_arr->buffer[3+i*2+1] = value & 0xFF; } + if (Address_MB >= UMP_LOG_BASE) __restore_interrupts(saved); crc = 0xffff; crc = get_crc_16(crc, rs_arr->buffer, Length_MB*2+3); @@ -212,7 +239,10 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr) rs_arr->buffer[Length_MB*2+8] = 0; rs_arr->flag_TIMEOUT_to_Send=true; - RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8); + /* Ðàñøèðåíèå ëîããåðà îòâå÷àåò òî÷íûì êàäðîì Modbus áåç õâîñòîâûõ + * íóëåé: îíè èíà÷å ïîïàëè áû â íà÷àëî îòâåòà ñëåäóþùåãî áëîêà GUI. + * Èñòîðè÷åñêèé ôîðìàò òåõíîëîãè÷åñêèõ ðåãèñòðîâ îñòàâëåí ïðåæíèì. */ + RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+(Address_MB >= UMP_LOG_BASE ? 5 : 8)); return; } @@ -230,14 +260,21 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr) // ïîëó÷èëè íà÷àëüíûé àäðåñ çàïèñè - Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]); + Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; // ïîëó÷èëè ñëîâî äàííûõ Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; - Modbus[Address_MB].all = Data_MB; + if (Address_MB >= UMP_LOG_BASE) { + if (!ump_log_write(Address_MB, Data_MB)) { + modbus_exception(rs_arr, CMD_MODBUS_6, 3); return; + } + } else if (Address_MB < ANSWER_LEN) { + Modbus[Address_MB].all = Data_MB; + if (Address_MB == 127) ump_log_rs(); + } else { modbus_exception(rs_arr, CMD_MODBUS_6, 2); return; } rs_arr->flag_TIMEOUT_to_Send=true; - RS_Send(rs_arr, rs_arr->buffer, 10); + RS_Send(rs_arr, rs_arr->buffer, Address_MB >= UMP_LOG_BASE ? 8 : 10); } diff --git a/tests/ump_logger/recorder_test.c b/tests/ump_logger/recorder_test.c new file mode 100644 index 0000000..87d5c82 --- /dev/null +++ b/tests/ump_logger/recorder_test.c @@ -0,0 +1,98 @@ +#include "../../Source/Internal/log_to_mem.c" +#include "../../Source/Internal/Include/ump_can_protocol.h" +struct mock_gpio GpioDataRegs; +int READY = 0, Desk = 6, Mode = 5; +int modbus[128]; +int CanTimeOutErrorTR; +unsigned long IMPowse, WAKEpowse; +unsigned int adc_table_lem[4]; +#define CHECK(x) if (!(x)) return __LINE__ + +/* Возвращаем номер строки при ошибке, ноль при успехе; CRT не требуется. */ +__declspec(dllexport) int run_tests(void) +{ + unsigned int i, generation, archived, reply[UMP_CAN_MAX_WORDS], error, length; + unsigned long sequence; + READY = 100; + CHECK(!ump_log_write(UMP_LOG_BASE, 1)); + READY = 0; + adc_table_lem[0] = 2048; adc_table_lem[3] = 4095; + CHECK(!ump_log_write(UMP_LOG_BASE+1, 0)); + CHECK(!ump_log_write(UMP_LOG_BASE+1, 1001)); + CHECK(ump_log_write(UMP_LOG_BASE+1, 1)); + modbus[127] = 0x80; + /* Unrelated registers must not determine the fixed 166 ramp. */ + modbus[0x50] = 99; modbus[0x51] = 123; + modbus[0x64] = 88; modbus[0x65] = 111; + modbus[0x7B] = 1234; modbus[0x1C] = 160; + CHECK(ump_log_write(UMP_LOG_BASE, 1)); + CHECK(!ump_log_write(UMP_LOG_BASE, 1)); + CHECK(!ump_log_write(UMP_LOG_BASE+1, 20)); + for (i=0; i<900; i++) ump_log_tick(); + CHECK(ump_count == UMP_LOG_CAPACITY); + CHECK(ump_word(0, 0, 0) == 101); + CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900); + CHECK(ump_word(0, 0, 8) == 1234); + CHECK(ump_word(0, 0, 24) == 6); + CHECK(ump_word(0, 0, 25) == 16); + CHECK(ump_word(0, 0, 36) == 2048); + CHECK(ump_word(0, 0, 39) == 4095); + /* Короткая CAN-команда должна остаться отдельным событием. */ + modbus[127] = 0x40; + ump_log_can(0x807F, 0x40, 0, 0); + CHECK(ump_post == 1000); + CHECK(ump_word(0, ump_count-1, 2) == 0x102); + CHECK(ump_word(0, ump_count-1, 18) == 0x807F); + for (i=0; i<999; i++) ump_log_tick(); + CHECK(ump_generation == 0); + ump_log_tick(); + CHECK(ump_generation == 1); + CHECK(ump_archive_count == UMP_LOG_CAPACITY); + CHECK(ump_word(1, UMP_LOG_CAPACITY/2-1, 2) == 0x102); + CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 2) == 0x205); + CHECK(ump_count == 0 && ump_state == 1); + generation = ump_generation; + archived = ump_word(1, UMP_LOG_CAPACITY-1, 0); + sequence = ump_sequence; + for (i=0; i<200; i++) ump_log_tick(); + CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 0) == archived); + CHECK(ump_generation == generation); + CHECK(ump_sequence == sequence + 200); + CHECK(ump_log_read(UMP_LOG_LIVE+2) == 3); + CHECK(ump_log_read(UMP_LOG_LIVE+4) == ump_time-2); + CHECK(ump_log_write(UMP_LOG_BASE+3, 1)); + CHECK(ump_log_write(UMP_LOG_BASE+2, UMP_LOG_CAPACITY-1)); + CHECK(ump_log_read(UMP_LOG_DATA) == archived); + CHECK(ump_log_read(UMP_LOG_DATA+UMP_LOG_WORDS) == 0); + CHECK(!ump_log_write(UMP_LOG_BASE+2, UMP_LOG_CAPACITY)); + CHECK(ump_log_write(UMP_LOG_BASE, 0)); + sequence = ump_sequence; + ump_log_tick(); ump_log_io(); ump_log_can(1,2,3,4); + CHECK(sequence == ump_sequence); + CHECK(ump_log_write(UMP_LOG_BASE, 1)); + CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 0) == archived); + /* Новый пуск и спад start без reset также фиксируют отключение. */ + modbus[127] = 0x80; ump_log_rs(); + modbus[127] = 0; ump_log_rs(); + CHECK(ump_post == 1000); + for (i=0; i<1000; i++) ump_log_tick(); + CHECK(ump_generation == generation+1); + /* CAN читает те же регистры и формирует цельный снимок из 124 слов. + * Запись по старым технологическим адресам через сервис запрещена. */ + length = ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error); + CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 2); + length = ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error); + CHECK(!error && length == 124); + ump_can_prepare(3, UMP_LOG_LIVE, 126, reply, &error); + CHECK(error == 2); + ump_can_prepare(6, 127, 0x80, reply, &error); + CHECK(error == 2 && modbus[127] == 0); + length = ump_can_prepare(6, UMP_LOG_BASE, 0, reply, &error); + CHECK(!error && length == 2 && reply[0] == UMP_LOG_BASE && reply[1] == 0); + CHECK(ump_state == 3); + ump_can_prepare(6, UMP_LOG_BASE+1, 0, reply, &error); + CHECK(error == 3); + ump_can_prepare(99, UMP_LOG_BASE, 16, reply, &error); + CHECK(error == 1); + return 0; +} diff --git a/tests/ump_logger/run_test.py b/tests/ump_logger/run_test.py new file mode 100644 index 0000000..460b3f4 --- /dev/null +++ b/tests/ump_logger/run_test.py @@ -0,0 +1,38 @@ +"""Host test of the 166 recorder. Requires Clang/lld or MSVC (Windows). + +Example: py -3 tests/ump_logger/run_test.py --compiler "C:/path/to/cl.exe" +All build products are written to a temporary directory. +""" +import argparse +import os +from pathlib import Path +import shutil +import subprocess +import tempfile + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('--compiler', default=shutil.which('clang') or shutil.which('cl')) +args = parser.parse_args() +if not args.compiler: + parser.error('Provide --compiler pointing to clang.exe or cl.exe') +root = Path(__file__).resolve().parents[2] +with tempfile.TemporaryDirectory(prefix='ump-recorder-') as directory: + output = Path(directory) + library = output / 'recorder_test.dll' + includes = [root / 'tests/ump_logger/stubs', root / 'Source/Internal/Include'] + source = root / 'tests/ump_logger/recorder_test.c' + if Path(args.compiler).stem.lower() == 'cl': + command = [args.compiler, '/nologo', '/LD', '/GS-', '/wd4068', '/wd4312', + *['/I' + str(p) for p in includes], str(source), + '/Fo' + str(output / 'recorder.obj'), '/link', '/NOENTRY', + '/NODEFAULTLIB', '/OUT:' + str(library)] + else: + command = [args.compiler, '-shared', '-nostdlib', '-fuse-ld=lld', + '-Wl,/noentry,/nodefaultlib', '-Wno-unknown-pragmas', + '-Wno-int-to-pointer-cast', *['-I' + str(p) for p in includes], + str(source), '-o', str(library)] + subprocess.run(command, cwd=output, check=True) + subprocess.run([os.sys.executable, '-c', + 'import ctypes,sys; r=ctypes.CDLL(sys.argv[1]).run_tests(); ' + 'print("PASS" if r==0 else f"FAIL: C line {r}"); sys.exit(bool(r))', + str(library)], check=True) diff --git a/tests/ump_logger/stubs/ADC.h b/tests/ump_logger/stubs/ADC.h new file mode 100644 index 0000000..1894ba1 --- /dev/null +++ b/tests/ump_logger/stubs/ADC.h @@ -0,0 +1 @@ +extern unsigned int adc_table_lem[4]; diff --git a/tests/ump_logger/stubs/DAC.h b/tests/ump_logger/stubs/DAC.h new file mode 100644 index 0000000..a7c38cf --- /dev/null +++ b/tests/ump_logger/stubs/DAC.h @@ -0,0 +1 @@ +extern unsigned long IMPowse, WAKEpowse; diff --git a/tests/ump_logger/stubs/DSP2833x_Device.h b/tests/ump_logger/stubs/DSP2833x_Device.h new file mode 100644 index 0000000..ee0095c --- /dev/null +++ b/tests/ump_logger/stubs/DSP2833x_Device.h @@ -0,0 +1,9 @@ +#ifndef UMP_TEST_DEVICE_H +#define UMP_TEST_DEVICE_H +struct mock_bits { unsigned int GPIO3, GPIO6, GPIO8, GPIO11, GPIO58, GPIO62; }; +struct mock_reg { struct mock_bits bit; }; +struct mock_gpio { struct mock_reg GPADAT, GPBDAT; }; +extern struct mock_gpio GpioDataRegs; +static unsigned int __disable_interrupts(void) { return 0; } +static void __restore_interrupts(unsigned int saved) { (void)saved; } +#endif diff --git a/tests/ump_logger/stubs/RS485.h b/tests/ump_logger/stubs/RS485.h new file mode 100644 index 0000000..63631bf --- /dev/null +++ b/tests/ump_logger/stubs/RS485.h @@ -0,0 +1 @@ +/* Подмена зависимостей для проверки регистратора без платы. */ diff --git a/tests/ump_logger/stubs/filter_bat2.h b/tests/ump_logger/stubs/filter_bat2.h new file mode 100644 index 0000000..63631bf --- /dev/null +++ b/tests/ump_logger/stubs/filter_bat2.h @@ -0,0 +1 @@ +/* Подмена зависимостей для проверки регистратора без платы. */ diff --git a/tests/ump_logger/stubs/measure.h b/tests/ump_logger/stubs/measure.h new file mode 100644 index 0000000..e9586f5 --- /dev/null +++ b/tests/ump_logger/stubs/measure.h @@ -0,0 +1,2 @@ +extern int READY, Desk, Mode; +#define READY_FREQ 1000 diff --git a/tests/ump_logger/stubs/message.h b/tests/ump_logger/stubs/message.h new file mode 100644 index 0000000..63631bf --- /dev/null +++ b/tests/ump_logger/stubs/message.h @@ -0,0 +1 @@ +/* Подмена зависимостей для проверки регистратора без платы. */ diff --git a/tests/ump_logger/stubs/package.h b/tests/ump_logger/stubs/package.h new file mode 100644 index 0000000..20211d0 --- /dev/null +++ b/tests/ump_logger/stubs/package.h @@ -0,0 +1,9 @@ +extern int modbus[128]; +#define dsk_LOAD 6 +#define Commands modbus[127] +#define sens_data (modbus+24) +#define DAC_min() modbus[0x79] +#define DAC_max() modbus[0x78] +#define DAC_cal() modbus[0x7A] +#define DAC_04 modbus[0x6F] +#define DAC_20 modbus[0x6E] diff --git a/tests/ump_logger/stubs/peripher.h b/tests/ump_logger/stubs/peripher.h new file mode 100644 index 0000000..63631bf --- /dev/null +++ b/tests/ump_logger/stubs/peripher.h @@ -0,0 +1 @@ +/* Подмена зависимостей для проверки регистратора без платы. */ diff --git a/tests/ump_logger/ti_syntax.h b/tests/ump_logger/ti_syntax.h new file mode 100644 index 0000000..861a5f2 --- /dev/null +++ b/tests/ump_logger/ti_syntax.h @@ -0,0 +1,3 @@ +/* Декларации TI-интринсиков только для проверки синтаксиса на компьютере. */ +unsigned int __disable_interrupts(void); +void __restore_interrupts(unsigned int saved);