From d9c4185983fb28c1caa9907e08ec9a660b75d32b Mon Sep 17 00:00:00 2001 From: yueming Date: Mon, 6 Sep 2021 00:02:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmsis/startup/startup_stm32f10x_hd.s | 2 +- firmware/stm32-esp/output/pro.hex | 3190 +++++++++-------- firmware/stm32-esp/project/pro.uvgui.LS-PC | 144 +- firmware/stm32-esp/project/pro.uvgui.RJYF-PC | 380 +- firmware/stm32-esp/project/pro.uvopt | 198 +- firmware/stm32-esp/project/pro.uvproj | 49 +- firmware/stm32-esp/user/data/basic_data.c | 6 +- firmware/stm32-esp/user/data/basic_data.h | 14 +- firmware/stm32-esp/user/drive/bsp_timer3.c | 9 +- firmware/stm32-esp/user/drive/bsp_uart2.c | 25 +- firmware/stm32-esp/user/drive/bsp_uart2.h | 2 +- firmware/stm32-esp/user/main.c | 2 +- firmware/stm32-esp/user/mqtt/MQTTConnect.h | 126 - .../stm32-esp/user/mqtt/MQTTConnectClient.c | 181 - .../stm32-esp/user/mqtt/MQTTConnectServer.c | 125 - .../user/mqtt/MQTTDeserializePublish.c | 105 - firmware/stm32-esp/user/mqtt/MQTTFormat.c | 233 -- firmware/stm32-esp/user/mqtt/MQTTFormat.h | 37 - firmware/stm32-esp/user/mqtt/MQTTPacket.c | 365 -- firmware/stm32-esp/user/mqtt/MQTTPacket.h | 116 - firmware/stm32-esp/user/mqtt/MQTTPublish.h | 38 - .../user/mqtt/MQTTSerializePublish.c | 145 - firmware/stm32-esp/user/mqtt/MQTTSubscribe.h | 39 - .../stm32-esp/user/mqtt/MQTTSubscribeClient.c | 118 - .../stm32-esp/user/mqtt/MQTTSubscribeServer.c | 92 - .../stm32-esp/user/mqtt/MQTTUnsubscribe.h | 38 - .../user/mqtt/MQTTUnsubscribeClient.c | 87 - .../user/mqtt/MQTTUnsubscribeServer.c | 83 - firmware/stm32-esp/user/mqtt/StackTrace.h | 61 - firmware/stm32-esp/user/mqtt/mqtt.c | 333 ++ firmware/stm32-esp/user/mqtt/mqtt.h | 56 + firmware/stm32-esp/user/show/dev_work.c | 3 +- firmware/stm32-esp/user/show/esp8266_uart2.c | 109 +- firmware/stm32-esp/user/show/esp8266_uart2.h | 1 + firmware/stm32-esp/user/show/esp8266_work.c | 475 +-- firmware/stm32-esp/user/show/esp8266_work.h | 10 +- 36 files changed, 2748 insertions(+), 4249 deletions(-) delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTConnect.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTConnectClient.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTConnectServer.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTDeserializePublish.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTFormat.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTFormat.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTPacket.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTPacket.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTPublish.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTSerializePublish.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTSubscribe.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTSubscribeClient.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTSubscribeServer.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTUnsubscribe.h delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTUnsubscribeClient.c delete mode 100644 firmware/stm32-esp/user/mqtt/MQTTUnsubscribeServer.c delete mode 100644 firmware/stm32-esp/user/mqtt/StackTrace.h create mode 100644 firmware/stm32-esp/user/mqtt/mqtt.c create mode 100644 firmware/stm32-esp/user/mqtt/mqtt.h diff --git a/firmware/stm32-esp/libraries/cmsis/startup/startup_stm32f10x_hd.s b/firmware/stm32-esp/libraries/cmsis/startup/startup_stm32f10x_hd.s index adc9b94a..963282d0 100644 --- a/firmware/stm32-esp/libraries/cmsis/startup/startup_stm32f10x_hd.s +++ b/firmware/stm32-esp/libraries/cmsis/startup/startup_stm32f10x_hd.s @@ -42,7 +42,7 @@ __initial_sp ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; -Heap_Size EQU 0x00000200 +Heap_Size EQU 0x00001000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base diff --git a/firmware/stm32-esp/output/pro.hex b/firmware/stm32-esp/output/pro.hex index d50342c6..2f05d555 100644 --- a/firmware/stm32-esp/output/pro.hex +++ b/firmware/stm32-esp/output/pro.hex @@ -1,8 +1,8 @@ :020000040800F2 -:100000009809002045010008311B00082D1B00083D -:100010002F1B00082D1000083135000800000000DB -:10002000000000000000000000000000F91E0008B1 -:100030002F10000800000000E31D00086D300008CC +:10000000982000204501000807210008A51D0008D0 +:100010000521000891100008113B000800000000B5 +:10002000000000000000000000000000C9240008DB +:100030009310000800000000B32300083D360008BC :100040005F0100085F0100085F0100085F01000810 :100050005F0100085F0100085F0100085F01000800 :100060005F0100085F0100085F0100085F010008F0 @@ -10,18 +10,18 @@ :100080005F0100085F0100085F0100085F010008D0 :100090005F0100085F0100085F0100085F010008C0 :1000A0005F0100085F0100085F0100085F010008B0 -:1000B0005F010008C13000085F0100085F0100080F +:1000B0005F010008913600085F0100085F01000839 :1000C0005F0100085F0100085F0100085F01000890 -:1000D0005F01000889320008F13200085933000836 -:1000E000811900085F0100085F0100085F01000836 +:1000D0005F01000865380008CD380008393900088C +:1000E000F91B00085F0100085F0100085F010008BC :1000F0005F0100085F0100085F0100085F01000860 :100100005F0100085F0100085F0100085F0100084F :100110005F0100085F0100085F0100085F0100083F :100120005F0100085F0100085F0100085F0100082F -:10013000DFF80CD000F0C4FB00480047094100087C -:10014000980900200648804706480047FEE7FEE77A +:10013000DFF80CD000F0CCFB00480047E94600088F +:10014000982000200648804706480047FEE7FEE763 :10015000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE777 -:100160007130000831010008A0F14101192900D8BF +:100160004136000831010008A0F14101192900D8E9 :100170002030704740EA01039B0703D009E008C91B :10018000121F08C0042AFAD203E011F8013B00F85C :10019000013B521EF9D27047D2B201E000F8012BA8 @@ -29,1541 +29,1639 @@ :1001B00004461946FFF7F0FF204610BD30B505464E :1001C0002A460B4612F8010B13F8014B08B1A04266 :1001D000F8D01CB1002802D06D1CF1E7284630BDD4 -:1001E000421C10F8011B0029FBD1801A704730B562 -:1001F00005460020034600E05B1C934205D2EC5C00 -:10020000C85C201A01D1002CF6D130BD2DE9FE4F7B -:10021000804681EA0300C00F0C46009021F00041A7 -:1002200023F00045B8EB0200A94105D24046214623 -:1002300090461C460B46024623F00040104347D030 -:10024000270DC7F30A00C3F30A510290401A019028 -:1002500040286BDAC3F3130040F4801B00989246E9 -:1002600020B10023D2EB030A63EB0B0B0198594634 -:10027000C0F14002504600F0D6F906460D46504601 -:100280005946019A00F0EEF910EB08006141002494 -:1002900087EA115284EAE7731A4340D0009A62B3A6 -:1002A000019A012A4FEA075215DC001B61EB02019B -:1002B0004FF0004202EA0752CDE90042001C41F52E -:1002C000801132462B4600F025FA03B0BDE8F08FCE -:1002D00040462146F9E7001B61EB0201001C41F595 -:1002E000801300185B412018A2F5001747EB0301AB -:1002F00040EAD570B6196D4111E06D084FEA360637 -:1003000045EAC0754FEA0752001B61EB0201001C71 -:1003100041F5801149084FEA300000195141324639 -:100320002B4603B0BDE8F04F00F0E5B9009801227C -:1003300040000023D0EB020263EBE07300982146FB -:100340004FEAE074B8EB000061EB0401E9E783F0E9 -:1003500000435BE781F0004158E72DE9FE4F81EA59 -:10036000030404F0004421F0004100944FF0000B1E -:1003700023F0004350EA01045ED052EA03045BD04C -:10038000C3F30A54C1F30A552C44A4F2F334019484 -:10039000A0FB0254C1F3130141F48011C3F3130312 -:1003A00043F4801301FB024400FB034E840A970AC6 -:1003B00044EA815447EA8357A4FB076802958D0AF3 -:1003C00005FB07854FEA932C04FB0C542705029D7F -:1003D0004FEA065847EA1637B5EB08056EEB070CEF -:1003E000870E920E47EA811742EA8312A7FB0201A9 -:1003F000B6EB0B0164EB00042B0D43EA0C335E18E3 -:1004000044EB1C50DA465146E7FB0201C5F31304E6 -:100410004FEA0B3343EA14534FEA0432019C43EA98 -:100420000603A4F10C040294009CCDE900B400F092 -:1004300071F903B0BDE8F08F00200146F9E770B50F -:1004400021F0004303430CD0C1F30A550024D5EB3F -:10045000040564EB0403D617AD1AB34102DB002098 -:10046000014670BD201841EB025170BD9623002259 -:10047000114600F012B90EB5C10F80EAE0700844D1 -:10048000CA07002140F233438DE80E000A460B46AE -:1004900000F040F903B000BD70B5C1F30A5201F09D -:1004A00000450024C1F3130140F2FF3341F48011F1 -:1004B0009A4201DA002070BD40F233439A42A2F220 -:1004C000334203DC524200F0BDF800E090402C4380 -:1004D000F1D0404270BDC1F30A5210B5C1F313010F -:1004E00040F2FF3341F480119A4201DA002010BD3E -:1004F00040F233439A42A2F2334203DC524200F00C -:10050000A1F810BD904010BD00F0004230F0004056 -:100510000AD0C10D01F56071C0F3160042EA015125 -:10052000C208400711437047002001467047000091 -:1005300030B5041E71F1000404DB4FF0004440426A -:1005400064EB0101141E73F1000405DB1C464FF03F -:100550000043524263EB0403994208BF904230BD0E -:1005600001F0004330B421F0004150EA010206D00E -:100570000A0DA2F56072C1F31301002A02DC30BC3F -:1005800000207047440F44EAC104C100E01830BCA9 -:1005900000EBC25000F078B830B50B4601460020A1 -:1005A0002022012409E021FA02F59D4205D303FA35 -:1005B00002F5491B04FA02F52844151EA2F10102B6 -:1005C000F1DC30BD2DE9F05F0546002092469B46E8 -:1005D00088460646814640241BE028464146474659 -:1005E000224600F02FF853465A46C01A914110D3C4 -:1005F00011461846224600F016F82D1A67EB01083E -:100600004F4622460120002100F00DF817EB0009AB -:100610004E41201EA4F10104DFDC484631462A4643 -:100620004346BDE8F09F202A04DB203A00FA02F19D -:10063000002070479140C2F1200320FA03F31943D0 -:1006400090407047202A04DB203A21FA02F0002172 -:10065000704721FA02F3D040C2F1200291400843D2 -:1006600019467047202A06DBCB17203A41FA02F0E0 -:1006700043EAE07306E041FA02F3D040C2F12002FF -:1006800091400843194670470029A8BF7047401C95 -:10069000490008BF20F00100704710B4B0FA80FC98 -:1006A00000FA0CF050EA010404BF10BC704749B1D5 -:1006B000CCF1200421FA04F411FA0CF118BF012145 -:1006C00021430843A3EB0C01CB1D4FEA00614FEA25 -:1006D000102042BF002010BC704700EBC3501044F4 -:1006E0000029A4BF10BC7047401C490008BF20F07F -:1006F000010010BC704710B5141E73F1000408DA35 -:10070000401C41F1000192185B411A4301D120F0D5 -:10071000010010BD2DE9F04D92469B4611B1B1FA92 -:1007200081F202E0B0FA80F220329046FFF77BFFC0 -:1007300004460F4640EA0A0041EA0B0153465A4676 -:10074000084313D0114653EA010019D0C8F1400202 -:100750005046FFF777FF05460E465046594642463B -:10076000FFF761FF084305D0012004E02046394629 -:10077000BDE8F08D0020054346EAE0762C43374380 -:100780000A986305E40AA0EB08000022FD0A44EA87 -:1007900047540A3002D500200146E9E70105101947 -:1007A0006941DDE9084500196941BDE8F04DA2E75E -:1007B0002DE9F04D81EA030404F0004B21F00045DF -:1007C00014464FF0000A23F0004150EA050220D001 -:1007D00054EA01021DD0C5F30A570246C5F31303BC -:1007E000C1F31300C1F30A5640F4801543F480139B -:1007F000A7EB0608101BD64608F2FD3873EB050080 -:1008000002D308F1010801E092185B41B8F1000F32 -:1008100003DA00200146BDE8F08D00204FF480117E -:10082000064684460EE0171B73EB050705D3121B23 -:1008300063EB050306434CEA010C49084FEA30001C -:1008400092185B4150EA0107EDD152EA030012D041 -:1008500082EA040083EA0501084305D0101BAB417E -:1008600006D20122002306E000224FF0004302E0FE -:100870006FF0010253101AEB06004CEB085110EB1D -:100880000A0041EB0B01BDE8F04DFFF734BFC1F3A7 -:100890000A52C1F3130140F2FF3341F480119A422E -:1008A00002DA00200146704740F233439A42A2F236 -:1008B000334202DC5242FFF7C5BEFFF7B4BE000070 -:1008C000064C074D06E0E06840F0010394E807009D -:1008D00098471034AC42F6D3FFF72EFC486100086D -:1008E000686100082DE9F04D00231A461B1A8A4161 -:1008F00003DB00200146BDE8F08DC1F30A52C1F3CD -:10090000130141F480154FF0000BD10702D10018FC -:100910006D41521E0027044640F2FF11384601EB9C -:10092000620A3E468046024600204FF48011FFF7DF -:1009300089FEC2197141BB1846EB0100B4EB030CF0 -:1009400075EB000C04D3E41A65EB000517460E4660 -:10095000241908F101006D4180463428E3DDF919BE -:1009600046EB0600091BA84103D24FF0FF321346A5 -:1009700001E0002213461BEB070046EB0A51BDE8DD -:10098000F04DFFF7B8BE002904D0816841F00101A5 -:1009900081607047816821F001018160704700002B -:1009A00010B5154988420AD144150121204601F0AD -:1009B0003FFA2046BDE81040002101F039BA0F4946 -:1009C00088420AD104150121204601F031FA20465F -:1009D000BDE81040002101F02BBA094988420AD134 -:1009E0000121CC03204601F023FA2046BDE8104047 -:1009F000002101F01DBA10BD002401400028014073 -:100A0000003C0140014600208968490700D50120CB -:100A10007047C06C80B270470246002012680A42DC -:100A200000D001207047014600208968090700D5E1 -:100A30000120704770B500240025194E01220723BC -:100A40001146304600F054F80121304600F08FF88E -:100A500002213046FFF7E0FF0028F9D03046FFF7CB -:100A6000D8FF0544022000F0E3FA641CE4B2052C30 -:100A7000E4D30520B5FBF0F0FFF7F8FCFFF744FDE9 -:100A80004FF06632074BFFF768FC6FF00B02FFF781 -:100A9000D6FC0122FFF7D3FCBDE87040FFF760BD34 -:100AA0000024014066660A4010B542680E4B1A40A9 -:100AB0000C790B6842EA04221343436082680B4BB3 -:100AC0001A40D1E9024323434C7942EA44021343DA -:100AD0008360C26A22F47002097C491EC9B242EAEC -:100AE0000151C16210BD0000FFFEF0FFFDF7F1FFF4 -:100AF00070B5072609290AD9C568A1F10A0404EBD3 -:100B00004404A640B543A3401D43C56007E0056902 -:100B100001EB4104A640B543A3401D4305611F23DB -:100B2000072A09D2446B521E02EB820293409C4377 -:100B300091400C43446370BD0D2A09D2046BD21F4F -:100B400002EB820293409C4391400C43046370BDCE -:100B5000C46A0D3A02EB820293409C4391400C43DD -:100B6000C46270BD816841F008018160704700294E -:100B700004D0816841F4A00181607047816821F44C -:100B8000A00181607047816841F004018160704775 -:100B900030B587B001214FF4017001F03BF94FF4FB -:100BA000004001F01FF90220ADF8040000248DF888 -:100BB000074001A9184800F05BFF184D2846FFF7D1 -:100BC000EFFE02948DF80C408DF80D404FF460213B -:100BD0000491059401218DF8181002A92846FFF709 -:100BE00063FF01212846FFF7CEFE2846FFF7BAFF34 -:100BF0002846FFF718FF0028FAD12846FFF7C3FF61 -:100C00002846FFF7FFFE0028FAD101212846FFF70A -:100C1000AEFF07B030BD00000008014000240140D5 -:100C200010B56FF0040002F013FA09480949006892 -:100C3000B0FBF1F00849C0B2087000EB4002C2EB13 -:100C4000C0104FF6FF7202EAC000488010BD0000DD -:100C50000000002000127A00280000202DE9FF414A -:100C60000121182001F0D6F80121084601F0D2F840 -:100C700043F20200ADF80C0010208DF80F000320A5 -:100C80008DF80E00244C03A9204600F0F1FE02214D -:100C9000204600F047FF6114204600F043FFA114F6 -:100CA000204600F03FFF4FF4C040ADF80C00482054 -:100CB0008DF80F00194F03A9384600F0D9FE4FF404 -:100CC000C06000F069FF28248DF8004000258DF8F1 -:100CD00001508DF8025001268DF80360684600F03F -:100CE00029FFF003ADF80C008DF80F4003A938463A -:100CF00000F0BEFE0F21022000F0A6FE01948DF848 -:100D0000085008208DF809008DF80A6001A800F04D -:100D100061FEBDE8FF810000000C014000100140B1 -:100D2000012080F3138805480168054A01F4E06159 -:100D300011430160BFF34F8FFEE700000CED00E0B0 -:100D40000400FA057FB50121022001F055F80920C1 -:100D5000ADF8080041F61F40ADF804000024ADF8DE -:100D60000A40ADF806400E4D01A9284602F03EFAB1 -:100D700001224121284602F02EFA1D218DF8001093 -:100D80008DF8014003218DF8021001218DF8031028 -:100D9000684600F0CFFE0121284602F004FA7FBD2C -:100DA00000040040F0B587B006460121480401F078 -:100DB00023F80121042001F02DF80424ADF8184097 -:100DC00003258DF81A5018218DF81B101E4F06A907 -:100DD000384600F04DFE0821ADF818108DF81B4084 -:100DE00006A9384600F044FE4FF4A06000F0D4FE9F -:100DF00026218DF804108DF8055002208DF806008C -:100E000001208DF8070001A800F094FE0296002052 -:100E1000ADF80C00ADF80E00ADF81000ADF8140000 -:100E20000C20ADF81200094C02A9204602F01AFB72 -:100E3000012240F22551204602F0F9FA0121204614 -:100E400002F0C2FA07B0F0BD0008014000440040C3 -:100E500070B586B005460121880400F0CDFF012160 -:100E6000082000F0D7FF4FF48060ADF81400032491 -:100E70008DF8164018218DF817101F4E05A9304621 -:100E800000F0F6FDF114ADF8141004218DF81710E0 -:100E900005A9304600F0ECFD4FF4A06000F07CFEA8 -:100EA00027208DF800008DF801408DF802400120C8 -:100EB0008DF80300684600F03DFE01950020ADF876 -:100EC0000800ADF80A00ADF80C00ADF810000C20D9 -:100ED000ADF80E00094C01A9204602F0C3FA012228 -:100EE00040F22551204602F0A2FA0121204602F0EC -:100EF0006BFA06B070BD0000000C014000480040D5 -:100F00002DE9F04105460F4600240C4E0BE0402130 -:100F1000304602F065FA0028F9D0295D304602F02B -:100F200003FB641CA4B2BC42F1D34021304602F062 -:100F300057FA0028F9D0BDE8F081000000480040D1 -:100F400070B54FF400512C4800F0E5FD2B4C002506 -:100F5000A8B1A572A089B0F5967F4BD3A07864287C -:100F600001D2401CA070FFF765FD606024498842F3 -:100F70003EDD2449884205DD6420607239E00120AD -:100F8000A072E7E72049884202DD5A20607230E013 -:100F90001E49884202DB502060722AE01C498842C8 -:100FA00002DB4620607224E01A49884202DD3C20C0 -:100FB00060721EE01849884202DD3220607218E03B -:100FC0001649884202DD2820607212E014498842E6 -:100FD00002DB1E2060720CE01249884202DB142002 -:100FE000607206E01049884203DB0A20607200E06C -:100FF0006572A58170BD000000100140D401002081 -:10100000B81E6540B81E85405C8F82407B147E40D0 -:101010009A9979408FC275405C8F7240D7A3704017 -:1010200052B86E40A4706D409A996940FEE77047CF -:101030000B49498848434FF0E021486100238B6108 -:10104000086940F0010008610869C20701D0C003C7 -:10105000FAD5086920F0010008618B617047000033 -:10106000280000200B49097848434FF0E0214861EF -:1010700000238B61086940F0010008610869C2071C -:1010800001D0C003FAD5086920F0010008618B6126 -:1010900070470000280000202DE9F0412B4C01276B -:1010A000FD03207D2A4E4FF00208002816D1294664 -:1010B000304600F030FD80B1C820FFF7B9FF294667 -:1010C000304600F028FD48B12946304600F023FDA7 -:1010D0000028F9D184F8158000E06775207D01288B -:1010E00014D12946304600F016FD78B1C820FFF72C -:1010F0009FFF2946304600F00EFD38B129463046A4 -:1011000000F009FD0028F9D184F81580207D02281F -:1011100017D12946304600F0FEFC002811D0C82027 -:10112000FFF786FF2946304600F0F5FC002808D07E -:101130002946304600F0EFFC0028F9D1A07A10B122 -:101140006775BDE8F08103206075FAE7D4010020DF -:10115000001001402DE9F0412B4C207D627D904232 -:101160004FD001273E03294D022A10D1314628468F -:1011700000F0D8FC00F01CFF227D62B13146284609 -:1011800000F0D2FCA77500F0F3FD02202075607D11 -:10119000012803D01EE001F099F8F3E70221284668 -:1011A00000F0C0FC3146284600F0BCFC227D12B1A4 -:1011B000022A03D00DE001F089F80AE0002001F0D6 -:1011C00001FB01F083F8002020723146284600F030 -:1011D000ABFC2775607D032813D14FF47A70FFF7BD -:1011E00027FF0221284600F09DFC3146284600F0EA -:1011F00099FC4FF40051284600F094FC0320207520 -:10120000FEE7BDE8F0810000D4010020000C0140A1 -:101210000FB4F0B5B3B0C82101A8FEF7C4FF002495 -:1012200039AA01A8389902F099F90020009001A884 -:10123000FEF7D6FF86B20D4F01AD0BE040213846D8 -:1012400002F0CEF80028F9D0295D384602F06CF99A -:10125000641CA4B2B442F1D34021384602F0C0F875 -:101260000028F9D033B0F0BC5DF814FB0044004016 -:1012700070B590B005460E463C2101A8FEF793FFDD -:101280004FF4E130FFF78EFD4FF47A742046FFF7FC -:10129000CFFE2046FFF7CCFE09E000F0DFF9C822C0 -:1012A00039A13AA000F006FB2046FFF7C1FEC82294 -:1012B00035A13AA000F0FEFA0028EED1C82232A1F2 -:1012C00037A000F0F7FA0028F8D1C8222EA136A0E6 -:1012D00000F0F0FA0028F8D10A20FFF7A9FEC82292 -:1012E00029A137A000F0E6FA0028F8D1C82226A1EB -:1012F00036A000F0DFFA0028F8D12046FFF798FE6C -:101300002046FFF795FE2046FFF792FE2046FFF7A6 -:101310008FFE3C2101A8FEF746FF33462A462DA149 -:1013200001A802F007F9224617A101A800F0C2FAAD -:101330000028F8D1C82214A12CA000F0BBFA002884 -:10134000F8D14FF4FA7422460FA12BA000F0B2FAA4 -:101350000028F8D14FF4967422460BA133A000F078 -:10136000A9FA0028F8D1C82207A134A000F0A2FAF7 -:101370000028F8D13449088064213448FEF713FF6F -:1013800010B0002070BD00004F4B000041542B43B3 -:1013900049504D4F44453D3000000000415400008D -:1013A000415445300000000041542B554152543DFA -:1013B0003131353230302C382C312C302C3000008B -:1013C00041542B43574D4F44453D320041542B521D -:1013D0005354000041542B43575341503D22257331 -:1013E000222C222573222C312C34000041542B4313 -:1013F00049504D55583D300041542B4349505354AA -:101400004152543D22554450222C223235352E3241 -:1014100035352E3235352E323535222C36303135B4 -:10142000362C34323235342C3000000041542B43FA -:1014300049504D4F44453D310000000041542B437D -:10144000495053454E440000360000200C01002056 -:1014500001460020054A1288130406D5044BC2F346 -:101460000E0298541846FEF7A9BE704736000020B9 -:101470000C0100202DE9F041324D288800045FD591 -:10148000314C0026207802283ED1304A10787B2843 -:101490003AD1A6802E4BA088115C19547D2902D028 -:1014A000401CA080F7E72A4802F0AAFDE06000286F -:1014B00040D028A1274602F085FD01468069C96910 -:1014C000FFF709F8B860A0F56A41FC3915D123A1EE -:1014D000F86802F077FD02691D4822A1283802F061 -:1014E00029F821A1F86802F06DFD026918481DA1D4 -:1014F000143802F01FF803203870F86802F03EFD3F -:1015000064211348FEF74FFE20780A2818D12A7864 -:1015100062700F480D496430FEF72CFE64210B48C1 -:10152000FEF741FE2E80BDE8F041094811A164306C -:10153000FEF744BE64210548FEF735FE0F480680DD -:10154000BDE8F081360000203C0000200C010020A6 -:1015500028020020706F72740000000073736964C9 -:10156000000000002573000070617373776F726470 -:1015700000000000434C4F53454400003800002059 -:1015800010B5174C2078012811D0022816D0032856 -:101590001FD004280AD100F019F91249A1F1140052 -:1015A00000F094F80028F8D10520207010BD0EA19D -:1015B00010A0FFF75DFE0220207010BD124C608A63 -:1015C000B0F5FA6FF9D311A000F0A8F900206082FD -:1015D00010BD17A000F0A2F90420207010BD00007B -:1015E0003C00002014020020617364717765393873 -:1015F000363700005869616F59695F494F545F4140 -:101600006972426F78000000D40100207B22636F72 -:101610006465223A2230222C226D7367223A2273AB -:101620007461727420636F6E6E656374227D000056 -:101630007B22636F6465223A2231222C226D73670C -:10164000223A2267657457696669496E666F3A7314 -:10165000756363657373227D0000000010B5184C3C -:101660004021204601F0BCFE0028F9D02B21204665 -:1016700001F05AFF0F20FFF7DBFC4021204601F06C -:10168000AFFE0028F9D02B21204601F04DFF0F209E -:10169000FFF7CEFC4021204601F0A2FE0028F9D041 -:1016A0002B21204601F040FF4FF4FA70FFF7C0FCF9 -:1016B000BDE81040142203A103A000F0FBB8000015 -:1016C000004400404F4B00004154000030B58FB043 -:1016D00004460D463C216846FEF765FD3C21684600 -:1016E000FEF761FD2B46224618A1684601F022FF55 -:1016F00064221BA1684600F0DDF810B101200FB094 -:1017000030BDC82219A11AA000F0D4F80028F8D1E1 -:10171000C82216A119A000F0CDF80028F8D1C822DF -:1017200012A121A000F0C6F80028F8D114220FA1C0 -:1017300021A000F0BFF80028F8D1224908806421D8 -:101740002148FEF730FD0020D9E7000041542B432B -:10175000574A41503D222573222C22257322000036 -:101760005749464920474F54204950004F4B0000ED -:1017700041542B4349504D55583D300041542B4363 -:10178000495053544152543D22554450222C223149 -:1017900039322E3136382E312E36222C383038362A -:1017A0002C383038362C300041542B4349504D4FA3 -:1017B00044453D310000000041542B4349505345FE -:1017C0004E440000360000200C01002070B54FF49C -:1017D000E130FFF7E7FA4FF47A742046FFF728FC70 -:1017E0002046FFF725FC4FF4487509E0FFF736FF68 -:1017F000C8221DA11DA000F05DF82846FFF718FCC7 -:10180000C82219A11DA000F055F80028EED1C82269 -:1018100015A11BA000F04EF80028F8D1C82212A193 -:1018200019A000F047F80028F8D10A20FFF700FCC3 -:10183000C8220DA11AA000F03DF80028F8D1C82256 -:1018400009A11AA000F036F80028F8D12046FFF7C9 -:10185000EFFB2046FFF7ECFB2046FFF7E9FB2046B5 -:10186000FFF7E6FB012070BD4F4B000041542B43B6 -:1018700049504D4F44453D300000000041540000A8 -:10188000415445300000000041542B554152543D15 -:101890003131353230302C382C312C302C300000A6 -:1018A00041542B43574D4F44453D310041542B5239 -:1018B000535400002DE9F04180460F461446134D65 -:1018C00000262E8064211248FEF76DFC414611A0CF -:1018D000FFF79EFCC7B18CB916E00A20FFF7A8FB02 -:1018E000288800040AD53846FFF7B2FD18B12E80CB -:1018F0000020BDE8F0812E800120FAE7641E240458 -:10190000240CEAD10120F4E70120F2E736000020A0 -:101910000C01002025730D0A000000000FB4F0B583 -:10192000B3B0C82101A8FEF73EFC002439AA01A8E3 -:10193000389901F013FE0020009001A8FEF750FC3A -:1019400086B20E4F01AD0BE04021384601F048FD54 -:101950000028F9D0295D384601F0E6FD641CA4B2E8 -:10196000B442F1D34021384601F03AFD0028F9D0C5 -:1019700033B00020F0BC5DF814FB000000440040D0 -:1019800010B54FF40044204600F014F8002808D0A9 -:10199000204600F009F80348007D002801D1FFF738 -:1019A000BFF910BDD4010020014908607047000054 -:1019B0001404014001460020054A12680A40044B05 -:1019C00014331B680B4202D0002A00D0012070475C -:1019D0000004014030B51B4A83790168002B2AD0EE -:1019E00013688B431360111D0B680468A3430B60DD -:1019F000017911440B68046823430B60114C0834CF -:101A00002168036899432160231D19680568A9436B -:101A100019604179102905D011440A680068024311 -:101A20000A6030BD216802681143216019680068AE -:101A30000143196030BD0079104402688A43026096 -:101A400030BD00000004014010B58A07120F0F23BB -:101A5000934021F00304054921448C689C438C6029 -:101A60008B68904003438B6010BD00000000014074 -:101A70002DE9F0410022CC7804F00F03E40601D5F3 -:101A80008C7823430C784FF00F0714F0FF0F4FF0C2 -:101A9000010C1CD005680CFA02F40E882640A64200 -:101AA00011D1960007FA06F825EA080503FA06F8A8 -:101AB00048EA0505CE78282E02D0482E02D002E052 -:101AC000446100E00461521C082AE4D305600A88DE -:101AD000FF2A1ED94568002202F108060CFA06F416 -:101AE0000E882640A64210D1960007FA06F825EA8D -:101AF000080503FA06F848EA0505CE78282E00D135 -:101B00004461CE78482E00D10461521C082AE3D3E8 -:101B10004560BDE8F0810246002092680A4200D08C -:101B2000012070474161704701617047FEE7FEE7A1 -:101B30007047000070B50F23C27801260178002A93 -:101B40001ED0144A126802F4E062C2F5E062120A82 -:101B5000C2F10404D3404578A54082781A402A4354 -:101B6000120101F1E02181F80024007800F01F014A -:101B70008E404009800000F1E020C0F8006170BD97 -:101B800001F01F0086404809800000F1E020C0F805 -:101B9000806170BD0CED00E0024908430249086015 -:101BA000704700000000FA050CED00E010B50021C0 -:101BB000002400220378422B10D143784D2B0DD105 -:101BC000435C1A4492B2491CC9B21E29F8D3C17FA2 -:101BD000807F01EB0020904200D1FF24204610BD01 -:101BE0002DE9F0475E4C5F4D4FF000062088000461 -:101BF00019D55D48FFF7DAFFFF280FD15A48417920 -:101C0000027901EB0221A984C179827901EB0221D9 -:101C1000E984417A007A01EB00202885268064213E -:101C20005148FEF7C0FA288AB0F5FA6F03D3E220D4 -:101C300000F0AEF82E82E98BA88C6427DFF82C81A7 -:101C40000A266FF0130A4FF48279814228D0B8F83F -:101C500000100AEB9104B0FBF7F0C2B204F10800E7 -:101C600080B21032494600F00FFFA88CB0FBF6F0AE -:101C7000B0FBF6F106FB110204F1100080B2103245 -:101C8000494600F001FFA88CB0FBF6F106FB1102FB -:101C90001834A0B21032494600F0F6FEA88CE88352 -:101CA000298CE88C81422AD0B8F800100AEB510444 -:101CB0004FF0500AB0FBF7F0C2B204F1080080B256 -:101CC0001032514600F0E0FEE88CB0FBF6F0B0FBBD -:101CD000F6F106FB110204F1100080B210325146F9 -:101CE00000F0D2FEE88CB0FBF6F106FB11021834CE -:101CF000A0B21032514600F0C7FEE88C2884288D2F -:101D0000698C88422AD0B8F80010890801EB410498 -:101D1000103CB0FBF7F0C2B204F1080080B2103200 -:101D2000494600F0B1FE288DB0FBF6F0B0FBF6F1AD -:101D300006FB110204F1100080B21032494600F097 -:101D4000A3FE288DB0FBF6F106FB11021834A0B2F9 -:101D50001032494600F098FE288D6884BDE8F0876F -:101D600038000020D4010020700100208C030020E6 -:101D700010B54FF41650FFF76BF802210348FFF738 -:101D8000D3FEBDE810401420FFF752B9000C01400B -:101D900030B585B00546002414216846FEF703FAE5 -:101DA000002142228DF800204D228DF801208DF86F -:101DB000025000208DF803008DF804006846425C54 -:101DC000224494B2491CC9B20529F8D3200A8DF8DF -:101DD00005008DF8064007216846FFF791F805B029 -:101DE00030BD7047034A516821F4404101435160BE -:101DF0007047000000100240054A002903D0D16955 -:101E00000143D1617047D1698143D16170470000BE -:101E100000100240054A002903D0916901439161F5 -:101E20007047916981439161704700000010024042 -:101E3000054A002903D0D1680143D1607047D168B9 -:101E40008143D160704700000010024010B5264A5F -:101E5000516801F00C01254B002927D0042927D017 -:101E6000082927D00360516801F0F0010909204BCF -:101E70005C5C0168E1404160546804F4E064240A59 -:101E80001C5D21FA04F48460546804F46054E40A8C -:101E90001B5DD940C160526802F44042920B144B62 -:101EA0001B1F9A5CB1FBF2F1016110BD0360DAE720 -:101EB0000360D8E7516801F47011536803F480336C -:101EC000022404EB914133B153689B0307D5094BBE -:101ED00059430160C7E7074B59430160C3E7034B10 -:101EE00059430160BFE700000010024000127A0071 -:101EF0001800002000093D00704700F001B8000004 -:101F00000CB50022019200922748016841F480310B -:101F100001604FF4A063016801F400310091019960 -:101F2000491C0191009911B901999942F3D10168B5 -:101F3000890302D50121009100E000920099012956 -:101F400030D11A490A6842F010020A600A6822F089 -:101F500003020A600A6842F002020A6041684160B6 -:101F600041684160416841F480614160416821F409 -:101F70007C114160416841F4E8114160016841F021 -:101F80008071016001688901FCD5416821F003017D -:101F90004160416841F0020141604168C1F3810143 -:101FA0000229FAD10CBD00000010024000200240BE -:101FB0002DE9F0412D4C2088400861880325B1FBB4 -:101FC000F5F10A3189B22A4E47F6FF7232805A2360 -:101FD000642200F0B1FC2088800800EB400061889A -:101FE0000627B1FBF7F2B1FBF5F102EB410189B233 -:101FF0004FF6E07232802D23322200F09DFC2088C3 -:1020000080086188B1FBF7F2B1FBF5F102EB410109 -:1020100089B248F21F4232802D23322200F08CFC1C -:1020200020886FF0170101EB500080B2282100F0EA -:1020300004FF20886FF0130505EB500080B2B42137 -:1020400000F020FF208805EB900080B2E6252946AD -:1020500000F0CEFE2088800800EB4000103880B2EF -:102060002946BDE8F04100F0A5BE00008C03002029 -:102070004E0000202DE9F041914FF889B0F5FA7F2C -:102080007BD3B878022878D300243846B97A007D0B -:10209000012903D110B14FF4FC6403E0022801D1FF -:1020A0004FF6FF74787A397A002688427ED0DFF8BE -:1020B000148250282ED3A8F800400C242346CD22A9 -:1020C0002146CA2000F0DEFB641CE4B2132CF5D3D9 -:1020D0000C242346D2222146CF2000F0D3FB641CDF -:1020E000E4B2132CF5D30C242346D7222146D42066 -:1020F00000F0C8FB641CE4B2132CF5D30C24234677 -:10210000DC222146D92000F0BDFB641CE4B2132C74 -:10211000F5D3CAE03C2831D3A8F800600C252B4643 -:10212000CD222946CA2000F0ADFB6D1CEDB2132D67 -:10213000F5D3A8F800400C242346D2222146CF2014 -:1021400000F0A0FB641CE4B2132CF5D30C2423464E -:10215000D7222146D42000F095FB641CE4B2132C56 -:10216000F5D30C242346DC222146D92000F08AFB3B -:10217000641CE4B2132CF5D397E09EE0282832D3F8 -:10218000A8F800600C252B46CD222946CA2000F075 -:1021900079FB6D1CEDB2132DF5D30C252B46D22205 -:1021A0002946CF2000F06EFB6D1C00E084E0EDB20C -:1021B000132DF3D3A8F800400C242346D722214640 -:1021C000D42000F05FFB641CE4B2132CF5D30C2484 -:1021D0002346DC222146D92000F054FB641CE4B2E3 -:1021E000132CF5D361E0142830D3A8F800600C2537 -:1021F0002B46CD222946CA2000F044FB6D1CEDB2CF -:10220000132DF5D30C252B46D2222946CF2000F0E2 -:1022100039FB6D1CEDB2132DF5D30C252B46D722BF -:102220002946D42000F02EFB6D1CEDB2132DF5D302 -:10223000A8F800400C242346DC222146D92000F0D7 -:1022400021FB641CE4B2132CF5D32EE068B3A8F88C -:1022500000600C242346CD222146CA2000F012FB48 -:10226000641CE4B2132CF5D30C242346D22221465D -:10227000CF2000F007FB641CE4B2132CF5D30C2430 -:102280002346D7222146D42000F0FCFA641CE4B295 -:10229000132CF5D30C242346DC222146D92000F050 -:1022A000F1FA641CE4B2132CF5D34FF480510648C4 -:1022B000FFF73AFC787A3872FE81BDE8F0810000C1 -:1022C000D40100204E000020000C014010B5184938 -:1022D0004FF6FF7008800923DE221946C82000F05F -:1022E000D1FA1523DE221946C82000F0CBFAC82205 -:1022F00015230921104600F0C5FADE221523092115 -:10230000104600F0BFFA0D23C8221946C52000F080 -:10231000B9FAC52211230D21104600F0B3FA11239A -:10232000C822BDE810401946C52000F0ABBA000035 -:102330004E00002070B5404D288BB0F5FA6F7AD36F -:102340000024A87D3D49002647F6FF72012808D0E9 -:10235000022814D0032821D004282ED005283BD0F1 -:1023600068E00A80234620222146002000F08AFAF5 -:10237000641CE4B20D2CF5D30220A8755AE00A8043 -:102380000F24234618222146002000F07BFA641C0B -:10239000E4B21C2CF5D30320A8754BE00A801E2460 -:1023A000234610222146002000F06CFA641CE4B29F -:1023B0002B2CF5D30420A8753CE00A802D2423465D -:1023C00008222146002000F05DFA641CE4B23A2C99 -:1023D000F5D30520A8752DE00E8023462022214646 -:1023E000002000F04FFA641CE4B20D2CF5D30F244A -:1023F000234618222146002000F044FA641CE4B26F -:102400001C2CF5D31E24234610222146002000F068 -:1024100039FA641CE4B22B2CF5D32D242346082270 -:102420002146002000F02EFA641CE4B23A2CF5D3C9 -:102430000120A8752E8370BDD40100204E0000201D -:1024400010B5112000F044FD1420FEF7F1FDD0205E -:1024500000F03EFD072000F05DFD422000F05AFD37 -:102460001D2000F057FDD12000F032FD002000F0CB -:1024700051FD1A2000F04EFD092000F04BFDD22046 -:1024800000F026FD012000F045FD222000F042FD75 -:10249000C02000F01DFD102000F03CFD3B2000F0AE -:1024A00039FD002000F036FD022000F033FD112040 -:1024B00000F030FDC52000F00BFD032000F02AFDE8 -:1024C000C82000F005FD002000F024FD252000F0CC -:1024D00021FD212000F01EFD052000F01BFD002045 -:1024E00000F018FD0A2000F015FD652000F012FD37 -:1024F000252000F00FFD772000F00CFD502000F0AB -:1025000009FD0F2000F006FD002000F003FDF8207B -:1025100000F0DEFC012000F0FDFCFE2000F0D8FC05 -:10252000002000F0F7FC022000F0F4FC202000F076 -:10253000CFFC362000F0CCFC082000F0EBFC3A2069 -:1025400000F0C6FC552000F0E5FC2B2000F0C0FC9C -:10255000002000F0DFFC002000F0DCFC012000F097 -:10256000D9FC3F2000F0D6FC2A2000F0B1FC00206E -:1025700000F0D0FC002000F0CDFC012000F0CAFCEF -:10258000DF2000F0C7FC7820FEF752FDBDE81040C8 -:10259000292000F09DBC10B5CF2000F099FC002050 -:1025A00000F0B8FCC12000F0B5FC302000F0B2FC17 -:1025B000ED2000F08DFC642000F0ACFC032000F066 -:1025C000A9FC122000F0A6FC812000F0A3FCE8206A -:1025D00000F07EFC852000F09DFC102000F09AFCAD -:1025E0007A2000F097FCCB2000F072FC392000F03C -:1025F00091FC2C2000F08EFC002000F08BFC34209D -:1026000000F088FC022000F085FCF72000F060FC60 -:10261000202000F07FFCEA2000F05AFC002000F0AF -:1026200079FC002000F076FCC02000F051FC1B205B -:1026300000F070FCC12000F04BFC012000F06AFCAF -:10264000C52000F045FC302000F064FC302000F094 -:1026500061FCC72000F03CFCB72000F05BFC36209A -:1026600000F036FC482000F055FC3A2000F030FC29 -:10267000552000F04FFCB12000F02AFC002000F0B3 -:1026800049FC1A2000F046FCB62000F021FC0A208C -:1026900000F040FCA22000F03DFCF22000F018FC0D -:1026A000002000F037FC262000F012FC012000F092 -:1026B00031FCE02000F00CFC0F2000F02BFC2A2065 -:1026C00000F028FC282000F025FC082000F022FC67 -:1026D0000E2000F01FFC082000F01CFC542000F02D -:1026E00019FCA92000F016FC432000F013FC0A207E -:1026F00000F010FC0F2000F00DFC002000F00AFCA0 -:10270000002000F007FC002000F004FC002000F096 -:1027100001FCE12000F0DCFB002000F0FBFB1520B9 -:1027200000F0F8FB172000F0F5FB072000F0F2FBAB -:10273000112000F0EFFB062000F0ECFB2B2000F056 -:10274000E9FB562000F0E6FB3C2000F0E3FB05200F -:1027500000F0E0FB102000F0DDFB0F2000F0DAFBC2 -:102760003F2000F0D7FB3F2000F0D4FB0F2000F00B -:10277000D1FB2B2000F0ACFB002000F0CBFB0020B5 -:1027800000F0C8FB012000F0C5FB3F2000F0C2FBB9 -:102790002A2000F09DFB002000F0BCFB002000F090 -:1027A000B9FB002000F0B6FBEF2000F0B3FB1120D6 -:1027B00000F08EFB7820FEF73BFCBDE8104029209E -:1027C00000F086BB70B5064600240948018845889C -:1027D0004D430021084600F077FA00F0BDFB03E00E -:1027E000304600F097FB641CAC42F9D370BD00008A -:1027F0008C0300202DE9F003214A2C272A252B26C3 -:1028000091884FF0F00C49F241384FF4A07446F62D -:10281000040300280CD0994227D001209071148025 -:10282000A2F802C0414516D1D771157256721CE04C -:1028300000209071A2F800C05480414501D0994217 -:1028400013D1D7711572567299420ED114804FF47C -:10285000F070508009E02220A1F50943893B09D09E -:10286000D0712120107220205072BDE8F0030020AA -:1028700000F07CB9D0714F2010724E205072F4E7F6 -:102880008C0300202DE9FE4F4FF0000B00250026A1 -:10289000171AA3EB010881468A46681E002F03DD44 -:1028A0004FF00101019107E003D14FF000010191C8 -:1028B00002E00190C7F10007B8F1000F03DD4FF00F -:1028C0000100009007E003D14FF00000009002E00B -:1028D0000090C8F10008474501DD3C4600E0444651 -:1028E000601C029015E01FFA8AF11FFA89F000F0CF -:1028F00015F83D444644A54202DD2D1B0198814454 -:10290000A64202DD361B009882440BF1010B1FFA30 -:102910008BFB02988345E6DDBDE8FE8F10B500F025 -:10292000D3F900F019FB03484088BDE8104000F0DF -:10293000F1BA00004C0000202DE9FC5F80468B4678 -:1029400017469A4229D302FB02FA5B430093ABEB92 -:10295000070085B20BEB070001901BE0A8EB070016 -:1029600084B208EB0709A5EB0B060FE0A4EB080007 -:10297000404306FB0600504506D80099884203D91B -:1029800029462046FFF7CAFF641CA4B2A145EDD832 -:102990006D1CADB20198A842E0D8BDE8FC9F0000D4 -:1029A000F8B501211C20FFF735FA4FF47070ADF82F -:1029B000000010208DF8030003208DF80200694606 -:1029C0002F48FFF755F82E484FF400711030016082 -:1029D00040210160802101608115016000F0FAFA58 -:1029E0003220FEF725FB3220FEF722FB254C46F66F -:1029F000040649F24135A088FF2806D3A0F57F419F -:102A0000FF3902D0B0F5134F29D1D32000F060FA7E -:102A100000F08CF800F08AF800F088F80002A0803E -:102A200000F084F8A188C0B20843A080A84210D06A -:102A3000BF2000F04DFA00F079F800F077F800F0D0 -:102A400075F80002A08000F071F8A188C0B20843B8 -:102A5000A080A088A84202D0B04200D0A580A08863 -:102A6000A84202D1FFF797FD03E0B04201D1FFF782 -:102A7000E7FC0020FFF7BEFE0020FFF7A3FEF8BD35 -:102A8000000C01408C0300202DE9F84F07460C464E -:102A90004FF00008A1462248DFF888A000EB0210A2 -:102AA000DFF884B00090009810F808600025300628 -:102AB00004D54FF6FF70AAF8020002E00020AAF841 -:102AC000020021463846FFF729FF7006060E641CF7 -:102AD000A4B2BBF80000B84205D84FF6FF70AAF8C0 -:102AE0000200BDE8F88FA4EB090010280BD06D1C84 -:102AF000EDB2082DDBD308F1010808F0FF08B8F1AA -:102B0000100FD0D3EDE74C467F1CBFB2BBF80000DE -:102B1000B842F0D84FF6FF70AAF80200E1E70000D3 -:102B2000885600084C0000208C0300202DE9F0415D -:102B300000F028FA0C4C4FF4807020608020206058 -:102B40004026201D0660451505600120FEF78AFA23 -:102B500000F008FA07460120FEF784FA2660256097 -:102B60003846BDE8F0810000100C014070B500242B -:102B7000544D46F604022946AB798988012B18D1B9 -:102B8000914216D0082814D2DFE800F00406080AA3 -:102B90000C0E101206200CE007200AE0042008E0CA -:102BA000052006E0012004E0002002E0032000E010 -:102BB0000220A1F51343413B01D0914259D108288D -:102BC00012D2DFE800F0110406080A0C0E1080246F -:102BD0000AE0402408E0C02406E0202404E0602449 -:102BE00002E0A02400E0E024362044F008049142F2 -:102BF00001D144F0020400F06BF9204600F08AF99C -:102C0000A00606D528886988884208D2298068806D -:102C100005E028886988884201D929806880287A57 -:102C200000F056F9002000F075F9002000F072F96C -:102C30002888401EC0F30F2000F06CF92878401E51 -:102C4000C0B200F067F9687A00F042F9002000F0A5 -:102C500061F9002000F05EF96888401EC0F30F2083 -:102C600000F058F9A878BDE87040401EC0B200F0EE -:102C700051B9082812D2DFE800F0040608110A0C46 -:102C80000E1030240AE0102408E0202406E0382446 -:102C900004E0282402E0182400E00824A1F50940FB -:102CA000893809D0032044F4805400F011F92046FB -:102CB000BDE8704000F02EB9112046F240010C43EF -:102CC000F3E700008C03002070B504460E461A4D51 -:102CD0002846AA88007AA2F51341413907D0A2F507 -:102CE000D041043903D0A979012913D016E000F0AE -:102CF000EFF8200A00F00EF9E0B200F00BF9687A64 -:102D000000F0E6F8300A00F005F9F0B2BDE87040D6 -:102D100000F000B92988091B491E8CB200F0D8F8D0 -:102D2000204600F0F7F8287A00F0D2F83046BDE8E7 -:102D3000704000F0EFB800008C0300202DE9F84F40 -:102D400082460C460027A046184902EBC20001EB60 -:102D50008000DFF85C9000900098C65D00254FF67B -:102D6000FF7B300602D5A9F802B002E00020A9F8E6 -:102D7000020021465046FFF7D1FD7006060E641C86 -:102D8000A4B2A4EB0800182809D06D1CEDB2082DE0 -:102D9000E7D37F1CFFB2242FDED3BDE8F88F444673 -:102DA0000AF1010A1FFA8AFAF3E70000785C0008CA -:102DB0004C00002070B504460D46302229462046BE -:102DC000FFF762FE04F1080080B22D222946FFF7CA -:102DD0005BFE04F1100080B211222946FFF754FE79 -:102DE0001834A0B22946BDE870401022FFF74CBE4F -:102DF00070B504460D46302229462046FFF744FEB2 -:102E000004F1080080B22D222946FFF73DFE04F1AF -:102E1000100080B211222946FFF736FE04F1180097 -:102E200080B20E222946FFF72FFE2034A0B2294699 -:102E3000BDE870401022FFF727BE70B504460D466E -:102E4000002229462046FFF779FF04F10C0080B2EA -:102E500001222946FFF772FF04F1180080B2022216 -:102E60002946FFF76BFF04F1240080B203222946B4 -:102E7000FFF764FF3034A0B22946BDE87040042259 -:102E8000FFF75CBF70B504460D4655222946204623 -:102E9000FFF7FAFD04F1080080B247222946FFF748 -:102EA000F3FD04F1100080B20F222946FFF7ECFD7C -:102EB00004F1180080B24D222946FFF7E5FD2034C9 -:102EC000A0B22946BDE870401322FFF7DDBD000027 -:102ED0002DE9F041064600F07DF80D4C4FF480706E -:102EE00020604020251F2860C70027600120FEF7D2 -:102EF000B9F8304600F096F80120FEF7B3F88026C6 -:102F000026600120FEF7AEF82E602F60BDE8F0814C -:102F1000140C01402DE9F041064600F05BF80D4C21 -:102F20004FF48070206040202060C500271D3D6068 -:102F30000120FEF797F8304600F074F80120FEF704 -:102F400091F880263E600120FEF78CF8266025600F -:102F5000BDE8F081100C01400148C079FFF7B8BF0F -:102F60008C03002005488068C1B2054800684FF412 -:102F70007F4202EAC000084480B27047001001405E -:102F800008080140F8B5104C207801281AD0FF201D -:102F9000ADF8000004268DF8036003258DF802507B -:102FA00069460A48FEF764FD4FF4FF50ADF8000093 -:102FB0008DF803608DF8025069460548FEF758FD0C -:102FC00001202070F8BD00004C00002000100140DE -:102FD00000080140F8B5104C207802281AD0FF20D4 -:102FE000ADF8000010268DF8036003258DF802501F -:102FF00069460A48FEF73CFD4FF4FF50ADF800006B -:103000008DF803608DF8025069460548FEF730FDE3 -:1030100002202070F8BD00004C000020001001408C -:1030200000080140C1B2084A1161C943C9B25161E7 -:10303000010A4901054A11606FEA10200006C00C20 -:10304000111D086070470000001001401008014089 -:103050004FF0E021042804D0086920F00400086142 -:103060007047086940F0040008617047704700002D -:1030700010B50F48016841F00101016041680D4A37 -:103080001140416001680C4A11400160016821F45F -:1030900080210160416821F4FE0141604FF41F016D -:1030A0008160FEF72AFF05494FF00060086010BDFF -:1030B000001002400000FFF8FFFFF6FE08ED00E000 -:1030C00010B5324C0121204600F079F800285CD080 -:1030D0000121204600F064F82D4C2E4B0021208861 -:1030E000A8B1020413D41A78C82A01D8521C1A7045 -:1030F0001A78142A0DD35A88824205D140F4004030 -:1031000020805980197004E05880197001E019700E -:103110005980214C2088A8B1020413D45A78642A1B -:1031200001D8521C5A705A78142A0DD39A888242B8 -:1031300005D140F4004020809980597004E09880C7 -:10314000597001E05970998014494FF6E852088A85 -:10315000904201D2401C0882C889904201D2401C92 -:10316000C8818889904201D2401C8881088B904296 -:1031700001D2401C0883888B904201D2401C888376 -:10318000488A904201D2401C488210BD0004004091 -:10319000360000202C00002038000020D401002040 -:1031A000C94301827047002904D0018841F0010120 -:1031B00001807047018821F00101018070470246BB -:1031C0000020138A0B4092890A40002B02D0002A6B -:1031D00000D001207047002A03D082890A438281EF -:1031E000704782898A4382817047000030B5028827 -:1031F0001B4C1C4DA0420DD0A8420BD0B0F1804F0B -:1032000008D0194B984205D0184B984202D0184B61 -:10321000984203D122F070034A881A43154B984212 -:1032200006D0154B984203D022F44073CA881A4343 -:1032300002808A8882850A880285A0420AD0A84234 -:1032400008D00E4A904205D00D4A904202D00D4A55 -:10325000904201D1097A01860121818230BD0000AE -:10326000002C0140003401400004004000080040F0 -:10327000000C0040001000400014004000400140DD -:10328000004401400048014070B5164C40F22555FD -:103290002946204600F0ABF888B1204600F040F9FE -:1032A000C3B211480288110409D410498B54521C2E -:1032B00092B202805A2A02D342F4004101800821CE -:1032C000204600F08DF8012806D1204600F028F9AC -:1032D0000821204600F074F829462046BDE87040D9 -:1032E00000F06EB800380140320000206C00002071 -:1032F00070B5164D40F225563146284600F077F855 -:1033000088B1284600F00CF9C4B211490B881804A2 -:1033100009D4581C82B20F480A80C4545A2A02D3D6 -:1033200042F4004008800821284600F059F801289E -:1033300006D1284600F0F4F80821284600F040F8AD -:1033400031462846BDE8704000F03AB800440040DD -:10335000360000200C01002070B5164C40F22555B7 -:103360002946204600F043F888B1204600F0D8F8FE -:10337000C3B211480288110409D410498B54521C5D -:1033800092B202803B2A02D342F40041018008211C -:10339000204600F025F8012806D1204600F0C0F8AC -:1033A0000821204600F00CF829462046BDE8704070 -:1033B00000F006B80048004034000020D000002093 -:1033C0008A05C94301807047002904D0818941F4EE -:1033D000005181817047818921F4005181817047BA -:1033E0000246002012880A4200D00120704770B5C2 -:1033F000002440F66A12C1F3421301F01F050126B2 -:1034000006FA05F2012B0CD0022B0DD0838A134053 -:10341000090A8E40008830400BB100B101242046DB -:1034200070BD83891340F3E7038A1340F0E710B5BA -:1034300040F66A13C1F3421301F01F040121A140B9 -:10344000012B07D0022B07D014303AB102680A438F -:10345000026010BD0C30F8E71030F6E702688A43CE -:10346000026010BD30B585B004460D46208A4CF68A -:10347000FF710840E98801432182A0894EF6F311CB -:103480000840A9882A8911436A8902431143A1810E -:10349000A08A4FF6FF410840A9890143A1826846EE -:1034A000FEF7D4FC1D48844201D1039800E0029845 -:1034B000A189090408D500EBC00101EB00102968BF -:1034C0004900B0FBF1F007E000EBC00101EB001098 -:1034D00029688900B0FBF1F06422B0FBF2F1090128 -:1034E0000B096FF018056B4300EB8300A3891D04E3 -:1034F0004FF0320307D503EBC000B0FBF2F000F051 -:103500000700084306E003EB0010B0FBF2F000F008 -:103510000F000843208105B030BD00000038014095 -:103520008088C0F308007047C1F3080181807047AC -:10353000FEE700000FB4084B10B504A902AA0398D7 -:1035400000F080F9044602A9002000F012FD204698 -:1035500010BC5DF814FB0000733F000837B514463B -:103560000846064B6A46214600F06CF90446694657 -:10357000002000F0FEFC20463EBD0000733F000826 -:10358000490050EAC12018BF04204A0D18BF40F07E -:10359000010040F2FF72B2EB515F08BF40F0020041 -:1035A000012808BF052070472DE9F0414F1E00EBB0 -:1035B000C7010446D1E9000115461E4637F0060250 -:1035C0000DD02A463346FCF7C8FE7F1E04EBC70326 -:1035D000D3E90023FCF71AFE37F00602F1D1022FDF -:1035E00025D0042F13D0062F18BFBDE8F0812A463E -:1035F0003346FCF7B2FED4E90A23FCF707FE2A465D -:103600003346FCF7AAFED4E90823FCF7FFFD2A465F -:103610003346FCF7A2FED4E90623FCF7F7FD2A4661 -:103620003346FCF79AFED4E90423FCF7EFFD2A4663 -:103630003346FCF792FED4E90223FCF7E7FD2A4665 -:103640003346FCF78AFED4E90023BDE8F041FCF7DD -:10365000DDBD00000022134610460149FDF7A8B861 -:103660000000F03FFCF7D2BD002213461046114681 -:10367000FDF79EB840F2013200204FF0E041FCF728 -:10368000DEBE0000024A00201107FCF7D8BE000091 -:1036900001FDFFFF02E008C8121F08C1002AFAD18D -:1036A00070477047002001E001C1121F002AFBD1C2 -:1036B0007047000001490860704700006800002062 -:1036C0002DE9FF5F82B00021DDE90430020DDDF855 -:1036D00040B0034318D044F61050A2F2FF324243E8 -:1036E0001514119801281FD0A5EB0B00401C5FEAB0 -:1036F000000A4FF000064E4FDFF83891B0465046B2 -:1037000015D5CAF1000413E0119801244AA3012839 -:1037100001D16FEA0B010298119AC0E90031C0E9AA -:10372000024206B0BDE8F09FCBF10000DFE704469F -:103730000021404A491842EB0450CDE9001012E044 -:10374000E00707D032463B4640464946FCF705FEB7 -:103750008046894632463B4610461946FCF7FDFD39 -:1037600006460F466410002CEAD1DDE90401DDE9CC -:103770000023BAF1000F06DAFCF7EFFD42464B4694 -:10378000FCF7EBFD05E0FDF713F842464B46FDF76D -:103790000FF804460E460022284BFCF7C9FE03D85A -:1037A0004FF0FF30014607E00022254B204631460E -:1037B000FCF72CFDFDF76BF8102409E0002C0ADB68 -:1037C0000A220023FCF7FEFE039B30321A55641ECA -:1037D00050EA0102F2D1641C039AC4F111031444AB -:1037E000119A012A03D0012208430DD10AE00843AF -:1037F00004D000204FF0110B119072E7A3EB0B05E2 -:103800006D1E0DE05B4504DD4FF0000205F1010582 -:1038100004E003DA4FF00002A5F10105002AECD024 -:1038200002981199C0E90231C0E9004579E700002A -:10383000000014400000F03F300000000000F043A2 -:103840000000E03F2DE9FF4F95B09B4689460646B4 -:1038500000250FE2252877D100242746F84A0121C8 -:10386000059400E0044316F8013F203B01FA03F001 -:103870001042F7D130782A2811D06FF02F0330781A -:10388000A0F13002092A16D8059A44F0020402EB8E -:10389000820203EB42021044761C0590EFE759F8D0 -:1038A000042B0592002A03DA504244F40054059098 -:1038B00044F00204761C30782E2816D116F8010F39 -:1038C00044F004042A280DD06FF02F023078A0F1C4 -:1038D0003003092B09D807EB870302EB4303C71812 -:1038E000761CF3E759F8047B761C30786C280FD0EF -:1038F00006DC4C2817D068280DD06A2814D104E0C3 -:10390000742810D07A280FD10DE044F400140AE096 -:1039100044F4801401E044F440147278824202D1ED -:1039200004F58014761C761C307866280BD013DCE6 -:10393000582877D009DC002875D04528F6D04628CD -:10394000F4D047281AD19DE118E0632835D06428C7 -:1039500079D0652812D195E1702873D008DC6728EA -:10396000F1D069286FD06E280DD06F2806D1B5E050 -:1039700073282CD0752875D0782874D05A4617999A -:1039800090476D1C75E1C4F30250022809D003284A -:103990000DD0D9F8001004280DD00D6009F10409EC -:1039A00067E1D9F80010EA17C1E90052F6E7D9F843 -:1039B00000100D80F2E70D70F0E719F8041B8DF888 -:1039C000001000208DF80100EA46012003E059F8BC -:1039D00004AB4FF0FF3061074FF0000102D40DE05F -:1039E00008F101018846B9420FDA8045F8DB1AF880 -:1039F00008100029F4D108E008F10101884681424D -:103A0000FADB1AF808100029F6D105985B46A0EBFE -:103A1000080721463846179A00F094FA284400EB2C -:103A2000080507E04DE029E10DE01AF8010B5A46C0 -:103A300017999047B8F10108F7D25B4621463846FE -:103A4000179A13E142E00A220092C4F302524FF0A7 -:103A5000000A022A08D059F804CB032A4FEAEC7175 -:103A60000AD00DE029E02AE009F1070121F0070260 -:103A7000F2E802C1914609E00FFA8CFC4FEAEC71C2 -:103A8000042A03D14FFA8CFC4FEAEC71002907DAC3 -:103A90000A460021DCF1000C61EB02012D2202E05C -:103AA000220504D52B228DF80420012203E0E20731 -:103AB00001D02022F7E7904659E00A2102E01022C7 -:103AC0000DE010214FF0000A00910BE010224FF0A2 -:103AD000000A44F004040827009203E008224FF093 -:103AE000000A0092C4F30252022A05D059F804CB0E -:103AF0000021032A08D009E009F1070121F007029B -:103B0000F2E802C1914605E01FFA8CFC042A01D1BB -:103B10000CF0FF0C4FF00008220728D5702806D0C3 -:103B2000009B83F0100353EA0A0305D00EE0402205 -:103B30008DF80420012208E05CEA010206D0302260 -:103B40008DF804208DF8050002229046009B83F03A -:103B5000080353EA0A030AD15CEA010201D16207B1 -:103B600005D530228DF804204FF001087F1E58281B -:103B700004D034A003900EA802900DE036A0F9E71F -:103B800053466046009AFCF71DFD84460398825C0C -:103B90000298401E029002705CEA0100F0D1029887 -:103BA00006A9081A00F1200A600702D524F480341F -:103BB00000E00127574502DDA7EB0A0000E00020E6 -:103BC00000EB0A01009005984144401A0590E0037B -:103BD00006D45B462146179A059800F0B3F90544D0 -:103BE000002706E001A85A46C05D179990476D1C52 -:103BF0007F1C4745F6DBE0030CD55B462146179A50 -:103C0000059800F09FF9054404E030205A461799C2 -:103C100090476D1C0099481E00900029F5DC08E0D3 -:103C2000029802995A460078491C029117999047C8 -:103C30006D1CBAF10001AAF1010AF1DC65E1000096 -:103C40000928010030313233343536373839616272 -:103C50006364656600000000303132333435363736 -:103C600038394142434445460000000000F058F90D -:103C70000544761C307800287FF4ECAD19B0284656 -:103C8000BDE8F08F620700D4062709F1070222F091 -:103C9000070CFCE80223E14603F000485FEA080C49 -:103CA00002D00FF2702C0DE05FEA045C02D50FF237 -:103CB000682C07E05FEAC47C02D00FF2602C01E0C0 -:103CC000AFF2700C4FF0FF3823F00043CDF850C036 -:103CD00065280CD006DC452809D046281DD0472889 -:103CE0003DD13DE0662818D067287ED138E000211C -:103CF000112F01DB112000E0781CCDE9000106A99D -:103D00000EA8FFF7DDFCDDE90F010E9A03910021FB -:103D1000009207F1010A04914DE04FF00040009736 -:103D2000CDE9011006A90EA8FFF7CAFCDDE90F02D4 -:103D300003920E9B11990022DDF80CA000930492CF -:103D400011B9791C00EB010AB7EB0A0004D4C0F1E9 -:103D5000FF3007F1010A0490AAEB0700019044E04C -:103D6000012F00DA01270021112F01DD112000E0D1 -:103D70003846CDE9000106A90EA8FFF7A1FCDDE950 -:103D80000F010E9A0391002104910092BA46210777 -:103D90000CD40399514500DA8A46BAF1010F05DDCA -:103DA000009AAAF10101515C302908D0B84202DA28 -:103DB00010F1040F06DA0121CDE9011015E0AAF196 -:103DC0000101E9E7002805DC049901440491AAEB0C -:103DD000000102E0411C514500DD8A460499401A69 -:103DE000401C01904FF000400290200704D401983D -:103DF000504501DBCDF8048000208DF84F0002987B -:103E00000DF14F07B0F1004F25D02B200E900298F6 -:103E10004FF0020800280CDA404202902D200E904C -:103E200007E00A210298FCF7B7FB3031029007F84F -:103E3000011DB8F10001A8F10108F2DC0298002888 -:103E4000EFD1791E0E980870307800F0200040F015 -:103E5000450007F8020D12A8C01B00F107081498CE -:103E6000007800B1012000EB0A01019801EBE0713C -:103E700005984144401A401E0590E00306D45B4675 -:103E80002146179A059800F05DF8054414980078CB -:103E900018B15A46179990476D1CE00324D55B462C -:103EA0002146179A059800F04DF805441CE0049847 -:103EB000002807DBDDE90301884203DD0098405C50 -:103EC000179901E0179930205A469047049805F158 -:103ED0000105401C04900198401E019004D12E2041 -:103EE0005A46179990476D1CBAF10001AAF1010AD0 -:103EF000DDDC05E017F8010B5A46179990476D1C59 -:103F0000B8F10001A8F10108F4DC5B462146179ADC -:103F10000598ABE62D0000002B00000020000000FB -:103F20002DE9F041044600251E461746880404D4B6 -:103F300005E039462020B0476D1C641EF9D528469F -:103F4000BDE8F0812DE9F041044600251E4690466B -:103F5000C80301D5302700E02027880404D505E0F8 -:103F600041463846B0476D1C641EF9D52846BDE869 -:103F7000F0810A68531C0B601070704770B50446DE -:103F80000F4E19E02568A089C00503D4A06808B1C8 -:103F9000FFF7F4FFA089C00503D4206908B1716858 -:103FA0008847A089800503D4206A08B171688847D2 -:103FB0007168204688472C46002CE3D170BD000074 -:103FC0005400002070B50D46846800E024682CB1D0 -:103FD0002946206A00F04AF80028F7D1204670BD33 -:103FE00010B5064928200968884704461CB12821D5 -:103FF0002046FCF7D8F8204610BD000054000020F1 -:1040000000221146AFF300802DE9F04104460D4631 -:104010009046FFF7E5FF0646134F0020B860C6B193 -:10402000204601F0C7F80146304600F079FB04460F -:104030008CB1B8F1000F13D0204601F0BBF8044654 -:10404000207868B13046FFF799FFBC600020BDE8DA -:10405000F0810020FBE73046FFF790FF0020F6E7F5 -:1040600005B12C603046F2E75400002070B50446DC -:104070000D46002C01D02DB10AE00DB1012070BD1C -:10408000002070BD012070BD207898B1641C6D1CAB -:104090002078FCF769F806462878FCF765F8864230 -:1040A000F2D02078FCF760F804462878FCF75CF83A -:1040B000201A70BD002070BD10B5002821D0114B12 -:1040C0000022001F196803E0814203D80A464968AC -:1040D0000029F9D152B11368841A9C4204D10068B6 -:1040E00018441060104602E0506000E0186039B1DA -:1040F00002680B1A934203D10B681A4402604968A4 -:10410000416010BD60000020FCF78AFDFCF71AFE3C -:10411000FCF7A4FDC820FCF78BFFFCF739FD4FF43A -:104120007A70FCF785FFFEF73BFC0F4C40F6B83089 -:104130002082E081A0812083C820E08320846084E5 -:10414000FDF71EFAFDF796F9FCF7FAFEFCF7A4FF5F -:10415000FDF700F8207D022803D1FEF7EBF8FDF70C -:104160003FFDFDF787FFEBE7D4010020F0B50B30F2 -:10417000154D20F007010024144A0FE003688B421C -:104180000BD38B4205D95E1A43184768C3E9006711 -:1041900000E04368136002C004E0021D10680028BC -:1041A000ECD12046002802D1286808B10020F0BDDB -:1041B000064A07481060074A121A22F00702C0E9AF -:1041C000002401202860D7E7640000206000002060 -:1041D0009C030020980500202DE9F041074608784F -:1041E000234E5B2803D0B1600020BDE8F08105209C -:1041F000F860481C00F0DEFF044620785D2811D0EE -:10420000FFF7EEFE0546B86070B1204600F0D2FF21 -:104210000146284600F084FA00F0CCFF0446200056 -:1042200004D016E0601CE0E70020DEE70020DCE7B9 -:10423000FFF7D6FEB0B1286045600546601C00F06F -:10424000B9FF0146284600F06BFA00F0B3FF0446C0 -:1042500054B120782C28EBD020785D2806D0B460AB -:104260000020C2E70020C0E70020BEE7601CBCE7DA -:10427000540000200178A1F13002092A01D811462A -:104280000AE0A1F14102052A01D8373904E0A1F181 -:104290006102052A0AD857390A01401C0178A1F1A8 -:1042A0003003092B04D8303A11440EE00020704747 -:1042B000A1F14103052B02D8373A114405E0A1F1E1 -:1042C0006103052B0BD8573A11440A01401C0178B1 -:1042D000A1F13003092B04D8303A11440EE000203C -:1042E0007047A1F14103052B02D8373A114405E08C -:1042F000A1F16103052B0AD8573A1144090140780E -:10430000A0F13002092A04D830390844704700204F -:104310007047A0F14102052A02D837390844704796 -:10432000A0F16102052A02D85739084470470020DD -:10433000704700002DE9F34F85B08A4600242546DA -:1043400059490020CDE90201002637468346012065 -:1043500001909AF800002D2805D154490020CDE99C -:1043600002010AF1010A9AF80000302801D10AF18D -:10437000010A9AF800003138082817D89AF8000086 -:104380003038FCF778F8804689460022484B2046B2 -:104390002946FBF7E2FF42464B46FBF737FF044650 -:1043A0000D461AF8010F30380928E7D99AF80000AD -:1043B0002E2827D19AF80100302823D3392821D874 -:1043C0000AF1010A9AF800003038FCF754F88046E8 -:1043D00089460022364B20462946FBF7BEFF42465F -:1043E0004B46FBF713FF04460D4600222E4B30468A -:1043F0003946FBF7ACFF06460F461AF8010F303876 -:104400000928DFD99AF80000652801D045281DD178 -:104410001AF8010F2B2802D02D2803D010E00AF142 -:10442000010A0DE04FF0FF3001900AF1010A07E0A8 -:104430000BEB8B0100EB410B0AF1010AABF1300BE6 -:104440009AF80000A0F130010929F1D901980BFB7D -:1044500000F0FCF710F832463B46FBF7D7FE024669 -:104460000B460020124900F0B9F906460F46DDE977 -:10447000020122462B46FBF770FF32463B46FBF714 -:104480006CFF04460D460598C0E9064520462946BE -:10449000FCF702F80599486105980321C16007B04F -:1044A0005046BDE8F08F00000000F03F0000F0BF74 -:1044B000000024402DE9F04107460878384E7B285B -:1044C00003D0B1600020BDE8F0810620F860481CF0 -:1044D00000F070FE054628787D2818D0FFF780FD93 -:1044E0000446B860A8B1284600F064FE01462046A4 -:1044F00000F058F800F05EFE68B1216921620027E3 -:10450000276101783A2908D0B0600020DBE7681CF9 -:10451000D9E70020D7E70020D5E7401C00F04AFE8D -:104520000146204600F0FCF800F044FE0546280055 -:1045300028D1C8E7FFF754FDA8B1206044600446C5 -:10454000681C00F037FE0146204600F02BF800F012 -:1045500031FE50B121692162276101783A2906D0E4 -:10456000B0600020AFE70020ADE70020ABE7401CC3 -:1045700000F020FE0146204600F0D2F800F01AFEBE -:10458000054645B128782C28D4D028787D2804D039 -:10459000B560002097E7002095E7681C93E70000CE -:1045A000540000202DE9F04780460D466C1C002089 -:1045B0002A785949222A06D08D60BDE8F087641C0C -:1045C0005C2A00D1641C2278222A02D00AB1401C45 -:1045D000F5D10968401C88470746380004D0681C9C -:1045E0003C464FF480691AE00020E6E75C2903D0DE -:1045F00004F8011B401C12E0461C3078722825D0BC -:1046000006DC622816D0662818D06E2804D119E07E -:1046100074281FD0752821D004F8010B701C017874 -:10462000222901D00029E1D100212170017822291D -:104630006AD06AE0082004F8010BEFE70C2004F8C8 -:10464000010BEBE70A2004F8010BE7E70D2004F863 -:10465000010BE3E7092004F8010BDFE7701CFFF70B -:1046600009FE0546361DA5F55C404845D6D3002D0C -:10467000D4D0A5F55840484513D270785C28CDD1E8 -:10468000B0787528CAD1F01CFFF7F4FDB61DA0F56F -:104690005C414945C2D2C5F3090161F39F2000F591 -:1046A00080350421802D01D2012108E0B5F5006F8D -:1046B00001D2022103E0B5F5803F00D2032160184A -:1046C00001291AD0022911D0032908D0042919D1AF -:1046D00005F0BF0242F0800200F8012DAD0905F09F -:1046E000BF0242F0800200F8012DAD0905F0BF02C3 -:1046F00042F0800200F8012DAD09084A525C2A43BD -:1047000000F8012D441889E7401CC8F810700421F6 -:10471000C8F80C1051E7000054000020B0600008F9 -:1047200070B505460C46002C20D0042224A120465A -:10473000FBF75DFDE0B1052223A12046FBF757FD05 -:10474000D0B1042222A12046FBF751FDC0B1207850 -:1047500022281AD02D2803D0A0F1300109291AD817 -:1047600021462846BDE87040FFF7E4BD002070BD3B -:104770000220E860201D70BD0020E860601D70BD53 -:104780000120E8606861201D70BD21462846BDE813 -:104790007040FFF707BF5B2805D07B2809D00E4883 -:1047A0008460002070BD21462846BDE87040FFF7B8 -:1047B00013BD21462846BDE87040FFF77BBE0000D0 -:1047C0006E756C6C0000000066616C736500000023 -:1047D0007472756500000000540000202DE9F04D52 -:1047E0001D460C4698B0174621F0004123F00043C7 -:1047F000002814BF4FF0010C4FF0000C0CEB440CE0 -:10480000FE4A0CEB02064FEA620C66452BD33E00D3 -:1048100018BF012606EB45061644F94A964222D3F4 -:10482000F84A53EA070C02D0944205D148B918B0AF -:1048300000201146BDE8F08D002808BF4FF0000CA5 -:1048400001D04FF0010C0CEB440212F5001F0AD806 -:10485000002F14BF4FF0010C4FF0000C0CEB450281 -:1048600012F5001F07D918B03A462B462146BDE87D -:10487000F04DFEF7F7BE0022DFF88CA3002CB8BF86 -:10488000534526DADFF884C36345A8BF022220DA45 -:10489000DFF870C39C451CDCDFF874C30CEB235CB1 -:1048A000BCF1140F08DDCCF1340627FA06FC0CFA33 -:1048B00006F6BE420DD108E05FB9CCF1140623FA2A -:1048C00006FC0CFA06F69E4203D10CF00102C2F17E -:1048D000020251EA000C19D1002D17DA002C18BF82 -:1048E000022A01D0012A07D00220FEF7E3FE18B009 -:1048F000BDE8F04DFEF7AEBE0220FEF7DBFEFEF790 -:10490000A9FE18B081F00041BDE8F08DB7F1000CB0 -:104910006CD1534525D104F1804212F5801201BFBC -:1049200000280020B74918B008BFBDE8F08DB54891 -:10493000884207DC002DA1BF6046294618B0BDE8BB -:10494000F08D07E0281E05DA80F0004118B06046BF -:10495000BDE8F08DAF497944D1E9000118B0BDE858 -:10496000F08DDFF8A0C2634525D1002D1FDA19B103 -:10497000514512D1D8B909E0002840F0EC82A24A92 -:10498000214618B062F31E01BDE8F08D00202146DB -:1049900018B060F31E01BDE8F08D08DA18B02346A8 -:1049A000BDE8F04D024600206146FBF701BF18B09C -:1049B0002146BDE8F08D514518DAB5F1804F0DD094 -:1049C000A5F1005CBCF1FF5C10D1B4F1000C0DDB73 -:1049D00018B06146BDE8F04D00F0F6BB234618B0B4 -:1049E0000246BDE8F04D1946FBF7B7BC060024F0BF -:1049F000004C3BD1D9B1514533D1002C06DD002DFF -:104A0000A1BF0020514618B0BDE8F08D002C01DD9B -:104A1000002D1BDB002C13DA002D11DB012A4FF0D7 -:104A2000000014BF78497C4918B0BDE8F08D022A17 -:104A300018BF002C0AD0012A08D1002C06DA0AE09F -:104A4000002CB8BF002D11DA012A04D0002018B0C4 -:104A50000146BDE8F08D18B000204FF00041BDE8E0 -:104A6000F08DA1F14050B0F17F601AD0012000EB31 -:104A7000E47050EA020421D0624C521E4FF0000B49 -:104A8000104304BF4FF0000B644C654883427CDD4B -:104A9000644A654893421FDD884217DB002D25DB01 -:104AA00037E0002C00DA4AB1022A0CBF01204FF097 -:104AB000FF3018B0BDE8F04DFBF7DDBC0120FEF77C -:104AC000F9FD18B0BDE8F04DFEF7CEBD4D4A8A4263 -:104AD00002DC002D0ADC1CE0814202DA002D18DA2B -:104AE00004E0484B994220DD002D12DD0220FEF744 -:104AF000E1FDFEF7BFFD05460E460022534658462F -:104B00002146FBF72AFC18B066F31E012846BDE8D3 -:104B1000F08D0220FEF7CEFDFEF7B4FD0A462146D9 -:104B200018B062F31E01BDE8F08D002230466146E8 -:104B3000FBF70DFC80460E466FF00102FBF77FFC91 -:104B40004FF05532394BFBF705FC42463346FBF735 -:104B500004FC0022364BFBF7FDFB824642463346FF -:104B6000049110461946FBF7F8FB5246049BFBF7ED -:104B7000F4FB8A4600904FF0C0422E4B404631462F -:104B8000FBF7EBFB2C4A2B4B00E027E0CDE90601BD -:104B900051460098FBF7E1FB82460191274A284BDA -:104BA00040463146FBF7D9FB5246019BFBF7CFFB52 -:104BB00082460B4602460591DDE90601FBF726FB1E -:104BC000DDE90623002688463046FBF7C0FB524647 -:104BD000059BFBF7BFFB024600F07EB90020B1F554 -:104BE000801F07DA352230466146FBF728FC06466F -:104BF0006FF0340000EB215024E00000FFFF1F00A5 -:104C0000FFFF0F000000F03F0000F07F0000404376 -:104C100001FCFFFFE61700000000F0FF0000F0BFFE -:104C20000000E0410000F043FFFFEF3F5555D53F46 -:104C30000000E03F4715F73FFE822B6544DF5DF83B -:104C40000BAE543EA0F2FF300190C1F3130040F0D0 -:104C50007F6141F040510291FE498842D8BF002057 -:104C600004DDFD498142C8BF012001DD0D9008E04F -:104C700000200D900198401C01900298A0F5801032 -:104C800002900299F54878440B910D9900EBC10010 -:104C9000D0E900230F9330460A920B99FBF757FB9C -:104CA000CDE90601DDE90A2130460F9BFBF7AEFA9C -:104CB00002460B460020EA49FBF77AFD05910246C1 -:104CC0000B460090DDE90601FBF747FB1490E54831 -:104CD0008A464FF0000878440299006812904FF01D -:104CE000005040EA61010D980F9B01EB804000F5F8 -:104CF000002109910A9A1298FBF729FB32460B9B77 -:104D0000FBF728FB42465346FBF727FB064602917A -:104D100040465146099B129AFBF71FFBDDE906232B -:104D2000FBF718FB3246029BFBF711FB059B009A31 -:104D3000FBF713FB0091149A049053461046194652 -:104D4000FBF70BFB06460246C7480B4602910621BD -:104D50007844FEF729FCCDE90510029B3246104647 -:104D60001946FBF7FAFADDE90532FBF7F6FA059189 -:104D70000646534640461946149AFBF747FA009BED -:104D8000049AFBF7EAFA3246059BFBF73FFACDE9B6 -:104D900005104246534610461946FBF7DEFA00223C -:104DA000B24B02910A90FBF731FADDE90532FBF7CD -:104DB0002DFA0E464246AD4B4046FBF7C8FA029B21 -:104DC0000A9AFBF7C4FADDE90532FBF7C3FA42465B -:104DD00002910A90334610465146FBF7BEFACDE9E0 -:104DE00006015346149A02990A98FBF7B6FA8A46C6 -:104DF00002903346424600990498FBF7AEFA5346B8 -:104E0000029AFBF703FA82460B4602460591DDE95A -:104E10000601FBF7FBF9DDE906230020884606467C -:104E2000FBF795FA5246059BFBF794FA82460991E7 -:104E30004FF060428E4B30464146FBF78EFA0490AD -:104E400006918C4A8A4B50460999FBF786FA8246AE -:104E50000291894A894B30464146FBF77EFA524619 -:104E6000029BFBF7D3F9864B7B440D9A03EBC203FD -:104E7000D3E90023FBF7CAF90E9007910198FBF7DD -:104E8000FAFA0591DDE9061382460E9A0498FBF7BB -:104E9000BDF97C4A7A440D9B02EBC303D3E900239E -:104EA00000930292FBF7B2F95246059BFBF7AEF96D -:104EB0000026884652463046059BFBF748FA009B81 -:104EC000029AFBF744FA069B049AFBF740FA079B09 -:104ED0000E9AFBF73FFA024600200B460290384636 -:104EE0002946FBF73AFA824601912B463846194685 -:104EF000029AFBF72CFA32464346FBF72EFA52464B -:104F0000019BFBF783F907468A463246434629460A -:104F10000298FBF722FA05460E463A465346FBF73F -:104F200075F9594A8846914221DBA8EB020353EAFE -:104F3000000210D12A463346FBF709FACDE90401F5 -:104F4000524A534B38465146FBF760F9DDE90423DA -:104F5000FBF7EEFA21D20220FEF7ACFBFEF78AFB4C -:104F60000A46214618B062F31E01BDE8F08D494B98 -:104F700028F000429A4210D3474A08EB020353EA52 -:104F800000027FF4C6AD2A463346FBF7E0F93A4605 -:104F90005346FBF7CDFA7FF6BCAD0022019228F014 -:104FA00000403E493E4A01EB2051824223DA481C30 -:104FB0004FF4801121FA00F040443A4AC0F30A51FC -:104FC0007A44394BA1F2FF31CB4020EA0303C0F30E -:104FD000130040F48010C1F11401C8401268019020 -:104FE000B8F1000FBCBF4042019028463146FBF7A4 -:104FF000AEF905460E462A46334638465146FBF77B -:1050000005F94FF000084246284B40460591FBF752 -:10501000A4F9CDE90601264A264B40460599FBF73F -:105020009CF9009102902A46334640460599FBF7C9 -:105030008EF93A465346FBF78DF91F4A1F4BFBF793 -:105040008CF9009B029AFBF7E1F807468846024676 -:105050000B4635E08E9803007AB60B002E14000044 -:105060000000F03F661400009413000000000840A8 -:1050700009C7EE3FFD033ADCF5015B14E02F3EBEAD -:105080006C1200003012000000009040FE822B6580 -:105090004715973C00CC904000346F3F01FCFFFF68 -:1050A0000000E03F7C110000FFFF0F00432EE63FB1 -:1050B000396CA80C615C20BEEF39FAFE422EE63F47 -:1050C000DDE90601FBF7A2F8DDE9062305460E46F9 -:1050D000FBF73DF93A464346FBF73CF90F462A46B3 -:1050E0003346009010461946FBF737F982460246D0 -:1050F0002E4888460B4605217844FEF755FA52465D -:105100004346FBF72AF92A463346FBF723F9804644 -:105110008A463B4628463146009AFBF71EF93B4635 -:10512000009AFBF773F80691009000224FF080433D -:1051300040465146FBF70BF90F460C90424653464A -:1051400028463146FBF709F93B460C9AFBF730FB42 -:10515000069B009AFBF7FBF82A463346FBF7F7F865 -:105160000022134BFBF7F6F8054601980E4601EBBB -:1051700000510815002810DC28463146019AFBF73B -:105180005EF9FEF7FDF9042808BFFEF77BFA284612 -:105190003146019AFBF753F905460B4618B02A46EB -:1051A00058462146BDE8F04DFBF7D7B81C1000006B -:1051B0000000F03F00E0401C002804D001780029E6 -:1051C00001D02029F7D970472DE9F04106460F4656 -:1051D000FBF788FB041E0D4618BF0120284320F072 -:1051E0000040C0F17F6000F1E040C00F0ED0301CE5 -:1051F00018BF0120384320F00040C0F17F6000F16B -:10520000E040C00F04BF0120FEF754FA20462946B3 -:10521000BDE8F08100000000000000000000000078 -:10522000000000003F4000000000000000003000CF -:10523000400030004000000009000BC03D000BC0E2 -:105240003D00090018C024407FE02240318000006A -:10525000180024C01B000D803240018003801C40D8 -:1052600027401C8007400040100060000000000044 -:10527000000000000000000000001F8020404020CF -:105280000000402020401F800000000009000600B0 -:105290001F80060009000000040004003F80040095 -:1052A000040000000010006000000000000000008A -:1052B000040004000400040004000000000000409A -:1052C0000000000000000000002001C006003800BF -:1052D000400000001F802040204020401F80000030 -:1052E000000010403FC000400000000018C02140F6 -:1052F00022402440184000001080204024402440D8 -:105300001B80000002000D0011003FC001400000A2 -:105310003C80244024402440238000001F802440FF -:1053200024403440038000003000200027C03800B3 -:10533000200000001B802440244024401B800000EB -:105340001C0022C0224022401F80000000000000FC -:1053500008400000000000000000000004600000A1 -:1053600000000000000004000A00110020804040FE -:105370000900090009000900090000000000404080 -:10538000208011000A00040018002000234024009F -:10539000180000001F802040274029401F400000C7 -:1053A000004007C039000F0001C0004020403FC04E -:1053B000244024401B8000001F80204020402040CB -:1053C0003080000020403FC0204020401F8000006F -:1053D00020403FC024402E4030C0000020403FC04D -:1053E00024402E00300000000F001080204022409A -:1053F0003380020020403FC0040004003FC0204032 -:10540000204020403FC0204020400000006020207D -:1054100020203FC02000200020403FC024400B003F -:1054200030C0204020403FC020400040004000C02D -:105430003FC03C0003C03C003FC0000020403FC0D4 -:105440000C4023003FC020001F802040204020400F -:105450001F80000020403FC02440240018000000AE -:105460001F802140214020E01FA0000020403FC0BD -:105470002440260019C0004018C024402440224087 -:1054800031800000300020403FC02040300000004C -:1054900020003F80004000403F80200020003E0070 -:1054A00001C0070038002000380007C03C0007C0DA -:1054B00038000000204039C0060039C020400000FC -:1054C0002000384007C0384020000000304021C094 -:1054D0002640384020C00000000000007FE040204F -:1054E00040200000000070000C000380004000001D -:1054F0000000402040207FE000000000000020006D -:1055000040002000000000000010001000100010FB -:10551000001000100000000040000000000000002B -:10552000000002800540054003C0004020003FC04D -:105530000440044003800000000003800440044055 -:105540000640000000000380044024403FC00040AB -:1055500000000380054005400340000000000440B7 -:105560001FC0244024402000000002E005500550E8 -:105570000650042020403FC00440040003C0004007 -:105580000000044027C00040000000000010001090 -:10559000041027E00000000020403FC00140070049 -:1055A00004C00440204020403FC0004000400000B4 -:1055B00007C0040007C0040003C00000044007C087 -:1055C0000440040003C00040000003800440044085 -:1055D00003800000041007F0045004400380000022 -:1055E000000003800440045007F00010044007C08E -:1055F0000240040004000000000006400540054091 -:1056000004C00000000004001F80044000400000AF -:10561000040007800040044007C000400400070069 -:1056200004C0018006000400060001C0070001C09C -:1056300006000000044006C0010006C0044000004F -:105640000410071004E0018006000400000004407C -:1056500005C00640044000000000000004007BE09C -:1056600040200000000000000000FFF000000000EB -:10567000000040207BE004000000000040008000AB -:10568000400020002000400000000000000000005A -:1056900000000000000000000000000000001FCC1F -:1056A000000C000000000000000008003000600056 -:1056B0000800300060000000022003FC1E200220D1 -:1056C00003FC1E200220000000000E1811043FFF02 -:1056D00010840C78000000000F0010840F3800C008 -:1056E000077818840078000000780F8410C4112413 -:1056F0000E9800E4008400080800680070000000B4 -:10570000000000000000000000000000000007E0B2 -:10571000181820044002000000004002200418185D -:1057200007E00000000000000240024001800FF08E -:1057300001800240024000000080008000800FF8DD -:1057400000800080008000000001000D000E0000BD -:1057500000000000000000000000008000800080C9 -:1057600000800080008000800000000C000C000021 -:1057700000000000000000000000000600180060AB -:105780000180060018002000000007F0080810043F -:105790001004080807F000000000080408041FFCBB -:1057A000000400040000000000000E0C101410247F -:1057B000104411840E0C000000000C181004110499 -:1057C000110412880C700000000000E00320042483 -:1057D00008241FFC0024000000001F9810841104FE -:1057E0001104108810700000000007F008881104F0 -:1057F000110418880070000000001C00100010FC4C -:1058000013001C001000000000000E38114410842A -:10581000108411440E38000000000700088C10446A -:105820001044088807F00000000000000000030C8E -:10583000030C000000000000000000000001010651 -:105840000000000000000000000000800140022075 -:105850000410080810040000022002200220022088 -:10586000022002200220000000001004080804109A -:10587000022001400080000000000E001200100C09 -:10588000106C10800F00000003E00C1813E41424C7 -:1058900017C4082807D000000004003C03C41C40C3 -:1058A000074000E4001C000410041FFC1104110454 -:1058B00011040E880070000003E00C18100410049E -:1058C000100410081C10000010041FFC1004100429 -:1058D0001004080807F0000010041FFC1104110454 -:1058E00017C410040818000010041FFC1104110054 -:1058F00017C010000800000003E00C18100410048A -:1059000010441C780040000010041FFC108400802C -:10591000008010841FFC10040000100410041FFC01 -:105920001004100400000000000300011001100129 -:105930001FFE10001000000010041FFC1104038063 -:105940001464181C1004000010041FFC1004000450 -:1059500000040004000C000010041FFC1F0000FCE9 -:105960001F001FFC1004000010041FFC0C040300A7 -:1059700000E010181FFC100007F0080810041004C5 -:105980001004080807F0000010041FFC10841080A9 -:10599000108010800F00000007F008181024102459 -:1059A000101C080A07F2000010041FFC110411006B -:1059B00011C011300E0C000400000E1C11041084E4 -:1059C000108410441C3800001800100010041FFC44 -:1059D000100410001800000010001FF8100400044C -:1059E000000410041FF8100010001E0011E0001C3D -:1059F000007013801C0010001FC0103C00E01F004E -:105A000000E0103C1FC000001004180C163401C048 -:105A100001C01634180C100410001C00130400FC04 -:105A200013041C00100000000804101C10641084F3 -:105A300013041C04101800000000000000007FFE8A -:105A40004002400240020000000030000C000380D1 -:105A50000060001C00030000000040024002400201 -:105A60007FFE000000000000000000002000400059 -:105A70004000400020000000000100010001000182 -:105A80000001000100010001000040004000200072 -:105A90000000000000000000000000980124014404 -:105AA0000144014400FC000410001FFC00880104B4 -:105AB00001040088007000000000007000880104EC -:105AC0000104010400880000000000700088010447 -:105AD000010411081FFC0004000000F80144014407 -:105AE0000144014400C800000000010401040FFC4F -:105AF0001104110411001800000000D60129012929 -:105B0000012901C90106000010041FFC00840100E6 -:105B10000100010400FC000400000104190419FC48 -:105B20000004000400000000000000030001010167 -:105B3000190119FE0000000010041FFC00240040A1 -:105B400001B4010C010400000000100410041FFC4B -:105B50000004000400000000010401FC0104010035 -:105B600001FC0104010000FC010401FC00840100AF -:105B70000100010400FC0004000000F8010401041D -:105B80000104010400F80000010101FF0085010487 -:105B9000010400880070000000000070008801040B -:105BA0000104010501FF00010104010401FC00845E -:105BB0000104010001800000000000CC0124012448 -:105BC000012401240198000000000100010007F8F1 -:105BD0000104010400000000010001F800040004B9 -:105BE0000004010801FC0004010001800170000CA8 -:105BF000001001600180010001F0010C003001C0C3 -:105C00000030010C01F0010000000104018C00745F -:105C10000170018C01040000010101810171000E7D -:105C2000001801600180010000000184010C0134B2 -:105C300001440184010C000000000000000000008D -:105C400001003EFC40024002000000000000000095 -:105C5000FFFF0000000000000000400240023EFC88 -:105C600001000000000000000000600080008000D3 -:105C700040004000200020000000000FFFF80FFF50 -:105C8000F80C0C000C0C000C0C00040C00060C00B2 -:105C9000061C0003F80001F0000000000000000FE7 -:105CA000FFF80FFFF80FF00000FF800007F8000773 -:105CB000F801FF000FE0000FFFF80FFFF8000000F1 -:105CC0000000000180100780700600F00C01D00C6D -:105CD00003900C07100E1C1007F81003E0100000D2 -:105CE0001000000000000000000000003800003834 -:105CF00000000000000000000000000000000000A4 -:105D000000000000000000000000800038E007F8FC -:105D10007007B01004201804201804301804303024 -:105D2000043CF0041FE0000300000000000000003D -:105D3000000003FC0000003FFFC000007FFFF000F8 -:105D400000FC01F80001E000780003C0001C000323 -:105D500080001C000300000E000300000E00038002 -:105D6000001C0003C0003C0001F000780000FFFFB1 -:105D7000F000007FFFE000000FFF000000000000C7 -:105D80000000000000000000000000000000000013 -:105D90000000000000001C000000001800000000CF -:105DA00038000000007000000000E000000001FF6B -:105DB000FFFC0003FFFFFC0003FFFFFC00000000EE -:105DC00000000000000000000000000000000000D3 -:105DD00000000000000000000000000000000000C3 -:105DE000000000000000100000000070001C000017 -:105DF000F8003C0001E0007C0003C000FC000380D0 -:105E000001EC00038003CC0003800F0C0003801E14 -:105E10000C0003803C0C000380F80C0001E7E00C50 -:105E20000001FFC00C0000FF000C000018000C0077 -:105E30000000000000000000000000000000000062 -:105E400000008000003000E000007000F00001F071 -:105E500000780001C0003C000380001C000380604B -:105E60000C000300E00C000300E00C000380E01CC9 -:105E7000000381F01C0001E7B8780001FF3FF80043 -:105E800000FE1FF000001807C00000000000000026 -:105E900000000000000003800000000780000000F8 -:105EA0001F800000003F800000007B80000001E3B5 -:105EB00080000003C38000000F838000001E038069 -:105EC00000007C03800000F003800003FFFFFC0063 -:105ED00003FFFFFC0003FFFFFC0000000380000045 -:105EE00000038000000003800000000000000000AC -:105EF000000000000020E0000007E0F00000FFE0EC -:105F0000780003FFC01C0003F1801C000383800E97 -:105F1000000383800E000383800E000383800C0047 -:105F20000383801C000381C03C000381E0780003F0 -:105F300080FFF80003807FE00000001F8000000069 -:105F4000000000000000000000000000000000074A -:105F5000000000003FE0000000FFF0000003F8F840 -:105F6000000007E03C00001FC01C00003F800C0048 -:105F700000F9800E0001F1800E0003C1800E0003C5 -:105F800001C00C000201C01C000000E07C00000009 -:105F9000FFF80000007FF00000001FC000000000BC -:105FA000000000000000000000000000038000006E -:105FB00000038000000003800000000380001C003C -:105FC000038000FC00038007FC0003801FE0000347 -:105FD000807F00000381F800000387E00000039F3A -:105FE00000000003FC00000003F000000003E000DC -:105FF000000003800000000000000000000000001E -:1060000000000007E000007E1FF00000FFBFF80066 -:1060100001E7F83C000381F01C000380E00C000362 -:1060200080E00E000300E00E000380E00E0003801D -:10603000E00C000381F01C0001E7B83C0000FF3FCA -:10604000F800007E1FF00000000FE00000000000DC -:106050000000000000000000000000003FC0000041 -:10606000007FE0000000FFF0000001E07800000386 -:10607000C03806000380181E000380187E000380CD -:1060800019F80003801FE00003803FC00003C07FB9 -:10609000000001E1FC000000FFF00000007FC000F4 -:1060A00000003F00000000000000000000000000B1 -:1060B0000000C0E0F0F8FC00000000000000F03F2D -:1060C000000000000000F83F000000000000000099 -:1060D0000000004003B8E23F0000000000000000A4 -:1060E00006D0CF43EBFD4C3E033333333333E33F32 -:1060F000FFAB6FDBB66DDB3F4D268F515555D53F5E -:1061000001411DA96074D13F65DBC9934A86CD3F2B -:10611000EF4E454A287ECA3F3E5555555555C53F19 -:1061200093BDBE166CC166BF2CDE25AF6A56113F0B -:10613000F16BD2C541BDBBBED0A4BE726937663E0D -:10614000000000000000000068610008000000205E -:106150006C00000094360008D46100086C00002038 -:106160002C090000A436000800A24A040000000028 -:1061700000000000010203040607080902040608E3 -:1061800000000000010203040102030406070809DD -:1061900000000000000000000000000000000000FF -:1061A00000000000010000000000000000000000EE -:1061B0000000000000000000FFFF00006D4100082B -:1061C000B9400008000000000000000000000000CE -:0461D00000000000CB +:1001E000421C10F8011B0029FBD1801A70470346FE +:1001F00011F8012B00F8012B002AF9D1184670479D +:1002000030B505460020034600E05B1C934205D252 +:10021000EC5CC85C201A01D1002CF6D130BD2DE970 +:10022000FE4F804681EA0300C00F0C46009021F08B +:10023000004123F00045B8EB0200A94105D2404639 +:10024000214690461C460B46024623F000401043D0 +:1002500047D0270DC7F30A00C3F30A510290401A92 +:10026000019040286BDAC3F3130040F4801B009820 +:10027000924620B10023D2EB030A63EB0B0B0198EB +:100280005946C0F14002504600F0D5F906460D46E9 +:1002900050465946019A00F0EDF910EB0800614113 +:1002A000002487EA115284EAE7731A4340D0009A87 +:1002B00062B3019A012A4FEA075215DC001B61EB79 +:1002C00002014FF0004202EA0752CDE90042001C51 +:1002D00041F5801132462B4600F024FA03B0BDE808 +:1002E000F08F40462146F9E7001B61EB0201001C3C +:1002F00041F5801300185B412018A2F5001747EB69 +:10030000030140EAD570B6196D4111E06D084FEA5E +:10031000360645EAC0754FEA0752001B61EB020141 +:10032000001C41F5801149084FEA30000019514185 +:1003300032462B4603B0BDE8F04F00F0E4B9009818 +:10034000012240000023D0EB020263EBE07300982F +:1003500021464FEAE074B8EB000061EB0401E9E7E5 +:1003600083F000435BE781F0004158E72DE9FE4F41 +:1003700081EA030404F0004421F0004100944FF0AE +:10038000000B23F0004350EA01045ED052EA03045C +:100390005BD0C3F30A54C1F30A552C44A4F2F334DE +:1003A0000194A0FB0254C1F3130141F48011C3F383 +:1003B000130343F4801301FB024400FB034E840A41 +:1003C000970A44EA815447EA8357A4FB07680295D9 +:1003D0008D0A05FB07854FEA932C04FB0C54270577 +:1003E000029D4FEA065847EA1637B5EB08056EEB53 +:1003F000070C870E920E47EA811742EA8312A7FB89 +:100400000201B6EB0B0164EB00042B0D43EA0C3345 +:100410005E1844EB1C50DA465146E7FB0201C5F377 +:1004200013044FEA0B3343EA14534FEA0432019C9E +:1004300043EA0603A4F10C040294009CCDE900B445 +:1004400000F070F903B0BDE8F08F00200146F9E735 +:1004500070B521F0004303430CD0C1F30A550024CA +:10046000D5EB040564EB0403D617AD1AB34102DBE8 +:100470000020014670BD201841EB025170BD96234B +:100480000022114600F011B90EB5C10F80EAE070EC +:100490000844CA07002140F233438DE80E000A46A3 +:1004A0000B4600F03FF903B000BD70B5C1F30A522E +:1004B00001F000450024C1F3130140F2FF3341F481 +:1004C00080119A4201DA002070BD40F233439A4213 +:1004D000A2F2334203DC524200F0BCF800E090404C +:1004E0002C43F1D0404270BDC1F30A5210B5C1F3A4 +:1004F000130140F2FF3341F480119A4201DA0020E7 +:1005000010BD40F233439A42A2F2334203DC52421E +:1005100000F0A0F810BD904010BD00F0004230F097 +:1005200000400AD0C10D01F56071C0F3160042EA27 +:100530000151C2084007114370470020014670472F +:1005400030B5041E71F1000404DB4FF0004440425A +:1005500064EB0101141E73F1000405DB1C464FF02F +:100560000043524263EB0403994208BF904230BDFE +:1005700001F0004330B421F0004150EA010206D0FE +:100580000A0DA2F56072C1F31301002A02DC30BC2F +:1005900000207047440F44EAC104C100E01830BC99 +:1005A00000EBC25000F078B830B50B460146002091 +:1005B0002022012409E021FA02F59D4205D303FA25 +:1005C00002F5491B04FA02F52844151EA2F10102A6 +:1005D000F1DC30BD2DE9F05F0546002092469B46D8 +:1005E00088460646814640241BE028464146474649 +:1005F000224600F02FF853465A46C01A914110D3B4 +:1006000011461846224600F016F82D1A67EB01082D +:100610004F4622460120002100F00DF817EB00099B +:100620004E41201EA4F10104DFDC484631462A4633 +:100630004346BDE8F09F202A04DB203A00FA02F18D +:10064000002070479140C2F1200320FA03F31943C0 +:1006500090407047202A04DB203A21FA02F0002162 +:10066000704721FA02F3D040C2F1200291400843C2 +:1006700019467047202A06DBCB17203A41FA02F0D0 +:1006800043EAE07306E041FA02F3D040C2F12002EF +:1006900091400843194670470029A8BF7047401C85 +:1006A000490008BF20F00100704710B4B0FA80FC88 +:1006B00000FA0CF050EA010404BF10BC704749B1C5 +:1006C000CCF1200421FA04F411FA0CF118BF012135 +:1006D00021430843A3EB0C01CB1D4FEA00614FEA15 +:1006E000102042BF002010BC704700EBC3501044E4 +:1006F0000029A4BF10BC7047401C490008BF20F06F +:10070000010010BC704710B5141E73F1000408DA24 +:10071000401C41F1000192185B411A4301D120F0C5 +:10072000010010BD2DE9F04D92469B4611B1B1FA82 +:1007300081F202E0B0FA80F220329046FFF77BFFB0 +:1007400004460F4640EA0A0041EA0B0153465A4666 +:10075000084313D0114653EA010019D0C8F14002F2 +:100760005046FFF777FF05460E465046594642462B +:10077000FFF761FF084305D0012004E02046394619 +:10078000BDE8F08D0020054346EAE0762C43374370 +:100790000A986305E40AA0EB08000022FD0A44EA77 +:1007A00047540A3002D500200146E9E70105101937 +:1007B0006941DDE9084500196941BDE8F04DA2E74E +:1007C0002DE9F04D81EA030404F0004B21F00045CF +:1007D00014464FF0000A23F0004150EA050220D0F1 +:1007E00054EA01021DD0C5F30A570246C5F31303AC +:1007F000C1F31300C1F30A5640F4801543F480138B +:10080000A7EB0608101BD64608F2FD3873EB05006F +:1008100002D308F1010801E092185B41B8F1000F22 +:1008200003DA00200146BDE8F08D00204FF480116E +:10083000064684460EE0171B73EB050705D3121B13 +:1008400063EB050306434CEA010C49084FEA30000C +:1008500092185B4150EA0107EDD152EA030012D031 +:1008600082EA040083EA0501084305D0101BAB416E +:1008700006D20122002306E000224FF0004302E0EE +:100880006FF0010253101AEB06004CEB085110EB0D +:100890000A0041EB0B01BDE8F04DFFF734BFC1F397 +:1008A0000A52C1F3130140F2FF3341F480119A421E +:1008B00002DA00200146704740F233439A42A2F226 +:1008C000334202DC5242FFF7C5BEFFF7B4BE000060 +:1008D000064C074D06E0E06840F0010394E807008D +:1008E00098471034AC42F6D3FFF726FC686700083F +:1008F000886700082DE9F04D00231A461B1A8A412B +:1009000003DB00200146BDE8F08DC1F30A52C1F3BC +:10091000130141F480154FF0000BD10702D10018EC +:100920006D41521E0027044640F2FF11384601EB8C +:10093000620A3E468046024600204FF48011FFF7CF +:1009400089FEC2197141BB1846EB0100B4EB030CE0 +:1009500075EB000C04D3E41A65EB000517460E4650 +:10096000241908F101006D4180463428E3DDF919AE +:1009700046EB0600091BA84103D24FF0FF32134695 +:1009800001E0002213461BEB070046EB0A51BDE8CD +:10099000F04DFFF7B8BE70B58C1810F8015B15F07C +:1009A000070301D110F8013B2A1106D110F8012BE1 +:1009B00003E010F8016B01F8016B5B1EF9D12B0706 +:1009C00005D40023521E0DD401F8013BFAE710F8BC +:1009D000013BCB1A921C03E013F8015B01F8015BA9 +:1009E000521EF9D5A142D8D3002070BD002904D0F1 +:1009F000816841F0010181607047816821F0010147 +:100A00008160704710B5154988420AD1441501210B +:100A1000204601F0F5FC2046BDE81040002101F021 +:100A2000EFBC0F4988420AD104150121204601F08C +:100A3000E7FC2046BDE81040002101F0E1BC094977 +:100A400088420AD10121CC03204601F0D9FC20467E +:100A5000BDE81040002101F0D3BC10BD00240140CE +:100A600000280140003C01400146002089684907F8 +:100A700000D501207047C06C80B27047024600204C +:100A800012680A4200D001207047014600208968A0 +:100A9000090700D50120704770B500240025194EC4 +:100AA000012207231146304600F054F80121304658 +:100AB00000F08FF802213046FFF7E0FF0028F9D060 +:100AC0003046FFF7D8FF0544022000F0E3FA641C2B +:100AD000E4B2052CE4D30520B5FBF0F0FFF7CFFC22 +:100AE000FFF71BFD4FF06632074BFFF73FFC6FF03F +:100AF0000B02FFF7ADFC0122FFF7AAFCBDE8704036 +:100B0000FFF736BD0024014066660A4010B5426812 +:100B10000E4B1A400C790B6842EA042213434360DF +:100B200082680B4B1A40D1E9024323434C7942EAD5 +:100B3000440213438360C26A22F47002097C491E96 +:100B4000C9B242EA0151C16210BD0000FFFEF0FFD0 +:100B5000FDF7F1FF70B5072609290AD9C568A1F18B +:100B60000A0404EB4404A640B543A3401D43C560FA +:100B700007E0056901EB4104A640B543A3401D43CE +:100B800005611F23072A09D2446B521E02EB820221 +:100B900093409C4391400C43446370BD0D2A09D29D +:100BA000046BD21F02EB820293409C4391400C43A2 +:100BB000046370BDC46A0D3A02EB820293409C4309 +:100BC00091400C43C46270BD816841F008018160AE +:100BD0007047002904D0816841F4A001816070470A +:100BE000816821F4A00181607047816841F00401AF +:100BF0008160704730B587B001214FF4017001F07A +:100C0000F1FB4FF4004001F0D5FB0220ADF80400E9 +:100C100000248DF8074001A9184801F065F8184D27 +:100C20002846FFF7EFFE02948DF80C408DF80D403A +:100C30004FF460210491059401218DF8181002A948 +:100C40002846FFF763FF01212846FFF7CFFE28461D +:100C5000FFF7BAFF2846FFF718FF0028FAD1284609 +:100C6000FFF7C3FF2846FFF7FFFE0028FAD1012156 +:100C70002846FFF7AEFF07B030BD00000008014076 +:100C80000024014010B56FF0040002F0C9FC0948CF +:100C900009490068B0FBF1F00849C0B2087000EBE8 +:100CA0004002C2EBC0104FF6FF7202EAC00048805B +:100CB00010BD00000000002000127A002800002073 +:100CC0002DE9FF410121182001F08CFB012108468C +:100CD00001F088FB43F20200ADF80C0010208DF803 +:100CE0000F0003208DF80E00244C03A9204600F0CD +:100CF000FBFF0221204601F051F86114204601F06B +:100D00004DF8A114204601F049F84FF4C040ADF869 +:100D10000C0048208DF80F00194F03A9384600F049 +:100D2000E3FF4FF4C06001F021FA28248DF8004061 +:100D300000258DF801508DF8025001268DF80360D2 +:100D4000684601F0E1F9F003ADF80C008DF80F40B2 +:100D500003A9384600F0C8FF0F21022000F0B0FFC1 +:100D600001948DF8085008208DF809008DF80A606C +:100D700001A800F06BFFBDE8FF810000000C0140FE +:100D800000100140012080F3138805480168054ADE +:100D900001F4E06111430160BFF34F8FFEE70000F3 +:100DA0000CED00E00400FA057FB50121022001F0FE +:100DB0000BFB0920ADF8080041F61F40ADF8040018 +:100DC0000024ADF80A40ADF806400E4D01A92846B2 +:100DD00002F0FAFC01224121284602F0EAFC1D2122 +:100DE0008DF800108DF8014003218DF802100121CB +:100DF0008DF80310684601F087F90121284602F0BA +:100E0000C0FC7FBD00040040F0B587B0064601215C +:100E1000480401F0D9FA0121042001F0E3FA042486 +:100E2000ADF8184003258DF81A5018218DF81B10C5 +:100E30001E4F06A9384600F057FF0821ADF81810DC +:100E40008DF81B4006A9384600F04EFF4FF4A06015 +:100E500001F08CF926218DF804108DF80550022040 +:100E60008DF8060001208DF8070001A801F04CF96B +:100E700002960020ADF80C00ADF80E00ADF81000A1 +:100E8000ADF814000C20ADF81200094C02A9204660 +:100E900002F0D8FD012240F22551204602F0B7FDB4 +:100EA0000121204602F080FD07B0F0BD000801409E +:100EB0000044004070B586B005460121880401F069 +:100EC00083FA0121082001F08DFA4FF48060ADF81B +:100ED000140003248DF8164018218DF817101F4EAA +:100EE00005A9304600F000FFF114ADF814100421FC +:100EF0008DF8171005A9304600F0F6FE4FF4A060FB +:100F000001F034F927208DF800008DF801408DF8AC +:100F1000024001208DF80300684601F0F5F80195C4 +:100F20000020ADF80800ADF80A00ADF80C00ADF8EF +:100F300010000C20ADF80E00094C01A9204602F06B +:100F400081FD012240F22551204602F060FD012181 +:100F5000204602F029FD06B070BD0000000C0140E3 +:100F6000004800402DE9F04105460F4600240C4E94 +:100F70000BE04021304602F023FD0028F9D0295D26 +:100F8000304602F0C1FD641CA4B2BC42F1D3402142 +:100F9000304602F015FD0028F9D0BDE8F0810000D0 +:100FA0000048004070B54FF400512C4800F0EFFEAF +:100FB0002B4C0025A8B1A572A089B0F5967F4BD324 +:100FC000A078642801D2401CA070FFF765FD606026 +:100FD000244988423EDD2449884205DD6420607250 +:100FE00039E00120A072E7E72049884202DD5A205B +:100FF000607230E01E49884202DB502060722AE0B5 +:101000001C49884202DB4620607224E01A4988426B +:1010100002DD3C2060721EE01849884202DD322069 +:10102000607218E01649884202DD2820607212E0E2 +:101030001449884202DB1E2060720CE0124988428B +:1010400002DB1420607206E01049884203DB0A20AC +:10105000607200E06572A58170BD00000010014063 +:10106000E4050020B81E6540B81E85405C8F8240B4 +:101070007B147E409A9979408FC275405C8F724094 +:10108000D7A3704052B86E40A4706D409A996940E1 +:10109000FEE770470B49498848434FF0E02148611B +:1010A00000238B61086940F0010008610869C207EC +:1010B00001D0C003FAD5086920F0010008618B61F6 +:1010C00070470000280000200B49097848434FF082 +:1010D000E021486100238B61086940F0010008614C +:1010E0000869C20701D0C003FAD5086920F00100E1 +:1010F00008618B6170470000280000202DE9F04155 +:101100002B4C0127FD03207E2A4E4FF002080028B9 +:1011100016D12946304600F03AFE80B1C820FFF7CC +:10112000B9FF2946304600F032FE48B12946304624 +:1011300000F02DFE0028F9D184F8198000E06776D0 +:10114000207E012814D12946304600F020FE78B1D7 +:10115000C820FFF79FFF2946304600F018FE38B13F +:101160002946304600F013FE0028F9D184F8198092 +:10117000207E022817D12946304600F008FE0028BC +:1011800011D0C820FFF786FF2946304600F0FFFD4A +:10119000002808D02946304600F0F9FD0028F9D192 +:1011A000A07A10B16776BDE8F08103206076FAE797 +:1011B000E4050020001001402DE9F0412B4C207E79 +:1011C000627E90424FD001273E03294D022A10D162 +:1011D0003146284600F0E2FD01F0D2F9227E62B1EC +:1011E0003146284600F0DCFDA77601F0A9F8022080 +:1011F0002076607E012803D01EE001F04FFBF3E76C +:101200000221284600F0CAFD3146284600F0C6FDFE +:10121000227E12B1022A03D00DE001F03FFB0AE06A +:10122000002001F0B7FD01F039FB002020723146AB +:10123000284600F0B5FD2776607E032813D14FF4D1 +:101240007A70FFF727FF0221284600F0A7FD3146FC +:10125000284600F0A3FD4FF40051284600F09EFD03 +:1012600003202076FEE7BDE8F0810000E4050020C1 +:10127000000C01402DE9F04180461746002400296A +:1012800001D00D4603E04046FEF7AAFF85B2134E9B +:1012900019E05FB1022C09D14021304602F090FBE9 +:1012A0000028F9D03946304602F02EFC4021304665 +:1012B00002F086FB0028F9D018F80410304602F03E +:1012C00023FC641CA4B2AC42E3D34021304602F0BC +:1012D00077FB0028F9D0BDE8F08100000044004011 +:1012E00070B590B005460E463C2101A8FEF75BFFA5 +:1012F0004FF4E130FFF788FD4FF47A742046FFF792 +:10130000C9FE2046FFF7C6FE09E000F021FBC82217 +:1013100039A13AA000F00CFC2046FFF7BBFEC82222 +:1013200035A13AA000F004FC0028EED1C82232A179 +:1013300038A000F0FDFB0028F8D1C8222EA137A06C +:1013400000F0F6FB0028F8D10A20FFF7A3FEC82220 +:1013500029A139A000F0ECFB0028F8D1C82226A171 +:1013600039A000F0E5FB0028F8D12046FFF792FEF7 +:101370002046FFF78FFE2046FFF78CFE2046FFF742 +:1013800089FE3C2101A8FEF70EFF33462A4631A113 +:1013900001A802F0BFFB224617A101A800F0C8FB7C +:1013A0000028F8D1C82214A131A000F0C1FB002808 +:1013B000F8D14FF4FA7422460FA131A000F0B8FB27 +:1013C0000028F8D14FF496752A460BA139A000F0F9 +:1013D000AFFB0028F8D1C82207A13AA000F0A8FB73 +:1013E0000028F8D13B4B188021463B48FEF7DBFE36 +:1013F00010B0002070BD00004F4B000041542B4343 +:1014000049504D4F44453D300D0A000041540D0AEE +:1014100000000000415445300D0A000041542B5596 +:101420004152543D3131353230302C382C312C3052 +:101430002C300D0A0000000041542B43574D4F44FF +:10144000453D320D0A00000041542B5253540D0A01 +:101450000000000041542B43575341503D22257357 +:10146000222C222573222C312C340D0A000000007E +:1014700041542B4349504D55583D300D0A00000052 +:1014800041542B43495053544152543D22554450EA +:10149000222C223235352E3235352E3235352E324C +:1014A0003535222C36303135362C34323235342C29 +:1014B000300D0A0041542B4349504D4F44453D31B6 +:1014C0000D0A000041542B43495053454E440D0A28 +:1014D0000000000036000020FC0100200146002032 +:1014E000054A1288130406D5044BC2F30E02985421 +:1014F0001846FEF763BE704736000020FC0100204E +:101500002DE9F0475A4F3888000444D5594DDFF88B +:10151000688100262878594CDFF864914FF4FA7AF4 +:1015200002282ED199F800007B282AD15146204666 +:10153000FEF739FE6E806A8819F80200A0547D28F3 +:1015400002D0521C6A80F6E74C4803F049F8286143 +:10155000D8B14CA103F026F8026946484BA11430DB +:1015600002F0D8FA4AA1286903F01CF80269414840 +:1015700046A1283002F0CEFA03202870286902F034 +:10158000EDFF28780A2808D021E051463C48FEF7B4 +:101590000AFEA8F80060BDE8F087388820F4004013 +:1015A000E8800D2109F8001048440A214170514695 +:1015B0003A48FEF7F8FD2F4A39A15032374802F079 +:1015C000A9FA36492E4803F0F7F8012805D051460C +:1015D0002B48FEF7E8FD3E80DDE751462748FEF741 +:1015E000E2FD6E80698819F801007B2802D0491C51 +:1015F0006980F7E7AE80A888431819F803202254C1 +:101600007D2A07D103EB090253780D2B02D1927882 +:101610000A2A02D0401CA880EDE7184802F0E0FF3B +:101620002861E8B122A102F0BDFF01468069C969C5 +:10163000FEF75AFF214CA07421A1286902F0B2FFE5 +:1016400001468069C969FEF74FFFE074286902F01E +:1016500085FF51460A48FEF7A6FDA8F800609AE704 +:1016600051460748FEF79FFDA8F8006093E7000089 +:10167000360000203C000020380000200808002030 +:10168000FC010020737369640000000025730000F2 +:1016900070617373776F726400000000140600209D +:1016A0007374617475732F7365742F257300000054 +:1016B00072656C617953746174757300E405002080 +:1016C000726564002DE9FC47574E3078012836D00A +:1016D000564F4FF000084FF4FA61022836D0032825 +:1016E0003DD0042841D00A254FF4FA79052849D085 +:1016F0000A2822D1F88A88421FD349464C48FEF76F +:1017000052FDFB8D06F150024AA1494802F002FA4F +:10171000F06000280FDD0124CDE90045B0890023E9 +:1017200082B2434953A000F0E5FB0028F4D14946BA +:101730005248FEF738FDA7F81680BDE8FC8750A197 +:1017400052A0FFF7CDFD02203070F6E7B88A88423C +:10175000F3D353A000F01EFAA7F81480EDE759A0C8 +:1017600000F018FA04203070E7E700F067F92E491E +:101770002831A1F1140000F025F90028F7D1052047 +:101780003070DAE75948782120F8021B2649643185 +:10179000FEF72DFD24495548C8313430FEF727FDAA +:1017A00021495248DC316630FEF721FDC82250A1A4 +:1017B00050A000F0BDF90028F8D149461C48FEF7BA +:1017C000F2FC194A4FA13C321948B36802F0A2F961 +:1017D0004A4647A1164800F0ABF90028F8D1C822C4 +:1017E00043A14FA000F0A4F90028F8D1C82240A1DD +:1017F0004FA000F09DF90028F8D100F0D5FA00289C +:10180000FBD149460A48FEF7CEFC074A4CA15032AC +:10181000074802F07FF90C220021054800F008FC7F +:101820000028F8D1357088E73C000020E40500204E +:10183000140600207B226465766963654E756D220F +:101840003A222573222C2269734F6E6C696E6522D1 +:101850003A312C2261697254656D706572617475DC +:101860007265223A25642C2272656D61726B223A90 +:1018700022227D007374617475730000FC010020E6 +:101880006173647177653938363700005869616F64 +:1018900059695F494F545F416972426F7800000097 +:1018A0007B22636F6465223A302C226D7367223A83 +:1018B00022737461727420636F6E6E656374227D2F +:1018C000000000007B22636F6465223A312C226D98 +:1018D0007367223A2267657457696669496E666F55 +:1018E0003A73756363657373227D0000FA0B002001 +:1018F0004F4B000041542B4349504D55583D300D3E +:101900000A00000041542B43495053544152543D66 +:1019100022544350222C222573222C25640D0A00C8 +:1019200041542B4349504D4F44453D310D0A000071 +:1019300041542B43495053454E440D0A00000000CA +:101940007374617475732F7365742F2573000000B1 +:1019500010B5184C4021204602F032F80028F9D08A +:101960002B21204602F0D0F80F20FFF793FB4021F7 +:10197000204602F025F80028F9D02B21204602F05D +:10198000C3F80F20FFF786FB4021204602F018F82D +:101990000028F9D02B21204602F0B6F84FF4FA7057 +:1019A000FFF778FBBDE81040142203A103A000F06C +:1019B000BFB80000004400404F4B000041540D0AE6 +:1019C0000000000030B58FB004460D463C2168464B +:1019D000FEF7E9FB3C216846FEF7E5FB2B46224675 +:1019E0000BA1684602F096F864220FA1684600F049 +:1019F0009FF810B101200FB030BD0E4900200880C3 +:101A00004FF4FA710C48FEF7CEFB0020F3E700001C +:101A100041542B43574A41503D222573222C222505 +:101A200073220D0A000000005749464920474F54D1 +:101A30002049500036000020FC01002070B54FF412 +:101A4000E130FFF7E1F94FF47A742046FFF722FB0B +:101A50002046FFF71FFB4FF4487509E0FFF778FFBA +:101A6000C8221CA11CA000F063F82846FFF712FB57 +:101A7000C82218A11CA000F05BF80028EED1C822F3 +:101A800014A11BA000F054F80028F8D1C82211A11D +:101A900019A000F04DF80028F8D10A20FFF7FAFA53 +:101AA000C8220CA11BA000F043F80028F8D1C822DE +:101AB00008A11CA000F03CF80028F8D12046FFF750 +:101AC000E9FA2046FFF7E6FA2046FFF7E3FA01209D +:101AD00070BD00004F4B000041542B4349504D4F07 +:101AE00044453D300D0A000041540D0A000000003D +:101AF000415445300D0A000041542B554152543D8C +:101B00003131353230302C382C312C302C300D0A1C +:101B10000000000041542B43574D4F44453D310DCB +:101B20000A00000041542B5253540D0A00000000DB +:101B30002DE9F04180460F461446144D00262E80B4 +:101B40004FF4FA711248FEF72EFB00221146404670 +:101B5000FFF790FBC7B18CB916E00A20FFF79AFA9D +:101B60002A8810040AD53846FFF7B8FC18B12E8031 +:101B70000020BDE8F0812E800120FAE7641E2404D5 +:101B8000240CEAD10120F4E70120F2E7360000201E +:101B9000FC0100200FB4F0B5CDB04FF4967102A84F +:101BA000FEF701FB002453AA02A8529901F0C6FFD8 +:101BB0000020019002A8FEF713FB86B20D4F02AD84 +:101BC0000BE04021384601F0FBFE0028F9D0295DEA +:101BD000384601F099FF641CA4B2B442F1D340210D +:101BE000384601F0EDFE0028F9D04DB00020F0BCE1 +:101BF0005DF814FB0044004010B54FF4004420464B +:101C000000F014F8002808D0204600F009F8034836 +:101C1000007E002801D1FFF7B5F810BDE4050020D3 +:101C2000014908607047000014040140014600208B +:101C3000054A12680A40044B14331B680B4202D059 +:101C4000002A00D0012070470004014030B51B4A33 +:101C500083790168002B2AD013688B431360111D10 +:101C60000B680468A3430B60017911440B68046896 +:101C700023430B60114C08342168036899432160A9 +:101C8000231D19680568A94319604179102905D0F9 +:101C900011440A68006802430A6030BD2168026886 +:101CA00011432160196800680143196030BD007953 +:101CB000104402688A43026030BD00000004014005 +:101CC00010B58A07120F0F23934021F00304054932 +:101CD00021448C689C438C608B68904003438B60EC +:101CE00010BD0000000001402DE9F0410022CC7839 +:101CF00004F00F03E40601D58C7823430C784FF0F1 +:101D00000F0714F0FF0F4FF0010C1CD005680CFA00 +:101D100002F40E882640A64211D1960007FA06F872 +:101D200025EA080503FA06F848EA0505CE78282EC4 +:101D300002D0482E02D002E0446100E00461521C4F +:101D4000082AE4D305600A88FF2A1ED945680022C4 +:101D500002F108060CFA06F40E882640A64210D1BD +:101D6000960007FA06F825EA080503FA06F848EA95 +:101D70000505CE78282E00D14461CE78482E00D1BA +:101D80000461521C082AE3D34560BDE8F081024695 +:101D9000002092680A4200D00120704741617047DC +:101DA00001617047FEE700002DE9F0474D4D4FF40B +:101DB000FA794946A5F802904B48FEF7F4F94A4CE7 +:101DC000102020704FF0000884F8018084F8028011 +:101DD0000420E0704D212171512161715421A171C4 +:101DE000E1712072C220607204F5FA763088010A2F +:101DF000A172E0720C20A880B01CFEF7F1F9C2B20B +:101E00002A70A88804F8008020444270801CB11C0D +:101E1000FEF7B0F9A88829780844801CA88004F54A +:101E20000A700646FEF7DCF9C2B22A70A88804F8E8 +:101E3000008020444270801C3146FEF79BF9A88840 +:101E400029780844801CA88004F25A200646FEF730 +:101E5000C7F9C2B22A70A88804F8008020444270F2 +:101E6000801C3146FEF786F9A88829780844801C32 +:101E700086B2AE807F2E12D2B01E60701B4FA7F8C4 +:101E8000008049461A48FEF78EF900223146204666 +:101E9000FFF7F0F9688818B3154C02260FE001200F +:101EA000BDE8F0870A20FFF7F5F83888000406D56A +:101EB0002078B6EB101F02D16078022807D068881E +:101EC000401E0004000C6880ECD10120E8E7E078B7 +:101ED00010B1A7F80080FEE7A7F800800020DFE738 +:101EE0000120DDE740010020060A00203600002026 +:101EF000FC0100202DE9FF5F8346DDE90E47924695 +:101F00001E46474D4FF4FA794946A5F802904548D8 +:101F1000FEF749F9F000434E00EB440030303070DA +:101F20004FF0000886F801800220A8805846FEF78E +:101F300057F9C2B22A70A88806F80080304442706F +:101F4000801C5946FEF716F9A88829780844801C99 +:101F500080B2A880012C01D0022C05D1390A31545D +:101F600031184F70801CA8800AF0FF022A7042B11D +:101F7000A88801993044FEF7FDF8A888297808441C +:101F8000A880A5F80880A5F80A80AF88812F02D81C +:101F9000B81E70700EE0B81E80B200F07F0129817B +:101FA000C009E88030B141F08001298100F07F0054 +:101FB000688171701C4EA6F8008049461B48FEF7E8 +:101FC000F2F8AA7A39461748FFF754F9012C05D0E0 +:101FD000022C03D0002004B0BDE8F09F6888C0B197 +:101FE0004FF00409114F0EE00A20FFF753F8308834 +:101FF000000408D53878B9EB101F04D1787802288E +:1020000001D1012C07D06888401E0004000C6880B4 +:10201000EAD10120DFE7A6F800800020DBE700001E +:1020200040010020060A002036000020FC010020AC +:102030002DE9F0478246884691462E4C4FF4FA77B8 +:10204000394667802C48FEF7AEF82B4D8220287069 +:1020500000266E70AE70284680F803900420A080A1 +:102060005046FEF7BDF8C2B22270A0882E54284414 +:102070004270801C5146FEF77DF8A0882178084404 +:10208000801C80B205F80080401C1FFA80F8A4F87C +:102090000480B8F17F0F13D2A8F102006870174DC9 +:1020A0002E8039461648FEF77EF800224146124837 +:1020B000FFF7E0F86088D8B1114F4FF009080FE042 +:1020C0000120BDE8F0870A20FEF7E4FF288800041D +:1020D00006D53878B8EB101F02D12E800020F0E72B +:1020E0006088401E0004000C6080ECD10120E8E70D +:1020F0000120E6E740010020060A0020360000200B +:10210000FC010020FEE7704770B50F23C27801265E +:102110000178002A1ED0144A126802F4E062C2F567 +:10212000E062120AC2F10404D3404578A5408278E7 +:102130001A402A43120101F1E02181F800240078BD +:1021400000F01F018E404009800000F1E020C0F83F +:10215000006170BD01F01F0086404809800000F159 +:10216000E020C0F8806170BD0CED00E0024908433A +:1021700002490860704700000000FA050CED00E01D +:1021800010B50021002400220378422B10D143789F +:102190004D2B0DD1435C1A4492B2491CC9B21E2981 +:1021A000F8D3C17F807F01EB0020904200D1FF2453 +:1021B000204610BD2DE9F0475D4C5E4D4FF0000606 +:1021C000208800041AD55C48FFF7DAFFFF280FD1FA +:1021D00059484179027901EB02212985C179827937 +:1021E00001EB02216985417A007A01EB0020A88584 +:1021F00026804FF4FA715048FDF7D5FF288AB0F5D4 +:10220000FA6F03D3E22000F0ABF82E82698C288DA0 +:102210004A4F0A266FF0130A4FF482794FF0640890 +:10222000814227D039880AEB9104B0FBF8F0C2B2A2 +:1022300004F1080080B21032494600F00DFF288DED +:10224000B0FBF6F0B0FBF6F106FB110204F1100052 +:1022500080B21032494600F0FFFE288DB0FBF6F147 +:1022600006FB11021834A0B21032494600F0F4FE09 +:10227000288D6884A98C688D814229D039880AEB21 +:1022800051044FF0500AB0FBF8F0C2B204F108005C +:1022900080B21032514600F0DFFE688DB0FBF6F0E0 +:1022A000B0FBF6F106FB110204F1100080B210320F +:1022B000514600F0D1FE688DB0FBF6F106FB11022D +:1022C0001834A0B21032514600F0C6FE688DA884C2 +:1022D000A88DE98C884229D03988890801EB41040E +:1022E000103CB0FBF8F0C2B204F1080080B210322A +:1022F000494600F0B1FEA88DB0FBF6F0B0FBF6F158 +:1023000006FB110204F1100080B21032494600F0C1 +:10231000A3FEA88DB0FBF6F106FB11021834A0B2A3 +:102320001032494600F098FEA88DE884BDE8F08799 +:1023300038000020E4050020F0030020FC09002004 +:1023400010B54FF41650FEF7B5FD02210348FFF714 +:1023500027FDBDE810401420FEF79CBE000C014094 +:1023600030B585B00546002414216846FDF71BFFF3 +:10237000002142228DF800204D228DF801208DF899 +:10238000025000208DF803008DF804006846425C7E +:10239000224494B2491CC9B20529F8D3200A8DF809 +:1023A00005008DF8064007216846FEF7DBFD05B005 +:1023B00030BD7047034A516821F4404101435160E8 +:1023C0007047000000100240054A002903D0D1697F +:1023D0000143D1617047D1698143D16170470000E9 +:1023E00000100240054A002903D091690143916120 +:1023F000704791698143916170470000001002406D +:10240000054A002903D0D1680143D1607047D168E3 +:102410008143D160704700000010024010B5264A89 +:10242000516801F00C01254B002927D0042927D041 +:10243000082927D00360516801F0F0010909204BF9 +:102440005C5C0168E1404160546804F4E064240A83 +:102450001C5D21FA04F48460546804F46054E40AB6 +:102460001B5DD940C160526802F44042920B144B8C +:102470001B1F9A5CB1FBF2F1016110BD0360DAE74A +:102480000360D8E7516801F47011536803F4803396 +:10249000022404EB914133B153689B0307D5094BE8 +:1024A00059430160C7E7074B59430160C3E7034B3A +:1024B00059430160BFE700000010024000127A009B +:1024C0001800002000093D00704700F001B800002E +:1024D0000CB50022019200922748016841F4803136 +:1024E00001604FF4A063016801F40031009101998B +:1024F000491C0191009911B901999942F3D10168E0 +:10250000890302D50121009100E000920099012980 +:1025100030D11A490A6842F010020A600A6822F0B3 +:1025200003020A600A6842F002020A6041684160E0 +:1025300041684160416841F480614160416821F433 +:102540007C114160416841F4E8114160016841F04B +:102550008071016001688901FCD5416821F00301A7 +:102560004160416841F0020141604168C1F381016D +:102570000229FAD10CBD00000010024000200240E8 +:102580002DE9F0412D4C2088400861880325B1FBDE +:10259000F5F10A3189B22A4E47F6FF7232805A238A +:1025A000642200F0B1FC2088800800EB40006188C4 +:1025B0000627B1FBF7F2B1FBF5F102EB410189B25D +:1025C0004FF6E07232802D23322200F09DFC2088ED +:1025D00080086188B1FBF7F2B1FBF5F102EB410134 +:1025E00089B248F21F4232802D23322200F08CFC47 +:1025F00020886FF0170101EB500080B2282100F015 +:1026000004FF20886FF0130505EB500080B2B42161 +:1026100000F020FF208805EB900080B2E6252946D7 +:1026200000F0CEFE2088800800EB4000103880B219 +:102630002946BDE8F04100F0A5BE0000FC090020DD +:102640002E0100202DE9F041914FF889B0F5FA7F75 +:102650007BD3B878022878D300243846B97A007E34 +:10266000012903D110B14FF4FC6403E0022801D129 +:102670004FF6FF74787A397A002688427ED0DFF8E8 +:10268000148250282ED3A8F800400C242346CD22D3 +:102690002146CA2000F0DEFB641CE4B2132CF5D303 +:1026A0000C242346D2222146CF2000F0D3FB641C09 +:1026B000E4B2132CF5D30C242346D7222146D42090 +:1026C00000F0C8FB641CE4B2132CF5D30C242346A1 +:1026D000DC222146D92000F0BDFB641CE4B2132C9F +:1026E000F5D3CAE03C2831D3A8F800600C252B466E +:1026F000CD222946CA2000F0ADFB6D1CEDB2132D92 +:10270000F5D3A8F800400C242346D2222146CF203E +:1027100000F0A0FB641CE4B2132CF5D30C24234678 +:10272000D7222146D42000F095FB641CE4B2132C80 +:10273000F5D30C242346DC222146D92000F08AFB65 +:10274000641CE4B2132CF5D397E09EE0282832D322 +:10275000A8F800600C252B46CD222946CA2000F09F +:1027600079FB6D1CEDB2132DF5D30C252B46D2222F +:102770002946CF2000F06EFB6D1C00E084E0EDB236 +:10278000132DF3D3A8F800400C242346D72221466A +:10279000D42000F05FFB641CE4B2132CF5D30C24AE +:1027A0002346DC222146D92000F054FB641CE4B20D +:1027B000132CF5D361E0142830D3A8F800600C2561 +:1027C0002B46CD222946CA2000F044FB6D1CEDB2F9 +:1027D000132DF5D30C252B46D2222946CF2000F00D +:1027E00039FB6D1CEDB2132DF5D30C252B46D722EA +:1027F0002946D42000F02EFB6D1CEDB2132DF5D32D +:10280000A8F800400C242346DC222146D92000F001 +:1028100021FB641CE4B2132CF5D32EE068B3A8F8B6 +:1028200000600C242346CD222146CA2000F012FB72 +:10283000641CE4B2132CF5D30C242346D222214687 +:10284000CF2000F007FB641CE4B2132CF5D30C245A +:102850002346D7222146D42000F0FCFA641CE4B2BF +:10286000132CF5D30C242346DC222146D92000F07A +:10287000F1FA641CE4B2132CF5D34FF480510648EE +:10288000FFF78EFA787A3872FE81BDE8F081000099 +:10289000E40500202E010020000C014010B518496D +:1028A0004FF6FF7008800923DE221946C82000F089 +:1028B000D1FA1523DE221946C82000F0CBFAC8222F +:1028C00015230921104600F0C5FADE22152309213F +:1028D000104600F0BFFA0D23C8221946C52000F0AB +:1028E000B9FAC52211230D21104600F0B3FA1123C5 +:1028F000C822BDE810401946C52000F0ABBA000060 +:102900002E01002070B5404DA88BB0F5FA6F7AD338 +:102910000024A87E3D49002647F6FF72012808D012 +:10292000022814D0032821D004282ED005283BD01B +:1029300068E00A80234620222146002000F08AFA1F +:10294000641CE4B20D2CF5D30220A8765AE00A806C +:102950000F24234618222146002000F07BFA641C35 +:10296000E4B21C2CF5D30320A8764BE00A801E2489 +:10297000234610222146002000F06CFA641CE4B2C9 +:102980002B2CF5D30420A8763CE00A802D24234686 +:1029900008222146002000F05DFA641CE4B23A2CC3 +:1029A000F5D30520A8762DE00E802346202221466F +:1029B000002000F04FFA641CE4B20D2CF5D30F2474 +:1029C000234618222146002000F044FA641CE4B299 +:1029D0001C2CF5D31E24234610222146002000F093 +:1029E00039FA641CE4B22B2CF5D32D24234608229B +:1029F0002146002000F02EFA641CE4B23A2CF5D3F4 +:102A00000120A876AE8370BDE40500202E010020D1 +:102A100010B5112000F044FD1420FEF73BFBD02040 +:102A200000F03EFD072000F05DFD422000F05AFD61 +:102A30001D2000F057FDD12000F032FD002000F0F5 +:102A400051FD1A2000F04EFD092000F04BFDD22070 +:102A500000F026FD012000F045FD222000F042FD9F +:102A6000C02000F01DFD102000F03CFD3B2000F0D8 +:102A700039FD002000F036FD022000F033FD11206A +:102A800000F030FDC52000F00BFD032000F02AFD12 +:102A9000C82000F005FD002000F024FD252000F0F6 +:102AA00021FD212000F01EFD052000F01BFD00206F +:102AB00000F018FD0A2000F015FD652000F012FD61 +:102AC000252000F00FFD772000F00CFD502000F0D5 +:102AD00009FD0F2000F006FD002000F003FDF820A6 +:102AE00000F0DEFC012000F0FDFCFE2000F0D8FC30 +:102AF000002000F0F7FC022000F0F4FC202000F0A1 +:102B0000CFFC362000F0CCFC082000F0EBFC3A2093 +:102B100000F0C6FC552000F0E5FC2B2000F0C0FCC6 +:102B2000002000F0DFFC002000F0DCFC012000F0C1 +:102B3000D9FC3F2000F0D6FC2A2000F0B1FC002098 +:102B400000F0D0FC002000F0CDFC012000F0CAFC19 +:102B5000DF2000F0C7FC7820FEF79CFABDE81040AB +:102B6000292000F09DBC10B5CF2000F099FC00207A +:102B700000F0B8FCC12000F0B5FC302000F0B2FC41 +:102B8000ED2000F08DFC642000F0ACFC032000F090 +:102B9000A9FC122000F0A6FC812000F0A3FCE82094 +:102BA00000F07EFC852000F09DFC102000F09AFCD7 +:102BB0007A2000F097FCCB2000F072FC392000F066 +:102BC00091FC2C2000F08EFC002000F08BFC3420C7 +:102BD00000F088FC022000F085FCF72000F060FC8B +:102BE000202000F07FFCEA2000F05AFC002000F0DA +:102BF00079FC002000F076FCC02000F051FC1B2086 +:102C000000F070FCC12000F04BFC012000F06AFCD9 +:102C1000C52000F045FC302000F064FC302000F0BE +:102C200061FCC72000F03CFCB72000F05BFC3620C4 +:102C300000F036FC482000F055FC3A2000F030FC53 +:102C4000552000F04FFCB12000F02AFC002000F0DD +:102C500049FC1A2000F046FCB62000F021FC0A20B6 +:102C600000F040FCA22000F03DFCF22000F018FC37 +:102C7000002000F037FC262000F012FC012000F0BC +:102C800031FCE02000F00CFC0F2000F02BFC2A208F +:102C900000F028FC282000F025FC082000F022FC91 +:102CA0000E2000F01FFC082000F01CFC542000F057 +:102CB00019FCA92000F016FC432000F013FC0A20A8 +:102CC00000F010FC0F2000F00DFC002000F00AFCCA +:102CD000002000F007FC002000F004FC002000F0C1 +:102CE00001FCE12000F0DCFB002000F0FBFB1520E4 +:102CF00000F0F8FB172000F0F5FB072000F0F2FBD6 +:102D0000112000F0EFFB062000F0ECFB2B2000F080 +:102D1000E9FB562000F0E6FB3C2000F0E3FB052039 +:102D200000F0E0FB102000F0DDFB0F2000F0DAFBEC +:102D30003F2000F0D7FB3F2000F0D4FB0F2000F035 +:102D4000D1FB2B2000F0ACFB002000F0CBFB0020DF +:102D500000F0C8FB012000F0C5FB3F2000F0C2FBE3 +:102D60002A2000F09DFB002000F0BCFB002000F0BA +:102D7000B9FB002000F0B6FBEF2000F0B3FB112000 +:102D800000F08EFB7820FEF785F9BDE81040292081 +:102D900000F086BB70B506460024094801884588C6 +:102DA0004D430021084600F077FA00F0BDFB03E038 +:102DB000304600F097FB641CAC42F9D370BD0000B4 +:102DC000FC0900202DE9F003214A2C272A252B2677 +:102DD00091884FF0F00C49F241384FF4A07446F658 +:102DE000040300280CD0994227D001209071148050 +:102DF000A2F802C0414516D1D771157256721CE077 +:102E000000209071A2F800C05480414501D0994241 +:102E100013D1D7711572567299420ED114804FF4A6 +:102E2000F070508009E02220A1F50943893B09D0C8 +:102E3000D0712120107220205072BDE8F0030020D4 +:102E400000F07CB9D0714F2010724E205072F4E720 +:102E5000FC0900202DE9FE4F4FF0000B0025002655 +:102E6000171AA3EB010881468A46681E002F03DD6E +:102E70004FF00101019107E003D14FF000010191F2 +:102E800002E00190C7F10007B8F1000F03DD4FF039 +:102E90000100009007E003D14FF00000009002E035 +:102EA0000090C8F10008474501DD3C4600E044467B +:102EB000601C029015E01FFA8AF11FFA89F000F0F9 +:102EC00015F83D444644A54202DD2D1B019881447E +:102ED000A64202DD361B009882440BF1010B1FFA5B +:102EE0008BFB02988345E6DDBDE8FE8F10B500F050 +:102EF000D3F900F019FB03484088BDE8104000F00A +:102F0000F1BA00002C0100202DE9FC5F80468B46C1 +:102F100017469A4229D302FB02FA5B430093ABEBBC +:102F2000070085B20BEB070001901BE0A8EB070040 +:102F300084B208EB0709A5EB0B060FE0A4EB080031 +:102F4000404306FB0600504506D80099884203D945 +:102F500029462046FFF7CAFF641CA4B2A145EDD85C +:102F60006D1CADB20198A842E0D8BDE8FC9F0000FE +:102F7000F8B501211C20FFF735FA4FF47070ADF859 +:102F8000000010208DF8030003208DF80200694630 +:102F90002F48FEF7A9FE2E484FF400711030016053 +:102FA00040210160802101608115016000F0FAFA82 +:102FB0003220FEF76FF83220FEF76CF8254C46F60B +:102FC000040649F24135A088FF2806D3A0F57F41C9 +:102FD000FF3902D0B0F5134F29D1D32000F060FAA9 +:102FE00000F08CF800F08AF800F088F80002A08069 +:102FF00000F084F8A188C0B20843A080A84210D095 +:10300000BF2000F04DFA00F079F800F077F800F0FA +:1030100075F80002A08000F071F8A188C0B20843E2 +:10302000A080A088A84202D0B04200D0A580A0888D +:10303000A84202D1FFF797FD03E0B04201D1FFF7AC +:10304000E7FC0020FFF7BEFE0020FFF7A3FEF8BD5F +:10305000000C0140FC0900202DE9F84F07460C4602 +:103060004FF00008A1462248DFF888A000EB0210CC +:10307000DFF884B00090009810F808600025300652 +:1030800004D54FF6FF70AAF8020002E00020AAF86B +:10309000020021463846FFF729FF7006060E641C21 +:1030A000A4B2BBF80000B84205D84FF6FF70AAF8EA +:1030B0000200BDE8F88FA4EB090010280BD06D1CAE +:1030C000EDB2082DDBD308F1010808F0FF08B8F1D4 +:1030D000100FD0D3EDE74C467F1CBFB2BBF8000009 +:1030E000B842F0D84FF6FF70AAF80200E1E70000FE +:1030F000A85C00082C010020FC0900202DE9F0410B +:1031000000F028FA0C4C4FF4807020608020206082 +:103110004026201D0660451505600120FDF7D4FFFF +:1031200000F008FA07460120FDF7CEFF2660256073 +:103130003846BDE8F0810000100C014070B5002455 +:10314000544D46F604022946AB798988012B18D1E3 +:10315000914216D0082814D2DFE800F00406080ACD +:103160000C0E101206200CE007200AE0042008E0F4 +:10317000052006E0012004E0002002E0032000E03A +:103180000220A1F51343413B01D0914259D10828B7 +:1031900012D2DFE800F0110406080A0C0E10802499 +:1031A0000AE0402408E0C02406E0202404E0602473 +:1031B00002E0A02400E0E024362044F0080491421C +:1031C00001D144F0020400F06BF9204600F08AF9C6 +:1031D000A00606D528886988884208D22980688098 +:1031E00005E028886988884201D929806880287A82 +:1031F00000F056F9002000F075F9002000F072F997 +:103200002888401EC0F30F2000F06CF92878401E7B +:10321000C0B200F067F9687A00F042F9002000F0CF +:1032200061F9002000F05EF96888401EC0F30F20AD +:1032300000F058F9A878BDE87040401EC0B200F018 +:1032400051B9082812D2DFE800F0040608110A0C70 +:103250000E1030240AE0102408E0202406E0382470 +:1032600004E0282402E0182400E00824A1F5094025 +:10327000893809D0032044F4805400F011F9204625 +:10328000BDE8704000F02EB9112046F240010C4319 +:10329000F3E70000FC09002070B504460E461A4D05 +:1032A0002846AA88007AA2F51341413907D0A2F531 +:1032B000D041043903D0A979012913D016E000F0D8 +:1032C000EFF8200A00F00EF9E0B200F00BF9687A8E +:1032D00000F0E6F8300A00F005F9F0B2BDE8704001 +:1032E00000F000B92988091B491E8CB200F0D8F8FB +:1032F000204600F0F7F8287A00F0D2F83046BDE812 +:10330000704000F0EFB80000FC0900202DE9F84FF4 +:1033100082460C460027A046184902EBC20001EB8A +:103320008000DFF85C9000900098C65D00254FF6A5 +:10333000FF7B300602D5A9F802B002E00020A9F810 +:10334000020021465046FFF7D1FD7006060E641CB0 +:10335000A4B2A4EB0800182809D06D1CEDB2082D0A +:10336000E7D37F1CFFB2242FDED3BDE8F88F44469D +:103370000AF1010A1FFA8AFAF3E7000098620008CE +:103380002C01002070B504460D4630222946204607 +:10339000FFF762FE04F1080080B22D222946FFF7F4 +:1033A0005BFE04F1100080B211222946FFF754FEA3 +:1033B0001834A0B22946BDE870401022FFF74CBE79 +:1033C00070B504460D46302229462046FFF744FEDC +:1033D00004F1080080B22D222946FFF73DFE04F1DA +:1033E000100080B211222946FFF736FE04F11800C2 +:1033F00080B20E222946FFF72FFE2034A0B22946C4 +:10340000BDE870401022FFF727BE70B504460D4698 +:10341000002229462046FFF779FF04F10C0080B214 +:1034200001222946FFF772FF04F1180080B2022240 +:103430002946FFF76BFF04F1240080B203222946DE +:10344000FFF764FF3034A0B22946BDE87040042283 +:10345000FFF75CBF70B504460D465522294620464D +:10346000FFF7FAFD04F1080080B247222946FFF772 +:10347000F3FD04F1100080B20F222946FFF7ECFDA6 +:1034800004F1180080B24D222946FFF7E5FD2034F3 +:10349000A0B22946BDE870401322FFF7DDBD000051 +:1034A0002DE9F041064600F07DF80D4C4FF4807098 +:1034B00020604020251F2860C70027600120FDF7FD +:1034C00003FE304600F096F80120FDF7FDFD802652 +:1034D00026600120FDF7F8FD2E602F60BDE8F08129 +:1034E000140C01402DE9F041064600F05BF80D4C4C +:1034F0004FF48070206040202060C500271D3D6093 +:103500000120FDF7E1FD304600F074F80120FDF7E1 +:10351000DBFD80263E600120FDF7D6FD266025609C +:10352000BDE8F081100C01400148C079FFF7B8BF39 +:10353000FC09002005488068C1B2054800684FF4C6 +:103540007F4202EAC000084480B270470010014088 +:1035500008080140F8B5104C207801281AD0FF2047 +:10356000ADF8000004268DF8036003258DF80250A5 +:1035700069460A48FEF7B8FB4FF4FF50ADF800006B +:103580008DF803608DF8025069460548FEF7ACFBE4 +:1035900001202070F8BD00002C0100200010014027 +:1035A00000080140F8B5104C207802281AD0FF20FE +:1035B000ADF8000010268DF8036003258DF8025049 +:1035C00069460A48FEF790FB4FF4FF50ADF8000043 +:1035D0008DF803608DF8025069460548FEF784FBBC +:1035E00002202070F8BD00002C01002000100140D6 +:1035F00000080140C1B2084A1161C943C9B2516112 +:10360000010A4901054A11606FEA10200006C00C4A +:10361000111D0860704700000010014010080140B3 +:103620004FF0E021042804D0086920F0040008616C +:103630007047086940F00400086170477047000057 +:1036400010B50F48016841F00101016041680D4A61 +:103650001140416001680C4A11400160016821F489 +:1036600080210160416821F4FE0141604FF41F0197 +:103670008160FEF72AFF05494FF00060086010BD29 +:10368000001002400000FFF8FFFFF6FE08ED00E02A +:1036900010B5354C0121204600F07FF8002861D09C +:1036A0000121204600F06AF8304C314B002120887F +:1036B000A8B1020413D41A78C82A01D8521C1A706F +:1036C0001A78142A0DD35A88824205D140F400405A +:1036D00020805980197004E05880197001E0197039 +:1036E0005980244C2088A8B1020413D45A78642A43 +:1036F00001D8521C5A705A78142A0DD39A888242E3 +:1037000005D140F4004020809980597004E09880F1 +:10371000597001E05970998017494FF6E852088AAC +:10372000904201D2401C0882C889904201D2401CBC +:10373000C8818889904201D2401C8881888B904240 +:1037400001D2401C8883088C904201D2401C08841E +:10375000888A904201D2401C8882C88A904201D255 +:10376000401CC88210BD000000040040360000204C +:103770002C00002038000020E4050020C94301820D +:103780007047002904D0018841F001010180704791 +:10379000018821F001010180704702460020138A50 +:1037A0000B4092890A40002B02D0002A00D0012051 +:1037B0007047002A03D082890A4382817047828938 +:1037C0008A4382817047000030B502881B4C1C4D33 +:1037D000A0420DD0A8420BD0B0F1804F08D0194BB9 +:1037E000984205D0184B984202D0184B984203D10A +:1037F00022F070034A881A43154B984206D0154BA5 +:10380000984203D022F44073CA881A4302808A88FF +:1038100082850A880285A0420AD0A84208D00E4AB2 +:10382000904205D00D4A904202D00D4A904201D1FB +:10383000097A01860121818230BD0000002C0140FF +:10384000003401400004004000080040000C00402B +:1038500000100040001400400040014000440140BE +:103860000048014070B5164C40F2255529462046C7 +:1038700000F0ADF888B1204600F042F9C3B211481B +:103880000288110409D410498B54521C92B2028050 +:103890005A2A02D342F4004101800821204600F058 +:1038A0008FF8012806D1204600F02AF90821204689 +:1038B00000F076F829462046BDE8704000F070B868 +:1038C00000380140320000205C01002070B5174D27 +:1038D00040F225563146284600F079F890B1284646 +:1038E00000F00EF9C4B212490B8818040AD4581C0F +:1038F00082B210480A80C454B2F5F07F02D342F479 +:10390000004008800821284600F05AF8012806D116 +:10391000284600F0F5F80821284600F041F8314625 +:103920002846BDE8704000F03BB80000004400406D +:1039300036000020FC01002070B5164C40F22555E1 +:103940002946204600F043F888B1204600F0D8F818 +:10395000C3B211480288110409D410498B54521C77 +:1039600092B202803B2A02D342F400410180082136 +:10397000204600F025F8012806D1204600F0C0F8C6 +:103980000821204600F00CF829462046BDE870408A +:1039900000F006B80048004034000020C0010020BC +:1039A0008A05C94301807047002904D0818941F408 +:1039B000005181817047818921F4005181817047D4 +:1039C0000246002012880A4200D00120704770B5DC +:1039D000002440F66A12C1F3421301F01F050126CC +:1039E00006FA05F2012B0CD0022B0DD0838A13406E +:1039F000090A8E40008830400BB100B101242046F6 +:103A000070BD83891340F3E7038A1340F0E710B5D4 +:103A100040F66A13C1F3421301F01F040121A140D3 +:103A2000012B07D0022B07D014303AB102680A43A9 +:103A3000026010BD0C30F8E71030F6E702688A43E8 +:103A4000026010BD30B585B004460D46208A4CF6A4 +:103A5000FF710840E98801432182A0894EF6F311E5 +:103A60000840A9882A8911436A8902431143A18128 +:103A7000A08A4FF6FF410840A9890143A182684608 +:103A8000FEF7CCFC1D48844201D1039800E0029867 +:103A9000A189090408D500EBC00101EB00102968D9 +:103AA0004900B0FBF1F007E000EBC00101EB0010B2 +:103AB00029688900B0FBF1F06422B0FBF2F1090142 +:103AC0000B096FF018056B4300EB8300A3891D04FD +:103AD0004FF0320307D503EBC000B0FBF2F000F06B +:103AE0000700084306E003EB0010B0FBF2F000F023 +:103AF0000F000843208105B030BD000000380140B0 +:103B00008088C0F308007047C1F3080181807047C6 +:103B1000FEE700000FB4084B10B504A902AA0398F1 +:103B200000F080F9044602A9002000F012FD2046B2 +:103B300010BC5DF814FB00005345000837B514466F +:103B40000846064B6A46214600F06CF90446694671 +:103B5000002000F0FEFC20463EBD0000534500085A +:103B6000490050EAC12018BF04204A0D18BF40F098 +:103B7000010040F2FF72B2EB515F08BF40F002005B +:103B8000012808BF052070472DE9F0414F1E00EBCA +:103B9000C7010446D1E9000115461E4637F006026A +:103BA0000DD02A463346FCF7E1FB7F1E04EBC7032A +:103BB000D3E90023FCF733FB37F00602F1D1022FE3 +:103BC00025D0042F13D0062F18BFBDE8F0812A4658 +:103BD0003346FCF7CBFBD4E90A23FCF720FB2A464B +:103BE0003346FCF7C3FBD4E90823FCF718FB2A464D +:103BF0003346FCF7BBFBD4E90623FCF710FB2A464F +:103C00003346FCF7B3FBD4E90423FCF708FB2A4650 +:103C10003346FCF7ABFBD4E90223FCF700FB2A4652 +:103C20003346FCF7A3FBD4E90023BDE8F041FCF7E1 +:103C3000F6BA00000022134610460149FCF7C0BD49 +:103C40000000F03FFCF7EBBA002213461046114685 +:103C5000FCF7B6BD40F2013200204FF0E041FCF726 +:103C6000F7BB0000024A00201107FCF7F1BB00007F +:103C700001FDFFFF02E008C8121F08C1002AFAD1A7 +:103C800070477047002001E001C1121F002AFBD1DC +:103C9000704700000149086070470000580100208B +:103CA0002DE9FF5F82B00021DDE90430020DDDF86F +:103CB00040B0034318D044F61050A2F2FF32424302 +:103CC0001514119801281FD0A5EB0B00401C5FEACA +:103CD000000A4FF000064E4FDFF83891B0465046CC +:103CE00015D5CAF1000413E0119801244AA3012854 +:103CF00001D16FEA0B010298119AC0E90031C0E9C5 +:103D0000024206B0BDE8F09FCBF10000DFE70446B9 +:103D10000021404A491842EB0450CDE9001012E05E +:103D2000E00707D032463B4640464946FCF71EFBBB +:103D30008046894632463B4610461946FCF716FB3C +:103D400006460F466410002CEAD1DDE90401DDE9E6 +:103D50000023BAF1000F06DAFCF708FB42464B4697 +:103D6000FCF704FB05E0FCF72BFD42464B46FCF755 +:103D700027FD04460E460022284BFCF7E1FB03D842 +:103D80004FF0FF30014607E00022254B2046314628 +:103D9000FCF745FAFCF783FD102409E0002C0ADB50 +:103DA0000A220023FCF716FC039B30321A55641ECE +:103DB00050EA0102F2D1641C039AC4F111031444C5 +:103DC000119A012A03D0012208430DD10AE00843C9 +:103DD00004D000204FF0110B119072E7A3EB0B05FC +:103DE0006D1E0DE05B4504DD4FF0000205F101059D +:103DF00004E003DA4FF00002A5F10105002AECD03F +:103E000002981199C0E90231C0E9004579E7000044 +:103E1000000014400000F03F300000000000F043BC +:103E20000000E03F2DE9FF4F95B09B4689460646CE +:103E300000250FE2252877D100242746F84A0121E2 +:103E4000059400E0044316F8013F203B01FA03F01B +:103E50001042F7D130782A2811D06FF02F03307834 +:103E6000A0F13002092A16D8059A44F0020402EBA8 +:103E7000820203EB42021044761C0590EFE759F8EA +:103E8000042B0592002A03DA504244F400540590B2 +:103E900044F00204761C30782E2816D116F8010F53 +:103EA00044F004042A280DD06FF02F023078A0F1DE +:103EB0003003092B09D807EB870302EB4303C7182C +:103EC000761CF3E759F8047B761C30786C280FD009 +:103ED00006DC4C2817D068280DD06A2814D104E0DD +:103EE000742810D07A280FD10DE044F400140AE0B1 +:103EF00044F4801401E044F440147278824202D108 +:103F000004F58014761C761C307866280BD013DC00 +:103F1000582877D009DC002875D04528F6D04628E7 +:103F2000F4D047281AD19DE118E0632835D06428E1 +:103F300079D0652812D195E1702873D008DC672804 +:103F4000F1D069286FD06E280DD06F2806D1B5E06A +:103F500073282CD0752875D0782874D05A461799B4 +:103F600090476D1C75E1C4F30250022809D0032864 +:103F70000DD0D9F8001004280DD00D6009F1040906 +:103F800067E1D9F80010EA17C1E90052F6E7D9F85D +:103F900000100D80F2E70D70F0E719F8041B8DF8A2 +:103FA000001000208DF80100EA46012003E059F8D6 +:103FB00004AB4FF0FF3061074FF0000102D40DE079 +:103FC00008F101018846B9420FDA8045F8DB1AF89A +:103FD00008100029F4D108E008F101018846814267 +:103FE000FADB1AF808100029F6D105985B46A0EB19 +:103FF000080721463846179A00F094FA284400EB47 +:10400000080507E04DE029E10DE01AF8010B5A46DA +:1040100017999047B8F10108F7D25B462146384618 +:10402000179A13E142E00A220092C4F302524FF0C1 +:10403000000A022A08D059F804CB032A4FEAEC718F +:104040000AD00DE029E02AE009F1070121F007027A +:10405000F2E802C1914609E00FFA8CFC4FEAEC71DC +:10406000042A03D14FFA8CFC4FEAEC71002907DADD +:104070000A460021DCF1000C61EB02012D2202E076 +:10408000220504D52B228DF80420012203E0E2074B +:1040900001D02022F7E7904659E00A2102E01022E1 +:1040A0000DE010214FF0000A00910BE010224FF0BC +:1040B000000A44F004040827009203E008224FF0AD +:1040C000000A0092C4F30252022A05D059F804CB28 +:1040D0000021032A08D009E009F1070121F00702B5 +:1040E000F2E802C1914605E01FFA8CFC042A01D1D6 +:1040F0000CF0FF0C4FF00008220728D5702806D0DE +:10410000009B83F0100353EA0A0305D00EE040221F +:104110008DF80420012208E05CEA010206D030227A +:104120008DF804208DF8050002229046009B83F054 +:10413000080353EA0A030AD15CEA010201D16207CB +:1041400005D530228DF804204FF001087F1E582835 +:1041500004D034A003900EA802900DE036A0F9E739 +:1041600053466046009AFCF735FA84460398825C11 +:104170000298401E029002705CEA0100F0D10298A1 +:1041800006A9081A00F1200A600702D524F4803439 +:1041900000E00127574502DDA7EB0A0000E0002000 +:1041A00000EB0A01009005984144401A0590E00395 +:1041B00006D45B462146179A059800F0B3F90544EA +:1041C000002706E001A85A46C05D179990476D1C6C +:1041D0007F1C4745F6DBE0030CD55B462146179A6A +:1041E000059800F09FF9054404E030205A461799DD +:1041F00090476D1C0099481E00900029F5DC08E0EE +:10420000029802995A460078491C029117999047E2 +:104210006D1CBAF10001AAF1010AF1DC65E10000B0 +:10422000092801003031323334353637383961628C +:104230006364656600000000303132333435363750 +:1042400038394142434445460000000000F058F927 +:104250000544761C307800287FF4ECAD19B0284670 +:10426000BDE8F08F620700D4062709F1070222F0AB +:10427000070CFCE80223E14603F000485FEA080C63 +:1042800002D00FF2702C0DE05FEA045C02D50FF251 +:10429000682C07E05FEAC47C02D00FF2602C01E0DA +:1042A000AFF2700C4FF0FF3823F00043CDF850C050 +:1042B00065280CD006DC452809D046281DD04728A3 +:1042C0003DD13DE0662818D067287ED138E0002136 +:1042D000112F01DB112000E0781CCDE9000106A9B7 +:1042E0000EA8FFF7DDFCDDE90F010E9A0391002116 +:1042F000009207F1010A04914DE04FF00040009751 +:10430000CDE9011006A90EA8FFF7CAFCDDE90F02EE +:1043100003920E9B11990022DDF80CA000930492E9 +:1043200011B9791C00EB010AB7EB0A0004D4C0F103 +:10433000FF3007F1010A0490AAEB0700019044E066 +:10434000012F00DA01270021112F01DD112000E0EB +:104350003846CDE9000106A90EA8FFF7A1FCDDE96A +:104360000F010E9A0391002104910092BA46210791 +:104370000CD40399514500DA8A46BAF1010F05DDE4 +:10438000009AAAF10101515C302908D0B84202DA42 +:1043900010F1040F06DA0121CDE9011015E0AAF1B0 +:1043A0000101E9E7002805DC049901440491AAEB26 +:1043B000000102E0411C514500DD8A460499401A83 +:1043C000401C01904FF000400290200704D4019857 +:1043D000504501DBCDF8048000208DF84F00029895 +:1043E0000DF14F07B0F1004F25D02B200E90029811 +:1043F0004FF0020800280CDA404202902D200E9067 +:1044000007E00A210298FCF7CFF83031029007F854 +:10441000011DB8F10001A8F10108F2DC02980028A2 +:10442000EFD1791E0E980870307800F0200040F02F +:10443000450007F8020D12A8C01B00F107081498E8 +:10444000007800B1012000EB0A01019801EBE07156 +:1044500005984144401A401E0590E00306D45B468F +:104460002146179A059800F05DF8054414980078E5 +:1044700018B15A46179990476D1CE00324D55B4646 +:104480002146179A059800F04DF805441CE0049861 +:10449000002807DBDDE90301884203DD0098405C6A +:1044A000179901E0179930205A469047049805F172 +:1044B0000105401C04900198401E019004D12E205B +:1044C0005A46179990476D1CBAF10001AAF1010AEA +:1044D000DDDC05E017F8010B5A46179990476D1C73 +:1044E000B8F10001A8F10108F4DC5B462146179AF7 +:1044F0000598ABE62D0000002B0000002000000016 +:104500002DE9F041044600251E461746880404D4D0 +:1045100005E039462020B0476D1C641EF9D52846B9 +:10452000BDE8F0812DE9F041044600251E46904685 +:10453000C80301D5302700E02027880404D505E012 +:1045400041463846B0476D1C641EF9D52846BDE883 +:10455000F0810A68531C0B601070704770B50446F8 +:104560000F4E19E02568A089C00503D4A06808B1E2 +:10457000FFF7F4FFA089C00503D4206908B1716872 +:104580008847A089800503D4206A08B171688847EC +:104590007168204688472C46002CE3D170BD00008E +:1045A0003401002070B50D46846800E024682CB109 +:1045B0002946206A00F04AF80028F7D1204670BD4D +:1045C00010B5064928200968884704461CB12821EF +:1045D0002046FBF7E8FD204610BD00003401002016 +:1045E00000221146AFF300802DE9F04104460D464C +:1045F0009046FFF7E5FF0646134F0020B860C6B1AE +:10460000204601F0E7F80146304600F099FB0446E9 +:104610008CB1B8F1000F13D0204601F0DBF804464E +:10462000207868B13046FFF799FFBC600020BDE8F4 +:10463000F0810020FBE73046FFF790FF0020F6E70F +:1046400005B12C603046F2E73401002070B5044615 +:104650000D46002C01D02DB10AE00DB1012070BD36 +:10466000002070BD012070BD207898B1641C6D1CC5 +:104670002078FBF779FD06462878FBF775FD864222 +:10468000F2D02078FBF770FD04462878FBF76CFD2C +:10469000201A70BD002070BD10B5002821D0114B2C +:1046A0000022001F196803E0814203D80A464968C6 +:1046B0000029F9D152B11368841A9C4204D10068D0 +:1046C00018441060104602E0506000E0186039B1F4 +:1046D00002680B1A934203D10B681A4402604968BE +:1046E000416010BD50010020FCF7CCFAFCF75CFBE8 +:1046F000FCF7E6FAC820FCF7CDFCFCF77BFA4FF498 +:104700007A70FCF7C7FCFEF733FC0F4C40F6B8306C +:104710002082E081A081A083C8206084A084E084FE +:10472000FCF7D0FFFCF7ECFEFCF73CFCFCF7E6FCEA +:10473000FCF742FD207E022803D1FEF7E3F8FDF7E7 +:1047400039FDFDF77FFFEBE7E4050020F0B50B3006 +:10475000154D20F007010024144A0FE003688B4236 +:104760000BD38B4205D95E1A43184768C3E900672B +:1047700000E04368136002C004E0021D10680028D6 +:10478000ECD12046002802D1286808B10020F0BDF5 +:10479000064A07481060074A121A22F00702C0E9C9 +:1047A000002401202860D7E7540100205001002098 +:1047B0009C0C0020981C0020F0B500230D78C45CF0 +:1047C000AC420DD100229E188F5C865DBE4207D19F +:1047D0008E18767816B1521C92B2F4E70120F0BD23 +:1047E0000D2C03D1C21852780A2A02D05B1C9BB24E +:1047F000E5E70020F0BD00002DE9F041074608780C +:10480000234E5B2803D0B1600020BDE8F081052075 +:10481000F860481C00F0DEFF044620785D2811D0C7 +:10482000FFF7CEFE0546B86070B1204600F0D2FF1B +:104830000146284600F084FA00F0CCFF0446200030 +:1048400004D016E0601CE0E70020DEE70020DCE793 +:10485000FFF7B6FEB0B1286045600546601C00F069 +:10486000B9FF0146284600F06BFA00F0B3FF04469A +:1048700054B120782C28EBD020785D2806D0B46085 +:104880000020C2E70020C0E70020BEE7601CBCE7B4 +:10489000340100200178A1F13002092A01D8114623 +:1048A0000AE0A1F14102052A01D8373904E0A1F15B +:1048B0006102052A0AD857390A01401C0178A1F182 +:1048C0003003092B04D8303A11440EE00020704721 +:1048D000A1F14103052B02D8373A114405E0A1F1BB +:1048E0006103052B0BD8573A11440A01401C01788B +:1048F000A1F13003092B04D8303A11440EE0002016 +:104900007047A1F14103052B02D8373A114405E065 +:10491000A1F16103052B0AD8573A114409014078E7 +:10492000A0F13002092A04D8303908447047002029 +:104930007047A0F14102052A02D837390844704770 +:10494000A0F16102052A02D85739084470470020B7 +:10495000704700002DE9F34F85B08A4600242546B4 +:1049600059490020CDE9020100263746834601203F +:1049700001909AF800002D2805D154490020CDE976 +:1049800002010AF1010A9AF80000302801D10AF167 +:10499000010A9AF800003138082817D89AF8000060 +:1049A0003038FBF771FD804689460022484B20468F +:1049B0002946FBF7DBFC42464B46FBF730FC04463E +:1049C0000D461AF8010F30380928E7D99AF8000087 +:1049D0002E2827D19AF80100302823D3392821D84E +:1049E0000AF1010A9AF800003038FBF74DFD8046C5 +:1049F00089460022364B20462946FBF7B7FC424643 +:104A00004B46FBF70CFC04460D4600222E4B30466D +:104A10003946FBF7A5FC06460F461AF8010F303859 +:104A20000928DFD99AF80000652801D045281DD152 +:104A30001AF8010F2B2802D02D2803D010E00AF11C +:104A4000010A0DE04FF0FF3001900AF1010A07E082 +:104A50000BEB8B0100EB410B0AF1010AABF1300BC0 +:104A60009AF80000A0F130010929F1D901980BFB57 +:104A700000F0FBF709FD32463B46FBF7D0FB024650 +:104A80000B460020124900F0B9F906460F46DDE951 +:104A9000020122462B46FBF769FC32463B46FBF7F8 +:104AA00065FC04460D460598C0E9064520462946A2 +:104AB000FBF7FBFC0599486105980321C16007B02D +:104AC0005046BDE8F08F00000000F03F0000F0BF4E +:104AD000000024402DE9F04107460878384E7B2835 +:104AE00003D0B1600020BDE8F0810620F860481CCA +:104AF00000F070FE054628787D2818D0FFF760FD8D +:104B00000446B860A8B1284600F064FE014620467D +:104B100000F058F800F05EFE68B1216921620027BC +:104B2000276101783A2908D0B0600020DBE7681CD3 +:104B3000D9E70020D7E70020D5E7401C00F04AFE67 +:104B40000146204600F0FCF800F044FE054628002F +:104B500028D1C8E7FFF734FDA8B1206044600446BF +:104B6000681C00F037FE0146204600F02BF800F0EC +:104B700031FE50B121692162276101783A2906D0BE +:104B8000B0600020AFE70020ADE70020ABE7401C9D +:104B900000F020FE0146204600F0D2F800F01AFE98 +:104BA000054645B128782C28D4D028787D2804D013 +:104BB000B560002097E7002095E7681C93E70000A8 +:104BC000340100202DE9F04780460D466C1C002082 +:104BD0002A785949222A06D08D60BDE8F087641CE6 +:104BE0005C2A00D1641C2278222A02D00AB1401C1F +:104BF000F5D10968401C88470746380004D0681C76 +:104C00003C464FF480691AE00020E6E75C2903D0B7 +:104C100004F8011B401C12E0461C3078722825D095 +:104C200006DC622816D0662818D06E2804D119E058 +:104C300074281FD0752821D004F8010B701C01784E +:104C4000222901D00029E1D10021217001782229F7 +:104C50006AD06AE0082004F8010BEFE70C2004F8A2 +:104C6000010BEBE70A2004F8010BE7E70D2004F83D +:104C7000010BE3E7092004F8010BDFE7701CFFF7E5 +:104C800009FE0546361DA5F55C404845D6D3002DE6 +:104C9000D4D0A5F55840484513D270785C28CDD1C2 +:104CA000B0787528CAD1F01CFFF7F4FDB61DA0F549 +:104CB0005C414945C2D2C5F3090161F39F2000F56B +:104CC00080350421802D01D2012108E0B5F5006F67 +:104CD00001D2022103E0B5F5803F00D20321601824 +:104CE00001291AD0022911D0032908D0042919D189 +:104CF00005F0BF0242F0800200F8012DAD0905F079 +:104D0000BF0242F0800200F8012DAD0905F0BF029C +:104D100042F0800200F8012DAD09084A525C2A4396 +:104D200000F8012D441889E7401CC8F810700421D0 +:104D3000C8F80C1051E7000034010020D0660008CC +:104D400070B505460C46002C20D0042224A1204634 +:104D5000FBF756FAE0B1052223A12046FBF750FAF3 +:104D6000D0B1042222A12046FBF74AFAC0B1207834 +:104D700022281AD02D2803D0A0F1300109291AD8F1 +:104D800021462846BDE87040FFF7E4BD002070BD15 +:104D90000220E860201D70BD0020E860601D70BD2D +:104DA0000120E8606861201D70BD21462846BDE8ED +:104DB0007040FFF707BF5B2805D07B2809D00E485D +:104DC0008460002070BD21462846BDE87040FFF792 +:104DD00013BD21462846BDE87040FFF77BBE0000AA +:104DE0006E756C6C0000000066616C7365000000FD +:104DF0007472756500000000340100202DE9F04D4B +:104E00001D460C4698B0174621F0004123F00043A0 +:104E1000002814BF4FF0010C4FF0000C0CEB440CB9 +:104E2000FE4A0CEB02064FEA620C66452BD33E00AD +:104E300018BF012606EB45061644F94A964222D3CE +:104E4000F84A53EA070C02D0944205D148B918B089 +:104E500000201146BDE8F08D002808BF4FF0000C7F +:104E600001D04FF0010C0CEB440212F5001F0AD8E0 +:104E7000002F14BF4FF0010C4FF0000C0CEB45025B +:104E800012F5001F07D918B03A462B462146BDE857 +:104E9000F04DFEF7D7BE0022DFF88CA3002CB8BF80 +:104EA000534526DADFF884C36345A8BF022220DA1F +:104EB000DFF870C39C451CDCDFF874C30CEB235C8B +:104EC000BCF1140F08DDCCF1340627FA06FC0CFA0D +:104ED00006F6BE420DD108E05FB9CCF1140623FA04 +:104EE00006FC0CFA06F69E4203D10CF00102C2F158 +:104EF000020251EA000C19D1002D17DA002C18BF5C +:104F0000022A01D0012A07D00220FEF7C3FE18B002 +:104F1000BDE8F04DFEF78EBE0220FEF7BBFEFEF7A9 +:104F200089FE18B081F00041BDE8F08DB7F1000CAA +:104F30006CD1534525D104F1804212F5801201BF96 +:104F400000280020B74918B008BFBDE8F08DB5486B +:104F5000884207DC002DA1BF6046294618B0BDE895 +:104F6000F08D07E0281E05DA80F0004118B0604699 +:104F7000BDE8F08DAF497944D1E9000118B0BDE832 +:104F8000F08DDFF8A0C2634525D1002D1FDA19B1DD +:104F9000514512D1D8B909E0002840F0EC82A24A6C +:104FA000214618B062F31E01BDE8F08D00202146B5 +:104FB00018B060F31E01BDE8F08D08DA18B0234682 +:104FC000BDE8F04D024600206146FBF7F9BB18B082 +:104FD0002146BDE8F08D514518DAB5F1804F0DD06E +:104FE000A5F1005CBCF1FF5C10D1B4F1000C0DDB4D +:104FF00018B06146BDE8F04D00F0F6BB234618B08E +:105000000246BDE8F04D1946FBF7B0B9060024F0A2 +:10501000004C3BD1D9B1514533D1002C06DD002DD8 +:10502000A1BF0020514618B0BDE8F08D002C01DD75 +:10503000002D1BDB002C13DA002D11DB012A4FF0B1 +:10504000000014BF78497C4918B0BDE8F08D022AF1 +:1050500018BF002C0AD0012A08D1002C06DA0AE079 +:10506000002CB8BF002D11DA012A04D0002018B09E +:105070000146BDE8F08D18B000204FF00041BDE8BA +:10508000F08DA1F14050B0F17F601AD0012000EB0B +:10509000E47050EA020421D0624C521E4FF0000B23 +:1050A000104304BF4FF0000B644C654883427CDD25 +:1050B000644A654893421FDD884217DB002D25DBDB +:1050C00037E0002C00DA4AB1022A0CBF01204FF071 +:1050D000FF3018B0BDE8F04DFBF7D6B90120FEF760 +:1050E000D9FD18B0BDE8F04DFEF7AEBD4D4A8A427D +:1050F00002DC002D0ADC1CE0814202DA002D18DA05 +:1051000004E0484B994220DD002D12DD0220FEF71D +:10511000C1FDFEF79FFD05460E4600225346584648 +:105120002146FBF723F918B066F31E012846BDE8B7 +:10513000F08D0220FEF7AEFDFEF794FD0A462146F3 +:1051400018B062F31E01BDE8F08D002230466146C2 +:10515000FBF706F980460E466FF00102FBF778F97F +:105160004FF05532394BFBF7FEF842463346FBF71A +:10517000FDF80022364BFBF7F6F8824642463346EE +:10518000049110461946FBF7F1F85246049BFBF7D1 +:10519000EDF88A4600904FF0C0422E4B4046314613 +:1051A000FBF7E4F82C4A2B4B00E027E0CDE90601A1 +:1051B00051460098FBF7DAF882460191274A284BBE +:1051C00040463146FBF7D2F85246019BFBF7C8F840 +:1051D00082460B4602460591DDE90601FBF71FF802 +:1051E000DDE90623002688463046FBF7B9F852462B +:1051F000059BFBF7B8F8024600F07EB90020B1F538 +:10520000801F07DA352230466146FBF721F9064652 +:105210006FF0340000EB215024E00000FFFF1F007E +:10522000FFFF0F000000F03F0000F07F0000404350 +:1052300001FCFFFFE61700000000F0FF0000F0BFD8 +:105240000000E0410000F043FFFFEF3F5555D53F20 +:105250000000E03F4715F73FFE822B6544DF5DF815 +:105260000BAE543EA0F2FF300190C1F3130040F0AA +:105270007F6141F040510291FE498842D8BF002031 +:1052800004DDFD498142C8BF012001DD0D9008E029 +:1052900000200D900198401C01900298A0F580100C +:1052A00002900299F54878440B910D9900EBC100EA +:1052B000D0E900230F9330460A920B99FBF750F880 +:1052C000CDE90601DDE90A2130460F9BFAF7A7FF79 +:1052D00002460B460020EA49FBF772FA05910246A6 +:1052E0000B460090DDE90601FBF740F81490E54815 +:1052F0008A464FF0000878440299006812904FF0F7 +:10530000005040EA61010D980F9B01EB804000F5D1 +:10531000002109910A9A1298FBF722F832460B9B5A +:10532000FBF721F842465346FBF720F80646029168 +:1053300040465146099B129AFBF718F8DDE906230F +:10534000FBF711F83246029BFBF70AF8059B009A1F +:10535000FBF70CF80091149A049053461046194636 +:10536000FBF704F806460246C7480B4602910621A1 +:105370007844FEF709FCCDE90510029B3246104641 +:105380001946FAF7F3FFDDE90532FAF7EFFF059169 +:105390000646534640461946149AFAF740FF009BCA +:1053A000049AFAF7E3FF3246059BFAF738FFCDE996 +:1053B00005104246534610461946FAF7D7FF002219 +:1053C000B24B02910A90FAF72AFFDDE90532FAF7AB +:1053D00026FF0E464246AD4B4046FAF7C1FF029B00 +:1053E0000A9AFAF7BDFFDDE90532FAF7BCFF42463B +:1053F00002910A90334610465146FAF7B7FFCDE9BD +:1054000006015346149A02990A98FAF7AFFF8A46A2 +:1054100002903346424600990498FAF7A7FF534694 +:10542000029AFAF7FCFE82460B4602460591DDE938 +:105430000601FAF7F4FEDDE9062300208846064659 +:10544000FAF78EFF5246059BFAF78DFF82460991C7 +:105450004FF060428E4B30464146FAF787FF04908A +:1054600006918C4A8A4B50460999FAF77FFF82468B +:105470000291894A894B30464146FAF777FF5246F6 +:10548000029BFAF7CCFE864B7B440D9A03EBC203DA +:10549000D3E90023FAF7C3FE0E9007910198FAF7BB +:1054A000F3FF0591DDE9061382460E9A0498FAF798 +:1054B000B6FE7C4A7A440D9B02EBC303D3E900237A +:1054C00000930292FAF7ABFE5246059BFAF7A7FE4D +:1054D0000026884652463046059BFAF741FF009B5E +:1054E000029AFAF73DFF069B049AFAF739FF079BE9 +:1054F0000E9AFAF738FF024600200B460290384613 +:105500002946FAF733FF824601912B463846194661 +:10551000029AFAF725FF32464346FAF727FF52462A +:10552000019BFAF77CFE07468A46324643462946E7 +:105530000298FAF71BFF05460E463A465346FAF71D +:105540006EFE594A8846914221DBA8EB020353EADA +:10555000000210D12A463346FAF702FFCDE90401D2 +:10556000524A534B38465146FAF759FEDDE90423B7 +:10557000FAF7E6FF21D20220FEF78CFBFEF76AFB6A +:105580000A46214618B062F31E01BDE8F08D494B72 +:1055900028F000429A4210D3474A08EB020353EA2C +:1055A00000027FF4C6AD2A463346FAF7D9FE3A46E2 +:1055B0005346FAF7C5FF7FF6BCAD0022019228F0F2 +:1055C00000403E493E4A01EB2051824223DA481C0A +:1055D0004FF4801121FA00F040443A4AC0F30A51D6 +:1055E0007A44394BA1F2FF31CB4020EA0303C0F3E8 +:1055F000130040F48010C1F11401C84012680190FA +:10560000B8F1000FBCBF4042019028463146FAF77E +:10561000A7FE05460E462A46334638465146FAF757 +:10562000FEFD4FF000084246284B40460591FAF730 +:105630009DFECDE90601264A264B40460599FAF71C +:1056400095FE009102902A46334640460599FAF7A6 +:1056500087FE3A465346FAF786FE1F4A1F4BFAF773 +:1056600085FE009B029AFAF7DAFD07468846024655 +:105670000B4635E08E9803007AB60B002E1400001E +:105680000000F03F66140000941300000000084082 +:1056900009C7EE3FFD033ADCF5015B14E02F3EBE87 +:1056A0006C1200003012000000009040FE822B655A +:1056B0004715973C00CC904000346F3F01FCFFFF42 +:1056C0000000E03F7C110000FFFF0F00432EE63F8B +:1056D000396CA80C615C20BEEF39FAFE422EE63F21 +:1056E000DDE90601FAF79BFDDDE9062305460E46D6 +:1056F000FAF736FE3A464346FAF735FE0F462A4693 +:105700003346009010461946FAF730FE82460246AC +:105710002E4888460B4605217844FEF735FA524656 +:105720004346FAF723FE2A463346FAF71CFE804624 +:105730008A463B4628463146009AFAF717FE3B4612 +:10574000009AFAF76CFD0691009000224FF080431A +:1057500040465146FAF704FE0F460C904246534627 +:1057600028463146FAF702FE3B460C9AFBF728F82A +:10577000069B009AFAF7F4FD2A463346FAF7F0FD45 +:105780000022134BFAF7EFFD054601980E4601EB98 +:1057900000510815002810DC28463146019AFAF716 +:1057A00057FEFEF7DDF9042808BFFEF75BFA28462E +:1057B0003146019AFAF74CFE05460B4618B02A46C8 +:1057C00058462146BDE8F04DFAF7D0BD1C10000048 +:1057D0000000F03F00E0401C002804D001780029C0 +:1057E00001D02029F7D970472DE9F04106460F4630 +:1057F000FBF780F8041E0D4618BF0120284320F057 +:105800000040C0F17F6000F1E040C00F0ED0301CBE +:1058100018BF0120384320F00040C0F17F6000F144 +:10582000E040C00F04BF0120FEF734FA20462946AD +:10583000BDE8F08100000000000000000000000052 +:10584000000000003F4000000000000000003000A9 +:10585000400030004000000009000BC03D000BC0BC +:105860003D00090018C024407FE022403180000044 +:10587000180024C01B000D803240018003801C40B2 +:1058800027401C800740004010006000000000001E +:10589000000000000000000000001F8020404020A9 +:1058A0000000402020401F8000000000090006008A +:1058B0001F80060009000000040004003F8004006F +:1058C0000400000000100060000000000000000064 +:1058D0000400040004000400040000000000004074 +:1058E0000000000000000000002001C00600380099 +:1058F000400000001F802040204020401F8000000A +:10590000000010403FC000400000000018C02140CF +:1059100022402440184000001080204024402440B1 +:105920001B80000002000D0011003FC0014000007C +:105930003C80244024402440238000001F802440D9 +:1059400024403440038000003000200027C038008D +:10595000200000001B802440244024401B800000C5 +:105960001C0022C0224022401F80000000000000D6 +:10597000084000000000000000000000046000007B +:1059800000000000000004000A00110020804040D8 +:10599000090009000900090009000000000040405A +:1059A000208011000A000400180020002340240079 +:1059B000180000001F802040274029401F400000A1 +:1059C000004007C039000F0001C0004020403FC028 +:1059D000244024401B8000001F80204020402040A5 +:1059E0003080000020403FC0204020401F80000049 +:1059F00020403FC024402E4030C0000020403FC027 +:105A000024402E00300000000F0010802040224073 +:105A10003380020020403FC0040004003FC020400B +:105A2000204020403FC02040204000000060202057 +:105A300020203FC02000200020403FC024400B0019 +:105A400030C0204020403FC020400040004000C007 +:105A50003FC03C0003C03C003FC0000020403FC0AE +:105A60000C4023003FC020001F80204020402040E9 +:105A70001F80000020403FC0244024001800000088 +:105A80001F802140214020E01FA0000020403FC097 +:105A90002440260019C0004018C024402440224061 +:105AA00031800000300020403FC020403000000026 +:105AB00020003F80004000403F80200020003E004A +:105AC00001C0070038002000380007C03C0007C0B4 +:105AD00038000000204039C0060039C020400000D6 +:105AE0002000384007C0384020000000304021C06E +:105AF0002640384020C00000000000007FE0402029 +:105B000040200000000070000C00038000400000F6 +:105B10000000402040207FE0000000000000200046 +:105B200040002000000000000010001000100010D5 +:105B30000010001000000000400000000000000005 +:105B4000000002800540054003C0004020003FC027 +:105B5000044004400380000000000380044004402F +:105B60000640000000000380044024403FC0004085 +:105B70000000038005400540034000000000044091 +:105B80001FC0244024402000000002E005500550C2 +:105B90000650042020403FC00440040003C00040E1 +:105BA0000000044027C0004000000000001000106A +:105BB000041027E00000000020403FC00140070023 +:105BC00004C00440204020403FC00040004000008E +:105BD00007C0040007C0040003C00000044007C061 +:105BE0000440040003C0004000000380044004405F +:105BF00003800000041007F00450044003800000FC +:105C0000000003800440045007F00010044007C067 +:105C1000024004000400000000000640054005406A +:105C200004C00000000004001F8004400040000089 +:105C3000040007800040044007C000400400070043 +:105C400004C0018006000400060001C0070001C076 +:105C500006000000044006C0010006C00440000029 +:105C60000410071004E00180060004000000044056 +:105C700005C00640044000000000000004007BE076 +:105C800040200000000000000000FFF000000000C5 +:105C9000000040207BE00400000000004000800085 +:105CA0004000200020004000000000000000000034 +:105CB00000000000000000000000000000001FCCF9 +:105CC000000C000000000000000008003000600030 +:105CD0000800300060000000022003FC1E200220AB +:105CE00003FC1E200220000000000E1811043FFFDC +:105CF00010840C78000000000F0010840F3800C0E2 +:105D0000077818840078000000780F8410C41124EC +:105D10000E9800E40084000808006800700000008D +:105D2000000000000000000000000000000007E08C +:105D30001818200440020000000040022004181837 +:105D400007E00000000000000240024001800FF068 +:105D500001800240024000000080008000800FF8B7 +:105D600000800080008000000001000D000E000097 +:105D700000000000000000000000008000800080A3 +:105D800000800080008000800000000C000C0000FB +:105D90000000000000000000000000060018006085 +:105DA0000180060018002000000007F00808100419 +:105DB0001004080807F000000000080408041FFC95 +:105DC000000400040000000000000E0C1014102459 +:105DD000104411840E0C000000000C181004110473 +:105DE000110412880C700000000000E0032004245D +:105DF00008241FFC0024000000001F9810841104D8 +:105E00001104108810700000000007F008881104C9 +:105E1000110418880070000000001C00100010FC25 +:105E200013001C001000000000000E381144108404 +:105E3000108411440E38000000000700088C104444 +:105E40001044088807F00000000000000000030C68 +:105E5000030C00000000000000000000000101062B +:105E6000000000000000000000000080014002204F +:105E70000410080810040000022002200220022062 +:105E80000220022002200000000010040808041074 +:105E9000022001400080000000000E001200100CE3 +:105EA000106C10800F00000003E00C1813E41424A1 +:105EB00017C4082807D000000004003C03C41C409D +:105EC000074000E4001C000410041FFC110411042E +:105ED00011040E880070000003E00C181004100478 +:105EE000100410081C10000010041FFC1004100403 +:105EF0001004080807F0000010041FFC110411042E +:105F000017C410040818000010041FFC110411002D +:105F100017C010000800000003E00C181004100463 +:105F200010441C780040000010041FFC1084008006 +:105F3000008010841FFC10040000100410041FFCDB +:105F40001004100400000000000300011001100103 +:105F50001FFE10001000000010041FFC110403803D +:105F60001464181C1004000010041FFC100400042A +:105F700000040004000C000010041FFC1F0000FCC3 +:105F80001F001FFC1004000010041FFC0C04030081 +:105F900000E010181FFC100007F00808100410049F +:105FA0001004080807F0000010041FFC1084108083 +:105FB000108010800F00000007F008181024102433 +:105FC000101C080A07F2000010041FFC1104110045 +:105FD00011C011300E0C000400000E1C11041084BE +:105FE000108410441C3800001800100010041FFC1E +:105FF000100410001800000010001FF81004000426 +:10600000000410041FF8100010001E0011E0001C16 +:10601000007013801C0010001FC0103C00E01F0027 +:1060200000E0103C1FC000001004180C163401C022 +:1060300001C01634180C100410001C00130400FCDE +:1060400013041C00100000000804101C10641084CD +:1060500013041C04101800000000000000007FFE64 +:106060004002400240020000000030000C000380AB +:106070000060001C000300000000400240024002DB +:106080007FFE000000000000000000002000400033 +:10609000400040002000000000010001000100015C +:1060A000000100010001000100004000400020004C +:1060B00000000000000000000000009801240144DE +:1060C0000144014400FC000410001FFC008801048E +:1060D00001040088007000000000007000880104C6 +:1060E0000104010400880000000000700088010421 +:1060F000010411081FFC0004000000F801440144E1 +:106100000144014400C800000000010401040FFC28 +:106110001104110411001800000000D60129012902 +:10612000012901C90106000010041FFC00840100C0 +:106130000100010400FC000400000104190419FC22 +:106140000004000400000000000000030001010141 +:10615000190119FE0000000010041FFC002400407B +:1061600001B4010C010400000000100410041FFC25 +:106170000004000400000000010401FC010401000F +:1061800001FC0104010000FC010401FC0084010089 +:106190000100010400FC0004000000F801040104F7 +:1061A0000104010400F80000010101FF0085010461 +:1061B00001040088007000000000007000880104E5 +:1061C0000104010501FF00010104010401FC008438 +:1061D0000104010001800000000000CC0124012422 +:1061E000012401240198000000000100010007F8CB +:1061F0000104010400000000010001F80004000493 +:106200000004010801FC0004010001800170000C81 +:10621000001001600180010001F0010C003001C09C +:106220000030010C01F0010000000104018C007439 +:106230000170018C01040000010101810171000E57 +:10624000001801600180010000000184010C01348C +:1062500001440184010C0000000000000000000067 +:1062600001003EFC4002400200000000000000006F +:10627000FFFF0000000000000000400240023EFC62 +:1062800001000000000000000000600080008000AD +:1062900040004000200020000000000FFFF80FFF2A +:1062A000F80C0C000C0C000C0C00040C00060C008C +:1062B000061C0003F80001F0000000000000000FC1 +:1062C000FFF80FFFF80FF00000FF800007F800074D +:1062D000F801FF000FE0000FFFF80FFFF8000000CB +:1062E0000000000180100780700600F00C01D00C47 +:1062F00003900C07100E1C1007F81003E0100000AC +:10630000100000000000000000000000380000380D +:10631000000000000000000000000000000000007D +:1063200000000000000000000000800038E007F8D6 +:106330007007B010042018042018043018043030FE +:10634000043CF0041FE00003000000000000000017 +:10635000000003FC0000003FFFC000007FFFF000D2 +:1063600000FC01F80001E000780003C0001C0003FD +:1063700080001C000300000E000300000E000380DC +:10638000001C0003C0003C0001F000780000FFFF8B +:10639000F000007FFFE000000FFF000000000000A1 +:1063A00000000000000000000000000000000000ED +:1063B0000000000000001C000000001800000000A9 +:1063C00038000000007000000000E000000001FF45 +:1063D000FFFC0003FFFFFC0003FFFFFC00000000C8 +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000100000000070001C0000F0 +:10641000F8003C0001E0007C0003C000FC000380A9 +:1064200001EC00038003CC0003800F0C0003801EEE +:106430000C0003803C0C000380F80C0001E7E00C2A +:106440000001FFC00C0000FF000C000018000C0051 +:10645000000000000000000000000000000000003C +:1064600000008000003000E000007000F00001F04B +:1064700000780001C0003C000380001C0003806025 +:106480000C000300E00C000300E00C000380E01CA3 +:10649000000381F01C0001E7B8780001FF3FF8001D +:1064A00000FE1FF000001807C00000000000000000 +:1064B00000000000000003800000000780000000D2 +:1064C0001F800000003F800000007B80000001E38F +:1064D00080000003C38000000F838000001E038043 +:1064E00000007C03800000F003800003FFFFFC003D +:1064F00003FFFFFC0003FFFFFC000000038000001F +:106500000003800000000380000000000000000085 +:10651000000000000020E0000007E0F00000FFE0C5 +:10652000780003FFC01C0003F1801C000383800E71 +:10653000000383800E000383800E000383800C0021 +:106540000383801C000381C03C000381E0780003CA +:1065500080FFF80003807FE00000001F8000000043 +:106560000000000000000000000000000000000724 +:10657000000000003FE0000000FFF0000003F8F81A +:10658000000007E03C00001FC01C00003F800C0022 +:1065900000F9800E0001F1800E0003C1800E00039F +:1065A00001C00C000201C01C000000E07C000000E3 +:1065B000FFF80000007FF00000001FC00000000096 +:1065C0000000000000000000000000000380000048 +:1065D00000038000000003800000000380001C0016 +:1065E000038000FC00038007FC0003801FE0000321 +:1065F000807F00000381F800000387E00000039F14 +:1066000000000003FC00000003F000000003E000B5 +:1066100000000380000000000000000000000000F7 +:1066200000000007E000007E1FF00000FFBFF80040 +:1066300001E7F83C000381F01C000380E00C00033C +:1066400080E00E000300E00E000380E00E000380F7 +:10665000E00C000381F01C0001E7B83C0000FF3FA4 +:10666000F800007E1FF00000000FE00000000000B6 +:106670000000000000000000000000003FC000001B +:10668000007FE0000000FFF0000001E07800000360 +:10669000C03806000380181E000380187E000380A7 +:1066A00019F80003801FE00003803FC00003C07F93 +:1066B000000001E1FC000000FFF00000007FC000CE +:1066C00000003F000000000000000000000000008B +:1066D0000000C0E0F0F8FC00000000000000F03F07 +:1066E000000000000000F83F000000000000000073 +:1066F0000000004003B8E23F00000000000000007E +:1067000006D0CF43EBFD4C3E033333333333E33F0B +:10671000FFAB6FDBB66DDB3F4D268F515555D53F37 +:1067200001411DA96074D13F65DBC9934A86CD3F05 +:10673000EF4E454A287ECA3F3E5555555555C53FF3 +:1067400093BDBE166CC166BF2CDE25AF6A56113FE5 +:10675000F16BD2C541BDBBBED0A4BE726937663EE7 +:106760000000000000000000886700080000002012 +:106770005C01000096090008F86700085C01002031 +:106780003C1F0000843C00081184A24A04680D01EB +:10679000020304060708090204060810691401141C +:1067A0006939A35B07D008434D43432D4C491F3043 +:1067B000393234313302936C69800D3130362E31E9 +:1067C000322E392E323133800D4538444238343937 +:1067D000333332393905607573657205107465732A +:1067E00074071231323334353623FFFF134D47140B +:0867F00008994662080219C86D :0400000508000131BD :00000001FF diff --git a/firmware/stm32-esp/project/pro.uvgui.LS-PC b/firmware/stm32-esp/project/pro.uvgui.LS-PC index 1bea18d0..19d00cfa 100644 --- a/firmware/stm32-esp/project/pro.uvgui.LS-PC +++ b/firmware/stm32-esp/project/pro.uvgui.LS-PC @@ -11,17 +11,17 @@ 38003 Registers - 140 100 + 140 130 346 Code Coverage - 890 100 + 1008 160 204 Performance Analyzer - 1168 175 175 100 + 1168 @@ -86,8 +86,8 @@ 44 - 0 - 1 + 2 + 3 -1 -1 @@ -97,17 +97,17 @@ -1 - 72 - -258 - 1676 - 1174 + 0 + 195 + 1965 + 1032 0 - 563 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000400000001000000010000003A433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832385C757365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF43433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832385C757365725C73686F775C706D5F75617274332E63000000000A706D5F75617274332E6300000000FFDC7800FFFFFFFF49433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832385C757365725C73686F775C73696D756C6174696F6E5F6C63642E63000000001073696D756C6174696F6E5F6C63642E6300000000BECEA100FFFFFFFF49433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832385C757365725C73686F775C73696D756C6174696F6E5F6C63642E68000000001073696D756C6174696F6E5F6C63642E6800000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000021FFFFFFC00000008306000059040000 + 424 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000200000001000000010000005E433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930345C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C6D7174745C6D7174742E6300000000066D7174742E6300000000C5D4F200FFFFFFFF66433A5C55736572735C4C532D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930345C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C73686F775C657370383236365F776F726B2E63000000000E657370383236365F776F726B2E6300000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001A0000006F00000080070000D2030000 @@ -126,11 +126,11 @@ 0 16 - 000000005300000049010000AC030000 + F4000000530000008E050000DF000000 16 - 000000006F00000049010000D2030000 + F40000006F0000008E050000FB000000 @@ -146,7 +146,7 @@ 0 16 - C8FEFFFF530000000B000000AC030000 + EFFEFFFF530000001A000000B6030000 16 @@ -166,7 +166,7 @@ 0 16 - D7FEFFFF530000001A000000AC030000 + EFFEFFFF530000001A000000B6030000 16 @@ -446,7 +446,7 @@ 0 16 - D7FEFFFF530000001A000000AC030000 + EFFEFFFF530000001A000000B6030000 16 @@ -466,7 +466,7 @@ 0 16 - D7FEFFFF530000001A000000AC030000 + EFFEFFFF530000001A000000B6030000 16 @@ -486,7 +486,7 @@ 0 16 - 00000000BB0300008007000086040000 + 00000000B60300008007000081040000 16 @@ -526,7 +526,7 @@ 0 16 - 00000000CF0300008007000049050000 + 00000000B60300008007000030050000 16 @@ -1706,7 +1706,7 @@ 2 16 - 030000001C000000DA03000038000000 + 000000001C000000D703000038000000 16 @@ -1726,7 +1726,7 @@ 0 16 - 00000000070400007C07000020040000 + 00000000D103000080070000EA030000 16 @@ -1746,7 +1746,7 @@ 0 16 - 0700000000000000F00100001C000000 + 0800000000000000F10100001C000000 16 @@ -1795,14 +1795,14 @@ 3355 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF0000008E050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006F0000008E050000FB000000F4000000530000008E050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9A040000530000009E04000015020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000009E0400006F0000008E050000310200009E040000530000008E0500001502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFF120100005300000016010000B603000000000000020000000400000001000000B8FEFFFF2D060000FFFFFFFF010000007394000001800010000000000000000000006F00000012010000D2030000000000005300000012010000B603000000000000404100460100000009526567697374657273000000007394000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF7394000001000000FFFFFFFF73940000000000000080000000000000FFFFFFFFFFFFFFFF00000000F80100008E050000FC01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000180200008E050000C102000000000000FC0100008E050000A502000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC7020000FC010000CB020000A502000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF1A0000001102000028060000150200000000000001000000040000000100000002FDFFFF8A000000FFFFFFFF03000000B4010000D2010000CF010000018000800000000000001A0000003102000028060000C80300001A0000001502000028060000AC0300000000000040820046030000000A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFB401000001000000FFFFFFFFB40100000000000007000000C7000000008000000100000007FFFFFF3C04000087060000B605000001000000010000000100000077940000008000000100000007FFFFFF23040000870600009D050000010000000100000001000000C5000000008000000100000007FFFFFF2804000087060000F3040000010000000100000001000000ED0300000010000001000000CFFDFFFFC000000012FFFFFF190400000100000000000000010000006D0000000010000001000000DEFDFFFFC000000021FFFFFF19040000000000000000000000000000C30000000010000001000000DEFDFFFFC000000021FFFFFF19040000000000000000000000000000C40000000010000001000000DEFDFFFFC000000021FFFFFF1904000000000000010000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF0000008E050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006F0000008E050000FB000000F4000000530000008E050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9A040000530000009E04000015020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000009E0400006F0000008E050000310200009E040000530000008E0500001502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFF120100005300000016010000B603000000000000020000000400000001000000B8FEFFFF2D060000FFFFFFFF010000007394000001800010000000000000000000006F00000012010000D2030000000000005300000012010000B603000000000000404100460100000009526567697374657273000000007394000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF7394000001000000FFFFFFFF73940000000000000080000000000000FFFFFFFFFFFFFFFF00000000F80100008E050000FC01000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000180200008E050000C102000000000000FC0100008E050000A502000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC7020000FC010000CB020000A502000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF1A0000001102000028060000150200000000000001000000040000000100000002FDFFFF8A000000FFFFFFFF03000000B4010000D2010000CF010000018000800000000000001A0000003102000028060000C80300001A0000001502000028060000AC0300000000000040820046030000000A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFB401000001000000FFFFFFFFB4010000000000000700000077940000008000000100000000000000D2030000800700004C050000010000000100000001000000C5000000008000000100000000000000D2030000800700009D040000010000000100000001000000C7000000008000000100000000000000D2030000800700004C050000010000000100000001000000ED0300000010000001000000EFFEFFFF6F0000001A000000D20300000100000000000000010000006D0000000010000001000000EFFEFFFF6F0000001A000000D2030000000000000000000000000000C30000000010000001000000EFFEFFFF6F0000001A000000D2030000000000000000000000000000C40000000010000001000000EFFEFFFF6F0000001A000000D203000000000000010000000000000000000000 59392 File - 2870 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000844656275674C6F67960000000000000012001153696D4C43445F53686F775F504D325F350844656275674C6F6709506F7765725F4C43440A4553505F4170496E69740B53797344656275674C6F670A307830303130304333340D4164634D736B436C6B44697631135379736374726C5F47657448436C6B4672657104426175640E44444C5F4D43555F5345524945530A53595354454D5F5854480C484333324C30377850787878144E5649435F436C65617250656E64696E674952510B54696D335F4D305F52756E1454696D335F4D6F6465305F456E61626C654972711154696D335F436C656172496E74466C61671054696D335F4D305F436E7431365365740E54696D335F4D305F415252536574000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65CC030000 + 2860 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001153696D4C43445F53686F775F504D325F35960000000000000011001153696D4C43445F53686F775F504D325F350844656275674C6F6709506F7765725F4C43440A4553505F4170496E69740B53797344656275674C6F670A307830303130304333340D4164634D736B436C6B44697631135379736374726C5F47657448436C6B4672657104426175640E44444C5F4D43555F5345524945530A53595354454D5F5854480C484333324C30377850787878144E5649435F436C65617250656E64696E674952510B54696D335F4D305F52756E1454696D335F4D6F6465305F456E61626C654972711154696D335F436C656172496E74466C61671054696D335F4D305F436E7431365365740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65CC030000 1423 @@ -1818,7 +1818,7 @@ Build 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000370726F960000000000000001000370726F000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DE010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000370726F960000000000000001000370726F000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DE010000 583 @@ -1834,7 +1834,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 898 @@ -1863,15 +1863,15 @@ 0 32767 0 - 32768 + 4096 0 16 - CD0300005300000080070000B6030000 + 6E0400005300000080070000B6030000 16 - 3701000010020000DC0700007A030000 + 6E0400006F00000080070000D2030000 @@ -1887,7 +1887,7 @@ 0 16 - 76FFFFFF530000001A000000D1030000 + 94FEFFFF530000001A000000D1030000 16 @@ -1927,7 +1927,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -1947,7 +1947,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -1967,7 +1967,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -1987,7 +1987,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2047,7 +2047,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2067,7 +2067,7 @@ 0 16 - CD0300007000000080070000B6030000 + 6E0400007000000080070000B6030000 16 @@ -2087,7 +2087,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2107,7 +2107,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2127,7 +2127,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2147,7 +2147,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2167,7 +2167,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2367,7 +2367,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2947,7 +2947,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -2967,7 +2967,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -3507,7 +3507,7 @@ 2 16 - 020000001C0000007F02000038000000 + 080000001C0000008502000038000000 16 @@ -3527,7 +3527,7 @@ 0 16 - D0030000730000006F0A00009E010000 + 71040000730000007D07000097030000 16 @@ -3536,14 +3536,14 @@ 3438 - 000000000C000000000000000040000001000000FFFFFFFFFFFFFFFFC903000053000000CD030000B603000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000FFFF02000B004354616262656450616E6500400000010000003701000010020000DC0700007A030000CD0300005300000080070000B603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000020000000000000FFFFFFFFFFFFFFFFAE000000B300000092040000B7000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000AE0000006B00000092040000CF000000AE0000004F00000092040000B30000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF430300004F000000470300006B010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000470300006B000000F103000087010000470300004F000000F10300006B01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFFAA00000053000000AE00000074020000000000000200000004000000010000000000000000000000FFFFFFFF030000006D000000C3000000C400000001800010000000000000000000006F000000AA000000900200000000000053000000AA0000007402000000000000404100460300000005426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF6D00000001000000FFFFFFFF6D000000000000000080000000000000FFFFFFFFFFFFFFFF1A00000048020000800700004C0200000000000001000010040000000100000044FEFFFF9201000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFF480300003E0300004C030000B303000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF1A0000005F030000C405000063030000000000000100000004000000010000000000000000000000FFFFFFFF05000000C5000000C7000000B4010000D2010000CF010000018000800000000000001A0000007F030000C4050000E30300001A00000063030000C4050000C70300000000000040820046050000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC50000000000000003000000ED030000001000000100000076FFFFFF6F0000001A000000ED03000001000000000000000000000073940000001000000100000076FFFFFF6F0000001A000000ED0300000000000001000000010000007794000000800000010000001A000000D2030000800700001904000001000000010000000100000000000000 + 000000000C000000000000000040000001000000FFFFFFFFFFFFFFFF6A040000530000006E040000B603000001000000020000100400000001000000AEFAFFFF0902000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000FFFF02000B004354616262656450616E6500400000010000006E0400006F00000080070000D20300006E0400005300000080070000B603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000020000000000000FFFFFFFFFFFFFFFFAE000000B300000092040000B7000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000AE0000006B00000092040000CF000000AE0000004F00000092040000B30000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF430300004F000000470300006B010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000470300006B000000F103000087010000470300004F000000F10300006B01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFFAA00000053000000AE00000074020000000000000200000004000000010000000000000000000000FFFFFFFF030000006D000000C3000000C400000001800010000000000000000000006F000000AA000000900200000000000053000000AA0000007402000000000000404100460300000005426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF6D00000001000000FFFFFFFF6D000000000000000080000000000000FFFFFFFFFFFFFFFF1A00000048020000800700004C0200000000000001000000040000000100000044FEFFFF9201000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFF480300003E0300004C030000B303000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF1A0000005F030000C405000063030000000000000100000004000000010000000000000000000000FFFFFFFF05000000C5000000C7000000B4010000D2010000CF010000018000800000000000001A0000007F030000C4050000E30300001A00000063030000C4050000C70300000000000040820046050000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC50000000000000003000000ED030000001000000100000094FEFFFF6F0000001A000000ED03000001000000000000000100000073940000001000000100000076FFFFFF6F0000001A000000ED0300000000000001000000000000007794000000800000010000001A000000D2030000800700001904000001000000010000000100000000000000 59392 File - 2848 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000844656275674C6F67960000000000000011000844656275674C6F6709506F7765725F4C43440A4553505F4170496E69740B53797344656275674C6F670A307830303130304333340D4164634D736B436C6B44697631135379736374726C5F47657448436C6B4672657104426175640E44444C5F4D43555F5345524945530A53595354454D5F5854480C484333324C30377850787878144E5649435F436C65617250656E64696E674952510B54696D335F4D305F52756E1454696D335F4D6F6465305F456E61626C654972711154696D335F436C656172496E74466C61671054696D335F4D305F436E7431365365740E54696D335F4D305F4152525365740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6559010000 + 2860 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001153696D4C43445F53686F775F504D325F35960000000000000011001153696D4C43445F53686F775F504D325F350844656275674C6F6709506F7765725F4C43440A4553505F4170496E69740B53797344656275674C6F670A307830303130304333340D4164634D736B436C6B44697631135379736374726C5F47657448436C6B4672657104426175640E44444C5F4D43555F5345524945530A53595354454D5F5854480C484333324C30377850787878144E5649435F436C65617250656E64696E674952510B54696D335F4D305F52756E1454696D335F4D6F6465305F456E61626C654972711154696D335F436C656172496E74466C61671054696D335F4D305F436E7431365365740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C6559010000 1423 @@ -3601,39 +3601,21 @@ 100 1 - ..\user\main.c - 22 - 41 - 59 - 1 - - 0 - - - ..\user\show\pm_uart3.c - 21 - 25 - 32 - 1 - - 0 - - - ..\user\show\simulation_lcd.c - 20 - 1057 - 1063 - 1 - - 0 - - - ..\user\show\simulation_lcd.h + ..\user\mqtt\mqtt.c 0 - 24 - 56 + 1 + 218 1 - + 33,127,203,210,237 + 0 + + + ..\user\show\esp8266_work.c + 4 + 29 + 41 + 1 + 40,45,53,58,64,90,155,174,189,219,264,292 0 diff --git a/firmware/stm32-esp/project/pro.uvgui.RJYF-PC b/firmware/stm32-esp/project/pro.uvgui.RJYF-PC index 212a445a..16ce13d0 100644 --- a/firmware/stm32-esp/project/pro.uvgui.RJYF-PC +++ b/firmware/stm32-esp/project/pro.uvgui.RJYF-PC @@ -11,17 +11,17 @@ 38003 Registers - 188 131 + 188 104 346 Code Coverage - 1408 160 + 1408 818 204 Performance Analyzer - 1568 + 1568 235 235 188 @@ -42,7 +42,7 @@ 1936 Watch 1 - 200 133 133 + 200 804 186 1937 @@ -89,25 +89,25 @@ 2 3 - -1 - -1 + -32000 + -32000 -1 -1 - 10 - 525 - 2309 - 1265 + 0 + 413 + 2454 + 1427 0 - 481 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000000000000100000049433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832395C757365725C73686F775C657370383236365F776F726B2E63000000000E657370383236365F776F726B2E6300000000C5D4F200FFFFFFFF4A433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832395C757365725C73686F775C657370383236365F75617274322E63000000000F657370383236365F75617274322E6300000000FFDC7800FFFFFFFF45433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303832395C757365725C73686F775C6465765F776F726B2E63000000000A6465765F776F726B2E6300000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000410100006F000000000A00003A050000 + 824 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000500000001000000010000005B433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930325C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF68433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930325C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C73686F775C657370383236365F776F726B2E63000000000E657370383236365F776F726B2E6300000000FFDC7800FFFFFFFF66433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930325C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C646174615C62617369635F646174612E68000000000C62617369635F646174612E6800000000F0A0A100FFFFFFFF66433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930325C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C64726976655C6273705F75617274322E63000000000B6273705F75617274322E6300000000BCA8E100FFFFFFFF69433A5C55736572735C524A59462D50435C4465736B746F705C53686F77456E7669722D56322E302D32303231303930325C77756D65692D736D6172745C6669726D776172655C73746D33322D6573705C757365725C73686F775C657370383236365F75617274322E63000000000F657370383236365F75617274322E6300000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001A0000006F000000000A00003A050000 @@ -116,7 +116,7 @@ -1 -1 - 1 + 0 0 0 0 @@ -126,17 +126,17 @@ 0 16 - 00000000530000003D0100001E050000 + 44010000530000006E07000015010000 16 - 85000000A1000000C5010000B1010000 + 440100006F0000006E07000031010000 1005 1005 - 1 + 0 0 0 0 @@ -146,17 +146,17 @@ 0 16 - 03000000730000003A010000FF040000 + E0FEFFFF530000001A00000039050000 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 109 109 - 1 + 0 0 0 0 @@ -166,11 +166,11 @@ 0 16 - 03000000730000003A010000FF040000 + E0FEFFFF530000001A00000039050000 16 - 85000000A100000001020000AB030000 + E2000000FE0000005E02000008040000 @@ -190,7 +190,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -210,7 +210,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -230,7 +230,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -250,7 +250,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -270,7 +270,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -290,7 +290,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -310,7 +310,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -330,7 +330,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -350,7 +350,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -370,7 +370,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -390,7 +390,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -410,7 +410,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -430,13 +430,13 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 195 195 - 1 + 0 0 0 0 @@ -446,17 +446,17 @@ 0 16 - 03000000730000003A010000FF040000 + E0FEFFFF530000001A00000039050000 16 - 85000000A100000001020000AB030000 + E2000000FE0000005E02000008040000 196 196 - 1 + 0 0 0 0 @@ -466,11 +466,11 @@ 0 16 - 03000000730000003A010000FF040000 + E0FEFFFF530000001A00000039050000 16 - 85000000A100000001020000AB030000 + E2000000FE0000005E02000008040000 @@ -486,11 +486,11 @@ 0 16 - 0000000039040000000A00001E050000 + 1A0000001E050000000A000085070000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE00000099040000C0010000 @@ -510,7 +510,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -526,11 +526,11 @@ 0 16 - 000000001E050000000A000003060000 + 1A0000001E050000000A000085070000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE00000099040000C0010000 @@ -550,7 +550,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -570,7 +570,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -610,7 +610,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -630,7 +630,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -650,7 +650,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -670,7 +670,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -690,7 +690,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -710,7 +710,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -730,7 +730,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -750,7 +750,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -770,7 +770,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -790,7 +790,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -810,7 +810,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -830,7 +830,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -850,7 +850,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -870,7 +870,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -890,7 +890,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -910,7 +910,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -930,7 +930,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -950,7 +950,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -970,7 +970,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -990,7 +990,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1010,7 +1010,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1030,7 +1030,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1050,7 +1050,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1070,7 +1070,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1090,7 +1090,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1110,7 +1110,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1130,7 +1130,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1146,11 +1146,11 @@ 0 16 - 00000000700000004301000014050000 + 00000000700000004001000073040000 16 - 85000000A100000001020000AB030000 + E2000000FE0000005E02000008040000 @@ -1162,15 +1162,15 @@ 0 32767 0 - 32768 + 4096 0 16 - 03000000AD030000F107000010050000 + 1D000000A90200002107000010050000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE00000099040000C0010000 @@ -1182,15 +1182,15 @@ 0 32767 0 - 32768 + 4096 0 16 - 03000000AD030000F107000010050000 + 1D000000A90200002107000010050000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE0000005E02000008040000 @@ -1210,7 +1210,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1230,7 +1230,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1242,15 +1242,15 @@ 0 32767 0 - 32768 + 4096 0 16 - 03000000AD030000F107000010050000 + 1D000000A90200002107000010050000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE0000005E02000008040000 @@ -1262,15 +1262,15 @@ 0 32767 0 - 32768 + 4096 0 16 - 03000000AD030000F107000010050000 + 1D000000A90200002107000010050000 16 - 9FFEFFFF3A0500009F08000001070000 + E2000000FE0000005E02000008040000 @@ -1290,7 +1290,7 @@ 16 - 85000000A10000003C04000063010000 + E2000000FE00000099040000C0010000 @@ -1310,7 +1310,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1330,7 +1330,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1350,7 +1350,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1370,7 +1370,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1390,7 +1390,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1410,7 +1410,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1430,7 +1430,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1450,7 +1450,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1470,7 +1470,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1490,7 +1490,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1510,7 +1510,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1530,7 +1530,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1550,7 +1550,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1570,7 +1570,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1590,7 +1590,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1610,7 +1610,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1630,7 +1630,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1650,7 +1650,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1670,7 +1670,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1690,7 +1690,7 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 @@ -1746,7 +1746,7 @@ 1 16 - 010000001C000000EA01000038000000 + 000000001C000000E901000038000000 16 @@ -1790,19 +1790,19 @@ 16 - 85000000A1000000C5010000B1010000 + E2000000FE000000220200000E020000 - 3507 - 000000000D000000000000000010000001000000FFFFFFFFFFFFFFFF3D01000053000000410100001E050000010000000200001004000000010000000000000000000000FFFFFFFF04000000ED0300006D000000C3000000C4000000FFFF02000B004354616262656450616E65001000000100000085000000A1000000C5010000B101000000000000530000003D0100001E0500000000000040410056040000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000000000000FFFFFFFFFFFFFFFF44010000150100006E07000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000440100006F0000006E0700003101000044010000530000006E070000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2A060000530000002E060000ED020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002E0600006F0000006E070000090300002E060000530000006E070000ED02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFF4301000053000000470100001405000000000000020000000400000001000000C2FEFFFFB7080000FFFFFFFF010000007394000001800010000000000000000000006F00000043010000300500000000000053000000430100001405000000000000404100460100000009526567697374657273000000007394000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF7394000001000000FFFFFFFF73940000000000000080000000000000FFFFFFFFFFFFFFFF00000000D00200006E070000D402000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000F00200006E070000CF03000000000000D40200006E070000B303000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB7030000D4020000BB030000B303000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000089030000F40700008D03000000000000010000000400000001000000000000000000000000000000000000000000000001000000FFFFFFFF04000000B4010000D2010000CF010000779400000180008000000000000000000000A9030000F40700004B050000000000008D030000F40700002F0500000000000040820046040000000A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFB401000001000000FFFFFFFFB40100000000000002000000C500000000800000010000000000000055040000000A00003A050000010000000000000001000000C70000000080000001000000000000003A050000000A00001F06000000000000010000000000000000000000 + 3347 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000150100006E07000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100006F0000006E0700003101000044010000530000006E070000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2A060000530000002E060000ED020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002E0600006F0000006E070000090300002E060000530000006E070000ED02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFF40010000530000004401000073040000000000000200000004000000010000000000000000000000FFFFFFFF010000007394000001800010000000000000000000006F000000400100008F0400000000000053000000400100007304000000000000404100460100000009526567697374657273000000007394000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF7394000001000000FFFFFFFF73940000000000000080000000000000FFFFFFFFFFFFFFFF00000000D00200006E070000D402000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000F00200006E070000CF03000000000000D40200006E070000B303000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB7030000D4020000BB030000B303000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF1A00000085020000240700008902000000000000010000000400000001000000D2FBFFFFC0000000FFFFFFFF04000000B4010000D2010000CF01000077940000018000800000000000001A000000A5020000240700004B0500001A00000089020000240700002F0500000000000040820046040000000A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFB401000001000000FFFFFFFFB40100000000000006000000ED0300000010000001000000E0FEFFFF6F0000001A000000550500000100000000000000010000006D0000000010000001000000E0FEFFFF6F0000001A00000055050000000000000000000000000000C30000000010000001000000E0FEFFFF6F0000001A00000055050000000000000000000000000000C40000000010000001000000E0FEFFFF6F0000001A00000055050000000000000100000000000000C500000000800000010000001A0000003A050000000A0000A1070000010000000000000001000000C700000000800000010000001A0000003A050000000A0000A107000000000000010000000000000000000000 59392 File - 2548 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D53696D756C6174696F6E4C4344960000000000000014000D53696D756C6174696F6E4C43440F53696D4C43445F447261774C696E650953696D4C43445F523308506F7765725F424C09553347657454696D650753686F774C43440D4253505F5541525433496E69740854656D7054696D65075379735469636B0964656C6179313075730E55415254315F53656E64446174610A456E61626C654E7669631055617274315F49525148616E646C65720B7073746352784672616D65117374635F63616E5F72786672616D655F740B43414E5F526563656976650D43414E5F497271466C674765740A43616E5278497271456E0A43414E5F497271436D640C43616E416C6C4672616D65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65BD030000 + 2553 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000F455350383236365F53656E64434D44960000000000000014000F455350383236365F53656E64434D440D53696D756C6174696F6E4C43440F53696D4C43445F447261774C696E650953696D4C43445F523308506F7765725F424C09553347657454696D650753686F774C43440D4253505F5541525433496E69740854656D7054696D65075379735469636B0964656C6179313075730E55415254315F53656E64446174610A456E61626C654E7669631055617274315F49525148616E646C65720B7073746352784672616D65117374635F63616E5F72786672616D655F740B43414E5F526563656976650D43414E5F497271466C674765740A43616E5278497271456E0A43414E5F497271436D640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65BD030000 1423 @@ -1818,7 +1818,7 @@ Build 966 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000370726F960000000000000001000370726F000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DE010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000370726F960000000000000001000370726F000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DE010000 583 @@ -1834,7 +1834,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 898 @@ -1857,7 +1857,7 @@ -1 -1 - 0 + 1 0 0 0 @@ -1867,11 +1867,11 @@ 0 16 - 4401000053000000000A000015010000 + 00000000530000002E01000039050000 16 - 440100006F000000000A000031010000 + 000000006F0000002E01000055050000 @@ -1887,7 +1887,7 @@ 0 16 - 03000000730000003D0100001A050000 + 03000000730000002B0100001A050000 16 @@ -1907,7 +1907,7 @@ 0 16 - 03000000730000003D0100001A050000 + 03000000730000003D01000010050000 16 @@ -1917,7 +1917,7 @@ 1465 1465 - 1 + 0 0 0 0 @@ -1927,11 +1927,11 @@ 0 16 - F407000073000000FD0900001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -1947,11 +1947,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -1967,11 +1967,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -1987,11 +1987,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2047,11 +2047,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2067,11 +2067,11 @@ 0 16 - F407000073000000FD0900001A050000 + 4605000070000000000A000039050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2087,11 +2087,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2107,11 +2107,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2127,11 +2127,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2147,11 +2147,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2167,11 +2167,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2187,7 +2187,7 @@ 0 16 - 03000000730000003D0100001A050000 + 03000000730000003D01000010050000 16 @@ -2207,7 +2207,7 @@ 0 16 - 03000000730000003D0100001A050000 + 03000000730000003D01000010050000 16 @@ -2367,11 +2367,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2887,7 +2887,7 @@ 0 16 - 03000000730000003D0100001A050000 + 03000000730000002B0100001A050000 16 @@ -2947,11 +2947,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -2967,11 +2967,11 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 @@ -3231,7 +3231,7 @@ 16 - 85000000A1000000C5010000B1010000 + 0A0000000A0000006E0000006E000000 @@ -3507,7 +3507,7 @@ 2 16 - 050000001C0000008202000038000000 + 0A0000001C0000008702000038000000 16 @@ -3527,23 +3527,23 @@ 0 16 - F407000073000000940B00001A050000 + 4905000073000000B20800001A050000 16 - E0070000C4020000D40F000013050000 + 00080000CB0200005A0B0000A7070000 - 3415 - 000000000C000000000000000020000000000000FFFFFFFFFFFFFFFF4401000015010000000A000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100006F000000000A0000310100004401000053000000000A0000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2A060000530000002E060000ED020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002E0600006F0000006E070000090300002E060000530000006E070000ED02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF40010000530000004401000039050000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000006F0000004001000055050000000000005300000040010000390500000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E6020000000A0000EA02000000000000010000000400000001000000FBFCFFFFAB01000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFF000500005A040000040500003905000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED0200006E070000F1020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000000D0300006E070000CF03000000000000F10200006E070000B30300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFFED07000053000000F10700003905000001000000020000100400000001000000A2F9FFFF5302000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000400000010000005A0600006F000000000A000055050000F107000053000000000A00003905000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000000000000000000 + 3585 + 000000000E000000000000000010000001000000FFFFFFFFFFFFFFFF2E010000530000003201000039050000010000000200001004000000010000000000000000000000FFFFFFFF02000000ED03000073940000FFFF02000B004354616262656450616E650010000001000000000000006F0000002E0100005505000000000000530000002E010000390500000000000040410056020000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000000000000FFFFFFFFFFFFFFFF4401000015010000000A000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000440100006F000000000A0000310100004401000053000000000A0000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2A060000530000002E060000ED020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002E0600006F0000006E070000090300002E060000530000006E070000ED02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000000000000FFFFFFFFFFFFFFFF4001000053000000440100002F050000000000000200000004000000010000000000000000000000FFFFFFFF030000006D000000C3000000C400000001800010000000000000000000006F000000400100004B0500000000000053000000400100002F05000000000000404100460300000005426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF6D00000001000000FFFFFFFF6D000000000000000080000000000000FFFFFFFFFFFFFFFF00000000E6020000000A0000EA02000000000000010000000400000001000000FBFCFFFFAB01000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFF000500005A040000040500003905000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED0200006E070000F1020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000000D0300006E070000CF03000000000000F10200006E070000B30300000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000040000001000000FFFFFFFFFFFFFFFF4205000053000000460500003905000001000000020000100400000001000000AAFAFFFF6D03000000000000000000000000000001000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800040000001000000910600006F000000000A0000550500004605000053000000000A00003905000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000000000000000000 59392 File - 2563 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000009553347657454696D659600000000000000140009553347657454696D650753686F774C43440D4253505F5541525433496E69740854656D7054696D65075379735469636B0964656C6179313075730E55415254315F53656E64446174610A456E61626C654E7669631055617274315F49525148616E646C65720B7073746352784672616D65117374635F63616E5F72786672616D655F740B43414E5F526563656976650D43414E5F497271466C674765740A43616E5278497271456E0A43414E5F497271436D640C43616E416C6C4672616D65730D43616E46696C74657253656C311243414E5F4143465F49445F5245475F53454C1143616E52784275664E6F7453746F7265641043414E5F52455345545F454E41424C450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65BD030000 + 2553 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000F455350383236365F53656E64434D44960000000000000014000F455350383236365F53656E64434D440D53696D756C6174696F6E4C43440F53696D4C43445F447261774C696E650953696D4C43445F523308506F7765725F424C09553347657454696D650753686F774C43440D4253505F5541525433496E69740854656D7054696D65075379735469636B0964656C6179313075730E55415254315F53656E64446174610A456E61626C654E7669631055617274315F49525148616E646C65720B7073746352784672616D65117374635F63616E5F72786672616D655F740B43414E5F526563656976650D43414E5F497271466C674765740A43616E5278497271456E0A43414E5F497271436D640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65BD030000 1423 @@ -3575,7 +3575,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020000002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756772020000 898 @@ -3599,32 +3599,50 @@ 0 100 - 0 + 1 + + ..\user\main.c + 0 + 4 + 9 + 1 + + 0 + ..\user\show\esp8266_work.c - 0 - 141 - 217 + 2 + 250 + 287 + 1 + 33,39,354 + 0 + + + ..\user\data\basic_data.h + 32 + 31 + 17 + 1 + + 0 + + + ..\user\drive\bsp_uart2.c + 20 + 67 + 81 1 0 ..\user\show\esp8266_uart2.c - 56 - 1 - 113 - 1 - 116 - 0 - - - ..\user\show\dev_work.c 0 - 49 - 1 + 14 + 32 1 - + 48,68 0 diff --git a/firmware/stm32-esp/project/pro.uvopt b/firmware/stm32-esp/project/pro.uvopt index 84a1e5d5..9b069a9d 100644 --- a/firmware/stm32-esp/project/pro.uvopt +++ b/firmware/stm32-esp/project/pro.uvopt @@ -180,8 +180,88 @@ 0 1 + UART2ReadBuf + + + 1 + 1 DevParam,0x0A + + 2 + 1 + PublishData + + + 3 + 1 + StringData + + + 4 + 1 + NetWorkFlow,0x0A + + + 5 + 1 + cmd + + + 6 + 1 + UART2ReadBuf + + + 7 + 1 + ret + + + 8 + 1 + haystack + + + 9 + 1 + needle + + + 10 + 1 + i,0x0A + + + 11 + 1 + j,0x0A + + + 12 + 1 + StringData + + + 13 + 1 + NewSite,0x0A + + + 14 + 1 + byte2,0x10 + + + 15 + 1 + wait,0x10 + + + 16 + 1 + byte1 + 0 @@ -230,7 +310,7 @@ startup - 0 + 1 0 0 0 @@ -610,7 +690,7 @@ user/drive - 0 + 1 0 0 0 @@ -714,7 +794,7 @@ user/com - 0 + 1 0 0 0 @@ -901,116 +981,8 @@ 0 0 0 - ..\user\mqtt\MQTTConnectClient.c - MQTTConnectClient.c - 0 - 0 - - - 10 - 51 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTConnectServer.c - MQTTConnectServer.c - 0 - 0 - - - 10 - 52 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTDeserializePublish.c - MQTTDeserializePublish.c - 0 - 0 - - - 10 - 53 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTFormat.c - MQTTFormat.c - 0 - 0 - - - 10 - 54 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTPacket.c - MQTTPacket.c - 0 - 0 - - - 10 - 55 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTSerializePublish.c - MQTTSerializePublish.c - 0 - 0 - - - 10 - 56 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTSubscribeClient.c - MQTTSubscribeClient.c - 0 - 0 - - - 10 - 57 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTSubscribeServer.c - MQTTSubscribeServer.c - 0 - 0 - - - 10 - 58 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTUnsubscribeClient.c - MQTTUnsubscribeClient.c - 0 - 0 - - - 10 - 59 - 1 - 0 - 0 - 0 - ..\user\mqtt\MQTTUnsubscribeServer.c - MQTTUnsubscribeServer.c + ..\user\mqtt\mqtt.c + mqtt.c 0 0 diff --git a/firmware/stm32-esp/project/pro.uvproj b/firmware/stm32-esp/project/pro.uvproj index c5b6d0ce..d9b853a1 100644 --- a/firmware/stm32-esp/project/pro.uvproj +++ b/firmware/stm32-esp/project/pro.uvproj @@ -712,54 +712,9 @@ user/mqtt - MQTTConnectClient.c + mqtt.c 1 - ..\user\mqtt\MQTTConnectClient.c - - - MQTTConnectServer.c - 1 - ..\user\mqtt\MQTTConnectServer.c - - - MQTTDeserializePublish.c - 1 - ..\user\mqtt\MQTTDeserializePublish.c - - - MQTTFormat.c - 1 - ..\user\mqtt\MQTTFormat.c - - - MQTTPacket.c - 1 - ..\user\mqtt\MQTTPacket.c - - - MQTTSerializePublish.c - 1 - ..\user\mqtt\MQTTSerializePublish.c - - - MQTTSubscribeClient.c - 1 - ..\user\mqtt\MQTTSubscribeClient.c - - - MQTTSubscribeServer.c - 1 - ..\user\mqtt\MQTTSubscribeServer.c - - - MQTTUnsubscribeClient.c - 1 - ..\user\mqtt\MQTTUnsubscribeClient.c - - - MQTTUnsubscribeServer.c - 1 - ..\user\mqtt\MQTTUnsubscribeServer.c + ..\user\mqtt\mqtt.c diff --git a/firmware/stm32-esp/user/data/basic_data.c b/firmware/stm32-esp/user/data/basic_data.c index 8ad6ef62..6334027e 100644 --- a/firmware/stm32-esp/user/data/basic_data.c +++ b/firmware/stm32-esp/user/data/basic_data.c @@ -1,12 +1,12 @@ #include "basic_data.h" -uint8_t UART1ReadBuf[100] = {0}; +uint8_t UART1ReadBuf[500] = {0}; uint16_t UART1ReadFlag = 0; -uint8_t UART2ReadBuf[100] = {0}; +uint8_t UART2ReadBuf[500] = {0}; uint16_t UART2ReadFlag = 0; -uint8_t UART3ReadBuf[100] = {0}; +uint8_t UART3ReadBuf[500] = {0}; uint16_t UART3ReadFlag = 0; DevParam_t DevParam = {0}; diff --git a/firmware/stm32-esp/user/data/basic_data.h b/firmware/stm32-esp/user/data/basic_data.h index ff43fad8..a2ec2bf0 100644 --- a/firmware/stm32-esp/user/data/basic_data.h +++ b/firmware/stm32-esp/user/data/basic_data.h @@ -6,15 +6,15 @@ #define Device_LCD 1 #define MQTT_SCode 1 -#define MQTT_AT 1 +//#define MQTT_AT 1 -extern uint8_t UART1ReadBuf[100]; +extern uint8_t UART1ReadBuf[500]; extern uint16_t UART1ReadFlag; -extern uint8_t UART2ReadBuf[100]; +extern uint8_t UART2ReadBuf[500]; extern uint16_t UART2ReadFlag; -extern uint8_t UART3ReadBuf[100]; +extern uint8_t UART3ReadBuf[500]; extern uint16_t UART3ReadFlag; typedef enum @@ -39,7 +39,11 @@ typedef struct uint16_t AirInforGetTime; // 空气信息获取时间 + uint8_t ServerRelay; // 服务器继电器 + uint8_t ServerRed; + uint16_t ESP8266SendTime; + uint16_t MQTTSendTime; // 运行阶段 RunPhase_E RunPhase; @@ -58,6 +62,8 @@ typedef struct uint16_t PM1_0; uint16_t PM2_5; uint16_t PM10; + + uint16_t tes; }DevParam_t; extern DevParam_t DevParam; diff --git a/firmware/stm32-esp/user/drive/bsp_timer3.c b/firmware/stm32-esp/user/drive/bsp_timer3.c index d3da7aad..7c432857 100644 --- a/firmware/stm32-esp/user/drive/bsp_timer3.c +++ b/firmware/stm32-esp/user/drive/bsp_timer3.c @@ -72,8 +72,8 @@ void TIM3_IRQHandler(void) //TIM3中断服务程序 if(UART3Count == UART3ReadFlag) { UART3ReadFlag |= (1 << 15); - UART3Count = 0; - UART3RecTime = 0; + UART3Count = 0; + UART3RecTime = 0; } else { @@ -101,7 +101,10 @@ void TIM3_IRQHandler(void) //TIM3中断服务程序 DevParam.ServerUpdateTime++; // 发送时间 if(DevParam.ESP8266SendTime<65000) - DevParam.ESP8266SendTime++; + DevParam.ESP8266SendTime++; + // 发送时间 + if(DevParam.MQTTSendTime<65000) + DevParam.MQTTSendTime++; } } diff --git a/firmware/stm32-esp/user/drive/bsp_uart2.c b/firmware/stm32-esp/user/drive/bsp_uart2.c index fb5f9208..012d5925 100644 --- a/firmware/stm32-esp/user/drive/bsp_uart2.c +++ b/firmware/stm32-esp/user/drive/bsp_uart2.c @@ -1,24 +1,27 @@ #include "bsp_uart2.h" // 串口2 PA2 TX PA3 RX -void Dev_UART2SendStr(char* fmt,...){ - uint8_t tbuf[200] = {0}; +void Dev_UART2SendStr(uint8_t* tbuf, uint16_t tlen, uint8_t tByte){ uint16_t i = 0,j = 0; - - va_list ap; - va_start(ap,fmt); - vsprintf((char*)tbuf, fmt, ap); - va_end(ap); - - j = strlen((const char*)tbuf); + + if(tlen > 0) + j = tlen; + else + j = strlen((const char*)tbuf); for( i = 0; i < j; i++) { + if((tByte>0)&&(i==2)) + { + while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET){}; + USART_SendData(USART2, tByte); + } while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET){}; USART_SendData(USART2, tbuf[i]); } while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET); } + // 发送数据 void Dev_UART2SendData(uint8_t *ch,uint16_t len){ uint16_t i = 0; @@ -80,10 +83,10 @@ void USART2_IRQHandler(void) res = USART_ReceiveData(USART2); // 是否存在数据没有处理 - if( (UART2ReadFlag&0x8000)==0 ) + if((UART2ReadFlag&0x8000)==0) { UART2ReadBuf[UART2ReadFlag++] = res; - if(UART2ReadFlag>=90) + if(UART2ReadFlag>=480) { UART2ReadFlag |= (1 << 15); } diff --git a/firmware/stm32-esp/user/drive/bsp_uart2.h b/firmware/stm32-esp/user/drive/bsp_uart2.h index a61b414f..331e53e3 100644 --- a/firmware/stm32-esp/user/drive/bsp_uart2.h +++ b/firmware/stm32-esp/user/drive/bsp_uart2.h @@ -12,7 +12,7 @@ #include "basic_data.h" -void Dev_UART2SendStr(char* fmt,...); +void Dev_UART2SendStr(uint8_t* tbuf, uint16_t tlen, uint8_t tByte); void Dev_UART2SendData(uint8_t *ch, uint16_t len); void BSP_UART2Init(uint32_t bound); diff --git a/firmware/stm32-esp/user/main.c b/firmware/stm32-esp/user/main.c index dcddda92..e02c2386 100644 --- a/firmware/stm32-esp/user/main.c +++ b/firmware/stm32-esp/user/main.c @@ -53,7 +53,7 @@ int main() { // 显示部分,侧边跳动 Show_BroadSideBeat(); -// + // PMD4,获取空气信息 PMD4_GetAirInfor(); } diff --git a/firmware/stm32-esp/user/mqtt/MQTTConnect.h b/firmware/stm32-esp/user/mqtt/MQTTConnect.h deleted file mode 100644 index e928c7d0..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTConnect.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef _MQTTCONNECT_H_ -#define _MQTTCONNECT_H_ - -#include "MQTTPacket.h" - -enum connack_return_codes -{ - MQTT_CONNECTION_ACCEPTED = 0, - MQTT_UNNACCEPTABLE_PROTOCOL = 1, - MQTT_CLIENTID_REJECTED = 2, - MQTT_SERVER_UNAVAILABLE = 3, - MQTT_BAD_USERNAME_OR_PASSWORD = 4, - MQTT_NOT_AUTHORIZED = 5, -}; - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -typedef union -{ - unsigned char all; /**< all connect flags */ -#if defined(REVERSED) - struct - { - unsigned int username : 1; /**< 3.1 user name */ - unsigned int password : 1; /**< 3.1 password */ - unsigned int willRetain : 1; /**< will retain setting */ - unsigned int willQoS : 2; /**< will QoS value */ - unsigned int will : 1; /**< will flag */ - unsigned int cleansession : 1; /**< clean session flag */ - unsigned int : 1; /**< unused */ - } bits; -#else - struct - { - unsigned int : 1; /**< unused */ - unsigned int cleansession : 1; /**< cleansession flag */ - unsigned int will : 1; /**< will flag */ - unsigned int willQoS : 2; /**< will QoS value */ - unsigned int willRetain : 1; /**< will retain setting */ - unsigned int password : 1; /**< 3.1 password */ - unsigned int username : 1; /**< 3.1 user name */ - } bits; -#endif -} MQTTConnectFlags; /**< connect flags byte */ - -/** - * Defines the MQTT "Last Will and Testament" (LWT) settings for - * the connect packet. - */ -typedef struct -{ - /** The eyecatcher for this structure. must be MQTW. */ - char struct_id[4]; - /** The version number of this structure. Must be 0 */ - int struct_version; - /** The LWT topic to which the LWT message will be published. */ - MQTTString topicName; - /** The LWT payload. */ - MQTTString message; - /** - * The retained flag for the LWT message (see MQTTAsync_message.retained). - */ - unsigned char retained; - /** - * The quality of service setting for the LWT message (see - * MQTTAsync_message.qos and @ref qos). - */ - char qos; -} MQTTPacket_willOptions; - -#define MQTTPacket_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 } - -typedef struct -{ - /** The eyecatcher for this structure. must be MQTC. */ - char struct_id[4]; - /** The version number of this structure. Must be 0 */ - int struct_version; - /** Version of MQTT to be used. 3 = 3.1 4 = 3.1.1 - */ - unsigned char MQTTVersion; - MQTTString clientID; - unsigned short keepAliveInterval; - unsigned char cleansession; - unsigned char willFlag; - MQTTPacket_willOptions will; - MQTTString username; - MQTTString password; -} MQTTPacket_connectData; - -typedef union -{ - unsigned char all; /**< all connack flags */ -#if defined(REVERSED) - struct - { - unsigned int reserved : 7; /**< unused */ - unsigned int sessionpresent : 1; /**< session present flag */ - } bits; -#else - struct - { - unsigned int sessionpresent : 1; /**< session present flag */ - unsigned int reserved: 7; /**< unused */ - } bits; -#endif -} MQTTConnackFlags; /**< connack flags byte */ - -#define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \ - MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} } - -DLLExport int MQTTSerialize_connect(unsigned char* buf, int buflen, MQTTPacket_connectData* options); -DLLExport int MQTTDeserialize_connect(MQTTPacket_connectData* data, unsigned char* buf, int len); - -DLLExport int MQTTSerialize_connack(unsigned char* buf, int buflen, unsigned char connack_rc, unsigned char sessionPresent); -DLLExport int MQTTDeserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen); - -DLLExport int MQTTSerialize_disconnect(unsigned char* buf, int buflen); -DLLExport int MQTTSerialize_pingreq(unsigned char* buf, int buflen); - -#endif /* MQTTCONNECT_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/MQTTConnectClient.c b/firmware/stm32-esp/user/mqtt/MQTTConnectClient.c deleted file mode 100644 index 2c6c223e..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTConnectClient.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include -/** - * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. - * @param options the options to be used to build the connect packet - * @return the length of buffer needed to contain the serialized version of the packet - */ -int MQTTSerialize_connectLength(MQTTPacket_connectData* options){ - int len = 0; - - FUNC_ENTRY; - - if (options->MQTTVersion == 3) - len = 12; /* variable depending on MQTT or MQIsdp */ - else if (options->MQTTVersion == 4) - len = 10; - - len += MQTTstrlen(options->clientID)+2; - if (options->willFlag) - len += MQTTstrlen(options->will.topicName)+2 + MQTTstrlen(options->will.message)+2; - if (options->username.cstring || options->username.lenstring.data) - len += MQTTstrlen(options->username)+2; - if (options->password.cstring || options->password.lenstring.data) - len += MQTTstrlen(options->password)+2; - - FUNC_EXIT_RC(len); - return len; -} -/** - * Serializes the connect options into the buffer. - * @param buf the buffer into which the packet will be serialized - * @param len the length in bytes of the supplied buffer - * @param options the options to be used to build the connect packet - * @return serialized length, or error if 0 - */ -int MQTTSerialize_connect(unsigned char* buf, int buflen, MQTTPacket_connectData* options){ - unsigned char *ptr = buf; - MQTTHeader header = {0}; - MQTTConnectFlags flags = {0}; - int len = 0; - int rc = -1; - - FUNC_ENTRY; - if (MQTTPacket_len(len = MQTTSerialize_connectLength(options)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = CONNECT; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, len); /* write remaining length */ - - if (options->MQTTVersion == 4) - { - writeCString(&ptr, "MQTT"); - writeChar(&ptr, (char) 4); - } - else - { - writeCString(&ptr, "MQIsdp"); - writeChar(&ptr, (char) 3); - } - - flags.all = 0; - flags.bits.cleansession = options->cleansession; - flags.bits.will = (options->willFlag) ? 1 : 0; - if (flags.bits.will) - { - flags.bits.willQoS = options->will.qos; - flags.bits.willRetain = options->will.retained; - } - - if (options->username.cstring || options->username.lenstring.data) - flags.bits.username = 1; - if (options->password.cstring || options->password.lenstring.data) - flags.bits.password = 1; - - writeChar(&ptr, flags.all); - writeInt(&ptr, options->keepAliveInterval); - writeMQTTString(&ptr, options->clientID); - if (options->willFlag) - { - writeMQTTString(&ptr, options->will.topicName); - writeMQTTString(&ptr, options->will.message); - } - if (flags.bits.username) - writeMQTTString(&ptr, options->username); - if (flags.bits.password) - writeMQTTString(&ptr, options->password); - - rc = ptr - buf; - - exit: FUNC_EXIT_RC(rc); - return rc; -} -/** - * Deserializes the supplied (wire) buffer into connack data - return code - * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) - * @param connack_rc returned integer value of the connack return code - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param len the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int MQTTDeserialize_connack(unsigned char* sessionPresent, unsigned char* connack_rc, unsigned char* buf, int buflen){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - MQTTConnackFlags flags = {0}; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != CONNACK) - goto exit; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - if (enddata - curdata < 2) - goto exit; - - flags.all = readChar(&curdata); - *sessionPresent = flags.bits.sessionpresent; - *connack_rc = readChar(&curdata); - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} -/** - * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @param packettype the message type - * @return serialized length, or error if 0 - */ -int MQTTSerialize_zero(unsigned char* buf, int buflen, unsigned char packettype){ - MQTTHeader header = {0}; - int rc = -1; - unsigned char *ptr = buf; - - FUNC_ENTRY; - if (buflen < 2) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.byte = 0; - header.bits.type = packettype; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, 0); /* write remaining length */ - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} -/** - * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @return serialized length, or error if 0 - */ -int MQTTSerialize_disconnect(unsigned char* buf, int buflen){ - return MQTTSerialize_zero(buf, buflen, DISCONNECT); -} -/** - * Serializes a disconnect packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer, to avoid overruns - * @return serialized length, or error if 0 - */ -int MQTTSerialize_pingreq(unsigned char* buf, int buflen){ - return MQTTSerialize_zero(buf, buflen, PINGREQ); -} diff --git a/firmware/stm32-esp/user/mqtt/MQTTConnectServer.c b/firmware/stm32-esp/user/mqtt/MQTTConnectServer.c deleted file mode 100644 index 439dfe7b..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTConnectServer.c +++ /dev/null @@ -1,125 +0,0 @@ -#include "StackTrace.h" -#include "MQTTPacket.h" -#include - -#define min(a, b) ((a < b) ? a : b) - -/** - * Validates MQTT protocol name and version combinations - * @param protocol the MQTT protocol name as an MQTTString - * @param version the MQTT protocol version number, as in the connect packet - * @return correct MQTT combination? 1 is true, 0 is false - */ -int MQTTPacket_checkVersion(MQTTString* protocol, int version){ - int rc = 0; - if (version == 3 && memcmp(protocol->lenstring.data, "MQIsdp", - min(6, protocol->lenstring.len)) == 0) - rc = 1; - else if (version == 4 && memcmp(protocol->lenstring.data, "MQTT", - min(4, protocol->lenstring.len)) == 0) - rc = 1; - return rc; -} -/** - * Deserializes the supplied (wire) buffer into connect data structure - * @param data the connect data structure to be filled out - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param len the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int MQTTDeserialize_connect(MQTTPacket_connectData* data, unsigned char* buf, int len){ - MQTTHeader header = {0}; - MQTTConnectFlags flags = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = &buf[len]; - int rc = 0; - MQTTString Protocol; - int version; - int mylen = 0; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != CONNECT) - goto exit; - - curdata += MQTTPacket_decodeBuf(curdata, &mylen); /* read remaining length */ - - if (!readMQTTLenString(&Protocol, &curdata, enddata) || - enddata - curdata < 0) /* do we have enough data to read the protocol version byte? */ - goto exit; - - version = (int)readChar(&curdata); /* Protocol version */ - /* If we don't recognize the protocol version, we don't parse the connect packet on the - * basis that we don't know what the format will be. - */ - if (MQTTPacket_checkVersion(&Protocol, version)) - { - flags.all = readChar(&curdata); - data->cleansession = flags.bits.cleansession; - data->keepAliveInterval = readInt(&curdata); - if (!readMQTTLenString(&data->clientID, &curdata, enddata)) - goto exit; - data->willFlag = flags.bits.will; - if (flags.bits.will) - { - data->will.qos = flags.bits.willQoS; - data->will.retained = flags.bits.willRetain; - if (!readMQTTLenString(&data->will.topicName, &curdata, enddata) || - !readMQTTLenString(&data->will.message, &curdata, enddata)) - goto exit; - } - if (flags.bits.username) - { - if (enddata - curdata < 3 || !readMQTTLenString(&data->username, &curdata, enddata)) - goto exit; /* username flag set, but no username supplied - invalid */ - if (flags.bits.password && - (enddata - curdata < 3 || !readMQTTLenString(&data->password, &curdata, enddata))) - goto exit; /* password flag set, but no password supplied - invalid */ - } - else if (flags.bits.password) - goto exit; /* password flag set without username - invalid */ - rc = 1; - } -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes the connack packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param connack_rc the integer connack return code to be used - * @param sessionPresent the MQTT 3.1.1 sessionPresent flag - * @return serialized length, or error if 0 - */ -int MQTTSerialize_connack(unsigned char* buf, int buflen, unsigned char connack_rc, unsigned char sessionPresent){ - MQTTHeader header = {0}; - int rc = 0; - unsigned char *ptr = buf; - MQTTConnackFlags flags = {0}; - - FUNC_ENTRY; - if (buflen < 2) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.byte = 0; - header.bits.type = CONNACK; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ - - flags.all = 0; - flags.bits.sessionpresent = sessionPresent; - writeChar(&ptr, flags.all); - writeChar(&ptr, connack_rc); - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - diff --git a/firmware/stm32-esp/user/mqtt/MQTTDeserializePublish.c b/firmware/stm32-esp/user/mqtt/MQTTDeserializePublish.c deleted file mode 100644 index 610d8f1c..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTDeserializePublish.c +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ - -#include "StackTrace.h" -#include "MQTTPacket.h" -#include - -#define min(a, b) ((a < b) ? 1 : 0) - -/** - * Deserializes the supplied (wire) buffer into publish data - * @param dup returned integer - the MQTT dup flag - * @param qos returned integer - the MQTT QoS value - * @param retained returned integer - the MQTT retained flag - * @param packetid returned integer - the MQTT packet identifier - * @param topicName returned MQTTString - the MQTT topic in the publish - * @param payload returned byte buffer - the MQTT publish payload - * @param payloadlen returned integer - the length of the MQTT payload - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success - */ -int MQTTDeserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, MQTTString* topicName, - unsigned char** payload, int* payloadlen, unsigned char* buf, int buflen){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen = 0; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != PUBLISH) - goto exit; - *dup = header.bits.dup; - *qos = header.bits.qos; - *retained = header.bits.retain; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - if (!readMQTTLenString(topicName, &curdata, enddata) || - enddata - curdata < 0) /* do we have enough data to read the protocol version byte? */ - goto exit; - - if (*qos > 0) - *packetid = readInt(&curdata); - - *payloadlen = enddata - curdata; - *payload = curdata; - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Deserializes the supplied (wire) buffer into an ack - * @param packettype returned integer - the MQTT packet type - * @param dup returned integer - the MQTT dup flag - * @param packetid returned integer - the MQTT packet identifier - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - *dup = header.bits.dup; - *packettype = header.bits.type; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - if (enddata - curdata < 2) - goto exit; - *packetid = readInt(&curdata); - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - diff --git a/firmware/stm32-esp/user/mqtt/MQTTFormat.c b/firmware/stm32-esp/user/mqtt/MQTTFormat.c deleted file mode 100644 index e8484d1e..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTFormat.c +++ /dev/null @@ -1,233 +0,0 @@ -#include "StackTrace.h" -#include "MQTTPacket.h" - -#include "string.h" - -const char* MQTTPacket_names[] = -{ - "RESERVED", "CONNECT", "CONNACK", "PUBLISH", "PUBACK", "PUBREC", "PUBREL", - "PUBCOMP", "SUBSCRIBE", "SUBACK", "UNSUBSCRIBE", "UNSUBACK", - "PINGREQ", "PINGRESP", "DISCONNECT" -}; - -const char* MQTTPacket_getName(unsigned short packetid) { - return MQTTPacket_names[packetid]; -} - -int MQTTStringFormat_connect(char* strbuf, int strbuflen, MQTTPacket_connectData* data){ - int strindex = 0; - - strindex = snprintf(strbuf, strbuflen, - "CONNECT MQTT version %d, client id %.*s, clean session %d, keep alive %d", - (int)data->MQTTVersion, data->clientID.lenstring.len, data->clientID.lenstring.data, - (int)data->cleansession, data->keepAliveInterval); - if (data->willFlag) - strindex += snprintf(&strbuf[strindex], strbuflen - strindex, - ", will QoS %d, will retain %d, will topic %.*s, will message %.*s", - data->will.qos, data->will.retained, - data->will.topicName.lenstring.len, data->will.topicName.lenstring.data, - data->will.message.lenstring.len, data->will.message.lenstring.data); - if (data->username.lenstring.data && data->username.lenstring.len > 0) - strindex += snprintf(&strbuf[strindex], strbuflen - strindex, - ", user name %.*s", data->username.lenstring.len, data->username.lenstring.data); - if (data->password.lenstring.data && data->password.lenstring.len > 0) - strindex += snprintf(&strbuf[strindex], strbuflen - strindex, - ", password %.*s", data->password.lenstring.len, data->password.lenstring.data); - return strindex; -} - - -int MQTTStringFormat_connack(char* strbuf, int strbuflen, unsigned char connack_rc, unsigned char sessionPresent){ - int strindex = snprintf(strbuf, strbuflen, "CONNACK session present %d, rc %d", sessionPresent, connack_rc); - return strindex; -} - - -int MQTTStringFormat_publish(char* strbuf, int strbuflen, unsigned char dup, int qos, unsigned char retained, - unsigned short packetid, MQTTString topicName, unsigned char* payload, int payloadlen){ - int strindex = snprintf(strbuf, strbuflen, - "PUBLISH dup %d, QoS %d, retained %d, packet id %d, topic %.*s, payload length %d, payload %.*s", - dup, qos, retained, packetid, - (topicName.lenstring.len < 20) ? topicName.lenstring.len : 20, topicName.lenstring.data, - payloadlen, (payloadlen < 20) ? payloadlen : 20, payload); - return strindex; -} - - -int MQTTStringFormat_ack(char* strbuf, int strbuflen, unsigned char packettype, unsigned char dup, unsigned short packetid){ - int strindex = snprintf(strbuf, strbuflen, "%s, packet id %d", MQTTPacket_names[packettype], packetid); - if (dup) - strindex += snprintf(strbuf + strindex, strbuflen - strindex, ", dup %d", dup); - return strindex; -} - - -int MQTTStringFormat_subscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, int count, - MQTTString topicFilters[], int requestedQoSs[]){ - return snprintf(strbuf, strbuflen, - "SUBSCRIBE dup %d, packet id %d count %d topic %.*s qos %d", - dup, packetid, count, - topicFilters[0].lenstring.len, topicFilters[0].lenstring.data, - requestedQoSs[0]); -} - - -int MQTTStringFormat_suback(char* strbuf, int strbuflen, unsigned short packetid, int count, int* grantedQoSs){ - return snprintf(strbuf, strbuflen, - "SUBACK packet id %d count %d granted qos %d", packetid, count, grantedQoSs[0]); -} - - -int MQTTStringFormat_unsubscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, - int count, MQTTString topicFilters[]){ - return snprintf(strbuf, strbuflen, - "UNSUBSCRIBE dup %d, packet id %d count %d topic %.*s", - dup, packetid, count, - topicFilters[0].lenstring.len, topicFilters[0].lenstring.data); -} - - -#if defined(MQTT_CLIENT) -char* MQTTFormat_toClientString(char* strbuf, int strbuflen, unsigned char* buf, int buflen){ - int index = 0; - int rem_length = 0; - MQTTHeader header = {0}; - int strindex = 0; - - header.byte = buf[index++]; - index += MQTTPacket_decodeBuf(&buf[index], &rem_length); - - switch (header.bits.type) - { - - case CONNACK: - { - unsigned char sessionPresent, connack_rc; - if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) == 1) - strindex = MQTTStringFormat_connack(strbuf, strbuflen, connack_rc, sessionPresent); - } - break; - case PUBLISH: - { - unsigned char dup, retained, *payload; - unsigned short packetid; - int qos, payloadlen; - MQTTString topicName = MQTTString_initializer; - if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, - &payload, &payloadlen, buf, buflen) == 1) - strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, packetid, - topicName, payload, payloadlen); - } - break; - case PUBACK: - case PUBREC: - case PUBREL: - case PUBCOMP: - { - unsigned char packettype, dup; - unsigned short packetid; - if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) - strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); - } - break; - case SUBACK: - { - unsigned short packetid; - int maxcount = 1, count = 0; - int grantedQoSs[1]; - if (MQTTDeserialize_suback(&packetid, maxcount, &count, grantedQoSs, buf, buflen) == 1) - strindex = MQTTStringFormat_suback(strbuf, strbuflen, packetid, count, grantedQoSs); - } - break; - case UNSUBACK: - { - unsigned short packetid; - if (MQTTDeserialize_unsuback(&packetid, buf, buflen) == 1) - strindex = MQTTStringFormat_ack(strbuf, strbuflen, UNSUBACK, 0, packetid); - } - break; - case PINGREQ: - case PINGRESP: - case DISCONNECT: - strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); - break; - } - return strbuf; -} -#endif - -#if defined(MQTT_SERVER) -char* MQTTFormat_toServerString(char* strbuf, int strbuflen, unsigned char* buf, int buflen){ - int index = 0; - int rem_length = 0; - MQTTHeader header = {0}; - int strindex = 0; - - header.byte = buf[index++]; - index += MQTTPacket_decodeBuf(&buf[index], &rem_length); - - switch (header.bits.type) - { - case CONNECT: - { - MQTTPacket_connectData data; - int rc; - if ((rc = MQTTDeserialize_connect(&data, buf, buflen)) == 1) - strindex = MQTTStringFormat_connect(strbuf, strbuflen, &data); - } - break; - case PUBLISH: - { - unsigned char dup, retained, *payload; - unsigned short packetid; - int qos, payloadlen; - MQTTString topicName = MQTTString_initializer; - if (MQTTDeserialize_publish(&dup, &qos, &retained, &packetid, &topicName, - &payload, &payloadlen, buf, buflen) == 1) - strindex = MQTTStringFormat_publish(strbuf, strbuflen, dup, qos, retained, packetid, - topicName, payload, payloadlen); - } - break; - case PUBACK: - case PUBREC: - case PUBREL: - case PUBCOMP: - { - unsigned char packettype, dup; - unsigned short packetid; - if (MQTTDeserialize_ack(&packettype, &dup, &packetid, buf, buflen) == 1) - strindex = MQTTStringFormat_ack(strbuf, strbuflen, packettype, dup, packetid); - } - break; - case SUBSCRIBE: - { - unsigned char dup; - unsigned short packetid; - int maxcount = 1, count = 0; - MQTTString topicFilters[1]; - int requestedQoSs[1]; - if (MQTTDeserialize_subscribe(&dup, &packetid, maxcount, &count, - topicFilters, requestedQoSs, buf, buflen) == 1) - strindex = MQTTStringFormat_subscribe(strbuf, strbuflen, dup, packetid, count, topicFilters, requestedQoSs);; - } - break; - case UNSUBSCRIBE: - { - unsigned char dup; - unsigned short packetid; - int maxcount = 1, count = 0; - MQTTString topicFilters[1]; - if (MQTTDeserialize_unsubscribe(&dup, &packetid, maxcount, &count, topicFilters, buf, buflen) == 1) - strindex = MQTTStringFormat_unsubscribe(strbuf, strbuflen, dup, packetid, count, topicFilters); - } - break; - case PINGREQ: - case PINGRESP: - case DISCONNECT: - strindex = snprintf(strbuf, strbuflen, "%s", MQTTPacket_names[header.bits.type]); - break; - } - strbuf[strbuflen] = '\0'; - return strbuf; -} -#endif diff --git a/firmware/stm32-esp/user/mqtt/MQTTFormat.h b/firmware/stm32-esp/user/mqtt/MQTTFormat.h deleted file mode 100644 index ecfefee2..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTFormat.h +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ - -#if !defined(_MQTTFORMAT_H_) -#define _MQTTFORMAT_H_ - -#include "StackTrace.h" -#include "MQTTPacket.h" - -const char* MQTTPacket_getName(unsigned short packetid); -int MQTTStringFormat_connect(char* strbuf, int strbuflen, MQTTPacket_connectData* data); -int MQTTStringFormat_connack(char* strbuf, int strbuflen, unsigned char connack_rc, unsigned char sessionPresent); -int MQTTStringFormat_publish(char* strbuf, int strbuflen, unsigned char dup, int qos, unsigned char retained, - unsigned short packetid, MQTTString topicName, unsigned char* payload, int payloadlen); -int MQTTStringFormat_ack(char* strbuf, int strbuflen, unsigned char packettype, unsigned char dup, unsigned short packetid); -int MQTTStringFormat_subscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, int count, - MQTTString topicFilters[], int requestedQoSs[]); -int MQTTStringFormat_suback(char* strbuf, int strbuflen, unsigned short packetid, int count, int* grantedQoSs); -int MQTTStringFormat_unsubscribe(char* strbuf, int strbuflen, unsigned char dup, unsigned short packetid, - int count, MQTTString topicFilters[]); -char* MQTTFormat_toClientString(char* strbuf, int strbuflen, unsigned char* buf, int buflen); -char* MQTTFormat_toServerString(char* strbuf, int strbuflen, unsigned char* buf, int buflen); - -#endif diff --git a/firmware/stm32-esp/user/mqtt/MQTTPacket.c b/firmware/stm32-esp/user/mqtt/MQTTPacket.c deleted file mode 100644 index ae3f41a3..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTPacket.c +++ /dev/null @@ -1,365 +0,0 @@ -#include "StackTrace.h" -#include "MQTTPacket.h" - -#include - -/** - * Encodes the message length according to the MQTT algorithm - * @param buf the buffer into which the encoded data is written - * @param length the length to be encoded - * @return the number of bytes written to buffer - */ -int MQTTPacket_encode(unsigned char* buf, int length){ - int rc = 0; - - FUNC_ENTRY; - do - { - char d = length % 128; - length /= 128; - /* if there are more digits to encode, set the top bit of this digit */ - if (length > 0) - d |= 0x80; - buf[rc++] = d; - } while (length > 0); - FUNC_EXIT_RC(rc); - return rc; -} - -/** - * Decodes the message length according to the MQTT algorithm - * @param getcharfn pointer to function to read the next character from the data source - * @param value the decoded length returned - * @return the number of bytes read from the socket - */ -int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value){ - unsigned char c; - int multiplier = 1; - int len = 0; -#define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 - - FUNC_ENTRY; - *value = 0; - do - { - int rc = MQTTPACKET_READ_ERROR; - - if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) - { - rc = MQTTPACKET_READ_ERROR; /* bad data */ - goto exit; - } - rc = (*getcharfn)(&c, 1); - if (rc != 1) - goto exit; - *value += (c & 127) * multiplier; - multiplier *= 128; - } while ((c & 128) != 0); -exit: - FUNC_EXIT_RC(len); - return len; -} - -int MQTTPacket_len(int rem_len){ - rem_len += 1; /* header byte */ - - /* now remaining_length field */ - if (rem_len < 128) - rem_len += 1; - else if (rem_len < 16384) - rem_len += 2; - else if (rem_len < 2097151) - rem_len += 3; - else - rem_len += 4; - return rem_len; -} - -static unsigned char* bufptr; -int bufchar(unsigned char* c, int count){ - int i; - - for (i = 0; i < count; ++i) - *c = *bufptr++; - return count; -} - -int MQTTPacket_decodeBuf(unsigned char* buf, int* value){ - bufptr = buf; - return MQTTPacket_decode(bufchar, value); -} - -/** - * Calculates an integer from two bytes read from the input buffer - * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned - * @return the integer value calculated - */ -int readInt(unsigned char** pptr){ - unsigned char* ptr = *pptr; - int len = 256*(*ptr) + (*(ptr+1)); - *pptr += 2; - return len; -} - -/** - * Reads one character from the input buffer. - * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned - * @return the character read - */ -char readChar(unsigned char** pptr){ - char c = **pptr; - (*pptr)++; - return c; -} - -/** - * Writes one character to an output buffer. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param c the character to write - */ -void writeChar(unsigned char** pptr, char c){ - **pptr = c; - (*pptr)++; -} - -/** - * Writes an integer as 2 bytes to an output buffer. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param anInt the integer to write - */ -void writeInt(unsigned char** pptr, int anInt){ - **pptr = (unsigned char)(anInt / 256); - (*pptr)++; - **pptr = (unsigned char)(anInt % 256); - (*pptr)++; -} - -/** - * Writes a "UTF" string to an output buffer. Converts C string to length-delimited. - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param string the C string to write - */ -void writeCString(unsigned char** pptr, const char* string){ - int len = strlen(string); - writeInt(pptr, len); - memcpy(*pptr, string, len); - *pptr += len; -} - -int getLenStringLen(char* ptr){ - int len = 256*((unsigned char)(*ptr)) + (unsigned char)(*(ptr+1)); - return len; -} - -void writeMQTTString(unsigned char** pptr, MQTTString mqttstring){ - if (mqttstring.lenstring.len > 0) - { - writeInt(pptr, mqttstring.lenstring.len); - memcpy(*pptr, mqttstring.lenstring.data, mqttstring.lenstring.len); - *pptr += mqttstring.lenstring.len; - } - else if (mqttstring.cstring) - writeCString(pptr, mqttstring.cstring); - else - writeInt(pptr, 0); -} -/** - * @param mqttstring the MQTTString structure into which the data is to be read - * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned - * @param enddata pointer to the end of the data: do not read beyond - * @return 1 if successful, 0 if not - */ -int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata){ - int rc = 0; - - FUNC_ENTRY; - /* the first two bytes are the length of the string */ - if (enddata - (*pptr) > 1) /* enough length to read the integer? */ - { - mqttstring->lenstring.len = readInt(pptr); /* increments pptr to point past length */ - if (&(*pptr)[mqttstring->lenstring.len] <= enddata) - { - mqttstring->lenstring.data = (char*)*pptr; - *pptr += mqttstring->lenstring.len; - rc = 1; - } - } - mqttstring->cstring = NULL; - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Return the length of the MQTTstring - C string if there is one, otherwise the length delimited string - * @param mqttstring the string to return the length of - * @return the length of the string - */ -int MQTTstrlen(MQTTString mqttstring){ - int rc = 0; - - if (mqttstring.cstring) - rc = strlen(mqttstring.cstring); - else - rc = mqttstring.lenstring.len; - return rc; -} - - -/** - * Compares an MQTTString to a C string - * @param a the MQTTString to compare - * @param bptr the C string to compare - * @return boolean - equal or not - */ -int MQTTPacket_equals(MQTTString* a, char* bptr){ - int alen = 0, - blen = 0; - char *aptr; - - if (a->cstring) - { - aptr = a->cstring; - alen = strlen(a->cstring); - } - else - { - aptr = a->lenstring.data; - alen = a->lenstring.len; - } - blen = strlen(bptr); - - return (alen == blen) && (strncmp(aptr, bptr, alen) == 0); -} - - -/** - * Helper function to read packet data from some source into a buffer - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param getfn pointer to a function which will read any number of bytes from the needed source - * @return integer MQTT packet type, or -1 on error - * @note the whole message must fit into the caller's buffer - */ -int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)){ - int rc = -1; - MQTTHeader header = {0}; - int len = 0; - int rem_len = 0; - - /* 1. 读取头字节。这里面有包类型 */ - if ((*getfn)(buf, 1) != 1) - goto exit; - - len = 1; - // 解码 - /* 2. 读剩下的长度。它本身是可变的 */ - MQTTPacket_decode(getfn, &rem_len); - /* 将原始的剩余长度放回缓冲区 */ - len += MQTTPacket_encode(buf + 1, rem_len); - - /* 3. read the rest of the buffer using a callback to supply the rest of the data */ - if((rem_len + len) > buflen) - goto exit; - if (rem_len && ((*getfn)(buf + len, rem_len) != rem_len)) - goto exit; - - header.byte = buf[0]; - rc = header.bits.type; -exit: - return rc; -} - -/** - * Decodes the message length according to the MQTT algorithm, non-blocking - * @param trp pointer to a transport structure holding what is needed to solve getting data from it - * @param value the decoded length returned - * @return integer the number of bytes read from the socket, 0 for call again, or -1 on error - */ -static int MQTTPacket_decodenb(MQTTTransport *trp){ - unsigned char c; - int rc = MQTTPACKET_READ_ERROR; - - FUNC_ENTRY; - if(trp->len == 0){ /* initialize on first call */ - trp->multiplier = 1; - trp->rem_len = 0; - } - do { - int frc; - if (trp->len >= MAX_NO_OF_REMAINING_LENGTH_BYTES) - goto exit; - if ((frc=(*trp->getfn)(trp->sck, &c, 1)) == -1) - goto exit; - if (frc == 0){ - rc = 0; - goto exit; - } - ++(trp->len); - trp->rem_len += (c & 127) * trp->multiplier; - trp->multiplier *= 128; - } while ((c & 128) != 0); - rc = trp->len; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - -/** - * Helper function to read packet data from some source into a buffer, non-blocking - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param trp pointer to a transport structure holding what is needed to solve getting data from it - * @return integer MQTT packet type, 0 for call again, or -1 on error - * @note the whole message must fit into the caller's buffer - */ -int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp){ - int rc = -1, frc; - MQTTHeader header = {0}; - - switch(trp->state){ - default: - trp->state = 0; - /*FALLTHROUGH*/ - case 0: - /* read the header byte. This has the packet type in it */ - if ((frc=(*trp->getfn)(trp->sck, buf, 1)) == -1) - goto exit; - if (frc == 0) - return 0; - trp->len = 0; - ++trp->state; - /*FALLTHROUGH*/ - /* read the remaining length. This is variable in itself */ - case 1: - if((frc=MQTTPacket_decodenb(trp)) == MQTTPACKET_READ_ERROR) - goto exit; - if(frc == 0) - return 0; - trp->len = 1 + MQTTPacket_encode(buf + 1, trp->rem_len); /* put the original remaining length back into the buffer */ - if((trp->rem_len + trp->len) > buflen) - goto exit; - ++trp->state; - /*FALLTHROUGH*/ - case 2: - if(trp->rem_len){ - /* read the rest of the buffer using a callback to supply the rest of the data */ - if ((frc=(*trp->getfn)(trp->sck, buf + trp->len, trp->rem_len)) == -1) - goto exit; - if (frc == 0) - return 0; - trp->rem_len -= frc; - trp->len += frc; - if(trp->rem_len) - return 0; - } - header.byte = buf[0]; - rc = header.bits.type; - break; - } - -exit: - trp->state = 0; - return rc; -} - diff --git a/firmware/stm32-esp/user/mqtt/MQTTPacket.h b/firmware/stm32-esp/user/mqtt/MQTTPacket.h deleted file mode 100644 index f333bb3b..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTPacket.h +++ /dev/null @@ -1,116 +0,0 @@ -#ifndef _MQTTPACKET_H_ -#define _MQTTPACKET_H_ - -#if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ -extern "C" { -#endif - -#if defined(WIN32_DLL) || defined(WIN64_DLL) - #define DLLImport __declspec(dllimport) - #define DLLExport __declspec(dllexport) -#elif defined(LINUX_SO) - #define DLLImport extern - #define DLLExport __attribute__ ((visibility ("default"))) -#else - #define DLLImport - #define DLLExport -#endif - -enum errors -{ - MQTTPACKET_BUFFER_TOO_SHORT = -2, - MQTTPACKET_READ_ERROR = -1, - MQTTPACKET_READ_COMPLETE -}; - -enum msgTypes -{ - CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, - PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, - PINGREQ, PINGRESP, DISCONNECT -}; - -/** - * Bitfields for the MQTT header byte. - */ -typedef union -{ - unsigned char byte; /**< the whole byte */ -#if defined(REVERSED) - struct - { - unsigned int type : 4; /**< message type nibble */ - unsigned int dup : 1; /**< DUP flag bit */ - unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ - unsigned int retain : 1; /**< retained flag bit */ - } bits; -#else - struct - { - unsigned int retain : 1; /**< retained flag bit */ - unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ - unsigned int dup : 1; /**< DUP flag bit */ - unsigned int type : 4; /**< message type nibble */ - } bits; -#endif -} MQTTHeader; - -typedef struct -{ - int len; - char* data; -} MQTTLenString; - -typedef struct -{ - char* cstring; - MQTTLenString lenstring; -} MQTTString; - -#define MQTTString_initializer {NULL, {0, NULL}} - -int MQTTstrlen(MQTTString mqttstring); - -#include "MQTTConnect.h" -#include "MQTTPublish.h" -#include "MQTTSubscribe.h" -#include "MQTTUnsubscribe.h" -#include "MQTTFormat.h" - -DLLExport int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char type, unsigned char dup, unsigned short packetid); -DLLExport int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen); - -int MQTTPacket_len(int rem_len); -DLLExport int MQTTPacket_equals(MQTTString* a, char* b); - -DLLExport int MQTTPacket_encode(unsigned char* buf, int length); -int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value); -int MQTTPacket_decodeBuf(unsigned char* buf, int* value); - -int readInt(unsigned char** pptr); -char readChar(unsigned char** pptr); -void writeChar(unsigned char** pptr, char c); -void writeInt(unsigned char** pptr, int anInt); -int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata); -void writeCString(unsigned char** pptr, const char* string); -void writeMQTTString(unsigned char** pptr, MQTTString mqttstring); - -DLLExport int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); - -typedef struct { - int (*getfn)(void *, unsigned char*, int); /* must return -1 for error, 0 for call again, or the number of bytes read */ - void *sck; /* pointer to whatever the system may use to identify the transport */ - int multiplier; - int rem_len; - int len; - char state; -}MQTTTransport; - -int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp); - -#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ -} -#endif - - -#endif /* MQTTPACKET_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/MQTTPublish.h b/firmware/stm32-esp/user/mqtt/MQTTPublish.h deleted file mode 100644 index ebe479dd..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTPublish.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTPUBLISH_H_ -#define MQTTPUBLISH_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -DLLExport int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, - MQTTString topicName, unsigned char* payload, int payloadlen); - -DLLExport int MQTTDeserialize_publish(unsigned char* dup, int* qos, unsigned char* retained, unsigned short* packetid, MQTTString* topicName, - unsigned char** payload, int* payloadlen, unsigned char* buf, int len); - -DLLExport int MQTTSerialize_puback(unsigned char* buf, int buflen, unsigned short packetid); -DLLExport int MQTTSerialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid); -DLLExport int MQTTSerialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid); - -#endif /* MQTTPUBLISH_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/MQTTSerializePublish.c b/firmware/stm32-esp/user/mqtt/MQTTSerializePublish.c deleted file mode 100644 index 5bdda7e9..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTSerializePublish.c +++ /dev/null @@ -1,145 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT publish packet that would be produced using the supplied parameters - * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) - * @param topicName the topic name to be used in the publish - * @param payloadlen the length of the payload to be sent - * @return the length of buffer needed to contain the serialized version of the packet - */ -int MQTTSerialize_publishLength(int qos, MQTTString topicName, int payloadlen){ - int len = 0; - - len += 2 + MQTTstrlen(topicName) + payloadlen; - if (qos > 0) - len += 2; /* packetid */ - return len; -} - - -/** - * Serializes the supplied publish data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param dup integer - the MQTT dup flag - * @param qos integer - the MQTT QoS value - * @param retained integer - the MQTT retained flag - * @param packetid integer - the MQTT packet identifier - * @param topicName MQTTString - the MQTT topic in the publish - * @param payload byte buffer - the MQTT publish payload - * @param payloadlen integer - the length of the MQTT payload - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, unsigned short packetid, - MQTTString topicName, unsigned char* payload, int payloadlen){ - unsigned char *ptr = buf; - MQTTHeader header = {0}; - int rem_len = 0; - int rc = 0; - - FUNC_ENTRY; - if (MQTTPacket_len(rem_len = MQTTSerialize_publishLength(qos, topicName, payloadlen)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.bits.type = PUBLISH; - header.bits.dup = dup; - header.bits.qos = qos; - header.bits.retain = retained; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; - - writeMQTTString(&ptr, topicName); - - if (qos > 0) - writeInt(&ptr, packetid); - - memcpy(ptr, payload, payloadlen); - ptr += payloadlen; - - rc = ptr - buf; - -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Serializes the ack packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param type the MQTT packet type - * @param dup the MQTT dup flag - * @param packetid the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char packettype, unsigned char dup, unsigned short packetid){ - MQTTHeader header = {0}; - int rc = 0; - unsigned char *ptr = buf; - - FUNC_ENTRY; - if (buflen < 4) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.bits.type = packettype; - header.bits.dup = dup; - header.bits.qos = (packettype == PUBREL) ? 1 : 0; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ - writeInt(&ptr, packetid); - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes a puback packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int MQTTSerialize_puback(unsigned char* buf, int buflen, unsigned short packetid){ - return MQTTSerialize_ack(buf, buflen, PUBACK, 0, packetid); -} - - -/** - * Serializes a pubrel packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int MQTTSerialize_pubrel(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid){ - return MQTTSerialize_ack(buf, buflen, PUBREL, dup, packetid); -} - - -/** - * Serializes a pubrel packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @return serialized length, or error if 0 - */ -int MQTTSerialize_pubcomp(unsigned char* buf, int buflen, unsigned short packetid){ - return MQTTSerialize_ack(buf, buflen, PUBCOMP, 0, packetid); -} - - diff --git a/firmware/stm32-esp/user/mqtt/MQTTSubscribe.h b/firmware/stm32-esp/user/mqtt/MQTTSubscribe.h deleted file mode 100644 index aa918268..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTSubscribe.h +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTSUBSCRIBE_H_ -#define MQTTSUBSCRIBE_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -DLLExport int MQTTSerialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, MQTTString topicFilters[], int requestedQoSs[]); - -DLLExport int MQTTDeserialize_subscribe(unsigned char* dup, unsigned short* packetid, - int maxcount, int* count, MQTTString topicFilters[], int requestedQoSs[], unsigned char* buf, int len); - -DLLExport int MQTTSerialize_suback(unsigned char* buf, int buflen, unsigned short packetid, int count, int* grantedQoSs); - -DLLExport int MQTTDeserialize_suback(unsigned short* packetid, int maxcount, int* count, int grantedQoSs[], unsigned char* buf, int len); - - -#endif /* MQTTSUBSCRIBE_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/MQTTSubscribeClient.c b/firmware/stm32-esp/user/mqtt/MQTTSubscribeClient.c deleted file mode 100644 index 3d56ffc7..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTSubscribeClient.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -int MQTTSerialize_subscribeLength(int count, MQTTString topicFilters[]){ - int i; - int len = 2; /* packetid */ - - for (i = 0; i < count; ++i) - len += 2 + MQTTstrlen(topicFilters[i]) + 1; /* length + topic + req_qos */ - return len; -} - - -/** - * Serializes the supplied subscribe data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied bufferr - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @param count - number of members in the topicFilters and reqQos arrays - * @param topicFilters - array of topic filter names - * @param requestedQoSs - array of requested QoS - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTSerialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, int count, - MQTTString topicFilters[], int requestedQoSs[]){ - unsigned char *ptr = buf; - MQTTHeader header = {0}; - int rem_len = 0; - int rc = 0; - int i = 0; - - FUNC_ENTRY; - if (MQTTPacket_len(rem_len = MQTTSerialize_subscribeLength(count, topicFilters)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = SUBSCRIBE; - header.bits.dup = dup; - header.bits.qos = 1; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; - - writeInt(&ptr, packetid); - - for (i = 0; i < count; ++i) - { - writeMQTTString(&ptr, topicFilters[i]); - writeChar(&ptr, requestedQoSs[i]); - } - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - - -/** - * Deserializes the supplied (wire) buffer into suback data - * @param packetid returned integer - the MQTT packet identifier - * @param maxcount - the maximum number of members allowed in the grantedQoSs array - * @param count returned integer - number of members in the grantedQoSs array - * @param grantedQoSs returned array of integers - the granted qualities of service - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int MQTTDeserialize_suback(unsigned short* packetid, int maxcount, int* count, int grantedQoSs[], unsigned char* buf, int buflen){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != SUBACK) - goto exit; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - if (enddata - curdata < 2) - goto exit; - - *packetid = readInt(&curdata); - - *count = 0; - while (curdata < enddata) - { - if (*count > maxcount) - { - rc = -1; - goto exit; - } - grantedQoSs[(*count)++] = readChar(&curdata); - } - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/firmware/stm32-esp/user/mqtt/MQTTSubscribeServer.c b/firmware/stm32-esp/user/mqtt/MQTTSubscribeServer.c deleted file mode 100644 index ed61ace5..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTSubscribeServer.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include -/** - * Deserializes the supplied (wire) buffer into subscribe data - * @param dup integer returned - the MQTT dup flag - * @param packetid integer returned - the MQTT packet identifier - * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays - * @param count - number of members in the topicFilters and requestedQoSs arrays - * @param topicFilters - array of topic filter names - * @param requestedQoSs - array of requested QoS - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTDeserialize_subscribe(unsigned char* dup, unsigned short* packetid, int maxcount, int* count, MQTTString topicFilters[], - int requestedQoSs[], unsigned char* buf, int buflen){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = -1; - int mylen = 0; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != SUBSCRIBE) - goto exit; - *dup = header.bits.dup; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - *packetid = readInt(&curdata); - - *count = 0; - while (curdata < enddata) - { - if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) - goto exit; - if (curdata >= enddata) /* do we have enough data to read the req_qos version byte? */ - goto exit; - requestedQoSs[*count] = readChar(&curdata); - (*count)++; - } - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes the supplied suback data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @param count - number of members in the grantedQoSs array - * @param grantedQoSs - array of granted QoS - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTSerialize_suback(unsigned char* buf, int buflen, unsigned short packetid, int count, int* grantedQoSs){ - MQTTHeader header = {0}; - int rc = -1; - unsigned char *ptr = buf; - int i; - - FUNC_ENTRY; - if (buflen < 2 + count) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.byte = 0; - header.bits.type = SUBACK; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, 2 + count); /* write remaining length */ - - writeInt(&ptr, packetid); - - for (i = 0; i < count; ++i) - writeChar(&ptr, grantedQoSs[i]); - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribe.h b/firmware/stm32-esp/user/mqtt/MQTTUnsubscribe.h deleted file mode 100644 index 355ca9a4..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribe.h +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Xiang Rong - 442039 Add makefile to Embedded C client - *******************************************************************************/ - -#ifndef MQTTUNSUBSCRIBE_H_ -#define MQTTUNSUBSCRIBE_H_ - -#if !defined(DLLImport) - #define DLLImport -#endif -#if !defined(DLLExport) - #define DLLExport -#endif - -DLLExport int MQTTSerialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, MQTTString topicFilters[]); - -DLLExport int MQTTDeserialize_unsubscribe(unsigned char* dup, unsigned short* packetid, int max_count, int* count, MQTTString topicFilters[], - unsigned char* buf, int len); - -DLLExport int MQTTSerialize_unsuback(unsigned char* buf, int buflen, unsigned short packetid); - -DLLExport int MQTTDeserialize_unsuback(unsigned short* packetid, unsigned char* buf, int len); - -#endif /* MQTTUNSUBSCRIBE_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeClient.c b/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeClient.c deleted file mode 100644 index 30e20e8f..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeClient.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -int MQTTSerialize_unsubscribeLength(int count, MQTTString topicFilters[]){ - int i; - int len = 2; /* packetid */ - - for (i = 0; i < count; ++i) - len += 2 + MQTTstrlen(topicFilters[i]); /* length + topic*/ - return len; -} - - -/** - * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @param dup integer - the MQTT dup flag - * @param packetid integer - the MQTT packet identifier - * @param count - number of members in the topicFilters array - * @param topicFilters - array of topic filter names - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTSerialize_unsubscribe(unsigned char* buf, int buflen, unsigned char dup, unsigned short packetid, - int count, MQTTString topicFilters[]){ - unsigned char *ptr = buf; - MQTTHeader header = {0}; - int rem_len = 0; - int rc = -1; - int i = 0; - - FUNC_ENTRY; - if (MQTTPacket_len(rem_len = MQTTSerialize_unsubscribeLength(count, topicFilters)) > buflen) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - - header.byte = 0; - header.bits.type = UNSUBSCRIBE; - header.bits.dup = dup; - header.bits.qos = 1; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; - - writeInt(&ptr, packetid); - - for (i = 0; i < count; ++i) - writeMQTTString(&ptr, topicFilters[i]); - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Deserializes the supplied (wire) buffer into unsuback data - * @param packetid returned integer - the MQTT packet identifier - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int MQTTDeserialize_unsuback(unsigned short* packetid, unsigned char* buf, int buflen){ - unsigned char type = 0; - unsigned char dup = 0; - int rc = 0; - - FUNC_ENTRY; - rc = MQTTDeserialize_ack(&type, &dup, packetid, buf, buflen); - if (type == UNSUBACK) - rc = 1; - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeServer.c b/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeServer.c deleted file mode 100644 index 565c7e87..00000000 --- a/firmware/stm32-esp/user/mqtt/MQTTUnsubscribeServer.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "MQTTPacket.h" -#include "StackTrace.h" - -#include - -/** - * Deserializes the supplied (wire) buffer into unsubscribe data - * @param dup integer returned - the MQTT dup flag - * @param packetid integer returned - the MQTT packet identifier - * @param maxcount - the maximum number of members allowed in the topicFilters and requestedQoSs arrays - * @param count - number of members in the topicFilters and requestedQoSs arrays - * @param topicFilters - array of topic filter names - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTDeserialize_unsubscribe(unsigned char* dup, unsigned short* packetid, int maxcount, int* count, MQTTString topicFilters[], - unsigned char* buf, int len){ - MQTTHeader header = {0}; - unsigned char* curdata = buf; - unsigned char* enddata = NULL; - int rc = 0; - int mylen = 0; - - FUNC_ENTRY; - header.byte = readChar(&curdata); - if (header.bits.type != UNSUBSCRIBE) - goto exit; - *dup = header.bits.dup; - - curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen)); /* read remaining length */ - enddata = curdata + mylen; - - *packetid = readInt(&curdata); - - *count = 0; - while (curdata < enddata) - { - if (!readMQTTLenString(&topicFilters[*count], &curdata, enddata)) - goto exit; - (*count)++; - } - - rc = 1; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - -/** - * Serializes the supplied unsuback data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buflen the length in bytes of the supplied buffer - * @param packetid integer - the MQTT packet identifier - * @return the length of the serialized data. <= 0 indicates error - */ -int MQTTSerialize_unsuback(unsigned char* buf, int buflen, unsigned short packetid){ - MQTTHeader header = {0}; - int rc = 0; - unsigned char *ptr = buf; - - FUNC_ENTRY; - if (buflen < 2) - { - rc = MQTTPACKET_BUFFER_TOO_SHORT; - goto exit; - } - header.byte = 0; - header.bits.type = UNSUBACK; - writeChar(&ptr, header.byte); /* write header */ - - ptr += MQTTPacket_encode(ptr, 2); /* write remaining length */ - - writeInt(&ptr, packetid); - - rc = ptr - buf; -exit: - FUNC_EXIT_RC(rc); - return rc; -} - - diff --git a/firmware/stm32-esp/user/mqtt/StackTrace.h b/firmware/stm32-esp/user/mqtt/StackTrace.h deleted file mode 100644 index 03496fe0..00000000 --- a/firmware/stm32-esp/user/mqtt/StackTrace.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef STACKTRACE_H_ -#define STACKTRACE_H_ - -#include -#define NOSTACKTRACE 1 - -#if defined(NOSTACKTRACE) -#define FUNC_ENTRY -#define FUNC_ENTRY_NOLOG -#define FUNC_ENTRY_MED -#define FUNC_ENTRY_MAX -#define FUNC_EXIT -#define FUNC_EXIT_NOLOG -#define FUNC_EXIT_MED -#define FUNC_EXIT_MAX -#define FUNC_EXIT_RC(x) -#define FUNC_EXIT_MED_RC(x) -#define FUNC_EXIT_MAX_RC(x) - -#else - -#if defined(WIN32) -#define inline __inline -#define FUNC_ENTRY StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MINIMUM) -#define FUNC_ENTRY_NOLOG StackTrace_entry(__FUNCTION__, __LINE__, -1) -#define FUNC_ENTRY_MED StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MEDIUM) -#define FUNC_ENTRY_MAX StackTrace_entry(__FUNCTION__, __LINE__, TRACE_MAXIMUM) -#define FUNC_EXIT StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MINIMUM) -#define FUNC_EXIT_NOLOG StackTrace_exit(__FUNCTION__, __LINE__, -1) -#define FUNC_EXIT_MED StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MEDIUM) -#define FUNC_EXIT_MAX StackTrace_exit(__FUNCTION__, __LINE__, NULL, TRACE_MAXIMUM) -#define FUNC_EXIT_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MINIMUM) -#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MEDIUM) -#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__FUNCTION__, __LINE__, &x, TRACE_MAXIMUM) -#else -#define FUNC_ENTRY StackTrace_entry(__func__, __LINE__, TRACE_MINIMUM) -#define FUNC_ENTRY_NOLOG StackTrace_entry(__func__, __LINE__, -1) -#define FUNC_ENTRY_MED StackTrace_entry(__func__, __LINE__, TRACE_MEDIUM) -#define FUNC_ENTRY_MAX StackTrace_entry(__func__, __LINE__, TRACE_MAXIMUM) -#define FUNC_EXIT StackTrace_exit(__func__, __LINE__, NULL, TRACE_MINIMUM) -#define FUNC_EXIT_NOLOG StackTrace_exit(__func__, __LINE__, NULL, -1) -#define FUNC_EXIT_MED StackTrace_exit(__func__, __LINE__, NULL, TRACE_MEDIUM) -#define FUNC_EXIT_MAX StackTrace_exit(__func__, __LINE__, NULL, TRACE_MAXIMUM) -#define FUNC_EXIT_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MINIMUM) -#define FUNC_EXIT_MED_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MEDIUM) -#define FUNC_EXIT_MAX_RC(x) StackTrace_exit(__func__, __LINE__, &x, TRACE_MAXIMUM) - -void StackTrace_entry(const char* name, int line, int trace); -void StackTrace_exit(const char* name, int line, void* return_value, int trace); - -void StackTrace_printStack(FILE* dest); -char* StackTrace_get(unsigned long); - -#endif - -#endif - - - - -#endif /* STACKTRACE_H_ */ diff --git a/firmware/stm32-esp/user/mqtt/mqtt.c b/firmware/stm32-esp/user/mqtt/mqtt.c new file mode 100644 index 00000000..c7195543 --- /dev/null +++ b/firmware/stm32-esp/user/mqtt/mqtt.c @@ -0,0 +1,333 @@ +#include "mqtt.h" + +/* 数据采用大端模式,高字节先发 + UTF-8 "长度 + 字符串" + + 控制报文包含:固定包头+可变包头+有效负载 + 固定包头 byte1(报文类型(bit7-4)+类型标识(bit3-0)) + byte2(剩余长度,包含可变包头和有效负载长度,最大128字节) + 两个字节的计算方式: + 两个字节的计算方式:剩余长度=(Byte1-128)+Byte2*128 +*/ +/***计算剩余字节数***/ +uint8_t by[4] = {0}; +uint8_t MQTTSCode_CalcSurplusByte(uint32_t str){ + uint8_t i = 0; + do + { + by[i] = str%128; + str = str/128; + if(str > 0) + { + by[i] = by[i] | 128; + i++; + } + } while(str > 0); + return i; +} + +MQTT_ConnectData_t MQTT_ConnectData; +static uint8_t StringData[500] = {0}; +static uint8_t StringLen = 0; +static uint16_t waittime = 200; +static uint16_t NewSite = 0; +// 连接服务器 +uint8_t MQTTSCode_Connect(void) { + waittime = 500; + + memset((void *)StringData, 0, sizeof(StringData)); + + /*固定包头*/ + StringData[0] = (uint8_t)(CONNECT<<4) + 0;// 固定帧头 + StringData[1] = 0x00;// 剩余长度值 + /***可变包头***/ + // 协议名 + StringData[2] = 0x00; + StringData[3] = 0x04; + StringData[4] = 'M'; + StringData[5] = 'Q'; + StringData[6] = 'T'; + StringData[7] = 'T'; + + // 协议版本V3.1.1 + StringData[8] = 0x04; + + /* 连接标识 使能用户名和密码校验,不使用遗嘱,不保留会话 + * 1bit 清理会话 + * 2bit 遗嘱标识 + * 3bit 遗嘱QoS + * 4bit 遗嘱QoS + * 5bit 遗嘱保留 + * 6bit 用户名标识 + * 7bit 密码标识 + */ + StringData[9] = 0xC2; + + // 保活时间 + StringData[10] = (uint8_t)(MQTT_ConnectData.keepAlive>>8); + StringData[11] = (uint8_t)(MQTT_ConnectData.keepAlive>>0); + + // 客户端ID + NewSite = 12; + StringLen = strlen((const char*)MQTT_ConnectData.clientID); + StringData[NewSite] = (uint8_t)(StringLen>>8); + StringData[NewSite+1] = (uint8_t)(StringLen>>0); + memcpy( &StringData[NewSite+2], MQTT_ConnectData.clientID, StringLen); + NewSite = NewSite + 2 + StringLen; + + // 用户名 + StringLen = strlen((const char*)MQTT_ConnectData.username); + StringData[NewSite] = (uint8_t)(StringLen>>8); + StringData[NewSite+1]= (uint8_t)(StringLen>>0); + memcpy( &StringData[NewSite+2], MQTT_ConnectData.username, StringLen); + NewSite = NewSite + 2 + StringLen; + + // 密码 + StringLen = strlen((const char*)MQTT_ConnectData.password); + StringData[NewSite] = (uint8_t)(StringLen>>8); + StringData[NewSite+1] = (uint8_t)(StringLen>>0); + memcpy( &StringData[NewSite+2], MQTT_ConnectData.password, StringLen); + NewSite = NewSite + 2 + StringLen; + + // 剩余长度 + if(NewSite < 127) + StringData[1] = NewSite - 2; + else + return 1; + + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + + Dev_UART2SendStr(StringData, NewSite, 0); + + // 等待回应 + if(waittime) { + while(--waittime) + { + Delay_ms(10); + if(UART2ReadFlag&0x8000) + { + if(((UART2ReadBuf[0]>>4)==CONNACK)&&(UART2ReadBuf[1]==2)) + { + if(UART2ReadBuf[3]==0){ + UART2ReadFlag = 0; + return 0; + } + else{ + UART2ReadFlag = 0; + while(1); + } + } + } + } + if(waittime==0) + return 1; + } + return 1; +} +// 订阅 服务质量 +uint8_t MQTTSCode_Subscribe(char *topic, uint8_t qos, uint8_t bsf) { + waittime = 500; + + memset((void *)StringData, 0, sizeof(StringData)); + + /*固定包头*/ + StringData[0] = (uint8_t)(SUBSCRIBE<<4) + (uint8_t)(1<<1);// 固定帧头 + StringData[1] = 0x00;// 剩余长度值 + /*可变包头*/ + // 报文标识符 + NewSite = 2; + StringData[NewSite] = (uint8_t)(bsf>>8); + StringData[NewSite+1] = (uint8_t)(bsf>>0); + NewSite = NewSite + 2; + // 有效负载 + // 主题 + StringLen = strlen((const char*)topic); + StringData[NewSite] = (uint8_t)(StringLen>>8); + StringData[NewSite+1] = (uint8_t)(StringLen>>0); + memcpy( &StringData[NewSite+2], topic, StringLen); + NewSite = NewSite + 2 + StringLen; + // 服务质量 + StringData[NewSite] = (uint8_t)(qos>>0); + NewSite = NewSite + 1; + + // 剩余长度 + if(NewSite < 127) + StringData[1] = NewSite - 2; + else + return 1; + + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + + Dev_UART2SendStr(StringData, NewSite, 0); + + if(waittime) { + while(--waittime) + { + Delay_ms(10); + if(UART2ReadFlag&0x8000) + { + if((UART2ReadBuf[0]>>4)==SUBACK) + { + UART2ReadFlag = 0; + return 0; + } + } + } + if(waittime==0) + return 1; + } + return 1; +} +// 发布,暂定负载小于100字节 +// qos 0最多发送一次,1至少分发一次,2只分发一次 +uint16_t wait = 0; +uint16_t byte1 = 0,byte2 = 0; +uint8_t MQTTSCode_Publish(char *topic, char *payload, uint16_t payloadLen, uint8_t dup, uint8_t qos, uint16_t bsf) { + waittime = 500; + + memset((void *)StringData, 0, sizeof(StringData)); + + /*固定包头*/ + StringData[0] = (uint8_t)(PUBLISH<<4) + (uint8_t)(dup<<3) + (uint8_t)(qos<<1);// 固定帧头 + StringData[1] = 0x00;// 剩余长度值 + /*可变包头*/ + // 主题名 + NewSite = 2; + StringLen = strlen((const char*)topic); + StringData[NewSite] = (uint8_t)(StringLen>>8); + StringData[NewSite+1] = (uint8_t)(StringLen>>0); + memcpy( &StringData[NewSite+2], topic, StringLen); + NewSite = NewSite + 2 + StringLen; + + // 报文标识符 + if((qos==1) || (qos==2)) { + StringData[NewSite] = (uint8_t)(bsf>>8); + StringData[NewSite+1] = (uint8_t)(bsf>>0); + NewSite = NewSite + 2; + } + // 有效负载 + StringLen = payloadLen; + if(StringLen > 0) { + memcpy( &StringData[NewSite], payload, StringLen); + NewSite = NewSite + StringLen; + } + // 剩余长度 + byte1 = 0; + byte2 = 0; + if(NewSite <= 129) { + StringData[1] = NewSite - 2; + } + else + { + wait = NewSite - 2; + byte1 = wait%128; + wait = wait/128; + if(wait > 0) + { + byte1 = byte1 | 128; + byte2 = wait%128; + StringData[1] = byte1; + } + } + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + Dev_UART2SendStr(StringData, NewSite, byte2); + + // 没有回复消息 + if((qos==1)||(qos==2)) { + if(waittime) { + while(--waittime) + { + Delay_ms(10); + if(UART2ReadFlag&0x8000) + { + if(((UART2ReadBuf[0]>>4)==PUBACK)&&(UART2ReadBuf[1]==2)&&(qos==1)) + { + UART2ReadFlag = 0; + return 0; + } +// if(((UART2ReadBuf[0]>>4)==PUBREC)&&(UART2ReadBuf[1]==2)&&(qos==2)) +// { +// UART2ReadFlag = 0; +// return 0; +// } + } + } + } + if(waittime==0) + return 1; + } + else + { + return 0; + } + return 1; +} +// 心跳 服务质量 +uint8_t MQTTSCode_KeepAlive(void) { + waittime = 500; + + memset((void *)StringData, 0, sizeof(StringData)); + + /*固定包头*/ + StringData[0] = (uint8_t)(PINGREQ<<4) + 0;// 固定帧头 + StringData[1] = 0x00; + + NewSite = 2; + + // 剩余长度 + if(NewSite < 127) + StringData[1] = NewSite - 2; + else + return 1; + + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + + Dev_UART2SendStr(StringData, NewSite, 0); + + if(waittime) { + while(--waittime) + { + Delay_ms(10); + if(UART2ReadFlag&0x8000) + { + if((UART2ReadBuf[0]>>4)==PINGRESP) + { + UART2ReadFlag = 0; + return 0; + } + } + } + if(waittime==0) + return 1; + } + return 1; +} +// 断开连接 +uint8_t MQTTSCode_DisConnect(void) { + + memset((void *)StringData, 0, sizeof(StringData)); + + /*固定包头*/ + StringData[0] = (uint8_t)(DISCONNECT<<4) + 0;// 固定帧头 + StringData[1] = 0x00; // 剩余长度值 + + NewSite = 2; + + // 剩余长度 + if(NewSite < 127) + StringData[1] = NewSite - 2; + else + return 1; + + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + + Dev_UART2SendStr(StringData, NewSite, 0); + + // 断开网络连接 + + return 0; +} diff --git a/firmware/stm32-esp/user/mqtt/mqtt.h b/firmware/stm32-esp/user/mqtt/mqtt.h new file mode 100644 index 00000000..bbfc06d8 --- /dev/null +++ b/firmware/stm32-esp/user/mqtt/mqtt.h @@ -0,0 +1,56 @@ +#ifndef _MQTT_H_ +#define _MQTT_H_ + +#include "stm32f10x.h" + +#include "esp8266_uart2.h" + +#include "stdio.h" + +#include "string.h" + +#include "stdarg.h" + +#include "cJSON.h" + +typedef enum +{ + CONNECT = 1, + CONNACK = 2, + + PUBLISH = 3, + PUBACK = 4, + PUBREC = 5, + PUBREL = 6, + PUBCOMP = 7, + + SUBSCRIBE = 8, + SUBACK = 9, + UNSUBSCRIBE = 10, + UNSUBACK = 11, + + PINGREQ = 12, + PINGRESP = 13, + DISCONNECT = 14 +}msgTypes; + +typedef struct +{ + unsigned short keepAlive; + + char clientID[50]; + char username[50]; + char password[50]; +} MQTT_ConnectData_t; +extern MQTT_ConnectData_t MQTT_ConnectData; + +uint8_t MQTTSCode_Connect(void); +/*订阅 服务质量*/ +uint8_t MQTTSCode_Subscribe(char *topic, uint8_t qos, uint8_t bsf); +/*发布,暂定负载小于100字节*/ +uint8_t MQTTSCode_Publish(char *topic, char *payload, uint16_t payloadLen, uint8_t dup, uint8_t qos, uint16_t bsf); +uint8_t MQTTSCode_KeepAlive(void); // 心跳 服务质量 +uint8_t MQTTSCode_DisConnect(void);// 断开连接 +#endif + + diff --git a/firmware/stm32-esp/user/show/dev_work.c b/firmware/stm32-esp/user/show/dev_work.c index dfa42f6f..6078658d 100644 --- a/firmware/stm32-esp/user/show/dev_work.c +++ b/firmware/stm32-esp/user/show/dev_work.c @@ -1,7 +1,6 @@ #include "dev_work.h" -void Dev_ScanExtIndicate(void) -{ +void Dev_ScanExtIndicate(void) { /*开机检测*/ if(DevParam.RunPhase==0) { diff --git a/firmware/stm32-esp/user/show/esp8266_uart2.c b/firmware/stm32-esp/user/show/esp8266_uart2.c index 08c99912..a1c6d713 100644 --- a/firmware/stm32-esp/user/show/esp8266_uart2.c +++ b/firmware/stm32-esp/user/show/esp8266_uart2.c @@ -1,8 +1,7 @@ #include "esp8266_uart2.h" //检测应答命令 -static uint8_t* ESP8266_CheckCmd(uint8_t *str) -{ +static uint8_t* ESP8266_CheckCMD(uint8_t *str){ char *strx = 0; if(UART2ReadFlag&0x8000) { @@ -15,19 +14,19 @@ static uint8_t* ESP8266_CheckCmd(uint8_t *str) //cmd:发送的命令字符串 //ack:期待的应答结果,如果为空,则表示不需要等待应答 //返回值:0,发送成功 1,发送失败 -static uint8_t ESP8266_SendCmd(uint8_t *cmd,uint8_t *ack,uint16_t waittime) { +uint8_t ESP8266_SendCMD(uint8_t *cmd,uint8_t *ack,uint16_t waittime) { UART2ReadFlag = 0; memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); - Dev_UART2SendStr("%s\r\n", cmd);//发送命令 - if(ack&&waittime) //需要等待应答 + Dev_UART2SendStr(cmd, 0, 0); + if(ack&&waittime) { - while(--waittime) //等待倒计时 + while(--waittime) { Delay_ms(10); if(UART2ReadFlag&0x8000) { - if(ESP8266_CheckCmd(ack)) + if(ESP8266_CheckCMD(ack)) { UART2ReadFlag = 0; return 0; @@ -46,9 +45,8 @@ static uint8_t ESP8266_SendCmd(uint8_t *cmd,uint8_t *ack,uint16_t waittime) { } return 1; } -uint8_t ESP8266_SendStr(char* fmt,...) -{ - uint8_t tbuf[200] = {0}; +uint8_t ESP8266_SendStr(char* fmt,...){ + uint8_t tbuf[300] = {0}; uint16_t i = 0,j = 0; va_list ap; @@ -67,8 +65,7 @@ uint8_t ESP8266_SendStr(char* fmt,...) return 0; } -uint8_t ESP8266_SendData(uint8_t *tbuf, uint16_t len) -{ +uint8_t ESP8266_SendData(uint8_t *tbuf, uint16_t len){ uint16_t i = 0; for( i = 0; i < len; i++) { @@ -82,13 +79,13 @@ uint8_t ESP8266_SendData(uint8_t *tbuf, uint16_t len) void ESP8266_GetLocalIP(uint8_t* ipbuf){ uint8_t *p,*p1; - if(ESP8266_SendCmd( (uint8_t *)"AT+CIFSR", (uint8_t *)"OK", 50)) + if(ESP8266_SendCMD( (uint8_t *)"AT+CIFSR\r\n", (uint8_t *)"OK", 50)) { ipbuf[0] = 0; return; } - p = ESP8266_CheckCmd((uint8_t *)"\""); + p = ESP8266_CheckCMD((uint8_t *)"\""); p1 = (uint8_t *)strstr((const char*)(p+1),"\""); *p1=0; sprintf((char*)ipbuf,"%s",p+1); @@ -105,12 +102,12 @@ uint8_t ESP8266_QuitTrans(void){ while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET){}; USART_SendData(USART2, '+'); Delay_ms(500); //等待500ms - return ESP8266_SendCmd((uint8_t *)"AT",(uint8_t *)"OK",20);//退出透传判断 + return ESP8266_SendCMD((uint8_t *)"AT\r\n",(uint8_t *)"OK",20);//退出透传判断 } //获取连接状态 0,未连接;1,连接成功. uint8_t ESP8266_ConstaCheck(void){ - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSTATUS",(uint8_t *)"OK",50)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSTATUS\r\n",(uint8_t *)"OK",50)); return 0; } @@ -123,26 +120,26 @@ uint8_t ESP8266_APInit(char *name, char *password){ Delay_ms(1000); Delay_ms(1000); - while(ESP8266_SendCmd((uint8_t *)"AT",(uint8_t *)"OK",200)) + while(ESP8266_SendCMD((uint8_t *)"AT\r\n",(uint8_t *)"OK",200)) {//退出透传 ESP8266_QuitTrans(); //关闭透传模式 - ESP8266_SendCmd((uint8_t *)"AT+CIPMODE=0",(uint8_t *)"OK",200); + ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=0\r\n",(uint8_t *)"OK",200); Delay_ms(1000); } // 关闭回显 - while(ESP8266_SendCmd((uint8_t *)"ATE0",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"ATE0\r\n",(uint8_t *)"OK",200)); // 设置波特率 - while(ESP8266_SendCmd((uint8_t *)"AT+UART=115200,8,1,0,0",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+UART=115200,8,1,0,0\r\n",(uint8_t *)"OK",200)); Delay_ms(10); // 设置WIFI AP模式 - while(ESP8266_SendCmd((uint8_t *)"AT+CWMODE=2",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+RST",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CWMODE=2\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+RST\r\n",(uint8_t *)"OK",200)); // 延时4秒等待重启成功 Delay_ms(1000); @@ -151,17 +148,17 @@ uint8_t ESP8266_APInit(char *name, char *password){ Delay_ms(1000); memset(Sbuf, 0 , sizeof(Sbuf)); - sprintf((char*)Sbuf, "AT+CWSAP=\"%s\",\"%s\",1,4", name, password); - while(ESP8266_SendCmd(Sbuf, (uint8_t *)"OK", 1000)); + sprintf((char*)Sbuf, "AT+CWSAP=\"%s\",\"%s\",1,4\r\n", name, password); + while(ESP8266_SendCMD(Sbuf, (uint8_t *)"OK", 1000)); #ifdef TCP_Mode #endif #ifdef UDP_Mode - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMUX=0",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSTART=\"UDP\",\"255.255.255.255\",60156,42254,0",(uint8_t *)"OK",500)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMODE=1",(uint8_t *)"OK",300)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSEND",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMUX=0\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSTART=\"UDP\",\"255.255.255.255\",60156,42254,0\r\n",(uint8_t *)"OK",500)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=1\r\n",(uint8_t *)"OK",300)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSEND\r\n",(uint8_t *)"OK",200)); #endif UART2ReadFlag = 0; @@ -172,24 +169,33 @@ uint8_t ESP8266_STAConnect(char *name, char *password){ uint8_t Sbuf[60] ={0}; memset(Sbuf, 0 , sizeof(Sbuf)); - sprintf((char*)Sbuf,"AT+CWJAP=\"%s\",\"%s\"", name, password); - if(ESP8266_SendCmd( Sbuf, (uint8_t *)"WIFI GOT IP", 100)){ + sprintf((char*)Sbuf,"AT+CWJAP=\"%s\",\"%s\"\r\n", name, password); + if(ESP8266_SendCMD( Sbuf, (uint8_t *)"WIFI GOT IP", 100)){ return 1; } - else { - #ifdef TCP_Mode - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMUX=0",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSTART=\"TCP\",\"192.168.0.102\",8086",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMODE=1",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSEND",(uint8_t *)"OK",20)); - #endif - #ifdef UDP_Mode - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMUX=0",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSTART=\"UDP\",\"192.168.1.6\",8086,8086,0",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPMODE=1",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+CIPSEND",(uint8_t *)"OK",20)); - #endif - + else + { + #ifdef MQTT_AT + + #elif MQTT_SCode + + #elif TCP_Mode + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMUX=0\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSTART=\"TCP\",\"192.168.0.102\",8086\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=1\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSEND\r\n",(uint8_t *)"OK",20)); + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + return 0; + #elif UDP_Mode + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMUX=0\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSTART=\"UDP\",\"192.168.1.6\",8086,8086,0\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=1\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSEND\r\n",(uint8_t *)"OK",20)); + UART2ReadFlag = 0; + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + return 0; + #endif UART2ReadFlag = 0; memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); return 0; @@ -202,33 +208,30 @@ uint8_t ESP8266_STAInit(void){ // 延时2秒等待串口初始化完成 Delay_ms(1000); Delay_ms(1000); - while(ESP8266_SendCmd((uint8_t *)"AT",(uint8_t *)"OK",200)) + while(ESP8266_SendCMD((uint8_t *)"AT\r\n",(uint8_t *)"OK",200)) { //退出透传 ESP8266_QuitTrans(); //关闭透传模式 - ESP8266_SendCmd((uint8_t *)"AT+CIPMODE=0",(uint8_t *)"OK",200); + ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=0\r\n",(uint8_t *)"OK",200); Delay_ms(800); } // 关闭回显 - while(ESP8266_SendCmd((uint8_t *)"ATE0",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"ATE0\r\n",(uint8_t *)"OK",200)); // 设置波特率 - while(ESP8266_SendCmd((uint8_t *)"AT+UART=115200,8,1,0,0",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+UART=115200,8,1,0,0\r\n",(uint8_t *)"OK",200)); Delay_ms(10); // 设置WIFI STA模式 - while(ESP8266_SendCmd((uint8_t *)"AT+CWMODE=1",(uint8_t *)"OK",200)); - while(ESP8266_SendCmd((uint8_t *)"AT+RST",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CWMODE=1\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+RST\r\n",(uint8_t *)"OK",200)); Delay_ms(1000); Delay_ms(1000); Delay_ms(1000); - Delay_ms(1000); - - return 1; } diff --git a/firmware/stm32-esp/user/show/esp8266_uart2.h b/firmware/stm32-esp/user/show/esp8266_uart2.h index a8d1276c..a3654a8a 100644 --- a/firmware/stm32-esp/user/show/esp8266_uart2.h +++ b/firmware/stm32-esp/user/show/esp8266_uart2.h @@ -13,6 +13,7 @@ #define UDP_Mode 1 uint8_t ESP8266_SendStr(char* fmt,...); +uint8_t ESP8266_SendCMD(uint8_t *cmd,uint8_t *ack,uint16_t waittime); uint8_t ESP8266_SendData(uint8_t *tbuf, uint16_t len); uint8_t ESP8266_APInit(char *name, char *password); uint8_t ESP8266_STAInit(void); diff --git a/firmware/stm32-esp/user/show/esp8266_work.c b/firmware/stm32-esp/user/show/esp8266_work.c index 946612b5..9cc5b61f 100644 --- a/firmware/stm32-esp/user/show/esp8266_work.c +++ b/firmware/stm32-esp/user/show/esp8266_work.c @@ -1,109 +1,42 @@ #include "esp8266_work.h" -/**************************** +/************************************************************* 配网流程 1、将无线设备初始化为AP模式,默认设置为 - 2、 - // 配置 MQTT 用户属性 - // AT+MQTTUSERCFG=0,1,"8bf209cd00704760b7a60b2f71be9d8c","test","123456",0,0,""\r\n - // 配置 MQTT 连接属性 - // AT+MQTTCONNCFG=0,120,0,"","",0,0\r\n - // 连接/查询 MQTT Broker - // AT+MQTTCONN=0,"106.12.9.213",1883,0\r\n - // 发布主题 - // {"deviceNum":"7CDFA1049ADA","categoryId":2,"firmwareVersion":"1.0","ownerId":"1"} - // AT+MQTTPUB=0,"device_info","{"deviceNum":"E8DB84933050","categoryId":1,"firmwareVersion":"1.0","ownerId":"1"}",0,0\r\n - // 订阅/查询主题 - // AT+MQTTSUB=0,"status/set/E8DB84933050",1\r\n - // 取消订阅主题 - // AT+MQTTUNSUB=0,"status/set/E8DB84933050" - // 关闭连接, 释放资源 - // AT+MQTTCLEAN=0 -****************************/ -static uint8_t NetWorkFlow = 1; -static uint32_t Nport = 0; -static uint8_t Nssid[20] = {0}; -static uint8_t Npassword[20] = {0}; + 2、AT+CWJAP="CMCC-LI","092413131li" + // 配置 MQTT 用户属性 + // AT+MQTTUSERCFG=0,1,"8bf209cd00704760b7a60b2f71be9d8c","test","12345678",0,0,"" + // 配置 MQTT 连接属性 + // AT+MQTTCONNCFG=0,120,0,"","",0,0 + // 连接/查询 MQTT Broker + // AT+MQTTCONN=0,"106.12.9.213",1883,0 + // 发布主题 + // {"deviceNum":"E8DB84933056","categoryId":2,"firmwareVersion":"1.0","ownerId":"1"} + // AT+MQTTPUB=0,"device_info","{\"deviceNum\":\"E8DB8493312\"\\,\"categoryId\":1\\,\"firmwareVersion\":\"1.0\"\\,\"ownerId\":\"1\"}",0,0 + // AT+MQTTPUB=0,"device_info","{\"deviceNum\":\"E8DB8493312\"\\,\"categoryId\":1\\,\"firmwareVersion\":\"1.0\"\\,\"ownerId\":\"1\"}",0,0\r\n + // 订阅/查询主题 + // AT+MQTTSUB=0,"status/set/E8DB84933056",0 + // 取消订阅 + // AT+MQTTUNSUB=0,"status/set/E8DB84933050" + // 关闭连接, 释放资源 + // AT+MQTTCLEAN=0 +************************************************************/ +uint8_t NetWorkFlow = 1; -#ifdef MQTT_SCode -MQTTPacket_connectData MQTT_ConnectData = MQTTPacket_connectData_initializer; -char MQTT_ClientId[150] = {0}; -char MQTT_Username[65] = {0}; -char MQTT_Password[65] = {0}; -volatile uint16_t MQTT_ReadBufLen = 0; -#endif +uint8_t Wssid[20] = ""; +uint8_t Wpassword[20] = ""; -int ESP8266_WaitData(unsigned char* buf, int count) -{ - while(1) - { - if(UART2ReadFlag&0x8000) - { - memcpy(buf, (void*)&UART2ReadBuf[MQTT_ReadBufLen], count); - MQTT_ReadBufLen += count; - return count; - } - Delay_ms(10); - } -} -#ifdef MQTT_SCode -uint8_t MQTT_UserSubscribe(char *pSubTopic) { - uint8_t buf[200] = {0}; - uint32_t buflen = sizeof(buf); - int32_t msgid = 1; - int32_t req_qos = 0; // 服务质量 +char MQTT_ServerIP[20] = "106.12.9.213"; +uint32_t MQTT_ServerPort = 1883; - MQTTString topicString = MQTTString_initializer; - topicString.cstring = pSubTopic; - - // 订阅格式化 - MQTTSerialize_subscribe(buf, buflen, 0, msgid, 1, &topicString, &req_qos); - - // 发送订阅 - UART2ReadFlag = 0; - ESP8266_SendStr((char *)buf); - if (MQTTPacket_read(buf, buflen, ESP8266_WaitData)==SUBACK) /* wait for suback */ - { - unsigned short submsgid; - int subcount; - int granted_qos; +static char MQTT_DeviceID[20] = "E8DB84933299"; +static char MQTT_ClientID[100] = "user"; +static char MQTT_Username[20] = "test"; +static char MQTT_Password[20] = "123456"; - MQTTDeserialize_suback(&submsgid, 1, &subcount, &granted_qos, buf, buflen); - if (granted_qos != 0) - { - //Sys_SendLog("granted qos != 0, %d\n", granted_qos); - return 0; - } - else - { - //Sys_SendLog("granted qos = 0\n"); - return 1; - } - } - else - { - //Sys_SendLog("no suback received!\r\n"); - return 0; - } -} -#endif -#ifdef MQTT_SCode -// MQTT_Publish("/mqtt/topic/0", "hello0"); -void MQTT_UserPublish(char *pPubTopic, char *payload, int payloadlen) { - uint8_t buf[400] = {0}; - int buflen = sizeof(buf); - MQTTString topicString = MQTTString_initializer; - int len = 0; - - topicString.cstring = pPubTopic; - len += MQTTSerialize_publish((unsigned char *)(buf + len), buflen - len, 0, 0, 0, 0, topicString, (unsigned char *)payload, payloadlen); - ESP8266_SendStr((char *)buf); -} -#endif -uint8_t buf[400] = {0}; -int buflen = 0; -void ESP8266_NetWorkFlow(void) -{ +uint8_t PublishData[500] = {0}; +int len = 0; +void ESP8266_NetWorkFlow(void) { // 第一步,初始化为AP if(NetWorkFlow == 1) { ESP8266_APInit("XiaoYi_IOT_AirBox", "asdqwe9867"); @@ -113,114 +46,181 @@ void ESP8266_NetWorkFlow(void) else if(NetWorkFlow == 2) { if(DevParam.ESP8266SendTime >= 2000) { - ESP8266_SendStr("{\"code\":\"0\",\"msg\":\"start connect\"}"); + ESP8266_SendStr("{\"code\":0,\"msg\":\"start connect\"}"); DevParam.ESP8266SendTime = 0; } } // 第三步,返回接受成功信息 else if(NetWorkFlow == 3) { - ESP8266_SendStr("{\"code\":\"1\",\"msg\":\"getWifiInfo:success\"}"); + ESP8266_SendStr("{\"code\":1,\"msg\":\"getWifiInfo:success\"}"); NetWorkFlow = 4; } // 第四步,连接家庭无线 else if(NetWorkFlow == 4) { ESP8266_STAInit(); - while(ESP8266_STAConnect((char *)Nssid, (char *)Npassword)); + while(ESP8266_STAConnect((char *)Wssid, (char *)Wpassword)); NetWorkFlow = 5; } + // 第五步,配置MQTT else if(NetWorkFlow == 5) { + /*********模拟MQTT指令**************/ #ifdef MQTT_SCode -// MQTT_ConnectData.MQTTVersion = 4; // 3.1.1 -// MQTT_ConnectData.keepAliveInterval = 60; // 设置心跳包间隔时间 -// MQTT_ConnectData.clientID.cstring = (char *)MQTT_ClientId;// 客户端ID -// MQTT_ConnectData.username.cstring = (char *)MQTT_Username;// 用户名 -// MQTT_ConnectData.password.cstring = (char *)MQTT_Password;// 密码 -// MQTT_ConnectData.cleansession = 0; // 清除会话 + MQTT_ConnectData.keepAlive = 120; // 心跳包,单位秒 + strcpy( MQTT_ConnectData.clientID, MQTT_ClientID);// 客户端ID + strcpy( MQTT_ConnectData.username, MQTT_Username);// 用户名 + strcpy( MQTT_ConnectData.password, MQTT_Password);// 密码 - //rc = aiotMqttSign(product_key, device_name, device_secret, \ - //MQTT_ConnectData.clientID.cstring, MQTT_ConnectData.username.cstring, MQTT_ConnectData.password.cstring); - //if (rc < 0) { - //Sys_SendLog("aiotMqttSign -%0x4x\n", -rc); - //return -1; - //} + /***连接服务器***/ + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMUX=0\r\n",(uint8_t *)"OK",200)); + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", MQTT_ServerIP, MQTT_ServerPort); + while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPMODE=1\r\n",(uint8_t *)"OK",200)); + while(ESP8266_SendCMD((uint8_t *)"AT+CIPSEND\r\n",(uint8_t *)"OK",200)); + + /***登录服务器***/ + while(MQTTSCode_Connect()); - // 网络连接 - //char *host = "a1ykSq0uPgd.iot-as-mqtt.cn-shanghai.aliyuncs.com"; - //int port = 1883; - //transport_open( host, port); - - // 发送 登录数据 - // 将连接字符串格式化一下,现在还没有发送 -// memset(buf, 0 ,sizeof(buf)); -// buflen = sizeof(buf); -// -// MQTTSerialize_connect( buf, buflen, &MQTT_ConnectData); -// UART2ReadFlag = 0; -// ESP8266_SendStr((char *)buf); - - // 等待connack -// if (MQTTPacket_read(buf, buflen, ESP8266_WaitData) == CONNACK){ -// unsigned char sessionPresent, connack_rc; -// if (MQTTDeserialize_connack(&sessionPresent, &connack_rc, buf, buflen) != 1 || connack_rc != 0) -// { -// //Sys_SendLog("Unable to connect,return code %d\r\n", connack_rc); -// //return -1; -// } -// } - /*订阅*/ -// MQTT_UserSubscribe("status/set/7CDFA1049ADA"); //更新设备状态 -// MQTT_UserSubscribe("status/get/7CDFA1049ADA"); //获取设备状态 -// MQTT_UserSubscribe("setting/set/7CDFA1049ADA");//更新设备配置 -// MQTT_UserSubscribe("setting/get/7CDFA1049ADA");//获取设备配置 + /***订阅服务器对状态设置***/ + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"status/set/%s", MQTT_DeviceID); + while(MQTTSCode_Subscribe((char *)PublishData, 0, 12)); #endif /********************************/ + /*********AT指令*****************/ #ifdef MQTT_AT - + // 1,配置 MQTT 用户属性 + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTUSERCFG=0,1,\"%s\",\"%s\",\"%s\",0,0,\"\"\r\n",\ + MQTT_ClientID, MQTT_Username, MQTT_Password); + while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); + + // 2,配置 MQTT 连接属性 + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTCONNCFG=0,120,0,\"\",\"\",0,0\r\n"); + while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); + + // 3,连接/查询服务器 + //memset((void *)PublishData, 0, sizeof(PublishData)); + //sprintf((char *)PublishData,"AT+MQTTCONN=0,\"%s\",1883,0\r\n",\ + // MQTT_ServerIP); + //while(ESP8266_SendCMD((uint8_t *)"AT+MQTTCONN?\r\n", (uint8_t *)"OK", 500)); + while(ESP8266_SendCMD((uint8_t *)"AT+MQTTCONN=0,\"106.12.9.213\",1883,0\r\n", (uint8_t *)"OK", 300)); + + // 4,发布注册设备信息Publish + //memset((void *)PublishData, 0, sizeof(PublishData)); + //sprintf((char *)PublishData,"AT+MQTTPUB=0,\"%s\",\"{\\\"deviceNum\\\":\\\"%s\\\"\\,\\\"categoryId\\\":1\\,\\\"firmwareVersion\\\":\\\"1.0\\\"\\,\\\"ownerId\\\":\\\"1\\\"}\",0,0\r\n",\ + // "device_info" ,MQTT_DeviceID); + //while(ESP8266_SendCMD(PublishData, (uint8_t *)"OK", 500)); + + // 发布设备上线(设备状态) + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTPUB=0,\"%s\",\"{\\\"deviceNum\\\":\\\"%s\\\"\\,\\\"isOnline\\\":1\\,\\\"rssi\\\":-73\\,\\\"airTemperature\\\":%d\\,\\\"remark\\\":\\\"\\\"}\",0,0\r\n",\ + "status" ,MQTT_DeviceID, DevParam.BatSOC); + while(ESP8266_SendCMD(PublishData, (uint8_t *)"OK", 500)); + + // 发布设备遗嘱 +// memset((void *)PublishData, 0, sizeof(PublishData)); +// sprintf((char *)PublishData,"AT+MQTTPUB=0,\"offline\",\"{\\\"deviceNum\\\":\\\"%s\\\"\\,\\\"isOnline\\\":0\\,\\\"remark\\\":\\\"\\\"}\",0,0\r\n",\ +// MQTT_DeviceID); +// while(ESP8266_SendCMD(PublishData, (uint8_t *)"OK", 500)); + + // 发布设备配置 + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTPUB=0,\"status\",\"{\\\"deviceNum\\\":\\\"%s\\\"\\,\\\"isReset\\\":0\\,\\\"remark\\\":\\\"\\\"}\",0,0\r\n",\ + MQTT_DeviceID); + while(ESP8266_SendCMD(PublishData, (uint8_t *)"OK", 500)); + + // 5,订阅 +// // 更新设备设置状态 +// memset((void *)PublishData, 0, sizeof(PublishData)); +// sprintf((char *)PublishData,"AT+MQTTSUB=0,\"status\\\/set\\\/%s\", MQTT_DeviceID); +// while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); + // 订阅获取设备状态 + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTSUB=0,\"status\\/set\\/%s\",0\r\n", MQTT_DeviceID); + while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); +// // 更新设备配置 +// memset((void *)PublishData, 0, sizeof(PublishData)); +// sprintf((char *)PublishData,"AT+MQTTSUB=0,\"setting/set/%s\",\"\",0,0\r\n", MQTT_DeviceID); +// while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 500)); +// // 获取设备配置 +// memset((void *)PublishData, 0, sizeof(PublishData)); +// sprintf((char *)PublishData,"AT+MQTTSUB=0,\"setting/get/%s\",\"\",0,0\r\n", MQTT_DeviceID); +// while(ESP8266_SendCMD((uint8_t *)PublishData, (uint8_t *)"OK", 200)); #endif + NetWorkFlow = 10; /********************************/ } - else if(NetWorkFlow == 10) - { + // 第十步,发布消息 + else if(NetWorkFlow == 10) { + /********************************/ #ifdef MQTT_SCode -// if(DevParam.ESP8266SendTime >= 2000) -// { -// MQTTSerialize_pingreq(buf, buflen);// 发送心跳 -// ESP8266_SendStr((char *)buf); -// DevParam.ESP8266SendTime = 0; -// } - // 发布设备状态 -// else if(DevParam.ESP8266SendTime>=1500){ -// // /a1ykSq0uPgd/qmvH76OCy2FeGp9DDMPx/user/update -// // 0x00 00000001 0032 0100 001223 -// char txBuf[30] = {0}; -// char txLen = 0; -// //txBuf[txLen++] = COMMAND_REPORT;// 属性上报 -// txBuf[txLen++] = 0x00;txBuf[txLen++] = 0x00;txBuf[txLen++] = 0x00;txBuf[txLen++] = 0x01;// ID -// //txBuf[txLen++] = (uint8_t)(DeviceData.prop_int16 >> 8);txBuf[txLen++] = (uint8_t)(DeviceData.prop_int16 >> 0); // INT16 -// //txBuf[txLen++] = DeviceData.prop_bool; // BOOL -// //txBuf[txLen++] = (uint8_t)(DeviceData.prop_int16 >> 8);txBuf[txLen++] = (uint8_t)(DeviceData.prop_int16 >> 0);// FLOAT - -// MQTT_UserPublish("device_info", txBuf, txLen); -// DevParam.ESP8266SendTime = 0; -// } - #endif + if(DevParam.MQTTSendTime >= 2000) + { + // 定时发布设备状态 + memset((void *)PublishData, 0, sizeof(PublishData)); + len = sprintf((char *)PublishData,"{\"deviceNum\":\"%s\",\"isOnline\":1,\"airTemperature\":%d,\"remark\":\"\"}",\ + MQTT_DeviceID, DevParam.tes); + if(len > 0) + { + while(MQTTSCode_Publish("status", (char *)PublishData, len, 0, 1, 10)); + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + } + DevParam.MQTTSendTime = 0; + } + #endif + /********************************/ + /********************************/ + #ifdef MQTT_AT + if(DevParam.MQTTSendTime >= 5000) + { + // 定时发布设备状态 + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"AT+MQTTPUB=0,\"%s\",\"{\\\"deviceNum\\\":\\\"%s\\\"\\,\\\"isOnline\\\":1\\,\\\"rssi\\\":-73\\,\\\"airTemperature\\\":%d\\,\\\"remark\\\":\\\"\\\"}\",0,0\r\n",\ + "status" ,MQTT_DeviceID, DevParam.BatSOC); + while(ESP8266_SendCMD(PublishData, (uint8_t *)"OK", 500)); + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + DevParam.MQTTSendTime = 0; + } + #endif + /********************************/ + } +} +char mystrstr(char *haystack, char *needle) { + uint16_t i = 0,j = 0; + for(i = 0;;i++) + { + if(haystack[i]==needle[0]) + { + for(j = 0;;j++) + { + if(haystack[i+j]==needle[j]) + { + if(needle[j+1] == '\0') + return 1; + } + else + break; + } + } + if((haystack[i]=='\r') && (haystack[i+1]=='\n')) + { + return 0; + } } } - cJSON *root = NULL; -char JsonString[100] = {0}; -uint16_t init = 0; -uint16_t i = 0; - -uint8_t rbuf[256] = {0}; -uint8_t rlen = 0; +char JsonString[500] = {0}; +uint16_t i = 0,j = 0,slen = 0; void ESP8266_NetReceiveInfor(void) { if(UART2ReadFlag&0x8000) { + // 配网解析 if(NetWorkFlow == 2) { - // {"port":"60156","ssid":"xxx","password":"xxxx"} - if(UART2ReadBuf[0] == '{') - { + // {"port":60156,"ssid":"xxx","password":"xxxx"} + if(UART2ReadBuf[0] == '{') { + memset(JsonString, 0, sizeof(JsonString)); for(i = 0;;i++) { JsonString[i] = UART2ReadBuf[i]; @@ -234,50 +234,105 @@ void ESP8266_NetReceiveInfor(void) { UART3ReadFlag = 0; return; } - Nport = cJSON_GetObjectItem(root, "port")->valuedouble; - if(Nport==60156) - { - sprintf((char *)Nssid, "%s",cJSON_GetObjectItem(root, "ssid")->valuestring); - sprintf((char *)Npassword,"%s",cJSON_GetObjectItem(root, "password")->valuestring); +// Nport = cJSON_GetObjectItem(root, "port")->valuedouble; +// if(Nport==60156) +// { + sprintf((char *)Wssid, "%s",cJSON_GetObjectItem(root, "ssid")->valuestring); + sprintf((char *)Wpassword,"%s",cJSON_GetObjectItem(root, "password")->valuestring); // 进入无线第三步 NetWorkFlow = 3; - } - cJSON_Delete(root); - memset(JsonString, 0, sizeof(JsonString)); +// } + cJSON_Delete(root); break; } } } } - if(NetWorkFlow == 10) - { - #ifdef MQTT_SCode - rlen = UART2ReadFlag&(~(1<<15)); - memcpy(rbuf, (void*)&UART2ReadBuf, rlen); - memset(UART2ReadBuf, 0, sizeof(UART2ReadBuf)); - UART2ReadFlag = 0; - - if (strstr((char *)rbuf, "CLOSED")) - { - - } - else - { - if (0xD0 == *rbuf) + // 服务器解析 + if(NetWorkFlow == 10) { + #ifdef MQTT_SCode + slen = UART2ReadFlag&(~(1 << 15)); + UART2ReadBuf[slen] = 0x0D; + UART2ReadBuf[slen+1] = 0x0A; + /**********设置状态*********/ + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"status/set/%s", MQTT_DeviceID); + if(mystrstr((char *)UART2ReadBuf, (char *)PublishData)==1) { + memset(JsonString, 0, sizeof(JsonString)); + for(i = 0;;i++) { - //Sys_SendLog("MQTT Heart Beat \r\n"); - } - else + if(UART2ReadBuf[i]=='{') + { + for(j = 0;;j++) + { + JsonString[j] = UART2ReadBuf[j+i]; + if( (UART2ReadBuf[j+i]=='}') && (UART2ReadBuf[j+i+1]==0x0D) && (UART2ReadBuf[j+i+2]==0x0A)) + { + // 解析数据 + root = cJSON_Parse((char *)JsonString); + if(root == NULL) + { + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + UART3ReadFlag = 0; + return; + } + + DevParam.ServerRelay= cJSON_GetObjectItem(root, "relayStatus")->valuedouble; + DevParam.ServerRed = cJSON_GetObjectItem(root, "red")->valuedouble; + + cJSON_Delete(root); + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + UART3ReadFlag = 0; + return; + } + } + } + } + } + #endif + #ifdef MQTT_AT + // 首先判断 + if(strstr((const char*)UART2ReadBuf,(const char*)"+MQTTSUBRECV")) { + memset((void *)PublishData, 0, sizeof(PublishData)); + sprintf((char *)PublishData,"status/set/%s", MQTT_DeviceID); + if(strstr((const char*)UART2ReadBuf,(const char*)PublishData)) { -// strncpy(Topic, (void*)(rbuf+4), rbuf[3]); -// printf("Topic: %s\r\n", Topic); -// strncpy(message,(void*)(rbuf+4+rbuf[3]),rbuf[1]-rbuf[3]-2); -// printf("Message: %s\r\n", message); -// memset(rbuf, 0, sizeof(rbuf)); + memset(JsonString, 0, sizeof(JsonString)); + for(i = 0;;i++) + { + if(UART2ReadBuf[i]=='{') + { + for(j = 0;;j++) + { + JsonString[j] = UART2ReadBuf[j+i]; + if( (UART2ReadBuf[j+i]=='}') && (UART2ReadBuf[j+i+1]==0x0D) && (UART2ReadBuf[j+i+2]==0x0A)) + { + // 解析数据 + root = cJSON_Parse((char *)JsonString); + if(root == NULL) + { + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + UART3ReadFlag = 0; + return; + } + + DevParam.ServerRelay= cJSON_GetObjectItem(root, "relayStatus")->valuedouble; + DevParam.ServerRed = cJSON_GetObjectItem(root, "red")->valuedouble; + + cJSON_Delete(root); + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + UART3ReadFlag = 0; + return; + } + } + } + } } - } - #endif - } + } + #endif + } + memset((void *)UART2ReadBuf, 0, sizeof(UART2ReadBuf)); + UART2ReadFlag = 0; } } diff --git a/firmware/stm32-esp/user/show/esp8266_work.h b/firmware/stm32-esp/user/show/esp8266_work.h index 2302e6c3..b014dae5 100644 --- a/firmware/stm32-esp/user/show/esp8266_work.h +++ b/firmware/stm32-esp/user/show/esp8266_work.h @@ -5,11 +5,15 @@ #include "esp8266_uart2.h" +#include "stdio.h" + +#include "string.h" + +#include "stdarg.h" + #include "cJSON.h" -#include "MQTTPacket.h" - -#include "MQTTConnect.h" +#include "mqtt.h" void ESP8266_NetWorkFlow(void); void ESP8266_NetReceiveInfor(void);