qq_43525978
qq_43525978
采纳率0%
2021-03-09 14:41

最近有个关于智能定位设备(类似于电话手表)对接的项目, 基于三基同创协议的照片问题

这种协议数据是可以收到的,但是收带图片或者音频 数据时就会乱码

通信框架采用netty框架

public class NettyServer {

   /** 日志 */
   private Logger log = LoggerFactory.getLogger(NettyServer.class);

   /** 端口号 */
   @Value("${netty.port}")
   private int port;

   public  static Map<String, ChannelHandlerContext> map = new HashMap<String, ChannelHandlerContext>();

   public  static Map<ChannelHandlerContext, String> mapKV = new HashMap<ChannelHandlerContext, String>();

   public void run() throws Exception {
      EventLoopGroup bossGroup = new NioEventLoopGroup();
      EventLoopGroup group = new NioEventLoopGroup();
      try {
         ServerBootstrap sb = new ServerBootstrap();
         sb.option(ChannelOption.SO_BACKLOG, 1024);
         sb.group(group, bossGroup) // 绑定线程池
               .channel(NioServerSocketChannel.class) // 指定使用的channel
               .localAddress(port)// 绑定监听端口
               .childHandler(new ChannelInitializer<SocketChannel>() { // 绑定客户端连接时候触发操作

                  @Override
                  protected void initChannel(SocketChannel ch) throws Exception {
                     ch.pipeline().addLast("idleStateHandler", new IdleStateHandler(60, 0, 0));
                     ch.pipeline().addLast(new StringEncoder(Charset.forName("UTF-8")));

                     //自定义转码器
//                   ch.pipeline().addLast(new StringEncoder());
                     ch.pipeline().addLast("decoder", new MyDecoder());
                     ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 4, 4, -8, 0));

                     ch.pipeline().addLast(new NettyServerHandler()); // 客户端触发操作
//                   ch.pipeline().addLast(new ByteArrayEncoder());

                  }
               });
         ChannelFuture cf = sb.bind().sync(); // 服务器异步创建绑定
         System.out.println(NettyServer.class + " 启动正在监听: " + cf.channel().localAddress());
         cf.channel().closeFuture().sync(); // 关闭服务器通道

      } catch (Exception e){
         log.error("netty服务启动异常-" + e.getMessage());
      }finally {
         group.shutdownGracefully().sync(); // 释放线程池资源
         bossGroup.shutdownGracefully().sync();
      }
      System.err.println("netty 服务端启动完毕 .....---------------------------------------------------------------------");
   }
}
public class MyDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) throws Exception {
//创建字节数组,buffer.readableBytes可读字节长度
        byte[] b = new byte[buffer.readableBytes()];
//复制内容到字节数组b
        buffer.readBytes(b);
//字节数组转字符串
        String str = new String(b);
 
        System.out.println(str);
        out.add(bytesToHexString(b));

        System.out.println("-------->>> :" +out.toString());
        System.out.println("----转码后---->>> :" +toStringHex2(out.get(0).toString()));
        sql(ctx, str);
    }

    public void sql(ChannelHandlerContext ctx, String rev){
        String[] split = rev.split("\\*");
        if(split.length > 1){
            //判断设备号下得ctx是否存在
            String deviceNumber = split[1];
            if (NettyServer.map.get(deviceNumber) != null && NettyServer.map.get(deviceNumber).equals(ctx)) {
                NettyServer.map.put(deviceNumber, ctx);
            } else {
                NettyServer.map.put(deviceNumber, ctx);
                NettyServer.mapKV.put(ctx, deviceNumber);
            }
            String com = split[split.length - 1];
            String[] endOf = com.substring(0, com.length()-1).split(",");
            if("LK".equals(endOf[0])){
                String ka = "[XT*"+ deviceNumber +"*0002*LK]";
                ctx.writeAndFlush(ka);
                System.out.println("发送数据-------心---跳----包---------------------:" + DateTimeUtil.DateFormatString(new Date()));
            }else if("KA".equals(endOf[0])){
                String ka = "[XT*"+ deviceNumber +"*0002*KA]";
                ctx.writeAndFlush(ka);
                System.out.println("发送数据-------心---跳----包---------------------:" + DateTimeUtil.DateFormatString(new Date()));
            }
            //解析命令
//            GpsIOTUtils.iot(endOf, ctx, deviceNumber);
        }
    }
 
    public String bytesToHexString(byte[] bArray) {
        StringBuffer sb = new StringBuffer(bArray.length);
        String sTemp;
        for (int i = 0; i < bArray.length; i++) {
            sTemp = Integer.toHexString(0xFF & bArray[i]);
            if (sTemp.length() < 2)
                sb.append(0);
            sb.append(sTemp.toUpperCase());
        }
        return sb.toString();
    }
 
    public static String toHexString1(byte[] b) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < b.length; ++i) {
            buffer.append(toHexString1(b[i]));
        }
        return buffer.toString();
    }
 
    public static String toHexString1(byte b) {
        String s = Integer.toHexString(b & 0xFF);
        if (s.length() == 1) {
            return "0" + s;
        } else {
            return s;
        }
    }

    public static void main(String[] args) {
        String s = "B825C849192772B85F94118503DBFC3F1A324E40620819273D01FE74F186B75520640C118CD40D14D103F663190463630CE3FC2841B923C31F92572BD42F0304E47AD302023D57A631D3FC6A266B920CB2229655C90A7F4F6A6B190AA2863876C2B75C1ED9F5A5629BEC4E439048188D86DDC3F84FA5324B758E237D046F2193EE94273F97A53496F2D41624A9EE7A7AFF00FAE9565C06F949ED4036C8D7CC99C990EE67E37FD2AC44825987991965298E0F391FE7350DB33200DB47CDC838C8FA0CD4E980C46700F239A4C4ADA89D216C49BD80C74F998D4E7608C3191D417D03C02F191EFE9F4A88C4C506F2A1867A0C11FE35288D76AA31CF072DEBF876A6897A6A4B14311913870A0E7D0261C9938F7EF4E555C4AB9980D818071F32827FCF150C6402235C90A3272791EFFF00D7A9F6F96E18BAE1E3D8DC679CF07D01A9D89D590945568FE66DCC37AB63B74A7D03C81CC6667D01AA70C58671FE739A736E544512AB29195C0C861EA29922892348DD376D7D01FB7D014F6CFAE2863B26EC3A660F06D8A6418247CF1E3701FE34C5DB825F695118D9C60939E40A6F2DB8F190691582463FD6337D056D08AB9079EA7E9E94AFA1518EA557DE848DA0377CF38A62FDDCE02638C1A6C785DC01E9EF9A78B8C6224848E3972720FD3D29DAC2185C90FB7964E71B7AFF008D48D85550A0E3F2FF00F552108A86746605720F3803DFDFEB4DDD866DC0963C939EB520EC9586056DBCFCC9D7781853CFF4A732ED500918604E73DBFA50CEFE5AA100AA8C019C647F4A692771CF39000E7214FF005A02287001591CFF000F526A32BE5C84B9DCBCE300F4EDF5A1DF60C80589E3146EC0F707AD3486ECD08AC449B4E37633B80C71FD6A4604B1EECDD78EF48CBC9E0E318DD4C2EEDB941041FBC33CE7B1A4813B0152837D04300F4A69231F375A91768541B8929F8FFF00AEA32995611F45E579C5229B100C9C96033D295558FCCDB464E4739FCFD3E94D186CF2339FF3F4A1541380BC9EBC63340B9B7D0300EEE42B1048C641E94F40ED215526463D09F4EFF4A68E72AA4673D7D294602E013D7AE690D0D076BB20DA76719CE69C1D7D0319044724E583100B01E9E9FE45216E701155481D07DDF6F7A478F8E141C1E78CEDFAD30687EF0A494561BC630C73FA76A6646D218B648EC334AC02AEEDBB883CE3BD229DA643D88CFF00F5A9096829C601E738C8007F5ED518C82DC8E9C71DE9E8C48650C709C1F6A6B07D04D80DB88E871422BB880311C31033923D4D389FE118E3DA909CE7621DA0E3AE714D62DC92BCE719C5170D10E621C0527A1A73FF00AC24F7C0E94D39E57038EF48BCB0CB0049EFCD024C57899811BD467A1CD355416C6791D4034E767D03BCE318C73EB4A178FBD823A64F5A02FEF11C837D051471CE4D20DDC83F8D4CD2AB48655895490475CE3D45471E02AB703233B473B7EB48A7B8DCEE624AAF031F31C67FCFA50727277B3B0E8CC295D4100165C7A114D202281CFF003A2E161EB950A3E5DCB9C1C7AFF3A40382DF8534121941C1E324FBD3CE02EE0096A18D21179756FE25391CF1FF00D7A9E3202119EFC739A8130BB240C5867826A4EA3A75A2C4DEC4C1BE5A456DF1EE0B827A03CFE351A36F40EADC74E3BD3D48E0138C7B52B1689536AA8C282DDDBFCF4A7A9C9E6A2042E73C83CF06947519079191CD2B15E84AADF71B392148031FE734A0853B4EEDC47A75FF000A89B03E9DA9558AEF3D9464E79FFF0055032653DA9CA58678E9C74A8B705E73D69C583757DC08C641A4343D1902B1503AF27D01EA41C8E315197C1F957208C5287F9BE5E0521BB13A91DBF9E69C0AED560739ED8C11502B67AE4FD38A58CB0E588E5477E94EC172C0DFDDC91D452E7D026B1725B1D062A242B91938C9C649E29CA78C0E71EF40C9F71F31D4B8DCA06F53C9A3232793EB5183C938C934A5CAA13B431C8006714204480E79DDC67B0C505097E396E8003D691776D03EF77E29AAD8273C907A52B0224F951D954AE1863F1EE3DA99B4213F396D9C0E3AD37A6E2BCFB673FF00EAA0A8C939F9B3CF1DFF00AD003872E7071BCF7FE1A4667D0518E73B8E33EF4DC8CB73DFD6901DABCB74EFD29AD47B9264217D053185EE0D00A852C3715F6E7FFD54C0C1547D050C63D467FF00D74E0DB648CE09E37360719A5615C908025240C98FE518F4FEB4E4661F7626CFA9A890B1DF920FCD8181D07BFAD3971F28556639C6E53C714EC3BDC970CABB59F7303CB67AD204DCCD9600F5EB481B0E08383F4A077E7803A63927FA548AC2E5B67D0465318391C724FBD3806076B28047519CE0FF005A61703381E9C1A15C28041048207AF3FD69A2AE4D9F337B34BCF503A9FF00EBD3D18B02A1F81C706A20AF1B0072BB8E7A76EFF4A746EA53E461B41EABDA8193EEDDCBCA0B2E1724649FF3EB522B7240C7BD40AFB366D25F1C162073F5A97950846DDA170A3BD16417240132FB954907E524F6FE94AB8D84FA10298876121994EDE985EBFE34E5600F42A690931FB1D1995A5120C71818A03AC6BF329DA3D4FF005A8E32723E423F1CE7DEA446E3233804F18CD0D02B0E19DBBB1919C6714B9441BE3248CE06E1934D56EA08EF4AB87D0408C82391ED4586900663F7700E4374EF486525A43348BC800E171CD38724B0E79E69132DB86D19F5C5081A1FCB64E0B1CD2200A48C019E411DE90A86EA411DF06970A170B95F41FD298002481C8CE7D295B69E8082BC9FF3DBE94D0770C6E0BC1F9B1D280EBB72A0EC6C1EB9CD020FBA09D996385C118E3D686CF7FBB9C6EC74A4DC471C91DFB62906FCE5360FF7CF5A2E161147C840932D9F4C605230FDE4A1970C583609E9C7A51920387D03BB55B3CFF083FCFD69A1E372CF185662402579DD408555386E9907B8A4C1C80075ED8FF3F9504FF0B7CDEFD6937B86DEA4707F1A07A11BE1D5364A00EEC4526D200298D98F4E4538040D2811BC6B918DC77530FF00C0B6A8EFDE9AD042FF000F19C81C281D69199B686D8C57D71C035133E41FDF471F3CEEE723FA7D01698581E17D02DF00E45315C941F95428C82320E323151F980FDDC61B8C28CFE55139763B1647419CE07D01DC52861BB03D41E98A4038974621BE60E46CFEF63E9DA9E1586FF2C79814F2A3961EFCF6A8FCB9360D87673B83119A997D014608CFAD26C7600A4498638017B7357D058FE1C1C8C01C75A48958955791026319C734F48CA3208DC8D8B8C8FE2FF3E94750DD0E11EDDCC4876380769EA3E9DA9D03147D01EA99049C74217EB4DDA1771FBAC5BAE3381DF1EB5318D4166407613F2E0E723D68D04874718322AAA0556E1540C73FE7B57D051214387D047271B7BF1DE98004773BCB0639CE69332302B0A624C8C06F4EE7F2A10D589924117D0518810492C4E73B81F4A58A35209627AE4638FCE9B1462318DCC4939E47F9C7D2A66206E3D8B7231D7FC280B8BB955499300E70B8E6971C9E1B38F5A6A9196C29DA0FCB9E734A06319E78EB4D00A8DB94B2E76C98272319FF000A194382A4ED07A9CE32282D23705C63B71C01FE7BD0B857EEC42EDC9E71F4A4200E85B31E70C3804F5C7F3A500952149F719A4070A06377414B919CFF000F53CFF9CD03429DDF782F7EB8C5210B9255B827A63A537EF346CB1EE56E7696C7E7FE1420CBA3857D03A320A93FAFD47A5020638C803E6CF4C7F9FCA94AB270770248E08E9FE7AD282085DDB9403F311CE7FC2997010C7D048BBF0EE0F5EA3B508439800FB43E07A838E2964270C5791901063271DE927D047D05314298EEBB393FE14AA72E49467D05064EC3C8A0628504153231C8C7CDC53CF1C632F8EBDB8FE7F5A8C12DD940EDC718A7800104E7A71DE801C42991BAEC03EB51CA31195C1507FBC7B7AE7BD3870BF2F41EBDFF00C6A1770405054863F364678FE940244781F2EC651C61FE4EBF4FF1A846030C00B85E463D7F9F4EB4F521D51864B025718E7D053049DC57A860339EBFFEAA43D87232BE426E2475E31FAD0CC814950CE78F940C13FF00D6A325805C0D80F031FE734095B942E318C819A43D0198637D04AC4FA03839A40486F941E0673D714BCA91903914D660118719E304F4A6264377B8EE9368036F240E0B7B7A7AD664AA64C7999285B07D02A0047F9E9576E17D0383911B337D05927D02A0007F9EB5997450B975C30C0C629A44A5A5CAC332B0453F79B031CD3D58AAE1D7CB2DC124F1F87F8D0236908651B1B07E562054D0346E9B2606305847861938CF5F6AD62919498E8668E5B625D15A32E54F19E4743EFD6AA4D6874FBA927D027B96787D026B796791BBBE076F6FCA96E6D6E34B577D03F1CD123F3B010073EBEB569244F2A40A16518DA79EFE87D2B44BB18B4C6C731B95F3624C67F848E83BD4770B1CF1958880508DE33CE7AFE1497B6A5F7BDBCC62CA0C77E71CFF00FAAA34995A341244524C0CF18CF1FCFDE9798ECC4DD227CB92C8AD950072694CE08C07CB03F329E3028F336A9DCC36F006179CFB9F4A7324659C1562DC7CC0E01A02E0AE245656FDDE7AECE4679A487698844CDE5A93CEEA8BC950C621213BB2773F1F8714245FBADD0312CC01DAF918FAFF007D051A12B125D054660AAE7E6DABF260118F5EFEB55EEF6C36CA73923A9C77ED4F9F7A0DD97D04D9185CE45579116E58A393807276B6DE7FAD1705B97D0587401254DAC141FCFF00953DCB00A625C8DC0364631F4FF1A8CE446D1B023726039E883D4FAD48B9201DC3A727D695C224C9BB6B29977124E0E39C7BD3E17D05276574F94AF51C1DD4C8555982B6013C71DE9E0A6E394628182B107907EB42EA27E4398A2B361C0936F0A7A91FE4D4910491D0799B1D5091B4F6EF9F6F7A55872EC565C8403E618E47B7AE7D052642FB48907D040410D95E5C7B1EDEF5487D026A48EEF2468FB555546700709EC3DA9B23BE0ED1B9C11EDC7F5A490AB858D7700003C0C9F6A6B46FB1037662DBBA161E9ED8F5A6B44272BBD06B6E59760495006DACD8E1863B7A7D016954AF983632938C601CE0FA524D9F37CA7D043CC403383918FA7AD1BB0862C34AEEC1C6E8F1C7F5A5B8F67745244CC7B8FCCD18C163D4FD7D014FBD31A46117084F393EB4E462A5B196CF0573D3AE0FD38A6301BDC16F982838CF5CD4DDB1AD15C4640653BCB3201C76C9FF003DA9C7939E7818EB48A76B80B87D0541C9F7A5C0D803230C1C924F045055B4118492230319DAC305BFCF4A62B1DDB3CB550BC1DA78A9DF063400000FCC31DE988B97EA3A73DBF1A7B09A10A119073CD3240C0A0C81BCF18E71F5FAFA549210570588DDC0C1FEBF852EE46FF59BBF0E69798ED643083B897393DFB5098452AA197CC273B8F5C7F2A1D418C8C6723001E334B8D98CAE4E305586460FF223AD048D7D05CA7963F80A4CB47B8C7D01C742339A52C511B1924721B3D29AB2E472A7A74C5115729BB6823739420EE1DC0C0FA7B51123055476E07031CE0528555766538DCD961D7B52FDDF994FCC3A0C526EC2B754201BA33DF04FB7FF00AE91487049E41A7D03A187CC9F36739F4A1941279C30F6A7B88555C21C3ED2C39C0E94D3BFF77B49033F39FC287D03DC8C127B6075A6A90EC24DB83C8E0D497F64714DC036085C83BB14D76C7D04836E3736D43EB4BB0BB332B6093D0F231DFE949242ECBB55932064738069A27569828390D8238F5A4DADB31FC591D076A199880A40C639C7143B12549E31C0E714997ADB40FE09378E08C70719FF000A4DCCA91B6DF98F6A69C942A70B939C8A58CE464B7193C9A411EE3CC9F374C12391D714C1858F685CE00C534BAF3BBA9381C57D059F92983DC56C60AF7E09C9CFFF00AA9ACD9C000FBF142803AE7200E73413CF5EDC7EB42D02D740C701428038C74A6A70AEBB54330F948F4A72A9C1627A9A6F1B811C95E94B708B00DC9C919F4E9C50CADFC44018EC73FF00EAA5C8392719239A10940BF31C0CE7DF9A616426EE7A63D29F860A9F300C3A9A6310E43312475EB4EE40E993EF48396C39547AD2C4DB83F1C83819A40D8C83C8231E942FCA54A939C739FF003C51D0761C18303852BCF739A50D8383D69A4FCCA1739233F4A63B319B70DA33D873F8D0327623615CF078A93CC2546E209031D2ABABA961B8E7DA9E3A938EBDEA4AB8F1C86E79FE5526EF9F1D171C9CE6A14C01CB73FCE82E01507396ED8E940225F30160A06723EF7614F5CF720D4390003C5296209FEE8F6EB47A0227DD804E463EB520665182A412380476AAC1BA1048C5380C28DBBB3BB7124E7FFD43DA9586BA965492188E8A39E69CAC460875563C727D05056C938EDD69F0B091885E707193C628651296553B8E076F4A7AB81962E5477C0AAFB83AB06E0038EB522B2F1B41CFD284865889894579480CCB900739FF000A50C0F4E78CF4C541B8646E07F0E29FB9768C9207B0CD0C6958971BB1BB3C74E714AAC582FCA7271DBA7D017D01698A72B9E7A7E5485F00AE327D013FCF4A42257674656191B01E31D7FC698C7A924E3041E71426044ECC0AED2320F6A68DBCF53CE7AF4A63B8E6E07CA77D055723D7F1A33C734C2DC77E690B80D820F418C0A9480901069D9E380739EB502BB9724EEF9B9C71818FE5F4A707013734A13D4B55027D042F5072718F9867BD2E03A07D0479523A1C64F3F98F7A8703CCDBB82F7C9A73B13928403FC39E40FF001A185C983B1EB820F24E281F31F94AFD48CD47BFA027923D314A54EFDC719EA3071FE7E94304B71EC7605C7F10EA464669CC5760623009C7AF34D2430C70093C7340C3A800743F5A4C63D71B8EDDDC9C924D4BBC8F9B03791C638E3E9558139DAC08F4EE0FD7D3E952A4840C0C01D3A5160268F685DA005CF3ED52E4A82B8C0233CF5CD56F30283BA37D047A2E7D0540D967CE43100F3EB421AD8973C8C82E09C0EF8A72B86FB982A4641F5A8E37DAEC3195239607EEFB1FF1A7AAE15401B401F2914843FA8046723B538AB48DF3850037627E5FAFF85460EE6F941627A63F95282083D460FD29B1A245E473818E79E69EA73961D14F5A8F3B47DF0DC67A6295195812D80030049E99A486C7865C31DDD4E4F1C501CB6E27000C630314C62397D85C900601ED4F7D03B1BBE00607EE83FC3FE34002B2960038DCA738C714E53B864A12AA79A8D06E5015C31C72473834ECF247A0C919A60296DCA195CF9678E06734D66DC54B7040C0C0EDFE7BD22B055C86DA0F4EDFA500B17D044E76FB740680B0A7183C90D9C018CE690B6090F807B73D7FC0FB5223381B918071D1B1DFE94C675891732B162318C77D0473DFDE9207B12EE6568C0180415048E0FF008F5A8C831A6C50018C03B88E31E9C753EF4C2595898C1008CE49CE3FC29A589461B4649C9078E476A7B13BDC717D0559C071C0F94FBD37051943B0DE0E1F0723F0F5A84CACDB46DC00B9CE31EBC7BFD699BBFBA578EA31FE714C09BCC0C15846C18020EE3807DEA0DCAA7D02736149CE6A3326FCF96067A9C9C8FC3FC2A266DD22B2B00475CFF9E28417B8F6946D2DB0E57A2E297D03943EDC64E339CF06998F90B1C75C01DE9F12012B0232CDF2A9CF1FFD7A18921A5848E612AC576EEDE47CB9F4FAF7AB09B5CE0328E83776A6F960A81F7C67F84F03157D0546AE76AABB3123381FE7357D047A8DC151B53827D46723FA54CACEE4B15298270011C8EDF4A644417D0459580CE000727EA6A788091F2416057A118C7A53B6837D02091805DD4F55E0F1532B2E3040E4F5079C7F9EF4D402540C7D02729C11BBBD381265947D059663CA8C718FF1F6A112226F08CCCA063A8073B7DF3DE9EF297D03A245F99173B7D8FA7F8D46F852503723800F1F9D3A2801DB33A9DFD3AF41DC5318E8CF9AC0EC640DFDEE71537D0440E77B1CF77D0571F9536119462720E723771C7FF5A9E87CC562093C7D01DE99FA52403838F97703B8838C1C03E9F950BBD800C471C003AFE3EB4CFEE97D054639E7B53C1F9890339008E2980E560060118C7A50B9619521940C9C74C7AFB50982320F208EDC5226E70104649624E1463BD204872E1470720F239E8297845C0014E382471F850E42EEF984840CFC831FFEA348C77B21C83B973D3A62840C5524B64A9C5342970C1558EE1D319FFF00552127680C7A73E94E7D0515F05863039F43EF4090B1B8D8186E1CFA75A1111439DAA0B1CF03A9A40321CEEFB801CEDC06142E768DC31FD681A7B86E046D2148DC0819C52845E5D875E3238CD271FDE39C534801FEE73D4B6739F6C76A04AE483E6C3310A481D7A0A6AFCE8183F04F40704FFF005A9DE8D8CE47A511B0DBC1600FDEC0E3F1F4A771DC777D04A588C6F18231D3DA8465C284C1551C11D280A76F4CA919FF00F5FA52468046595551091F2E7F97A0E2906E3C63773D33D7D4FA55776E42B91D0F6C28A991D482D1B86038E9D2A091C8461B32CC3008230051D0084878D49575D9903E507A7F9EF51BE006DD83CF43DCD49348523CB31CEF1B540C7E3EFD699B65D8644F280079DE73FA77A4C698643BB32E086C738E3FFD7EF4E0015E17A75E290806477085031CE3B1F71E947390A31F37F11E83DFDE815C40380BCE00CE07E94C667D05B890040A092DEFFD29CCC04BF33672C555986323DEA199B631DCC32381C6437F9ED43114AF02C864F94A018DD8E037BFBD67CCE59F6E3031D7E956AE9C307D052575191CA8C9CFA7B7BD53EE4E3A9AA427B0C052460046D8639CB723F0A94B49660B7988F0E47C809DDCF51ED8A859CDBCAC08DA1860B30CAAE3BFB55FB6788470C32162B32E637D05BBB711D4E7D2B6473C847D029824B776470F13928C586327FC6A9B43240249AD06622E0B73CE3D4FF8D3EEE3F2A4CD9A9F25D8385F41DF3EF53C12F9BB82C67D03719298EDEE3B53BF633BC8AF15C24AA1D6E02B64FCAC3A7F8D1B47901A7914156E5FAE72781DE8BCB713CAB27D02AB92A30CA067FCFD6A1B79CA3912422343C331EC7FDA14DEC0988D1C91B48B1E495E4823814AB2B2E3CE48E31D8ABEECD4AB30727D0320690E46029EDEA734D76DA8546304E4E47F9C521AEA469347F69C2B9DF1FCDB48E08F5FD69C8E648A4579374AB9C9CE7033C669ACB852CB1231E8589EDFE7BD0208DB6E40551CE71803EB8EBD68B01223065326C2D86C7CBC671D6AA6D1E6386C1D8D8CE3FCFAD4F711C900678F0D120DBB71967D046ABC01B732C830C00247523EBF9526348B00ED84ED7D04029E7269E80E14BBF98E08CB631BBF0A89D8C81836F1BCF0D8E4FD7D017D055742D0061D3183D8E681F932CC0A85B69C16E8D9E727AF14C8E58CA483037E4E57DFFAD470B4792177663236803233EF4B94923631C5CA3ED76EBE61C75F6C502B12C5B136AC2089957183D31DF1496F146C1605DC58AB1404E4807AE3D07B544AC823FDE06015B391FE7A54C278DB66368D87A8383F8D3446E47BE5894C32403E71C7397D057D013DBE94EF33006F187D0530370EDFD695A459C9556DCC549F4C8FEB4BB2350AEF9185EAE38C7F4A63D083277B138F4040ED4D8A4F9D86E652C38F6A926920DE3CA3E66072A071CFF8536E02E3288A5770CF7C7A7E540F4E85546079421949EB4C931B770E598E3A7A5393E5C13B948CEE0482ADFF00EAA67D05E0E49CAA9C939A9EA0F57D02029214911EE247033D3FC68460F196539DC719A507A8657D057710372E323B7D0178A5231800281E80600A18C50DB908039C7048C67AD0A8597716E3AAF150AE55B3E6707F8724E0FF00F5AA66DE4202790B8233803AF4FCF340477D03C6B9628C79E0FCA2981301899F76D19F94673EDEF4E91976F518E99CF7A8F3953F5F4C50827BA17B11E61653EF4349B54977C0E396EBF8D1B776E55EBDF8CE291573BB924771D681DD870FCA93C70723FCE690AFEF149031D5F8E9FE146F54DB9E8381CE293392467802946E4B68446217AE4E7F4A52C704E476EB4FF2A41167C9CE4E3046081EBEE0D0150B3064FBA7BF7F71437D052B41149191C8FAF5A57D047249F5FCE9AA9B32324E4E724E696328DBC6EE57B509920C4E0A8EB48A14640078CF04629511004DE58BE319E99F7F6A09CB606E3C7E142B149B6AC0836E71D3A60D297D01A003D334818673C8F4F5A1F1B73BB6E7A734869EE8693BFE724F4FBB8EF48EC1481B323EBD7D05366C390AA07AE050A772B3138C1A697726F7D870576CF4F53C75FA7A53036D5C0E99EE3BD3D08DC4863D0F38FF0039A8D000C3DB91C66958A52E838A39DA0F6391818E686272085190D9E991FE7D01A9433B48A5C00CC4F4EE2924C12739F51838A431B805083803924934AB9DA3731247AD0C30A4E3071C1F4A40022B0E72C41CFA5024F5B016DC070C01F6C67FC29AA4AA9014F3CF5CE69FB7F88E0FE14C407193D3D734D09BD453F2305C96C8CEEA4DCAA42918C8E39A1B1CF3D29C84B6DE3391E9D2914920CE00F527A7B52B12580C6769F4A463CE39FCA9C01CF3C5340FD455519F71EB423A90F85E8D8CE3AD0382DCF0694601232051616C0A4B7623079C8A3839200071D875A7067D0483A953D29BC0041033EB53AA2B41AD23200176907D01A88E52842FF0E307351E4E4EEC714E7D040A6E0BF867914C0915DB9DA47E229ECE4BAEFC6E209CD56591BAAF23BF1520724F009F71DA8B0C994F24E33F5A5563F37201ED5123E3B75EB46065DF38451EBD7D0546894E4C640E0920F069C1986DC13CF53D699BB0006C671D684F9988E7838A011386E40CF34EC96DBB8170075071B4FBFAD40ADCE548E0F5F5A707600857F973E9D684869960120939EBD4E334E56623BFE755FCCEDCFE54A67D03A32300E7D32282AFD4B68D80739A4DD920A9239AAFB98B9059B8E83D29C926CE460F181919140B72CB10497D043E5273B47AFF009ED4E2E002777D016ABAC8C00DE412382718FF00F553FCFDA0678E7AE290D123E7CBC2B81D320F3919A71288C5172107039CFF00FAFEB51193706048660D8539CF1DFE94A1F83FE140C79C1E72734D7D0479C027D314DDD8C75CE3078A6961861CFCCA475C7E5E946E17245208C648E31D69D1B81C8000ED9E7FFD75116C755200E0E686603014FCA077E280B932BAA950491938CF5A783C8623F4AAEADC91B82EEE464FF9CD0B2B8F423E949EA3B967795CE5B8C73C74FF000A7823EBED9AAC257D05AAC78CF233DC538393B99B18CFAF534D0163765FE50718E99A5CEE6E4EDC0F4EBFE7D6A3F309727B76F5A5DE1FE6447D053D0FF5A185AC4A8CCE9B9B7D057D0292B9C8CD7D05481549650547AFF9FC6A25254E58F3D319E29F83B48E4E7A6076EF4B61DC9964041230768E707A0A7A3024F183EF55C3AB30CB658F0323934F572E1B1202A4ED6E3FCE280459DD84DA318EB4AA78CE4F3EF506FDBE676D9F7B9E47F8D3A262E85816653CEE2B83F976A41D4B0AC32003D7B938A7EE7D0572B8DC3A64645560C483923029D1C9938CFE2299577D04A9DA3852318EBCD2BBA6DF9D4B20C640EBFE7D01EABA48AF838230723B7FFAFE94FF0033382B9E0F3E86811282C013B8671D31C52BB2A0C961D381DD8FB5420E1784C31391F3678FE94A24073B97F2E9480941CB15036B29F997D0FBD206206FECDD0FA8A8BCD7527D02CD6CF77EA5BEB46E5272B9C63039E829A18F2490CA08DADCF2BC8FF0A18E71F301B4F5CF5A8D9B0327BF7C521660A406556F5619A64D8919947D059704EE19F4DBFE714DDECBC73C8EBD298F28250707048719E6A2697F8771F5C134AC087B024A967E99039FF39A6172A7924F1839EFEF55FCF48C331278397D044E428FE9EB4C32064043673CD3064CF381C9F5C66A22E19C10181C1CE4E73FE151B3170B85C1079E7BD22B6D6DAF1B16618C03823F1FC73409751F812643004641C1F51D297C9DB1A74F99CE32327D01FF000A7A63014303B4EDC814E8F7E708D863D38CE052BB1D90228DCD825973D7D3DAA45037838E4E314D4F9540237331E703A9FE94FDA581C0191CF3DA8D0370450A8A3CC0E73C103EF7FF00AAA7F2C322B4619B270E01FB87DE9A54ED0C616C1C056C63FF00D74E0A5A403073D7A714581682C49F2BE4F0093E98FF00EBD3D70087E76900F4CF14D041C96C807AF19CD0AAA885C7CA0809CF38F41FAD3408937292DE5AB824F0C48E07D29630CAC017FDD838F53F534D4470486DA41FBB8FF3C54AA9B3E53C7E39A0685895401961D3E52464E2A407602DC0E39E3F97A53172A000411D1707AFF853C67FBA5877C527610B19FDF4729DAC1411B5864E0FF77D012947DECEE2C40E1B18CD34862EEAE0864008181B7D01BF1EE69C0150DF749739EB8DA3FCF6A2C03A348D43FEF101EA413C9A18B3E151589032475C5348F90A6C0FB87D01E600FE94E07D02CC2401BCE0F03F53EB434171C80641EC0FCC33D6957D02703B31C77C76A60C678E46376EEC7E94FC8DFF003060BB32B818DE7FA628B205A0D27B7D05E063838EA7BE7D0168CF2EF86258E793FCBD2977190F390BD81E7149F7491B18A8E3228B0580E4CA00E0E09DD8E9ED4F0C7730C0D87A1C60E3DE9A07185607F0CE7FC29769527720E3B30A3A0060E0EEC6D639031CD2FCD90080475A69C00A5831DBCF1D4D3B23760F071C0F5A6081994FEECB85DCC32D8CE29A03066F90EE383834E6076E080580CF4A136950EC7E6238E320FE343121586E63907E6E7AD2AA49B495507D01F1C0A440D83B91948E848EA29DF36D2DB70AA3AFAD2182A81DB71FEF74E697A47F32E483F773D6AA7D034D27990A47C6586411BB783ED56A4440E554FC990157345840AA59176A9C8EA08CE4D56932642540C13D09C54F232840BE7D02B2E720A9C0CFA1F5AAF8DC718C9270003420F218FB467BE31D4E6902EE775EA547618C8A490090363B8DA71DA9C0EE0C77E55557001EA7FAD218A5DE552D231DE08C6140017D013FFAF519EA071C9CFAE694BF18271918271460232956DBB06178E94098D7977975561CB7CEA474FF000FAD539D950A13967D05A6339391CFA8F5F4356F8DC4B36011863E82B32E24DCE5DB038DAA3DBFAFD6981526243101B1ED8A843050DD49038C1E9523825F3B874CF3C6454476C8CAFB79557D05095C706AE28CE6CB56FBAE63912E648DFCC19DDB307E955523B8B0BA83ED1936BC93E51E8A3D3D0FB57D04770D09543B40E99239FF00EBD5C49C5C40629151867E56C6368F7F515AA3016229B32435C29EA226DBC7D7B7D6A9496C2DA46B98261C80ED972768F4F7C77A74B1C968EAD0317503EE8385C7A522CBE615210602F38190280DB608A68DDB7CD2792B2360B11B464D346C058302C3B0071CFA93DFE94E999662C246DFC065079E9E9F4A88C53C71FCB731CA9C305EA501ED8FEB427706EE02DD1E6DCA58161C807FCE2985598ED0720F519CD0B2BC73A11F21F43CE4F6FF00F553D58658070ADD4FB7F85161A7A110431EF4287918618C63BD49F6989D860FDD3F3281CD4D1189658FAE178E4FDEFCFAD3598B44A4C5B5D589DE0751E9FF00D7A5D47D033520B89525055034AA8F92C8D8FF00F57AD32D0AB3C9117D04CE9CB485303D871D69B7107CD88A258C641EB8DFFE3F4A7C65543704313961E940D589B70DA4F998C7BD2664019626CA39DDC8CE3FCFAD322276976C1403D39F6E29FC03F7420230067342426AE3911C070B2B85C82ECA3A8F7F6F6A550A637D0455402DF748FD698F0309F2ACDBC29E037F9152BB26F0720B600031D29D84DD85F215B0D13EEE40DA3DE9F0C0CA73B519323A7F08F7A7438DE370E117903BFF00FAAA48DA02106FFDE365D31D1C7FF5BD7D0589646A991BB11ED618C0386C7B0A6C7D05F8326D0DC30518C7E7F4A717597CB9226E4E771F43F4EDF4A40F1FC8F8214F1F29CB73D7F034AE0D1590B37D02A895F6B601DCABD79FD334F2ECE243B49D8D9C01D3DEA41164F2A18F500F1C531E3F90950D1138EA723FFAF4869F533DE41164B646064E066914975EB8DE3E6FF3DA908586266423E5CB1EFF00E7E9527D0518C648DBE628340ED76087702BDB24AFD3B52346DB479A195C7F06704D35CED5DC091834EFE3059B0076273474B8AFF647988989241F2824E50F7D04BF5F4A600013994F4EA4600FF1A6FCEF280186D19DD838CFF8D232A9DCA49DC471ED48A687BE3009046CE3D41A8C21F2D4EDC86397FF0060D29728EAEE506E1CFCBD7D012925DAC410CC361CB71F5FCE84569D44CED0C573BBA93DD8D36270CA776010327BD3DC02C7E6214AE7763005319571C81F95210CDBB81C8F7C75C52F00E73DA9319181437D05953B94371C03DE992B51C325895259C8C81D69432ED0DB5995871B4E01FC699953287D048D818C73C67D01FD69E142A6131C74E3A522A0F41F953F2F078EE69B19CB1381B71D4F19FF003EB51A28006E62431CEE1C6CFAD4AC3E42F904671C1A3B86E275E83DA8621483C0278EB4D39539EC73F85210E4F9842E1C6700E3F1A2C24F71007D0500E4851F7A9CBB48CEE0C3EB48A1804F98003AE4649EBD28DE59B67CA063238A452D0695DDC8E707B5054119EAB8F5EB5205DC8DD3E41938EC3DE9817E666209C2F4CFEB420690D44CA97D040800F1CF5A508A2371903272691E40BF7D01803EE68DDF291D72286C4A3D455930B8CF207CB91D294E3033CE076E299B97084AE7248CE71B7FC6937E78C0C1F7CD22D0E603A13CFA6690A9EA7D0349F414E704AE47381CF3518E1C6E5C9C7D01EC75AA2159EA2E0951D8934AC19981C0C01E98FF00F5D0EEA00600201CD23120962DEF8031527D03B40C71C63F3A36E2147D01C1839EA38C50EA5582FE749CA290A09DE79C7F3FFEBD3255C7042FF2E40CFBD220DCC46463BF1D4D227C81886CFA646714E4190D93F7BA8CF1490DB48798F00F2318F5A6B364617E6C9C64529201E00E829B20720ED5E472323BD35A83761C2464400E7D02DAA390EF788F7D0577773F5A90FCDC0FE1E0D46395E4739E98ED486983E0138E9EF4C2FF002E4AF4E7AD2B72A4EDCF1D293000E142E7AE28B05F7D0206E2738E28CE082B8E07229A411BB9E9D3B522F03A7BD051286C29CE0D4AADB1D48EA369E9F9D57D01C581CE39F418A456EA0E718340169BE76639CEE391CD7D05336DEC48F6C5411C80AEDDEC58FA8C629EAD907B76E7BD204C9578CF41CD387CA3838EE3351705460E5947D285F9F70CE40E4D20B9206C039CF3CF5E94E675DD8DDE87D6A219C9E98EDC52E437418E3D734D022657251893919E39A1242141279C75C7150E4E02AF4C75EB4E66F91429C8078E7B50177D042BAB021581C1E7B9CD3D48C64819AAB131C0EC71CF1FE734F5707BD1B1492EA59DC5D0AE71C839C63A53B239208AAA5FA82B95EA79C5488EA4AEE00A60E46714813240FC739CFF007D0537E08C0CF7A8F3B982AA1EBC03D69A397D03E718CED2473CFF005A61F325CED539738CE4EE39A4CF4CB0273C7BD4795539DA01C75C526E0473DC71CD207D046E720BBE32DCF4C714BBC15E78A8031C28CF0A30075A76E207079EE2A6C34C944980402081D463269E8EA5861C138E99AAC1C004719CF34F12A11F7011DF9EB54AC0A44F1C9DDF2013F954C92296EBF32738AA91C98393E98E7D0129D19544C0E1718C9A43B96C3A90473B81E734E599181DD21DDCF016AA7D0481B2379C77C734F8C80AAB24EEC7B6E1D29A04590A1C48A7732B73C360A1FF000A76EDCA4ED057701C9C7E355C7CA4306519E08EF4F0C085CF7E7E94865A42307AE73EB4A19CC818E5C007BF7FEBEB55B76E539E33E8719A7899CE407233EF8A5CA3260E006E09DC31C1C52F9BBC11DB39E98A883103A7D3E9FD69E67D03C016C0E3A0E00A7D040BA932BE783C8A7860D8C3E02FA0C67FC7EB55C498653C120E719A50DD09C671DA81AD0B01D49209DD8EAA3AE6857D04428F9067A9271B7FC6A159942F1D73D69BE76E08C5882464F1D3DA96E172C097271B371FEE8EF4C0EDE5A336D8C91C64F3F8FAD40D27BE4939CD2170403C6470063A0A6D089F79E81B713C923BFD3D3E94C67539660064E720D55372CC02952B93F2ED1C91519970141E001C8CF6A7602DB48C8B9190AA79247AFBF7AAED7D05F2AB32B05E7E41C1FF003E95594313CB9CE73904E290C11B8FDE03B47A1A771589CB82589C02FD7D01E99B64490977382BB80DB80052A451AA865CB464E0127201F4A9D0B121F7B8DA7851D09F7F5FA52B8C6A056CE739C6073528500B05070871C9CD30062598A8CB31ED8A78DAAA49738FE204E5734C13D04DE000A1416EBC75A7C7E79CFEF95547F095C91F434E282376FDDB46E705958636F1DBDA9D18C3EEC128A3E6E3FCE2A6E21C8A237D04EECE08C20C72327FCF5A919580276E573B7D029E951123692339661D0F514E675518C919FC68650F06505325700630467FFD5526EE155506475C9EBFE7D2A387F788AFB4F232463047F85490A9049C2863DF1DFDFD69A625D490231E84024F1919E6A50ADC22E0BEDE77103247F2A8362F24280C7AB28C126856647D03FB896E31CE7EA7DE81DCB233010B80D819E7A509B4B281F741E8A33FFEAA8A1C7D05B2AFCDE612DD7247FF005AA5FBEB991826D51DB03F1A34100545770BB5867D01719F7A7FCA46E3C63F1A8962CE0AAF1B7EEA8E33520404E700F1C0CD2EA171CAC4E46182E7239CFE5436D2B91963D3E65C668519C8201FC338A525F037364FF0FB5340F61C0120804600C9C9C504B05F923DFDC0CD28DA414653C8E1C76F6A722E191432907AF3DBFC68631300270763646D51C8C77E69CC8D248372052FC000F1F81FEB512B171B8FC8470430FF003D69DC469B9A40031EBFD07A51D448738FDD9F2F97C8EFC629B2FDE548DDF2C7AAF23E87DFFF00AF4A50B1C2924FA0A6900065505379E71C11FE7D01681771C3962B90A71DC66944654210DE606F95893DBFCF6A4DE0315CF5C03EFED4BE58036B924673F29C526C63936E372B301FC2C47F3A5F9704B0C9272DB4E3348DB59810AC368C72D9FF003F5A5037B00BD7FAD08436647D04BE7D021001DAD9F4FAD3B2338C83C70293EEB70724B01CD076B31D8769FE2DC3A8FE955A008808187D04CDEE4D3BEE81BB3927000EFF00E14D4652323D7A62A670B1FCCFC050011EB4AE0881E1097D011CE1817438420F7FA76A9115149524FCC73C0CE2850513CBE0F3BB9E7AD02468946C20FCD963B739A1821AD21776257CB032A588E33E981DCFFF005EAB820264A939192B9E9F4A7BF1116503E6391C6E150B3EE87627DE0BC647DDFF001A43B0A3321187E7FBD9031464349F30E73F31A42EA63DAC187D05A804F4DC7D0169B1E1238D464B1246739FA52131CB9181C11DF3CD3109CF51DFA8CD3998027E4C83C86FEEFB7FF5E98CB80DCA9208F9734D7988617561D431ECB9E4D655C4B97D03CD86C8E0F4E2B46E599447BB0ABCAA80319FA5645C1DC46F05980E187007E142434F42B01B2129B59C1937F5E87F1EDED4E84F98E012791C0208A6248032EF8589C77D03D803FC6A76B279A3052E3CB249D87D014FA0FE75B256316EF725B8297487CC8CF981472BF2E3EA31C9F7AAD124D632149558A3000381C01D969914B716CA23B9504EDC171CF03B93DCD5C8EE23286363BE393F842FCD9EC7F5AD0C9CB519BC3A210C1E23C821B231FD7D05ABDB36CDD11DAAA338E9C7B51340F6BB7ECF87423385E36D2452B492107D02053AA93C038CF3537069741158C60EF1900E17039C7BD4BE7A2E36AED27820F3814E5789B0447F786460F4AAE6D58CA7C90AC5864827000FF26804AE58F976ED50AC1BA77351BDBC7BD728D9518C83FE734D459108530286C64ED3DA97CC0223233027B1FF003D6841ADAC214318F99C337B77FF003EB4E2EF1C05C647196F61D29A8C8CCA485672339F4A74AB14B6CF216DC908F9F9CE06684824B47D0548C5DFCC39665E0719FAD4FE7D02960A83273F771F7AA1811913F787248C826ACC72AC60658AE07CCC471F9D260926246819D012AA1D4E0F519A548A4488AB6379E723A31A8E5902C8A3CC668D46D451D00A7873B15503FCBC0503000A608955233C0C91D58B7353243F7E388A37963E6C1C007D05A6FF00BA18956E98279CFF005A7A6E5C6C20B1EAD9C6EFAD3B92F77D0405DCCC41F9401C74E94F991D30ECAAAAA370523A8F6FCE9B31084EE9143601DA7834DB742D2190CB900FCC841C39EC47A62826EAE2BA7D0582D1B327CD82CA321FDBF5A8D4107124654FF0F3F787AE3D7D054110496452ACD97F9829C6E3FE3EF47D052BCF0B602957C3E7F897FBBED40EE468A221B519875E739FF3FE4526E6954F91E531C020B3607E34F304E626604AB020FCA7F873511C90AA83E61D463391DA9345AD8CF006177D058FC6C662705477FCE9E992F83C03C7AD3231200CAE33DCC839248FF1A14B3F44FC07535286D751E54065009C91F3023183ED4D770AC1157A03F4029C986951C80C98CF5EA7B714A4067D041B11E13040192D9FE54C495C66F419DC32E00FBBE9FD6894112119DC10FCBB48E4FF005148C84B93F2860A0151D3FCF1D69141501474518033D28F40F51C0AB742338E78A424040809C28C727AFF008D26E0010186E3FC3DE8DB1CC51A193272738E47FF005A95857EA8607F4538F71D69097D04833D71D7D68061018A8704E7396C85F6A67D05799D73C8F957355604BA8ABD70A327193839A442ADCAE46F1D4F4A9163C0DDFC6060F1FE7F7D05467D05AEA0BE33FAD497A2D509B4E769E40230D8C67FC294122691723E51C1C7148ECE3055B3818231F7BDE9C1946776707A803248FF003DE92DC3A0DCC78255B771CF39FD3B522B2B29231B475EDFFEAA95046F8588F96B8C0DC3FCE6A385B04B104AB647CC314EC27B06EDF91B07FBCA7AD399B7F2FB7763920719FE94056DDCB9284F208E9F4A6020F4076FD314207A0A58F3BBB0E3E94E54ECA0678C73D6A194BB3A150C703040FAD4CEE0BC982320F4CF4A7D042D58D2C1D1D71C74241FF38A4E7712589278C11D2958840CBB49C9EA0F4FF1A6F080C9927771C1CE3F0ED4ADD87A2D188A181CE0151CD2ECC28C9EBEF9FF00F55293BCFCB92B8E7239A52136E410771EA284852D3623619FA6687041FBA33ED4E5053A9279E33499C0604E71CFE143438B7711B3B3FDE1CD7D05C876B7718E99A6B922360090739E2953E51F31EDD6927D046A904E30371EBCD030318391EF4985DA3805B8DC3AD295C29500C79C95DC739A4087990E4F276FA669833C6471D6839386CE38FD69C8A4AE71C7AD0C109B40CF1CE281BB8DCBB491D3D29EE3A81D8D05B6F01B9AA26C869E461BFC29EA0E14FBD272725F04FD2950B1F9B86C75C1CF349143548DC547F1034C4276FCDC1A0B6D28C41F98F4CD285272FBB27FCFE743560524C6870C4AE0FE34CC71BB27A9078A715C7219BF114CDBC9C77A34003C9C71F88A08F9703149D334121875C73E9481089F2D21F9B27343639193F9D2023140C7C64951C0EBEB4F62723691B475CD47181ED5260EDCE7A71D28014498207A9E68136D396FE551F6A8D88CF073CD00594995C921B0BD4961DAA5C90720E0E3D2A92962DD803D78A7A487B9A00BBC60E31C8ED4C40028E4EEFEEFA536DC8646284EDF739A9400CBF7B140C407824F1838E6840C0B12C0E47181C50141E1B38FAD001E791D78A007A162B8CE14F6CD29CF7009EDCF51FD7D052322C67258827D01A9D9040C90777039A4098E24F427FA508C4AF427BE3D298300F5E69DB99D8E73FCA8408507B8248C7AD019B7E77718C6DC714DC9E7838E99F5A5140D31F9E08A549082074CF7CD314B609F941EDC668625B00919CF618A7D0434D587EFC93CE69DB9700A904F438ED50824E76E0107BD3C161B895650C31CF7A361244A877D05AE720E4F19FF0039A7063C7A679C0FF38A8F27D3A50188C1071C73487E4581203D083B78A5070FCB8031F77FBC7D01BE957D031B3C8C75A50720E7D7BD31DFA1651C1C9F9B83D09EBF4A7ABFAFF3AAE180386C01EA69448CA59988280761CFE7DFE9421B7D04ACB85CB723DB8A7A9DCDF28236F1D7F9D5457C0C63D3AF7A7EED84ABEE1EE0679A7D040AE591203C039E7AA9EB52066E770C73E98AAAB2347951850460F1CFFF005A915FE46058124F4EA71458699737B292BC8C7E348CEAC08707AF638AA8D72B1EE3CF3CFD4D462E537D044C87EE82AAA3EFFF0086292426CBED29321041DE79C7AD304DB97D0211B646323FBB5444C5B01931B7F8B392DF5A4706504E58293CF38048A00B5E7F550AC0A9C1C9CE6A379989237907039A85488F8E430002F3903FC69F146E4FCA3200C927D28D86B61CCEF2739200E09C633F4F4A58C32E06F3C0C0E33C538018CEE3C9F4A030DC403D4F00F14AF70F5240300D3900276E4A803258D468093C9E33D29E321885071DCFA531EE3D700B95E4BB6EEBF2FE03B7AD3D588C1C7F5A8C6719DBDF8C5389C48AA1B270782303F3A5710F8CE188C8C11CF39C1A50E9E66032B03E873F9D2005B0BB941CE47F9EF4A91F3F7D04611D882D91FA9A2F61EA488DE628D80FCC78DDC922977EF190EFB390768CE4FA7BD2449B58B1CE7FCF4F4A91140E17D7BD00987D0571D4F07A62A644091154641212497D04320D22FCA8C0A80F8C839CFF00FAE9410C013839F6A064881708CADF7C02294EEC297D04CC437420119F61DAA2258B6D0BD571BB3D3F0EDF5A572446D27500763C9FC3FAD16B08946477233E8682CB02798EEBB17BB9C7E74ABE7D023ED48E4076E46E7CE063BF14E41B88E1580395E339FF001A068963620B131A2B32FCDCE76934D8956327CCE8AA327D02A1F4FF00F5D2636B33393838CE4E29C318E06727A1E29A42EE480EF883E59149C707DBB7AFD69A8F840847EF00049273487E55209FF809E2978C2EE2AA48EFFE79A5610F04798BF7B7039F418FEBF4A551CAB07D0436B646475FF3E948A98623CD42403C608C5206C8042B723A1ED4C63DF003A107E5607247F9FCA850A0398D3E573BDD946067FF00AF4D570C13F78AEA413F28FBA7D0FBD2CA56458900618420EDE39CD0038B7D058DED1A903807BA93FCE94E4804907231C0C0A546048D9195E36E1CE7FF00D748A3687D03F890F1938C6695C1067D023B7E6C1EC0E2907046CDBD3AE3257D01A8507730087D02FBD81FD69559B21515403D8F5CFD680428CA93B467B9C9C53C70BC9A62B2E4124654F4FF003D69E33C93C81D39A62EA323C91B7786CB7EF15874E3B549C8C82179E460636FF8D3573BB1CF3D7D0540AC4A90A18B0C000E41FF0038A3A00D237D05CC09381DA9AAACCA40EA45399D98EE23BE3818A4C8219718C9FC68E80813E7C158D8B019C671BBE94E4C34B9F99B6F27703D7FAD302670ADC851C311D7FF00AF4EFBC14991B8CE01E98FE94842A384C16F989E428E0BFD29ACE0E0AE4739E4671FE3F4A7A943277D05C48C63E5E9F43DA9937CD0E06092C33C60803FC6982215F9582E402EE5B3D31C738FF0A89490DBCCA8EFD09EB52492471E09DAAA08C0FF000F4A84162F2071908701B18E3FAFD68EE37D020B12B8276465FBF4CE3FCFA504803254EF27D723F2ED4004A9F9CA904738CFFF00AF3EB4A58AF21769C8C1233FA7714806157D0576F03E507006298C7018A36C63FC429C7E68F729DAFBBD3A8A8E518E0360107D02681D3EA7FA7D01684051BC93046EC10475C93F90F4ACEDEAEE7E53B49F97DC559BC99829D981B86038EA3E9F5F4AA6012DB87623AD5C512DA1CF1839D8D851C618E4D4709CB8501D67DC3E51CEF1EC7D054171BA421E211966CED07822A5961B6BB8C47223C726E0C855F0D9AD52309B7726768D97CA7D01DF2F0BC6001EE0F423359B1C735A160B333A9249247CC47F4FA54AEF240EED3317F34F0719C54AAE5958261976E5811CD34AC43911C574ACE1C0F307501BAE3B545F67490C8E5995D9F24818DDF5F5A56B670EB32ED195DBE563906882EBCC8A25909F309C3E0FCA9EDED8A56B0277770820B88A561300627FB8DDF3EFED4DF3957800FE1530721B2D1B8DB87D05D9C0CFF5FA7E34C922C3FCCC0B9E98F4F7FF001A1F994AD6BA08A46DEEF918CF43C52344AE8557009E79FF003C0A867D026621B6CB8257E5C8181FE39C53DA606462B0B6F23E6C74FF00EB504AB825BED932011347CBE780A71FAD44F23AAB218B3E60DAC33D47F5F5C559B421EDD480BB5C024E738FCFAD4370144E11403818257A669150D6E471C6A54219033601719C127D017D01BE9565A404EC7202B71F4A8B2461080723B8E7FF00AF4E4C79BE5A72C57201E38FE94903BDC4E43ED3B76FD79CD384ECA30A8D20CFD00A8D14B03BE50CD93F3C47E527DB3E95656545285A2DC00195CE33C7E99A64ECEE06597D03172998D785E3A512C85511954360FCCB9C71ED45BCAACB9C100F5527953E86A583A908BBB8C74CFF009FAD341E68646D148E1A34F3158677E7A7F8D4A6710EDF31084C1DAC4E067B7D013E94C8AE44AA3298442572570091F4E948F3492DB791247E4BC9838072491DB1DC1A7623665810BA44AD71C4CEA19994F39A8960BB79BE489659C7DC7D039B72B8C9E7BD0F11660B0C8C030F9B70CE0FA0A467907965B7B956519CF3C74CFE5422ACB6190C6EE865571C9C14079C7AFF00F5AA3876B7CC1583B8C90C73C76E3B74E953B1F9DC067D03D9CEDC633EE3DA95E40A86460B96C7F0F2DDB8F5A41189944B797195207273DC11DA984957392153DFB0A1DC342ED1863B577D04318C7F9CD29392921F972BB40340FC80F31E17EEF03834AD2089B9E474E9491E55E33BC7CA49258672314D8C36C24F2719FAD0B51C9589B3F23484E360C839CF14D2D1EFDB246222472776E19FAD3065D30C3DB1D3F0F7A73A10FF00236E046DC6280E6BEC210DF37EF11950E080B87D057D01CD26D1962EA06D0006CE3142F9830502153F2904F5FF003EB51BA895414DC40F98E723F3A15C4D2B58914F45DD9CF239E334D61B97038E3B1A73BA6D52506E4E47B7B8A6C443008CDF313D7B9A4F7D0284158616564001652471C62964230381F30E323A5246ECF129EAC18AB647DDFF000A736E2180232463A67F2F4A4525A1196E724F1DE9F1ED767D0483A8F4C533001C6793D453F2540C0E99038A18456E7D05F0091CE3914E8B009C8E4D42197706C1C12172093CF352970220C016C7381C6684AE1B0AFBC0C9666C714C7C671B72BDCFAD216620924063EA338FF1A703B81E41FA0C50902927A30217697D0540C720629B818CB649F40707EB411B405E0834C20282DB8856E33D706931A2493E524F960AE7E5F9B27F1F4A8F25BE6FD0714E6409261B048F4ED4BB832E7A04E33E942D04ED2114E30BC021416F714AC4328520AECE4734C2E7697D044FB607F9CD09217D041874232323140E3A802EFC7D0590BEAC7AFD3D3E942E4290FB73DC039A728043360F03D78A69403047403A517B83D04DA777E03DE87D054B127B7BF5A55EA703241C83D714C67D01A40DB9FA718A7715B41CBCAE7A1C5017E5C1C8CF34AB82A48E0F704E71483073B8E3D31DAA595169898248524F1D063AD29CF4CE0838A6F0E4AAF4C63914F1C8F5FAD1D010F2DD07A0C73FE79A46002156C36EEFD3FF00D54C1BB7E402768E98A70F9F239E284C1BD454FBDD028A54F9410318EBD334D078E780290A96744DA406F941C704F5C0A7A095EE126D200183839CE7AD3475C63923B53491C83D73F4E68F9977138C1E94812D5813C9E9499C9C9A6A9180BFAD29F93823383DE8B0EE267E66C1E9C5239071D3A51BB82718FA76A6939603919E94AC34C4E6900C934E38DA3D4F5A6E38EA734CA248718F7A7377C5321C6E058FBF14F719241C827F952B0AC261707393E9838A85F9EA7D0572C0700820FEB50C847EB402101229CA33D1BF007D05353C1A91718EFF008D31962D8B046C02541C13E9ED53F1C76EC3DEABDAB65CAF18CD4E37104EC27D05410EE3667D01F18CD26EE470290609231C8F6A5380C7F4A0695C6A63790E4F4C73EB4ADC13960A17D7BD07072727F1141E8738E6810D5C9248FE1E0F38FF00F5D38BB0044606ECF7E69AAD8CE307B63A50B80CAB8E3BE3D2812F21FBC9D8A4E401CF18A3793C718FA734C242E00208340191D7007348AB0F279C8ED4AAC09EC2A25CA2EDCF1D07BD28E98E69889148E4EE07E9C53C923E5241EF55C7CC01C9A5C8D84A9079C12280B964120E369CFB523654E1948FAD570D8851581DAC38EE69CA76F1CFCBC0E7A509587B93EE05319C9E39F5A77D048170783F535577865E18E01E4814BB8E7681D475A00B3BB0300679CD209308572703B1ED558B73C9E452B313963DFDB1414D1644A59582B65940279C53CCDD36824D544663953DC75CD018FCA7276F5145982F86E5959C74657D0433D8E290BEE50B96009EA0F5A8039C9CAE3F5C5286C95232430C8A1B1D9160127F0FC69092407D054738FC4531700B1CF07AD394E060118F61DA95F512241963800E4F6CD2A2AF2589D801E41C63FCFA546A00C0E319E7DE9C113A95E0700038C7B0F4A2C3DC9782D9CD39C286DCADD390738CFF009F4A6ED0A3391B719E7B7D017D017EB4BE5AB70C8187A119A4C6934488DF20278247DDC5008DD8249E3D3A5205E0003152C71E531926840118CA0240CE39A715DC36FF000E467B53557D02CA53BF7657393C66A445C27CFF0053834EC0BB02E08C8C70781EBDAA6006487D04AA7D0148E29848C843C6067E809A7A138C1E48EA714212BDC971F2206744C9DC18AF51FD6946D560227D0457A6E279A8B2BBD58E0F1B578FEB4F47202EC51F28E370CFFF00AE868A6393E6CFCF915220DCE791F3F07351FCCC0E71ED814E57539F9586391DA9304AE3F0CD039F471807F887AD037329E36FE3D695479AE58F0000091D050A70CE00C856C1CF14441A24560CEC149DA00E01E9F5A1541248CE73D3DBFA7D0129BC05DD8C638C0A7292766700679E29A15C995063238C1E4E7AD3829D8446DF33306CE338C75150A3B161B631FED1638E29C18A65B77D01D19C9E3140D31ECEA5FCEC0DDB707D01C53972EC028393D2A3C103EE0C7AE69EB1A90321C26EC13BB9E3D0F6FA501DC7A282AC7E6241C924E73F4F4A7E422E490C33C6075A644D804BA9054F181D69D96DDF2B0C93F296E463D4FA7D01295C4FB833991895233DFB629E55896C9E4F273CD338C12B939393C57D0458656550C43E38CE698D0AA884190143EE0549C01CE714C0E438047CDD30074FF3EB4ECF2DB8E727E5ED81FD6810AAE015D8A07B9ED48140200F98639FAD37046338C31C74EA7FAD3B68DC15781801401804D164314EE2BB91BE51C601C0CD3B2100076E1B85C1EB48B861C903F0C53813B948006D1B46467AD021463E552481EA4F4A48CE497D04A3233838C7FF00AE94A9DC7A7079E7A1A11F233F73191F373FE73400E3BD50F0A4E391EBFE14FC7D056DCA33EE5C800EDDBFFD6A622E1BE4500B739C75F7F7E949B51989237007E539FF003C51605A8846D525FA923EE9C8CD1228DA57863C720F4FF0A71DB81D0632781819A8D09D81F042E704F57D053FAD1D41684A368007A9CE3348376CC3C9BD41C938C62850016187327B1CA91EDE9406E070093C8EF9C75FAD2B087004C44E4FAF5C7FFAEA29087D05770DA7F847F5A796DCACE460640071C31AAE98C30DF231DDCEF5C01F4F514C06EE8D19A440CA40DBB9DF2187D3B5370026411FEE93934D9194B336C209383C753FD69D9F9883838039EC7D01A90F60FBCB8C7069C570177BF07F8B3903EBE94C539DCE2DD22DC304039C81FCA906D2BE646AEBBB9C313C7AD4A5A80C73BE12C0B2AE33918E6AA5E4C1217088864906E40CD8E3BFD2ADBB464636FCCFFEAD87386F423BE71599793E5F703BB8EC07CA7B8ABB02294E7724310C92A7839ED51C4CC5983285C77D0508CE69C806FCE7F8B9C9CD4B35B25CC6EDE6347237DC65E07BE7D6AE28CAA3D2C23DBFDB23588E15947CBD8FF91D6A3B7696D6ECD9C84BB3283E732F19351199ED6416D33293B57E6E5739EDFF00D7A9EE846EA7CC3B76E08627EE0C74AD0CB99F41F6DF659D19E64DCA4B2FCA70C08AACB0496D23B40EA227F98E0FCC0FA7BD3248E4B1B8647406128241E583904FF3AB30CA24B591236432BC8A1508C9C7D7B7D2990D3EA560CCFB638DF2DB89C93EBDBDAAC6E89E157D03B8DEBC9E9CE4FF009CD44D04524ACDB3CB73C12BCE48FF003D6A08DA6548F7467E51B491DCFAD0C69D87AC5242ABE54824239F98E57F5A5463BB05021F63914EF3C00D840E09C8E7A7F9F4A6C6C5A2C1DA0EE27AF38ED4AE52DC690240323383C0CD3FE70A0ED550C3393DEA336F1B87720F1FC58C151FE7BD3153EC9133C9965CE58E7EF1EDF8D32797B163ECD19B69238210CE1B7F5CE38EA3D3154ADE4332991979CE3E639DDEA7FF00AD534932957D0581D5C74DE30D83D09A88191F7F7D05A0E380390477CD437629689A278C10439C0DA3206338A78FF58582919EBCF5FF000A84396254B12DB4924F7A143A48B1704AA0249FE2FF000A07163FEE302D1FC99C6146714F7D027D01EC790C73C6E3FE7EB47D05B29DE1C818C114F58D6562643855C14DA71B5FB123BFF934D333B8A2DC96D81944A47D01E23807FCF6A5F27F785CE739DABF3F18F523FA52299621E59DB9C8639E6A43BE553851B41DDC73CD3481BD04310E32C5493F77A7F9F5A48D584AFB08CA71B81EA3DA9406CF9A300A9C9714D54650010AEBB89F9873FE7D0129DC4B5258E49629236B73F3382370E4201D49A51236C28DFBC21B3B80C73FE79C5344AD1DDC4EC50C64323B11928A7D0129D12F9C8E514A95E30473FF00D7C8A1306BA85C090911F96CC817FD60006DF6F5AAE22FDD2B7CC250FC67918F5F6A9155597702D86C120718238FC7A546CE60DCE5771C8180339FC281C636773FFFD95D";
        byte[] bytes = parseHexStr2Byte(s);
//        System.out.println(s1);
    }


    //字节数据转图片
    public static void byte2image(byte[] data){
        try{
            FileImageOutputStream imageOutput = new FileImageOutputStream(new File("E:\\work\\cc.png"));
            imageOutput.write(data, 0, data.length);
            imageOutput.close();
            System.out.println("Make Picture success,Please find image in ");
        } catch(Exception ex) {
            System.out.println("Exception: " + ex);
            ex.printStackTrace();
        }
    }

    //字符串转16进制
    public static String toStringHex2(String s) {
        byte[] baKeyword = new byte[s.length() / 2];
        for (int i = 0; i < baKeyword.length; i++) {
            try {
                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(
                        i * 2, i * 2 + 2), 16));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            s = new String(baKeyword, "ISO8859-1");// UTF-16le:Not
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return s;
    }

    //16进制转字节数组
    private static byte[] hexStrToBytes(String hexStr){
        if(TextUtils.isEmpty(hexStr) || hexStr.length()==0){
            return null;
        }
        if(hexStr.length()%2 == 1){
            hexStr = "0"+hexStr;
        }
        int len = hexStr.length()/2;
        byte[] result = new byte[len];
        char[] chars = hexStr.toCharArray();
        for(int i=0;i<len;i++){
            result[i] = (byte)(charToByte(chars[i])<<4 | charToByte(chars[i+1]));
        }
        return result;
    }

    private static byte charToByte(char c){
        String chars = "0123456789ABCDEF";
        byte b = (byte)chars.indexOf(c);
        return b;
    }

    //16进制转2进制
    public static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1)
            return null;
        byte[] result = new byte[hexStr.length() / 2];
        for (int i = 0; i < hexStr.length() / 2; i++) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
                    16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }

    // 将二进制字符串转换成Unicode字符串
    private static String BinstrToStr(String binStr) {
        String[] tempStr = StrToStrArray(binStr);
        char[] tempChar = new char[tempStr.length];
        for (int i = 0; i < tempStr.length; i++) {
            tempChar[i] = BinstrToChar(tempStr[i]);
        }
        return String.valueOf(tempChar);
    }

    // 将初始二进制字符串转换成字符串数组,以空格相隔
    private static String[] StrToStrArray(String str) {
        return str.split(" ");
    }

    // 将二进制字符串转换为char
    private static char BinstrToChar(String binStr) {
        int[] temp = BinstrToIntArray(binStr);
        int sum = 0;
        for (int i = 0; i < temp.length; i++) {
            sum += temp[temp.length - 1 - i] << i;
        }
        return (char) sum;
    }

    // 将二进制字符串转换成int数组
    private static int[] BinstrToIntArray(String binStr) {
        char[] temp = binStr.toCharArray();
        int[] result = new int[temp.length];
        for (int i = 0; i < temp.length; i++) {
            result[i] = temp[i] - 48;
        }
        return result;
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • weixin_44821426 踩姑凉的老蘑菇 1月前

    这个是通过什么协议发送请求的啊,今天公司也扔了个手表给我研究

    点赞 评论 复制链接分享

为你推荐